[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:
Hitesh Trivedi
2014-12-26 15:07:21 +01:00
committed by Thibault Delavallée
parent c743c65d36
commit 24835fd423
3 changed files with 72 additions and 48 deletions
+27 -4
View File
@@ -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"
+4 -3
View File
@@ -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>
+41 -41
View File
@@ -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>