From 0765732ee5ffbdbbb9d42e3ca2c75280e5a38cbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com> Date: Thu, 20 Mar 2008 19:04:02 +0000 Subject: [PATCH] tests that grouping reference are reseted when we go back to stopped state after modifying a transaction with grouped lines. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@20083 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/tests/testAccounting.py | 174 ++++++++++++++++++++++++--- 1 file changed, 154 insertions(+), 20 deletions(-) diff --git a/product/ERP5/tests/testAccounting.py b/product/ERP5/tests/testAccounting.py index c2fe750949..a3a9bc60e4 100644 --- a/product/ERP5/tests/testAccounting.py +++ b/product/ERP5/tests/testAccounting.py @@ -1737,26 +1737,6 @@ class TestTransactions(AccountingTestCase): self.assertTrue('A description' in searchable_text) self.assertTrue('Some comments' in searchable_text) - def test_GroupingReferenceResetedOnCopyPaste(self): - accounting_module = self.portal.accounting_module - for portal_type in self.portal.getPortalAccountingTransactionTypeList(): - if portal_type == 'Balance Transaction': - # Balance Transaction cannot be copy and pasted, because they are not - # in visible allowed types. - continue - transaction = accounting_module.newContent( - portal_type=portal_type) - line = transaction.newContent( - id = 'line_with_grouping_reference', - grouping_reference='A', - portal_type=transaction_to_line_mapping[portal_type]) - - cp = accounting_module.manage_copyObjects(ids=[transaction.getId()]) - copy_id = accounting_module.manage_pasteObjects(cp)[0]['new_id'] - self.failIf(accounting_module[copy_id]\ - .line_with_grouping_reference.getGroupingReference()) - - # tests for Invoice_createRelatedPaymentTransaction def _checkRelatedSalePayment(self, invoice, payment, payment_node, quantity): """Check payment of a Sale Invoice. @@ -1941,6 +1921,160 @@ class TestTransactions(AccountingTestCase): batch_mode=1) self._checkRelatedSalePayment(invoice, payment, payment_node, 100) + # tests for Grouping References + def test_GroupingReferenceResetedOnCopyPaste(self): + accounting_module = self.portal.accounting_module + for portal_type in self.portal.getPortalAccountingTransactionTypeList(): + if portal_type == 'Balance Transaction': + # Balance Transaction cannot be copy and pasted, because they are not + # in visible allowed types. + continue + transaction = accounting_module.newContent( + portal_type=portal_type) + line = transaction.newContent( + id = 'line_with_grouping_reference', + grouping_reference='A', + portal_type=transaction_to_line_mapping[portal_type]) + + cp = accounting_module.manage_copyObjects(ids=[transaction.getId()]) + copy_id = accounting_module.manage_pasteObjects(cp)[0]['new_id'] + self.failIf(accounting_module[copy_id]\ + .line_with_grouping_reference.getGroupingReference()) + + def test_AccountingTransaction_lineResetGroupingReference(self): + invoice = self._makeOne( + title='First Invoice', + destination_section_value=self.organisation_module.client_1, + lines=(dict(source_value=self.account_module.goods_purchase, + source_debit=100), + dict(source_value=self.account_module.receivable, + source_credit=100, + id='line_with_grouping_reference', + grouping_reference='A'),)) + invoice_line = invoice.line_with_grouping_reference + + other_account_invoice = self._makeOne( + title='Other Account Invoice', + destination_section_value=self.organisation_module.client_1, + lines=(dict(source_value=self.account_module.goods_purchase, + source_debit=100), + dict(source_value=self.account_module.goods_sales, + source_credit=100, + id='line_with_grouping_reference', + grouping_reference='A'),)) + other_account_line = other_account_invoice.line_with_grouping_reference + + other_section_invoice = self._makeOne( + title='Other Section Invoice', + destination_section_value=self.organisation_module.client_2, + lines=(dict(source_value=self.account_module.goods_purchase, + source_debit=100), + dict(source_value=self.account_module.receivable, + source_credit=100, + id='line_with_grouping_reference', + grouping_reference='A'),)) + other_section_line = other_section_invoice.line_with_grouping_reference + + other_letter_invoice = self._makeOne( + title='Other letter Invoice', + destination_section_value=self.organisation_module.client_1, + lines=(dict(source_value=self.account_module.goods_purchase, + source_debit=100), + dict(source_value=self.account_module.receivable, + source_credit=100, + id='line_with_grouping_reference', + grouping_reference='B'),)) + other_letter_line = other_letter_invoice.line_with_grouping_reference + + payment = self._makeOne( + title='First Invoice Payment', + portal_type='Payment Transaction', + source_payment_value=self.section.newContent( + portal_type='Bank Account'), + destination_section_value=self.organisation_module.client_1, + lines=(dict(source_value=self.account_module.receivable, + id='line_with_grouping_reference', + grouping_reference='A', + source_debit=100), + dict(source_value=self.account_module.bank, + source_credit=100,))) + payment_line = payment.line_with_grouping_reference + + # reset from the payment line, the invoice line from the same group will be + # ungrouped + payment_line.AccountingTransactionLine_resetGroupingReference() + self.failIf(payment_line.getGroupingReference()) + self.failIf(invoice_line.getGroupingReference()) + + # other lines are not touched: + self.failUnless(other_account_line.getGroupingReference()) + self.failUnless(other_section_line.getGroupingReference()) + self.failUnless(other_letter_line.getGroupingReference()) + + + def test_ResetGroupingReferenceAfterRestart(self): + invoice = self._makeOne( + title='First Invoice', + destination_section_value=self.organisation_module.client_1, + lines=(dict(source_value=self.account_module.goods_purchase, + source_debit=100), + dict(source_value=self.account_module.receivable, + source_credit=100, + id='line_with_grouping_reference', + grouping_reference='A'),)) + + invoice_line = invoice.line_with_grouping_reference + + payment = self._makeOne( + title='First Invoice Payment', + portal_type='Payment Transaction', + simulation_state='delivered', + source_payment_value=self.section.newContent( + portal_type='Bank Account'), + destination_section_value=self.organisation_module.client_1, + lines=(dict(source_value=self.account_module.receivable, + id='line_with_grouping_reference', + grouping_reference='A', + source_debit=100), + dict(source_value=self.account_module.bank, + source_credit=100,))) + payment_line = payment.line_with_grouping_reference + invoice.stop() + + self.portal.portal_workflow.doActionFor(invoice, 'restart_action') + get_transaction().commit() + self.tic() + self.portal.portal_workflow.doActionFor(invoice, 'stop_action') + get_transaction().commit() + self.tic() + # we still have a grouping reference at this point, because the line was + # not modified, so the group is still valid + self.failUnless(invoice_line.getGroupingReference()) + self.failUnless(payment_line.getGroupingReference()) + + self.portal.portal_workflow.doActionFor(invoice, 'restart_action') + get_transaction().commit() + self.tic() + # try again, after modifying lines. + for line in invoice.getMovementList(): + line.setQuantity(line.getQuantity() * 1.5) + # Now the group is no longer valid, so passing stop transaction again will + # ungroup lines. + self.portal.portal_workflow.doActionFor(invoice, 'stop_action') + + # this is done with activities, because we need an up to date catalog to + # check if the group is still valid, so we do this in an activity after + # this document indexing. + self.failUnless(invoice_line.getGroupingReference()) + self.failUnless(payment_line.getGroupingReference()) + + # after activities invocation, grouping references have been removed + get_transaction().commit() + self.tic() + self.failIf(invoice_line.getGroupingReference()) + self.failIf(payment_line.getGroupingReference()) + + class TestAccountingWithSequences(ERP5TypeTestCase): """The first test for Accounting -- 2.30.9