[UPD] employee_requests: add permission types feature
This commit is contained in:
parent
a4f7c2a7e2
commit
534d9a8198
|
|
@ -15,10 +15,13 @@
|
||||||
'security/employee_requests_security.xml',
|
'security/employee_requests_security.xml',
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
|
|
||||||
|
'data/hr_personal_permission_type_data.xml',
|
||||||
|
|
||||||
'views/employee_effective_form.xml',
|
'views/employee_effective_form.xml',
|
||||||
'views/employee_overtime_request.xml',
|
'views/employee_overtime_request.xml',
|
||||||
'views/hr_clearance_form.xml',
|
'views/hr_clearance_form.xml',
|
||||||
'views/hr_personal_permission.xml',
|
'views/hr_personal_permission.xml',
|
||||||
|
'views/hr_personal_permission_type_views.xml',
|
||||||
'views/customize_hr_employee.xml',
|
'views/customize_hr_employee.xml',
|
||||||
'views/employee_department_jobs_view.xml',
|
'views/employee_department_jobs_view.xml',
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -2369,8 +2369,8 @@ msgstr "إستئذان شخصي"
|
||||||
|
|
||||||
#. module: employee_requests
|
#. module: employee_requests
|
||||||
#: model:ir.ui.menu,name:employee_requests.employee_personal_permission_menu_item
|
#: model:ir.ui.menu,name:employee_requests.employee_personal_permission_menu_item
|
||||||
msgid "Personal Permissions"
|
msgid "Permissions"
|
||||||
msgstr "إستئذان الخروج"
|
msgstr "الاذونات"
|
||||||
|
|
||||||
#. module: employee_requests
|
#. module: employee_requests
|
||||||
#: model_terms:ir.ui.view,arch_db:employee_requests.clearance_report_template
|
#: model_terms:ir.ui.view,arch_db:employee_requests.clearance_report_template
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ from . import employee_effective_form
|
||||||
from . import employee_overtime_request
|
from . import employee_overtime_request
|
||||||
from . import hr_clearance_form
|
from . import hr_clearance_form
|
||||||
from . import document_directory
|
from . import document_directory
|
||||||
|
from . import hr_personal_permission_type
|
||||||
from . import hr_personal_permission
|
from . import hr_personal_permission
|
||||||
from . import house_allowance_advance
|
from . import house_allowance_advance
|
||||||
from . import employee
|
from . import employee
|
||||||
|
|
|
||||||
|
|
@ -15,13 +15,14 @@ class HrPersonalPermission(models.Model):
|
||||||
_inherit = ['mail.thread', 'mail.activity.mixin']
|
_inherit = ['mail.thread', 'mail.activity.mixin']
|
||||||
_order = 'date DESC'
|
_order = 'date DESC'
|
||||||
|
|
||||||
|
permission_type_id = fields.Many2one('hr.personal.permission.type', required=True)
|
||||||
from_hr_department = fields.Boolean()
|
from_hr_department = fields.Boolean()
|
||||||
date = fields.Date(default=lambda self: fields.Date.today())
|
date = fields.Date(default=lambda self: fields.Date.today())
|
||||||
date_from = fields.Datetime()
|
date_from = fields.Datetime()
|
||||||
date_to = fields.Datetime()
|
date_to = fields.Datetime()
|
||||||
duration = fields.Float(compute='get_duration_no' ,store=True)
|
duration = fields.Float(compute='get_duration_no' ,store=True)
|
||||||
employee_contract_id = fields.Many2one(comodel_name='hr.contract.type')
|
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')
|
permission_number = fields.Float(store=True, readonly=True, help='The Remaining Number of Hours permission This Month')
|
||||||
early_exit = fields.Boolean()
|
early_exit = fields.Boolean()
|
||||||
mission_purpose = fields.Text()
|
mission_purpose = fields.Text()
|
||||||
|
|
@ -111,7 +112,7 @@ class HrPersonalPermission(models.Model):
|
||||||
def _get_duration_hours(self):
|
def _get_duration_hours(self):
|
||||||
for item in self:
|
for item in self:
|
||||||
if item.date_from:
|
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")
|
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)
|
end_date_hour = start_date_hour + timedelta(hours=permission_hour)
|
||||||
item.date_to = end_date_hour
|
item.date_to = end_date_hour
|
||||||
|
|
@ -148,7 +149,7 @@ class HrPersonalPermission(models.Model):
|
||||||
else:
|
else:
|
||||||
date_to = (current_date.replace(month=current_month + 1, day=1) - timedelta(days=1)).strftime('%Y-%m-%d')
|
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_permissions = self.search([
|
||||||
('employee_id', '=', item.employee_id.id),
|
('employee_id', '=', item.employee_id.id),
|
||||||
('state', 'not in', ('draft','refused')),
|
('state', 'not in', ('draft','refused')),
|
||||||
|
|
@ -285,8 +286,8 @@ class HrPersonalPermission(models.Model):
|
||||||
current_month = (datetime.utcnow() + timedelta(hours=3)).date().month
|
current_month = (datetime.utcnow() + timedelta(hours=3)).date().month
|
||||||
current_year = (datetime.utcnow() + timedelta(hours=3)).date().year
|
current_year = (datetime.utcnow() + timedelta(hours=3)).date().year
|
||||||
month_len = monthrange(current_year, current_month)[1]
|
month_len = monthrange(current_year, current_month)[1]
|
||||||
number_of_per = item.employee_id.contract_id.working_hours.permission_number
|
number_of_per = item.permission_type_id.monthly_hours
|
||||||
number_of_durations = item.employee_id.contract_id.working_hours.permission_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')),
|
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_from', '>=', time.strftime('%Y-{0}-1'.format(current_month))),
|
||||||
('date_to', '<=',
|
('date_to', '<=',
|
||||||
|
|
@ -364,7 +365,7 @@ class HrPersonalPermission(models.Model):
|
||||||
|
|
||||||
def direct_manager(self):
|
def direct_manager(self):
|
||||||
for rec in 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
|
manager = rec.sudo().employee_id.parent_id
|
||||||
hr_manager = rec.sudo().employee_id.company_id.hr_manager_id
|
hr_manager = rec.sudo().employee_id.company_id.hr_manager_id
|
||||||
if manager:
|
if manager:
|
||||||
|
|
|
||||||
|
|
@ -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!'))
|
||||||
|
]
|
||||||
|
|
||||||
|
|
@ -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,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_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,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_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_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
|
access_employee_department_jobs_hr,employee_department_jobs_hr,model_employee_department_jobs,hr.group_hr_user,1,1,1,1
|
||||||
|
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
<menuitem name="Employee Clearance Form" id="employee_clearance_form"
|
<menuitem name="Employee Clearance Form" id="employee_clearance_form"
|
||||||
parent="employee_request_menu_item" action="employee_clearance_form_action" sequence="3"/>
|
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"
|
parent="employee_request_menu_item"
|
||||||
action="employee_personal_permission_action" sequence="3"/>
|
action="employee_personal_permission_action" sequence="3"/>
|
||||||
|
|
||||||
|
|
@ -34,6 +34,10 @@
|
||||||
<menuitem name="Employee Other Request" id="employee_other_request_menu_item"
|
<menuitem name="Employee Other Request" id="employee_other_request_menu_item"
|
||||||
parent="employee_request_menu_item" action="employee_other_request_action" sequence="5"/>
|
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>
|
</data>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@
|
||||||
<sheet>
|
<sheet>
|
||||||
<group>
|
<group>
|
||||||
<group string="Permission Info">
|
<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"
|
<field name="date" string="Date Request"
|
||||||
attrs="{'readonly':[('state','!=','draft')],'required':1}"/>
|
attrs="{'readonly':[('state','!=','draft')],'required':1}"/>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
Loading…
Reference in New Issue