From 5a9139c8a83f5bc4ce3b305bfcd0abe15505acbd Mon Sep 17 00:00:00 2001 From: younes Date: Thu, 8 May 2025 11:53:34 +0100 Subject: [PATCH] Added Employee Custody to Purchase Request --- .../purchase_custom_stock/__manifest__.py | 1 + .../purchase_custom_stock/i18n/ar_001.po | 3 +- .../purchase_custom_stock/models/__init__.py | 1 + .../models/account_asset.py | 8 ++++ .../models/account_asset_operation.py | 41 ++++++++++++++++++- .../security/ir.model.access.csv | 1 + .../views/account_asset.xml | 13 ++++++ .../wizards/asset_operation_return_wizard.xml | 4 -- 8 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 odex25_purchase/purchase_custom_stock/models/account_asset.py create mode 100644 odex25_purchase/purchase_custom_stock/views/account_asset.xml 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 @@ - - - -