Merge pull request #4791 from expsa/kchyounes_dev_odex25_hr

IMP benefit
This commit is contained in:
kchyounes19 2025-10-01 09:44:37 +01:00 committed by GitHub
commit cd0c838f19
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 213 additions and 98 deletions

View File

@ -41,6 +41,11 @@ msgstr ""
msgid "Applicant" msgid "Applicant"
msgstr "المتقدم" msgstr "المتقدم"
#. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_hr_job_request__employee_id
msgid "Applicant"
msgstr "مقدم الطلب"
#. module: hr_job_request #. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_hr_applicant__applicants_hr #: model:ir.model.fields,field_description:hr_job_request.field_hr_applicant__applicants_hr
#: model:ir.model.fields,field_description:hr_job_request.field_hr_applicant__applicants_id #: model:ir.model.fields,field_description:hr_job_request.field_hr_applicant__applicants_id
@ -74,12 +79,6 @@ msgstr "هل أنت متأكد من إرجاع السجل لحالة المسو
msgid "Average Score" msgid "Average Score"
msgstr "درجة متوسطة" msgstr "درجة متوسطة"
#. module: hr_job_request
#: model:ir.model.fields.selection,name:hr_job_request.selection__hr_job_request__state__confirm
#: model_terms:ir.ui.view,arch_db:hr_job_request.job_request_form_view
msgid "Confirm"
msgstr "تأكيد"
#. module: hr_job_request #. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions__create_uid #: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions__create_uid
#: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions_line__create_uid #: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions_line__create_uid
@ -101,11 +100,6 @@ msgstr ""
msgid "Current Employees" msgid "Current Employees"
msgstr "الموظفون حاليا" msgstr "الموظفون حاليا"
#. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_hr_job_request__department_id
msgid "Department"
msgstr "الإدارة"
#. module: hr_job_request #. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions__display_name #: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions__display_name
#: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions_line__display_name #: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions_line__display_name
@ -180,12 +174,6 @@ msgstr ""
msgid "High Score" msgid "High Score"
msgstr "درجة عالية" msgstr "درجة عالية"
#. module: hr_job_request
#: model:ir.model.fields.selection,name:hr_job_request.selection__hr_job_request__state__hr_approve
#: model_terms:ir.ui.view,arch_db:hr_job_request.job_request_form_view
msgid "Hr Approve"
msgstr ""
#. module: hr_job_request #. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions__id #: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions__id
#: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions_line__id #: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions_line__id
@ -197,11 +185,6 @@ msgstr ""
msgid "ID" msgid "ID"
msgstr "المُعرف" msgstr "المُعرف"
#. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_hr_job_request__job_id
msgid "Job"
msgstr "المهنة"
#. module: hr_job_request #. module: hr_job_request
#: model:ir.model,name:hr_job_request.model_hr_job #: model:ir.model,name:hr_job_request.model_hr_job
msgid "Job Position" msgid "Job Position"
@ -261,20 +244,11 @@ msgstr "إطلاق التوظيف"
msgid "Low Score" msgid "Low Score"
msgstr "درجة منخفضة" msgstr "درجة منخفضة"
#. module: hr_job_request
#: model_terms:ir.ui.view,arch_db:hr_job_request.job_request_form_view
msgid "Management Approve"
msgstr "موافقة الرئيس التفيذى"
#. module: hr_job_request
#: model:ir.model.fields.selection,name:hr_job_request.selection__hr_job_request__state__manager_approve
msgid "Manager Approve"
msgstr ""
#. module: hr_job_request #. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions__name #: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions__name
#: model_terms:ir.ui.view,arch_db:hr_job_request.job_request_form_view
msgid "Name" msgid "Name"
msgstr "" msgstr "الاسم"
#. module: hr_job_request #. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_hr_job_request__name #: model:ir.model.fields,field_description:hr_job_request.field_hr_job_request__name
@ -361,8 +335,8 @@ msgstr "الربع الثاني"
#. module: hr_job_request #. module: hr_job_request
#: model_terms:ir.ui.view,arch_db:hr_job_request.job_request_form_view #: model_terms:ir.ui.view,arch_db:hr_job_request.job_request_form_view
msgid "Set Draft" msgid "Set To Draft"
msgstr "ارجاع ل مسودة" msgstr "إرجاع الى المبدئي"
#. module: hr_job_request #. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions__standard_applicant_id #: model:ir.model.fields,field_description:hr_job_request.field_applicant_questions__standard_applicant_id
@ -465,3 +439,94 @@ msgstr "متطلبات الوظيفة"
#: model:ir.model.fields,field_description:hr_job_request.field_hr_job_request__company_id #: model:ir.model.fields,field_description:hr_job_request.field_hr_job_request__company_id
msgid "Company" msgid "Company"
msgstr "الشركة" msgstr "الشركة"
#. module: hr_job_request
#: model_terms:ir.ui.view,arch_db:hr_job_request.job_request_form_view
msgid "Send"
msgstr "إرسال"
#. module: hr_job_request
#: model_terms:ir.ui.view,arch_db:hr_job_request.job_request_form_view
msgid "Confirm"
msgstr "موافقة"
#. module: hr_job_request
#: model:ir.model.fields.selection,name:hr_job_request.selection__hr_job_request__state__confirm
msgid "Confirm"
msgstr "تم التصديق"
#. module: hr_job_request
#: model:ir.model.fields.selection,name:hr_job_request.selection__hr_job_request__state__recruitment_officer
msgid "Waiting for Recruitment Officer"
msgstr "انتظار مسؤول التوظيف"
#. module: hr_job_request
#: model:ir.model.fields.selection,name:hr_job_request.selection__hr_job_request__state__hr_manager
msgid "Waiting for HR Manager"
msgstr "انتظار مدير الموارد البشرية"
#. module: hr_job_request
#: model:ir.model.fields.selection,name:hr_job_request.selection__hr_job_request__state__general_manager
msgid "Waiting for General Manager"
msgstr "انتظار المدير العام"
#. module: hr_job_request
#: model_terms:ir.ui.view,arch_db:hr_job_request.job_request_form_view
msgid "Requesting Administration Information"
msgstr "معلومات الإدارة الطالبة"
#. module: hr_job_request
#: model_terms:ir.ui.view,arch_db:hr_job_request.job_request_form_view
msgid "Job Details"
msgstr "تفاصيل الوظيفة المطلوبة"
#. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_hr_job_request__requested_start_date
msgid "Requested Start Date"
msgstr "تاريخ البدء المطلوب"
#. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_hr_job_request__department_id
msgid "Requesting Department"
msgstr "الإدارة الطالبة"
#. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_hr_job_request__job_id
msgid "Job Title"
msgstr "المسمي الوظيفي"
#. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_hr_job_request__job_related_department_id
msgid "Job Department"
msgstr "الإدارة التابعة للوظيفة"
#. module: hr_job_request
#: model:ir.model.fields.selection,name:hr_job_request.selection__hr_job_request__job_type__permanent
msgid "Permanent"
msgstr "دائم"
#. module: hr_job_request
#: model:ir.model.fields.selection,name:hr_job_request.selection__hr_job_request__job_type__temporary
msgid "Temporary"
msgstr "مؤقت"
#. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_hr_job_request__job_type
msgid "Job Type"
msgstr "نوع الوظيفة"
#. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_hr_job_request__job_number
msgid "Job Number"
msgstr "رقم الوظيفة"
#. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_hr_job_request__working_location
msgid "Work Location"
msgstr "مكان العمل"
#. module: hr_job_request
#: model:ir.model.fields,field_description:hr_job_request.field_hr_job_request__request_reason
msgid "Request Reason"
msgstr "أسباب الطلب"

