diff --git a/product/ERP5/tests/testPayroll.py b/product/ERP5/tests/testPayroll.py index 1ca8b9c5ebe1313d4335fbab1c4c7bf2f60fe66b..ce882e72b85540443f573f6628f3637ceca134c0 100644 --- a/product/ERP5/tests/testPayroll.py +++ b/product/ERP5/tests/testPayroll.py @@ -38,6 +38,29 @@ class TestPayrollMixin(ERP5ReportTestCase, TestBPMMixin): normal_resource_use_category_list = ['payroll/base_salary'] invoicing_resource_use_category_list = ['payroll/tax'] + BUSINESS_PATH_CREATION_SEQUENCE_STRING = """ + CreateBusinessProcess + CreateBusinessPath + CreateUrssafRoubaixOrganisation + ModifyBusinessPathTradePhase + ModelSpecialiseBusinessProcess + Tic + """ + COMMON_BASIC_DOCUMENT_CREATION_SEQUENCE_STRING = """ + CreateUrssafService + CreateLabourService + CreateEmployer + CreateEmployee + CreatePriceCurrency + CreateBasicModel + ModelCreateUrssafModelLine + UrssafModelLineCreateMovements + CreateBasicPaysheet + PaysheetCreateLabourPaySheetLine + Tic + """ + BUSINESS_PATH_CREATION_SEQUENCE_STRING + + def getTitle(self): return "Payroll" @@ -152,7 +175,7 @@ class TestPayrollMixin(ERP5ReportTestCase, TestBPMMixin): def getBusinessTemplateList(self): """ """ return ('erp5_base', 'erp5_pdm', 'erp5_trade', 'erp5_accounting', - 'erp5_invoicing', 'erp5_simplified_invoicing', 'erp5_mrp', + 'erp5_invoicing', 'erp5_simplified_invoicing', 'erp5_mrp', 'erp5_bpm', 'erp5_payroll') def createService(self): @@ -250,6 +273,11 @@ class TestPayrollMixin(ERP5ReportTestCase, TestBPMMixin): slice_value.setQuantityRangeMax(max_value) slice_value.setQuantityRangeMin(min_value) return slice_value + + def stepSetCurrencyOnModel(self, sequence=None, **kw): + model = sequence.get('model') + currency = sequence.get('price_currency') + model.setPriceCurrencyValue(currency) def stepCreateModelWithSlices(self, sequence=None, **kw): model = self.createModel() @@ -469,7 +497,8 @@ class TestPayrollMixin(ERP5ReportTestCase, TestBPMMixin): price=20, quantity=150, resource_value=sequence.get('labour_service'), - base_contribution_list=[ 'base_amount/base_salary']) + base_contribution_list=['base_amount/base_salary', + 'base_amount/gross_salary']) sequence.edit(labour_paysheet_line = paysheet_line) def stepPaysheetCreateBonusPaySheetLine(self, sequence=None, **kw): @@ -1883,28 +1912,6 @@ class TestPayrollMixin(ERP5ReportTestCase, TestBPMMixin): class TestPayroll(TestPayrollMixin): - BUSINESS_PATH_CREATION_SEQUENCE_STRING = """ - CreateBusinessProcess - CreateBusinessPath - CreateUrssafRoubaixOrganisation - ModifyBusinessPathTradePhase - ModelSpecialiseBusinessProcess - Tic - """ - COMMON_BASIC_DOCUMENT_CREATION_SEQUENCE_STRING = """ - CreateUrssafService - CreateLabourService - CreateEmployer - CreateEmployee - CreatePriceCurrency - CreateBasicModel - ModelCreateUrssafModelLine - UrssafModelLineCreateMovements - CreateBasicPaysheet - PaysheetCreateLabourPaySheetLine - Tic - """ + BUSINESS_PATH_CREATION_SEQUENCE_STRING - def test_modelGetCell(self): ''' Model objects have a overload method called getCell. This method first diff --git a/product/ERP5/tests/testPayroll_l10n_fr.py b/product/ERP5/tests/testPayroll_l10n_fr.py index 3f2b88fcdb505559d415d7e0be6c0eee3a38c9a6..28c38859dbeb4f4f3152f93a30fed76b7a9bd821 100644 --- a/product/ERP5/tests/testPayroll_l10n_fr.py +++ b/product/ERP5/tests/testPayroll_l10n_fr.py @@ -29,133 +29,79 @@ test cases related to french localisation (tranche A for example) """ -from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase -from AccessControl.SecurityManagement import newSecurityManager -from Acquisition import aq_parent +from Products.ERP5Type.tests.Sequence import SequenceList from Products.ERP5.tests.testPayroll import TestPayrollMixin -from DateTime import DateTime -import transaction class TestPayroll_l10n_fr(TestPayrollMixin): + PAYSHEET_WITH_SLICE_SEQUENCE_STRING = ''' + CreateBasicPaysheet + PaysheetSetModelAndApplyIt + PaysheetCreateLabourPaySheetLine + ''' + TestPayrollMixin.BUSINESS_PATH_CREATION_SEQUENCE_STRING + ''' + CheckUpdateAggregatedAmountListReturnUsingSlices + PaysheetApplyTransformation + Tic + CheckPaysheetLineAreCreatedUsingSlices + CheckPaysheetLineAmountsUsingSlices + CheckUpdateAggregatedAmountListReturnNothing + CheckPaysheetLineAmountsUsingSlices + ''' + def getTitle(self): return "Payroll_l10n_fr" def getBusinessTemplateList(self): """ """ - return ('erp5_base', 'erp5_pdm', 'erp5_trade', 'erp5_accounting', - 'erp5_payroll', 'erp5_payroll_l10n_fr') + return TestPayrollMixin.getBusinessTemplateList(self) +\ + ('erp5_payroll_l10n_fr',) + + def stepCheckYearToDateSliceAmount(self, sequence=None, **kw): + paysheet_module = self.portal.getDefaultModule(portal_type=\ + 'Pay Sheet Transaction') + paysheet_list = paysheet_module.contentValues(portal_type=\ + 'Pay Sheet Transaction') + self.assertEquals(len(paysheet_list), 2) # 2 paysheet have been created + # for this test + for paysheet in paysheet_list: + # the script used for calculation only take into account stopped or + # delivered paysheet + paysheet.stop() + self.stepTic() + + # here, check how much is contributed to the slices + self.assertEquals(400, # 200 from the 1st paysheet + 200 from the 2e + paysheet_list[1].PaySheetTransaction_getYearToDateSlice(\ + 'salary_range/france/slice_0_to_200')) + self.assertEquals(400, # 200 from the 1st paysheet + 200 from the 2e + paysheet_list[1].PaySheetTransaction_getYearToDateSlice(\ + 'salary_range/france/slice_200_to_400')) + self.assertEquals(5200, # (3000 - 400)*2 + paysheet_list[1].PaySheetTransaction_getYearToDateSlice(\ + 'salary_range/france/slice_400_to_5000')) def test_01_getYearToDateSlice(self): ''' that slices works and we can caculate the total amount spend on a slice ''' - eur = self.portal.currency_module.EUR - model = self.paysheet_model_module.newContent( \ - portal_type='Pay Sheet Model', - variation_settings_category_list=self.variation_settings_category_list) - model.setPriceCurrencyValue(eur) - - self.addSlice(model, 'salary_range/%s' % \ - self.france_settings_slice_a, 0, 1000) - self.addSlice(model, 'salary_range/%s' % \ - self.france_settings_slice_b, 1000, 2000) - self.addSlice(model, 'salary_range/%s' % \ - self.france_settings_slice_c, 2000, 10000000) - self.addSlice(model, 'salary_range/%s' % \ - self.france_settings_forfait, 0, 10000000) - - urssaf_slice_list = [ 'salary_range/'+self.france_settings_slice_a,] - urssaf_share_list = [ 'tax_category/'+self.tax_category_employee_share,] - salary_slice_list = ['salary_range/'+self.france_settings_forfait,] - salary_share_list = ['tax_category/'+self.tax_category_employee_share,] - variation_category_list_urssaf = urssaf_share_list + urssaf_slice_list - variation_category_list_salary = salary_share_list + salary_slice_list - - model_line_1 = self.createModelLine(model=model, - id='model_line_1', - variation_category_list=variation_category_list_salary, - resource=self.labour, - share_list=salary_share_list, - slice_list=salary_slice_list, - values=[[[10000, None],],], - base_application_list=[], - base_contribution_list=['base_amount/base_salary', - 'base_amount/gross_salary']) - model_line_1.setIntIndex(1) - - model_line_2 = self.createModelLine(model=model, - id='model_line_2', - variation_category_list=variation_category_list_urssaf, - resource=self.urssaf, - share_list=urssaf_share_list, - slice_list=urssaf_slice_list, - values=[[[None, 0.8]],], - source_value=self.service_organisation, - base_application_list=[ 'base_amount/base_salary',], - base_contribution_list=['base_amount/net_salary',]) - model_line_2.setIntIndex(2) - - model_line_3 = self.createModelLine(model=model, - id='model_line_3', - variation_category_list=variation_category_list_urssaf, - resource=self.urssaf, - share_list=urssaf_share_list, - slice_list=urssaf_slice_list, - values=[[[None, -0.1]],], - source_value=self.service_organisation, - base_application_list=[ 'base_amount/net_salary',], - base_contribution_list=['base_amount/deductible_tax',]) - model_line_3.setIntIndex(3) - - # create a paysheet with two lines - paysheet = self.portal.accounting_module.newContent( - portal_type='Pay Sheet Transaction', - specialise_value=model, - start_date=DateTime(2009, 07, 1), - stop_date=DateTime(2009, 07, 31)) - paysheet.PaySheetTransaction_applyModel() - self.assertEquals(len(paysheet.contentValues(portal_type='Pay Sheet Line')), 0) - # calculate the pay sheet - pay_sheet_line_list = self.calculatePaySheet(paysheet=paysheet) - self.assertEquals(len(paysheet.contentValues(portal_type='Pay Sheet Line')), 3) - # check values on the paysheet - line_list = paysheet.contentValues() - self.assertEquals(line_list[0].contentValues()[0].getTotalPrice(), 10000) - self.assertEquals(line_list[1].contentValues()[0].getTotalPrice(), 8000) - self.assertEquals(line_list[2].contentValues()[0].getTotalPrice(), -800) - paysheet.stop() - - # create anoter paysheet with two lines - paysheet_2 = self.portal.accounting_module.newContent( - portal_type='Pay Sheet Transaction', - specialise_value=model, - start_date=DateTime(2009, 8, 1), - stop_date=DateTime(2009, 8, 31)) - paysheet_2.PaySheetTransaction_applyModel() - self.assertEquals(len(paysheet_2.contentValues(portal_type='Pay Sheet Line')), 0) - # calculate the pay sheet - pay_sheet_line_list = self.calculatePaySheet(paysheet=paysheet_2) - self.assertEquals(len(paysheet.contentValues(portal_type='Pay Sheet Line')), 3) - # check values on the paysheet - line_list = paysheet_2.contentValues() - self.assertEquals(line_list[0].contentValues()[0].getTotalPrice(), 10000) - self.assertEquals(line_list[1].contentValues()[0].getTotalPrice(), 8000) - self.assertEquals(line_list[2].contentValues()[0].getTotalPrice(), -800) - transaction.commit() - self.tic() - - # here, check how much is contributed to the slices - self.assertEquals(2000, # 1000 from the 1st paysheet + 1000 from the 2e - paysheet_2.PaySheetTransaction_getYearToDateSlice(\ - 'salary_range/france/tranche_a')) - self.assertEquals(2000, # 1000 from the 1st paysheet + 1000 from the 2e - paysheet_2.PaySheetTransaction_getYearToDateSlice(\ - 'salary_range/france/tranche_b')) - self.assertEquals(16000, # (10000 - 1000 - 1000)*2 - paysheet_2.PaySheetTransaction_getYearToDateSlice(\ - 'salary_range/france/tranche_c')) + sequence_list = SequenceList() + sequence_string = """ + CreateUrssafService + CreateLabourService + CreateEmployer + CreateEmployee + CreatePriceCurrency + CreateModelWithSlices + SetCurrencyOnModel + ModelCreateUrssafModelLineWithSlices + UrssafModelLineWithSlicesCreateMovements + """ + self.PAYSHEET_WITH_SLICE_SEQUENCE_STRING +\ + self.PAYSHEET_WITH_SLICE_SEQUENCE_STRING + """ + CheckYearToDateSliceAmount + """ + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self) import unittest def test_suite():