diff --git a/product/ERP5/tests/testInventoryReportModule.py b/product/ERP5/tests/testInventoryReportModule.py index 957584ebee62104f758ccff1820e3758e5ee8157..867f83b6b822a5aba8451c662a06e1150e9d30c6 100644 --- a/product/ERP5/tests/testInventoryReportModule.py +++ b/product/ERP5/tests/testInventoryReportModule.py @@ -43,7 +43,7 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): def getBusinessTemplateList(self): """ """ - return super(TestInventoryReportModule, self).getBusinessTemplateList() + ('erp5_accounting',) + return super(TestInventoryReportModule, self).getBusinessTemplateList() + ('erp5_accounting', 'erp5_mrp',) def getTitle(self): @@ -169,9 +169,27 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): organisation_euro = organisation_euro ) + + def stepCreateTwoWarehouse(self, sequence=None, + sequence_list=None, **kw): + + self.stepCreateOrganisation(sequence=sequence, + sequence_list=sequence_list, **kw) + warehouseA = sequence.get('organisation') + + self.stepCreateOrganisation(sequence=sequence, + sequence_list=sequence_list, **kw) + warehouseB = sequence.get('organisation') + + sequence.edit( + warehouseA = warehouseA, + warehouseB = warehouseB + ) + + def stepCreateSalesPackingListRMBToEURO(self, sequence=None, sequence_list = None, **kw): - self.stepCreateSalesPackingList( + self.stepCreatePackingList( sequence=sequence, sequence_list= sequence_list, source = sequence.get('organisation_rmb'), @@ -180,11 +198,12 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): price = 50, create_line = True, at_date = DateTime('2018/06/11 00:00:00 GMT+0'), - price_currency = sequence.get('rmb')) + price_currency = sequence.get('rmb'), + packing_list_type = 'Sale Packing List') def stepCreateSalesPackingListEUROToUSD(self, sequence=None, sequence_list = None, **kw): - self.stepCreateSalesPackingList( + self.stepCreatePackingList( sequence=sequence, sequence_list= sequence_list, source = sequence.get('organisation_euro'), @@ -193,13 +212,14 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): price = 50, create_line = True, at_date = DateTime('2018/06/11 05:00:00 GMT+0'), - price_currency = sequence.get('euro')) + price_currency = sequence.get('euro'), + packing_list_type = 'Sale Packing List') def stepCreatePurchasePackingListFromRMBToEURO(self, sequence=None, sequence_list=None, **kw): - self.stepCreatePurchasePackingList( + self.stepCreatePackingList( sequence=sequence, sequence_list= sequence_list, source = sequence.get('organisation_rmb'), @@ -208,11 +228,12 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): price = 80, create_line = True, at_date = DateTime('2018/06/11 02:00:00 GMT+0'), - price_currency = sequence.get('rmb')) + price_currency = sequence.get('rmb'), + packing_list_type = 'Purchase Packing List') def stepCreatePurchasePackingListFromEUROToUSD(self, sequence=None, sequence_list=None, **kw): - self.stepCreatePurchasePackingList( + self.stepCreatePackingList( sequence=sequence, sequence_list= sequence_list, source = sequence.get('organisation_euro'), @@ -221,142 +242,134 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): price = 123, create_line = True, at_date = DateTime('2018/06/11 03:00:00 GMT+0'), - price_currency = sequence.get('euro')) + price_currency = sequence.get('euro'), + packing_list_type = 'Purchase Packing List') + + def stepCreateProductionPackingListFromEUROWarehouseAToEuroWarehouseB(self, sequence=None, + sequence_list=None, **kw): + self.stepCreatePackingList( + sequence=sequence, + sequence_list= sequence_list, + source_section = sequence.get('organisation_euro'), + source = sequence.get('warehouseA'), + destination_section = sequence.get('organisation_euro'), + destination = sequence.get('warehouseB'), + quantity = 50, + price = 50, + create_line = True, + at_date = DateTime('2018/06/12 00:00:00 GMT+0'), + price_currency = sequence.get('euro'), + packing_list_type = 'Production Packing List') + + def stepCreateInternalPackingListFromEUROWarehouseEuroToEuroWarehouseB(self, sequence=None, + sequence_list=None, **kw): + self.stepCreatePackingList( + sequence=sequence, + sequence_list= sequence_list, + source_section = sequence.get('organisation_euro'), + source = sequence.get('organisation_euro'), + destination_section = sequence.get('organisation_euro'), + destination = sequence.get('warehouseB'), + quantity = 14, + price = 16, + create_line = True, + at_date = DateTime('2018/06/13 00:00:00 GMT+0'), + price_currency = sequence.get('euro'), + packing_list_type = 'Internal Packing List') + def stepCreateSalesPackingListEUROToRMB(self, sequence=None, sequence_list = None, **kw): - self.stepCreateSalesPackingList( + self.stepCreatePackingList( sequence=sequence, sequence_list= sequence_list, source = sequence.get('organisation_euro'), destination = sequence.get('organisation_rmb'), create_line = False, at_date = DateTime('2018/06/11 04:00:00 GMT+0'), - price_currency = sequence.get('euro')) + price_currency = sequence.get('euro'), + packing_list_type = 'Sale Packing List') def stepCreateSalesPackingListRMBToUSD(self, sequence=None, sequence_list = None, **kw): - self.stepCreateSalesPackingList( + self.stepCreatePackingList( sequence=sequence, sequence_list= sequence_list, source = sequence.get('organisation_rmb'), destination = sequence.get('organisation_dollar'), create_line = False, at_date = DateTime('2018/06/11 05:00:00 GMT+0'), - price_currency = sequence.get('rmb')) + price_currency = sequence.get('rmb'), + packing_list_type='Sale Packing List') def stepCreatePurchasePackingListFromUSDToRMB(self, sequence=None, sequence_list=None, **kw): - self.stepCreatePurchasePackingList( + self.stepCreatePackingList( sequence=sequence, sequence_list= sequence_list, source = sequence.get('organisation_dollar'), destination = sequence.get('organisation_rmb'), create_line = False, at_date = DateTime('2018/07/11 03:00:00 GMT+0'), - price_currency = sequence.get('dollar')) + price_currency = sequence.get('dollar'), + packing_list_type='Purchase Packing List') - def stepCreateVariatedPurchasePackingListLine(self, sequence=None, sequence_list=None, **kw): - resource_list = sequence.get('resource_list') - packing_list = sequence.get('packing_list') - #create with last resource - packing_list_line = packing_list.newContent( - portal_type='Purchase Packing List Line') - packing_list_line.edit(resource_value = resource_list[-1]) - - resource_vcl = list(resource_list[-1].getVariationCategoryList( - omit_individual_variation=1, omit_optional_variation=1)) - resource_vcl.sort() - self.assertEqual(len(resource_vcl),2) - packing_list_line.setVariationCategoryList(resource_vcl) - cell_key_list = list(packing_list_line.getCellKeyList(base_id='movement')) - price = 32 - quantity = 134 - for cell_key in cell_key_list: - cell = packing_list_line.newCell(base_id='movement', - portal_type='Purchase Packing List Cell', - *cell_key) - cell.edit(mapped_value_property_list=['price','quantity'], - price=price, quantity=quantity, - predicate_category_list=cell_key, - variation_category_list=cell_key,) - price += 1 - quantity += 1 - sequence.edit(packing_list=packing_list) - - + def stepCreateInternalPackingListFromEUROWarehouseEuroToEuroWarehouseB1(self, sequence=None, + sequence_list=None, **kw): + self.stepCreatePackingList( + sequence=sequence, + sequence_list= sequence_list, + source_section = sequence.get('organisation_euro'), + source = sequence.get('organisation_euro'), + destination_section = sequence.get('organisation_euro'), + destination = sequence.get('warehouseB'), + create_line = False, + at_date = DateTime('2018/08/01 04:00:00 GMT+0'), + price_currency = sequence.get('euro'), + packing_list_type = 'Internal Packing List') + + def stepCreateProductionPackingListFromEUROWarehouseAToEuroWarehouseB1(self, sequence=None, + sequence_list=None, **kw): + self.stepCreatePackingList( + sequence=sequence, + sequence_list= sequence_list, + source_section = sequence.get('organisation_euro'), + source = sequence.get('warehouseA'), + destination_section = sequence.get('organisation_euro'), + destination = sequence.get('warehouseB'), + create_line = False, + at_date = DateTime('2018/08/02 04:00:00 GMT+0'), + price_currency = sequence.get('euro'), + packing_list_type = 'Production Packing List') - def stepCreatePurchasePackingList(self, sequence=None, sequence_list=None, **kw): - organisation_rmb = sequence.get('organisation_rmb') - organisation_dollar = sequence.get('organisation_dollar') - organisation_euro = sequence.get('organisation_euro') + def stepCreatePackingList(self, sequence=None, sequence_list=None, **kw): resource_list = sequence.get('resource_list') quantity = kw.get('quantity', 100) price = kw.get('price', 100) price_currency = kw.get('price_currency') create_line = kw.get('create_line', False) at_date = kw.get('at_date', DateTime()) - + packing_list_type = kw.get('packing_list_type') source = kw.get('source') destination = kw.get('destination') - packing_list_module = self.getPortal().getDefaultModule( - portal_type='Purchase Packing List') - packing_list = packing_list_module.newContent( - portal_type='Purchase Packing List') - - start_date = stop_date = at_date - packing_list.edit( - specialise=self.business_process, - source_section_value = source, - source_value = source, - destination_section_value = destination, - destination_value = destination, - start_date = start_date, - stop_date = stop_date, - price_currency = price_currency.getRelativeUrl() - ) - #create with last resource - if create_line: - packing_list_line = packing_list.newContent( - portal_type='Purchase Packing List Line') - packing_list_line.edit(resource_value = resource_list[-1], - quantity = quantity, - price = price - ) - sequence.edit(packing_list=packing_list) - - - - - - def stepCreateSalesPackingList(self, sequence=None, sequence_list=None, **kw): - organisation_rmb = sequence.get('organisation_rmb') - organisation_dollar = sequence.get('organisation_dollar') - organisation_euro = sequence.get('organisation_euro') - resource_list = sequence.get('resource_list') - quantity = kw.get('quantity', 100) - price = kw.get('price', 100) - price_currency = kw.get('price_currency') - create_line = kw.get('create_line', False) - at_date = kw.get('at_date', DateTime()) + source_section=kw.get('source_section', source) + destination_section=kw.get('destination_section', destination) - source = kw.get('source') - destination = kw.get('destination') packing_list_module = self.getPortal().getDefaultModule( - portal_type='Sale Packing List') + portal_type=packing_list_type) packing_list = packing_list_module.newContent( - portal_type='Sale Packing List') + portal_type=packing_list_type) start_date = stop_date = at_date packing_list.edit( specialise=self.business_process, - source_section_value = source, + source_section_value = source_section, source_value = source, - destination_section_value = destination, + destination_section_value = destination_section, destination_value = destination, start_date = start_date, stop_date = stop_date, @@ -365,20 +378,47 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): #create with last resource if create_line: packing_list_line = packing_list.newContent( - portal_type='Sale Packing List Line') + portal_type=packing_list_type + ' Line') packing_list_line.edit(resource_value = resource_list[-1], quantity = quantity, price = price ) sequence.edit(packing_list=packing_list) + + + def stepCreateVariatedSalesPackingListLine(self, sequence=None, sequence_list=None, **kw): + self.stepCreateVariatedPackingListLine( + sequence= sequence, + sequence_list=sequence_list, + packing_list_type='Sale Packing List') + def stepCreateVariatedPurchasePackingListLine(self, sequence=None, sequence_list=None, **kw): + self.stepCreateVariatedPackingListLine( + sequence= sequence, + sequence_list=sequence_list, + packing_list_type='Purchase Packing List', + quantity= 134, + price=32) + + def stepCreateVariatedInternalPackingListLine(self, sequence=None, sequence_list=None, **kw): + self.stepCreateVariatedPackingListLine( + sequence= sequence, + sequence_list=sequence_list, + packing_list_type='Internal Packing List') - def stepCreateVariatedSalesPackingListLine(self, sequence=None, sequence_list=None, **kw): + def stepCreateVariatedProductionPackingListLine(self, sequence=None, sequence_list=None, **kw): + self.stepCreateVariatedPackingListLine( + sequence= sequence, + sequence_list=sequence_list, + packing_list_type='Production Packing List') + + def stepCreateVariatedPackingListLine(self, sequence=None, sequence_list=None, **kw): resource_list = sequence.get('resource_list') packing_list = sequence.get('packing_list') #create with last resource + packing_list_type = kw.get('packing_list_type') packing_list_line = packing_list.newContent( - portal_type='Sale Packing List Line') + portal_type=packing_list_type + ' Line') packing_list_line.edit(resource_value = resource_list[-1]) resource_vcl = list(resource_list[-1].getVariationCategoryList( @@ -387,11 +427,11 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): self.assertEqual(len(resource_vcl),2) packing_list_line.setVariationCategoryList(resource_vcl) cell_key_list = list(packing_list_line.getCellKeyList(base_id='movement')) - price = 50 - quantity = 200 + price = kw.get('price', 50) + quantity = kw.get('quantity', 200) for cell_key in cell_key_list: cell = packing_list_line.newCell(base_id='movement', - portal_type='Sale Packing List Cell', + portal_type=packing_list_type +' Cell', *cell_key) cell.edit(mapped_value_property_list=['price','quantity'], price=price, quantity=quantity, @@ -448,8 +488,8 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): inventory_report = self.getInventoryReportModule().newContent(portal_type='Inventory Report') inventory_report.edit( - destination_value = sequence.get('organisation_euro'), destination_section_value = sequence.get('organisation_euro'), + destination_value = sequence.get('warehouseB'), valuation_method = 'Fifo' ) self.tic() @@ -458,12 +498,37 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): inventory_report_line_list = inventory_report.contentValues(portal_type='Inventory Report Line') self.assertEqual(len(inventory_report_line_list), 3) inventory_report_line_list.sort(key=lambda x: x.total_quantity) + self.assertEqual(inventory_report_line_list[0].total_quantity, 50+14) + self.assertEqual(inventory_report_line_list[0].total_asset_price, 50*50 + 14*16) + self.assertEqual(inventory_report_line_list[1].total_quantity, 200*2) + self.assertEqual(inventory_report_line_list[1].total_asset_price, 200*50*2) + self.assertEqual(inventory_report_line_list[2].total_quantity, 201*2) + self.assertEqual(inventory_report_line_list[2].total_asset_price, 201*51*2) + + + + inventory_report = self.getInventoryReportModule().newContent(portal_type='Inventory Report') + inventory_report.edit( + destination_value = sequence.get('organisation_euro'), + destination_section_value = sequence.get('organisation_euro'), + valuation_method = 'Fifo' + ) + self.tic() + inventory_report.InventoryReport_calculateProductStock(batch_mode=True) + self.tic() + inventory_report_line_list = inventory_report.contentValues(portal_type='Inventory Report Line') + self.assertEqual(len(inventory_report_line_list), 5) + inventory_report_line_list.sort(key=lambda x: x.total_quantity) self.assertEqual(inventory_report_line_list[0].total_quantity, -201) self.assertEqual(inventory_report_line_list[0].total_asset_price, 0) - self.assertEqual(inventory_report_line_list[1].total_quantity, -200) + self.assertEqual(inventory_report_line_list[1].total_quantity, -201) self.assertEqual(inventory_report_line_list[1].total_asset_price, 0) - self.assertEqual(inventory_report_line_list[2].total_quantity, 45) - self.assertAlmostEqual(inventory_report_line_list[2].total_asset_price, 45*80*0.13) + self.assertEqual(inventory_report_line_list[2].total_quantity, -200) + self.assertEqual(inventory_report_line_list[2].total_asset_price, 0) + self.assertEqual(inventory_report_line_list[3].total_quantity, -200) + self.assertEqual(inventory_report_line_list[3].total_asset_price, 0) + self.assertEqual(inventory_report_line_list[4].total_quantity, 45-14) + self.assertAlmostEqual(inventory_report_line_list[4].total_asset_price, (45-14)*80*0.13) inventory_report = self.getInventoryReportModule().newContent(portal_type='Inventory Report') @@ -476,14 +541,18 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): inventory_report.InventoryReport_calculateProductStock(batch_mode=True) self.tic() inventory_report_line_list = inventory_report.contentValues(portal_type='Inventory Report Line') - self.assertEqual(len(inventory_report_line_list), 3) + self.assertEqual(len(inventory_report_line_list), 5) inventory_report_line_list.sort(key=lambda x: x.total_quantity) self.assertEqual(inventory_report_line_list[0].total_quantity, -201) self.assertEqual(inventory_report_line_list[0].total_asset_price, 0) - self.assertEqual(inventory_report_line_list[1].total_quantity, -200) + self.assertEqual(inventory_report_line_list[1].total_quantity, -201) self.assertEqual(inventory_report_line_list[1].total_asset_price, 0) - self.assertEqual(inventory_report_line_list[2].total_quantity, 45) - self.assertAlmostEqual(inventory_report_line_list[2].total_asset_price, 45*50*0.13) + self.assertEqual(inventory_report_line_list[2].total_quantity, -200) + self.assertEqual(inventory_report_line_list[2].total_asset_price, 0) + self.assertEqual(inventory_report_line_list[3].total_quantity, -200) + self.assertEqual(inventory_report_line_list[3].total_asset_price, 0) + self.assertEqual(inventory_report_line_list[4].total_quantity, 45-14) + self.assertAlmostEqual(inventory_report_line_list[4].total_asset_price, (45-14)*50*0.13) inventory_report = self.getInventoryReportModule().newContent(portal_type='Inventory Report') inventory_report.edit( @@ -495,15 +564,19 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): inventory_report.InventoryReport_calculateProductStock(batch_mode=True) self.tic() inventory_report_line_list = inventory_report.contentValues(portal_type='Inventory Report Line') - self.assertEqual(len(inventory_report_line_list), 3) + self.assertEqual(len(inventory_report_line_list), 5) inventory_report_line_list.sort(key=lambda x: x.total_quantity) self.assertEqual(inventory_report_line_list[0].total_quantity, -201) self.assertEqual(inventory_report_line_list[0].total_asset_price, 0) - self.assertEqual(inventory_report_line_list[1].total_quantity, -200) + self.assertEqual(inventory_report_line_list[1].total_quantity, -201) self.assertEqual(inventory_report_line_list[1].total_asset_price, 0) - self.assertEqual(inventory_report_line_list[2].total_quantity, 45) - #45*(80*80 + 50*50)/(80 + 50)*0.13, - self.assertAlmostEqual(inventory_report_line_list[2].total_asset_price, 400.5) + self.assertEqual(inventory_report_line_list[2].total_quantity, -200) + self.assertEqual(inventory_report_line_list[2].total_asset_price, 0) + self.assertEqual(inventory_report_line_list[3].total_quantity, -200) + self.assertEqual(inventory_report_line_list[3].total_asset_price, 0) + self.assertEqual(inventory_report_line_list[4].total_quantity, 45-14) + #(45-14)*(80*80 + 50*50)/(80 + 50)*0.13 + self.assertAlmostEqual(inventory_report_line_list[4].total_asset_price, 275.9) inventory_report = self.getInventoryReportModule().newContent(portal_type='Inventory Report') @@ -516,15 +589,19 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): inventory_report.InventoryReport_calculateProductStock(batch_mode=True) self.tic() inventory_report_line_list = inventory_report.contentValues(portal_type='Inventory Report Line') - self.assertEqual(len(inventory_report_line_list), 3) + self.assertEqual(len(inventory_report_line_list), 5) inventory_report_line_list.sort(key=lambda x: x.total_quantity) self.assertEqual(inventory_report_line_list[0].total_quantity, -201) self.assertEqual(inventory_report_line_list[0].total_asset_price, 0) - self.assertEqual(inventory_report_line_list[1].total_quantity, -200) + self.assertEqual(inventory_report_line_list[1].total_quantity, -201) self.assertEqual(inventory_report_line_list[1].total_asset_price, 0) - self.assertEqual(inventory_report_line_list[2].total_quantity, 45) - #45*(80*80 + 50*50)/(80 + 50)*0.13 - self.assertAlmostEqual(inventory_report_line_list[2].total_asset_price, 400.5) + self.assertEqual(inventory_report_line_list[2].total_quantity, -200) + self.assertEqual(inventory_report_line_list[2].total_asset_price, 0) + self.assertEqual(inventory_report_line_list[3].total_quantity, -200) + self.assertEqual(inventory_report_line_list[3].total_asset_price, 0) + self.assertEqual(inventory_report_line_list[4].total_quantity, 45-14) + #(45-14)*(80*80 + 50*50)/(80 + 50)*0.13 + self.assertAlmostEqual(inventory_report_line_list[4].total_asset_price, 275.9) inventory_report = self.getInventoryReportModule().newContent(portal_type='Inventory Report') inventory_report.edit( @@ -693,6 +770,12 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): 2018/06/11 05:00:00 GMT+0 organisation_euro ---> organisation_dollar sale packing list, quantity: 50, price: 50 euro, product: notvariatedresource + 2018/06/12 00:00:00 GMT+0 + organisation_euro warehouseA ---> organisation_euro warehouseB production packing list, quantity: 50, price: 50 euro, product: notvariatedresource + + 2018/06/13 00:00:00 GMT+0 + organisation_euro organisation_euro ---> organisation_euro warehouseB internal packing list, quantity: 14, price: 16 euro, product: notvariatedresource + 2018/06/11 04:00:00 GMT+0 organisation_euro ---> organisation_rmb sale packing list, quantity: 200, price: 50 euro, product: variatedresourceA Child/32 organisation_euro ---> organisation_rmb sale packing list, quantity: 201, price: 51 euro, product: variatedresourceA Child/34 @@ -704,6 +787,17 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): 2018/07/11 03:00:00 GMT+0 organisation_dollar ---> organisation_rmb purchase packing list, quantity: 134, price: 32 dollar, product: variatedresourceB child/32 organisation_dollar ---> organisation_rmb purchase packing list, quantity: 135, price: 33 dollar, product: variatedresourceB child/34 + + + 2018/08/01 04:00:00 GMT+0 + organisation_euro organisation_euro ---> organisation_euro warehouseB internal packing list, quantity: 200, price: 50 euro, product: variatedresourceA Child/32 + organisation_euro organisation_euro ---> organisation_euro warehouseB internal packing list, quantity: 201, price: 51 euro, product: variatedresourceA Child/32 + + 2018/08/02 04:00:00 GMT+0 + organisation_euro warehouseA ---> organisation_euro warehouseB production packing list, quantity: 200, price: 50 euro, product: variatedresourceA Child/32 + organisation_euro warehouseA ---> organisation_euro warehouseB production packing list, quantity: 201, price: 51 euro, product: variatedresourceA Child/32 + + """ if not run: return sequence_list = SequenceList() @@ -711,6 +805,7 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): stepCreateThreeCurrencys \ stepSetResourceUnit \ stepCreateThreeOrganisations \ + stepCreateTwoWarehouse \ stepTic \ stepCreateSalesPackingListRMBToEURO \ stepDeliverPackingList \ @@ -724,6 +819,12 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): stepCreatePurchasePackingListFromEUROToUSD \ stepDeliverPackingList \ stepTic \ + stepCreateProductionPackingListFromEUROWarehouseAToEuroWarehouseB \ + stepDeliverPackingList \ + stepTic \ + stepCreateInternalPackingListFromEUROWarehouseEuroToEuroWarehouseB \ + stepDeliverPackingList \ + stepTic \ stepCreateVariatedResource \ stepSetResourceUnit \ stepTic \ @@ -742,6 +843,14 @@ class TestInventoryReportModule(TestOrderMixin, SecurityTestCase): stepCreateVariatedPurchasePackingListLine \ stepDeliverPackingList \ stepTic \ + stepCreateInternalPackingListFromEUROWarehouseEuroToEuroWarehouseB1 \ + stepCreateVariatedInternalPackingListLine \ + stepDeliverPackingList \ + stepTic \ + stepCreateProductionPackingListFromEUROWarehouseAToEuroWarehouseB1 \ + stepCreateVariatedProductionPackingListLine \ + stepDeliverPackingList \ + stepTic \ stepTestCalculateProduct \ ' sequence_list.addSequenceString(sequence_string)