odex25_standard/odex25_hr/hr_base/models/hr_department.py

91 lines
3.9 KiB
Python

# -*- coding: utf-8 -*-
from odoo import api, fields, models, exceptions, _
class HrDepartment(models.Model):
_inherit = "hr.department"
dep_link = fields.Many2one(comodel_name="department.info")
analytic_account_id = fields.Many2one('account.analytic.account',
'Analytic Account')
employee_ids = fields.One2many("hr.employee", "department_id", string="Employees",
domain=[("state", "=", "open")], )
job_ids = fields.Many2many("hr.job", string="Jobs")
email_manager = fields.Char(string="Email Manager", related="manager_id.work_email")
department_type = fields.Selection(selection=[('department', 'Department'), ('unit', 'Unit')])
english_name = fields.Char(string='English Name')
is_branch = fields.Boolean(string='Is Branch?',tracking=True)
his_branch = fields.Boolean(compute='get_is_branch', default=False, store=True)
branch_name = fields.Many2one('hr.department',domain=[("is_branch","=",True)])
def name_get(self):
result = []
for department in self:
# إذا كان هذا القسم فرع، اعرض الاسم فقط بدون مسار
if department.is_branch:
name = department.name # الاسم فقط بدون مسار للفروع
# إذا كان السياق يطلب عرض مختصر
elif (self.env.context.get('from_branch_field') or
self.env.context.get('show_branch_short')):
name = department.name # الاسم فقط بدون مسار
else:
# العرض الافتراضي (مع المسار الهرمي) للأقسام العادية
name = super(HrDepartment, department).name_get()[0][1]
result.append((department.id, name))
return result
@api.depends('is_branch','parent_id')
def get_is_branch(self):
"""To know which unit or department belongs to a specific branch"""
for rec in self:
if rec.is_branch == True or rec.parent_id.is_branch == True or rec.parent_id.parent_id.is_branch == True:
rec.his_branch = True
@api.model
def create(self, vals):
new_record = super(HrDepartment, self).create(vals)
data = self.env["department.info"].create(
{
"department": new_record.name,
"parent_dep": new_record.parent_id.id,
"manager": new_record.manager_id.id,
}
)
new_record.dep_link = data.id
return new_record
def write(self, vals):
"""If the manager name or parent name is changed, the manager name
will be changed for all employees has with this department"""
for rec in self:
super(HrDepartment, rec).write(vals)
## to remove followers ##
followers = self.env['mail.followers'].search([('res_id', '=', rec.id),('res_model','=','hr.department')])
followers.sudo().unlink()
### end #################
if ('manager_id' or 'parent_id') in vals:
departments = rec.env['hr.department'].search([('id', 'child_of', rec.id)]).ids
employees = rec.env['hr.employee'].search([('department_id', 'in', departments)])
for emp in employees:
emp._onchange_department()
if rec.dep_link:
rec.dep_link.department = rec.name
rec.dep_link.parent_dep = rec.parent_id.id
rec.dep_link.manager = rec.manager_id.id
return True
def unlink(self):
for rec in self:
if rec.dep_link:
rec.dep_link.unlink()
if rec.employee_ids:
raise exceptions.Warning(_('You Can Not Delete Department %s Have Employees') % rec.name)
super(HrDepartment, self).unlink()
return True