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'))