Merge pull request #5406 from expsa/maz_hr_multicompany_employee
Maz hr multicompany employee
This commit is contained in:
commit
1ff8aca934
|
|
@ -0,0 +1,2 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from . import models
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
{
|
||||
'name': 'HR Multi-Company Employee Number',
|
||||
'version': '14.0.1.0.0',
|
||||
'category': 'Human Resources',
|
||||
'summary': 'Fix employee number generation for multi-company setup',
|
||||
'description': """
|
||||
This module fixes the employee number generation issue when creating employees
|
||||
from res.users in a multi-company environment.
|
||||
""",
|
||||
'author': 'Custom Development',
|
||||
'depends': ['hr_base', 'hr'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'data/ir_sequence_data.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'application': False,
|
||||
'auto_install': False,
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="seq_hr_employee_global" model="ir.sequence">
|
||||
<field name="name">Global Employee Number</field>
|
||||
<field name="code">hr.employee.global</field>
|
||||
<field name="prefix">EMP-</field>
|
||||
<field name="padding">4</field>
|
||||
<field name="number_next">1</field>
|
||||
<field name="number_increment">1</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from . import hr_employee
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from datetime import date
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class HrEmployee(models.Model):
|
||||
_inherit = "hr.employee"
|
||||
|
||||
@api.model
|
||||
def _default_emp_code(self):
|
||||
seq = self.env['ir.sequence'].next_by_code('hr.employee.global')
|
||||
if not seq:
|
||||
# If sequence doesn't exist, create it
|
||||
self._create_global_sequence()
|
||||
seq = self.env['ir.sequence'].next_by_code('hr.employee.global')
|
||||
return seq or '/'
|
||||
|
||||
@api.model
|
||||
def _create_global_sequence(self):
|
||||
existing_sequence = self.env['ir.sequence'].search([
|
||||
('code', '=', 'hr.employee.global')
|
||||
], limit=1)
|
||||
|
||||
if not existing_sequence:
|
||||
# Find the maximum employee number in the system
|
||||
all_employees = self.env['hr.employee'].search([
|
||||
('active', 'in', [False, True])
|
||||
])
|
||||
|
||||
max_number = 0
|
||||
for emp in all_employees:
|
||||
if emp.emp_no and emp.emp_no.startswith('EMP-'):
|
||||
try:
|
||||
number_part = emp.emp_no.replace('EMP-', '')
|
||||
if number_part.isdigit():
|
||||
max_number = max(max_number, int(number_part))
|
||||
except (ValueError, AttributeError):
|
||||
continue
|
||||
|
||||
self.env['ir.sequence'].sudo().create({
|
||||
'name': 'Global Employee Number',
|
||||
'code': 'hr.employee.global',
|
||||
'implementation': 'standard',
|
||||
'prefix': 'EMP-',
|
||||
'padding': 4,
|
||||
'number_increment': 1,
|
||||
'number_next_actual': max_number + 1,
|
||||
'company_id': False,
|
||||
})
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
|
||||
if not vals.get('emp_no'):
|
||||
vals['emp_no'] = self._default_emp_code()
|
||||
|
||||
if 'company_id' not in vals:
|
||||
vals['company_id'] = self.env.context.get('default_company_id') or self.env.company.id
|
||||
|
||||
return super(HrEmployee, self).create(vals)
|
||||
|
||||
@api.constrains("emp_no", "birthday", "attachment_ids")
|
||||
def e_unique_field_name_constrains(self):
|
||||
for rec in self:
|
||||
# Check employee number uniqueness globally
|
||||
if rec.emp_no and rec.emp_no != '/':
|
||||
duplicate = self.search([
|
||||
("emp_no", "=", rec.emp_no),
|
||||
("id", "!=", rec.id)
|
||||
], limit=1)
|
||||
if duplicate:
|
||||
raise ValidationError(
|
||||
_("You cannot create Employee with the same employee number")
|
||||
)
|
||||
|
||||
if rec.birthday and isinstance(rec.birthday, date) and rec.birthday >= date.today():
|
||||
raise ValidationError(_("Sorry, The Birthday Must Be Less than Date Today"))
|
||||
|
||||
if rec.attachment_ids:
|
||||
for att in rec.attachment_ids:
|
||||
if not att.doc_name:
|
||||
raise ValidationError(_('Attach the attachment to the Document %s') % att.name)
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_hr_employee_multicompany,hr.employee.multicompany,hr.model_hr_employee,base.group_user,1,1,1,1
|
||||
|
Loading…
Reference in New Issue