View File

@ -14,29 +14,43 @@ class HrJobRequest(models.Model):
employee = self.env['hr.employee'].search([('user_id', '=', self.env.user.id)], limit=1) employee = self.env['hr.employee'].search([('user_id', '=', self.env.user.id)], limit=1)
if employee: if employee:
result['department_id'] = employee.department_id.id if employee.department_id else False result['department_id'] = employee.department_id.id if employee.department_id else False
result['employee_id'] = employee.id
return result return result
name = fields.Char(string="Name of Request", required=True) name = fields.Char(string="Name of Request", required=True, copy=False)
date = fields.Date(string="Request Date", required=True) date = fields.Date(string="Request Date", required=True, copy=False)
requested_start_date = fields.Date(string="Requested Start Date", required=True, copy=False)
employee_id = fields.Many2one('hr.employee', 'Applicant', required=True, copy=False)
department_id = fields.Many2one('hr.department', string="Requesting Department", required=True, copy=False)
job_id = fields.Many2one('hr.job', string="Job Title", required=True, copy=False)
job_related_department_id = fields.Many2one('hr.department', string="Job Department", required=True, copy=False)
job_type = fields.Selection(selection=[('permanent', 'Permanent'), ('temporary', 'Temporary'), ],
string="Job Type",
required=True,
copy=False,
default='permanent'
)
job_number = fields.Char(string="Job Number", required=True, copy=False)
needed_employee = fields.Integer(string="Needed Employee", required=True, copy=False)
working_location = fields.Many2one('work.location', string="Work Location", required=True, copy=False)
request_reason = fields.Text(string="Request Reason", required=True, copy=False)
state = fields.Selection(selection=[('draft', 'Draft'),
('recruitment_officer', 'Waiting for Recruitment Officer'),
('hr_manager', 'Waiting for HR Manager'),
('general_manager', 'Waiting for General Manager'),
('confirm', 'Confirm'),
('refused', 'Refused')], default='draft')
quarter = fields.Selection(string="Quarter", quarter = fields.Selection(string="Quarter",
selection=[('all_quarter', 'All Quarter'), ('first_quarter', 'First Quarter'), selection=[('all_quarter', 'All Quarter'), ('first_quarter', 'First Quarter'),
('second_quarter', 'Second Quarter'), ('second_quarter', 'Second Quarter'),
('third_quarter', 'Third Quarter'), ('third_quarter', 'Third Quarter'),
('fourth_quarter', 'Fourth Quarter')], default='all_quarter') ('fourth_quarter', 'Fourth Quarter')], default='all_quarter')
department_id = fields.Many2one('hr.department', string="Department", required=True)
job_id = fields.Many2one('hr.job', string="Job", required=True)
state = fields.Selection(selection=[('draft', 'Draft'),
('confirm', 'Confirm'),
('hr_approve', 'Hr Approve'),
('manager_approve', 'Manager Approve'),
('refused', 'Refused')], default='draft')
needed_employee = fields.Integer(string="Needed Employee", required=True)
number_of_employees = fields.Integer(related="job_id.no_of_employee", string="Current Employees", store=True) number_of_employees = fields.Integer(related="job_id.no_of_employee", string="Current Employees", store=True)
expected_employee = fields.Integer(string="Expected jobs", compute="get_jobs", store=True) expected_employee = fields.Integer(string="Expected jobs", compute="get_jobs", store=True)
number_of_job_empty = fields.Integer(string="Empty jobs", compute="get_jobs", store=True) number_of_job_empty = fields.Integer(string="Empty jobs", compute="get_jobs", store=True)
number_of_job_empty_total = fields.Integer(string="Total Empty jobs", compute="get_jobs", store=True) number_of_job_empty_total = fields.Integer(string="Total Empty jobs", compute="get_jobs", store=True)
job_requirements = fields.Html('Job Requirements') job_requirements = fields.Html('Job Requirements')
company_id = fields.Many2one('res.company',string="Company", default=lambda self: self.env.user.company_id) company_id = fields.Many2one('res.company', string="Company", default=lambda self: self.env.user.company_id)
def unlink(self): def unlink(self):
for rec in self: for rec in self:
@ -54,27 +68,26 @@ class HrJobRequest(models.Model):
rec.number_of_job_empty = rec.job_id.no_of_recruitment rec.number_of_job_empty = rec.job_id.no_of_recruitment
rec.expected_employee = rec.number_of_job_empty_total + rec.number_of_employees rec.expected_employee = rec.number_of_job_empty_total + rec.number_of_employees
def action_send(self):
for rec in self:
rec.state = 'recruitment_officer'
def action_hr_manager(self):
for rec in self:
rec.state = 'hr_manager'
def action_general_manager(self):
for rec in self:
rec.state = 'general_manager'
rec.job_id.sudo().write({'no_of_recruitment': rec.number_of_job_empty_total, })
def action_confirm(self): def action_confirm(self):
for rec in self: for rec in self:
rec.state = 'confirm' rec.state = 'confirm'
def department_manager(self):
for rec in self:
rec.state = 'department_manager'
def action_hr_approve(self):
for rec in self:
rec.state = 'hr_approve'
def action_manage_approve(self):
for rec in self:
rec.state = 'manager_approve'
rec.job_id.sudo().write({'no_of_recruitment': rec.number_of_job_empty_total, })
# 'expected_employees':rec.expected_employee})
def action_refused(self): def action_refused(self):
for rec in self: for rec in self:
if rec.state == 'manager_approve': if rec.state == 'general_manager':
empty = rec.job_id.expected_employees - rec.job_id.no_of_employee empty = rec.job_id.expected_employees - rec.job_id.no_of_employee
record = rec.job_id.no_of_recruitment - rec.needed_employee record = rec.job_id.no_of_recruitment - rec.needed_employee
if empty < rec.needed_employee or record < 0: if empty < rec.needed_employee or record < 0:

