From 839c47c7160b3435db58237f8f2d317328c312f4 Mon Sep 17 00:00:00 2001
From: Nicolas Wavrant <nicolas.wavrant@nexedi.com>
Date: Wed, 8 Sep 2021 03:51:01 +0200
Subject: [PATCH] erp5_base: minimum bound of quantity_step_list should be 0

we don't support negative quantity (it is better represented by an
inversion of source and destination), and this allows better support of
the smallest slice in ERP5, more especially in SupplyLine_asCellRange,
where the title of the cell is computed with the min and max being None
or not.
---
 .../portal_components/document.erp5.SupplyLine.py             | 2 +-
 .../erp5_pdm/Resource_getPriceCalculationOperandDict.py       | 2 +-
 .../portal_skins/erp5_pdm/SupplyCell_updateSliceBasePrice.py  | 2 +-
 .../resource_default_internal_supply_line_price_per_slice.zpt | 2 +-
 ...ource_default_internal_supply_line_price_quantity_step.zpt | 2 +-
 .../resource_default_purchase_supply_line_price_per_slice.zpt | 2 +-
 ...ource_default_purchase_supply_line_price_quantity_step.zpt | 2 +-
 .../resource_default_sale_supply_line_price_per_slice.zpt     | 2 +-
 .../resource_default_sale_supply_line_price_quantity_step.zpt | 2 +-
 .../portal_components/test.erp5.testResource.py               | 4 ++--
 .../trade_zuite/testInternalSupplyLinePricePerSlice.zpt       | 2 +-
 .../trade_zuite/testPurchaseSupplyLinePricePerSlice.zpt       | 2 +-
 .../trade_zuite/testSaleSupplyLinePricePerSlice.zpt           | 2 +-
 13 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/bt5/erp5_base/DocumentTemplateItem/portal_components/document.erp5.SupplyLine.py b/bt5/erp5_base/DocumentTemplateItem/portal_components/document.erp5.SupplyLine.py
index 95093dd1b4..552a4d62b7 100644
--- a/bt5/erp5_base/DocumentTemplateItem/portal_components/document.erp5.SupplyLine.py
+++ b/bt5/erp5_base/DocumentTemplateItem/portal_components/document.erp5.SupplyLine.py
@@ -201,7 +201,7 @@ class SupplyLine(Path, Amount, XMLMatrix):
     unused_predicate_id_set = self.getQuantityPredicateIdList(price_parameter)
     if quantity_step_list:
       quantity_step_list.sort()
