[Erp5-report] r27650 - in /erp5/trunk/products/ERP5/tests: testNewPayroll.py testPayroll.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Jun 18 10:37:49 CEST 2009
Author: fabien
Date: Thu Jun 18 10:37:48 2009
New Revision: 27650
URL: http://svn.erp5.org?rev=27650&view=rev
Log:
- move and update tests from testPayroll.py testNewPayroll.py
- add setSystemPreference method since we need a different one from testBPMCore (because of payroll specific preference property : preferred_payroll_resource_use_category_list)
- add some new categories and step to be able to have labour line in the model
- fix some mistakes like trade_phase path
- use stepTic
Modified:
erp5/trunk/products/ERP5/tests/testNewPayroll.py
erp5/trunk/products/ERP5/tests/testPayroll.py
Modified: erp5/trunk/products/ERP5/tests/testNewPayroll.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testNewPayroll.py?rev=27650&r1=27649&r2=27650&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testNewPayroll.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testNewPayroll.py [utf8] Thu Jun 18 10:37:48 2009
@@ -30,6 +30,7 @@
from AccessControl.SecurityManagement import newSecurityManager
from Products.ERP5Type.tests.Sequence import SequenceList
from Products.ERP5Type.tests.utils import reindex
+from Products.CMFCore.utils import getToolByName
from DateTime import DateTime
import transaction
@@ -65,6 +66,32 @@
'Associate', 'Auditor', 'Author'], [])
user = uf.getUserById('admin').__of__(uf)
newSecurityManager(None, user)
+
+ @reindex
+ def setSystemPreference(self):
+ preference_tool = getToolByName(self.portal, 'portal_preferences')
+ system_preference_list = preference_tool.contentValues(
+ portal_type='System Preference')
+ if len(system_preference_list) > 1:
+ raise AttributeError('More than one System Preference, cannot test')
+ if len(system_preference_list) == 0:
+ system_preference = preference_tool.newContent(
+ portal_type='System Preference')
+ else:
+ system_preference = system_preference_list[0]
+ system_preference.edit(
+ preferred_invoicing_resource_use_category_list = \
+ self.invoicing_resource_use_category_list,
+ preferred_normal_resource_use_category_list = \
+ self.normal_resource_use_category_list,
+ preferred_payroll_resource_use_category_list = \
+ ['use/payroll'],
+ priority = 1,
+
+ )
+
+ if system_preference.getPreferenceState() == 'disabled':
+ system_preference.enable()
@reindex
def createCategories(self):
@@ -106,7 +133,9 @@
'product_line/state_insurance',
'use/payroll/tax',
'use/payroll/base_salary',
+ 'use/payroll/output',
'trade_phase/payroll/france/urssaf',
+ 'trade_phase/payroll/france/labour',
'time/hours',
'salary_range/france',
'salary_range/france/slice_a',
@@ -147,6 +176,15 @@
product_line='labour', use='payroll/base_salary')
sequence.edit(labour_service = node)
+ def stepCreateLabourOutputService(self, sequence=None, **kw):
+ '''In case we want to have the labour line in the model, the use category
+ should not be base_salary (=input) because in this case the line will be
+ added on each calculation'''
+ node = self.createService()
+ node.edit(title='Labour', quantity_unit='time/month',
+ product_line='labour', use='payroll/output')
+ sequence.edit(labour_service = node)
+
def stepCreateBonusService(self, sequence=None, **kw):
node = self.createService()
node.edit(title='Bonus', quantity_unit='time/month',
@@ -236,7 +274,7 @@
model_line = self.createModelLine(model)
model_line.edit(title='Urssaf',
reference='urssaf_model_line',
- trade_phase='trade_phase/payroll/france/urssaf',
+ trade_phase='payroll/france/urssaf',
resource_value=sequence.get('urssaf_service'),
variation_category_list=['tax_category/employee_share',
'tax_category/employer_share'],
@@ -249,7 +287,7 @@
model_line = self.createModelLine(model)
model_line.edit(title='Urssaf',
reference='urssaf_model_line_2',
- trade_phase='trade_phase/payroll/france/urssaf',
+ trade_phase='payroll/france/urssaf',
resource_value=sequence.get('urssaf_service'),
variation_category_list=['tax_category/employee_share',
'tax_category/employer_share',
@@ -265,7 +303,7 @@
model_line = self.createModelLine(model)
model_line.edit(title='Urssaf',
reference='urssaf_model_line_3',
- trade_phase='trade_phase/payroll/france/urssaf',
+ trade_phase='payroll/france/urssaf',
resource_value=sequence.get('urssaf_service'),
variation_category_list=['tax_category/employee_share',
'tax_category/employer_share',
@@ -283,7 +321,7 @@
model_line = self.createModelLine(paysheet)
model_line.edit(title='Urssaf',
reference='urssaf_model_line',
- trade_phase='trade_phase/payroll/france/urssaf',
+ trade_phase='payroll/france/urssaf',
resource_value=sequence.get('urssaf_service'),
variation_category_list=['tax_category/employee_share',
'tax_category/employer_share'],
@@ -740,7 +778,8 @@
def stepModifyBusinessPathTradePhase(self, sequence=None, **kw):
business_path = sequence.get('business_path')
- business_path.setTradePhaseList(['trade_phase/payroll/france/urssaf'])
+ business_path.setTradePhaseList(['payroll/france/urssaf',
+ 'payroll/france/labour'])
business_path.setSourceDecisionValue(sequence.get('urssaf_roubaix'))
business_path.setDeliveryBuilderList(('portal_deliveries/pay_sheet_builder',))
sequence.edit(business_path=business_path)
@@ -936,7 +975,7 @@
model = sequence.get('model')
model_line = self.createModelLine(model)
model_line.edit(title='intermediate line',
- trade_phase='trade_phase/payroll/france/urssaf',
+ trade_phase='payroll/france/urssaf',
resource_value=sequence.get('urssaf_service'),
reference='intermediate_line',
variation_category_list=['tax_category/employee_share',
@@ -953,7 +992,7 @@
model = sequence.get('model')
model_line = self.createModelLine(model)
model_line.edit(title='line applied on intermediate line',
- trade_phase='trade_phase/payroll/france/urssaf',
+ trade_phase='payroll/france/urssaf',
resource_value=sequence.get('urssaf_service'),
reference='line_applied_on_intermediate_line',
variation_category_list=['tax_category/employee_share',
@@ -993,7 +1032,7 @@
model = sequence.get('model')
model_line = self.createModelLine(model)
model_line.edit(title='Old Age Insurance',
- trade_phase='trade_phase/payroll/france/urssaf',
+ trade_phase='payroll/france/urssaf',
resource_value=sequence.get('old_age_insurance_service'),
reference='old_age_insurance',
variation_category_list=['tax_category/employee_share',
@@ -1019,7 +1058,7 @@
model = sequence.get('model')
model_line = self.createModelLine(model)
model_line.edit(title='Sickness Insurance',
- trade_phase='trade_phase/payroll/france/urssaf',
+ trade_phase='payroll/france/urssaf',
resource_value=sequence.get('sickness_insurance_service'),
reference='sickness_insurance',
variation_category_list=['tax_category/employee_share',
@@ -1071,7 +1110,7 @@
paysheet = sequence.get('paysheet')
model_line = self.createModelLine(paysheet)
model_line.edit(title='model line in the paysheet',
- trade_phase='trade_phase/payroll/france/urssaf',
+ trade_phase='payroll/france/urssaf',
resource_value=sequence.get('old_age_insurance_service'),
reference='model_line_in_the_payesheet',
variation_category_list=['tax_category/employee_share',
@@ -1310,7 +1349,7 @@
self.assertEquals(len(paysheet.PaySheetTransaction_getMovementList()), 0)
# we add a line, then it is returned in the list
- line = paysheet.newContent(portal_type='Pay Sheet Line')
+ line = self.createPaysheetLine(paysheet)
self.assertEquals(len(paysheet.PaySheetTransaction_getMovementList()), 1)
# if the line has cells with different tax categories, new properties are
@@ -1341,6 +1380,230 @@
self.assertEquals(4, movement.employer_share_price)
self.assertEquals(5, movement.employer_share_quantity)
self.assertEquals(4*5, movement.employer_share_total_price)
+
+ def stepCheckModelWithoutRefValidity(self, sequence=None, **kw):
+ '''
+ If no reference are defined on a model, the behavior is that this model is
+ always valid. So check a Pay Sheet Transaction Line is created after
+ calling the calculation script
+ '''
+ eur = sequence.get('currency')
+ labour = sequence.get('labour_service_output')
+
+ model_without_ref = self.getPortalObject().paysheet_model_module.newContent( \
+ specialise_value=sequence.get('business_process'),
+ portal_type='Pay Sheet Model',
+ variation_settings_category_list=['salary_range/france',],
+ effective_date=DateTime(2009, 1, 1),
+ expiration_date=DateTime(2009, 12, 31))
+ model_without_ref.setPriceCurrencyValue(eur)
+
+
+ model_line_1 = self.createModelLine(model_without_ref)
+ model_line_1.edit(
+ trade_phase='payroll/france/labour',
+ reference='model_without_ref',
+ resource_value=labour,
+ base_contribution_list=['base_amount/base_salary',
+ 'base_amount/gross_salary'],
+ quantity=10000)
+
+ # create the paysheet
+ paysheet = self.createPaysheet()
+ paysheet.edit(specialise_value=model_without_ref,
+ start_date=DateTime(2008, 1, 1),
+ stop_date=DateTime(2008, 1, 31),
+ price_currency_value=eur)
+ paysheet.PaySheetTransaction_applyModel()
+ self.stepTic()
+
+ portal_type_list = ['Pay Sheet Model Line',]
+
+ # if no reference, we don't care about dates
+ sub_object_list = paysheet.getInheritedObjectValueList(portal_type_list)
+
+ self.assertEquals(len(paysheet.contentValues(\
+ portal_type='Pay Sheet Line')), 0)
+ # calculate the pay sheet
+ paysheet.applyTransformation()
+ self.stepTic()
+ self.assertEquals(len(paysheet.contentValues(
+ portal_type='Pay Sheet Line')), 1)
+ # check values on the paysheet
+ self.assertEquals(paysheet.contentValues()[0].getTotalPrice(), 10000)
+
+ def stepCheckModelWithoutDateValidity(self, sequence=None, **kw):
+ '''
+ If no date are defined on a model, the behavior is that this model
+ is always valid. (XXX check if it's what we want)
+ So check that a line is created after calling calculation script, even if
+ there is no start_date or stop_date
+ '''
+ eur = sequence.get('currency')
+ labour = sequence.get('labour_service_output')
+
+ model_without_date = self.getPortalObject().paysheet_model_module.newContent( \
+ specialise_value=sequence.get('business_process'),
+ portal_type='Pay Sheet Model',
+ variation_settings_category_list=['salary_range/france',],
+ reference='fabien_model_without_date')
+
+ model_line_2 = self.createModelLine(model_without_date)
+ model_line_2.edit(
+ trade_phase='payroll/france/labour',
+ reference='model_without_date',
+ resource_value=labour,
+ base_contribution_list=['base_amount/base_salary',
+ 'base_amount/gross_salary'],
+ quantity=10000)
+
+ # create the paysheet
+ paysheet = self.createPaysheet()
+ paysheet.edit(specialise_value=model_without_date,
+ start_date=DateTime(2008, 1, 1),
+ stop_date=DateTime(2008, 1, 31),
+ price_currency_value=eur)
+ paysheet.PaySheetTransaction_applyModel()
+ self.stepTic()
+
+ portal_type_list = ['Pay Sheet Model Line',]
+
+ # if no dates, we don't care about dates
+ sub_object_list = paysheet.getInheritedObjectValueList(portal_type_list)
+
+ self.assertEquals(len(paysheet.contentValues(\
+ portal_type='Pay Sheet Line')), 0)
+ # calculate the pay sheet
+ paysheet.applyTransformation()
+ self.stepTic()
+ self.assertEquals(len(paysheet.contentValues(\
+ portal_type='Pay Sheet Line')), 1)
+ # check values on the paysheet
+ self.assertEquals(paysheet.contentValues()[0].getTotalPrice(), 10000)
+
+ def stepCheckModelDateValidity(self, sequence=None, **kw):
+ '''
+ check that model effective_date and expiration_date are take into account.
+ '''
+ eur = sequence.get('currency')
+ labour = sequence.get('labour_service_output')
+
+ model_1 = self.getPortalObject().paysheet_model_module.newContent( \
+ specialise_value=sequence.get('business_process'),
+ portal_type='Pay Sheet Model',
+ variation_settings_category_list=['salary_range/france',],
+ reference='fabien_model_2009',
+ effective_date=DateTime(2009, 1, 1),
+ expiration_date=DateTime(2009, 06, 30))
+
+ model_2 = self.getPortalObject().paysheet_model_module.newContent( \
+ specialise_value=sequence.get('business_process'),
+ portal_type='Pay Sheet Model',
+ variation_settings_category_list=['salary_range/france',],
+ reference='fabien_model_2009',
+ effective_date=DateTime(2009, 07, 1),
+ expiration_date=DateTime(2009, 12, 31))
+
+ model_line_3 = self.createModelLine(model_1)
+ model_line_3.edit(
+ trade_phase='payroll/france/labour',
+ reference='check_model_date_validity_1',
+ resource_value=labour,
+ base_contribution_list=['base_amount/base_salary',
+ 'base_amount/gross_salary'],
+ quantity=20000,
+ price=1)
+
+ model_line_4 = self.createModelLine(model_2)
+ model_line_4.edit(
+ trade_phase='payroll/france/labour',
+ reference='check_model_date_validity_2',
+ resource_value=labour,
+ base_contribution_list=['base_amount/base_salary',
+ 'base_amount/gross_salary'],
+ quantity=30000,
+ price=1)
+ self.stepTic()
+
+ # create the paysheet
+ paysheet = self.portal.accounting_module.newContent(
+ portal_type='Pay Sheet Transaction',
+ specialise_value=model_1,
+ start_date=DateTime(2009, 07, 1),
+ stop_date=DateTime(2009, 07, 31),
+ price_currency_value=eur)
+ paysheet.PaySheetTransaction_applyModel()
+ self.stepTic()
+
+ self.assertEquals(len(paysheet.contentValues(\
+ portal_type='Pay Sheet Line')), 0)
+ # calculate the pay sheet
+ paysheet.applyTransformation()
+ self.stepTic()
+ self.assertEquals(len(paysheet.contentValues(\
+ portal_type='Pay Sheet Line')), 1)
+ # check values on the paysheet, if it's model_2, the total_price
+ # should be 30000.
+ self.assertEquals(paysheet.contentValues()[0].getTotalPrice(), 30000)
+
+ def stepCheckModelVersioning(self, sequence=None, **kw):
+ '''
+ check that latest version is used in case of more thant one model is matching
+ using dates
+ '''
+ eur = sequence.get('currency')
+
+ # define a non effective model
+ model_1 = self.getPortalObject().paysheet_model_module.newContent( \
+ portal_type='Pay Sheet Model',
+ variation_settings_category_list=['salary_range/france',],
+ reference='fabien_model_2009',
+ effective_date=DateTime(2009, 01, 1),
+ expiration_date=DateTime(2009, 02, 28),
+ specialise_value=sequence.get('business_process'))
+
+ # define two models with same references and same dates
+ # but different version number
+ model_2 = self.getPortalObject().paysheet_model_module.newContent( \
+ portal_type='Pay Sheet Model',
+ variation_settings_category_list=['salary_range/france',],
+ reference='fabien_model_2009',
+ effective_date=DateTime(2009, 07, 1),
+ expiration_date=DateTime(2009, 12, 31),
+ version='002',
+ specialise_value=sequence.get('business_process'))
+
+ model_3 = self.getPortalObject().paysheet_model_module.newContent( \
+ portal_type='Pay Sheet Model',
+ variation_settings_category_list=['salary_range/france',],
+ reference='fabien_model_2009',
+ effective_date=DateTime(2009, 07, 1),
+ expiration_date=DateTime(2009, 12, 31),
+ version='001',
+ specialise_value=sequence.get('business_process'))
+ self.stepTic()
+
+ # create the paysheet
+ paysheet = self.portal.accounting_module.newContent(
+ portal_type='Pay Sheet Transaction',
+ specialise_value=model_1,
+ start_date=DateTime(2009, 07, 1),
+ stop_date=DateTime(2009, 07, 31),
+ price_currency_value=eur)
+ paysheet.PaySheetTransaction_applyModel()
+ self.stepTic()
+
+ # the effective model should be model_2 because of the effective date and
+ # version number
+ specialise_value = paysheet.getSpecialiseValue()
+ self.assertEquals(specialise_value.getEffectiveModel(paysheet), model_2)
+
+ # check the effective model tree list
+ effective_value_list = specialise_value.findEffectiveSpecialiseValueList(\
+ context=specialise_value,
+ start_date=paysheet.getStartDate(),
+ stop_date=paysheet.getStopDate())
+ self.assertEquals(effective_value_list, [model_2])
class TestNewPayroll(TestNewPayrollMixin):
@@ -1919,9 +2182,7 @@
mapped_value_property_list=('price',
'quantity'),)
cell_employer.edit(price=-.42, quantity=2998, tax_category='employer_share')
-
- transaction.commit()
- self.tic()
+ self.stepTic()
# AccountingTransactionModule_getPaySheetMovementMirrorSectionItemList is
# used in the report dialog to display possible organisations.
@@ -2120,8 +2381,7 @@
cell_employer_b.edit(price=-.32, quantity=3000,
salary_range='france/slice_b',
tax_category='employer_share')
- transaction.commit()
- self.tic()
+ self.stepTic()
# set request variables and render
request_form = self.portal.REQUEST
@@ -2318,9 +2578,7 @@
mapped_value_property_list=('price',
'quantity'),)
cell_employer.edit(price=-.40, quantity=3000, tax_category='employer_share')
-
- transaction.commit()
- self.tic()
+ self.stepTic()
# set request variables and render
request_form = self.portal.REQUEST
@@ -2357,6 +2615,353 @@
line_list[-1],
total_price=3000 + 2000 - (2000 * .5) - (3000 * .5))
+ def test_AccountingLineGeneration(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 )
+ # create services
+ base_salary = self.portal.service_module.newContent(
+ portal_type='Service',
+ title='Base Salary',
+ product_line='base_salary',
+ variation_base_category_list=('tax_category',),
+ variation_category_list=('tax_category/employee_share',
+ 'tax_category/employer_share'))
+ bonus = self.portal.service_module.newContent(
+ portal_type='Service',
+ title='Bonus',
+ product_line='base_salary',
+ variation_base_category_list=('tax_category',),
+ variation_category_list=('tax_category/employee_share',
+ 'tax_category/employer_share'))
+ deductions = self.portal.service_module.newContent(
+ portal_type='Service',
+ title='Deductions',
+ product_line='base_salary',
+ variation_base_category_list=('tax_category',),
+ variation_category_list=('tax_category/employee_share',
+ 'tax_category/employer_share'))
+ tax1 = self.portal.service_module.newContent(
+ portal_type='Service',
+ title='Tax1',
+ product_line='payroll_tax_1',
+ variation_base_category_list=('tax_category',),
+ variation_category_list=('tax_category/employee_share',
+ 'tax_category/employer_share'))
+
+ # create accounts
+ account_payroll_wages_expense = self.portal.account_module.newContent(
+ portal_type='Account',
+ title='Payroll Wages (expense)',
+ account_type='expense',)
+ account_payroll_taxes_expense = self.portal.account_module.newContent(
+ portal_type='Account',
+ title='Payroll Taxes (expense)',
+ account_type='expense',)
+ account_net_wages = self.portal.account_module.newContent(
+ portal_type='Account',
+ title='Net Wages',
+ account_type='liability/payable',)
+ account_payroll_taxes = self.portal.account_module.newContent(
+ portal_type='Account',
+ title='Payroll Taxes',
+ account_type='liability/payable',)
+
+ # create an invoice transaction rule for pay sheets.
+ rule = self.portal.portal_rules.newContent(
+ portal_type='Invoice Transaction Rule',
+ title='Rule for PaySheet Accounting',
+ reference='paysheet_transaction_rule',
+ test_method_id='SimulationMovement_testInvoiceTransactionRule')
+ rule.newContent(portal_type='Predicate',
+ title='Employee Share',
+ string_index='tax_category',
+ int_index=1,
+ membership_criterion_base_category_list=('tax_category',),
+ membership_criterion_category_list=('tax_category/employee_share',))
+ rule.newContent(portal_type='Predicate',
+ title='Employer Share',
+ string_index='tax_category',
+ int_index=2,
+ membership_criterion_base_category_list=('tax_category',),
+ membership_criterion_category_list=('tax_category/employer_share',))
+
+ rule.newContent(portal_type='Predicate',
+ title='Base Salary',
+ string_index='service',
+ int_index=1,
+ membership_criterion_base_category_list=('product_line',),
+ membership_criterion_category_list=('product_line/base_salary',))
+ rule.newContent(portal_type='Predicate',
+ title='Payroll Tax 1',
+ string_index='service',
+ int_index=2,
+ membership_criterion_base_category_list=('product_line',),
+ membership_criterion_category_list=('product_line/payroll_tax_1',))
+ self.stepTic()
+
+ cell_list = rule.contentValues(portal_type='Accounting Rule Cell')
+ self.assertEquals(4, len(cell_list))
+
+ employee_base_salary = rule._getOb('movement_0_0')
+ self.assertEquals('Employee Share * Base Salary',
+ employee_base_salary.getTitle())
+ employee_base_salary.newContent(
+ portal_type='Accounting Rule Cell Line',
+ destination_debit=1,
+ destination_value=account_payroll_wages_expense)
+ employee_base_salary.newContent(
+ portal_type='Accounting Rule Cell Line',
+ destination_credit=1,
+ destination_value=account_net_wages)
+
+ employer_tax = rule._getOb('movement_1_1')
+ self.assertEquals('Employer Share * Payroll Tax 1',
+ employer_tax.getTitle())
+ employer_tax.newContent(
+ portal_type='Accounting Rule Cell Line',
+ destination_debit=1,
+ destination_value=account_payroll_taxes)
+ employer_tax.newContent(
+ portal_type='Accounting Rule Cell Line',
+ destination_credit=1,
+ destination_value=account_payroll_taxes_expense)
+
+ employee_tax = rule._getOb('movement_0_1')
+ self.assertEquals('Employee Share * Payroll Tax 1',
+ employee_tax.getTitle())
+ employee_tax.newContent(
+ portal_type='Accounting Rule Cell Line',
+ destination_debit=1,
+ destination_value=account_payroll_taxes)
+ employee_tax.newContent(
+ portal_type='Accounting Rule Cell Line',
+ destination_credit=1,
+ generate_prevision_script_id=\
+ 'SimulationMovement_generatePrevisionForEmployeeSharePaySheetMovement',
+ destination_value=account_net_wages)
+ rule.validate()
+
+ # create a pay sheet
+ eur = self.portal.currency_module.EUR
+ employer = self.portal.organisation_module.newContent(
+ portal_type='Organisation',
+ title='Employer',
+ price_currency_value=eur,
+ group_value=self.portal.portal_categories.group.demo_group)
+ employee = self.portal.person_module.newContent(
+ portal_type='Person',
+ title='Employee',
+ career_reference='E1',
+ career_subordination_value=employer)
+ provider = self.portal.organisation_module.newContent(
+ portal_type='Organisation',
+ title='Service Provider')
+
+ ps = self.portal.accounting_module.newContent(
+ portal_type='Pay Sheet Transaction',
+ price_currency_value=eur,
+ resource_value=eur,
+ title='Employee 1',
+ destination_section_value=employer,
+ source_section_value=employee,
+ start_date=DateTime(2006, 1, 1),)
+
+ # base salary = 2000
+ line = ps.newContent(portal_type='Pay Sheet Line',
+ title='Base salary',
+ resource_value=base_salary,
+ destination_value=employee,
+ 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')
+ 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=1, quantity=2000, tax_category='employer_share')
+
+ # base_salary += 100 (bonus)
+ line = ps.newContent(portal_type='Pay Sheet Line',
+ title='Bonus',
+ resource_value=bonus,
+ destination_value=employee,
+ 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=100, 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=1, quantity=100, tax_category='employer_share')
+
+ # base_salary -= 50 (deductions) => base_salary == 2050
+ line = ps.newContent(portal_type='Pay Sheet Line',
+ title='Deduction',
+ resource_value=deductions,
+ destination_value=employee,
+ 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=50, 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=-1, quantity=50, tax_category='employer_share')
+
+ # tax1 = 10% for employee ( 205 )
+ # 20% for employer ( 410 )
+ line = ps.newContent(portal_type='Pay Sheet Line',
+ title='Tax 1',
+ resource_value=tax1,
+ source_section_value=provider,
+ destination_value=employee,
+ 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=2050, 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=-.2, quantity=2050, tax_category='employer_share')
+ ps.plan()
+ self.stepTic()
+
+ related_applied_rule = ps.getCausalityRelatedValue(
+ portal_type='Applied Rule')
+ self.assertNotEquals(related_applied_rule, None)
+
+ # build accounting lines
+ ps.confirm()
+ ps.start()
+ self.stepTic()
+ accounting_line_list = ps.contentValues(
+ portal_type='Pay Sheet Transaction Line')
+ self.assertEquals(len(accounting_line_list), 4)
+
+ line = [l for l in accounting_line_list
+ if l.getDestinationValue() == account_payroll_wages_expense][0]
+ self.assertEquals(2050, line.getDestinationDebit())
+ self.assertEquals(employer, line.getDestinationSectionValue())
+
+ line = [l for l in accounting_line_list
+ if l.getDestinationValue() == account_net_wages][0]
+ self.assertEquals(2050 - 205, line.getDestinationCredit())
+ self.assertEquals(employer, line.getDestinationSectionValue())
+ self.assertEquals(employee, line.getSourceSectionValue())
+
+ line = [l for l in accounting_line_list
+ if l.getDestinationValue() == account_payroll_taxes_expense][0]
+ self.assertEquals(410, line.getDestinationDebit())
+ self.assertEquals(employer, line.getDestinationSectionValue())
+
+ line = [l for l in accounting_line_list
+ if l.getDestinationValue() == account_payroll_taxes][0]
+ self.assertEquals(410 + 205, line.getDestinationCredit())
+ self.assertEquals(employer, line.getDestinationSectionValue())
+ self.assertEquals(provider, line.getSourceSectionValue())
+
+ def test_modelWithoutReferenceValidity(self):
+ ''' Check that if no REFERENCE are defined on a model, the behavior is
+ that this model is always valid. So check a Pay Sheet Transaction Line
+ is created after calling the calculation script
+ '''
+ sequence_list = SequenceList()
+ sequence_string = """
+ CreatePriceCurrency
+ CreateLabourOutputService
+ CreateBusinessProcess
+ CreateBusinessPath
+ CreateUrssafRoubaixOrganisation
+ ModifyBusinessPathTradePhase
+ Tic
+ CheckModelWithoutRefValidity
+ """
+ sequence_list.addSequenceString(sequence_string)
+ sequence_list.play(self)
+
+ def test_modelWithoutDateValidity(self):
+ ''' Check that if no DATE are defined on a model, the behavior is that
+ this model is always valid. (XXX check if it's what we want)
+ So check that a line is created after calling calculation script, even if
+ there is no start_date or stop_date
+ '''
+ sequence_list = SequenceList()
+ sequence_string = """
+ CreatePriceCurrency
+ CreateLabourOutputService
+ CreateBusinessProcess
+ CreateBusinessPath
+ CreateUrssafRoubaixOrganisation
+ ModifyBusinessPathTradePhase
+ Tic
+ CheckModelWithoutDateValidity
+ """
+ sequence_list.addSequenceString(sequence_string)
+ sequence_list.play(self)
+
+ def test_modelDateValidity(self):
+ ''' check that model effective_date and expiration_date are take into
+ account.
+ '''
+ sequence_list = SequenceList()
+ sequence_string = """
+ CreatePriceCurrency
+ CreateLabourOutputService
+ CreateBusinessProcess
+ CreateBusinessPath
+ CreateUrssafRoubaixOrganisation
+ ModifyBusinessPathTradePhase
+ Tic
+ CheckModelDateValidity
+ """
+ sequence_list.addSequenceString(sequence_string)
+ sequence_list.play(self)
+
+ def test_modelVersioning(self):
+ '''check that latest version is used in case of more thant one model is
+ matching using dates
+ '''
+ sequence_list = SequenceList()
+ sequence_string = """
+ CreatePriceCurrency
+ CreateBusinessProcess
+ CreateBusinessPath
+ CreateUrssafRoubaixOrganisation
+ ModifyBusinessPathTradePhase
+ Tic
+ CheckModelVersioning
+ """
+ sequence_list.addSequenceString(sequence_string)
+ sequence_list.play(self)
+
+
import unittest
def test_suite():
suite = unittest.TestSuite()
Modified: erp5/trunk/products/ERP5/tests/testPayroll.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testPayroll.py?rev=27650&r1=27649&r2=27650&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testPayroll.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testPayroll.py [utf8] Thu Jun 18 10:37:48 2009
@@ -576,504 +576,6 @@
pay_sheet_line_list = pay_sheet.contentValues(portal_type='Pay Sheet Line')
self.assertEquals(0, len(pay_sheet_line_list))
- def test_AccountingLineGeneration(self):
- # create services
- base_salary = self.portal.service_module.newContent(
- portal_type='Service',
- title='Base Salary',
- product_line='base_salary',
- variation_base_category_list=('tax_category',),
- variation_category_list=('tax_category/employee_share',
- 'tax_category/employer_share'))
- bonus = self.portal.service_module.newContent(
- portal_type='Service',
- title='Bonus',
- product_line='base_salary',
- variation_base_category_list=('tax_category',),
- variation_category_list=('tax_category/employee_share',
- 'tax_category/employer_share'))
- deductions = self.portal.service_module.newContent(
- portal_type='Service',
- title='Deductions',
- product_line='base_salary',
- variation_base_category_list=('tax_category',),
- variation_category_list=('tax_category/employee_share',
- 'tax_category/employer_share'))
- tax1 = self.portal.service_module.newContent(
- portal_type='Service',
- title='Tax1',
- product_line='payroll_tax_1',
- variation_base_category_list=('tax_category',),
- variation_category_list=('tax_category/employee_share',
- 'tax_category/employer_share'))
-
- # create accounts
- account_payroll_wages_expense = self.portal.account_module.newContent(
- portal_type='Account',
- title='Payroll Wages (expense)',
- account_type='expense',)
- account_payroll_taxes_expense = self.portal.account_module.newContent(
- portal_type='Account',
- title='Payroll Taxes (expense)',
- account_type='expense',)
- account_net_wages = self.portal.account_module.newContent(
- portal_type='Account',
- title='Net Wages',
- account_type='liability/payable',)
- account_payroll_taxes = self.portal.account_module.newContent(
- portal_type='Account',
- title='Payroll Taxes',
- account_type='liability/payable',)
-
- # create an invoice transaction rule for pay sheets.
- rule = self.portal.portal_rules.newContent(
- portal_type='Invoice Transaction Rule',
- title='Rule for PaySheet Accounting',
- reference='paysheet_transaction_rule',
- test_method_id=
- 'SimulationMovement_testInvoiceTransactionRule')
- rule.newContent(portal_type='Predicate',
- title='Employee Share',
- string_index='tax_category',
- int_index=1,
- membership_criterion_base_category_list=('tax_category',),
- membership_criterion_category_list=('tax_category/employee_share',))
- rule.newContent(portal_type='Predicate',
- title='Employer Share',
- string_index='tax_category',
- int_index=2,
- membership_criterion_base_category_list=('tax_category',),
- membership_criterion_category_list=('tax_category/employer_share',))
-
- rule.newContent(portal_type='Predicate',
- title='Base Salary',
- string_index='service',
- int_index=1,
- membership_criterion_base_category_list=('product_line',),
- membership_criterion_category_list=('product_line/base_salary',))
- rule.newContent(portal_type='Predicate',
- title='Payroll Tax 1',
- string_index='service',
- int_index=2,
- membership_criterion_base_category_list=('product_line',),
- membership_criterion_category_list=('product_line/payroll_tax_1',))
-
- transaction.commit()
- self.tic()
-
- cell_list = rule.contentValues(portal_type='Accounting Rule Cell')
- self.assertEquals(4, len(cell_list))
-
- employee_base_salary = rule._getOb('movement_0_0')
- self.assertEquals('Employee Share * Base Salary',
- employee_base_salary.getTitle())
- employee_base_salary.newContent(
- portal_type='Accounting Rule Cell Line',
- destination_debit=1,
- destination_value=account_payroll_wages_expense)
- employee_base_salary.newContent(
- portal_type='Accounting Rule Cell Line',
- destination_credit=1,
- destination_value=account_net_wages)
-
- employer_tax = rule._getOb('movement_1_1')
- self.assertEquals('Employer Share * Payroll Tax 1',
- employer_tax.getTitle())
- employer_tax.newContent(
- portal_type='Accounting Rule Cell Line',
- destination_debit=1,
- destination_value=account_payroll_taxes)
- employer_tax.newContent(
- portal_type='Accounting Rule Cell Line',
- destination_credit=1,
- destination_value=account_payroll_taxes_expense)
-
- employee_tax = rule._getOb('movement_0_1')
- self.assertEquals('Employee Share * Payroll Tax 1',
- employee_tax.getTitle())
- employee_tax.newContent(
- portal_type='Accounting Rule Cell Line',
- destination_debit=1,
- destination_value=account_payroll_taxes)
- employee_tax.newContent(
- portal_type='Accounting Rule Cell Line',
- destination_credit=1,
- generate_prevision_script_id=\
- 'SimulationMovement_generatePrevisionForEmployeeSharePaySheetMovement',
- destination_value=account_net_wages)
- rule.validate()
-
- # create a pay sheet
- eur = self.portal.currency_module.EUR
- employer = self.portal.organisation_module.newContent(
- portal_type='Organisation',
- title='Employer',
- price_currency_value=eur,
- group_value=self.portal.portal_categories.group.demo_group)
- employee = self.portal.person_module.newContent(
- portal_type='Person',
- title='Employee',
- career_reference='E1',
- career_subordination_value=employer)
- provider = self.portal.organisation_module.newContent(
- portal_type='Organisation',
- title='Service Provider')
-
- ps = self.portal.accounting_module.newContent(
- portal_type='Pay Sheet Transaction',
- price_currency_value=eur,
- resource_value=eur,
- title='Employee 1',
- destination_section_value=employer,
- source_section_value=employee,
- start_date=DateTime(2006, 1, 1),)
-
- # base salary = 2000
- line = ps.newContent(portal_type='Pay Sheet Line',
- title='Base salary',
- resource_value=base_salary,
- destination_value=employee,
- 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')
- 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=1, quantity=2000, tax_category='employer_share')
-
- # base_salary += 100 (bonus)
- line = ps.newContent(portal_type='Pay Sheet Line',
- title='Bonus',
- resource_value=bonus,
- destination_value=employee,
- 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=100, 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=1, quantity=100, tax_category='employer_share')
-
- # base_salary -= 50 (deductions) => base_salary == 2050
- line = ps.newContent(portal_type='Pay Sheet Line',
- title='Deduction',
- resource_value=deductions,
- destination_value=employee,
- 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=50, 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=-1, quantity=50, tax_category='employer_share')
-
- # tax1 = 10% for employee ( 205 )
- # 20% for employer ( 410 )
- line = ps.newContent(portal_type='Pay Sheet Line',
- title='Tax 1',
- resource_value=tax1,
- source_section_value=provider,
- destination_value=employee,
- 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=2050, 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=-.2, quantity=2050, tax_category='employer_share')
-
- ps.plan()
-
- transaction.commit()
- self.tic()
-
- related_applied_rule = ps.getCausalityRelatedValue(
- portal_type='Applied Rule')
- self.assertNotEquals(related_applied_rule, None)
-
- # build accounting lines
- ps.confirm()
- ps.start()
- transaction.commit()
- self.tic()
-
- accounting_line_list = ps.contentValues(
- portal_type='Pay Sheet Transaction Line')
- self.assertEquals(len(accounting_line_list), 4)
-
- line = [l for l in accounting_line_list
- if l.getDestinationValue() == account_payroll_wages_expense][0]
- self.assertEquals(2050, line.getDestinationDebit())
- self.assertEquals(employer, line.getDestinationSectionValue())
-
- line = [l for l in accounting_line_list
- if l.getDestinationValue() == account_net_wages][0]
- self.assertEquals(2050 - 205, line.getDestinationCredit())
- self.assertEquals(employer, line.getDestinationSectionValue())
- self.assertEquals(employee, line.getSourceSectionValue())
-
- line = [l for l in accounting_line_list
- if l.getDestinationValue() == account_payroll_taxes_expense][0]
- self.assertEquals(410, line.getDestinationDebit())
- self.assertEquals(employer, line.getDestinationSectionValue())
-
- line = [l for l in accounting_line_list
- if l.getDestinationValue() == account_payroll_taxes][0]
- self.assertEquals(410 + 205, line.getDestinationCredit())
- self.assertEquals(employer, line.getDestinationSectionValue())
- self.assertEquals(provider, line.getSourceSectionValue())
-
- def testModelWithoutRefValidity(self):
- '''
- If no reference are defined on a model, the behavior is that this model is
- always valid. So check a Pay Sheet Transaction Line is created after
- calling the calculation script
- '''
- eur = self.portal.currency_module.EUR
- model_without_ref = self.paysheet_model_module.newContent( \
- portal_type='Pay Sheet Model',
- variation_settings_category_list=self.variation_settings_category_list,
- effective_date=DateTime(2009, 1, 1),
- expiration_date=DateTime(2009, 12, 31))
- model_without_ref.setPriceCurrencyValue(eur)
-
- 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_without_ref,
- 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)
-
- # create the paysheet
- paysheet = self.portal.accounting_module.newContent(
- portal_type='Pay Sheet Transaction',
- specialise_value=model_without_ref,
- start_date=DateTime(2008, 1, 1),
- stop_date=DateTime(2008, 1, 31))
- paysheet.PaySheetTransaction_applyModel()
-
- portal_type_list = ['Pay Sheet Model Line',]
-
- # if no reference, we don't care about dates
- sub_object_list = paysheet.getInheritedObjectValueList(portal_type_list)
-
- 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')), 1)
- # check values on the paysheet
- self.assertEquals(paysheet.contentValues()[0].contentValues()[0].getTotalPrice(), 10000)
-
- def testModelWithoutDateValidity(self):
- '''
- If no date are defined on a model, the behavior is that this model
- is always valid. (XXX check if it's what we want)
- So check that a line is created after calling calculation script, even if
- there is no start_date or stop_date
- '''
- eur = self.portal.currency_module.EUR
- model_without_date = self.paysheet_model_module.newContent( \
- portal_type='Pay Sheet Model',
- variation_settings_category_list=self.variation_settings_category_list,
- reference='fabien_model_without_date')
-
- 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_2 = self.createModelLine(model=model_without_date,
- id='model_line_2',
- 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_2.setIntIndex(1)
-
- # create the paysheet
- paysheet = self.portal.accounting_module.newContent(
- portal_type='Pay Sheet Transaction',
- specialise_value=model_without_date,
- start_date=DateTime(2008, 1, 1),
- stop_date=DateTime(2008, 1, 31),
- price_currency_value=eur)
- paysheet.PaySheetTransaction_applyModel()
-
- portal_type_list = ['Pay Sheet Model Line',]
-
- # if no dates, we don't care about dates
- sub_object_list = paysheet.getInheritedObjectValueList(portal_type_list)
-
- 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')), 1)
- # check values on the paysheet
- self.assertEquals(paysheet.contentValues()[0].contentValues()[0].getTotalPrice(), 10000)
-
- def testModelDateValidity(self):
- '''
- check that model effective_date and expiration_date are take into account.
- '''
- eur = self.portal.currency_module.EUR
- model_1 = self.paysheet_model_module.newContent( \
- portal_type='Pay Sheet Model',
- variation_settings_category_list=self.variation_settings_category_list,
- reference='fabien_model_2009',
- effective_date=DateTime(2009, 1, 1),
- expiration_date=DateTime(2009, 06, 30))
-
- model_2 = self.paysheet_model_module.newContent( \
- portal_type='Pay Sheet Model',
- variation_settings_category_list=self.variation_settings_category_list,
- reference='fabien_model_2009',
- effective_date=DateTime(2009, 07, 1),
- expiration_date=DateTime(2009, 12, 31))
-
- 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_3 = self.createModelLine(model=model_1,
- id='model_line_3',
- variation_category_list=variation_category_list_salary,
- resource=self.labour,
- share_list=salary_share_list,
- slice_list=salary_slice_list,
- values=[[[20000, None],],],
- base_application_list=[],
- base_contribution_list=['base_amount/base_salary', 'base_amount/gross_salary'])
- model_line_3.setIntIndex(1)
-
- model_line_4 = self.createModelLine(model=model_2,
- id='model_line_4',
- variation_category_list=variation_category_list_salary,
- resource=self.labour,
- share_list=salary_share_list,
- slice_list=salary_slice_list,
- values=[[[30000, None],],],
- base_application_list=[],
- base_contribution_list=['base_amount/base_salary', 'base_amount/gross_salary'])
- model_line_4.setIntIndex(1)
-
- # create the paysheet
- paysheet = self.portal.accounting_module.newContent(
- portal_type='Pay Sheet Transaction',
- specialise_value=model_1,
- start_date=DateTime(2009, 07, 1),
- stop_date=DateTime(2009, 07, 31),
- price_currency_value=eur)
- 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')), 1)
- # check values on the paysheet, if it's model_2, the total_price should be 30000.
- self.assertEquals(paysheet.contentValues()[0].contentValues()[0].getTotalPrice(), 30000)
-
- def testModelVersioning(self):
- '''
- check that latest version is used in case of more thant one model is matching
- using dates
- '''
- eur = self.portal.currency_module.EUR
-
- # define a non effective model
- model_1 = self.paysheet_model_module.newContent( \
- portal_type='Pay Sheet Model',
- variation_settings_category_list=self.variation_settings_category_list,
- reference='fabien_model_2009',
- effective_date=DateTime(2009, 01, 1),
- expiration_date=DateTime(2009, 02, 28))
-
- # define two models with same references and same dates
- # but different version number
- model_2 = self.paysheet_model_module.newContent( \
- portal_type='Pay Sheet Model',
- variation_settings_category_list=self.variation_settings_category_list,
- reference='fabien_model_2009',
- effective_date=DateTime(2009, 07, 1),
- expiration_date=DateTime(2009, 12, 31),
- version='002')
-
- model_3 = self.paysheet_model_module.newContent( \
- portal_type='Pay Sheet Model',
- variation_settings_category_list=self.variation_settings_category_list,
- reference='fabien_model_2009',
- effective_date=DateTime(2009, 07, 1),
- expiration_date=DateTime(2009, 12, 31),
- version='001')
- transaction.commit()
- self.tic()
-
- # create the paysheet
- paysheet = self.portal.accounting_module.newContent(
- portal_type='Pay Sheet Transaction',
- specialise_value=model_1,
- start_date=DateTime(2009, 07, 1),
- stop_date=DateTime(2009, 07, 31),
- price_currency_value=eur)
- paysheet.PaySheetTransaction_applyModel()
-
- # the effective model should be model_2 because of the effective date and
- # version number
- specialise_value = paysheet.getSpecialiseValue()
- self.assertEquals(specialise_value.getEffectiveModel(paysheet), model_2)
-
- # check the effective model tree list
- self.assertEquals(specialise_value.getInheritanceEffectiveModelTreeAsList(paysheet),
- [model_2])
- # calculate the pay sheet
- pay_sheet_line_list = self.calculatePaySheet(paysheet=paysheet)
-
def testComplexModelInheritanceScheme(self):
'''
check inheritance and effective model with a more complexe inheritance tree
@@ -1172,7 +674,8 @@
slice_list=salary_slice_list,
values=[[[40000, None],],],
base_application_list=[],
- base_contribution_list=['base_amount/base_salary', 'base_amount/gross_salary'])
+ base_contribution_list=['base_amount/base_salary',
+ 'base_amount/gross_salary'])
model_5 = self.paysheet_model_module.newContent( \
portal_type='Pay Sheet Model',
@@ -1189,7 +692,8 @@
slice_list=salary_slice_list,
values=[[[50000, None],],],
base_application_list=[],
- base_contribution_list=['base_amount/base_salary', 'base_amount/gross_salary'])
+ base_contribution_list=['base_amount/base_salary',
+ 'base_amount/gross_salary'])
# third level : define two models with same references and same dates
# but different version number
@@ -1208,7 +712,8 @@
slice_list=salary_slice_list,
values=[[[60000, None],],],
base_application_list=[],
- base_contribution_list=['base_amount/base_salary', 'base_amount/gross_salary'])
+ base_contribution_list=['base_amount/base_salary',
+ 'base_amount/gross_salary'])
model_7 = self.paysheet_model_module.newContent( \
portal_type='Pay Sheet Model',
@@ -1225,7 +730,8 @@
slice_list=salary_slice_list,
values=[[[70000, None],],],
base_application_list=[],
- base_contribution_list=['base_amount/base_salary', 'base_amount/gross_salary'])
+ base_contribution_list=['base_amount/base_salary',
+ 'base_amount/gross_salary'])
transaction.commit()
self.tic()
More information about the Erp5-report
mailing list