View File

@ -7,52 +7,89 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form> <form>
<header> <header>
<button name="action_confirm" type="object" string="Confirm" class="oe_highlight" states="draft" <button name="action_send" type="object" string="Send" class="oe_highlight" states="draft"
groups="hr_base.group_division_manager,hr.group_hr_user" /> groups="hr_base.group_division_manager"/>
<button name="action_hr_approve" type="object" string="Hr Approve" class="oe_highlight" states="confirm"
groups="hr.group_hr_user"/> <button name="action_hr_manager" type="object" string="Confirm" class="oe_highlight"
<button name="action_manage_approve" type="object" string="Management Approve" class="oe_highlight" states="recruitment_officer"
states="hr_approve" groups="hr_base.group_executive_manager"/> groups="hr_recruitment.group_hr_recruitment_user"/>
<button name="action_set_draft" type="object" string="Set Draft" class="oe_highlight" states="refused"
groups="hr.group_hr_user,hr_base.group_executive_manager" confirm="Are you sure to Reset To Draft This Record?"/>
<button name="action_refused" type="object" string="Refused" class="oe_highlight" <button name="action_refused" type="object" string="Refused" class="oe_highlight"
states="draft,confirm,hr_approve,manager_approve" states="recruitment_officer"
groups="hr.group_hr_user,hr_base.group_executive_manager"/> groups="hr_recruitment.group_hr_recruitment_user"/>
<button name="action_general_manager" type="object" string="Confirm"
class="oe_highlight"
states="hr_manager" groups="hr_recruitment.group_hr_recruitment_manager"/>
<button name="action_refused" type="object" string="Refused" class="oe_highlight"
states="hr_manager"
groups="hr_recruitment.group_hr_recruitment_manager"/>
<button name="action_confirm" type="object" string="Confirm" class="oe_highlight"
states="general_manager"
groups="hr_base.group_general_manager"/>
<button name="action_refused" type="object" string="Refused" class="oe_highlight"
states="general_manager"
groups="hr_base.group_general_manager"/>
<button name="action_set_draft" type="object" string="Set To Draft" class="oe_highlight"
states="refused,confirm"
groups="hr_recruitment.group_hr_recruitment_user"
confirm="Are you sure to Reset To Draft This Record?"/>
<field name="state" widget="statusbar"/> <field name="state" widget="statusbar"/>
</header> </header>
<sheet> <sheet>
<group> <div class="oe_title">
<h1>
<field name="name" placeholder="Name" attrs="{'readonly': [('state','!=', 'draft')]}"/>
</h1>
</div>
<group string="Requesting Administration Information">
<group> <group>
<field name="name" attrs="{'readonly': [('state','!=', 'draft')]}" /> <field name="employee_id" attrs="{'readonly': [('state','!=', 'draft')]}"/>
<field name="date" attrs="{'readonly': [('state','!=', 'draft')]}"/> <field name="date" attrs="{'readonly': [('state','!=', 'draft')]}"/>
<field name="quarter" attrs="{'readonly': [('state','!=', 'draft')]}"/>
</group> </group>
<group> <group>
<field name="company_id" groups="base.group_multi_company" attrs="{'readonly': [('state','!=', 'draft')]}"/> <field name="department_id" attrs="{'readonly': [('state','!=', 'draft')]}"/>
<field name="department_id" attrs="{'readonly': [('state','!=', 'draft')]}"/>
<field name="job_id" attrs="{'readonly': [('state','!=', 'draft')]}"/>
<field name="needed_employee" attrs="{'readonly': [('state','!=', 'draft')]}"/>
</group>
<group>
<field name="number_of_job_empty_total"/>
<field name="expected_employee"/>
<field name="number_of_employees"/>
</group> </group>
</group> </group>
<notebook> <group string="Job Details">
<page string="Job Requirements"> <group>
<field name="job_requirements" <field name="job_id" attrs="{'readonly': [('state','!=', 'draft')]}"/>
nolabel="1" <field name="job_related_department_id"
colspan="2" attrs="{'readonly': [('state','!=', 'draft')]}"/>
attrs="{'readonly':[('state','!=','draft')]}" <field name="job_number" attrs="{'readonly': [('state','!=', 'draft')]}"/>
placeholder="Job Requirements"/> <field name="job_type" attrs="{'readonly': [('state','!=', 'draft')]}"/>
</page> </group>
</notebook> <group>
<field name="needed_employee" attrs="{'readonly': [('state','!=', 'draft')]}"/>
</sheet> <field name="working_location" attrs="{'readonly': [('state','!=', 'draft')]}"/>
<div class="oe_chatter"> <field name="requested_start_date" attrs="{'readonly': [('state','!=', 'draft')]}"/>
<field name="request_reason" attrs="{'readonly': [('state','!=', 'draft')]}"/>
</group>
</group>
<group>
<group>
<field name="number_of_job_empty_total"/>
<field name="expected_employee"/>
</group>
<group>
<field name="quarter" invisible="1" attrs="{'readonly': [('state','!=', 'draft')]}"/>
<field name="company_id" groups="base.group_multi_company"
attrs="{'readonly': [('state','!=', 'draft')]}"/>
<field name="number_of_employees"/>
</group>
</group>
<notebook>
<page string="Job Requirements">
<field name="job_requirements"
nolabel="1"
colspan="2"
attrs="{'readonly':[('state','!=','draft')]}"
placeholder="Job Requirements"/>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/> <field name="message_follower_ids" widget="mail_followers"/>
<field name="activity_ids" widget="mail_activity"/> <field name="activity_ids" widget="mail_activity"/>
<field name="message_ids" widget="mail_thread"/> <field name="message_ids" widget="mail_thread"/>