# -*- 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 . # ############################################################################## 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)