Restore shipment method in sale when removing load orders.

This commit refs #26394
This commit is contained in:
Sergio Morillo 2023-03-24 14:33:44 +01:00
parent 886377b84a
commit 6d4af58090
2 changed files with 28 additions and 6 deletions

10
load.py
View File

@ -536,6 +536,16 @@ class LoadOrder(metaclass=PoolMeta):
order=record.rec_name))
super(LoadOrder, cls).draft(records)
@classmethod
def delete(cls, records):
Sale = Pool().get('sale.sale')
sales = [r.sale for r in records if r.sale
and not r.sale.is_origin_load]
super().delete(records)
if sales:
Sale.restore_load_shipment_method(sales)
def _get_inventory_move(self, move):
pool = Pool()
Move = pool.get('stock.move')

24
sale.py
View File

@ -76,19 +76,24 @@ class Sale(metaclass=PoolMeta):
res.extend(super(Sale, cls).copy(clear_methods, default=default))
return res
@property
def is_origin_load(self):
LoadOrder = Pool().get('carrier.load.order')
return bool(self.origin
and isinstance(self.origin, LoadOrder))
@classmethod
def cancel(cls, records):
for record in records:
if (record.loads and record.origin
and record.origin.__name__ != 'carrier.load.order'):
and not record.is_origin_load):
raise UserError(gettext(
'carrier_load_ul.msg_sale_sale_cancel_loads',
sale=record.rec_name))
super(Sale, cls).cancel(records)
super().cancel(records)
def check_method(self):
if not self.loads and (not self.origin
or self.origin.__name__ != 'carrier.load.order'):
if not self.loads and not self.is_origin_load:
super(Sale, self).check_method()
return
if (self.shipment_method == 'invoice'
@ -101,12 +106,19 @@ class Sale(metaclass=PoolMeta):
@classmethod
def quote(cls, records):
cls.restore_load_shipment_method(records)
super().quote(records)
@classmethod
def restore_load_shipment_method(cls, records):
to_update = []
for record in records:
if ((record.shipment_method, record.invoice_method) == (
'manual', 'shipment') and not record.loads):
record.shipment_method = 'order'
record.save()
super(Sale, cls).quote(records)
to_update.append(record)
if to_update:
cls.save(to_update)
@classmethod
def process(cls, sales):