diff --git a/product/ERP5/tests/testInvoice.py b/product/ERP5/tests/testInvoice.py index 7b70483546d308789ec6ab8b50316af88ba7b0ee..a9bd755fff67abd97fc1a74e0d9f800aa6566a97 100644 --- a/product/ERP5/tests/testInvoice.py +++ b/product/ERP5/tests/testInvoice.py @@ -1633,6 +1633,7 @@ class TestSaleInvoiceMixin(TestInvoiceMixin, invoice_line_portal_type = 'Invoice Line' invoice_cell_portal_type = 'Invoice Cell' invoice_transaction_line_portal_type = 'Sale Invoice Transaction Line' + payment_portal_type = 'Payment Transaction' # default sequence for one line of not varianted resource. PACKING_LIST_DEFAULT_SEQUENCE = """ @@ -1937,6 +1938,91 @@ class TestSaleInvoiceMixin(TestInvoiceMixin, self.assertEquals(packing_list.getTotalPrice(), invoice.getTotalPrice()) + def stepCheckPaymentBuilding(self, sequence=None, sequence_list=None, **kw): + """ + checks that the payment is built with the default_payment_builder + """ + invoice = sequence.get('invoice') + related_payment_list = invoice.getCausalityRelatedValueList( + portal_type=self.payment_portal_type) + + invoice_building_state = 'started' + invoice_state = invoice.getSimulationState() + if invoice_state != invoice_building_state : + self.assertEquals(0, len(related_payment_list)) + else: + self.assertEquals(1, len(related_payment_list)) + + payment = related_payment_list[0].getObject() + self.failUnless(payment is not None) + # Payments created by Delivery Builder are in planned state + self.assertEquals(payment.getSimulationState(), 'planned') + + # Get the list of simulation movements of packing list ... + invoice_simulation_movement_list = [] + for invoice_movement in invoice.getMovementList( + portal_type=self.portal.getPortalAccountingMovementTypeList()): + invoice_simulation_movement_list.extend( + invoice_movement.getDeliveryRelatedValueList()) + # ... payment simulation movement are their childrens. + simulation_movement_list = [] + for p_l_simulation_movement in invoice_simulation_movement_list : + for applied_rule in p_l_simulation_movement.objectValues() : + simulation_movement_list.extend(applied_rule.objectValues()) + + # First, test if each Simulation Movement is related to an + # Payment Movement + payment_relative_url = payment.getRelativeUrl() + for simulation_movement in simulation_movement_list: + payment_movement_list = simulation_movement.getDeliveryValueList() + self.assertEquals(len(payment_movement_list), 1) + payment_movement = payment_movement_list[0] + self.failUnless(payment_movement is not None) + self.assert_(payment_movement.getRelativeUrl().\ + startswith(payment_relative_url)) + + # Then, test if each Payment movement is equals to the sum of somes + # Simulation Movements + for payment_movement in payment.getMovementList(): + related_simulation_movement_list = payment_movement.\ + getDeliveryRelatedValueList(portal_type='Simulation Movement') + quantity = 0 + total_price = 0 + payment_movement_quantity = payment_movement.getQuantity() + for related_simulation_movement in related_simulation_movement_list: + quantity += related_simulation_movement.getQuantity() + total_price += related_simulation_movement.getPrice() *\ + related_simulation_movement.getQuantity() + # Test resource + self.assertEquals(payment_movement.getResource(), \ + related_simulation_movement.getResource()) + # Test resource variation + self.assertEquals(payment_movement.getVariationText(), \ + related_simulation_movement.getVariationText()) + self.assertEquals(payment_movement.getVariationCategoryList(), \ + related_simulation_movement.getVariationCategoryList()) + # Test acquisition + self.checkAcquisition(payment_movement, + related_simulation_movement) + # Test delivery ratio + self.assertEquals(related_simulation_movement.getQuantity() /\ + payment_movement_quantity, \ + related_simulation_movement.getDeliveryRatio()) + + self.assertEquals(quantity, payment_movement.getQuantity()) + # Test price + self.assertEquals(total_price / quantity, payment_movement.getPrice()) + + sequence.edit(payment = payment) + + # Test causality + self.assertEquals(len(payment.getCausalityValueList( + portal_type = self.invoice_portal_type)), 1) + self.assertEquals(payment.getCausalityValue(), invoice) + + # Finally, test getTotalQuantity and getTotalPrice on Payment + self.assertEquals(0, payment.getTotalQuantity()) + self.assertEquals(0, payment.getTotalPrice()) def stepCheckInvoicesConsistency(self, sequence=None, sequence_list=None, **kw): @@ -2886,6 +2972,7 @@ class TestSaleInvoice(TestSaleInvoiceMixin, TestInvoice, ERP5TypeTestCase): stepCheckInvoiceTransactionRule stepTic stepCheckInvoiceBuilding + stepCheckPaymentBuilding stepStopPackingList stepTic @@ -2897,6 +2984,7 @@ class TestSaleInvoice(TestSaleInvoiceMixin, TestInvoice, ERP5TypeTestCase): stepStartInvoice stepTic + stepCheckPaymentBuilding stepStopInvoice stepTic stepDeliverInvoice @@ -3024,6 +3112,7 @@ class TestSaleInvoice(TestSaleInvoiceMixin, TestInvoice, ERP5TypeTestCase): stepCheckInvoiceIsSolved stepStartInvoice stepTic + stepCheckPaymentBuilding stepStopInvoice stepTic stepDeliverInvoice @@ -3117,6 +3206,7 @@ class TestSaleInvoice(TestSaleInvoiceMixin, TestInvoice, ERP5TypeTestCase): stepTic stepStartInvoice stepTic + stepCheckPaymentBuilding stepStopInvoice stepTic stepDeliverInvoice @@ -3157,6 +3247,7 @@ class TestSaleInvoice(TestSaleInvoiceMixin, TestInvoice, ERP5TypeTestCase): stepTic stepStartInvoice stepTic + stepCheckPaymentBuilding stepStopInvoice stepTic stepDeliverInvoice @@ -3210,6 +3301,7 @@ class TestSaleInvoice(TestSaleInvoiceMixin, TestInvoice, ERP5TypeTestCase): stepTic stepStartInvoice stepTic + stepCheckPaymentBuilding stepStopInvoice stepTic stepDeliverInvoice @@ -3229,6 +3321,7 @@ class TestSaleInvoice(TestSaleInvoiceMixin, TestInvoice, ERP5TypeTestCase): stepStartInvoice stepTic + stepCheckPaymentBuilding stepStopInvoice stepTic stepDeliverInvoice @@ -3278,6 +3371,7 @@ class TestSaleInvoice(TestSaleInvoiceMixin, TestInvoice, ERP5TypeTestCase): stepTic stepStartInvoice stepTic + stepCheckPaymentBuilding stepStopInvoice stepTic stepDeliverInvoice