From b68a8d65982fb278acf850e68974e05554b5cdef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Fri, 26 May 2023 17:11:38 +0200 Subject: [PATCH] Deduce ignored sale quantity from credit limit Closes #12226 --- modules/sale_credit_limit/CHANGELOG | 1 + modules/sale_credit_limit/__init__.py | 1 + modules/sale_credit_limit/party.py | 4 ++-- modules/sale_credit_limit/sale.py | 24 +++++++++++++++++++++++- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/modules/sale_credit_limit/CHANGELOG b/modules/sale_credit_limit/CHANGELOG index 0966999c75..958ae4f3ef 100644 --- a/modules/sale_credit_limit/CHANGELOG +++ b/modules/sale_credit_limit/CHANGELOG @@ -1,3 +1,4 @@ +* Deduce ignored sale quantity from credit limit Version 6.8.0 - 2023-05-01 -------------------------- diff --git a/modules/sale_credit_limit/__init__.py b/modules/sale_credit_limit/__init__.py index 78da1b6ee0..8ebdad6e3e 100644 --- a/modules/sale_credit_limit/__init__.py +++ b/modules/sale_credit_limit/__init__.py @@ -10,4 +10,5 @@ def register(): Pool.register( party.Party, sale.Sale, + sale.Line, module='sale_credit_limit', type_='model') diff --git a/modules/sale_credit_limit/party.py b/modules/sale_credit_limit/party.py index 6822375bbb..0ecc449813 100644 --- a/modules/sale_credit_limit/party.py +++ b/modules/sale_credit_limit/party.py @@ -31,8 +31,8 @@ class Party(metaclass=PoolMeta): for sale in sales: amount = 0 for line in sale.lines: - quantity = line.quantity - if (line.type != 'line') or (quantity <= 0): + quantity = line.credit_limit_quantity + if quantity is None: continue for invoice_line in line.invoice_lines: if invoice_line.type != 'line': diff --git a/modules/sale_credit_limit/sale.py b/modules/sale_credit_limit/sale.py index d209f7268f..0fd0e0c8f9 100644 --- a/modules/sale_credit_limit/sale.py +++ b/modules/sale_credit_limit/sale.py @@ -1,7 +1,7 @@ # This file is part of Tryton. The COPYRIGHT file at the top level of # this repository contains the full copyright notices and license terms. from trytond.model import ModelView, Workflow -from trytond.pool import PoolMeta +from trytond.pool import Pool, PoolMeta class Sale(metaclass=PoolMeta): @@ -25,3 +25,25 @@ class Sale(metaclass=PoolMeta): party.check_credit_limit( sale.credit_limit_amount, origin=str(sale)) super(Sale, cls).confirm(sales) + + +class Line(metaclass=PoolMeta): + __name__ = 'sale.line' + + @property + def credit_limit_quantity(self): + pool = Pool() + UoM = pool.get('product.uom') + if (self.type != 'line') or (self.quantity <= 0): + return None + quantity = self.quantity + if self.sale.invoice_method == 'shipment': + for move in self.moves_ignored: + quantity -= UoM.compute_qty( + move.uom, move.quantity, self.unit, round=False) + for invoice_line in self.invoice_lines: + if invoice_line.invoice in self.sale.invoices_ignored: + quantity -= UoM.compute_qty( + invoice_line.unit, invoice_line.quantity, self.unit, + round=False) + return quantity