Commit 856cd845 authored by Nicolas Wavrant's avatar Nicolas Wavrant

Make Payroll related portal types generic

Payroll related document classes (AnnotationLine,  PaySheetLine, PaySheetTransactionLine, PaySheetCell) are not different from Invoice-related classes.

This work aims to remove these document classes and base the portal types on the generic invoice classes.

This work started after finding out that Pay Sheet Lines were appearing in the "Account Statement" report, on side of Pay Sheet Transaction Lines. This happened as PaySheetLines is overiding the "isAccountable" method to return True. This merge request, besides removing duplicate code, fixes the accountable property of Pay Sheet Lines, and updates the call to the inventory API to generate correct accounting/payroll reports.

/reviewed-on nexedi/erp5!223
parents ba541ad4 b5565f96
...@@ -61,11 +61,15 @@ ...@@ -61,11 +61,15 @@
</item> </item>
<item> <item>
<key> <string>init_script</string> </key> <key> <string>init_script</string> </key>
<value> <string></string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>permission</string> </key> <key> <string>permission</string> </key>
<value> <string></string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>redirect_script</string> </key> <key> <string>redirect_script</string> </key>
...@@ -77,7 +81,19 @@ ...@@ -77,7 +81,19 @@
</item> </item>
<item> <item>
<key> <string>type_class</string> </key> <key> <string>type_class</string> </key>
<value> <string>AnnotationLine</string> </value> <value> <string>InvoiceLine</string> </value>
</item>
<item>
<key> <string>type_interface</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>type_mixin</string> </key>
<value>
<tuple/>
</value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -45,11 +45,15 @@ ...@@ -45,11 +45,15 @@
</item> </item>
<item> <item>
<key> <string>init_script</string> </key> <key> <string>init_script</string> </key>
<value> <string></string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>permission</string> </key> <key> <string>permission</string> </key>
<value> <string></string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>redirect_script</string> </key> <key> <string>redirect_script</string> </key>
...@@ -61,7 +65,19 @@ ...@@ -61,7 +65,19 @@
</item> </item>
<item> <item>
<key> <string>type_class</string> </key> <key> <string>type_class</string> </key>
<value> <string>PaySheetCell</string> </value> <value> <string>InvoiceCell</string> </value>
</item>
<item>
<key> <string>type_interface</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>type_mixin</string> </key>
<value>
<tuple/>
</value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -64,11 +64,15 @@ ...@@ -64,11 +64,15 @@
</item> </item>
<item> <item>
<key> <string>init_script</string> </key> <key> <string>init_script</string> </key>
<value> <string></string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>permission</string> </key> <key> <string>permission</string> </key>
<value> <string></string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>redirect_script</string> </key> <key> <string>redirect_script</string> </key>
...@@ -80,7 +84,19 @@ ...@@ -80,7 +84,19 @@
</item> </item>
<item> <item>
<key> <string>type_class</string> </key> <key> <string>type_class</string> </key>
<value> <string>PaySheetLine</string> </value> <value> <string>InvoiceLine</string> </value>
</item>
<item>
<key> <string>type_interface</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>type_mixin</string> </key>
<value>
<tuple/>
</value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -61,11 +61,15 @@ ...@@ -61,11 +61,15 @@
</item> </item>
<item> <item>
<key> <string>init_script</string> </key> <key> <string>init_script</string> </key>
<value> <string></string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>permission</string> </key> <key> <string>permission</string> </key>
<value> <string></string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>redirect_script</string> </key> <key> <string>redirect_script</string> </key>
...@@ -77,7 +81,19 @@ ...@@ -77,7 +81,19 @@
</item> </item>
<item> <item>
<key> <string>type_class</string> </key> <key> <string>type_class</string> </key>
<value> <string>AnnotationLine</string> </value> <value> <string>InvoiceLine</string> </value>
</item>
<item>
<key> <string>type_interface</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>type_mixin</string> </key>
<value>
<tuple/>
</value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -39,6 +39,7 @@ for inventory in portal.portal_simulation.getInventoryList( ...@@ -39,6 +39,7 @@ for inventory in portal.portal_simulation.getInventoryList(
precision=precision, precision=precision,
from_date=from_date, from_date=from_date,
at_date=at_date, at_date=at_date,
only_accountable=False,
group_by_resource=0, group_by_resource=0,
group_by_node=1, group_by_node=1,
ledger=ledger, ): ledger=ledger, ):
......
...@@ -23,39 +23,33 @@ ledger = request.get('ledger', None) ...@@ -23,39 +23,33 @@ ledger = request.get('ledger', None)
portal_simulation = context.getPortalObject().portal_simulation portal_simulation = context.getPortalObject().portal_simulation
employee_params = { inventory_param_dict = {
'group_by_node' : 1, 'group_by_node' : 1,
'group_by_variation': 1, 'group_by_variation': 1,
'section_uid' : section_uid_list, 'section_uid' : section_uid_list,
'contribution_share_uid' : context.portal_categories.contribution_share.employee.getUid(),
'at_date' : at_date, 'at_date' : at_date,
'from_date' : from_date, 'from_date' : from_date,
'simulation_state' : simulation_state, 'simulation_state' : simulation_state,
'precision' : precision, 'precision' : precision,
'resource' : resource, 'resource' : resource,
'ledger' : ledger, 'ledger' : ledger,
} 'only_accountable': False,
'portal_type' : ('Pay Sheet Line', 'Pay Sheet Cell'),
}
employer_params = { employee_param_dict = inventory_param_dict.copy()
'group_by_node' : 1, employee_param_dict['contribution_share_uid'] = context.portal_categories.contribution_share.employee.getUid()
'group_by_variation': 1,
'section_uid' : section_uid_list, employer_param_dict = inventory_param_dict.copy()
'contribution_share_uid' : context.portal_categories.contribution_share.employer.getUid(), employer_param_dict['contribution_share_uid'] = context.portal_categories.contribution_share.employer.getUid()
'at_date' : at_date,
'from_date' : from_date,
'simulation_state' : simulation_state,
'precision' : precision,
'resource' : resource,
'ledger' : ledger,
}
if request.get('mirror_section'): if request.get('mirror_section'):
mirror_section = request['mirror_section'] mirror_section = request['mirror_section']
employee_params['mirror_section'] = mirror_section employee_param_dict['mirror_section'] = mirror_section
employer_params['mirror_section'] = mirror_section employer_param_dict['mirror_section'] = mirror_section
employee_inventory_list = portal_simulation.getInventoryList(**employee_params) employee_inventory_list = portal_simulation.getInventoryList(**employee_param_dict)
employer_inventory_list = portal_simulation.getInventoryList(**employer_params) employer_inventory_list = portal_simulation.getInventoryList(**employer_param_dict)
inventory_list = {} inventory_list = {}
......
...@@ -5,6 +5,7 @@ getobject = portal.portal_catalog.getobject ...@@ -5,6 +5,7 @@ getobject = portal.portal_catalog.getobject
for x in portal.portal_simulation.getInventoryList( for x in portal.portal_simulation.getInventoryList(
portal_type=('Pay Sheet Cell', portal_type=('Pay Sheet Cell',
'Pay Sheet Line'), 'Pay Sheet Line'),
only_accountable=False,
group_by_resource=0, group_by_resource=0,
group_by_section=0, group_by_section=0,
group_by_mirror_section=1): group_by_mirror_section=1):
......
##############################################################################
#
# Copyright (c) 2007 Nexedi SA and Contributors. All Rights Reserved.
# Fabien Morin <fabien@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5.Document.PaySheetLine import PaySheetLine
class AnnotationLine(PaySheetLine):
"""
A AnnotationLine object allows to add annotation on
PaySheetTransaction. This could be accrued leave or worked duration
or anything else.
"""
meta_type = 'ERP5 Annotation Line'
portal_type = 'Annotation Line'
add_permission = Permissions.AddPortalContent
# Declarative security
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
# Declarative properties
property_sheets = ( PropertySheet.Base
, PropertySheet.XMLObject
, PropertySheet.CategoryCore
, PropertySheet.Amount
, PropertySheet.Task
, PropertySheet.Arrow
, PropertySheet.Movement
, PropertySheet.Price
, PropertySheet.VariationRange
)
##############################################################################
#
# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
# Jean-Paul Smets-Solanes <jp@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5.Document.InvoiceCell import InvoiceCell
class PaySheetCell(InvoiceCell):
"""
A PaySheetCell allows to define specific quantities
for each variation of a resource in a pay sheet line.
"""
meta_type = 'ERP5 Pay Sheet Cell'
portal_type = 'Pay Sheet Cell'
add_permission = Permissions.AddPortalContent
isCell = 1
# Declarative security
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
# Declarative properties
property_sheets = ( PropertySheet.Base
, PropertySheet.CategoryCore
, PropertySheet.Arrow
, PropertySheet.Amount
, PropertySheet.Task
, PropertySheet.Movement
, PropertySheet.Price
, PropertySheet.Predicate
, PropertySheet.MappedValue
)
security.declareProtected(Permissions.AccessContentsInformation,
'isAccountable')
def isAccountable(self):
return 1
##############################################################################
#
# Copyright (c) 2002-2009 Nexedi SA and Contributors. All Rights Reserved.
# Jean-Paul Smets-Solanes <jp@nexedi.com>
# Fabien Morin <fabien@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5.Document.InvoiceLine import InvoiceLine
class PaySheetLine(InvoiceLine):
"""
A PaySheetLine object allows to implement lines in
PaySheetTransactions.
It may include a price (for employer or employee share, etc.)
"""
meta_type = 'ERP5 Pay Sheet Line'
portal_type = 'Pay Sheet Line'
add_permission = Permissions.AddPortalContent
# Declarative security
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
# Declarative properties
property_sheets = ( PropertySheet.Base
, PropertySheet.XMLObject
, PropertySheet.CategoryCore
, PropertySheet.Amount
, PropertySheet.Task
, PropertySheet.Arrow
, PropertySheet.Movement
, PropertySheet.Price
, PropertySheet.VariationRange
)
# Cell Related
security.declareProtected( Permissions.ModifyPortalContent, 'newCellContent' )
def newCellContent(self, id, portal_type='Pay Sheet Cell', **kw):
"""Overriden to specify default portal type
"""
return self.newContent(id=id, portal_type=portal_type, **kw)
security.declareProtected(Permissions.AccessContentsInformation,
'isAccountable')
def isAccountable(self):
return 1
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment