diff --git a/purchase_customer_requisition/__manifest__.py b/purchase_customer_requisition/__manifest__.py index 62997ec..63bd0bd 100644 --- a/purchase_customer_requisition/__manifest__.py +++ b/purchase_customer_requisition/__manifest__.py @@ -11,13 +11,12 @@ """, 'license': 'LGPL-3', 'depends': [ - 'purchase', + 'purchase_stock', 'sale_purchase', 'purchase_requisition' ], 'data': [ 'security/ir.model.access.csv', - 'views/customer_supplier_requisition_views.xml', 'views/purchase_views.xml', 'views/purchase_requisition_views.xml', ], diff --git a/purchase_customer_requisition/models/purchase_order_line.py b/purchase_customer_requisition/models/purchase_order_line.py index 516f121..b5163ce 100644 --- a/purchase_customer_requisition/models/purchase_order_line.py +++ b/purchase_customer_requisition/models/purchase_order_line.py @@ -3,18 +3,64 @@ from odoo import models, fields, api class PurchaseOrderLine(models.Model): _inherit = 'purchase.order.line' - customer_requisition_ref = fields.Char( - string='Customer Requisition Ref', - related='order_id.requisition_id.customer_requisition_ref', + customer_ids = fields.Many2many( + related='order_id.requisition_id.customer_ids', + string='Customers', store=True, - help='Customer requisition reference' + help='Customers associated with this purchase order line' ) + requisition_id = fields.Many2one( + related='order_id.requisition_id', + string='Purchase Requisition', + store=True + ) + + def _get_product_purchase_description(self, product_lang): + name = super()._get_product_purchase_description(product_lang) + if self.requisition_id: + name = f"[REQ/{self.requisition_id.name}] {name}" + if self.customer_ids: + name = f"[{', '.join(self.customer_ids.mapped('name'))}] {name}" + return name + + @api.model + def _prepare_purchase_order_line(self, product_id, product_qty, product_uom, company_id, supplier, po): + res = super()._prepare_purchase_order_line(product_id, product_qty, product_uom, company_id, supplier, po) + # Si on a une réquisition, on ne veut pas regrouper les lignes + if po.requisition_id: + existing_line = po.order_line.filtered(lambda l: l.product_id == product_id and l.requisition_id == po.requisition_id) + if existing_line: + # Créer une nouvelle ligne au lieu de mettre à jour la quantité + res['product_qty'] = product_qty + else: + res['product_qty'] = product_qty + return res + @api.model_create_multi def create(self, vals_list): lines = super().create(vals_list) for line in lines: - if line.customer_requisition_ref: - if line.name: - line.name = f"[{line.customer_requisition_ref}] {line.name}" + if line.name: + name = line.name + if line.requisition_id: + name = f"[REQ/{line.requisition_id.name}] {name}" + if line.customer_ids: + name = f"[{', '.join(line.customer_ids.mapped('name'))}] {name}" + line.name = name return lines + + def _find_candidate(self, product_id, product_qty, product_uom, location_id, name, origin, company_id, values): + return super( + PurchaseOrderLine, self.filtered(lambda line: not line.requisition_id))._find_candidate( + product_id, + product_qty, + product_uom, + location_id, + name, + origin, + company_id, + values + ) + + \ No newline at end of file diff --git a/purchase_customer_requisition/models/purchase_requisition.py b/purchase_customer_requisition/models/purchase_requisition.py index f22d41d..33fcfa2 100644 --- a/purchase_customer_requisition/models/purchase_requisition.py +++ b/purchase_customer_requisition/models/purchase_requisition.py @@ -3,25 +3,9 @@ from odoo import models, fields, api class PurchaseRequisition(models.Model): _inherit = 'purchase.requisition' - customer_id = fields.Many2one( + customer_ids = fields.Many2many( comodel_name='res.partner', string='Customer', domain=[('customer_rank', '>', 0)], help='Customer for whom this requisition is created' ) - - customer_requisition_ref = fields.Char( - string='Customer Requisition Ref', - help='Customer requisition reference' - ) - - def action_in_progress(self): - res = super().action_in_progress() - for requisition in self: - if requisition.customer_requisition_ref: - # Update all related PO lines description - for po in requisition.purchase_ids: - for line in po.order_line: - if line.name and not line.name.startswith(f'[{requisition.customer_requisition_ref}]'): - line.name = f'[{requisition.customer_requisition_ref}] {line.name}' - return res