[UPD] employee_requests: add permission types feature

This commit is contained in:
Samir Ladoui 2024-11-06 14:53:10 +01:00
parent a4f7c2a7e2
commit 534d9a8198
10 changed files with 107 additions and 10 deletions

View File

@ -15,10 +15,13 @@
'security/employee_requests_security.xml',
'security/ir.model.access.csv',
'data/hr_personal_permission_type_data.xml',
'views/employee_effective_form.xml',
'views/employee_overtime_request.xml',
'views/hr_clearance_form.xml',
'views/hr_personal_permission.xml',
'views/hr_personal_permission_type_views.xml',
'views/customize_hr_employee.xml',
'views/employee_department_jobs_view.xml',

View File

@ -0,0 +1,11 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<record id="seq_hr_personal_permission_type" model="ir.sequence">
<field name="name">Personal Permission Type Sequence</field>
<field name="code">hr.personal.permission.type.sequence</field>
<field name="prefix">PT-</field>
<field name="padding">4</field>
</record>
</odoo>

View File

@ -2369,8 +2369,8 @@ msgstr "إستئذان شخصي"
#. module: employee_requests
#: model:ir.ui.menu,name:employee_requests.employee_personal_permission_menu_item
msgid "Personal Permissions"
msgstr "إستئذان الخروج"
msgid "Permissions"
msgstr "الاذونات"
#. module: employee_requests
#: model_terms:ir.ui.view,arch_db:employee_requests.clearance_report_template

View File

@ -3,6 +3,7 @@ from . import employee_effective_form
from . import employee_overtime_request
from . import hr_clearance_form
from . import document_directory
from . import hr_personal_permission_type
from . import hr_personal_permission
from . import house_allowance_advance
from . import employee

View File