-      quantity_step_list = [None] + quantity_step_list + [None]
+      quantity_step_list = [0] + quantity_step_list + [None]
       getTitle = getattr(
         self,
         'SupplyLine_getTitle',
diff --git a/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/Resource_getPriceCalculationOperandDict.py b/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/Resource_getPriceCalculationOperandDict.py
index d43a3e7a8a..fe74bb4602 100644
--- a/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/Resource_getPriceCalculationOperandDict.py
+++ b/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/Resource_getPriceCalculationOperandDict.py
@@ -29,7 +29,7 @@ if result["slice_base_price"]:
     slice_min, slice_max = slice_range
     if slice_max is None:
       slice_max = quantity + 1
-    if slice_min is None:
+    if slice_min == 0:
       slice_min = 1
     priced_quantity = min(slice_max - 1, quantity) - (slice_min - 1)
     total_price += priced_quantity * slice_price
diff --git a/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/SupplyCell_updateSliceBasePrice.py b/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/SupplyCell_updateSliceBasePrice.py
index b20769f4e9..b0424638c1 100644
--- a/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/SupplyCell_updateSliceBasePrice.py
+++ b/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/SupplyCell_updateSliceBasePrice.py
@@ -7,7 +7,7 @@ if not quantity_criterion_list:
 quantity_criterion, = quantity_criterion_list
 supply_line_value = context.getParentValue()
 if supply_line_value.isBasePricePerSlice():
-  quantity_step_list = [None] + supply_line_value.getQuantityStepList(base_id='path') + [None]
+  quantity_step_list = [0] + supply_line_value.getQuantityStepList(base_id='path') + [None]
   try:
     index = quantity_step_list.index(quantity_criterion.min)
   except ValueError:
diff --git a/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_internal_supply_line_price_per_slice.zpt b/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_internal_supply_line_price_per_slice.zpt
index dab1a253ab..b545bca905 100644
--- a/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_internal_supply_line_price_per_slice.zpt
+++ b/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_internal_supply_line_price_per_slice.zpt
@@ -39,7 +39,7 @@ Test toggling price per slice updates internal supply cells correctly
 <tr>
   <td>assertText</td>
   <td>//input[@name="field_matrixbox_base_price_cell_0_0_0"]/../../../td[1]</td>
-  <td>Quantity &lt; 11.0</td>
+  <td>0 &lt;= Quantity &lt; 11.0</td>
 </tr>
 <tr>
   <td>assertText</td>
diff --git a/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_internal_supply_line_price_quantity_step.zpt b/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_internal_supply_line_price_quantity_step.zpt
index 7e2a95a503..96c806ac8f 100644
--- a/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_internal_supply_line_price_quantity_step.zpt
+++ b/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_internal_supply_line_price_quantity_step.zpt
@@ -36,7 +36,7 @@ Test quantity steps for price on internal supply line
 <tr>
   <td>assertText</td>
   <td>//input[@name="field_matrixbox_base_price_cell_0_0_0"]/../../../td[1]</td>
-  <td>Quantity &lt; 10.0</td>
+  <td>0 &lt;= Quantity &lt; 10.0</td>
 </tr>
 <tr>
   <td>assertText</td>
diff --git a/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_purchase_supply_line_price_per_slice.zpt b/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_purchase_supply_line_price_per_slice.zpt
index ecd8021a8b..b90e02e41e 100644
--- a/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_purchase_supply_line_price_per_slice.zpt
+++ b/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_purchase_supply_line_price_per_slice.zpt
@@ -39,7 +39,7 @@ Test toggling price per slice updates purchase supply cells correctly
 <tr>
   <td>assertText</td>
   <td>//input[@name="field_matrixbox_base_price_cell_0_0_0"]/../../../td[1]</td>
-  <td>Quantity &lt; 11.0</td>
+  <td>0 &lt;= Quantity &lt; 11.0</td>
 </tr>
 <tr>
   <td>assertText</td>
diff --git a/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_purchase_supply_line_price_quantity_step.zpt b/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_purchase_supply_line_price_quantity_step.zpt
index 8da66378b6..e318f00ee6 100644
--- a/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_purchase_supply_line_price_quantity_step.zpt
+++ b/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_purchase_supply_line_price_quantity_step.zpt
@@ -36,7 +36,7 @@ Test quantity steps for price on purchase supply line
 <tr>
   <td>assertText</td>
   <td>//input[@name="field_matrixbox_base_price_cell_0_0_0"]/../../../td[1]</td>
-  <td>Quantity &lt; 10.0</td>
+  <td>0 &lt;= Quantity &lt; 10.0</td>
 </tr>
 <tr>
   <td>assertText</td>
diff --git a/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_sale_supply_line_price_per_slice.zpt b/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_sale_supply_line_price_per_slice.zpt
index ad37630ad4..abe3d1510f 100644
--- a/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_sale_supply_line_price_per_slice.zpt
+++ b/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_sale_supply_line_price_per_slice.zpt
@@ -39,7 +39,7 @@ Test toggling price per slice updates sale supply cells correctly
 <tr>
   <td>assertText</td>
   <td>//input[@name="field_matrixbox_base_price_cell_0_0_0"]/../../../td[1]</td>
-  <td>Quantity &lt; 11.0</td>
+  <td>0 &lt;= Quantity &lt; 11.0</td>
 </tr>
 <tr>
   <td>assertText</td>
diff --git a/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_sale_supply_line_price_quantity_step.zpt b/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_sale_supply_line_price_quantity_step.zpt
index 897bdefdfd..ee7413b19c 100644
--- a/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_sale_supply_line_price_quantity_step.zpt
+++ b/bt5/erp5_pdm_ui_test/PathTemplateItem/portal_tests/pdm_zuite/resource_default_sale_supply_line_price_quantity_step.zpt
@@ -36,7 +36,7 @@ Test quantity steps for price on sale supply line
 <tr>
   <td>assertText</td>
   <td>//input[@name="field_matrixbox_base_price_cell_0_0_0"]/../../../td[1]</td>
-  <td>Quantity &lt; 10.0</td>
+  <td>0 &lt;= Quantity &lt; 10.0</td>
 </tr>
 <tr>
   <td>assertText</td>
diff --git a/bt5/erp5_trade/TestTemplateItem/portal_components/test.erp5.testResource.py b/bt5/erp5_trade/TestTemplateItem/portal_components/test.erp5.testResource.py
index 3d5673b70a..fd3cb9b2d6 100644
--- a/bt5/erp5_trade/TestTemplateItem/portal_components/test.erp5.testResource.py
+++ b/bt5/erp5_trade/TestTemplateItem/portal_components/test.erp5.testResource.py
@@ -1266,10 +1266,10 @@ class TestResource(ERP5TypeTestCase):
       portal_type=self.sale_supply_cell_portal_type,
       id='path_0',
       slice_base_price=10.,
-      slice_quantity_range=(1, 11),
+      slice_quantity_range=(0, 11),
     )
     cell0.setCriterionPropertyList(('quantity', ))
