[IMP] hr_holidays: when searching on holidays.status with an employee_id in
context and no specific order, order on limited leaves then on remaining leaves. This is usefull for users having their normal leaves being displayed in top of the list (legal leaves, compensatory leaves, then sick and unpaid for example). Also updated the name_get of holidays status, displaying (remaining leaves / max leaves) instead of (taken leaves / max leaves). What is important for users is the number of remaining leaves, not the number of leaves already taken in that type. Also updated and reindented demo data (compensatory is now limited + order of declaration due to this change).
This commit is contained in:
committed by
Thibault Delavallée
parent
c743c65d36
commit
24835fd423
@@ -96,19 +96,42 @@ class hr_holidays_status(osv.osv):
|
||||
}
|
||||
|
||||
def name_get(self, cr, uid, ids, context=None):
|
||||
|
||||
if not context.get('employee_id',False):
|
||||
if context is None:
|
||||
context = {}
|
||||
if not context.get('employee_id'):
|
||||
# leave counts is based on employee_id, would be inaccurate if not based on correct employee
|
||||
return super(hr_holidays_status, self).name_get(cr, uid, ids, context=context)
|
||||
|
||||
res = []
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
name = record.name
|
||||
if not record.limit:
|
||||
name = name + (' (%g/%g)' % (record.leaves_taken or 0.0, record.max_leaves or 0.0))
|
||||
name = name + (' (%g/%g)' % (record.virtual_remaining_leaves or 0.0, record.max_leaves or 0.0))
|
||||
res.append((record.id, name))
|
||||
return res
|
||||
|
||||
def _search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):
|
||||
""" Override _search to order the results, according to some employee.
|
||||
The order is the following
|
||||
|
||||
- limit (limited leaves first, such as Legal Leaves)
|
||||
- virtual remaining leaves (higher the better, so using reverse on sorted)
|
||||
|
||||
This override is necessary because those fields are not stored and depends
|
||||
on an employee_id given in context. This sort will be done when there
|
||||
is an employee_id in context and that no other order has been given
|
||||
to the method. """
|
||||
if context is None:
|
||||
context = {}
|
||||
ids = super(hr_holidays_status, self)._search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count, access_rights_uid=access_rights_uid)
|
||||
if not count and not order and context.get('employee_id'):
|
||||
leaves = self.browse(cr, uid, ids, context=context)
|
||||
# perform a 2-steps sort because sorting on reminaing leaves is reversed
|
||||
# sorted keep the order and is stable so 2-steps
|
||||
sorted_leaves = leaves.sorted(key=attrgetter('limit'))
|
||||
sorted_leaves = leaves.sorted(key=attrgetter('virtual_remaining_leaves'), reverse=True)
|
||||
return [leave.id for leave in sorted_leaves]
|
||||
return ids
|
||||
|
||||
|
||||
class hr_holidays(osv.osv):
|
||||
_name = "hr.holidays"
|
||||
|
||||
@@ -22,27 +22,28 @@
|
||||
<!-- Casual leave -->
|
||||
<record model="hr.holidays.status" id="holiday_status_cl">
|
||||
<field name="name" eval="'Legal Leaves '+time.strftime('%Y')"/>
|
||||
<field name="limit" eval="False"/>
|
||||
<field name="color_name">black</field>
|
||||
</record>
|
||||
|
||||
<!-- Sick leave -->
|
||||
<record model="hr.holidays.status" id="holiday_status_sl">
|
||||
<field name="name">Sick Leaves</field>
|
||||
<field name="limit">True</field>
|
||||
<field name="limit" eval="True"/>
|
||||
<field name="color_name">red</field>
|
||||
</record>
|
||||
|
||||
<!-- Compensatory Days -->
|
||||
<record model="hr.holidays.status" id="holiday_status_comp">
|
||||
<field name="name">Compensatory Days</field>
|
||||
<field name="limit">True</field>
|
||||
<field name="limit" eval="False"/>
|
||||
<field name="color_name">lavender</field>
|
||||
</record>
|
||||
|
||||
<!--Unpaid Leave -->
|
||||
<record model="hr.holidays.status" id="holiday_status_unpaid">
|
||||
<field name="name">Unpaid</field>
|
||||
<field name="limit">True</field>
|
||||
<field name="limit" eval="True"/>
|
||||
<field name="color_name">brown</field>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -1,61 +1,61 @@
|
||||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
<data noupdate="1">
|
||||
|
||||
<record model="hr.holidays" id="hr_holidays_employee1_allocation_cl">
|
||||
<field name="name">Casual Leave for Peter Parker</field>
|
||||
<field name="name">Legal Leaves for Peter Parker</field>
|
||||
<field name="holiday_status_id" ref="holiday_status_cl"/>
|
||||
<field name="type">add</field>
|
||||
<field name="number_of_days_temp">20</field>
|
||||
<field name="employee_id" ref="hr.employee_fp"/>
|
||||
</record>
|
||||
|
||||
<record model="hr.holidays" id="hr_holidays_employee1_cl">
|
||||
<field name="name">Trip with Family</field>
|
||||
<field name="holiday_status_id" ref="holiday_status_comp"/>
|
||||
<field eval="time.strftime('%Y-%m-01')" name="date_from"/>
|
||||
<field eval="time.strftime('%Y-%m-03')" name="date_to"/>
|
||||
<field name="type">remove</field>
|
||||
<field name="number_of_days_temp">3</field>
|
||||
<field name="employee_id" ref="hr.employee_fp"/>
|
||||
</record>
|
||||
|
||||
<record model="hr.holidays" id="hr_holidays_employee1_sl">
|
||||
<field name="name">Doctor Appointment</field>
|
||||
<field name="holiday_status_id" ref="holiday_status_sl"/>
|
||||
<field eval="time.strftime('%Y-%m-20')" name="date_from"/>
|
||||
<field eval="time.strftime('%Y-%m-22')" name="date_to"/>
|
||||
<field name="type">remove</field>
|
||||
<field name="state">draft</field>
|
||||
<field name="number_of_days_temp">3</field>
|
||||
<field name="employee_id" ref="hr.employee_fp"/>
|
||||
<record model="hr.holidays" id="hr_holidays_employee1_int_tour">
|
||||
<field name="name">International Tour</field>
|
||||
<field name="holiday_status_id" ref="holiday_status_comp"/>
|
||||
<field eval="time.strftime('%Y-%m-26')" name="date_from"/>
|
||||
<field eval="time.strftime('%Y-%m-28')" name="date_to"/>
|
||||
<field name="type">add</field>
|
||||
<field name="number_of_days_temp">7</field>
|
||||
<field name="employee_id" ref="hr.employee_fp"/>
|
||||
</record>
|
||||
|
||||
<record model="hr.holidays" id="hr_holidays_employee1_vc">
|
||||
<field name="name">Summer Vacation</field>
|
||||
<field name="holiday_status_id" ref="holiday_status_unpaid"/>
|
||||
<field eval="time.strftime('%Y-%m-23')" name="date_from"/>
|
||||
<field eval="time.strftime('%Y-%m-25')" name="date_to"/>
|
||||
<field name="type">add</field>
|
||||
<field name="state">draft</field>
|
||||
<field name="number_of_days_temp">7</field>
|
||||
<field name="employee_id" ref="hr.employee_fp"/>
|
||||
</record>
|
||||
|
||||
<record model="hr.holidays" id="hr_holidays_employee1_int_tour">
|
||||
<field name="name">International Tour</field>
|
||||
<field name="holiday_status_id" ref="holiday_status_comp"/>
|
||||
<field eval="time.strftime('%Y-%m-26')" name="date_from"/>
|
||||
<field eval="time.strftime('%Y-%m-28')" name="date_to"/>
|
||||
<field name="type">add</field>
|
||||
<field name="number_of_days_temp">7</field>
|
||||
<field name="employee_id" ref="hr.employee_fp"/>
|
||||
<field name="name">Summer Vacation</field>
|
||||
<field name="holiday_status_id" ref="holiday_status_unpaid"/>
|
||||
<field eval="time.strftime('%Y-%m-23')" name="date_from"/>
|
||||
<field eval="time.strftime('%Y-%m-25')" name="date_to"/>
|
||||
<field name="type">add</field>
|
||||
<field name="state">draft</field>
|
||||
<field name="number_of_days_temp">7</field>
|
||||
<field name="employee_id" ref="hr.employee_fp"/>
|
||||
</record>
|
||||
|
||||
<workflow action="validate" model="hr.holidays" ref="hr_holidays_employee1_allocation_cl"/>
|
||||
<workflow action="validate" model="hr.holidays" ref="hr_holidays_employee1_int_tour"/>
|
||||
|
||||
<record model="hr.holidays" id="hr_holidays_employee1_cl">
|
||||
<field name="name">Trip with Family</field>
|
||||
<field name="holiday_status_id" ref="holiday_status_comp"/>
|
||||
<field eval="time.strftime('%Y-%m-01')" name="date_from"/>
|
||||
<field eval="time.strftime('%Y-%m-03')" name="date_to"/>
|
||||
<field name="type">remove</field>
|
||||
<field name="number_of_days_temp">3</field>
|
||||
<field name="employee_id" ref="hr.employee_fp"/>
|
||||
</record>
|
||||
|
||||
<record model="hr.holidays" id="hr_holidays_employee1_sl">
|
||||
<field name="name">Doctor Appointment</field>
|
||||
<field name="holiday_status_id" ref="holiday_status_sl"/>
|
||||
<field eval="time.strftime('%Y-%m-20')" name="date_from"/>
|
||||
<field eval="time.strftime('%Y-%m-22')" name="date_to"/>
|
||||
<field name="type">remove</field>
|
||||
<field name="state">draft</field>
|
||||
<field name="number_of_days_temp">3</field>
|
||||
<field name="employee_id" ref="hr.employee_fp"/>
|
||||
</record>
|
||||
|
||||
<workflow action="validate" model="hr.holidays" ref="hr_holidays_employee1_sl"/>
|
||||
|
||||
<workflow action="validate" model="hr.holidays" ref="hr_holidays_employee1_int_tour"/>
|
||||
</data>
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
Reference in New Issue
Block a user