@ -15,13 +15,14 @@ class HrPersonalPermission(models.Model):
_inherit = ['mail.thread', 'mail.activity.mixin']
_order = 'date DESC'
permission_type_id = fields.Many2one('hr.personal.permission.type', required=True)
from_hr_department = fields.Boolean()
date = fields.Date(default=lambda self: fields.Date.today())
date_from = fields.Datetime()
date_to = fields.Datetime()
duration = fields.Float(compute='get_duration_no' ,store=True)
employee_contract_id = fields.Many2one(comodel_name='hr.contract.type')
balance = fields.Float(related='employee_id.contract_id.working_hours.permission_hours')
balance = fields.Float(related='permission_type_id.daily_hours')
permission_number = fields.Float(store=True, readonly=True, help='The Remaining Number of Hours permission This Month')
early_exit = fields.Boolean()
mission_purpose = fields.Text()
@ -111,7 +112,7 @@ class HrPersonalPermission(models.Model):
def _get_duration_hours(self):
for item in self:
if item.date_from:
permission_hour = item.employee_id.resource_calendar_id.permission_hours
permission_hour = item.permission_type_id.daily_hours
start_date_hour = datetime.strptime(str(item.date_from), "%Y-%m-%d %H:%M:%S")
end_date_hour = start_date_hour + timedelta(hours=permission_hour)
item.date_to = end_date_hour
@ -148,7 +149,7 @@ class HrPersonalPermission(models.Model):
else:
date_to = (current_date.replace(month=current_month + 1, day=1) - timedelta(days=1)).strftime('%Y-%m-%d')
number_of_per = item.employee_id.contract_id.working_hours.permission_number
number_of_per = item.permission_type_id.monthly_hours
employee_permissions = self.search([
('employee_id', '=', item.employee_id.id),
('state', 'not in', ('draft','refused')),
@ -285,8 +286,8 @@ class HrPersonalPermission(models.Model):
current_month = (datetime.utcnow() + timedelta(hours=3)).date().month
current_year = (datetime.utcnow() + timedelta(hours=3)).date().year
month_len = monthrange(current_year, current_month)[1]
number_of_per = item.employee_id.contract_id.working_hours.permission_number
number_of_durations = item.employee_id.contract_id.working_hours.permission_hours
number_of_per = item.permission_type_id.monthly_hours
number_of_durations = item.permission_type_id.daily_hours
this_month_permission = self.search([('employee_id', '=', item.employee_id.id), ('state','not in', ('draft','refused')),
('date_from', '>=', time.strftime('%Y-{0}-1'.format(current_month))),
('date_to', '<=',
@ -364,7 +365,7 @@ class HrPersonalPermission(models.Model):
def direct_manager(self):
for rec in self:
approve_by = rec.sudo().employee_id.resource_calendar_id.approval_by
approve_by = rec.sudo().permission_type_id.approval_by
manager = rec.sudo().employee_id.parent_id
hr_manager = rec.sudo().employee_id.company_id.hr_manager_id
if manager:

View File

@ -0,0 +1,22 @@
from odoo import models, fields, api, _
class HrPersonalPermissionType(models.Model):
_name = 'hr.personal.permission.type'
_order = 'sequence asc'
name = fields.Char(required=True)
sequence = fields.Integer(readonly=True)
daily_hours = fields.Float()
monthly_hours = fields.Float()
approval_by = fields.Selection(
[('direct_manager', 'Direct Manager'), ('hr_manager', 'HR Manager')],
default='direct_manager',
required=True
)
active = fields.Boolean(default=True)
_sql_constraints = [
('uniq_name', 'UNIQUE(name)', _('Name should be unique!'))
]

View File

@ -8,6 +8,7 @@ access_house_allowance_advance_line,access_house_allowance_advance_line,model_ho
access_hr_clearance_form,access_hr_clearance_form,model_hr_clearance_form,base.group_user,1,1,1,1
access_hr_clearance_form_division,access_hr_clearance_form_division,model_hr_clearance_form,hr_base.group_division_manager,1,1,1,1
access_hr_personal_permission,access_hr_personal_permission,model_hr_personal_permission,base.group_user,1,1,1,1
access_hr_personal_permission_type,access_hr_personal_permission_type,model_hr_personal_permission_type,base.group_user,1,1,1,1
access_hr_job_emp,hr.job: Employee,hr.model_hr_job,base.group_user,1,1,1,0
access_employee_department_jobs_emp,employee_department_jobs_emp,model_employee_department_jobs,base.group_user,1,0,0,0
access_employee_department_jobs_hr,employee_department_jobs_hr,model_employee_department_jobs,hr.group_hr_user,1,1,1,1

1 id name model_id:id group_id/id perm_read perm_write perm_create perm_unlink
8 access_hr_clearance_form access_hr_clearance_form model_hr_clearance_form base.group_user 1 1 1 1
9 access_hr_clearance_form_division access_hr_clearance_form_division model_hr_clearance_form hr_base.group_division_manager 1 1 1 1
10 access_hr_personal_permission access_hr_personal_permission model_hr_personal_permission base.group_user 1 1 1 1
11 access_hr_personal_permission_type access_hr_personal_permission_type model_hr_personal_permission_type base.group_user 1 1 1 1
12 access_hr_job_emp hr.job: Employee hr.model_hr_job base.group_user 1 1 1 0
13 access_employee_department_jobs_emp employee_department_jobs_emp model_employee_department_jobs base.group_user 1 0 0 0
14 access_employee_department_jobs_hr employee_department_jobs_hr model_employee_department_jobs hr.group_hr_user 1 1 1 1

View File

@ -21,7 +21,7 @@
<menuitem name="Employee Clearance Form" id="employee_clearance_form"
parent="employee_request_menu_item" action="employee_clearance_form_action" sequence="3"/>
<menuitem name="Personal Permissions" id="employee_personal_permission_menu_item"
<menuitem name="Permissions" id="employee_personal_permission_menu_item"
parent="employee_request_menu_item"
action="employee_personal_permission_action" sequence="3"/>
@ -34,6 +34,10 @@
<menuitem name="Employee Other Request" id="employee_other_request_menu_item"
parent="employee_request_menu_item" action="employee_other_request_action" sequence="5"/>
<menuitem
id="menu_view_permission_types"
action="action_permission_types"
parent="hr.hr_menu_configuration"/>
</data>
</odoo>

View File

@ -46,6 +46,7 @@
<sheet>
<group>
<group string="Permission Info">
<field name="permission_type_id" options="{'no_create': True, 'no_open': True, 'no_create_edit': True}" />
<field name="date" string="Date Request"
attrs="{'readonly':[('state','!=','draft')],'required':1}"/>

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="hr_personal_permission_type_view_form" model="ir.ui.view">
<field name="name">hr.personal.permission.type.view.form</field>
<field name="model">hr.personal.permission.type</field>
<field name="arch" type="xml">
<form string="Permission Type">
<sheet>
<field name="active" invisible="1" />
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1>
<field name="name" />
</h1>
</div>
<group>
<group>
<field name="daily_hours" widget="float_time" />
<field name="monthly_hours" widget="float_time" />
</group>
<group>
<field name="approval_by" />
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="hr_personal_permission_type_view_tree" model="ir.ui.view">
<field name="name">hr.personal.permission.type.view.tree</field>
<field name="model">hr.personal.permission.type</field>
<field name="arch" type="xml">
<tree string="Permission Types">
<field name="active" invisible="1" />
<field name="sequence" widget="handle" />
<field name="name" />
<field name="daily_hours" widget="float_time" />
<field name="monthly_hours" widget="float_time" />
<field name="approval_by" options="{'no_create': True, 'no_open': True, 'no_create_edit': True}" />
</tree>
</field>
</record>
<record id="action_permission_types" model="ir.actions.act_window">
<field name="type">ir.actions.act_window</field>
<field name="name">Permission Types</field>
<field name="res_model">hr.personal.permission.type</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>