[Erp5-report] r26682 - /erp5/trunk/products/ERP5/tests/testBPMCore.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Apr 28 17:14:14 CEST 2009
Author: luke
Date: Tue Apr 28 17:14:11 2009
New Revision: 26682
URL: http://svn.erp5.org?rev=26682&view=rev
Log:
- implement invoice building from split packing list
- remove not needed checks
- support checking simulation movements in case of split parent movements
- use total price from invoicing movement instead of order line, to support split packing list
Modified:
erp5/trunk/products/ERP5/tests/testBPMCore.py
Modified: erp5/trunk/products/ERP5/tests/testBPMCore.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testBPMCore.py?rev=26682&r1=26681&r2=26682&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testBPMCore.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testBPMCore.py [utf8] Tue Apr 28 17:14:11 2009
@@ -58,6 +58,8 @@
modified_order_line_price_ratio = 2.0
modified_order_line_quantity_ratio = 2.5
+ modified_packing_list_line_quantity_ratio = 0.4
+
normal_resource_use_category_list = ['normal']
invoicing_resource_use_category_list = ['discount', 'tax']
@@ -248,6 +250,34 @@
workflow_tool = getToolByName(self.portal, 'portal_workflow')
workflow_tool.doActionFor(packing_list, 'deliver_action')
+ def stepCheckPackingListDiverged(self, sequence=None, **kw):
+ packing_list = sequence.get('packing_list')
+ self.assertEqual(
+ 'diverged',
+ packing_list.getCausalityState()
+ )
+
+ def stepSplitAndDeferPackingList(self, sequence=None, sequence_list=None, **kw):
+ packing_list = sequence.get('packing_list')
+ kw = {'listbox':[
+ {'listbox_key':line.getRelativeUrl(),
+ 'choice':'SplitAndDefer'} for line in packing_list.getMovementList() \
+ if line.isDivergent()]}
+ self.portal.portal_workflow.doActionFor(
+ packing_list,
+ 'split_and_defer_action',
+ start_date=packing_list.getStartDate() + 15,
+ stop_date=packing_list.getStopDate() + 25,
+ **kw)
+
+ def stepDecreasePackingListLineListQuantity(self, sequence=None, **kw):
+ packing_list = sequence.get('packing_list')
+ for movement in packing_list.getMovementList():
+ movement.edit(
+ quantity = movement.getQuantity() * \
+ self.modified_packing_list_line_quantity_ratio
+ )
+
def stepPackPackingList(self, sequence=None, **kw):
packing_list = sequence.get('packing_list')
if getattr(packing_list,'getContainerState', None) is None:
@@ -329,6 +359,23 @@
self.assertEqual(1, len(invoice_list)) # XXX 1 HC
sequence.edit(invoice = invoice_list[0])
+ def stepSetNewPackingListAsPackingList(self, sequence=None, **kw):
+ packing_list = sequence.get('packing_list')
+ new_packing_list = sequence.get('new_packing_list')
+ sequence.edit(
+ packing_list = new_packing_list,
+ new_packing_list = None
+ )
+
+ def stepGetNewPackingList(self, sequence=None, **kw):
+ order = sequence.get('order')
+ packing_list = sequence.get('packing_list')
+ packing_list_list = order.getCausalityRelatedValueList(
+ portal_type=self.packing_list_portal_type)
+ self.assertEqual(2, len(packing_list_list)) # XXX 2 HC
+ new_packing_list = [q for q in packing_list_list if q != packing_list][0]
+ sequence.edit(new_packing_list = new_packing_list)
+
def stepGetPackingList(self, sequence=None, **kw):
order = sequence.get('order')
packing_list_list = order.getCausalityRelatedValueList(
@@ -342,21 +389,23 @@
workflow_tool.doActionFor(order, 'confirm_action')
def getTradeModelSimulationMovementList(self, order_line):
- line_simulation_movement = order_line \
- .getOrderRelatedValue(portal_type='Simulation Movement')
- invoicing_applied_rule = [x for x in
- line_simulation_movement.objectValues()
- if x.getSpecialiseValue().getPortalType() == 'Invoicing Rule'][0]
- invoicing_movement = invoicing_applied_rule.objectValues()[0]
- trade_model_rule = [x for x in invoicing_movement.objectValues()
- if x.getSpecialiseValue().getPortalType() == 'Trade Model Rule'][0]
- return trade_model_rule.objectValues()
+ result_list = []
+ for line_simulation_movement in order_line.getOrderRelatedValueList(
+ portal_type='Simulation Movement'):
+ invoicing_applied_rule = [x for x in
+ line_simulation_movement.objectValues()
+ if x.getSpecialiseValue().getPortalType() == 'Invoicing Rule'][0]
+ invoicing_movement = invoicing_applied_rule.objectValues()[0]
+ trade_model_rule = [x for x in invoicing_movement.objectValues()
+ if x.getSpecialiseValue().getPortalType() == 'Trade Model Rule'][0]
+ result_list.append(trade_model_rule.objectValues())
+ return result_list
def stepCheckOrderTaxNoSimulation(self, sequence=None, **kw):
order_line_taxed = sequence.get('order_line_taxed')
- trade_model_simulation_movement_list = \
- self.getTradeModelSimulationMovementList(order_line_taxed)
- self.assertEquals(0, len(trade_model_simulation_movement_list))
+ for trade_model_simulation_movement_list in \
+ self.getTradeModelSimulationMovementList(order_line_taxed):
+ self.assertEquals(0, len(trade_model_simulation_movement_list))
# XXX: Merge: stepCheckOrderLineDiscountedSimulation stepCheckOrderLineTaxedSimulation stepCheckOrderLineDiscountedTaxedSimulation
@@ -365,11 +414,6 @@
business_path_discounting = sequence.get('business_path_discounting')
business_path_taxing = sequence.get('business_path_taxing')
price_currency = sequence.get('price_currency')
- taxed_complex_resource_model_old_simulation_movement_relative_url = sequence.get(
- 'taxed_complex_resource_model_old_simulation_movement_relative_url')
-
- discounted_complex_resource_model_old_simulation_movement_relative_url = sequence.get(
- 'discounted_complex_resource_model_old_simulation_movement_relative_url')
service_tax = sequence.get('service_tax')
service_discount = sequence.get('service_discount')
@@ -378,110 +422,90 @@
self.assertNotEqual(None, business_path_taxing)
self.assertNotEqual(None, price_currency)
- trade_model_simulation_movement_list = \
- self.getTradeModelSimulationMovementList(order_line)
-
- self.assertEquals(2, len(trade_model_simulation_movement_list))
- trade_model_simulation_movement_discount_complex = [q for q in \
- trade_model_simulation_movement_list \
- if q.getResourceValue() == service_discount][0]
-
- trade_model_simulation_movement_tax_complex = [q for q in \
- trade_model_simulation_movement_list \
- if q.getResourceValue() == service_tax][0]
-
- # discount complex
- if discounted_complex_resource_model_old_simulation_movement_relative_url is not None:
- # check that there is not change...
- self.assertEqual(
- discounted_complex_resource_model_old_simulation_movement_relative_url,
- trade_model_simulation_movement_discount_complex.getRelativeUrl()
- )
-
- sequence.edit(discounted_complex_resource_model_old_simulation_movement_relative_url = \
- trade_model_simulation_movement_discount_complex.getRelativeUrl())
-
- self.assertEqual(
- order_line.getTotalPrice() * self.default_discount_ratio,
- trade_model_simulation_movement_discount_complex.getTotalPrice()
- )
-
- self.assertEqual(
- business_path_discounting,
- trade_model_simulation_movement_discount_complex.getCausalityValue()
- )
-
- self.assertEqual(
- price_currency,
- trade_model_simulation_movement_discount_complex.getPriceCurrencyValue()
- )
-
- self.assertSameSet(
- ['base_amount/tax'],
- trade_model_simulation_movement_discount_complex.getBaseContributionList()
- )
-
- self.assertSameSet(
- ['base_amount/discount'],
- trade_model_simulation_movement_discount_complex.getBaseApplicationList()
- )
-
- # TODO:
- # * trade_phase ???
- # * arrow
- # * dates
-
- # tax complex
- if taxed_complex_resource_model_old_simulation_movement_relative_url is not None:
- # check that there is not change...
- self.assertEqual(
- taxed_complex_resource_model_old_simulation_movement_relative_url,
- trade_model_simulation_movement_tax_complex.getRelativeUrl()
- )
-
- sequence.edit(taxed_complex_resource_model_old_simulation_movement_relative_url = \
- trade_model_simulation_movement_tax_complex.getRelativeUrl())
-
- self.assertEqual(
- (order_line.getTotalPrice() + order_line.getTotalPrice() * self.default_discount_ratio) * self.default_tax_ratio,
- trade_model_simulation_movement_tax_complex.getTotalPrice()
- )
-
- self.assertEqual(
- business_path_taxing,
- trade_model_simulation_movement_tax_complex.getCausalityValue()
- )
-
- self.assertEqual(
- price_currency,
- trade_model_simulation_movement_tax_complex.getPriceCurrencyValue()
- )
-
- self.assertSameSet(
- [],
- trade_model_simulation_movement_tax_complex.getBaseContributionList()
- )
-
- self.assertSameSet(
- ['base_amount/tax'],
- trade_model_simulation_movement_tax_complex.getBaseApplicationList()
- )
-
- # TODO:
- # * trade_phase ???
- # * arrow
- # * dates
+ for trade_model_simulation_movement_list in \
+ self.getTradeModelSimulationMovementList(order_line):
+
+ self.assertEquals(2, len(trade_model_simulation_movement_list))
+ trade_model_simulation_movement_discount_complex = [q for q in \
+ trade_model_simulation_movement_list \
+ if q.getResourceValue() == service_discount][0]
+
+ trade_model_simulation_movement_tax_complex = [q for q in \
+ trade_model_simulation_movement_list \
+ if q.getResourceValue() == service_tax][0]
+
+ # discount complex
+ self.assertEqual(
+ trade_model_simulation_movement_discount_complex.getParentValue() \
+ .getParentValue().getTotalPrice() * self.default_discount_ratio,
+ trade_model_simulation_movement_discount_complex.getTotalPrice()
+ )
+
+ self.assertEqual(
+ business_path_discounting,
+ trade_model_simulation_movement_discount_complex.getCausalityValue()
+ )
+
+ self.assertEqual(
+ price_currency,
+ trade_model_simulation_movement_discount_complex.getPriceCurrencyValue()
+ )
+
+ self.assertSameSet(
+ ['base_amount/tax'],
+ trade_model_simulation_movement_discount_complex.getBaseContributionList()
+ )
+
+ self.assertSameSet(
+ ['base_amount/discount'],
+ trade_model_simulation_movement_discount_complex.getBaseApplicationList()
+ )
+
+ # TODO:
+ # * trade_phase ???
+ # * arrow
+ # * dates
+
+ # tax complex
+ self.assertEqual(
+ (trade_model_simulation_movement_tax_complex.getParentValue()\
+ .getParentValue().getTotalPrice() + \
+ trade_model_simulation_movement_tax_complex.getParentValue()\
+ .getParentValue().getTotalPrice() * self.default_discount_ratio) \
+ * self.default_tax_ratio,
+ trade_model_simulation_movement_tax_complex.getTotalPrice()
+ )
+
+ self.assertEqual(
+ business_path_taxing,
+ trade_model_simulation_movement_tax_complex.getCausalityValue()
+ )
+
+ self.assertEqual(
+ price_currency,
+ trade_model_simulation_movement_tax_complex.getPriceCurrencyValue()
+ )
+
+ self.assertSameSet(
+ [],
+ trade_model_simulation_movement_tax_complex.getBaseContributionList()
+ )
+
+ self.assertSameSet(
+ ['base_amount/tax'],
+ trade_model_simulation_movement_tax_complex.getBaseApplicationList()
+ )
+
+ # TODO:
+ # * trade_phase ???
+ # * arrow
+ # * dates
def stepCheckOrderLineDiscountedSimulation(self, sequence=None, **kw):
order_line = sequence.get('order_line_discounted')
business_path_discounting = sequence.get('business_path_discounting')
business_path_taxing = sequence.get('business_path_taxing')
price_currency = sequence.get('price_currency')
- taxed_only_resource_model_old_simulation_movement_relative_url = sequence.get(
- 'taxed_only_resource_model_old_simulation_movement_relative_url')
-
- discounted_only_resource_model_old_simulation_movement_relative_url = sequence.get(
- 'discounted_only_resource_model_old_simulation_movement_relative_url')
service_tax = sequence.get('service_tax')
service_discount = sequence.get('service_discount')
@@ -490,152 +514,122 @@
self.assertNotEqual(None, business_path_taxing)
self.assertNotEqual(None, price_currency)
- trade_model_simulation_movement_list = \
- self.getTradeModelSimulationMovementList(order_line)
-
- self.assertEquals(2, len(trade_model_simulation_movement_list))
- trade_model_simulation_movement_discount_only = [q for q in \
- trade_model_simulation_movement_list \
- if q.getResourceValue() == service_discount][0]
-
- trade_model_simulation_movement_tax_only = [q for q in \
- trade_model_simulation_movement_list \
- if q.getResourceValue() == service_tax][0]
-
- # discount only
- if discounted_only_resource_model_old_simulation_movement_relative_url is not None:
- # check that there is not change...
- self.assertEqual(
- discounted_only_resource_model_old_simulation_movement_relative_url,
- trade_model_simulation_movement_discount_only.getRelativeUrl()
- )
-
- sequence.edit(discounted_only_resource_model_old_simulation_movement_relative_url = \
- trade_model_simulation_movement_discount_only.getRelativeUrl())
-
- self.assertEqual(
- order_line.getTotalPrice() * self.default_discount_ratio,
- trade_model_simulation_movement_discount_only.getTotalPrice()
- )
-
- self.assertEqual(
- business_path_discounting,
- trade_model_simulation_movement_discount_only.getCausalityValue()
- )
-
- self.assertEqual(
- price_currency,
- trade_model_simulation_movement_discount_only.getPriceCurrencyValue()
- )
-
- self.assertSameSet(
- ['base_amount/tax'],
- trade_model_simulation_movement_discount_only.getBaseContributionList()
- )
-
- self.assertSameSet(
- ['base_amount/discount'],
- trade_model_simulation_movement_discount_only.getBaseApplicationList()
- )
-
- # TODO:
- # * trade_phase ???
- # * arrow
- # * dates
-
- # tax only
- if taxed_only_resource_model_old_simulation_movement_relative_url is not None:
- # check that there is not change...
- self.assertEqual(
- taxed_only_resource_model_old_simulation_movement_relative_url,
- trade_model_simulation_movement_tax_only.getRelativeUrl()
- )
-
- sequence.edit(taxed_only_resource_model_old_simulation_movement_relative_url = \
- trade_model_simulation_movement_tax_only.getRelativeUrl())
-
- # below tax is applied only to discount part
- self.assertEqual(trade_model_simulation_movement_discount_only. \
- getTotalPrice() * self.default_tax_ratio,
- trade_model_simulation_movement_tax_only.getTotalPrice())
-
- self.assertEqual(
- business_path_taxing,
- trade_model_simulation_movement_tax_only.getCausalityValue()
- )
-
- self.assertEqual(
- price_currency,
- trade_model_simulation_movement_tax_only.getPriceCurrencyValue()
- )
-
- self.assertSameSet(
- [],
- trade_model_simulation_movement_tax_only.getBaseContributionList()
- )
-
- self.assertSameSet(
- ['base_amount/tax'],
- trade_model_simulation_movement_tax_only.getBaseApplicationList()
- )
-
- # TODO:
- # * trade_phase ???
- # * arrow
- # * dates
+ for trade_model_simulation_movement_list in \
+ self.getTradeModelSimulationMovementList(order_line):
+
+ self.assertEquals(2, len(trade_model_simulation_movement_list))
+ trade_model_simulation_movement_discount_only = [q for q in \
+ trade_model_simulation_movement_list \
+ if q.getResourceValue() == service_discount][0]
+
+ trade_model_simulation_movement_tax_only = [q for q in \
+ trade_model_simulation_movement_list \
+ if q.getResourceValue() == service_tax][0]
+
+ # discount only
+ self.assertEqual(
+ trade_model_simulation_movement_discount_only.getParentValue()\
+ .getParentValue().getTotalPrice() * self.default_discount_ratio,
+ trade_model_simulation_movement_discount_only.getTotalPrice()
+ )
+
+ self.assertEqual(
+ business_path_discounting,
+ trade_model_simulation_movement_discount_only.getCausalityValue()
+ )
+
+ self.assertEqual(
+ price_currency,
+ trade_model_simulation_movement_discount_only.getPriceCurrencyValue()
+ )
+
+ self.assertSameSet(
+ ['base_amount/tax'],
+ trade_model_simulation_movement_discount_only.getBaseContributionList()
+ )
+
+ self.assertSameSet(
+ ['base_amount/discount'],
+ trade_model_simulation_movement_discount_only.getBaseApplicationList()
+ )
+
+ # TODO:
+ # * trade_phase ???
+ # * arrow
+ # * dates
+
+ # tax only
+ # below tax is applied only to discount part
+ self.assertEqual(trade_model_simulation_movement_discount_only. \
+ getTotalPrice() * self.default_tax_ratio,
+ trade_model_simulation_movement_tax_only.getTotalPrice())
+
+ self.assertEqual(
+ business_path_taxing,
+ trade_model_simulation_movement_tax_only.getCausalityValue()
+ )
+
+ self.assertEqual(
+ price_currency,
+ trade_model_simulation_movement_tax_only.getPriceCurrencyValue()
+ )
+
+ self.assertSameSet(
+ [],
+ trade_model_simulation_movement_tax_only.getBaseContributionList()
+ )
+
+ self.assertSameSet(
+ ['base_amount/tax'],
+ trade_model_simulation_movement_tax_only.getBaseApplicationList()
+ )
+
+ # TODO:
+ # * trade_phase ???
+ # * arrow
+ # * dates
def stepCheckOrderLineTaxedSimulation(self, sequence=None, **kw):
order_line = sequence.get('order_line_taxed')
business_path = sequence.get('business_path_taxing')
price_currency = sequence.get('price_currency')
- taxed_resource_model_old_simulation_movement_relative_url = sequence.get(
- 'taxed_resource_model_old_simulation_movement_relative_url')
self.assertNotEqual(None, business_path)
self.assertNotEqual(None, price_currency)
- trade_model_simulation_movement_list = \
- self.getTradeModelSimulationMovementList(order_line)
- self.assertEquals(1, len(trade_model_simulation_movement_list))
- trade_model_simulation_movement = trade_model_simulation_movement_list[0]
-
- if taxed_resource_model_old_simulation_movement_relative_url is not None:
- # check that there is not change...
- self.assertEqual(
- taxed_resource_model_old_simulation_movement_relative_url,
- trade_model_simulation_movement.getRelativeUrl()
- )
-
- sequence.edit(taxed_resource_model_old_simulation_movement_relative_url = \
- trade_model_simulation_movement.getRelativeUrl())
-
- self.assertEqual(
- order_line.getTotalPrice() * self.default_tax_ratio,
- trade_model_simulation_movement.getTotalPrice()
- )
-
- self.assertEqual(
- business_path,
- trade_model_simulation_movement.getCausalityValue()
- )
-
- self.assertEqual(
- price_currency,
- trade_model_simulation_movement.getPriceCurrencyValue()
- )
-
- self.assertSameSet(
- [],
- trade_model_simulation_movement.getBaseContributionList()
- )
-
- self.assertSameSet(
- ['base_amount/tax'],
- trade_model_simulation_movement.getBaseApplicationList()
- )
-
- # TODO:
- # * trade_phase ???
- # * arrow
- # * dates
+ for trade_model_simulation_movement_list in \
+ self.getTradeModelSimulationMovementList(order_line):
+ self.assertEquals(1, len(trade_model_simulation_movement_list))
+ trade_model_simulation_movement = trade_model_simulation_movement_list[0]
+
+ self.assertEqual(
+ trade_model_simulation_movement.getParentValue().getParentValue() \
+ .getTotalPrice() * self.default_tax_ratio,
+ trade_model_simulation_movement.getTotalPrice()
+ )
+
+ self.assertEqual(
+ business_path,
+ trade_model_simulation_movement.getCausalityValue()
+ )
+
+ self.assertEqual(
+ price_currency,
+ trade_model_simulation_movement.getPriceCurrencyValue()
+ )
+
+ self.assertSameSet(
+ [],
+ trade_model_simulation_movement.getBaseContributionList()
+ )
+
+ self.assertSameSet(
+ ['base_amount/tax'],
+ trade_model_simulation_movement.getBaseApplicationList()
+ )
+
+ # TODO:
+ # * trade_phase ???
+ # * arrow
+ # * dates
def stepFillOrder(self, sequence=None, **kw):
order = sequence.get('order')
@@ -1131,7 +1125,50 @@
def test_TradeModelRuleSimulationPackingListSplitBuildInvoiceBuild(self):
"""Check building invoice after splitting packing list"""
- raise NotImplementedError('TODO')
+ sequence_list = SequenceList()
+ sequence_string = self.trade_model_rule_simulation_common_string
+ sequence_string += """
+ ConfirmOrder
+ Tic
+ """ + self.aggregated_amount_simulation_check + """
+ GetPackingList
+ DecreasePackingListLineListQuantity
+ Tic
+ """ + self.aggregated_amount_simulation_check + """
+ CheckPackingListDiverged
+ SplitAndDeferPackingList
+ Tic
+ """ + self.aggregated_amount_simulation_check + """
+ GetNewPackingList
+ PackPackingList
+ Tic
+ """ + self.aggregated_amount_simulation_check + """
+ StartPackingList
+ StopPackingList
+ DeliverPackingList
+ Tic
+ """ + self.aggregated_amount_simulation_check + """
+ GetInvoice
+ CheckInvoiceCausalityStateSolved
+ CheckInvoiceNormalMovements
+ CheckInvoiceTradeModelRelatedMovements
+
+ SetNewPackingListAsPackingList
+ PackPackingList
+ Tic
+ StartPackingList
+ """ + self.aggregated_amount_simulation_check + """
+ StopPackingList
+ DeliverPackingList
+ Tic
+ """ + self.aggregated_amount_simulation_check + """
+ GetInvoice
+ CheckInvoiceCausalityStateSolved
+ CheckInvoiceNormalMovements
+ CheckInvoiceTradeModelRelatedMovements
+ """
+ sequence_list.addSequenceString(sequence_string)
+ sequence_list.play(self)
class TestBPMSale(TestBPMTestCases):
invoice_portal_type = 'Sale Invoice Transaction'
More information about the Erp5-report
mailing list