|
|
|
@ -2,17 +2,96 @@
|
|
|
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
|
|
|
|
|
|
from odoo import fields, models, api
|
|
|
|
|
import logging
|
|
|
|
|
|
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
class GnHrContract(models.Model):
|
|
|
|
|
_inherit = "hr.contract"
|
|
|
|
|
|
|
|
|
|
previous_contract_id = fields.Many2one("hr.contract", string="Contrat précédent (en cas d'avenant, de renouvellement ou de changement de poste)")
|
|
|
|
|
lineage_sequence_number = fields.Integer(string="Numéro de séquence dans l'historique du salarié", default=0)
|
|
|
|
|
|
|
|
|
|
@api.model
|
|
|
|
|
def create(self, vals):
|
|
|
|
|
contract = super(GnHrContract, self).create(vals)
|
|
|
|
|
if contract.previous_contract_id:
|
|
|
|
|
previous_number = contract.previous_contract_id.lineage_sequence_number
|
|
|
|
|
contract.lineage_sequence_number = previous_number + 1
|
|
|
|
|
return contract
|
|
|
|
|
lineage_sequence_number = fields.Integer(string="Numéro de séquence dans l'historique du salarié", compute='_compute_lineage_sequence_number', store=True)
|
|
|
|
|
related_contract_ids = fields.Many2many('hr.contract',
|
|
|
|
|
string="Ensemble des contrats liés", compute='_compute_related_contracts')
|
|
|
|
|
|
|
|
|
|
len_related_contracts = fields.Integer(string="Nombre de contrats liés", compute='_len_related_contracts', store=True)
|
|
|
|
|
|
|
|
|
|
@api.depends('previous_contract_id')
|
|
|
|
|
def _compute_related_contracts(self):
|
|
|
|
|
for contract in self:
|
|
|
|
|
if contract.previous_contract_id:
|
|
|
|
|
previous_contract = contract.previous_contract_id
|
|
|
|
|
associated_contract_ids = [previous_contract.id,]
|
|
|
|
|
while previous_contract.previous_contract_id:
|
|
|
|
|
previous_contract = previous_contract.previous_contract_id
|
|
|
|
|
associated_contract_ids.append(previous_contract.id)
|
|
|
|
|
|
|
|
|
|
contract.related_contract_ids = [(6, 0, associated_contract_ids)]
|
|
|
|
|
else:
|
|
|
|
|
contract.related_contract_ids = False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@api.depends('previous_contract_id')
|
|
|
|
|
def _compute_lineage_sequence_number(self):
|
|
|
|
|
for contract in self:
|
|
|
|
|
if contract.previous_contract_id:
|
|
|
|
|
previous_contract = contract.previous_contract_id
|
|
|
|
|
previous_number = previous_contract.lineage_sequence_number
|
|
|
|
|
contract.lineage_sequence_number = previous_number + 1
|
|
|
|
|
else:
|
|
|
|
|
contract.lineage_sequence_number = 0
|
|
|
|
|
|
|
|
|
|
@api.depends('related_contract_ids')
|
|
|
|
|
def _len_related_contracts(self):
|
|
|
|
|
for contract in self:
|
|
|
|
|
_logger.warning("Contract: %s", contract)
|
|
|
|
|
_logger.warning("Contract name: %s", contract.name)
|
|
|
|
|
_logger.warning("Contract rel ids: %s", contract.related_contract_ids)
|
|
|
|
|
if contract.related_contract_ids:
|
|
|
|
|
_logger.warning("Related contract ids: %s", contract.related_contract_ids)
|
|
|
|
|
contract.len_related_contracts = len(contract.related_contract_ids)
|
|
|
|
|
else:
|
|
|
|
|
contract.len_related_contracts = 0
|
|
|
|
|
|
|
|
|
|
def create_child_contract(self):
|
|
|
|
|
self.ensure_one()
|
|
|
|
|
default_vals = {
|
|
|
|
|
'name': "Avenant au contrat " + self.name,
|
|
|
|
|
'employee_id': self.employee_id.id,
|
|
|
|
|
'structure_type_id': self.structure_type_id.id,
|
|
|
|
|
'previous_contract_id': self.id,
|
|
|
|
|
'date_start': self.date_start,
|
|
|
|
|
'date_end': self.date_end,
|
|
|
|
|
'resource_calendar_id': self.resource_calendar_id.id,
|
|
|
|
|
'department_id': self.department_id.id,
|
|
|
|
|
'job_id': self.job_id.id,
|
|
|
|
|
'contract_type_id': self.contract_type_id.id,
|
|
|
|
|
'hr_responsible_id': self.hr_responsible_id.id,
|
|
|
|
|
'wage': self.wage,
|
|
|
|
|
'notes': self.notes,
|
|
|
|
|
'schedule_pay': self.schedule_pay,
|
|
|
|
|
'struct_id': self.struct_id.id,
|
|
|
|
|
}
|
|
|
|
|
new_contract = self.create(default_vals)
|
|
|
|
|
return {
|
|
|
|
|
'type': 'ir.actions.act_window',
|
|
|
|
|
'name': 'Avenant',
|
|
|
|
|
'view_mode': 'form',
|
|
|
|
|
'res_model': 'hr.contract',
|
|
|
|
|
'res_id': new_contract.id,
|
|
|
|
|
'target': 'current',
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
def open_related_contracts(self):
|
|
|
|
|
self.ensure_one()
|
|
|
|
|
|
|
|
|
|
related_contract_ids = [contract.id for contract in self.related_contract_ids]
|
|
|
|
|
|
|
|
|
|
action = {
|
|
|
|
|
'type': 'ir.actions.act_window',
|
|
|
|
|
"views": [[False, "tree"], [False, "form"]],
|
|
|
|
|
'res_model': 'hr.contract',
|
|
|
|
|
'target': 'current',
|
|
|
|
|
'domain': [('id', 'in', related_contract_ids)],
|
|
|
|
|
}
|
|
|
|
|
return action
|