diff --git a/product/ERP5/tests/testNewPayroll.py b/product/ERP5/tests/testNewPayroll.py index 58541b28379a0420a830882334b9b5890887cc21..cb25bf8aedd32411e1580e30cd660767205b83cf 100644 --- a/product/ERP5/tests/testNewPayroll.py +++ b/product/ERP5/tests/testNewPayroll.py @@ -119,6 +119,7 @@ class TestNewPayrollMixin(ERP5ReportTestCase, TestBPMMixin): 'salary_range/france/slice_600_to_800', 'marital_status/married', 'marital_status/single', + 'group/demo_group', ) def getBusinessTemplateList(self): @@ -1814,6 +1815,548 @@ class TestNewPayroll(TestNewPayrollMixin): sequence_list.addSequenceString(sequence_string) sequence_list.play(self) + def test_PayrollTaxesReport(self): + currency_module = self.getCurrencyModule() + if not hasattr(currency_module, 'EUR'): + currency_module.newContent( + portal_type = 'Currency', + reference = "EUR", id = "EUR", base_unit_quantity=0.001 ) + eur = self.portal.currency_module.EUR + service = self.portal.service_module.newContent( + portal_type='Service', + title='PS1', + variation_base_category_list=('tax_category',), + variation_category_list=('tax_category/employee_share', + 'tax_category/employer_share')) + employer = self.portal.organisation_module.newContent( + portal_type='Organisation', + title='Employer', + price_currency_value=eur, + group_value=self.portal.portal_categories.group.demo_group) + employee1 = self.portal.person_module.newContent( + portal_type='Person', + title='Employee One', + career_reference='E1', + career_subordination_value=employer) + employee2 = self.portal.person_module.newContent( + portal_type='Person', + title='Employee Two', + career_reference='E2', + career_subordination_value=employer) + provider = self.portal.organisation_module.newContent( + portal_type='Organisation', + title='Service Provider') + other_provider = self.portal.organisation_module.newContent( + portal_type='Organisation', + title='Another Service Provider') + ps1 = self.portal.accounting_module.newContent( + portal_type='Pay Sheet Transaction', + title='Employee 1', + destination_section_value=employer, + source_section_value=employee1, + start_date=DateTime(2006, 1, 1),) + line = ps1.newContent(portal_type='Pay Sheet Line', + resource_value=service, + source_section_value=provider, + # (destination is set by PaySheetTransaction.createPaySheetLine) + destination_value=employee1, + variation_category_list=('tax_category/employee_share', + 'tax_category/employer_share')) + cell_employee = line.newCell('tax_category/employee_share', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employee.edit(price=-.50, quantity=2000, tax_category='employee_share') + cell_employer = line.newCell('tax_category/employer_share', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employer.edit(price=-.40, quantity=2000, tax_category='employer_share') + ps1.plan() + + ps2 = self.portal.accounting_module.newContent( + portal_type='Pay Sheet Transaction', + title='Employee 2', + destination_section_value=employer, + source_section_value=employee2, + start_date=DateTime(2006, 1, 1),) + line = ps2.newContent(portal_type='Pay Sheet Line', + resource_value=service, + source_section_value=provider, + destination_value=employee2, + variation_category_list=('tax_category/employee_share', + 'tax_category/employer_share')) + cell_employee = line.newCell('tax_category/employee_share', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employee.edit(price=-.50, quantity=3000, tax_category='employee_share') + cell_employer = line.newCell('tax_category/employer_share', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employer.edit(price=-.40, quantity=3000, tax_category='employer_share') + + other_line = ps2.newContent(portal_type='Pay Sheet Line', + resource_value=service, + destination_value=employee2, + source_section_value=other_provider, + variation_category_list=('tax_category/employee_share', + 'tax_category/employer_share')) + cell_employee = other_line.newCell('tax_category/employee_share', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employee.edit(price=-.46, quantity=2998, tax_category='employee_share') + cell_employer = other_line.newCell('tax_category/employer_share', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employer.edit(price=-.42, quantity=2998, tax_category='employer_share') + + transaction.commit() + self.tic() + + # AccountingTransactionModule_getPaySheetMovementMirrorSectionItemList is + # used in the report dialog to display possible organisations. + self.assertEquals( + [('', ''), + (other_provider.getTitle(), other_provider.getRelativeUrl()), + (provider.getTitle(), provider.getRelativeUrl())], + self.portal.accounting_module\ + .AccountingTransactionModule_getPaySheetMovementMirrorSectionItemList()) + + # set request variables and render + request_form = self.portal.REQUEST + request_form['at_date'] = DateTime(2006, 2, 2) + request_form['section_category'] = 'group/demo_group' + request_form['simulation_state'] = ['draft', 'planned'] + request_form['resource'] = service.getRelativeUrl() + request_form['mirror_section'] = provider.getRelativeUrl() + + report_section_list = self.getReportSectionList( + self.portal.accounting_module, + 'AccountingTransactionModule_viewPaySheetLineReport') + self.assertEquals(1, len(report_section_list)) + + line_list = self.getListBoxLineList(report_section_list[0]) + data_line_list = [l for l in line_list if l.isDataLine()] + self.assertEquals(2, len(data_line_list)) + + # base_unit_quantity for EUR is set to 0.001 in createCurrencies, so the + # precision is 3 + precision = self.portal.REQUEST.get('precision') + self.assertEquals(3, precision) + + self.checkLineProperties(data_line_list[0], + id=1, + employee_career_reference='E1', + employee_title='Employee One', + base=2000, + employee_share=2000 * .50, + employer_share=2000 * .40, + total=(2000 * .50 + 2000 * .40)) + self.checkLineProperties(data_line_list[1], + id=2, + employee_career_reference='E2', + employee_title='Employee Two', + base=3000, + employee_share=3000 * .50, + employer_share=3000 * .40, + total=(3000 * .50 + 3000 * .40)) + # stat line + self.checkLineProperties(line_list[-1], + base=3000 + 2000, + employee_share=(3000 + 2000) * .50, + employer_share=(3000 + 2000) * .40, + total=((3000 + 2000) * .50 + (3000 + 2000) * .40)) + + def test_PayrollTaxesReportDifferentSalaryRange(self): + currency_module = self.getCurrencyModule() + if not hasattr(currency_module, 'EUR'): + currency_module.newContent( + portal_type = 'Currency', + reference = "EUR", id = "EUR", base_unit_quantity=0.001 ) + eur = self.portal.currency_module.EUR + service = self.portal.service_module.newContent( + portal_type='Service', + title='PS1', + variation_base_category_list=('tax_category', + 'salary_range'), + variation_category_list=('tax_category/employee_share', + 'tax_category/employer_share', + 'salary_range/france/slice_a', + 'salary_range/france/slice_b')) + employer = self.portal.organisation_module.newContent( + portal_type='Organisation', + title='Employer', + price_currency_value=eur, + group_value=self.portal.portal_categories.group.demo_group) + employee1 = self.portal.person_module.newContent( + portal_type='Person', + title='Employee One', + career_reference='E1', + career_subordination_value=employer) + employee2 = self.portal.person_module.newContent( + portal_type='Person', + title='Employee Two', + career_reference='E2', + career_subordination_value=employer) + provider = self.portal.organisation_module.newContent( + portal_type='Organisation', + title='Service Provider') + other_provider = self.portal.organisation_module.newContent( + portal_type='Organisation', + title='Another Service Provider') + ps1 = self.portal.accounting_module.newContent( + portal_type='Pay Sheet Transaction', + title='Employee 1', + destination_section_value=employer, + source_section_value=employee1, + start_date=DateTime(2006, 1, 1),) + line = ps1.newContent(portal_type='Pay Sheet Line', + resource_value=service, + source_section_value=provider, + # (destination is set by PaySheetTransaction.createPaySheetLine) + destination_value=employee1, + variation_category_list=('tax_category/employee_share', + 'tax_category/employer_share', + 'salary_range/france/slice_a', + 'salary_range/france/slice_b')) + cell_employee_a = line.newCell('tax_category/employee_share', + 'salary_range/france/slice_a', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employee_a.edit(price=-.50, quantity=1000, + tax_category='employee_share', + salary_range='france/slice_a') + cell_employee_b = line.newCell('tax_category/employee_share', + 'salary_range/france/slice_b', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employee_b.edit(price=-.20, quantity=500, + tax_category='employee_share', + salary_range='france/slice_b') + + cell_employer_a = line.newCell('tax_category/employer_share', + 'salary_range/france/slice_a', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employer_a.edit(price=-.40, quantity=1000, + tax_category='employer_share', + salary_range='france/slice_a') + cell_employer_b = line.newCell('tax_category/employer_share', + 'salary_range/france/slice_b', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employer_b.edit(price=-.32, quantity=500, + tax_category='employer_share', + salary_range='france/slice_b') + + ps1.plan() + + ps2 = self.portal.accounting_module.newContent( + portal_type='Pay Sheet Transaction', + title='Employee 2', + destination_section_value=employer, + source_section_value=employee2, + start_date=DateTime(2006, 1, 1),) + line = ps2.newContent(portal_type='Pay Sheet Line', + resource_value=service, + source_section_value=provider, + destination_value=employee2, + variation_category_list=('tax_category/employee_share', + 'tax_category/employer_share', + 'salary_range/france/slice_a', + 'salary_range/france/slice_b')) + cell_employee_a = line.newCell('tax_category/employee_share', + 'salary_range/france/slice_a', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employee_a.edit(price=-.50, quantity=1000, + salary_range='france/slice_a', + tax_category='employee_share') + cell_employee_b = line.newCell('tax_category/employee_share', + 'salary_range/france/slice_b', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employee_b.edit(price=-.20, quantity=3000, + salary_range='france/slice_b', + tax_category='employee_share') + + cell_employer_a = line.newCell('tax_category/employer_share', + 'salary_range/france/slice_a', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employer_a.edit(price=-.40, quantity=1000, + salary_range='france/slice_a', + tax_category='employer_share') + cell_employer_b = line.newCell('tax_category/employer_share', + 'salary_range/france/slice_b', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employer_b.edit(price=-.32, quantity=3000, + salary_range='france/slice_b', + tax_category='employer_share') + transaction.commit() + self.tic() + + # set request variables and render + request_form = self.portal.REQUEST + request_form['at_date'] = DateTime(2006, 2, 2) + request_form['section_category'] = 'group/demo_group' + request_form['simulation_state'] = ['draft', 'planned'] + request_form['resource'] = service.getRelativeUrl() + request_form['mirror_section'] = provider.getRelativeUrl() + + report_section_list = self.getReportSectionList( + self.portal.accounting_module, + 'AccountingTransactionModule_viewPaySheetLineReport') + self.assertEquals(1, len(report_section_list)) + + line_list = self.getListBoxLineList(report_section_list[0]) + data_line_list = [l for l in line_list if l.isDataLine()] + self.assertEquals(6, len(data_line_list)) + + self.checkLineProperties(data_line_list[0], + id=1, + employee_career_reference='E1', + employee_title='Employee One', + base=1000, + employee_share=1000 * .50, + employer_share=1000 * .40, + total=(1000 * .50 + 1000 * .40)) + self.checkLineProperties(data_line_list[1], + id=2, + employee_career_reference='E2', + employee_title='Employee Two', + base=1000, + employee_share=1000 * .50, + employer_share=1000 * .40, + total=(1000 * .50 + 1000 * .40)) + self.checkLineProperties(data_line_list[2], + employee_title='Total Slice A', + base=2000, + employee_share=2000 * .50, + employer_share=2000 * .40, + #total=(2000 * .50 + 2000 * .40) + ) + + self.checkLineProperties(data_line_list[3], + id=3, + employee_career_reference='E1', + employee_title='Employee One', + base=500, + employee_share=500 * .20, + employer_share=500 * .32, + total=(500 * .20 + 500 * .32)) + self.checkLineProperties(data_line_list[4], + id=4, + employee_career_reference='E2', + employee_title='Employee Two', + base=3000, + employee_share=3000 * .20, + employer_share=3000 * .32, + total=(3000 * .20 + 3000 * .32)) + self.checkLineProperties(data_line_list[5], + employee_title='Total Slice B', + base=3500, + employee_share=3500 * .20, + employer_share=3500 * .32, + #total=(3500 * .20 + 3500 * .32), + ) + + # stat line + self.checkLineProperties(line_list[-1], + base=2000 + 3500, + employee_share=(2000 * .50 + 3500 * .20), + employer_share=(2000 * .40 + 3500 * .32), + total=((2000 * .50 + 3500 * .20) + + (2000 * .40 + 3500 * .32))) + + def test_NetSalaryReport(self): + currency_module = self.getCurrencyModule() + if not hasattr(currency_module, 'EUR'): + currency_module.newContent( + portal_type = 'Currency', + reference = "EUR", id = "EUR", base_unit_quantity=0.001 ) + eur = self.portal.currency_module.EUR + salary_service = self.portal.service_module.newContent( + portal_type='Service', + title='Gross Salary', + variation_base_category_list=('tax_category',), + variation_category_list=('tax_category/employee_share', + 'tax_category/employer_share')) + service = self.portal.service_module.newContent( + portal_type='Service', + title='PS1', + variation_base_category_list=('tax_category',), + variation_category_list=('tax_category/employee_share', + 'tax_category/employer_share')) + employer = self.portal.organisation_module.newContent( + portal_type='Organisation', + title='Employer', + price_currency_value=eur, + group_value=self.portal.portal_categories.group.demo_group) + employee1 = self.portal.person_module.newContent( + portal_type='Person', + title='Employee One', + career_reference='E1', + career_subordination_value=employer) + employee1_ba = employee1.newContent(portal_type='Bank Account', + title='Bank 1') + employee2 = self.portal.person_module.newContent( + portal_type='Person', + title='Employee Two', + career_reference='E2', + career_subordination_value=employer) + employee2_ba = employee2.newContent(portal_type='Bank Account', + title='Bank 2') + provider = self.portal.organisation_module.newContent( + portal_type='Organisation', + title='Service Provider') + other_provider = self.portal.organisation_module.newContent( + portal_type='Organisation', + title='Another Service Provider') + ps1 = self.portal.accounting_module.newContent( + portal_type='Pay Sheet Transaction', + title='Employee 1', + destination_section_value=employer, + source_section_value=employee1, + payment_condition_source_payment_value=employee1_ba, + start_date=DateTime(2006, 1, 1),) + line = ps1.newContent(portal_type='Pay Sheet Line', + resource_value=salary_service, + destination_value=employee1, + base_contribution_list=['base_amount/net_salary',], + variation_category_list=('tax_category/employee_share', + 'tax_category/employer_share')) + cell_employee = line.newCell('tax_category/employee_share', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employee.edit(price=1, quantity=2000, tax_category='employee_share') + line = ps1.newContent(portal_type='Pay Sheet Line', + resource_value=service, + source_section_value=provider, + destination_value=employee1, + base_contribution_list=['base_amount/net_salary',], + variation_category_list=('tax_category/employee_share', + 'tax_category/employer_share')) + cell_employee = line.newCell('tax_category/employee_share', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employee.edit(price=-.50, quantity=2000, tax_category='employee_share') + cell_employer = line.newCell('tax_category/employer_share', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employer.edit(price=-.40, quantity=2000, tax_category='employer_share') + ps1.plan() + + ps2 = self.portal.accounting_module.newContent( + portal_type='Pay Sheet Transaction', + title='Employee 2', + destination_section_value=employer, + source_section_value=employee2, + payment_condition_source_payment_value=employee2_ba, + start_date=DateTime(2006, 1, 1),) + line = ps2.newContent(portal_type='Pay Sheet Line', + resource_value=salary_service, + destination_value=employee2, + base_contribution_list=['base_amount/net_salary',], + variation_category_list=('tax_category/employee_share', + 'tax_category/employer_share')) + cell_employee = line.newCell('tax_category/employee_share', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employee.edit(price=1, quantity=3000, tax_category='employee_share') + line = ps2.newContent(portal_type='Pay Sheet Line', + resource_value=service, + source_section_value=provider, + destination_value=employee2, + base_contribution_list=['base_amount/net_salary',], + variation_category_list=('tax_category/employee_share', + 'tax_category/employer_share')) + cell_employee = line.newCell('tax_category/employee_share', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employee.edit(price=-.50, quantity=3000, tax_category='employee_share') + cell_employer = line.newCell('tax_category/employer_share', + portal_type='Pay Sheet Cell', + base_id='movement', + mapped_value_property_list=('price', + 'quantity'),) + cell_employer.edit(price=-.40, quantity=3000, tax_category='employer_share') + + transaction.commit() + self.tic() + + # set request variables and render + request_form = self.portal.REQUEST + request_form['at_date'] = DateTime(2006, 2, 2) + request_form['section_category'] = 'group/demo_group' + request_form['simulation_state'] = ['draft', 'planned'] + + report_section_list = self.getReportSectionList( + self.portal.accounting_module, + 'AccountingTransactionModule_viewNetSalaryReport') + self.assertEquals(1, len(report_section_list)) + + line_list = self.getListBoxLineList(report_section_list[0]) + data_line_list = [l for l in line_list if l.isDataLine()] + self.assertEquals(2, len(data_line_list)) + + # base_unit_quantity for EUR is set to 0.001 in createCurrencies, so the + # precision is 3 + precision = self.portal.REQUEST.get('precision') + self.assertEquals(3, precision) + + self.checkLineProperties(data_line_list[0], + employee_career_reference='E1', + employee_title='Employee One', + employee_bank_account='Bank 1', + total_price=2000 - (2000 * .5),) + self.checkLineProperties(data_line_list[1], + employee_career_reference='E2', + employee_title='Employee Two', + employee_bank_account='Bank 2', + total_price=3000 - (3000 * .5),) + # stat line + self.checkLineProperties( + line_list[-1], + total_price=3000 + 2000 - (2000 * .5) - (3000 * .5)) + import unittest def test_suite(): suite = unittest.TestSuite() diff --git a/product/ERP5/tests/testPayroll.py b/product/ERP5/tests/testPayroll.py index 923eab5f7bb10186f7ec11f24339948863876b9e..2328009e355826bcd56a3bafcac3973835f5fb74 100644 --- a/product/ERP5/tests/testPayroll.py +++ b/product/ERP5/tests/testPayroll.py @@ -576,533 +576,6 @@ class TestPayroll(TestPayrollMixin): pay_sheet_line_list = pay_sheet.contentValues(portal_type='Pay Sheet Line') self.assertEquals(0, len(pay_sheet_line_list)) - def test_PayrollTaxesReport(self): - eur = self.portal.currency_module.EUR - service = self.portal.service_module.newContent( - portal_type='Service', - title='PS1', - variation_base_category_list=('tax_category',), - variation_category_list=('tax_category/employee_share', - 'tax_category/employer_share')) - employer = self.portal.organisation_module.newContent( - portal_type='Organisation', - title='Employer', - price_currency_value=eur, - group_value=self.portal.portal_categories.group.demo_group) - employee1 = self.portal.person_module.newContent( - portal_type='Person', - title='Employee One', - career_reference='E1', - career_subordination_value=employer) - employee2 = self.portal.person_module.newContent( - portal_type='Person', - title='Employee Two', - career_reference='E2', - career_subordination_value=employer) - provider = self.portal.organisation_module.newContent( - portal_type='Organisation', - title='Service Provider') - other_provider = self.portal.organisation_module.newContent( - portal_type='Organisation', - title='Another Service Provider') - ps1 = self.portal.accounting_module.newContent( - portal_type='Pay Sheet Transaction', - title='Employee 1', - destination_section_value=employer, - source_section_value=employee1, - start_date=DateTime(2006, 1, 1),) - line = ps1.newContent(portal_type='Pay Sheet Line', - resource_value=service, - source_section_value=provider, - # (destination is set by PaySheetTransaction.createPaySheetLine) - destination_value=employee1, - variation_category_list=('tax_category/employee_share', - 'tax_category/employer_share')) - cell_employee = line.newCell('tax_category/employee_share', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employee.edit(price=-.50, quantity=2000, tax_category='employee_share') - cell_employer = line.newCell('tax_category/employer_share', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employer.edit(price=-.40, quantity=2000, tax_category='employer_share') - ps1.plan() - - ps2 = self.portal.accounting_module.newContent( - portal_type='Pay Sheet Transaction', - title='Employee 2', - destination_section_value=employer, - source_section_value=employee2, - start_date=DateTime(2006, 1, 1),) - line = ps2.newContent(portal_type='Pay Sheet Line', - resource_value=service, - source_section_value=provider, - destination_value=employee2, - variation_category_list=('tax_category/employee_share', - 'tax_category/employer_share')) - cell_employee = line.newCell('tax_category/employee_share', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employee.edit(price=-.50, quantity=3000, tax_category='employee_share') - cell_employer = line.newCell('tax_category/employer_share', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employer.edit(price=-.40, quantity=3000, tax_category='employer_share') - - other_line = ps2.newContent(portal_type='Pay Sheet Line', - resource_value=service, - destination_value=employee2, - source_section_value=other_provider, - variation_category_list=('tax_category/employee_share', - 'tax_category/employer_share')) - cell_employee = other_line.newCell('tax_category/employee_share', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employee.edit(price=-.46, quantity=2998, tax_category='employee_share') - cell_employer = other_line.newCell('tax_category/employer_share', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employer.edit(price=-.42, quantity=2998, tax_category='employer_share') - - transaction.commit() - self.tic() - - # AccountingTransactionModule_getPaySheetMovementMirrorSectionItemList is - # used in the report dialog to display possible organisations. - self.assertEquals( - [('', ''), - (other_provider.getTitle(), other_provider.getRelativeUrl()), - (provider.getTitle(), provider.getRelativeUrl())], - self.portal.accounting_module\ - .AccountingTransactionModule_getPaySheetMovementMirrorSectionItemList()) - - # set request variables and render - request_form = self.portal.REQUEST - request_form['at_date'] = DateTime(2006, 2, 2) - request_form['section_category'] = 'group/demo_group' - request_form['simulation_state'] = ['draft', 'planned'] - request_form['resource'] = service.getRelativeUrl() - request_form['mirror_section'] = provider.getRelativeUrl() - - report_section_list = self.getReportSectionList( - self.portal.accounting_module, - 'AccountingTransactionModule_viewPaySheetLineReport') - self.assertEquals(1, len(report_section_list)) - - line_list = self.getListBoxLineList(report_section_list[0]) - data_line_list = [l for l in line_list if l.isDataLine()] - self.assertEquals(2, len(data_line_list)) - - # base_unit_quantity for EUR is set to 0.001 in createCurrencies, so the - # precision is 3 - precision = self.portal.REQUEST.get('precision') - self.assertEquals(3, precision) - - self.checkLineProperties(data_line_list[0], - id=1, - employee_career_reference='E1', - employee_title='Employee One', - base=2000, - employee_share=2000 * .50, - employer_share=2000 * .40, - total=(2000 * .50 + 2000 * .40)) - self.checkLineProperties(data_line_list[1], - id=2, - employee_career_reference='E2', - employee_title='Employee Two', - base=3000, - employee_share=3000 * .50, - employer_share=3000 * .40, - total=(3000 * .50 + 3000 * .40)) - # stat line - self.checkLineProperties(line_list[-1], - base=3000 + 2000, - employee_share=(3000 + 2000) * .50, - employer_share=(3000 + 2000) * .40, - total=((3000 + 2000) * .50 + (3000 + 2000) * .40)) - - def test_PayrollTaxesReportDifferentSalaryRange(self): - eur = self.portal.currency_module.EUR - service = self.portal.service_module.newContent( - portal_type='Service', - title='PS1', - variation_base_category_list=('tax_category', - 'salary_range'), - variation_category_list=('tax_category/employee_share', - 'tax_category/employer_share', - 'salary_range/france/tranche_a', - 'salary_range/france/tranche_b')) - employer = self.portal.organisation_module.newContent( - portal_type='Organisation', - title='Employer', - price_currency_value=eur, - group_value=self.portal.portal_categories.group.demo_group) - employee1 = self.portal.person_module.newContent( - portal_type='Person', - title='Employee One', - career_reference='E1', - career_subordination_value=employer) - employee2 = self.portal.person_module.newContent( - portal_type='Person', - title='Employee Two', - career_reference='E2', - career_subordination_value=employer) - provider = self.portal.organisation_module.newContent( - portal_type='Organisation', - title='Service Provider') - other_provider = self.portal.organisation_module.newContent( - portal_type='Organisation', - title='Another Service Provider') - ps1 = self.portal.accounting_module.newContent( - portal_type='Pay Sheet Transaction', - title='Employee 1', - destination_section_value=employer, - source_section_value=employee1, - start_date=DateTime(2006, 1, 1),) - line = ps1.newContent(portal_type='Pay Sheet Line', - resource_value=service, - source_section_value=provider, - # (destination is set by PaySheetTransaction.createPaySheetLine) - destination_value=employee1, - variation_category_list=('tax_category/employee_share', - 'tax_category/employer_share', - 'salary_range/france/tranche_a', - 'salary_range/france/tranche_b')) - cell_employee_a = line.newCell('tax_category/employee_share', - 'salary_range/france/tranche_a', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employee_a.edit(price=-.50, quantity=1000, - tax_category='employee_share', - salary_range='france/tranche_a') - cell_employee_b = line.newCell('tax_category/employee_share', - 'salary_range/france/tranche_b', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employee_b.edit(price=-.20, quantity=500, - tax_category='employee_share', - salary_range='france/tranche_b') - - cell_employer_a = line.newCell('tax_category/employer_share', - 'salary_range/france/tranche_a', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employer_a.edit(price=-.40, quantity=1000, - tax_category='employer_share', - salary_range='france/tranche_a') - cell_employer_b = line.newCell('tax_category/employer_share', - 'salary_range/france/tranche_b', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employer_b.edit(price=-.32, quantity=500, - tax_category='employer_share', - salary_range='france/tranche_b') - - ps1.plan() - - ps2 = self.portal.accounting_module.newContent( - portal_type='Pay Sheet Transaction', - title='Employee 2', - destination_section_value=employer, - source_section_value=employee2, - start_date=DateTime(2006, 1, 1),) - line = ps2.newContent(portal_type='Pay Sheet Line', - resource_value=service, - source_section_value=provider, - destination_value=employee2, - variation_category_list=('tax_category/employee_share', - 'tax_category/employer_share', - 'salary_range/france/tranche_a', - 'salary_range/france/tranche_b')) - cell_employee_a = line.newCell('tax_category/employee_share', - 'salary_range/france/tranche_a', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employee_a.edit(price=-.50, quantity=1000, - salary_range='france/tranche_a', - tax_category='employee_share') - cell_employee_b = line.newCell('tax_category/employee_share', - 'salary_range/france/tranche_b', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employee_b.edit(price=-.20, quantity=3000, - salary_range='france/tranche_b', - tax_category='employee_share') - - cell_employer_a = line.newCell('tax_category/employer_share', - 'salary_range/france/tranche_a', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employer_a.edit(price=-.40, quantity=1000, - salary_range='france/tranche_a', - tax_category='employer_share') - cell_employer_b = line.newCell('tax_category/employer_share', - 'salary_range/france/tranche_b', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employer_b.edit(price=-.32, quantity=3000, - salary_range='france/tranche_b', - tax_category='employer_share') - transaction.commit() - self.tic() - - # set request variables and render - request_form = self.portal.REQUEST - request_form['at_date'] = DateTime(2006, 2, 2) - request_form['section_category'] = 'group/demo_group' - request_form['simulation_state'] = ['draft', 'planned'] - request_form['resource'] = service.getRelativeUrl() - request_form['mirror_section'] = provider.getRelativeUrl() - - report_section_list = self.getReportSectionList( - self.portal.accounting_module, - 'AccountingTransactionModule_viewPaySheetLineReport') - self.assertEquals(1, len(report_section_list)) - - line_list = self.getListBoxLineList(report_section_list[0]) - data_line_list = [l for l in line_list if l.isDataLine()] - self.assertEquals(6, len(data_line_list)) - - self.checkLineProperties(data_line_list[0], - id=1, - employee_career_reference='E1', - employee_title='Employee One', - base=1000, - employee_share=1000 * .50, - employer_share=1000 * .40, - total=(1000 * .50 + 1000 * .40)) - self.checkLineProperties(data_line_list[1], - id=2, - employee_career_reference='E2', - employee_title='Employee Two', - base=1000, - employee_share=1000 * .50, - employer_share=1000 * .40, - total=(1000 * .50 + 1000 * .40)) - self.checkLineProperties(data_line_list[2], - employee_title='Total Tranche A', - base=2000, - employee_share=2000 * .50, - employer_share=2000 * .40, - #total=(2000 * .50 + 2000 * .40) - ) - - self.checkLineProperties(data_line_list[3], - id=3, - employee_career_reference='E1', - employee_title='Employee One', - base=500, - employee_share=500 * .20, - employer_share=500 * .32, - total=(500 * .20 + 500 * .32)) - self.checkLineProperties(data_line_list[4], - id=4, - employee_career_reference='E2', - employee_title='Employee Two', - base=3000, - employee_share=3000 * .20, - employer_share=3000 * .32, - total=(3000 * .20 + 3000 * .32)) - self.checkLineProperties(data_line_list[5], - employee_title='Total Tranche B', - base=3500, - employee_share=3500 * .20, - employer_share=3500 * .32, - #total=(3500 * .20 + 3500 * .32), - ) - - # stat line - self.checkLineProperties(line_list[-1], - base=2000 + 3500, - employee_share=(2000 * .50 + 3500 * .20), - employer_share=(2000 * .40 + 3500 * .32), - total=((2000 * .50 + 3500 * .20) + - (2000 * .40 + 3500 * .32))) - - def test_NetSalaryReport(self): - eur = self.portal.currency_module.EUR - salary_service = self.portal.service_module.newContent( - portal_type='Service', - title='Gross Salary', - variation_base_category_list=('tax_category',), - variation_category_list=('tax_category/employee_share', - 'tax_category/employer_share')) - service = self.portal.service_module.newContent( - portal_type='Service', - title='PS1', - variation_base_category_list=('tax_category',), - variation_category_list=('tax_category/employee_share', - 'tax_category/employer_share')) - employer = self.portal.organisation_module.newContent( - portal_type='Organisation', - title='Employer', - price_currency_value=eur, - group_value=self.portal.portal_categories.group.demo_group) - employee1 = self.portal.person_module.newContent( - portal_type='Person', - title='Employee One', - career_reference='E1', - career_subordination_value=employer) - employee1_ba = employee1.newContent(portal_type='Bank Account', - title='Bank 1') - employee2 = self.portal.person_module.newContent( - portal_type='Person', - title='Employee Two', - career_reference='E2', - career_subordination_value=employer) - employee2_ba = employee2.newContent(portal_type='Bank Account', - title='Bank 2') - provider = self.portal.organisation_module.newContent( - portal_type='Organisation', - title='Service Provider') - other_provider = self.portal.organisation_module.newContent( - portal_type='Organisation', - title='Another Service Provider') - ps1 = self.portal.accounting_module.newContent( - portal_type='Pay Sheet Transaction', - title='Employee 1', - destination_section_value=employer, - source_section_value=employee1, - payment_condition_source_payment_value=employee1_ba, - start_date=DateTime(2006, 1, 1),) - line = ps1.newContent(portal_type='Pay Sheet Line', - resource_value=salary_service, - destination_value=employee1, - base_contribution_list=['base_amount/net_salary',], - variation_category_list=('tax_category/employee_share', - 'tax_category/employer_share')) - cell_employee = line.newCell('tax_category/employee_share', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employee.edit(price=1, quantity=2000, tax_category='employee_share') - line = ps1.newContent(portal_type='Pay Sheet Line', - resource_value=service, - source_section_value=provider, - destination_value=employee1, - base_contribution_list=['base_amount/net_salary',], - variation_category_list=('tax_category/employee_share', - 'tax_category/employer_share')) - cell_employee = line.newCell('tax_category/employee_share', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employee.edit(price=-.50, quantity=2000, tax_category='employee_share') - cell_employer = line.newCell('tax_category/employer_share', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employer.edit(price=-.40, quantity=2000, tax_category='employer_share') - ps1.plan() - - ps2 = self.portal.accounting_module.newContent( - portal_type='Pay Sheet Transaction', - title='Employee 2', - destination_section_value=employer, - source_section_value=employee2, - payment_condition_source_payment_value=employee2_ba, - start_date=DateTime(2006, 1, 1),) - line = ps2.newContent(portal_type='Pay Sheet Line', - resource_value=salary_service, - destination_value=employee2, - base_contribution_list=['base_amount/net_salary',], - variation_category_list=('tax_category/employee_share', - 'tax_category/employer_share')) - cell_employee = line.newCell('tax_category/employee_share', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employee.edit(price=1, quantity=3000, tax_category='employee_share') - line = ps2.newContent(portal_type='Pay Sheet Line', - resource_value=service, - source_section_value=provider, - destination_value=employee2, - base_contribution_list=['base_amount/net_salary',], - variation_category_list=('tax_category/employee_share', - 'tax_category/employer_share')) - cell_employee = line.newCell('tax_category/employee_share', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employee.edit(price=-.50, quantity=3000, tax_category='employee_share') - cell_employer = line.newCell('tax_category/employer_share', - portal_type='Pay Sheet Cell', - base_id='movement', - mapped_value_property_list=('price', - 'quantity'),) - cell_employer.edit(price=-.40, quantity=3000, tax_category='employer_share') - - transaction.commit() - self.tic() - - # set request variables and render - request_form = self.portal.REQUEST - request_form['at_date'] = DateTime(2006, 2, 2) - request_form['section_category'] = 'group/demo_group' - request_form['simulation_state'] = ['draft', 'planned'] - - report_section_list = self.getReportSectionList( - self.portal.accounting_module, - 'AccountingTransactionModule_viewNetSalaryReport') - self.assertEquals(1, len(report_section_list)) - - line_list = self.getListBoxLineList(report_section_list[0]) - data_line_list = [l for l in line_list if l.isDataLine()] - self.assertEquals(2, len(data_line_list)) - - # base_unit_quantity for EUR is set to 0.001 in createCurrencies, so the - # precision is 3 - precision = self.portal.REQUEST.get('precision') - self.assertEquals(3, precision) - - self.checkLineProperties(data_line_list[0], - employee_career_reference='E1', - employee_title='Employee One', - employee_bank_account='Bank 1', - total_price=2000 - (2000 * .5),) - self.checkLineProperties(data_line_list[1], - employee_career_reference='E2', - employee_title='Employee Two', - employee_bank_account='Bank 2', - total_price=3000 - (3000 * .5),) - # stat line - self.checkLineProperties( - line_list[-1], - total_price=3000 + 2000 - (2000 * .5) - (3000 * .5)) - def test_AccountingLineGeneration(self): # create services base_salary = self.portal.service_module.newContent(