tictac/itis_hr_extend/models/hr_holiday.py

663 lines
33 KiB
Python

# -*- coding: utf-8 -*-
##############################################################################
#
# TicTac allows several HR functionalities. This program bases on Odoo v. 8. Copyright
# (C) 2018 ITIS www.itis.de commissioned by Wikimedia Deutschland e.V.
#
# This program is free software: you can redistribute it and/or modify it under the
# terms of the GNU Affero General Public License as published by the Free Software
# Foundation, either version 3 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License along with
# this program. If not, see <https://www.gnu.org/licenses/>.
#
##############################################################################
from openerp import models, api, fields, _
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT, DEFAULT_SERVER_DATE_FORMAT
from datetime import datetime, timedelta
from openerp.exceptions import Warning
from openerp import SUPERUSER_ID
from openerp import tools
from openerp.osv import osv
import math
class HRHoliday(models.Model):
_inherit = "hr.holidays"
is_ot_leave = fields.Boolean(string="Is OT Leave")
leave_hours = fields.Float(string="Leave Hours", compute='calc_leave_hours')
ot_hours = fields.Float(string="Overtime Count", compute="calc_ot_count")
sum_leaves = fields.Float(string="Gesamtanspruch", compute='calc_sum_leaves')
# for SOW17
sum_leaves_ny = fields.Float(string="Next Year Remaining Leaves", compute='calc_ny_sum_leaves')
number_of_days_temp_ny = fields.Float(string="Next Year Days", compute='calc_number_of_days_temp_ny')
approved_by = fields.Many2one("res.users", string='Approved/Refuse By')
approved_at = fields.Datetime(string="Approved/Refuse At")
ljournal_ids = fields.One2many("hr.leave.journal", "leave_id")
leave_selection = fields.Selection([('full_day','Full Day'),('half_day','Half Day')], string="Leave Selection",default="full_day")
leave_selection_date_to = fields.Selection([('full_day','Full Day'),('half_day','Half Day')], string="Leave Selection",default="full_day")
half_day_type = fields.Selection([('morning','Morning'),('afternoon','Afternoon')], string="Half Day Type")
half_day_type_date_to = fields.Selection([('morning','Morning'),('afternoon','Afternoon')], string="Half Day Type")
leave_sele_dateto_flag = fields.Boolean(string='Date to Flag')
def onchange_date_from(self, cr, uid, ids, date_to, date_from):
"""
If there are no date set for date_to, automatically set one 8 hours later than
the date_from.
"""
# date_to has to be greater than date_from
# if (date_from and date_to) and (date_from > date_to):
# raise osv.except_osv(_('Warning!'),_('The start date must be anterior to the end date.111'))
result = {'value': {}}
# No date_to set so far: automatically compute one 8 hours later
if date_from and not date_to:
date_to_with_delta = datetime.strptime(date_from, tools.DEFAULT_SERVER_DATETIME_FORMAT) + timedelta(hours=8)
result['value']['date_to'] = str(date_to_with_delta)
if date_from and date_to:
DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
from_dt = datetime.strptime(date_from, DATETIME_FORMAT).date()
to_dt = datetime.strptime(date_to, DATETIME_FORMAT).date()
if from_dt == to_dt:
result['value']['leave_sele_dateto_flag'] =True
else:
result['value']['leave_sele_dateto_flag'] =False
date_from = datetime.strptime(date_from,'%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d')+' 09:00:00'
date_to = datetime.strptime(date_to,'%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d')+' 18:00:00'
# Compute and update the number of days
if date_from <= date_to:
diff_day = self._get_number_of_days(date_from, date_to)
result['value']['number_of_days_temp'] = round(math.floor(diff_day))+1
else:
result['value']['number_of_days_temp'] = 0
else:
result['value']['number_of_days_temp'] = 0
return result
def onchange_date_to(self, cr, uid, ids, date_to, date_from):
"""
Update the number_of_days.
"""
# date_to has to be greater than date_from
# if (date_from and date_to) and (date_from > date_to):
# raise osv.except_osv(_('Warning!'),_('The start date must be anterior to the end date.'))
result = {'value': {}}
if date_from and date_to:
DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
from_dt = datetime.strptime(date_from, DATETIME_FORMAT).date()
to_dt = datetime.strptime(date_to, DATETIME_FORMAT).date()
if from_dt == to_dt:
result['value']['leave_sele_dateto_flag'] =True
else:
result['value']['leave_sele_dateto_flag'] =False
date_from = datetime.strptime(date_from,'%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d')+' 09:00:00'
date_to = datetime.strptime(date_to,'%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d')+' 18:00:00'
# Compute and update the number of days
if date_from <= date_to:
diff_day = self._get_number_of_days(date_from, date_to)
result['value']['number_of_days_temp'] = round(math.floor(diff_day))+1
else:
result['value']['number_of_days_temp'] = 0
else:
result['value']['number_of_days_temp'] = 0
return result
def check_holidays(self, cr, uid, ids, context=None):
return True
def check_holidays2(self, cr, uid, ids, context=None):
for record in self.browse(cr, uid, ids, context=context):
if record.holiday_type != 'employee' or record.type != 'remove' or not record.employee_id or record.holiday_status_id.limit:
continue
if record.is_ot_leave:
continue
# if record.sum_leaves < record.number_of_days_temp:
# for SOW17
year = datetime.today().year
#for SOW17 testing
for_sow17 = self.pool.get('res.company').search(cr, uid,[('for_sow17','=',True)],limit=1)
if for_sow17:
for_sow17 = self.pool.get('res.company').browse(cr,uid,for_sow17)
year = datetime.strptime(for_sow17.next_year_date,DEFAULT_SERVER_DATE_FORMAT).date().year
next_year = year+1
date_from_year = datetime.strptime(record.date_from.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT).year
date_to_year = datetime.strptime(record.date_to.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT).year
#warning for the same year leave
if date_from_year != date_to_year:
raise Warning(_("Please create a leave request for every year."))
if date_from_year == next_year+1:
raise Warning(_('You are not allow to apply leave for the year after next'))
#warning when user didn't have next year contact or next year vacation
if date_from_year == next_year and record.sum_leaves_ny==0.0:
raise Warning(_('The number of next year remaining leaves is not sufficient for this leave type.\n'
'Please verify also the leaves waiting for validation.'))
if record.number_of_days_temp_ny==0.0:#for current year warning
if record.sum_leaves < record.number_of_days_temp:
# Raising a warning gives a more user-friendly feedback than the default constraint error
raise Warning(_('The number of remaining leaves is not sufficient for this leave type.\n'
'Please verify also the leaves waiting for validation.'))
else:#next year warning
if record.sum_leaves_ny < record.number_of_days_temp_ny:
raise Warning(_('The number of next year remaining leaves is not sufficient for this leave type.\n'
'Please verify also the leaves waiting for validation.'))
return True
def _check_date(self, cr, uid, ids, context=None):
for holiday in self.browse(cr, uid, ids, context=context):
domain = [
('date_from', '<=', holiday.date_to),
('date_to', '>=', holiday.date_from),
('employee_id', '=', holiday.employee_id.id),
('id', '!=', holiday.id),
('state', 'not in', ['cancel', 'refuse']),
('holiday_status_id','!=','Holiday')
]
nholidays = self.search_count(cr, uid, domain, context=context)
if nholidays:
return False
return True
_constraints = [
(_check_date, 'You can not have 2 leaves that overlaps on same day!', ['date_from','date_to'])
]
def write(self, cr, uid, ids, values, context=None):
if not context: context = {}
grp_hr_rec = self.pool.get("ir.model.data").xmlid_to_object(cr, SUPERUSER_ID, "base.group_hr_user")
hr_usr_id = False
if 'date_from' in values or 'date_to' in values:
self.check_holidays2(cr,uid,ids,context=context)
for usr in grp_hr_rec.users:
hr_usr_id = usr.id
break
if not hr_usr_id:
hr_usr_id = SUPERUSER_ID
context.update({'hr_uid':uid})
return super(HRHoliday, self).write(cr, hr_usr_id, ids, values, context=context)
@api.multi
@api.onchange("employee_id")
@api.depends("employee_id")
def calc_sum_leaves(self):
for record in self:
record.sum_leaves = record.employee_id.sum_leaves
# for SOW17
@api.multi
@api.onchange("employee_id")
@api.depends("employee_id")
def calc_ny_sum_leaves(self):
for record in self:
record.sum_leaves_ny = record.employee_id.sum_leaves_ny
return {}
@api.onchange("number_of_days_temp")
@api.depends("number_of_days_temp")
def calc_number_of_days_temp_ny(self):
for record in self:
res = 0
if not record.date_from or not record.date_to:
return {}
date_from = datetime.strptime(record.date_from.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT)
date_to = datetime.strptime(record.date_to.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT)
today_date = datetime.today().date()
# for sow17 testing
for_sow17 = self.env['res.company'].sudo().search([('for_sow17','=',True)],limit=1)
if for_sow17:
today_date = datetime.strptime(for_sow17.next_year_date,DEFAULT_SERVER_DATE_FORMAT).date()
temp_date = date_from
while temp_date <= date_to:
holiday = None
holiday = self.env['itis.holiday'].search([('date', '=', temp_date)])
if holiday:
temp_date += timedelta(days=1)
continue
if today_date.year == temp_date.year:
temp_date += timedelta(days=1)
continue
weekday = temp_date.weekday()
for contract in record.employee_id.contract_ids:
cont_start_date = datetime.strptime(contract.date_start, DEFAULT_SERVER_DATE_FORMAT)
cont_end_date = False
if not contract.date_end:
if cont_start_date <= temp_date:
if record.get_hours(weekday, contract.working_hours.attendance_ids) > 0.0:
if temp_date == date_from and record.leave_selection =='half_day':
res += 0.5
break
if temp_date == date_to and record.leave_selection_date_to =='half_day':
res += 0.5
break
res += 1
else:
cont_end_date = datetime.strptime(contract.date_end, DEFAULT_SERVER_DATE_FORMAT)
# cont_end_date += timedelta(days=1)
if cont_start_date <= temp_date and cont_end_date >= temp_date:
if record.get_hours(weekday, contract.working_hours.attendance_ids) > 0.0:
if temp_date == date_from and record.leave_selection =='half_day':
res += 0.5
break
if temp_date == date_to and record.leave_selection_date_to =='half_day':
res += 0.5
break
res += 1
temp_date += timedelta(days=1)
record.number_of_days_temp_ny = res
#END
@api.multi
@api.onchange("employee_id")
@api.depends("employee_id")
def calc_ot_count(self):
for record in self:
# self.ot_hours = self.employee_id.overtime_count
record.ot_hours = record.employee_id.employee_overtime_id.emp_overtime_count
return {}
@api.multi
def holidays_refuse(self):
if self.env.user.id != self.employee_id.parent_id.user_id.id:
raise Warning(_('Only the Manager of this employee can approve this leave request.'))
if self.is_ot_leave:
if self.state in ['validate', 'validate1']:
new_ot = self.ot_hours + self.leave_hours
# self.employee_id.sudo().write({'overtime_count': new_ot})
self.employee_id.sudo().employee_overtime_id.write({'emp_overtime_count': new_ot})
self.write({"approved_by": self.env.user.id, 'approved_at': datetime.strftime(datetime.today(), DEFAULT_SERVER_DATETIME_FORMAT)})
for leave_journal_entry in self.ljournal_ids:
leave_journal_entry.unlink()
nextyear_leave_data = self.env['hr.leave.nextyear'].search([('holiday_id','=',self.id),('employee_id','=',self.employee_id.id)])
print'nextyear_leave_data------',nextyear_leave_data
if nextyear_leave_data:
nextyear_leave_data.unlink()
return super(HRHoliday, self).holidays_refuse()
def holidays_validate_old(self, cr, uid, ids, context=None):
obj_emp = self.pool.get('hr.employee')
ids2 = obj_emp.search(cr, uid, [('user_id', '=', uid)])
manager = ids2 and ids2[0] or False
self.write(cr, uid, ids, {'state':'validate'})
data_holiday = self.browse(cr, uid, ids)
for record in data_holiday:
if record.double_validation:
self.write(cr, uid, [record.id], {'manager_id2': manager})
else:
self.write(cr, uid, [record.id], {'manager_id': manager})
if record.holiday_type == 'employee' and record.type == 'remove':
meeting_obj = self.pool.get('calendar.event')
# to check for the existing calender events for this type
if record.meeting_id:
self._create_resource_leave(cr, uid, [record], context=context)
meeting_obj.write(cr, uid, record.meeting_id, {'name': record.name or _('Leave Request'),})
else:
meeting_vals = {
'name': record.name or _('Leave Request'),
'categ_ids': record.holiday_status_id.categ_id and [(6,0,[record.holiday_status_id.categ_id.id])] or [],
'duration': record.number_of_days_temp * 8,
'description': record.notes,
'user_id': record.user_id.id,
'start': record.date_from,
'stop': record.date_to,
'allday': False,
'state': 'open', # to block that meeting date in the calendar
'class': 'confidential'
}
#Add the partner_id (if exist) as an attendee
if record.user_id and record.user_id.partner_id:
meeting_vals['partner_ids'] = [(4,record.user_id.partner_id.id)]
ctx_no_email = dict(context or {}, no_email=True)
meeting_id = meeting_obj.create(cr, uid, meeting_vals, context=ctx_no_email)
self._create_resource_leave(cr, uid, [record], context=context)
self.write(cr, uid, ids, {'meeting_id': meeting_id})
elif record.holiday_type == 'category':
emp_ids = obj_emp.search(cr, uid, [('category_ids', 'child_of', [record.category_id.id])])
leave_ids = []
batch_context = dict(context, mail_notify_force_send=False)
for emp in obj_emp.browse(cr, uid, emp_ids, context=context):
vals = {
'name': record.name,
'type': record.type,
'holiday_type': 'employee',
'holiday_status_id': record.holiday_status_id.id,
'date_from': record.date_from,
'date_to': record.date_to,
'notes': record.notes,
'number_of_days_temp': record.number_of_days_temp,
'parent_id': record.id,
'employee_id': emp.id
}
leave_ids.append(self.create(cr, uid, vals, context=batch_context))
for leave_id in leave_ids:
# TODO is it necessary to interleave the calls?
for sig in ('confirm', 'validate', 'second_validate'):
self.signal_workflow(cr, uid, [leave_id], sig)
return True
@api.multi
def holidays_validate(self):
for record in self:
if self.env.user.id != record.employee_id.parent_id.user_id.id:
raise Warning(_('Only the Manager of this employee can approve this leave request.'))
if record.is_ot_leave:
# commented function customer wants to approve leaves to actual ot_count.
# User can have positive actual ot count at the end of the month, although the ot_count at employee is negative,
# because it is updated one time a month only.
# if self.ot_hours < self.leave_hours:
# raise Warning(_('The number of overtime count is not sufficient for Overtime leave.'))
new_ot = record.ot_hours - record.leave_hours
# self.employee_id.sudo().write({'overtime_count': new_ot})
record.employee_id.sudo().employee_overtime_id.write({'emp_overtime_count': new_ot})
self.check_holidays2()
self.create_leave_journal_entry()
self.create_nextyear_leave_entry() #new added.to store the leave data for the next year which will be use for main dec scheduler
self.write({"approved_by": self.env.user.id, 'approved_at': datetime.strftime(datetime.today(), DEFAULT_SERVER_DATETIME_FORMAT)})
return self.holidays_validate_old()
def create_nextyear_leave_entry(self):
"""new added.to store the leave data for the next year which will be use for main dec scheduler
"""
for record in self:
year = datetime.today().year
# for sow17 testing
for_sow17 = self.env['res.company'].sudo().search([('for_sow17','=',True)],limit=1)
if for_sow17:
year = datetime.strptime(for_sow17.next_year_date,DEFAULT_SERVER_DATE_FORMAT).date().year
next_year = year+1
date_from = datetime.strptime(record.date_from.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT)
date_to = datetime.strptime(record.date_to.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT)
if date_from.year == next_year:
date_data_dict = record.get_date_data(date_from,date_to)
# print"date_data_dict------",date_data_dict
for date, day_amt in date_data_dict.iteritems():
nextyear_leave_vals={'date':date,'leave_days':day_amt,'employee_id':record.employee_id.id,'holiday_id':record.id}
self.env['hr.leave.nextyear'].create(nextyear_leave_vals)
def get_date_data(self,date_from,date_to):
"""Subfunction of the above function(create_nextyear_leave_entry)"""
today_date = datetime.today().date()
temp_date = date_from
date_data_dict={}
while temp_date <= date_to:
holiday = None
holiday = self.env['itis.holiday'].search([('date', '=', temp_date)])
if holiday:
temp_date += timedelta(days=1)
continue
if today_date.year == temp_date.year:
temp_date += timedelta(days=1)
continue
weekday = temp_date.weekday()
for contract in self.employee_id.contract_ids:
cont_start_date = datetime.strptime(contract.date_start, DEFAULT_SERVER_DATE_FORMAT)
cont_end_date = False
if not contract.date_end:
if cont_start_date <= temp_date:
if self.get_hours(weekday, contract.working_hours.attendance_ids) > 0.0:
if temp_date == date_from and self.leave_selection =='half_day':
date_data_dict[temp_date] =0.5
break
if temp_date == date_to and self.leave_selection_date_to =='half_day':
date_data_dict[temp_date] =0.5
break
date_data_dict[temp_date] =1
else:
cont_end_date = datetime.strptime(contract.date_end, DEFAULT_SERVER_DATE_FORMAT)
# cont_end_date += timedelta(days=1)
if cont_start_date <= temp_date and cont_end_date >= temp_date:
if self.get_hours(weekday, contract.working_hours.attendance_ids) > 0.0:
if temp_date == date_from and self.leave_selection =='half_day':
date_data_dict[temp_date] =0.5
break
if temp_date == date_to and self.leave_selection_date_to =='half_day':
date_data_dict[temp_date] =0.5
break
date_data_dict[temp_date] =1
temp_date += timedelta(days=1)
return date_data_dict
def check_same_day(self, date_from, date_to):
return date_from.date() == date_to.date()
@api.depends("date_from", "date_to", 'is_ot_leave', 'leave_selection', 'leave_selection_date_to')
def calc_leave_hours(self):
for record in self:
if not record.is_ot_leave:
return True
if not record.date_from or not record.date_to:
return True
date_from = datetime.strptime(record.date_from, DEFAULT_SERVER_DATETIME_FORMAT)
date_to = datetime.strptime(record.date_to, DEFAULT_SERVER_DATETIME_FORMAT)
same_day = record.check_same_day(date_from, date_to)
temp_date = date_from
day_hours = 0.0
date_from = datetime.strptime(record.date_from.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT)
date_to = datetime.strptime(record.date_to.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT)
temp_date = date_from
#temp_date += timedelta(days=1)
while temp_date <= date_to:
holiday = self.env['itis.holiday'].search([('date', '=', temp_date)])
if holiday:
temp_date += timedelta(days=1)
continue
weekday = temp_date.weekday()
for contract in record.employee_id.contract_ids:
cont_start_date = datetime.strptime(contract.date_start, DEFAULT_SERVER_DATE_FORMAT)
cont_end_date = False
if not contract.date_end:
if cont_start_date <= temp_date:
if (temp_date==date_from and record.leave_selection == 'half_day') or (temp_date.date()==date_from.date() and record.leave_selection_date_to == 'half_day'):
day_hours += record.get_hours(weekday, contract.working_hours.attendance_ids)/2
else:
day_hours += record.get_hours(weekday, contract.working_hours.attendance_ids)
else:
cont_end_date = datetime.strptime(contract.date_end, DEFAULT_SERVER_DATE_FORMAT)
if cont_start_date <= temp_date and cont_end_date >= temp_date:
if (temp_date==date_from and record.leave_selection == 'half_day') or (temp_date.date()==date_from.date() and record.leave_selection_date_to == 'half_day'):
day_hours += record.get_hours(weekday, contract.working_hours.attendance_ids)/2
else:
day_hours += record.get_hours(weekday, contract.working_hours.attendance_ids)
temp_date += timedelta(days=1)
# print"day_hours-----",day_hours
record.leave_hours = day_hours
return True
def get_day_hours(self, date_from, atten_ids):
weekday = date_from.weekday()
res = self.get_hours(weekday, atten_ids)
return res
def get_hours(self, weekday, atten_ids):
res = 0.0
for atten in atten_ids:
if int(atten.dayofweek) == weekday:
res += atten.hour_to - atten.hour_from
return res
@api.onchange("holiday_status_id")
def onchange_holiday_status_id(self):
ot_leave_rec = self.env['ir.model.data'].xmlid_to_object('itis_hr_extend.itis_leave_overtime')
if ot_leave_rec.id == self.holiday_status_id.id:
self.is_ot_leave = True
else:
self.is_ot_leave = False
return {}
#for SOW17, Made some changes in existing function
def create_leave_journal_entry(self):
leave_journal_obj = self.env['hr.leave.journal']
if self.is_ot_leave:
leave_type = 'hours'
year = datetime.strptime(self.date_from.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT).year
if year != datetime.strptime(self.date_to.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT).year:
raise Warning(_("Please create a leave request for every year."))
values = {
'year': year,
'year_type': 'actual',
'type': 'leave',
'leave_type': leave_type,
'leave_days': self.number_of_days_temp,
'leave_hours': self.leave_hours,
'name': self.name,
'employee_id': self.employee_id.id,
'leave_start': self.date_from,
'leave_end': self.date_to,
'leave_id': self.id
}
ljournal_id = leave_journal_obj.create(values)
else:
leave_type = 'days'
year = datetime.strptime(self.date_from.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT).year
if year != datetime.strptime(self.date_to.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT).year:
raise Warning(_("Please create a leave request for every year."))
if self.number_of_days_temp_ny ==0.0: #when leave is apply for the current ongoing year
yeartype = self.get_year_type()
print"yeartype------",yeartype
if len(yeartype)==2 or len(yeartype)==4:
leave_days = yeartype[1]
values = {
'year': year,
'year_type': yeartype[0],
'type': 'leave',
'leave_type': leave_type,
'leave_days': leave_days,
'name': self.name,
'employee_id': self.employee_id.id,
'leave_id': self.id
}
leave_journal_obj.create(values)
if len(yeartype)==4:
leave_days = yeartype[3]
values = {
'year': year,
'year_type': yeartype[2],
'type': 'leave',
'leave_type': leave_type,
'leave_days': leave_days,
'name': self.name,
'employee_id': self.employee_id.id,
'leave_id': self.id
}
leave_journal_obj.create(values)
else:#when there is next year leave in current year
#------create an next leave for the next year----#
c_year = datetime.today().date().year
values = {
'year': c_year+1,
'year_type': 'next',
'type': 'leave',
'leave_type': leave_type,
'leave_days': self.number_of_days_temp_ny,
'name': self.name,
'employee_id': self.employee_id.id,
'leave_id': self.id
}
leave_journal_obj.create(values)
def get_year_type(self):
if datetime.strptime(self.date_from.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT) >= datetime.strptime('01-04-'+str(datetime.strptime(self.date_from.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT).year),'%d-%m-%Y'):
return ['actual',self.number_of_days_temp]
elif datetime.strptime(self.date_from.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT) <= datetime.strptime('31-03-'+str(datetime.strptime(self.date_from.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT).year),'%d-%m-%Y'):
if self.employee_id.leave_days_last_year >= self.number_of_days_temp:
return ['last',self.number_of_days_temp]
elif self.employee_id.leave_days_last_year > 0:
return ['last', self.employee_id.leave_days_last_year,'actual',self.number_of_days_temp-self.employee_id.leave_days_last_year]
else:
return ['actual',self.number_of_days_temp]
# for SOW17 commented this
# def create_leave_journal_entry(self):
# leave_journal_obj = self.env['hr.leave.journal']
#
# if self.is_ot_leave:
# leave_type = 'hours'
# year = datetime.strptime(self.date_from.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT).year
# if year != datetime.strptime(self.date_to.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT).year:
# raise Warning(_("Please create a leave request for every year."))
#
# values = {
# 'year': year,
# 'year_type': 'actual',
# 'type': 'leave',
# 'leave_type': leave_type,
# 'leave_days': self.number_of_days_temp,
# 'leave_hours': self.leave_hours,
# 'name': self.name,
# 'employee_id': self.employee_id.id,
# 'leave_start': self.date_from,
# 'leave_end': self.date_to,
# 'leave_id': self.id
# }
# ljournal_id = leave_journal_obj.create(values)
# else:
# leave_type = 'days'
# year = datetime.strptime(self.date_from.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT).year
# if year != datetime.strptime(self.date_to.split(" ")[0], DEFAULT_SERVER_DATE_FORMAT).year:
# raise Warning(_("Please create a leave request for every year."))
# yeartype = self.get_year_type()
# if len(yeartype)==2 or len(yeartype)==4:
# leave_days = yeartype[1]
# values = {
# 'year': year,
# 'year_type': yeartype[0],
# 'type': 'leave',
# 'leave_type': leave_type,
# 'leave_days': leave_days,
# 'name': self.name,
# 'employee_id': self.employee_id.id,
# 'leave_id': self.id
# }
# leave_journal_obj.create(values)
#
# if len(yeartype)==4:
# leave_days = yeartype[3]
# values = {
# 'year': year,
# 'year_type': yeartype[2],
# 'type': 'leave',
# 'leave_type': leave_type,
# 'leave_days': leave_days,
# 'name': self.name,
# 'employee_id': self.employee_id.id,
# 'leave_id': self.id
# }
# leave_journal_obj.create(values)