changeset cfe70948bb06 in modules/sale_shipment_cost:default
details: 
https://hg.tryton.org/modules/sale_shipment_cost?cmd=changeset;node=cfe70948bb06
description:
        Compute shipment cost without creating a line

        issue9010
        review252971002
diffstat:

 CHANGELOG |   2 ++
 sale.py   |  30 ++++++++++++++----------------
 2 files changed, 16 insertions(+), 16 deletions(-)

diffs (57 lines):

diff -r cf84fd8a2a13 -r cfe70948bb06 CHANGELOG
--- a/CHANGELOG Wed Aug 05 00:27:46 2020 +0200
+++ b/CHANGELOG Mon Oct 12 18:07:39 2020 +0200
@@ -1,3 +1,5 @@
+* Compute shipment cost without creating a line
+
 Version 5.6.0 - 2020-05-04
 * Bug fixes (see mercurial logs for details)
 
diff -r cf84fd8a2a13 -r cfe70948bb06 sale.py
--- a/sale.py   Wed Aug 05 00:27:46 2020 +0200
+++ b/sale.py   Mon Oct 12 18:07:39 2020 +0200
@@ -187,30 +187,28 @@
     def _get_carrier_context(self):
         return {}
 
-    def set_shipment_cost(self):
+    def compute_shipment_cost(self):
         pool = Pool()
         Date = pool.get('ir.date')
         Currency = pool.get('currency.currency')
-
-        cost, currency_id = 0, None
-        if (self.carrier
-                and any(l.quantity >= 0 for l in self.lines
-                    if l.type == 'line'
-                    and l.product and l.product.type != 'service')):
+        stockable = any(
+            line.quantity >= 0 for line in self.lines
+            if line.type == 'line'
+            and line.product and line.product.type != 'service')
+        if self.carrier and stockable:
             with Transaction().set_context(self._get_carrier_context()):
                 cost, currency_id = self.carrier.get_sale_price()
-
-        cost_line = None
-        products = [line.product for line in self.lines or []
-                if getattr(line, 'product', None)]
-        stockable = any(product.type in ('goods', 'assets')
-            for product in products)
-        if cost and currency_id and stockable:
             today = Date.today()
             date = self.sale_date or today
             with Transaction().set_context(date=date):
-                cost = Currency.compute(Currency(currency_id), cost,
-                    self.currency, round=False)
+                return Currency.compute(
+                    Currency(currency_id), cost, self.currency, round=False)
+        return 0
+
+    def set_shipment_cost(self):
+        cost_line = None
+        cost = self.compute_shipment_cost()
+        if cost:
             cost_line = self.get_shipment_cost_line(cost)
 
         removed = []

Reply via email to