odex30_standard/employee_requests/models/other_request.py

274 lines
11 KiB
Python

# -*- coding: utf-8 -*-
from odoo import api, fields, models, _
from odoo.exceptions import UserError
from hijri_converter import convert
class EmployeeOtherRequest(models.Model):
_name = 'employee.other.request'
_rec_name = 'employee_id'
_description = 'Other Request'
_inherit = ['mail.thread', 'mail.activity.mixin']
_order = 'date desc'
from_hr = fields.Boolean()
date = fields.Date(default=lambda self: fields.Date.today())
comment = fields.Text()
state = fields.Selection(selection=[
('draft', 'Draft'),
('submit', 'Waiting Direct Manager'),
('confirm', 'Wait HR Department'),
('approved', 'Approval'),
('refuse', 'Refused')
], default='draft', tracking=True)
request_type = fields.Selection(selection=[
('dependent', 'Dependent'),
('insurance', 'Insurance'),
('card', 'Business Card'),
('qualification', 'Qualification'),
('certification', 'Certification'),
('salary_define', 'Salary Define'),
('salary_fixing', 'Salary Fixing'),
('suggestion', 'Suggestion'),
('complaint', 'Complaint'),
('other_requests', 'Other Requests')
], tracking=True)
# relational fields
employee_id = fields.Many2one('hr.employee', default=lambda item: item.get_user_id(),
domain=[('state', '=', 'open')])
manager_id = fields.Many2one('hr.employee', string='Direct Manager', related='employee_id.parent_id', store=True,
readonly=True,
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]")
employee_no = fields.Char(related='employee_id.emp_no', readonly=True,string='Employee Number', store=True)
department_id = fields.Many2one(comodel_name='hr.department', related='employee_id.department_id', readonly=True,store=True)
job_id = fields.Many2one(comodel_name='hr.job', related='employee_id.job_id', readonly=True)
contract_statuss = fields.Selection(related='employee_id.contract_id.contract_status', readonly=True)
employee_dependant = fields.One2many('hr.employee.dependent', 'request_id', _('Employee Dependants'))
qualification_employee = fields.One2many('hr.qualification', 'request_id', _('Employee Qualification'))
certification_employee = fields.One2many('hr.certification', 'request_id', _('Employee Certification'))
create_insurance_request = fields.Boolean()
print_type = fields.Selection(selection=[
('detail', 'With Details'),
('no_detail', 'Without Details'),
('no_salary', 'Without Salary')
], string='Print Type')
destination = fields.Many2one('salary.destination', string='Destination')
parent_request_id = fields.Many2one('employee.other.request')
company_id = fields.Many2one('res.company', string="Company", default=lambda self: self.env.company)
is_branch = fields.Many2one(related='department_id.branch_name', store=True, readonly=True)
classification_id = fields.Many2one('hr.classification',string ='Classification')
def print_with_details(self):
return self.env.ref('employee_requests.action_report_employee_identification').report_action(self)
def print_with_details2(self):
return self.env.ref('employee_requests.action_report_employee_identify_2').report_action(self)
def print_with_details3(self):
return self.env.ref('employee_requests.action_report_employee_identify_3').report_action(self)
def print_without_details(self):
return self.env.ref('employee_requests.action_report_employee_identify_3').report_action(self)
def print_salary_confirmation(self):
return self.env.ref('employee_requests.salary_conf_report_act').report_action(self)
'''@api.onchange('employee_id')
def chick_hiring_date(self):
for item in self:
if item.employee_id:
if not item.employee_id.first_hiring_date:
raise UserError(
_('You can not Request Other Request The Employee have Not First Hiring Date'))'''
def get_user_id(self):
employee_id = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
if employee_id:
return employee_id.id
else:
return False
def submit(self):
for item in self:
if item.employee_id:
if not item.employee_id.first_hiring_date:
raise UserError(
_('You can not Request Other Request The Employee have Not First Hiring Date'))
if item.request_type == 'dependent':
if not item.employee_dependant:
raise UserError(_('Please The dependents were not Included'))
# if item.employee_id.contract_id.contract_status == 'single':
# raise exceptions.UserError(_('You can not Add Fimaly record Because Employee is Single'))
else:
for rec in item.employee_dependant:
if not rec.attachment:
raise UserError(_('Please Insert dependents Attachments Files Below!'))
if item.request_type == 'qualification':
if not item.qualification_employee:
raise UserError(_('Please The qualification or certification were not Insert Below!'))
for rec in item.qualification_employee:
if not rec.attachment:
raise UserError(_('Please Insert Attachments Files Below!'))
if item.request_type == 'certification':
if not item.certification_employee:
raise UserError(_('Please The qualification or certification were not Insert Below!'))
for rec in item.certification_employee:
if not rec.attachment:
raise UserError(_('Please Insert Attachments Files Below!'))
if item.request_type in ['suggestion', 'complaint']:
item.state = "submit"
else:
item.state = "confirm"
def confirm(self):
#self.state = 'confirm'
for rec in self:
manager = rec.sudo().employee_id.parent_id
hr_manager = rec.sudo().employee_id.company_id.hr_manager_id
if manager:
if (manager.user_id.id == rec.env.uid or hr_manager.user_id.id == rec.env.uid):
rec.write({'state': 'confirm'})
else:
raise UserError(_("Sorry, The Approval For The Direct Manager '%s' Only OR HR Manager!")%(rec.employee_id.parent_id.name))
else:
rec.write({'state': 'confirm'})
def approved(self):
for item in self:
if item.request_type == 'dependent':
if item.employee_dependant:
item.employee_dependant.write({
'contract_id': item.employee_id.contract_id.id,
})
if self.create_insurance_request:
self.env['employee.other.request'].create({
'employee_id': item.employee_id.id,
'department_id': item.department_id.id,
'job_id': item.job_id.id,
'contract_statuss': item.contract_statuss,
'date': item.date,
'request_type': 'insurance',
'parent_request_id': item.id,
'comment': item.comment,
# 'employee_dependant': [(0, 0, line) for line in line_vals],
'state': 'submit'
})
if item.request_type == 'qualification':
if item.qualification_employee:
item.qualification_employee.write({
'qualification_relation_name': item.employee_id.id,
})
if item.request_type == 'certification':
if item.certification_employee:
item.certification_employee.write({
'certification_relation': item.employee_id.id,
})
self.state = 'approved'
def refuse(self):
for item in self:
if item.request_type == 'dependent':
if item.employee_dependant:
item.employee_dependant.write({
'contract_id': False
})
if item.request_type == 'qualification':
if item.qualification_employee:
item.qualification_employee.write({
'qualification_relation_name': False
})
if item.request_type == 'certification':
if item.certification_employee:
item.certification_employee.write({
'certification_relation': False
})
self.state = 'refuse'
#Refuse For The Direct Manager
def direct_manager_refused(self):
for rec in self:
manager = rec.sudo().employee_id.parent_id
hr_manager = rec.sudo().employee_id.company_id.hr_manager_id
if manager:
if manager.user_id.id == rec.env.uid or hr_manager.user_id.id == rec.env.uid:
rec.refuse()
else:
raise UserError(_("Sorry, The Refuse For The Direct Manager '%s' Only OR HR Manager!") % (manager.name))
else:
rec.refuse()
def draft(self):
for item in self:
if item.request_type == 'dependent':
if item.employee_dependant:
item.employee_dependant.write({
'contract_id': False
})
self.state = 'draft'
def change_current_date_hijri(self):
date = fields.Date.to_date(self.date) if isinstance(self.date, str) else self.date
year = date.year
day = date.day
month = date.month
hijri_date = convert.Gregorian(year, month, day).to_hijri()
return hijri_date
def unlink(self):
for rec in self:
if rec.state != 'draft':
raise UserError(_('You can not delete record in state not in draft'))
return super(EmployeeOtherRequest, self).unlink()
class salaryDestination(models.Model):
_name = 'salary.destination'
_description = 'Salary Destination'
name = fields.Char(string='Name')
english_name = fields.Char(string='English Name')
# Hr_Employee_dependent
class EmployeeDependent(models.Model):
_inherit = 'hr.employee.dependent'
request_id = fields.Many2one('employee.other.request')
# Hr_Employee_Qualification
class Qualification(models.Model):
_inherit = 'hr.qualification'
request_id = fields.Many2one('employee.other.request')
# Hr_Employee_Certification
class HrCerti(models.Model):
_inherit = 'hr.certification'
request_id = fields.Many2one('employee.other.request')
class HrCclassification(models.Model):
_name = 'hr.classification'
_description = 'HR Classification'
_rec_name = 'name'
name = fields.Char(string='الاسم') # Translatable
active = fields.Boolean(default=True, string='نشط')