for you marc

This commit is contained in:
xtremxpert 2025-01-15 11:59:19 -05:00
parent 776e5aa8f5
commit 23113e9a40
3 changed files with 55 additions and 26 deletions

View file

@ -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',
],

View file

@ -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
)

View file

@ -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