trytond-patches/issue12226.diff

105 lines
4.7 KiB
Diff

diff --git a/tryton/modules/sale_credit_limit/__init__.py b/tryton/modules/sale_credit_limit/__init__.py
index 78da1b6ee0..8ebdad6e3e 100644
--- a/tryton/modules/sale_credit_limit/__init__.py
+++ b/tryton/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/tryton/modules/sale_credit_limit/party.py b/tryton/modules/sale_credit_limit/party.py
index ea1a823053..0ecc449813 100644
--- a/tryton/modules/sale_credit_limit/party.py
+++ b/tryton/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 not quantity or (line.type != 'line'):
+ quantity = line.credit_limit_quantity
+ if quantity is None:
continue
for invoice_line in line.invoice_lines:
if invoice_line.type != 'line':
@@ -42,10 +42,11 @@ class Party(metaclass=PoolMeta):
quantity -= Uom.compute_qty(
invoice_line.unit, invoice_line.quantity,
line.unit, round=False)
- amount += Currency.compute(
- sale.currency,
- Decimal(str(quantity)) * line.unit_price, currency,
- round=False)
+ if quantity > 0:
+ amount += Currency.compute(
+ sale.currency,
+ Decimal(str(quantity)) * line.unit_price, currency,
+ round=False)
amounts[sale.party.id] = currency.round(
amounts[sale.party.id] + amount)
return amounts
diff --git a/tryton/modules/sale_credit_limit/sale.py b/tryton/modules/sale_credit_limit/sale.py
index d209f7268f..37c94d53ec 100644
--- a/tryton/modules/sale_credit_limit/sale.py
+++ b/tryton/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
diff --git a/tryton/modules/sale_credit_limit/tests/test_module.py b/tryton/modules/sale_credit_limit/tests/test_module.py
index 31fde1e612..491fba12d3 100644
--- a/tryton/modules/sale_credit_limit/tests/test_module.py
+++ b/tryton/modules/sale_credit_limit/tests/test_module.py
@@ -88,8 +88,8 @@ class SaleCreditLimitTestCase(CompanyTestMixin, ModuleTestCase):
'lines': [
('create', [{
'description': 'Test',
- 'quantity': 1,
- 'unit_price': Decimal('50'),
+ 'quantity': 2,
+ 'unit_price': Decimal('25'),
}]),
],
}])
@@ -117,7 +117,7 @@ class SaleCreditLimitTestCase(CompanyTestMixin, ModuleTestCase):
# Increase quantity invoiced does not change the credit amount
invoice, = sale.invoices
invoice_line, = invoice.lines
- invoice_line.quantity += 1
+ invoice_line.quantity = 1
invoice_line.save()
Invoice.post([invoice])
self.assertEqual(party.credit_amount, Decimal('150'))