diff --git a/odex25_hr/employee_requests/i18n/ar_001.po b/odex25_hr/employee_requests/i18n/ar_001.po
index d43377b37..0cd4ae58b 100644
--- a/odex25_hr/employee_requests/i18n/ar_001.po
+++ b/odex25_hr/employee_requests/i18n/ar_001.po
@@ -3997,6 +3997,13 @@ msgstr "أنواع الاستئذانات"
msgid "Monthly Hours"
msgstr "ساعات شهرية"
+#. module: employee_requests
+#: model:ir.model.fields,field_description:employee_requests.field_hr_personal_permission_type__annual_hours
+#: model_terms:ir.ui.view,arch_db:employee_requests.hr_personal_permission_type_view_form
+#: model_terms:ir.ui.view,arch_db:employee_requests.hr_personal_permission_type_view_tree
+msgid "Annual Hours"
+msgstr "ساعات سنوية"
+
#. module: employee_requests
#: code:addons/employee_requests/models/hr_personal_permission.py:0
#, python-format
@@ -4056,3 +4063,16 @@ msgstr "للأسف الموظف %s, تتجاوز ساعات العمل الإض
#, python-format
msgid "Sorry, The Employee %s Weekend Overtime Hours Exceed The Allowed Limit %s Hours, For The Selected Period."
msgstr "للأسف الموظف %s, تتجاوز ساعات العمل الإضافية في عطلة نهاية الأسبوع الحد المسموح به %s ساعة خلال هذه الفترة."
+
+
+#. module: employee_requests
+#: code:addons/employee_requests/models/hr_personal_permission_type.py:0
+msgid "Monthly Permission Hours must be less than or equal to annual Permission Hours"
+msgstr "يجب أن تكون ساعات الإستئذان الشهرية أقل من أو تساوي ساعات الإستئذان السنوية"
+
+#. module: employee_requests
+#: code:addons/employee_requests/models/hr_personal_permission_type.py:0
+msgid "Daily Permission Hours must be less than or equal to Monthly Permission Hours"
+msgstr "يجب أن تكون ساعات الإستئذان اليومية أقل من أو يساوي ساعات الإستئذان الشهرية"
+
+
diff --git a/odex25_hr/employee_requests/models/hr_personal_permission.py b/odex25_hr/employee_requests/models/hr_personal_permission.py
index ce85100b4..83ec6de9b 100644
--- a/odex25_hr/employee_requests/models/hr_personal_permission.py
+++ b/odex25_hr/employee_requests/models/hr_personal_permission.py
@@ -327,6 +327,28 @@ class HrPersonalPermission(models.Model):
if number_of_per < all_perission:
raise ValidationError(_('Sorry You Have Used All Your Permission Hours In This Month'))
+ ##### Annual Hours Constraint
+ if item.permission_type_id.annual_hours > 0:
+ current_year = fields.Datetime.from_string(item.date_to or item.date_from).year
+
+ year_date_from = f'{current_year}-01-01'
+ year_date_to = f'{current_year}-12-31'
+
+ employee_year_permissions = self.search([
+ ('employee_id', '=', item.employee_id.id),
+ ('permission_type_id', '=', item.permission_type_id.id),
+ ('state', 'not in', ('draft', 'refused')),
+ ('date_from', '>=', year_date_from),
+ ('date_to', '<=', year_date_to),
+ ('id', '!=', item.id),])
+
+ annual_used_hours = sum(employee_year_permissions.mapped('duration'))
+
+ if annual_used_hours + item.duration > item.permission_type_id.annual_hours:
+ raise ValidationError(
+ _('Sorry You Have Used All Your Permission Hours In This Year'))
+ #####
+
start_date_value = datetime.strptime(str(item.date_from), "%Y-%m-%d %H:%M:%S")
end_date = datetime.strptime(str(item.date_to), "%Y-%m-%d %H:%M:%S")
if start_date_value <= end_date:
diff --git a/odex25_hr/employee_requests/models/hr_personal_permission_type.py b/odex25_hr/employee_requests/models/hr_personal_permission_type.py
index bea6e620e..67a4b0c86 100644
--- a/odex25_hr/employee_requests/models/hr_personal_permission_type.py
+++ b/odex25_hr/employee_requests/models/hr_personal_permission_type.py
@@ -15,8 +15,20 @@ class HrPersonalPermissionType(models.Model):
required=True
)
active = fields.Boolean(default=True)
+ annual_hours = fields.Float()
- _sql_constraints = [
- ('uniq_name', 'UNIQUE(name)', _('Name should be unique!'))
- ]
-
\ No newline at end of file
+ _sql_constraints = [('uniq_name', 'UNIQUE(name)', _('Name should be unique!'))]
+
+ @api.constrains('monthly_hours', 'annual_hours','daily_hours')
+ def _check_hours(self):
+ for record in self:
+ if record.monthly_hours or record.annual_hours :
+ if record.monthly_hours > record.annual_hours:
+ raise ValidationError(
+ _("Monthly Permission Hours must be less than or equal to annual Permission Hours"))
+
+ if record.monthly_hours or record.daily_hours:
+ if record.daily_hours > record.monthly_hours:
+ raise ValidationError(
+ _("Daily Permission Hours must be less than or equal to Monthly Permission Hours"))
+
diff --git a/odex25_hr/employee_requests/views/hr_personal_permission_type_views.xml b/odex25_hr/employee_requests/views/hr_personal_permission_type_views.xml
index 190717dac..22c185729 100644
--- a/odex25_hr/employee_requests/views/hr_personal_permission_type_views.xml
+++ b/odex25_hr/employee_requests/views/hr_personal_permission_type_views.xml
@@ -18,6 +18,7 @@
+
@@ -38,6 +39,7 @@
+
diff --git a/odex25_hr/hr_permission_holidays/i18n/ar_001.po b/odex25_hr/hr_permission_holidays/i18n/ar_001.po
index c0753f02f..0a9aa1524 100644
--- a/odex25_hr/hr_permission_holidays/i18n/ar_001.po
+++ b/odex25_hr/hr_permission_holidays/i18n/ar_001.po
@@ -188,3 +188,9 @@ msgstr "يتم خصم نص يوم من رصيد الاجازة السنوية"
#: model:ir.model.fields,field_description:employee_requests.field_hr_personal_permission_type__monthly_hours
msgid "Monthly Hours"
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 Year"
+msgstr "تم استخدام كل ساعات الإستئذان المسموح بها خلال هذا العــام"
diff --git a/odex25_hr/hr_permission_holidays/models/permission.py b/odex25_hr/hr_permission_holidays/models/permission.py
index 75ed0f7be..aed1d0b90 100644
--- a/odex25_hr/hr_permission_holidays/models/permission.py
+++ b/odex25_hr/hr_permission_holidays/models/permission.py
@@ -155,6 +155,27 @@ class HrPersonalPermission(models.Model):
if number_of_per < all_perission :
raise ValidationError(_('Sorry You Have Used All Your Permission Hours In This Month'))
+ ##### Annual Hours Constraint
+ if item.permission_type_id.annual_hours > 0:
+ current_year = fields.Datetime.from_string(item.date_to or item.date_from).year
+
+ year_date_from = f'{current_year}-01-01'
+ year_date_to = f'{current_year}-12-31'
+
+ employee_year_permissions = self.search([
+ ('employee_id', '=', item.employee_id.id),
+ ('permission_type_id', '=', item.permission_type_id.id),
+ ('state', 'not in', ('draft', 'refused')),
+ ('date_from', '>=', year_date_from),
+ ('date_to', '<=', year_date_to),
+ ('id', '!=', item.id),])
+
+ annual_used_hours = sum(employee_year_permissions.mapped('duration'))
+
+ if annual_used_hours + item.duration > item.permission_type_id.annual_hours:
+ raise ValidationError(
+ _('Sorry You Have Used All Your Permission Hours In This Year'))
+ #################
if item.duration <= 0.0:
raise ValidationError(_('This Duration Must Be Greater Than Zero'))