Commit b5a6ec60 authored by Jérome Perrin's avatar Jérome Perrin

Improve bank accounts selection on accounting transactions

Fix small problems displaying bank accounts on accounting transactions and be more strict during validation:
 - bank account must be validated
 - bank account must belong to the section

The latter was a problem for scenarios like this:
 - create transaction for supplier 1 with supplier 1 bank account
 - clone transaction
 - change to supplier 2
the bank account remains as supplier 1 bank account, although it became an invoice from supplier 2.
The transaction could be validated as long as the bank account is not invalidated

See merge request nexedi/erp5!1713
parents c6fc1595 5e85b655
"""Returns an item list of the acceptable bank accounts. """Returns an item list of the acceptable bank accounts.
If `organisation` is passed, then we only show bank accounts available for that If `organisation` is passed, then we only show bank accounts available for that
organisation, using the following policy: organisation, using the following policy:
- if organisation is independant accounting entity (ie. have accounting periods), - if organisation is independent accounting entity (ie. have accounting periods),
only bank accounts from this organisation can be selected only bank accounts from this organisation can be selected.
- otherwise, bank accounts from this organisation and all organisation directly - otherwise, bank accounts from this organisation and all organisation directly
members of the parent groups can be us members of the parent groups can be used
- if organisation higher in the group hierarchy contains bank accounts, bank - if organisation higher in the group hierarchy contains bank accounts, bank
accounts from parent organisations can be selected accounts from parent organisations can be selected
`organisation` can actually be a person or other portal types, in this case they
are assumed to be independent accounting entities.
If organisation is not passed, this script will return all bank accounts If organisation is not passed, this script will return all bank accounts
applicable for section_category and section_category_strict_membership. applicable for section_category and section_category_strict_membership.
If `base_category` is passed, the currently linked bank account with the specified
base_category is anyway included.
""" """
from Products.ERP5Type.Message import translateString
portal = context.getPortalObject() portal = context.getPortalObject()
search_kw = dict(portal_type=portal.getPortalPaymentNodeTypeList())
if skip_invalidated_bank_accounts:
search_kw['validation_state'] = '!=invalidated'
if organisation: search_kw = dict(
organisation_value = portal.restrictedTraverse(organisation) portal_type=portal.getPortalPaymentNodeTypeList(),
validation_state='validated',
)
# if organisation is an independant accounting section and contains bank accounts, if organisation:
entity_value = portal.restrictedTraverse(organisation)
# if entity is an independent accounting section and contains bank accounts,
# only take into account those. # only take into account those.
if organisation_value == organisation_value.Organisation_getMappingRelatedOrganisation(): if entity_value.getPortalType() != 'Organisation' \
bank_account_list = organisation_value.searchFolder(**search_kw) or entity_value == entity_value.Organisation_getMappingRelatedOrganisation():
bank_account_list = entity_value.searchFolder(**search_kw)
# else we lookup in organisations from parent groups. # else we lookup in organisations from parent groups.
else: else:
group_value = organisation_value.getGroupValue(None) group_value = entity_value.getGroupValue(None)
if group_value is not None: if group_value is not None:
uid_list = [] uid_list = []
while group_value.getPortalType() != 'Base Category': while group_value.getPortalType() != 'Base Category':
...@@ -50,36 +59,45 @@ else: ...@@ -50,36 +59,45 @@ else:
item_list = [('', '')] item_list = [('', '')]
# If we have bank accounts from more than one organisation, include # If we have bank accounts from more than one entity, include
# the organisation as hierarchy to show which organisation the bank # the entity as hierarchy to show which entity the bank
# account belongs to. # account belongs to.
include_organisation_hierarchy = len(set( include_entity_hierarchy = len(set(
['/'.join(b.path.split('/')[:-1]) for b in bank_account_list])) > 1 ['/'.join(b.path.split('/')[:-1]) for b in bank_account_list])) > 1
previous_organisation = None bank_account_list = [brain.getObject() for brain in sorted(
bank_account_list, key=lambda b:b.path
)]
def getItemList(bank_account):
reference = bank_account.getReference()
title = bank_account.getTitle() or bank_account.getSourceFreeText() or bank_account.getSourceTitle()
label = title
if reference != title:
label = '{} - {}'.format(reference, title)
return (label, bank_account.getRelativeUrl())
previous_entity = None
# sort bank accounts in a way that bank accounts from the same # sort bank accounts in a way that bank accounts from the same
# organisation are consecutive # entity are consecutive
for brain in sorted(bank_account_list, key=lambda b:b.path): for bank in bank_account_list:
bank = brain.getObject() if include_entity_hierarchy:
if include_organisation_hierarchy: entity = bank.getParentValue()
organisation = bank.getParentValue() if entity != previous_entity:
if organisation != previous_organisation: previous_entity = entity
previous_organisation = organisation
# include non-selectable element to show hierarchy # include non-selectable element to show hierarchy
item_list.append((organisation.getTranslatedTitle(), None)) item_list.append((entity.getTranslatedTitle(), None))
item_list.append(getItemList(bank))
if bank.getReference() and bank.getTitle() \
and bank.getReference() != bank.getTitle(): if base_category is not None:
item_list.append(('%s - %s' % ( bank.getReference(), current_value = context.getProperty(base_category + '_value')
bank.getTitle() or if current_value and current_value not in bank_account_list:
bank.getSourceFreeText() or item_list.append((
bank.getSourceTitle()), translateString(
bank.getRelativeUrl())) 'Invalid bank account from ${entity_title}',
else: mapping={'entity_title': current_value.getParentTitle()}), None))
item_list.append(( bank.getReference() or item_list.append(getItemList(current_value))
bank.getTitle() or
bank.getSourceFreeText() or
bank.getSourceTitle(),
bank.getRelativeUrl() ))
return item_list return item_list
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
</item> </item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>organisation=None, skip_invalidated_bank_accounts=0, section_category=None, section_category_strict_membership=False</string> </value> <value> <string>organisation=None, section_category=None, section_category_strict_membership=False, base_category=None</string> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
......
return context.AccountModule_getBankAccountItemList( section = context.getDestinationSection()
organisation=context.getDestinationSection(), if section:
skip_invalidated_bank_accounts= return context.AccountModule_getBankAccountItemList(
(context.getSimulationState() != 'delivered')) organisation=section,
base_category='destination_payment')
return [('', '')]
return context.AccountModule_getBankAccountItemList( section = context.getSourceSection()
organisation=context.getSourceSection(), if section:
skip_invalidated_bank_accounts= return context.AccountModule_getBankAccountItemList(
(context.getSimulationState() != 'delivered')) organisation=section,
base_category='source_payment')
return [('', '')]
...@@ -694,8 +694,10 @@ class TestTransactionValidation(AccountingTestCase): ...@@ -694,8 +694,10 @@ class TestTransactionValidation(AccountingTestCase):
self.assertRaises(ValidationFailed, self.assertRaises(ValidationFailed,
self.portal.portal_workflow.doActionFor, self.portal.portal_workflow.doActionFor,
accounting_transaction, 'stop_action') accounting_transaction, 'stop_action')
# with bank account, it's OK # with validated bank account, it's OK
bank_account = self.section.newContent(portal_type='Bank Account') bank_account = self.section.newContent(portal_type='Bank Account')
bank_account.validate()
self.tic()
accounting_transaction.setSourcePaymentValue(bank_account) accounting_transaction.setSourcePaymentValue(bank_account)
self.portal.portal_workflow.doActionFor(accounting_transaction, 'stop_action') self.portal.portal_workflow.doActionFor(accounting_transaction, 'stop_action')
...@@ -704,6 +706,7 @@ class TestTransactionValidation(AccountingTestCase): ...@@ -704,6 +706,7 @@ class TestTransactionValidation(AccountingTestCase):
# bank account # bank account
bank_account = self.section.newContent(portal_type='Bank Account', bank_account = self.section.newContent(portal_type='Bank Account',
price_currency_value=self.currency_module.euro) price_currency_value=self.currency_module.euro)
bank_account.validate()
accounting_transaction = self._makeOne( accounting_transaction = self._makeOne(
portal_type='Payment Transaction', portal_type='Payment Transaction',
start_date=DateTime('2007/01/02'), start_date=DateTime('2007/01/02'),
...@@ -725,6 +728,112 @@ class TestTransactionValidation(AccountingTestCase): ...@@ -725,6 +728,112 @@ class TestTransactionValidation(AccountingTestCase):
accounting_transaction.setResourceValue(self.currency_module.euro) accounting_transaction.setResourceValue(self.currency_module.euro)
self.portal.portal_workflow.doActionFor(accounting_transaction, 'stop_action') self.portal.portal_workflow.doActionFor(accounting_transaction, 'stop_action')
def test_PaymentTransactionValidationCheckBankAccountValidationState(self):
for section, mirror_section in (
(self.main_section, self.portal.organisation_module.client_1),
(self.main_section, self.portal.person_module.newContent()),
# with person member of section's group
(self.main_section, self.portal.person_module.john_smith),
(self.section, self.portal.organisation_module.client_1),
(self.main_section, self.portal.person_module.newContent()),
(self.main_section, self.section),
):
section_bank_account = section.newContent(
title='section bank account',
portal_type='Bank Account',
price_currency_value=self.currency_module.euro)
mirror_section_bank_account = mirror_section.newContent(
title='mirror section bank account',
portal_type='Bank Account',
price_currency_value=self.currency_module.euro)
accounting_transaction = self._makeOne(
portal_type='Payment Transaction',
start_date=DateTime('2007/01/02'),
source_section_value=section,
source_payment_value=section_bank_account,
destination_section_value=mirror_section,
destination_payment_value=mirror_section_bank_account,
payment_mode='default',
resource_value=self.currency_module.euro,
lines=(
dict(source_value=self.account_module.bank, source_debit=500),
dict(source_value=self.account_module.receivable, source_credit=500)))
self.assertRaisesRegex(
ValidationFailed,
"Bank Account section bank account is invalid.",
self.portal.portal_workflow.doActionFor,
accounting_transaction,
'stop_action',
)
section_bank_account.validate()
self.tic()
self.assertRaisesRegex(
ValidationFailed,
"Bank Account mirror section bank account is invalid.",
self.portal.portal_workflow.doActionFor,
accounting_transaction,
'stop_action',
)
mirror_section_bank_account.validate()
self.tic()
self.portal.portal_workflow.doActionFor(
accounting_transaction, 'stop_action')
def test_PaymentTransactionValidationCheckBankAccountOwner(self):
main_section_bank_account = self.main_section.newContent(
title='main section bank account',
portal_type='Bank Account',
price_currency_value=self.currency_module.euro)
main_section_bank_account.validate()
client_1_bank_account = self.portal.organisation_module.client_1.newContent(
title='client_1 bank account',
portal_type='Bank Account',
price_currency_value=self.currency_module.euro)
client_1_bank_account.validate()
# main_section_bank_account can be used by both main_section and section.
for section in self.main_section, self.section:
accounting_transaction = self._makeOne(
portal_type='Payment Transaction',
start_date=DateTime('2007/01/02'),
source_section_value=section,
source_payment_value=main_section_bank_account,
destination_section_value=self.portal.organisation_module.client_1,
destination_payment_value=client_1_bank_account,
payment_mode='default',
resource_value=self.currency_module.euro,
lines=(
dict(source_value=self.account_module.bank, source_debit=500),
dict(source_value=self.account_module.receivable,
source_credit=500)))
self.portal.portal_workflow.doActionFor(
accounting_transaction, 'stop_action')
# client_1's bank account can only be used with client 1, not with client 2
accounting_transaction = self._makeOne(
portal_type='Payment Transaction',
start_date=DateTime('2007/01/02'),
source_section_value=self.main_section,
source_payment_value=main_section_bank_account,
destination_section_value=self.portal.organisation_module.client_2,
destination_payment_value=client_1_bank_account,
payment_mode='default',
resource_value=self.currency_module.euro,
lines=(
dict(source_value=self.account_module.bank, source_debit=500),
dict(source_value=self.account_module.receivable, source_credit=500)))
self.assertRaisesRegex(
ValidationFailed,
"Bank Account client_1 bank account is invalid.",
self.portal.portal_workflow.doActionFor,
accounting_transaction,
'stop_action',
)
def test_NonBalancedAccountingTransaction(self): def test_NonBalancedAccountingTransaction(self):
# Accounting Transactions have to be balanced to be validated # Accounting Transactions have to be balanced to be validated
accounting_transaction = self._makeOne( accounting_transaction = self._makeOne(
...@@ -3490,6 +3599,8 @@ class TestTransactions(AccountingTestCase): ...@@ -3490,6 +3599,8 @@ class TestTransactions(AccountingTestCase):
def test_Invoice_createRelatedPaymentTransactionSimple(self): def test_Invoice_createRelatedPaymentTransactionSimple(self):
# Simple case of creating a related payment transaction. # Simple case of creating a related payment transaction.
payment_node = self.section.newContent(portal_type='Bank Account') payment_node = self.section.newContent(portal_type='Bank Account')
payment_node.validate()
self.tic()
invoice = self._makeOne( invoice = self._makeOne(
destination_section_value=self.organisation_module.client_1, destination_section_value=self.organisation_module.client_1,
lines=(dict(source_value=self.account_module.goods_purchase, lines=(dict(source_value=self.account_module.goods_purchase,
...@@ -3507,6 +3618,8 @@ class TestTransactions(AccountingTestCase): ...@@ -3507,6 +3618,8 @@ class TestTransactions(AccountingTestCase):
# Simple creating a related payment transaction when grouping reference of # Simple creating a related payment transaction when grouping reference of
# some lines is already set. # some lines is already set.
payment_node = self.section.newContent(portal_type='Bank Account') payment_node = self.section.newContent(portal_type='Bank Account')
payment_node.validate()
self.tic()
invoice = self._makeOne( invoice = self._makeOne(
destination_section_value=self.organisation_module.client_1, destination_section_value=self.organisation_module.client_1,
lines=(dict(source_value=self.account_module.goods_purchase, lines=(dict(source_value=self.account_module.goods_purchase,
...@@ -3528,6 +3641,8 @@ class TestTransactions(AccountingTestCase): ...@@ -3528,6 +3641,8 @@ class TestTransactions(AccountingTestCase):
# Simple creating a related payment transaction when we have two line for # Simple creating a related payment transaction when we have two line for
# 2 different destination sections. # 2 different destination sections.
payment_node = self.section.newContent(portal_type='Bank Account') payment_node = self.section.newContent(portal_type='Bank Account')
payment_node.validate()
self.tic()
invoice = self._makeOne( invoice = self._makeOne(
destination_section_value=self.organisation_module.client_1, destination_section_value=self.organisation_module.client_1,
lines=(dict(source_value=self.account_module.goods_purchase, lines=(dict(source_value=self.account_module.goods_purchase,
...@@ -3549,6 +3664,8 @@ class TestTransactions(AccountingTestCase): ...@@ -3549,6 +3664,8 @@ class TestTransactions(AccountingTestCase):
# Simple creating a related payment transaction when we have related # Simple creating a related payment transaction when we have related
# transactions. # transactions.
payment_node = self.section.newContent(portal_type='Bank Account') payment_node = self.section.newContent(portal_type='Bank Account')
payment_node.validate()
self.tic()
invoice = self._makeOne( invoice = self._makeOne(
destination_section_value=self.organisation_module.client_1, destination_section_value=self.organisation_module.client_1,
lines=(dict(source_value=self.account_module.goods_purchase, lines=(dict(source_value=self.account_module.goods_purchase,
...@@ -3580,6 +3697,8 @@ class TestTransactions(AccountingTestCase): ...@@ -3580,6 +3697,8 @@ class TestTransactions(AccountingTestCase):
# Simple creating a related payment transaction when we have related # Simple creating a related payment transaction when we have related
# transactions with different side # transactions with different side
payment_node = self.section.newContent(portal_type='Bank Account') payment_node = self.section.newContent(portal_type='Bank Account')
payment_node.validate()
self.tic()
invoice = self._makeOne( invoice = self._makeOne(
destination_section_value=self.organisation_module.client_1, destination_section_value=self.organisation_module.client_1,
lines=(dict(source_value=self.account_module.goods_purchase, lines=(dict(source_value=self.account_module.goods_purchase,
...@@ -3610,6 +3729,8 @@ class TestTransactions(AccountingTestCase): ...@@ -3610,6 +3729,8 @@ class TestTransactions(AccountingTestCase):
# Simple creating a related payment transaction when we have related # Simple creating a related payment transaction when we have related
# transactions in draft/cancelled state (they are ignored) # transactions in draft/cancelled state (they are ignored)
payment_node = self.section.newContent(portal_type='Bank Account') payment_node = self.section.newContent(portal_type='Bank Account')
payment_node.validate()
self.tic()
invoice = self._makeOne( invoice = self._makeOne(
destination_section_value=self.organisation_module.client_1, destination_section_value=self.organisation_module.client_1,
lines=(dict(source_value=self.account_module.goods_purchase, lines=(dict(source_value=self.account_module.goods_purchase,
...@@ -3644,6 +3765,8 @@ class TestTransactions(AccountingTestCase): ...@@ -3644,6 +3765,8 @@ class TestTransactions(AccountingTestCase):
def test_Invoice_createRelatedPaymentTransactionDifferentCurrency(self): def test_Invoice_createRelatedPaymentTransactionDifferentCurrency(self):
payment_node = self.section.newContent(portal_type='Bank Account') payment_node = self.section.newContent(portal_type='Bank Account')
payment_node.validate()
self.tic()
invoice = self._makeOne( invoice = self._makeOne(
destination_section_value=self.organisation_module.client_1, destination_section_value=self.organisation_module.client_1,
resource_value=self.portal.currency_module.usd, resource_value=self.portal.currency_module.usd,
...@@ -3678,6 +3801,8 @@ class TestTransactions(AccountingTestCase): ...@@ -3678,6 +3801,8 @@ class TestTransactions(AccountingTestCase):
"""Checks in case of deleted Payments related to invoice""" """Checks in case of deleted Payments related to invoice"""
# Simple case of creating a related payment transaction. # Simple case of creating a related payment transaction.
payment_node = self.section.newContent(portal_type='Bank Account') payment_node = self.section.newContent(portal_type='Bank Account')
payment_node.validate()
self.tic()
invoice = self._makeOne( invoice = self._makeOne(
destination_section_value=self.organisation_module.client_1, destination_section_value=self.organisation_module.client_1,
lines=(dict(source_value=self.account_module.goods_purchase, lines=(dict(source_value=self.account_module.goods_purchase,
...@@ -4644,6 +4769,58 @@ class TestTransactions(AccountingTestCase): ...@@ -4644,6 +4769,58 @@ class TestTransactions(AccountingTestCase):
('BA-1', bank_account.getRelativeUrl()), ('BA-1', bank_account.getRelativeUrl()),
at.AccountingTransaction_getDestinationPaymentItemList()) at.AccountingTransaction_getDestinationPaymentItemList())
def test_AccountingTransaction_getSourcePaymentItemList_no_section(self):
bank_account = self.section.newContent(
portal_type='Bank Account',
reference='BA-1'
)
bank_account.validate()
self.tic()
at = self._makeOne(
portal_type='Payment Transaction',
destination_section_value=self.organisation_module.client_1,
lines=(dict(source_value=self.account_module.goods_purchase,
source_debit=500),
dict(source_value=self.account_module.receivable,
source_credit=500)))
at.setSourceSectionValue(None)
at.setDestinationSectionValue(None)
self.assertEqual(
at.AccountingTransaction_getSourcePaymentItemList(), [('', '')])
self.assertEqual(
at.AccountingTransaction_getDestinationPaymentItemList(), [('', '')])
def test_AccountingTransaction_getSourcePaymentItemList_person_member_of_group(self):
bank_account = self.main_section.newContent(
portal_type='Bank Account',
reference='should not be displayed'
)
bank_account.validate()
self.tic()
source_transaction = self._makeOne(
portal_type='Payment Transaction',
source_section_value=self.section,
destination_section_value=self.person_module.john_smith,
lines=(dict(source_value=self.account_module.goods_purchase,
source_debit=500),
dict(source_value=self.account_module.receivable,
source_credit=500)))
self.assertEqual(
source_transaction.AccountingTransaction_getSourcePaymentItemList(), [('', '')])
destination_transaction = self._makeOne(
portal_type='Payment Transaction',
destination_section_value=self.section,
source_section_value=self.person_module.john_smith,
lines=(dict(destination_value=self.account_module.goods_purchase,
destination_debit=500),
dict(destination_value=self.account_module.receivable,
destination_credit=500)))
self.assertEqual(
destination_transaction.AccountingTransaction_getDestinationPaymentItemList(), [('', '')])
def test_AccountingTransaction_getSourcePaymentItemList_parent_section(self): def test_AccountingTransaction_getSourcePaymentItemList_parent_section(self):
# AccountingTransaction_getSourcePaymentItemList and AccountingTransaction_getDestinationPaymentItemList # AccountingTransaction_getSourcePaymentItemList and AccountingTransaction_getDestinationPaymentItemList
# allows to select bank accounts from parent groups of source section # allows to select bank accounts from parent groups of source section
...@@ -4783,6 +4960,63 @@ class TestTransactions(AccountingTestCase): ...@@ -4783,6 +4960,63 @@ class TestTransactions(AccountingTestCase):
('from section', bank_account.getRelativeUrl()), ('from section', bank_account.getRelativeUrl()),
destination_transaction.AccountingTransaction_getDestinationPaymentItemList()) destination_transaction.AccountingTransaction_getDestinationPaymentItemList())
def test_AccountingTransaction_getSourcePaymentItemList_bank_accounts_from_other_entities(self):
client_1_bank_account = self.portal.organisation_module.client_1.newContent(
portal_type='Bank Account',
title='client_1 bank account'
)
client_1_bank_account.validate()
source_transaction = self._makeOne(
portal_type='Payment Transaction',
destination_section_value=self.section,
# section is client 2 but account is for client 1
source_section_value=self.organisation_module.client_2,
source_payment_value=client_1_bank_account,
lines=(
dict(
destination_value=self.account_module.goods_purchase,
destination_debit=500),
dict(
destination_value=self.account_module.receivable,
destination_credit=500)))
self.assertEqual(
[
(str(label), value) for (label, value) in
source_transaction.AccountingTransaction_getSourcePaymentItemList()
],
[
('', ''),
('Invalid bank account from Client 1', None),
('client_1 bank account', client_1_bank_account.getRelativeUrl()),
],
)
destination_transaction = self._makeOne(
portal_type='Payment Transaction',
source_section_value=self.section,
# section is client 2 but account is for client 1
destination_section_value=self.organisation_module.client_2,
destination_payment_value=client_1_bank_account,
lines=(
dict(
destination_value=self.account_module.goods_purchase,
destination_debit=500),
dict(
destination_value=self.account_module.receivable,
destination_credit=500)))
self.assertEqual(
[
(str(label), value) for (label, value) in destination_transaction.
AccountingTransaction_getDestinationPaymentItemList()
],
[
('', ''),
('Invalid bank account from Client 1', None),
('client_1 bank account', client_1_bank_account.getRelativeUrl()),
],
)
class TestAccountingWithSequences(ERP5TypeTestCase): class TestAccountingWithSequences(ERP5TypeTestCase):
"""The first test for Accounting """The first test for Accounting
...@@ -5667,68 +5901,6 @@ class TestAccountingWithSequences(ERP5TypeTestCase): ...@@ -5667,68 +5901,6 @@ class TestAccountingWithSequences(ERP5TypeTestCase):
except ValidationFailed as err: except ValidationFailed as err:
raise AssertionError("Validation failed : %s" % err.msg) raise AssertionError("Validation failed : %s" % err.msg)
def stepValidateNoPayment(self, sequence, sequence_list=None, **kw) :
"""Check validation behaviour related to payment & mirror_payment.
If we use an account of type asset/cash/bank, we must use set a Bank
Account as source_payment or destination_payment.
This this source/destination payment must be a portal type from the
`payment node` portal type group. It can be defined on transaction
or line.
"""
def useBankAccount(accounting_transaction):
"""Modify the transaction, so that a line will use an account member of
account_type/cash/bank , which requires to use a payment category.
"""
# get the default and replace income account by bank
income_account_found = 0
for line in accounting_transaction.getMovementList() :
source_account = line.getSourceValue()
if source_account.isMemberOf('account_type/income') :
income_account_found = 1
line.edit( source_value = sequence.get('bank_account'),
destination_value = sequence.get('bank_account') )
self.assertTrue(income_account_found)
# XXX
accounting_transaction = sequence.get('transaction')
useBankAccount(accounting_transaction)
self.assertRaises(ValidationFailed,
self.getWorkflowTool().doActionFor,
accounting_transaction,
'stop_action')
source_section_value = accounting_transaction.getSourceSectionValue()
destination_section_value = accounting_transaction.getDestinationSectionValue()
for ptype in self.getPortal().getPortalPaymentNodeTypeList() :
source_payment_value = source_section_value.newContent(
portal_type = ptype, )
destination_payment_value = destination_section_value.newContent(
portal_type = ptype, )
accounting_transaction = self.createAccountingTransaction(
destination_section_value=self.other_vendor)
useBankAccount(accounting_transaction)
# payment node have to be set on both sides if both sides have accounting
# lines
accounting_transaction.setSourcePaymentValue(source_payment_value)
accounting_transaction.setDestinationPaymentValue(None)
self.assertRaises(ValidationFailed,
self.getWorkflowTool().doActionFor,
accounting_transaction,
'stop_action')
accounting_transaction.setSourcePaymentValue(None)
accounting_transaction.setDestinationPaymentValue(destination_payment_value)
self.assertRaises(ValidationFailed,
self.getWorkflowTool().doActionFor,
accounting_transaction,
'stop_action')
accounting_transaction.setSourcePaymentValue(source_payment_value)
accounting_transaction.setDestinationPaymentValue(destination_payment_value)
try:
self.getWorkflowTool().doActionFor(accounting_transaction, 'stop_action')
self.assertEqual(accounting_transaction.getSimulationState(), 'stopped')
except ValidationFailed as err:
self.fail("Validation failed : %s" % err.msg)
def stepValidateRemoveEmptyLines(self, sequence, sequence_list=None, **kw): def stepValidateRemoveEmptyLines(self, sequence, sequence_list=None, **kw):
"""Check validating a transaction remove empty lines. """ """Check validating a transaction remove empty lines. """
accounting_transaction = sequence.get('transaction') accounting_transaction = sequence.get('transaction')
...@@ -5905,18 +6077,6 @@ class TestAccountingWithSequences(ERP5TypeTestCase): ...@@ -5905,18 +6077,6 @@ class TestAccountingWithSequences(ERP5TypeTestCase):
stepCreateValidAccountingTransaction stepCreateValidAccountingTransaction
stepValidateNotBalanced""", quiet=quiet) stepValidateNotBalanced""", quiet=quiet)
def test_AccountingTransactionValidationPayment(self, quiet=QUIET,
run=RUN_ALL_TESTS):
"""Transaction validation and payment"""
if not run : return
self.playSequence("""
stepCreateEntities
stepCreateCurrencies
stepCreateAccounts
stepCreateValidAccountingTransaction
stepValidateNoPayment
""", quiet=quiet)
def test_AccountingTransactionValidationRemoveEmptyLines(self, quiet=QUIET, def test_AccountingTransactionValidationRemoveEmptyLines(self, quiet=QUIET,
run=RUN_ALL_TESTS): run=RUN_ALL_TESTS):
"""Transaction validation removes empty lines""" """Transaction validation removes empty lines"""
......
...@@ -20,17 +20,24 @@ container.script_validateTransaction(state_change) ...@@ -20,17 +20,24 @@ container.script_validateTransaction(state_change)
# parties or bank accounts # parties or bank accounts
transaction_lines = transaction.objectValues(portal_type=transaction.getPortalAccountingMovementTypeList()) transaction_lines = transaction.objectValues(portal_type=transaction.getPortalAccountingMovementTypeList())
id_to_delete_list = [] id_to_delete_list = []
getBankAccountItemList = portal.AccountModule_getBankAccountItemList
for line in transaction_lines: for line in transaction_lines:
for account, third_party, bank_account, bank_account_relative_url_list_getter in (
for account, third_party, bank_account in ( (
( line.getSourceValue(portal_type='Account'), line.getSourceValue(portal_type='Account'),
line.getDestinationSectionValue(portal_type=section_portal_type_list), line.getDestinationSectionValue(portal_type=section_portal_type_list),
line.getSourcePaymentValue(portal_type=bank_account_portal_type),), line.getSourcePaymentValue(portal_type=bank_account_portal_type),
( line.getDestinationValue(portal_type='Account'), lambda: (x[1] for x in getBankAccountItemList(
organisation=line.getSourceSection(portal_type=section_portal_type_list))),
),
(
line.getDestinationValue(portal_type='Account'),
line.getSourceSectionValue(portal_type=section_portal_type_list), line.getSourceSectionValue(portal_type=section_portal_type_list),
line.getDestinationPaymentValue(portal_type=bank_account_portal_type),), line.getDestinationPaymentValue(portal_type=bank_account_portal_type),
): lambda: (x[1] for x in getBankAccountItemList(
organisation=line.getDestinationSection(portal_type=section_portal_type_list))),
),
):
if account is not None and account.getValidationState() != 'validated': if account is not None and account.getValidationState() != 'validated':
raise ValidationFailed(translateString( raise ValidationFailed(translateString(
"Account ${account_title} is not validated.", "Account ${account_title} is not validated.",
...@@ -43,7 +50,7 @@ for line in transaction_lines: ...@@ -43,7 +50,7 @@ for line in transaction_lines:
mapping=dict(third_party_name=third_party.getTitle()))) mapping=dict(third_party_name=third_party.getTitle())))
if bank_account is not None: if bank_account is not None:
if bank_account.getValidationState() in invalid_state_list: if bank_account.getRelativeUrl() not in bank_account_relative_url_list_getter():
raise ValidationFailed(translateString( raise ValidationFailed(translateString(
"Bank Account ${bank_account_reference} is invalid.", "Bank Account ${bank_account_reference} is invalid.",
mapping=dict(bank_account_reference=bank_account.getReference()))) mapping=dict(bank_account_reference=bank_account.getReference())))
......
...@@ -104,6 +104,12 @@ ...@@ -104,6 +104,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Bank</string> </value> <value> <string>Bank</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -129,4 +135,83 @@ ...@@ -129,4 +135,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>account_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671430065.86</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -104,6 +104,12 @@ ...@@ -104,6 +104,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Collected VAT 10%</string> </value> <value> <string>Collected VAT 10%</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -129,4 +135,83 @@ ...@@ -129,4 +135,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>account_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671430065.87</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -104,6 +104,12 @@ ...@@ -104,6 +104,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Equity</string> </value> <value> <string>Equity</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -129,4 +135,83 @@ ...@@ -129,4 +135,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>account_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671430065.87</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -104,6 +104,12 @@ ...@@ -104,6 +104,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Fixed Assets</string> </value> <value> <string>Fixed Assets</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -129,4 +135,83 @@ ...@@ -129,4 +135,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>account_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671430065.88</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -104,6 +104,12 @@ ...@@ -104,6 +104,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Goods Purchase</string> </value> <value> <string>Goods Purchase</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -129,4 +135,83 @@ ...@@ -129,4 +135,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>account_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671430065.88</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -104,6 +104,12 @@ ...@@ -104,6 +104,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Goods Sales</string> </value> <value> <string>Goods Sales</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -129,4 +135,83 @@ ...@@ -129,4 +135,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>account_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671430065.88</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -104,6 +104,12 @@ ...@@ -104,6 +104,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Payable</string> </value> <value> <string>Payable</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -129,4 +135,83 @@ ...@@ -129,4 +135,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>account_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671430065.88</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -104,6 +104,12 @@ ...@@ -104,6 +104,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Receivable</string> </value> <value> <string>Receivable</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -129,4 +135,83 @@ ...@@ -129,4 +135,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>account_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671430065.89</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -104,6 +104,12 @@ ...@@ -104,6 +104,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Refundable VAT 10%</string> </value> <value> <string>Refundable VAT 10%</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -129,4 +135,83 @@ ...@@ -129,4 +135,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>account_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671430065.89</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -104,6 +104,12 @@ ...@@ -104,6 +104,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Stocks</string> </value> <value> <string>Stocks</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -129,4 +135,83 @@ ...@@ -129,4 +135,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>account_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671430065.89</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -14,9 +14,7 @@ ...@@ -14,9 +14,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -27,9 +25,7 @@ ...@@ -27,9 +25,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -40,9 +36,7 @@ ...@@ -40,9 +36,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -54,9 +48,7 @@ ...@@ -54,9 +48,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -98,6 +90,12 @@ ...@@ -98,6 +90,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Euro</string> </value> <value> <string>Euro</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -123,4 +121,83 @@ ...@@ -123,4 +121,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671675304.94</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -14,9 +14,7 @@ ...@@ -14,9 +14,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -27,9 +25,7 @@ ...@@ -27,9 +25,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -40,9 +36,7 @@ ...@@ -40,9 +36,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -54,9 +48,7 @@ ...@@ -54,9 +48,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -98,6 +90,12 @@ ...@@ -98,6 +90,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>US Dollar</string> </value> <value> <string>US Dollar</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -123,4 +121,83 @@ ...@@ -123,4 +121,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671675358.82</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -14,9 +14,7 @@ ...@@ -14,9 +14,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -27,9 +25,7 @@ ...@@ -27,9 +25,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -40,9 +36,7 @@ ...@@ -40,9 +36,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -54,9 +48,7 @@ ...@@ -54,9 +48,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -98,6 +90,12 @@ ...@@ -98,6 +90,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Yen</string> </value> <value> <string>Yen</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -123,4 +121,83 @@ ...@@ -123,4 +121,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671675358.82</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -14,9 +14,7 @@ ...@@ -14,9 +14,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -27,9 +25,7 @@ ...@@ -27,9 +25,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -40,9 +36,7 @@ ...@@ -40,9 +36,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -54,9 +48,7 @@ ...@@ -54,9 +48,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -82,9 +74,9 @@ ...@@ -82,9 +74,9 @@
<key> <string>categories</string> </key> <key> <string>categories</string> </key>
<value> <value>
<tuple> <tuple>
<string>region/region</string>
<string>group/client</string> <string>group/client</string>
<string>role/client</string> <string>role/client</string>
<string>region/region</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -106,6 +98,12 @@ ...@@ -106,6 +98,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Client 1</string> </value> <value> <string>Client 1</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -131,4 +129,83 @@ ...@@ -131,4 +129,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671675358.82</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -14,9 +14,7 @@ ...@@ -14,9 +14,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -27,9 +25,7 @@ ...@@ -27,9 +25,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -40,9 +36,7 @@ ...@@ -40,9 +36,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -54,9 +48,7 @@ ...@@ -54,9 +48,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -82,8 +74,8 @@ ...@@ -82,8 +74,8 @@
<key> <string>categories</string> </key> <key> <string>categories</string> </key>
<value> <value>
<tuple> <tuple>
<string>region/region</string>
<string>role/client</string> <string>role/client</string>
<string>region/region</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -105,6 +97,12 @@ ...@@ -105,6 +97,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Client 2</string> </value> <value> <string>Client 2</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -130,4 +128,83 @@ ...@@ -130,4 +128,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671675358.83</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -14,9 +14,7 @@ ...@@ -14,9 +14,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -27,9 +25,7 @@ ...@@ -27,9 +25,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -40,9 +36,7 @@ ...@@ -40,9 +36,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -54,9 +48,7 @@ ...@@ -54,9 +48,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -135,6 +127,12 @@ ...@@ -135,6 +127,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>My Master Organisation</string> </value> <value> <string>My Master Organisation</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -160,4 +158,83 @@ ...@@ -160,4 +158,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671675249.39</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -14,9 +14,7 @@ ...@@ -14,9 +14,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -27,9 +25,7 @@ ...@@ -27,9 +25,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -40,9 +36,7 @@ ...@@ -40,9 +36,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -54,9 +48,7 @@ ...@@ -54,9 +48,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -135,6 +127,12 @@ ...@@ -135,6 +127,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>My Organisation</string> </value> <value> <string>My Organisation</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -160,4 +158,83 @@ ...@@ -160,4 +158,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671675234.31</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -14,9 +14,7 @@ ...@@ -14,9 +14,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -27,9 +25,7 @@ ...@@ -27,9 +25,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -40,9 +36,7 @@ ...@@ -40,9 +36,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -54,9 +48,7 @@ ...@@ -54,9 +48,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -108,6 +100,12 @@ ...@@ -108,6 +100,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>My default bank account</string> </value> <value> <string>My default bank account</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -133,4 +131,83 @@ ...@@ -133,4 +131,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671675290.36</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -104,6 +104,12 @@ ...@@ -104,6 +104,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Supplier</string> </value> <value> <string>Supplier</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -129,4 +135,83 @@ ...@@ -129,4 +135,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671430065.91</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -14,9 +14,7 @@ ...@@ -14,9 +14,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -27,9 +25,7 @@ ...@@ -27,9 +25,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -40,9 +36,7 @@ ...@@ -40,9 +36,7 @@
<string>Assignee</string> <string>Assignee</string>
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -54,9 +48,7 @@ ...@@ -54,9 +48,7 @@
<string>Assignor</string> <string>Assignor</string>
<string>Associate</string> <string>Associate</string>
<string>Auditor</string> <string>Auditor</string>
<string>Author</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -124,6 +116,12 @@ ...@@ -124,6 +116,12 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
...@@ -149,4 +147,83 @@ ...@@ -149,4 +147,83 @@
<none/> <none/>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1671675256.23</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -6,31 +6,12 @@ for rule in portal.portal_rules.objectValues(): ...@@ -6,31 +6,12 @@ for rule in portal.portal_rules.objectValues():
if rule.getValidationState() != 'validated': if rule.getValidationState() != 'validated':
rule.validate() rule.validate()
# validate all accounts, because we have test invalidating accounts, see
validated = False # accounting_zuite/accounting_transaction_zuite/test_accounting_transaction_input_invalidated_accounts.html
# validate currencies and clear cache if we have validated new currencies
for currency in portal.currency_module.objectValues():
if currency.getValidationState() != 'validated':
currency.validate()
validated = True
if validated:
portal.portal_caches.clearCache(cache_factory_list=('erp5_ui_short', ))
# validate all accounts
for account in portal.account_module.objectValues(): for account in portal.account_module.objectValues():
if account.getValidationState() != 'validated': if account.getValidationState() != 'validated':
account.validate() account.validate()
# validate third parties and set them a dummy region, because it's required
for entity in ( portal.organisation_module.objectValues() +
portal.person_module.objectValues() ):
if entity.getValidationState() != 'validated':
entity.setRegion('region')
entity.validate()
# create accounting periods ?
# XXX
# enable preference # enable preference
ptool = portal.portal_preferences ptool = portal.portal_preferences
pref = ptool.accounting_zuite_preference pref = ptool.accounting_zuite_preference
......
account_module/bank
account_module/collected_vat
account_module/equity
account_module/fixed_assets
account_module/goods_purchase
account_module/goods_sales
account_module/payable
account_module/receivable
account_module/refundable_vat
account_module/stocks
currency_module/euro
currency_module/usd
currency_module/yen
organisation_module/client_1
organisation_module/client_1/**
organisation_module/client_2
organisation_module/client_2/**
organisation_module/main_organisation
organisation_module/main_organisation/**
organisation_module/my_organisation
organisation_module/my_organisation/**
organisation_module/supplier
organisation_module/supplier/**
person_module/john_smith
person_module/john_smith/**
\ No newline at end of file
...@@ -118,7 +118,7 @@ ...@@ -118,7 +118,7 @@
<dictionary> <dictionary>
<item> <item>
<key> <string>_text</string> </key> <key> <string>_text</string> </key>
<value> <string>python: context.AccountModule_getBankAccountItemList(organisation=context.getSourceSection(), skip_invalidated_bank_accounts=(context.getValidationState() != \'validated\'))</string> </value> <value> <string>python: context.AccountModule_getBankAccountItemList(organisation=context.getSourceSection(), base_category=\'source_payment\')</string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
return context.AccountModule_getBankAccountItemList( return context.AccountModule_getBankAccountItemList(
organisation=context.getSourceSection(), organisation=context.getSourceSection(),
skip_invalidated_bank_accounts= base_category='source_payment')
(context.getValidationState() != 'delivered'))
...@@ -22,12 +22,15 @@ organisation = portal.organisation_module.newContent( ...@@ -22,12 +22,15 @@ organisation = portal.organisation_module.newContent(
title=organisation_id, title=organisation_id,
group_value=portal.portal_categories.group.demo_group, group_value=portal.portal_categories.group.demo_group,
) )
organisation.validate()
bank_account_id = "erp5_payment_mean_bank" bank_account_id = "erp5_payment_mean_bank"
bank_account = organisation.newContent( bank_account = organisation.newContent(
portal_type='Bank Account', portal_type='Bank Account',
id=bank_account_id, id=bank_account_id,
title=bank_account_id title=bank_account_id
) )
bank_account.validate()
payment_mean_id = "erp5_payment_mean_ui_test_payment_transaction_group" payment_mean_id = "erp5_payment_mean_ui_test_payment_transaction_group"
payment_mean = portal.payment_transaction_group_module.newContent( payment_mean = portal.payment_transaction_group_module.newContent(
......
...@@ -314,7 +314,7 @@ class TestOrderMixin(SubcontentReindexingWrapper): ...@@ -314,7 +314,7 @@ class TestOrderMixin(SubcontentReindexingWrapper):
portal_type=organisation_portal_type) portal_type=organisation_portal_type)
organisation.newContent(id='bank', organisation.newContent(id='bank',
portal_type='Bank Account', portal_type='Bank Account',
title='bank%s' % organisation.getId()) title='bank%s' % organisation.getId()).validate()
organisation.setDefaultAddressStreetAddress('rue xv') organisation.setDefaultAddressStreetAddress('rue xv')
organisation.setDefaultAddressZipCode('12345') organisation.setDefaultAddressZipCode('12345')
if title is None: if title is None:
......
...@@ -68,6 +68,7 @@ my_organisation.validate() ...@@ -68,6 +68,7 @@ my_organisation.validate()
bank_account = my_organisation.newContent(portal_type="Bank Account", bank_account = my_organisation.newContent(portal_type="Bank Account",
title=howto_dict["sale_howto_bank_account_title"], title=howto_dict["sale_howto_bank_account_title"],
reference=howto_dict["sale_howto_bank_account_reference"],) reference=howto_dict["sale_howto_bank_account_reference"],)
bank_account.validate()
organisation = portal.organisation_module.newContent(portal_type='Organisation', organisation = portal.organisation_module.newContent(portal_type='Organisation',
title=howto_dict['sale_howto_organisation2_title'], title=howto_dict['sale_howto_organisation2_title'],
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment