Commit 0d8242de authored by Jérome Perrin's avatar Jérome Perrin

accounting: fix grouping dialog loosing section category on next page

In xhtml_style, just after clicking next or previous page in the listbox
buttons, the values selected in 'Section Category' and 'Section Category
Strict' were not used, because they were used from request and not from
as normal script parameters.

This fixes only the xhtml_style version, ERP5JS has another problem that
dialog fields values are reset when going to next page, so it would also
need this problem to be fixed.
parent 9405ec7d
Pipeline #22674 failed with stage
......@@ -4,7 +4,7 @@ request = container.REQUEST
portal = context.getPortalObject()
# we use a different selection for dialog params, because we never want this
# selection to be reseteted
# selection to be reset
dialog_selection_params = portal.portal_selections.getSelectionParamsFor(
'grouping_reference_fast_input_selection')
......@@ -26,12 +26,20 @@ for column in portal.portal_selections.getSelectionSortOrder(
continue
sort_on.append((column_id, column[1]))
section_category = request.get(
'section_category',
portal.portal_preferences.getPreferredAccountingTransactionSectionCategory())
section_category_strict = request.get(
'section_category_strict',
portal.portal_preferences.getPreferredAccountingSectionCategoryStrict())
# XXX ERP5JS does call list method with selection parameters, so we have to read in request.
section_category = section_category \
or request.get('section_category') \
or dialog_selection_params.get('section_category') \
or portal.portal_preferences.getPreferredAccountingTransactionSectionCategory()
for candidate in (
section_category_strict,
request.get('section_category_strict'),
dialog_selection_params.get('section_category_strict'),
portal.portal_preferences.getPreferredAccountingSectionCategoryStrict(),
):
if candidate is not None:
section_category_strict = candidate
break
section_uid = portal.Base_getSectionUidListForSectionCategory(
section_category, section_category_strict)
......
......@@ -50,7 +50,7 @@
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>selection=None, grouping=\'grouping\', node=\'\', mirror_section=\'\', ledger=\'\', title=None, delivery_reference=None, debit_price=None, credit_price=None, date=None, **kw</string> </value>
<value> <string>selection=None, grouping=\'grouping\', node=\'\', mirror_section=\'\', ledger=\'\', title=None, delivery_reference=None, debit_price=None, credit_price=None, date=None, section_category=\'\', section_category_strict=None, **kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>test_group_multi_pages_section_selection.html</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<html>
<head><title>Grouping with multiple pages and section selection</title></head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="4">
Grouping with multiple pages and section selection
</td></tr>
</thead><tbody tal:define="init_method string:AccountingTransactionModule_createAccountingTransactionList?add_draft_transactions:int=0&month_count:int=6&add_related_payments:int=1&both_sections:int=1">
<!-- Setup {{{ -->
<tal:block metal:use-macro="here/ERP5Site_viewAccountingZuiteCommonTemplate/macros/init"/>
<tr>
<td>selectAndWait</td>
<td>select_module</td>
<td>Organisations</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>Folder_show:method</td>
<td></td>
</tr>
<tr>
<td>type</td>
<!-- title -->
<td>//tr[@class='listbox-search-line']/th[2]/input</td>
<td>Client 1</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//input[@class="listbox-select-action"]</td>
<td></td>
</tr>
<!-- }}} -->
<!-- {{{ Select Client 1 Organisation and use grouping fast input -->
<tr>
<td>clickAndWait</td>
<td>link=Client 1</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//img[@alt='Grouping Reference Fast Input']</td>
<td></td>
</tr>
<!-- The mode should be 'grouping' by default -->
<tr>
<td>verifyValue</td>
<td>//input[@name='field_your_grouping' and @value='grouping']</td>
<td>on</td>
</tr>
<tr>
<td>verifyText</td>
<td>//label[contains(text(),"Total Selected Amount")]/../div[1]/</td>
<td>0.00</td>
</tr>
<tr>
<td>verifySelectedLabel</td>
<td>field_your_node</td>
<td></td>
</tr>
<tr>
<td>select</td>
<td>field_your_node</td>
<td>label=41 - Receivable</td>
</tr>
<tr>
<td>verifySelectedLabel</td>
<td>field_your_section_category</td>
<td>Demo Group</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//button[@id="dialog_update_button"]</td>
<td></td>
</tr>
<tr>
<td>assertPortalStatusMessage</td>
<td>Updated</td>
<td></td>
</tr>
<tr>
<td>assertText</td>
<td>//span[@class="listbox-current-page-total-number"]</td>
<td>24 records</td>
</tr>
<tr>
<td>select</td>
<td>field_your_section_category</td>
<td>Demo Group</td>
</tr>
<tr>
<td>click</td>
<td>field_your_section_category_strict</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//button[@id="dialog_update_button"]</td>
<td></td>
</tr>
<tr>
<td>assertPortalStatusMessage</td>
<td>Updated</td>
<td></td>
</tr>
<tr>
<td>assertText</td>
<td>//span[@class="listbox-current-page-total-number"]</td>
<td>12 records</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//button[@class='listbox_next_page']</td>
<td></td>
</tr>
<tr>
<td>verifyText</td>
<td>//span[@class='listbox-current-page-total-number']</td>
<td>12 records</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//button[@class='listbox_previous_page']</td>
<td></td>
</tr>
<tr>
<td>verifyText</td>
<td>//span[@class='listbox-current-page-total-number']</td>
<td>12 records</td>
</tr>
<tr>
<td>assertChecked</td>
<td>field_your_section_category_strict</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>field_your_section_category_strict</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//button[@id="dialog_update_button"]</td>
<td></td>
</tr>
<tr>
<td>assertPortalStatusMessage</td>
<td>Updated</td>
<td></td>
</tr>
<tr>
<td>assertText</td>
<td>//span[@class="listbox-current-page-total-number"]</td>
<td>24 records</td>
</tr>
<tr>
<td>select</td>
<td>field_your_section_category</td>
<td>Demo Group/Subsidiairy #1</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//button[@id="dialog_update_button"]</td>
<td></td>
</tr>
<tr>
<td>assertPortalStatusMessage</td>
<td>Updated</td>
<td></td>
</tr>
<tr>
<td>assertText</td>
<td>//span[@class="listbox-current-page-total-number"]</td>
<td>12 records</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//button[@class='listbox_next_page']</td>
<td></td>
</tr>
<tr>
<td>verifyText</td>
<td>//span[@class='listbox-current-page-total-number']</td>
<td>12 records</td>
</tr>
</tbody></table>
</body>
</html>
\ No newline at end of file
......@@ -2,7 +2,6 @@ from DateTime import DateTime
from Products.ZSQLCatalog.SQLCatalog import SimpleQuery
# params
section_title = 'My Organisation'
portal = context.getPortalObject()
accounting_module = portal.accounting_module
year = 2005
......@@ -14,9 +13,9 @@ business_process = portal.portal_catalog.getResultValue(
portal_type='Business Process').getRelativeUrl()
# if the previous test didn't change input data, no need to recreate content
current_script_data_id = '%s_month_count_%s_draft_%s_state_%s_payment_%s_leger_%s' % (
current_script_data_id = '%s_month_count_%s_draft_%s_state_%s_payment_%s_leger_%s_both_sections_%s' % (
month_count, add_draft_transactions, transaction_state,
add_related_payments, set_ledger, script.getId())
add_related_payments, set_ledger, both_sections, script.getId())
if accounting_module.getProperty('current_content_script',
'') == current_script_data_id:
......@@ -60,7 +59,10 @@ def getOrganisationByTitle(title):
assert len(document_list) == 1, \
'%d organisation with title "%s"' % (len(document_list), title)
return document_list[0]
section = getOrganisationByTitle(section_title)
section_list = [getOrganisationByTitle('My Organisation')]
if both_sections:
section_list.append(getOrganisationByTitle('My Master Organisation'))
euro_resource = 'currency_module/euro'
......@@ -75,93 +77,50 @@ else:
title='Dummy Product for testing')
for _ in range(random.randint(5, 10)):
pl = portal.sale_packing_list_module.newContent(
portal_type='Sale Packing List',
title='Dummy Packing List for testing',
source_section=section,
source=section,
destination_section=getOrganisationByTitle('Client 1'),
destination=getOrganisationByTitle('Client 1'),
specialise=business_process,
start_date=default_date, )
line = pl.newContent(portal_type='Sale Packing List Line',
resource_value=product,
quantity=random.randint(300, 500),
price=random.randint(300, 500))
for section in section_list:
pl = portal.sale_packing_list_module.newContent(
portal_type='Sale Packing List',
title='Dummy Packing List for testing',
source_section=section,
source=section,
destination_section=getOrganisationByTitle('Client 1'),
destination=getOrganisationByTitle('Client 1'),
specialise=business_process,
start_date=default_date, )
line = pl.newContent(portal_type='Sale Packing List Line',
resource_value=product,
quantity=random.randint(300, 500),
price=random.randint(300, 500))
# TODO: add an external method to modify workflow state of an object
#context.portal_tests.setSimulationStateFor(pl, 'stopped')
#assert pl.getSimulationState() == 'stopped'
#pl.recursiveReindexObject()
for month in range(1, month_count + 1):
default_date = DateTime(year, month, 1)
tr = accounting_module.newContent(
title='Accounts opening',
portal_type='Accounting Transaction',
source_section=section,
created_by_builder=1,
ledger_value=test_ledger_1,
start_date=default_date,
stop_date=default_date,
resource=euro_resource,
)
tr.newContent(portal_type='Accounting Transaction Line',
source=getAccountByTitle('Equity'),
quantity=20000)
tr.newContent(portal_type='Accounting Transaction Line',
source=getAccountByTitle('Fixed Assets'),
quantity=-15000)
tr.newContent(portal_type='Accounting Transaction Line',
source=getAccountByTitle('Stocks'),
quantity=-5000)
# TODO: "validated" should be renamed to "stopped"
if transaction_state == 'validated':
tr.stop()
assert tr.getSimulationState() == 'stopped'
elif transaction_state == 'delivered':
tr.stop()
tr.deliver()
assert tr.getSimulationState() == 'delivered'
else:
# other cases not supported for now
assert transaction_state == 'draft'
vat_rate = .1
for client_title, amount in (('Client 1', 2000), ('Client 2', 3000)):
default_date += 1
for section in section_list:
for month in range(1, month_count + 1):
default_date = DateTime(year, month, 1)
tr = accounting_module.newContent(
portal_type='Sale Invoice Transaction',
title='%s Sale Invoice' % client_title,
title='Accounts opening',
portal_type='Accounting Transaction',
source_section=section,
destination_section=getOrganisationByTitle(client_title),
source=section,
destination=getOrganisationByTitle(client_title),
created_by_builder=1,
ledger_value=test_ledger_1,
start_date=default_date,
stop_date=default_date,
specialise=business_process,
resource=euro_resource,
)
tr.newContent(portal_type='Sale Invoice Transaction Line',
source=getAccountByTitle('Receivable'),
quantity=-(amount * (1 + vat_rate)))
tr.newContent(portal_type='Sale Invoice Transaction Line',
source=getAccountByTitle('Collected VAT 10%'),
quantity=amount * vat_rate)
tr.newContent(portal_type='Sale Invoice Transaction Line',
source=getAccountByTitle('Goods Sales'),
quantity=amount)
# add a random invoice line, which should not impact our tests
tr.newContent(portal_type='Invoice Line',
source=section,
destination=getOrganisationByTitle(client_title),
resource_value=product,
quantity=random.randint(300, 400),
price=random.randint(300, 400), )
tr.newContent(portal_type='Accounting Transaction Line',
source=getAccountByTitle('Equity'),
quantity=20000)
tr.newContent(portal_type='Accounting Transaction Line',
source=getAccountByTitle('Fixed Assets'),
quantity=-15000)
tr.newContent(portal_type='Accounting Transaction Line',
source=getAccountByTitle('Stocks'),
quantity=-5000)
# TODO: "validated" should be renamed to "stopped"
if transaction_state == 'validated':
tr.stop()
assert tr.getSimulationState() == 'stopped'
......@@ -172,103 +131,148 @@ for month in range(1, month_count + 1):
else:
# other cases not supported for now
assert transaction_state == 'draft'
if add_related_payments:
payment = accounting_module.newContent(
causality_value=tr,
portal_type='Payment Transaction',
title='%s Payment' % client_title,
vat_rate = .1
for client_title, amount in (('Client 1', 2000), ('Client 2', 3000)):
default_date += 1
tr = accounting_module.newContent(
portal_type='Sale Invoice Transaction',
title='%s Sale Invoice' % client_title,
source_section=section,
destination_section=getOrganisationByTitle(client_title),
source=section,
destination=getOrganisationByTitle(client_title),
created_by_builder=1,
ledger_value=test_ledger_1,
start_date=default_date + .1, # make sure this will be after the invoice
stop_date=default_date + .1,
start_date=default_date,
stop_date=default_date,
specialise=business_process,
resource=euro_resource,
)
payment.newContent(portal_type='Accounting Transaction Line',
source=getAccountByTitle('Bank'),
quantity=-(amount * (1 + vat_rate)))
payment.newContent(portal_type='Accounting Transaction Line',
tr.newContent(portal_type='Sale Invoice Transaction Line',
source=getAccountByTitle('Receivable'),
quantity=(amount * (1 + vat_rate)))
if transaction_state in ('validated', 'delivered'):
payment.stop()
assert payment.getSimulationState() == 'stopped'
if transaction_state == 'delivered':
tr.deliver()
assert tr.getSimulationState() == 'delivered'
if not keep_grouping_reference:
tag = script.id + '_payment_indexation_' + payment.getPath()
payment.recursiveReindexObject(activate_kw={'tag': tag})
for line in payment.getMovementList(
portal_type=payment.getPortalAccountingMovementTypeList()):
if line.getGroupingReference():
line.activate(after_tag=tag).AccountingTransactionLine_resetGroupingReference()
quantity=-(amount * (1 + vat_rate)))
tr.newContent(portal_type='Sale Invoice Transaction Line',
source=getAccountByTitle('Collected VAT 10%'),
quantity=amount * vat_rate)
tr.newContent(portal_type='Sale Invoice Transaction Line',
source=getAccountByTitle('Goods Sales'),
quantity=amount)
# add a random invoice line, which should not impact our tests
tr.newContent(portal_type='Invoice Line',
source=section,
destination=getOrganisationByTitle(client_title),
resource_value=product,
quantity=random.randint(300, 400),
price=random.randint(300, 400), )
if transaction_state == 'validated':
tr.stop()
assert tr.getSimulationState() == 'stopped'
elif transaction_state == 'delivered':
tr.stop()
tr.deliver()
assert tr.getSimulationState() == 'delivered'
else:
# other cases not supported for now
assert transaction_state == 'draft'
if add_related_payments:
payment = accounting_module.newContent(
causality_value=tr,
portal_type='Payment Transaction',
title='%s Payment' % client_title,
source_section=section,
destination_section=getOrganisationByTitle(client_title),
created_by_builder=1,
ledger_value=test_ledger_1,
start_date=default_date + .1, # make sure this will be after the invoice
stop_date=default_date + .1,
resource=euro_resource,
)
payment.newContent(portal_type='Accounting Transaction Line',
source=getAccountByTitle('Bank'),
quantity=-(amount * (1 + vat_rate)))
payment.newContent(portal_type='Accounting Transaction Line',
source=getAccountByTitle('Receivable'),
quantity=(amount * (1 + vat_rate)))
if transaction_state in ('validated', 'delivered'):
payment.stop()
assert payment.getSimulationState() == 'stopped'
if transaction_state == 'delivered':
tr.deliver()
assert tr.getSimulationState() == 'delivered'
if not keep_grouping_reference:
tag = script.id + '_payment_indexation_' + payment.getPath()
payment.recursiveReindexObject(activate_kw={'tag': tag})
for line in payment.getMovementList(
portal_type=payment.getPortalAccountingMovementTypeList()):
if line.getGroupingReference():
line.activate(after_tag=tag).AccountingTransactionLine_resetGroupingReference()
else:
# other cases not supported for now
assert transaction_state == 'draft'
amount=7000
default_date += 1
tr = accounting_module.newContent(
portal_type='Purchase Invoice Transaction',
title='First Purchase Invoice',
destination_section=section,
source_section=getOrganisationByTitle('Supplier'),
created_by_builder=1,
ledger_value=test_ledger_1,
start_date=default_date-5, # In purchase invoice transaction, stop_date is accounting operation date.
stop_date=default_date,
specialise=business_process,
resource=euro_resource,
)
tr.newContent(portal_type='Purchase Invoice Transaction Line',
destination=getAccountByTitle('Payable'),
quantity=-(amount * (1 + vat_rate)))
tr.newContent(portal_type='Purchase Invoice Transaction Line',
destination=getAccountByTitle('Refundable VAT 10%'),
quantity=amount * vat_rate)
tr.newContent(portal_type='Purchase Invoice Transaction Line',
destination=getAccountByTitle('Goods Purchase'),
quantity=amount)
if transaction_state == 'validated':
tr.stop()
assert tr.getSimulationState() == 'stopped'
elif transaction_state == 'delivered':
tr.stop()
tr.deliver()
assert tr.getSimulationState() == 'delivered'
else:
# other cases not supported for now
assert transaction_state == 'draft'
if add_draft_transactions:
# finally, add random accounting transcactions in draft state, which have no
# impact on the test
for client_title, amount in (('Client 1', 2000), ('Client 2', 3000)):
amount=7000
default_date += 1
tr = accounting_module.newContent(
portal_type='Sale Invoice Transaction',
title='%s Sale Invoice' % client_title,
source_section=section,
destination_section=getOrganisationByTitle(client_title),
portal_type='Purchase Invoice Transaction',
title='First Purchase Invoice',
destination_section=section,
source_section=getOrganisationByTitle('Supplier'),
created_by_builder=1,
ledger_value=test_ledger_1,
start_date=default_date,
start_date=default_date-5, # In purchase invoice transaction, stop_date is accounting operation date.
stop_date=default_date,
resource=euro_resource,
specialise=business_process,
resource=euro_resource,
)
tr.newContent(portal_type='Sale Invoice Transaction Line',
source=getAccountByTitle('Receivable'),
quantity=random.randint(300, 400),)
tr.newContent(portal_type='Sale Invoice Transaction Line',
source=getAccountByTitle('Collected VAT 10%'),
quantity=random.randint(300, 400),)
tr.newContent(portal_type='Sale Invoice Transaction Line',
source=getAccountByTitle('Goods Sales'),
quantity=random.randint(300, 400),)
tr.newContent(portal_type='Purchase Invoice Transaction Line',
destination=getAccountByTitle('Payable'),
quantity=-(amount * (1 + vat_rate)))
tr.newContent(portal_type='Purchase Invoice Transaction Line',
destination=getAccountByTitle('Refundable VAT 10%'),
quantity=amount * vat_rate)
tr.newContent(portal_type='Purchase Invoice Transaction Line',
destination=getAccountByTitle('Goods Purchase'),
quantity=amount)
if transaction_state == 'validated':
tr.stop()
assert tr.getSimulationState() == 'stopped'
elif transaction_state == 'delivered':
tr.stop()
tr.deliver()
assert tr.getSimulationState() == 'delivered'
else:
# other cases not supported for now
assert transaction_state == 'draft'
if add_draft_transactions:
# finally, add random accounting transcactions in draft state, which have no
# impact on the test
for client_title, amount in (('Client 1', 2000), ('Client 2', 3000)):
tr = accounting_module.newContent(
portal_type='Sale Invoice Transaction',
title='%s Sale Invoice' % client_title,
source_section=section,
destination_section=getOrganisationByTitle(client_title),
created_by_builder=1,
ledger_value=test_ledger_1,
start_date=default_date,
stop_date=default_date,
resource=euro_resource,
specialise=business_process,
)
tr.newContent(portal_type='Sale Invoice Transaction Line',
source=getAccountByTitle('Receivable'),
quantity=random.randint(300, 400),)
tr.newContent(portal_type='Sale Invoice Transaction Line',
source=getAccountByTitle('Collected VAT 10%'),
quantity=random.randint(300, 400),)
tr.newContent(portal_type='Sale Invoice Transaction Line',
source=getAccountByTitle('Goods Sales'),
quantity=random.randint(300, 400),)
accounting_module.setProperty('current_content_script',
current_script_data_id)
......
......@@ -50,7 +50,7 @@
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>month_count=1, add_draft_transactions=1, transaction_state=\'validated\', add_related_payments=0, keep_grouping_reference=0, set_ledger=0</string> </value>
<value> <string>month_count=1, add_draft_transactions=1, transaction_state=\'validated\', add_related_payments=0, keep_grouping_reference=0, set_ledger=0, both_sections=0</string> </value>
</item>
<item>
<key> <string>id</string> </key>
......
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