diff --git a/odex25_purchase/purchase_custom_stock/__manifest__.py b/odex25_purchase/purchase_custom_stock/__manifest__.py
index 20fa79053..1435c1d33 100755
--- a/odex25_purchase/purchase_custom_stock/__manifest__.py
+++ b/odex25_purchase/purchase_custom_stock/__manifest__.py
@@ -16,6 +16,7 @@
'views/report_deliveryslip.xml',
'views/product_template.xml',
'views/account_asset_operation.xml',
+ 'views/account_asset.xml',
'wizards/picking_purchase_request.xml',
'wizards/asset_operation_return_wizard.xml',
diff --git a/odex25_purchase/purchase_custom_stock/i18n/ar_001.po b/odex25_purchase/purchase_custom_stock/i18n/ar_001.po
index e5d38f7f8..b6bb32ea5 100644
--- a/odex25_purchase/purchase_custom_stock/i18n/ar_001.po
+++ b/odex25_purchase/purchase_custom_stock/i18n/ar_001.po
@@ -380,11 +380,12 @@ msgstr "الكمية المطلوبة للشراء"
#. module: purchase_custom_stock
#: model:ir.model,name:purchase_custom_stock.model_purchase_request
+#: model:ir.model.fields,field_description:purchase_custom_stock.field_account_asset__purchase_request_id
#: model:ir.model.fields,field_description:purchase_custom_stock.field_asset_custody_line__purchase_request_id
#: model:ir.model.fields,field_description:purchase_custom_stock.field_asset_operation_return_line__purchase_request_id
#: model:ir.model.fields,field_description:purchase_custom_stock.field_asset_operation_return_wizard__purchase_request_id
msgid "Purchase Request"
-msgstr "طلبات الإدارات"
+msgstr "طلب شراء"
#. module: purchase_custom_stock
#: model:ir.model.fields.selection,name:purchase_custom_stock.selection__asset_operation_return_line__type__release
diff --git a/odex25_purchase/purchase_custom_stock/models/__init__.py b/odex25_purchase/purchase_custom_stock/models/__init__.py
index 996e4d402..b27f695ab 100755
--- a/odex25_purchase/purchase_custom_stock/models/__init__.py
+++ b/odex25_purchase/purchase_custom_stock/models/__init__.py
@@ -6,6 +6,7 @@ from . import product_template
from . import employee_custody
from . import account_asset_operation
from . import refuse_reason
+from . import account_asset
diff --git a/odex25_purchase/purchase_custom_stock/models/account_asset.py b/odex25_purchase/purchase_custom_stock/models/account_asset.py
new file mode 100644
index 000000000..7752acfbb
--- /dev/null
+++ b/odex25_purchase/purchase_custom_stock/models/account_asset.py
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+from odoo import models, fields, api, _
+
+
+class AccountAssetAsset(models.Model):
+ _inherit = 'account.asset'
+
+ purchase_request_id = fields.Many2one('purchase.request', string="Purchase Request", readonly=True, copy=False)
diff --git a/odex25_purchase/purchase_custom_stock/models/account_asset_operation.py b/odex25_purchase/purchase_custom_stock/models/account_asset_operation.py
index 088ca2075..524577972 100644
--- a/odex25_purchase/purchase_custom_stock/models/account_asset_operation.py
+++ b/odex25_purchase/purchase_custom_stock/models/account_asset_operation.py
@@ -1,8 +1,47 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _, exceptions
+from odoo.exceptions import UserError, ValidationError, Warning
class AccountAssetOperation(models.Model):
_inherit = 'account.asset.operation'
- purchase_request_id = fields.Many2one(comodel_name='purchase.request',string="Source Document")
+ purchase_request_id = fields.Many2one(comodel_name='purchase.request', string="Source Document")
+
+ @api.model
+ def create(self, vals):
+ asset_id = vals.get('asset_id')
+ operation_type = vals.get('type')
+
+ if asset_id and operation_type == 'release':
+ existing_releases = self.search([
+ ('asset_id', '=', asset_id),
+ ('type', '=', 'release'),
+ ('state', 'not in', ['done', 'cancel'])
+ ])
+ if existing_releases:
+ raise ValidationError(_('An asset release operation already exists for this asset.'))
+
+ if not vals.get('purchase_request_id') and asset_id:
+ asset = self.env['account.asset'].browse(asset_id)
+ if asset.purchase_request_id:
+ vals['purchase_request_id'] = asset.purchase_request_id.id
+
+ return super(AccountAssetOperation, self).create(vals)
+
+ def write(self, vals):
+ res = super(AccountAssetOperation, self).write(vals)
+
+ if vals.get('state') == 'done':
+ for operation in self:
+ if operation.type == 'assignment' and operation.asset_id and operation.purchase_request_id:
+ operation.asset_id.write({
+ 'purchase_request_id': operation.purchase_request_id.id,
+ })
+ elif operation.type == 'release' and operation.asset_id:
+ if operation.purchase_request_id and operation.asset_id.purchase_request_id == operation.purchase_request_id:
+ operation.asset_id.write({
+ 'purchase_request_id': False,
+ })
+
+ return res
diff --git a/odex25_purchase/purchase_custom_stock/security/ir.model.access.csv b/odex25_purchase/purchase_custom_stock/security/ir.model.access.csv
index 58c7a38c0..d6628a36b 100644
--- a/odex25_purchase/purchase_custom_stock/security/ir.model.access.csv
+++ b/odex25_purchase/purchase_custom_stock/security/ir.model.access.csv
@@ -3,3 +3,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
model_convert_picking_wizard_user,picking_wizard,model_purchase_request_picking_wizard,base.group_user,1,1,1,1
asset_operation_return_wizard,asset_operation_return_wizard,model_asset_operation_return_wizard,base.group_user,1,1,1,1
asset_operation_return_line,asset_operation_return_line,model_asset_operation_return_line,base.group_user,1,1,1,1
+account_asset_create_purchase_request,account_asset_create_purchase_request,model_account_asset,purchase_requisition_custom.create_purchase_request,1,0,0,0
diff --git a/odex25_purchase/purchase_custom_stock/views/account_asset.xml b/odex25_purchase/purchase_custom_stock/views/account_asset.xml
new file mode 100644
index 000000000..16a8a37e7
--- /dev/null
+++ b/odex25_purchase/purchase_custom_stock/views/account_asset.xml
@@ -0,0 +1,13 @@
+
+
+
+ account.asset.form
+ account.asset
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/purchase_custom_stock/wizards/asset_operation_return_wizard.xml b/odex25_purchase/purchase_custom_stock/wizards/asset_operation_return_wizard.xml
index 3c4c8bd45..1c33d0977 100644
--- a/odex25_purchase/purchase_custom_stock/wizards/asset_operation_return_wizard.xml
+++ b/odex25_purchase/purchase_custom_stock/wizards/asset_operation_return_wizard.xml
@@ -11,16 +11,12 @@
-
-
-
-