From e8c12d76357b08992f51f1cbd05e66f2861bf823 Mon Sep 17 00:00:00 2001 From: Esraa-Exp Date: Wed, 23 Apr 2025 17:04:43 +0200 Subject: [PATCH] login by identity + attendance zone + date required --- odex25_hr/hr_base/__manifest__.py | 1 + odex25_hr/hr_base/i18n/ar_001.po | 21 +++++++++++++++++++ odex25_hr/hr_base/models/__init__.py | 1 + odex25_hr/hr_base/models/hr_base.py | 14 +++++++++++-- .../hr_base/models/res_config_settings.py | 10 +++++++++ odex25_hr/hr_base/models/res_users.py | 10 ++++++++- odex25_hr/hr_base/views/hr_base_view.xml | 1 + .../hr_base/views/res_company_ext_view.xml | 15 +++++++++++++ .../views/employee_document_view.xml | 4 ++-- .../hr_holidays_public/models/hr_holidays.py | 2 ++ 10 files changed, 74 insertions(+), 5 deletions(-) diff --git a/odex25_hr/hr_base/__manifest__.py b/odex25_hr/hr_base/__manifest__.py index 2ea4cf7f4..e3acb4721 100644 --- a/odex25_hr/hr_base/__manifest__.py +++ b/odex25_hr/hr_base/__manifest__.py @@ -49,6 +49,7 @@ "views/employee_iqama_document_view.xml", "views/res_users_views.xml", "views/menus_view.xml", + # "views/res_config_settings.xml", 'report/hr_layout.xml', "report/employee_dependents_report_template.xml", "report/salary_confirmation_report_template.xml", diff --git a/odex25_hr/hr_base/i18n/ar_001.po b/odex25_hr/hr_base/i18n/ar_001.po index ce1e163f0..f18e8605d 100644 --- a/odex25_hr/hr_base/i18n/ar_001.po +++ b/odex25_hr/hr_base/i18n/ar_001.po @@ -4760,3 +4760,24 @@ msgstr "" + +#. module: hr_base +#: model:ir.model.fields,field_description:hr_base.field_hr_employee__attendance_zone_id +msgid "Attendance Zone" +msgstr "منطقة الحضور" + +#. module: hr_base +#: model:ir.model.fields,field_description:hr_base.field_res_config_settings__employee_login +msgid "Login Option" +msgstr "تسجيل الدخول الافتراضي" + +#. module: hr_base +#: model:ir.model.fields.selection,name:hr_base.selection__res_config_settings__employee_login__email +msgid "By Email" +msgstr "الايميل" + +#. module: hr_base +#: model:ir.model.fields.selection,name:hr_base.selection__res_config_settings__employee_login__identity +msgid "By dentity" +msgstr "الهوية" + diff --git a/odex25_hr/hr_base/models/__init__.py b/odex25_hr/hr_base/models/__init__.py index c3bf3a139..32eb7985c 100644 --- a/odex25_hr/hr_base/models/__init__.py +++ b/odex25_hr/hr_base/models/__init__.py @@ -30,3 +30,4 @@ from . import assets_document from . import hr_department from . import res_partner from . import res_users +from . import res_config_settings diff --git a/odex25_hr/hr_base/models/hr_base.py b/odex25_hr/hr_base/models/hr_base.py index 662957ce4..3f555a1ef 100644 --- a/odex25_hr/hr_base/models/hr_base.py +++ b/odex25_hr/hr_base/models/hr_base.py @@ -243,6 +243,8 @@ class HrEmployee(models.Model): ], 'Certificate Level', default='other', groups="base.group_user", tracking=True) children = fields.Integer(string='Number of Children', groups="base.group_user", tracking=True) branch_name = fields.Many2one(related='department_id.branch_name', store=True, string="Branch Name") + attendance_zone_id = fields.Many2one('attendance.zone', string='Attendance Zone') + '''employee_cars_count = fields.Integer(compute="_compute_employee_cars_count", string="Cars", groups="base.group_user") @@ -591,6 +593,15 @@ class HrEmployee(models.Model): def action_create_user(self): self.ensure_one() + config = self.env['ir.config_parameter'].sudo() + login_option = config.get_param('hr_base.employee_login') + if login_option == 'identity': + login = self.iqama_number.iqama_id or self.saudi_number.saudi_id + else: + login = self.work_email + + + if self.user_id: raise ValidationError(_("This employee already has an user.")) return { @@ -605,8 +616,7 @@ class HrEmployee(models.Model): 'default_name': self.name, 'default_phone': self.work_phone, 'default_mobile': self.mobile_phone, - 'default_login': self.work_email, - 'default_password': self.work_email, + 'default_login': login, } } diff --git a/odex25_hr/hr_base/models/res_config_settings.py b/odex25_hr/hr_base/models/res_config_settings.py index e69de29bb..6b7af1a73 100644 --- a/odex25_hr/hr_base/models/res_config_settings.py +++ b/odex25_hr/hr_base/models/res_config_settings.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + employee_login = fields.Selection([('email', 'By Email'), ('identity', 'By dentity')], 'Login Option', default='email', config_parameter='hr_base.employee_login') + diff --git a/odex25_hr/hr_base/models/res_users.py b/odex25_hr/hr_base/models/res_users.py index 1f0b79f0e..9d14553bb 100644 --- a/odex25_hr/hr_base/models/res_users.py +++ b/odex25_hr/hr_base/models/res_users.py @@ -11,9 +11,11 @@ class ResUsers(models.Model): @api.model_create_multi def create(self, vals_list): - print("Current Context:", self.env.context) res = super().create(vals_list) employee_create_vals = [] + config = self.env['ir.config_parameter'].sudo() + login_option = config.get_param('hr_base.employee_login') + for user, vals in zip(res, vals_list): if not vals.get('create_employee') and not vals.get('create_employee_id'): continue @@ -27,5 +29,11 @@ class ResUsers(models.Model): )) if employee_create_vals: self.env['hr.employee'].with_context(clean_context(self.env.context)).create(employee_create_vals) + employee_id = self.env['hr.employee'].browse(self.env.context.get('default_create_employee_id')) + + if login_option == 'identity': + res.login = employee_id.saudi_number.saudi_id or employee_id.iqama_number.iqama_id + + res.password = res.login return res \ No newline at end of file diff --git a/odex25_hr/hr_base/views/hr_base_view.xml b/odex25_hr/hr_base/views/hr_base_view.xml index f45b00132..024f315a1 100644 --- a/odex25_hr/hr_base/views/hr_base_view.xml +++ b/odex25_hr/hr_base/views/hr_base_view.xml @@ -293,6 +293,7 @@ attrs="{'readonly':[('state','!=','draft')]}"/> + diff --git a/odex25_hr/hr_base/views/res_company_ext_view.xml b/odex25_hr/hr_base/views/res_company_ext_view.xml index 7f35398ae..99b2ad831 100644 --- a/odex25_hr/hr_base/views/res_company_ext_view.xml +++ b/odex25_hr/hr_base/views/res_company_ext_view.xml @@ -151,6 +151,21 @@ res.config.settings + + +
+ + +
+
+ +
+
+
+
+
+

Saudi Percentage %

diff --git a/odex25_hr/hr_docs_expiry/views/employee_document_view.xml b/odex25_hr/hr_docs_expiry/views/employee_document_view.xml index 4daf9782f..34f65eda1 100644 --- a/odex25_hr/hr_docs_expiry/views/employee_document_view.xml +++ b/odex25_hr/hr_docs_expiry/views/employee_document_view.xml @@ -46,9 +46,9 @@ attrs="{'invisible':[('document_type','!=','Iqama')]}"/> - + - + diff --git a/odex25_hr/hr_holidays_public/models/hr_holidays.py b/odex25_hr/hr_holidays_public/models/hr_holidays.py index 3afb6c7d7..2e3fd5fa5 100644 --- a/odex25_hr/hr_holidays_public/models/hr_holidays.py +++ b/odex25_hr/hr_holidays_public/models/hr_holidays.py @@ -21,6 +21,8 @@ def daterange(start_date, end_date): class HRHolidays(models.Model): _inherit = 'hr.holidays' + _order = "create_date desc" + replace_by = fields.Many2one(comodel_name='hr.employee', string="Replace By") emp_id = fields.Integer(string="id")