-    cell0.setCriterion('quantity', min=1, max=None)
+    cell0.setCriterion('quantity', min=0, max=None)
     cell0.setMappedValuePropertyList(
       ["slice_base_price", "slice_quantity_range", "base_price", "base_unit_price"]
     )
diff --git a/bt5/erp5_trade_ui_test/PathTemplateItem/portal_tests/trade_zuite/testInternalSupplyLinePricePerSlice.zpt b/bt5/erp5_trade_ui_test/PathTemplateItem/portal_tests/trade_zuite/testInternalSupplyLinePricePerSlice.zpt
index 2ff7ac919b..24bafd0b01 100644
--- a/bt5/erp5_trade_ui_test/PathTemplateItem/portal_tests/trade_zuite/testInternalSupplyLinePricePerSlice.zpt
+++ b/bt5/erp5_trade_ui_test/PathTemplateItem/portal_tests/trade_zuite/testInternalSupplyLinePricePerSlice.zpt
@@ -101,7 +101,7 @@ Test quantity steps for price on internal supply line
 <tr>
   <td>assertText</td>
   <td>//input[@name="field_matrixbox_base_price_cell_0_0_0"]/../../../td[1]</td>
-  <td>Quantity &lt; 11.0</td>
+  <td>0 &lt;= Quantity &lt; 11.0</td>
 </tr>
 <tr>
   <td>assertText</td>
diff --git a/bt5/erp5_trade_ui_test/PathTemplateItem/portal_tests/trade_zuite/testPurchaseSupplyLinePricePerSlice.zpt b/bt5/erp5_trade_ui_test/PathTemplateItem/portal_tests/trade_zuite/testPurchaseSupplyLinePricePerSlice.zpt
index e2520d860b..871becba28 100644
--- a/bt5/erp5_trade_ui_test/PathTemplateItem/portal_tests/trade_zuite/testPurchaseSupplyLinePricePerSlice.zpt
+++ b/bt5/erp5_trade_ui_test/PathTemplateItem/portal_tests/trade_zuite/testPurchaseSupplyLinePricePerSlice.zpt
@@ -101,7 +101,7 @@ Test quantity steps for price on purchase supply line
 <tr>
   <td>assertText</td>
   <td>//input[@name="field_matrixbox_base_price_cell_0_0_0"]/../../../td[1]</td>
-  <td>Quantity &lt; 11.0</td>
+  <td>0 &lt;= Quantity &lt; 11.0</td>
 </tr>
 <tr>
   <td>assertText</td>
diff --git a/bt5/erp5_trade_ui_test/PathTemplateItem/portal_tests/trade_zuite/testSaleSupplyLinePricePerSlice.zpt b/bt5/erp5_trade_ui_test/PathTemplateItem/portal_tests/trade_zuite/testSaleSupplyLinePricePerSlice.zpt
index cee7bc88cb..a00fec8e6a 100644
--- a/bt5/erp5_trade_ui_test/PathTemplateItem/portal_tests/trade_zuite/testSaleSupplyLinePricePerSlice.zpt
+++ b/bt5/erp5_trade_ui_test/PathTemplateItem/portal_tests/trade_zuite/testSaleSupplyLinePricePerSlice.zpt
@@ -100,7 +100,7 @@ Test quantity steps for price on sale supply line
 <tr>
   <td>assertText</td>
   <td>//input[@name="field_matrixbox_base_price_cell_0_0_0"]/../../../td[1]</td>
-  <td>Quantity &lt; 11.0</td>
+  <td>0 &lt;= Quantity &lt; 11.0</td>
 </tr>
 <tr>
   <td>assertText</td>
-- 
2.30.9