Lot invoicing + Fee
This commit is contained in:
@@ -105,6 +105,39 @@ class InvoiceLineLotWeight(ModelSQL, ModelView):
|
||||
class Invoice(metaclass=PoolMeta):
|
||||
__name__ = 'account.invoice'
|
||||
|
||||
@classmethod
|
||||
def _sale_padding_lots_to_clear_on_delete(cls, invoices):
|
||||
lots = {}
|
||||
for invoice in invoices:
|
||||
if (getattr(invoice, 'type', None) != 'out'
|
||||
or getattr(invoice, 'reference', None) != 'Provisional'
|
||||
or getattr(invoice, 'number', None)):
|
||||
continue
|
||||
invoice_id = getattr(invoice, 'id', None)
|
||||
for line in getattr(invoice, 'lines', None) or []:
|
||||
if (getattr(line, 'type', None) != 'line'
|
||||
or getattr(line, 'description', None) != 'Pro forma'):
|
||||
continue
|
||||
lot = getattr(line, 'lot', None)
|
||||
if not lot:
|
||||
continue
|
||||
provisional_line = getattr(lot, 'sale_invoice_line_prov', None)
|
||||
provisional_invoice = getattr(provisional_line, 'invoice', None)
|
||||
if (invoice_id and provisional_invoice
|
||||
and getattr(provisional_invoice, 'id', None) != invoice_id):
|
||||
continue
|
||||
if Decimal(str(getattr(lot, 'sale_invoice_padding', 0) or 0)):
|
||||
lots[getattr(lot, 'id', id(lot))] = lot
|
||||
return list(lots.values())
|
||||
|
||||
@classmethod
|
||||
def delete(cls, invoices):
|
||||
Lot = Pool().get('lot.lot')
|
||||
padding_lots = cls._sale_padding_lots_to_clear_on_delete(invoices)
|
||||
super().delete(invoices)
|
||||
if padding_lots:
|
||||
Lot.write(padding_lots, {'sale_invoice_padding': Decimal(0)})
|
||||
|
||||
def do_lot_invoicing(self):
|
||||
super().do_lot_invoicing()
|
||||
self._create_lot_weight_snapshots()
|
||||
|
||||
Reference in New Issue
Block a user