This commit is contained in:
Bakry 2024-12-29 16:55:05 +03:00
parent 67581ffc22
commit eb5af2188a
8 changed files with 184 additions and 322 deletions

View File

@ -1,17 +1,16 @@
# -*- coding: utf-8 -*-
{
'name': 'Hr Holiday Permission',
'name': 'HR Holiday Permission',
'version': '1.0',
'summary': """Hr Holiday Permission""",
'description': """Hr Holiday Permission.
'summary': """HR Holiday Permission""",
'description': """HR Holiday Permission.
This module gives Feature of deduct Permissions from holidays""",
'category': 'Odex25-HR/Odex25-HR',
'category': 'HR-Odex',
'author': 'Expert Co. Ltd.',
'website': 'http://exp-sa.com',
'depends': ['hr_holidays_public', 'employee_requests'],
'license': 'LGPL-3',
'data': [
'views/resource_view.xml',
'views/permission_view.xml',
'views/hr_holiday_view.xml',
],

View File

@ -17,8 +17,9 @@ msgstr ""
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_hr_personal_permission__deduct_from_holiday
msgid "Deduct From Holiday"
msgstr "الخصم من رصيد الاجازة"
#: model_terms:ir.ui.view,arch_db:hr_permission_holidays.hr_view_tree_inherit_permissions_holiday
msgid "Half Day Off"
msgstr "نصف يوم من الإجازة السنوية"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_hr_holidays__display_name
@ -71,8 +72,8 @@ msgstr "رقم الإذن"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_resource_calendar__holiday_permission_deducted
msgid "Permission to Deduct From holiday"
msgstr "خصم الاذن من الاجازة"
msgid "Number Permission Holiday"
msgstr "عدد إستئذانات الاجازة"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_hr_holidays__permission_ids
@ -81,8 +82,8 @@ msgstr "الاذونات"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_hr_holidays_status__permission_annual_holiday
msgid "Permissions Deduct From Holiday"
msgstr "خصم الإذن من الاجازة السنوية"
msgid "Permissions Half Day Off"
msgstr "نصف يوم من الإجازة السنوية"
#. module: hr_permission_holidays
#: model:ir.model,name:hr_permission_holidays.model_resource_calendar
@ -95,31 +96,35 @@ msgstr "فترة عمل المورد"
msgid "Sorry You Have No annual Leave To Deduct Permission"
msgstr "عذرا ليس هنالك اجازة سنوية لخصم الاذن"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:0
#, python-format
msgid "Sorry You Have Used All Your Permission In This Day you have one permission per a Day"
msgstr "لايمكن طلب اذن مره أخرى في نفس اليوم"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:0
#, python-format
msgid "Sorry You Have Used All Your Permission Hours In This Month"
msgstr "تم استخدام كل الاذونات المسموح بها خلال هذا الشهر"
msgstr "تم استخدام كل ساعات الإستئذانات المسموح بها خلال هذا الشهر"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:0
#, python-format
msgid ""
"Sorry You Have Used All Your Permission In This Day you have one permission "
"per a Day"
msgstr "عذرًا ، لقد استخدمت كل الأذونات الخاصة بك في هذا اليوم ، لديك إذن واحد لكل يوم"
msgid "This Duration Must Be Greater Than Zero"
msgstr "فترة الاذن يجب ان تكون اكبر من الصفر"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:0
#, python-format
msgid "Sorry You Have Used All Your Permission To Deduct From Holidays"
msgid "Sorry You Have Used All Your Permission To Half Day Off"
msgstr "تم استخدام كل الاذونات المسموح بخصمها من الاجازة السنوية!"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:0
#, python-format
msgid "Sorry You Need To use Basic Permission Before Use Holidays"
msgstr "عذرا لايمكنك طلب خصم من اجازة وانت ﻻتمتلك رصيد إذن غير مستخدم"
msgstr "عذرا لايمكنك طلب خصم من اجازة وانت لديك رصيد إذن غير مستخدم "
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:0
@ -128,11 +133,6 @@ msgstr "عذرا لايمكنك طلب خصم من اجازة وانت ﻻتمت
msgid "Sorry you Have No leave balance"
msgstr "لايوجد رصيد اجازة سنوية للخصم منه"
#. module: hr_permission_holidays
#: model:ir.model.fields,help:hr_permission_holidays.field_resource_calendar__holiday_permission_deducted
msgid "The Number of permission deducted From The Annual Holiday balance"
msgstr "عدد الإذن المقتطع من رصيد الإجازة السنوية"
#. module: hr_permission_holidays
#: model:ir.model.fields,help:hr_permission_holidays.field_hr_personal_permission__permission_number
msgid "The Remaining Number of Hours permission This Month"
@ -141,30 +141,50 @@ msgstr "إذن العدد المتبقي من الساعات هذا الشهر"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:0
#, python-format
msgid "This Duration Must Be Greater Than Zero"
msgstr "يجب أن تكون هذه المدة أكبر من الصفر"
msgid "This Duration must be Greater than or equal to the Permission Limit"
msgstr "فترة الاذن يجب ان تكون اكبر من او يساوي فترة الإستئذانات المسموح بها"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:0
#, python-format
msgid "This Duration must be less than or equal to the Permission Limit"
msgstr "يجب أن تكون هذه المدة أقل من أو تساوي حد الإذن"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:0
#, python-format
msgid ""
"This Duration not Allowed it must be Less Than or equal Permission Hours in "
"Month"
msgstr "هذه المدة غير مسموح بها يجب أن تكون أقل من أو تساوي ساعات الإذن في الشهر"
msgid "This Duration not Allowed it must be Less Than or equal Permission Hours in Month"
msgstr "فترة الإذن يجب ان تكون اقل من او يساوي فترة الإستئذانات المسموح بها خلال الشهر"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:0
#, python-format
msgid "You can not Request Permission The Employee have Not First Hiring Date"
msgstr "لا يمكنك طلب الإذن ليس للموظف تاريخ التعيين الأول"
msgstr "لا يمكنك طلب إستئذان لموظف وليس لديه تاريخ مباشرة عمل"
#. module: hr_permission_holidays
#: model:ir.model,name:hr_permission_holidays.model_hr_personal_permission
msgid "hr.personal.permission"
msgstr ""
msgstr "الإستئذانات"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:0
#, python-format
msgid "The Number Of Hours should Be %s Hours For the Half Day Leave"
msgstr "يجب ان تكون ساعات طلب نصف يوم من الاجازة السنوية %s ساعات"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:0
#, python-format
msgid "Sorry, Must Be a Half Day Period Within Working Hours"
msgstr "يجب ان تكون فترة نصف يوم خلال ساعات العمل"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_hr_personal_permission_type__half_holiday
#: model_terms:ir.ui.view,arch_db:hr_permission_holidays.hr_personal_permission_type_view_form_inherit
msgid "Half Holiday"
msgstr "نصف إجازة"
#. module: hr_permission_holidays
#: model:ir.model.fields,help:hr_permission_holidays.field_hr_personal_permission_type__half_holiday
msgid "The permission deducted From The Annual Holiday balance"
msgstr "يتم خصم نص يوم من رصيد الاجازة السنوية"
#. module: employee_requests
#: model:ir.model.fields,field_description:employee_requests.field_hr_personal_permission_type__monthly_hours
msgid "Monthly Hours"
msgstr "ساعات/مرات شهرية"

View File

@ -1,112 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_permission_holidays
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-20 14:09+0000\n"
"PO-Revision-Date: 2020-04-20 14:09+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_hr_personal_permission_deduct_from_holiday
msgid "Deduct From Holiday"
msgstr "الخصم من رصيد الاجازة"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_hr_personal_permission_holiday
msgid "Holiday"
msgstr "يوم الاجازة"
#. module: hr_permission_holidays
#: model:ir.model,name:hr_permission_holidays.model_hr_holidays
msgid "Leave"
msgstr "الاجازات"
#. module: hr_permission_holidays
#: model:ir.model,name:hr_permission_holidays.model_hr_holidays_status
msgid "Leave Type"
msgstr "نوع الإجازة"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_hr_personal_permission_permission_amount
msgid "Permission Amount"
msgstr "مقدار الاذن"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_resource_calendar_holiday_permission_deducted
msgid "Permission to Deduct From holiday"
msgstr "خصم الاذن من الاجازة"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_hr_holidays_permission_ids
msgid "Permissions"
msgstr "الاذونات"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_hr_holidays_status_permission_annual_holiday
msgid "Permissions Deduct From Holiday"
msgstr "خصم الإذن من الاجازة السنوية"
#. module: hr_permission_holidays
#: model:ir.model,name:hr_permission_holidays.model_resource_calendar
msgid "Resource Calendar"
msgstr "تقويم المورد"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:68
#, python-format
msgid "Sorry You Have No annual Leave To Deduct Permission"
msgstr "عذرا ليس هنالك اجازة سنوية لخصم الاذن"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:108
#, python-format
msgid "Sorry You Have Used All Your Permission In This Day you have one permission per a Day"
msgstr "لايمكن طلب اذن مره اخرى في نفس اليوم"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:47
#: code:addons/hr_permission_holidays/models/permission.py:66
#, python-format
msgid "Sorry You Have Used All Your Permission In This Month"
msgstr "تم استخدام كل الاذونات المسموح بها خلال هذا الشهر!"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:47
#: code:addons/hr_permission_holidays/models/permission.py:66
#, python-format
msgid "Sorry You Have Used All Your Permission To Deduct From Holidays"
msgstr "تم استخدام كل الاذونات المسموح بخصمها من الاجازة السنوية!"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:70
#, python-format
msgid "Sorry You Need To use Basic Permission Before Use Holidays"
msgstr "عذرا لايمكنك طلب خصم من اجازة وانت ﻻتمتلك رصيد إذن غير مستخدم "
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:64
#: code:addons/hr_permission_holidays/models/permission.py:78
#, python-format
msgid "Sorry you Have No leave balance"
msgstr "لايوجد رصيد اجازة سنوية للخصم منه"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:116
#, python-format
msgid "This Duration not Allowed it must be Less Than or equal to Balance And Not Equal Zero"
msgstr "فترة الاذن يجب ان تكون اكبر من الصفر واقل من او يساوي فترة الاذن المسموح بها"
#. module: hr_permission_holidays
#: model:ir.model,name:hr_permission_holidays.model_hr_personal_permission
msgid "hr.personal.permission"
msgstr "اذن الخروج"

View File

@ -1,129 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_permission_holidays
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-20 14:09+0000\n"
"PO-Revision-Date: 2020-04-20 14:09+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_hr_personal_permission_deduct_from_holiday
msgid "Deduct From Holiday"
msgstr "الخصم من رصيد الاجازة"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_hr_personal_permission_holiday
msgid "Holiday"
msgstr "يوم الاجازة"
#. module: hr_permission_holidays
#: model:ir.model,name:hr_permission_holidays.model_hr_holidays
msgid "Leave"
msgstr "الاجازات"
#. module: hr_permission_holidays
#: model:ir.model,name:hr_permission_holidays.model_hr_holidays_status
msgid "Leave Type"
msgstr "نوع الإجازة"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_hr_personal_permission_permission_amount
msgid "Permission Amount"
msgstr "مقدار الاذن"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_resource_calendar_holiday_permission_deducted
msgid "Permission to Deduct From holiday"
msgstr "خصم الاذن من الاجازة"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_hr_holidays_permission_ids
msgid "Permissions"
msgstr "الاذونات"
#. module: hr_permission_holidays
#: model:ir.model.fields,field_description:hr_permission_holidays.field_hr_holidays_status_permission_annual_holiday
msgid "Permissions Deduct From Holiday"
msgstr "خصم الإذن من الاجازة السنوية"
#. module: hr_permission_holidays
#: model:ir.model,name:hr_permission_holidays.model_resource_calendar
msgid "Resource Calendar"
msgstr "تقويم المورد"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:68
#, python-format
msgid "Sorry You Have No annual Leave To Deduct Permission"
msgstr "عذرا ليس هنالك اجازة سنوية لخصم الاذن"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:108
#, python-format
msgid "Sorry You Have Used All Your Permission In This Day you have one permission per a Day"
msgstr "لايمكن طلب اذن مره أخرى في نفس اليوم"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:47
#, python-format
msgid "Sorry You Have Used All Your Permission In This Month"
msgstr "تم استخدام كل الاذونات المسموح بها خلال هذا الشهر!"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:47
#: code:addons/hr_permission_holidays/models/permission.py:66
#, python-format
msgid "Sorry You Have Used All Your Permission To Deduct From Holidays"
msgstr "تم استخدام كل الاذونات المسموح بخصمها من الاجازة السنوية!"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:70
#, python-format
msgid "Sorry You Need To use Basic Permission Before Use Holidays"
msgstr "عذرا لايمكنك طلب خصم من اجازة وانت لديك رصيد إذن غير مستخدم "
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:64
#: code:addons/hr_permission_holidays/models/permission.py:78
#, python-format
msgid "Sorry you Have No leave balance"
msgstr "لايوجد رصيد اجازة سنوية للخصم منه"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:49
#, python-format
msgid "Sorry You Have Used All Your Permission Hours In This Month"
msgstr "تم استخدام كل ساعات الإذن المسموح بها خلال هذا الشهر"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:116
#, python-format
msgid "This Duration Must Be Greater Than Zero"
msgstr "فترة الاذن يجب ان تكون اكبر من الصفر"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:117
#, python-format
msgid "This Duration must be less than or equal to the Permission Limit"
msgstr "فترة الاذن يجب ان تكون اقل من او يساوي فترة الاذن المسموح بها"
#. module: hr_permission_holidays
#: code:addons/hr_permission_holidays/models/permission.py:118
#, python-format
msgid "This Duration not Allowed it must be Less Than or equal Permission Hours in Month"
msgstr "فترة الإذن يجب ان تكون اقل من او يساوي فترة الاذن المسموح بها خلال الشهر"
#. module: hr_permission_holidays
#: model:ir.model,name:hr_permission_holidays.model_hr_personal_permission
msgid "hr.personal.permission"
msgstr "اذن الخروج"

View File

@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
from . import resource
from . import permission
from . import hr_holiday

View File

@ -5,7 +5,7 @@ from odoo import fields, models
class HrHolidaysStatus(models.Model):
_inherit = 'hr.holidays.status'
permission_annual_holiday = fields.Boolean(string="Permissions Deduct From Holiday")
permission_annual_holiday = fields.Boolean(string="Permissions Half Day Off")
class HRHolidays(models.Model):

View File

@ -1,19 +1,28 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
from datetime import datetime
from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT
from odoo import models, fields, api,_
from datetime import datetime,timedelta
import time
from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT,DEFAULT_SERVER_DATE_FORMAT
from odoo.exceptions import ValidationError
class HrPersonalPermission(models.Model):
_inherit = 'hr.personal.permission'
deduct_from_holiday = fields.Boolean(string="Deduct From Holiday")
holiday = fields.Many2one('hr.holidays', string="Holiday")
deduct_from_holiday = fields.Boolean(related='permission_type_id.half_holiday', string="Half Day Off")
holiday = fields.Many2one('hr.holidays',string="Holiday")
permission_amount = fields.Float(string="Permission Amount")
permission_number = fields.Float(compute="get_permission_number", store=True)
def send(self):
res = super(HrPersonalPermission,self).send()
self.get_permission_number()
#self._get_date_constrains(employee_permissions)
self.permission_number_decrement()
return res
def get_date_to_constrains_value(self):
current_date = datetime.strptime(str(self.date_to), DEFAULT_SERVER_DATETIME_FORMAT)
current_month = datetime.strptime(str(self.date_to), DEFAULT_SERVER_DATETIME_FORMAT).month
@ -24,7 +33,7 @@ class HrPersonalPermission(models.Model):
employee_permissions = self.search([
('employee_id', '=', self.employee_id.id),
('permission_type_id', '=', self.permission_type_id.id),
('state', '=', 'approve'),
('state', 'in', ('send', 'approve')),
('date_from', '>=', date_from),
('date_to', '<=', date_to)])
return date_from, date_to, employee_permissions
@ -37,8 +46,9 @@ class HrPersonalPermission(models.Model):
basic = employee_permissions.filtered(lambda r: r.deduct_from_holiday == False)
permission_type_id = rec.permission_type_id
all_perission = 0.0
for item in employee_permissions:
all_perission += item.duration
for item in employee_permissions.filtered(lambda r: r.id != self.id):
if item.deduct_from_holiday == False:
all_perission += item.duration
if permission_type_id.monthly_hours - all_perission > 0:
rec.permission_number = round(permission_type_id.monthly_hours - all_perission, 2)
@ -51,38 +61,47 @@ class HrPersonalPermission(models.Model):
raise ValidationError(_('You can not Request Permission The Employee have Not First Hiring Date'))
if rec.date_to:
rec.check_holiday_mission()
date_from, date_to, employee_permissions = rec.get_date_to_constrains_value()
calender = rec.employee_id.resource_calendar_id
day_hours = calender.work_hour
rec.permission_amount = rec.duration / day_hours
basic = employee_permissions.filtered(lambda r: r.deduct_from_holiday == False)
rec.permission_amount = rec.duration/day_hours
basic = employee_permissions.filtered(lambda r:r.deduct_from_holiday == False and r.id != self.id)
employee_permissions_holiday = employee_permissions.filtered(lambda r: r.deduct_from_holiday == True)
for item in employee_permissions.filtered(lambda r:r.id != self.id):
if item.date_to and rec.date_to:
permission_date1 = datetime.strptime(str(item.date_to),DEFAULT_SERVER_DATETIME_FORMAT).date()
date_to_value1 = datetime.strptime(str(rec.date_to), DEFAULT_SERVER_DATETIME_FORMAT).date()
if permission_date1 == date_to_value1:
raise ValidationError(_('Sorry You Have Used All Your Permission In This Day you have one permission per a Day'))
employee_permissions_holiday = employee_permissions.filtered(lambda r: r.deduct_from_holiday == True and r.id != self.id)
if rec.deduct_from_holiday:
if rec.permission_number <= 0.0:
if rec.permission_number >= 0.0:
rec._get_date_constrains(employee_permissions_holiday)
annual = rec.env['hr.holidays.status'].search(
[('leave_type', '=', 'annual'), ('permission_annual_holiday', '=', True)])
annual = rec.env['hr.holidays.status'].search([('leave_type', '=', 'annual')
,('permission_annual_holiday', '=',True),])
for itm in annual:
if rec.employee_id and itm:
holiday = rec.env['hr.holidays'].search(
[('employee_id', '=', rec.employee_id.id), ('type', '=', 'add'),
('holiday_status_id', '=', itm.id),
('check_allocation_view', '=', 'balance')
], order='id desc', limit=1)
if holiday:
holiday = rec.env['hr.holidays'].search([('employee_id', '=', rec.employee_id.id),('type', '=', 'add'),
('holiday_status_id', '=', itm.id),
('check_allocation_view', '=', 'balance')
], order='id desc', limit=1)
if holiday:
rec.holiday = holiday.id
balance = holiday.remaining_leaves or 0.0
if len(employee_permissions_holiday) < calender.holiday_permission_deducted:
if len(employee_permissions_holiday) < rec.permission_type_id.monthly_hours:
if balance < rec.permission_amount:
raise ValidationError(_('Sorry you Have No leave balance'))
else:
raise ValidationError(
_('Sorry You Have Used All Your Permission To Deduct From Holidays'))
raise ValidationError(_
('Sorry You Have Used All Your Permission To Half Day Off'))
else:
raise ValidationError(_('Sorry You Have No annual Leave To Deduct Permission'))
else:
raise ValidationError(_('Sorry You Need To use Basic Permission Before Use Holidays'))
#else:
#raise ValidationError(_('Sorry You Need To use Basic Permission Before Use Holidays'))
else:
rec._get_date_constrains(basic)
@ -100,25 +119,26 @@ class HrPersonalPermission(models.Model):
self.holiday.leaves_taken -= self.permission_amount
def approve(self):
res = super(HrPersonalPermission, self).approve()
res = super(HrPersonalPermission,self).approve()
self.leave_balance_process()
self.get_permission_number()
return res
def draft_state(self):
if self.state == 'approve' and self.deduct_from_holiday:
self.cancel_leave_balance_process()
res = super(HrPersonalPermission, self).draft_state()
res = super(HrPersonalPermission,self).draft_state()
return res
def _get_date_constrains(self, employee_permissions):
for item in self:
number_of_per = item.permission_type_id.monthly_hours
if employee_permissions:
# employee_permissions_to = employee_permissions.mapped('date_to')
if employee_permissions.filtered(lambda r: r.id != self.id):
employee_permissions_to = employee_permissions.mapped('date_to')
date_to_value = datetime.strptime(str(item.date_to), DEFAULT_SERVER_DATETIME_FORMAT).date()
for employee_permission in employee_permissions:
permission_date = datetime.strptime(str(employee_permission.date_to), DEFAULT_SERVER_DATETIME_FORMAT).date()
if permission_date == date_to_value and item.id != employee_permission.id:
for emp_date in employee_permissions_to:
permission_date = datetime.strptime(str(emp_date), DEFAULT_SERVER_DATETIME_FORMAT).date()
if permission_date == date_to_value:
raise ValidationError(
_('Sorry You Have Used All Your Permission In This Day you have one permission per a Day'))
start_date_value = datetime.strptime(str(item.date_from), "%Y-%m-%d %H:%M:%S")
@ -127,19 +147,48 @@ class HrPersonalPermission(models.Model):
days = (end_date - start_date_value).days
seconds_diff = (end_date - start_date_value).seconds
item.duration = (days * 24) + seconds_diff / 3600
all_perission = 0
for rec in employee_permissions:
all_perission += rec.duration
if number_of_per < all_perission:
all_perission=0
for rec in employee_permissions:
if rec.deduct_from_holiday == False:
all_perission += rec.duration
if number_of_per < all_perission :
raise ValidationError(_('Sorry You Have Used All Your Permission Hours In This Month'))
if item.duration <= 0.0:
raise ValidationError(_('This Duration Must Be Greater Than Zero'))
if not item.deduct_from_holiday:
if item.duration < item.balance and item.duration < item.permission_number:
raise ValidationError(_('This Duration must be Greater than or equal to the Permission Limit'))
if item.duration < item.balance:
raise ValidationError(_('This Duration must be less than or equal to the Permission Limit'))
if item.duration > item.permission_number and item.deduct_from_holiday== False:
raise ValidationError(_('This Duration not Allowed it must be Less Than or equal Permission Hours in Month'))
if item.duration > item.permission_number and not item.deduct_from_holiday:
raise ValidationError(
_('This Duration not Allowed it must be Less Than or equal Permission Hours in Month'))
#################### Half day holiday 4 hours ##########
if item.deduct_from_holiday:
date_from = datetime.strptime(str(item.date_from), "%Y-%m-%d %H:%M:%S")
date_to = datetime.strptime(str(item.date_to), "%Y-%m-%d %H:%M:%S")
date_from_time = (date_from + timedelta(hours=3)).time()
date_to_time = (date_to + timedelta(hours=3)).time()
hour_from = date_from_time.hour + date_from_time.minute / 60.0
hour_to = date_to_time.hour + date_to_time.minute / 60.0
#print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>',hour_from,hour_to)
if item.duration != item.permission_type_id.daily_hours:
raise ValidationError(_('The Number Of Hours should Be %s Hours For the Half Day Leave') % item.permission_type_id.daily_hours)
if item.employee_id.contract_id.working_hours.is_full_day== True:
hour_sign = item.employee_id.contract_id.working_hours.full_min_sign_in
hour_sign_out = item.employee_id.contract_id.working_hours.full_max_sign_out
#print('######################################',hour_sign,hour_sign_out)
if hour_from < hour_sign or hour_to > hour_sign_out:
raise ValidationError(_('Sorry, Must Be a Half Day Period Within Working Hours'))
class HrPersonalPermissionType(models.Model):
_inherit = 'hr.personal.permission.type'
half_holiday = fields.Boolean(string="Half Holiday",
help='The permission deducted From The Annual Holiday balance')

View File

@ -8,10 +8,46 @@
<field name="priority">100</field>
<field name="arch" type="xml">
<field name="department_id" position="after">
<field name="deduct_from_holiday" attrs="{'readonly':[('state','!=','draft')],'invisible':[('permission_number','!=',0.00)]}"/>
<field name="deduct_from_holiday" readonly='1'/>
<field name="holiday" invisible="1"/>
<field name="permission_amount" invisible="1"/>
</field>
<xpath expr="//field[@name='balance']" position="attributes">
<attribute name="attrs">{'invisible':[('deduct_from_holiday','=',True)]}</attribute>
</xpath>
<xpath expr="//field[@name='permission_number']" position="attributes">
<attribute name="attrs">{'invisible':[('deduct_from_holiday','=',True)]}</attribute>
</xpath>
</field>
</record>
<!--record model="ir.ui.view" id="hr_view_tree_inherit_permissions_holiday">
<field name="name">Employee personal permission</field>
<field name="model">hr.personal.permission</field>
<field name="inherit_id" ref="employee_requests.employee_personal_permission_tree_view"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='duration']" position="after">
<field name="deduct_from_holiday" string="Half Day Off"/>
</xpath>
</field>
</record-->
<!-- permission type -->
<record model="ir.ui.view" id="hr_personal_permission_type_view_form_inherit">
<field name="name">Permission Types</field>
<field name="model">hr.personal.permission.type</field>
<field name="inherit_id" ref="employee_requests.hr_personal_permission_type_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='approval_by']" position="after">
<field name="half_holiday" string="Half Holiday"/>
</xpath>
</field>
</record>