Commit 9671e36a authored by Jérome Perrin's avatar Jérome Perrin

Merge remote-tracking branch 'upstream/master' into zope4py2

parents 43060af5 0d8242de
......@@ -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