Merge branch '16-contract-dev' into 16-career-dev

16-career-dev
Florian Roger 7 months ago
commit 3dd73e43a6

@ -11,9 +11,12 @@ Module de gestion des avenants aux contrats
## Changelog
- v16.0.0.0.1 (2024/03/02):
- Création du module
- Création du module
- v16.0.0.0.2 (2024/03/10):
- Bouton de création d'un avenant
- Vues des contrats précédents
## Issues
- [] Needs a View for Previous contract (cf issue #9)
- [] Needs an Action to Create a New Contract linked with a Previous one (cf issue #10)
- [x] Needs an Action to Create a New Contract linked with a Previous one (cf issue #10)

@ -1,6 +1,6 @@
{
"name": "Gestion des Contrats: Typologie et Gestion des Avenants",
"version": "16.0.0.0.1",
"version": "16.0.0.0.2",
"category": "HR",
"summary": "Permet de relier entre eux les contrats",
"author": "Le Garage Numérique",
@ -12,6 +12,7 @@
],
"data": [
"data/gn_contract.xml",
"views/gn_contract.xml",
],
"license": "LGPL-3",
}

@ -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

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="gn_contract.hr_contract_avenant" model="ir.ui.view">
<field name="name">hr.contract.form.avenant</field>
<field name="model">hr.contract</field>
<field name="priority" eval="30"/>
<field name="inherit_id" ref="hr_contract.hr_contract_view_form"/>
<field name="arch" type="xml">
<data>
<xpath expr="//div[@name='button_box']" position="inside">
<button name="open_related_contracts" type='object' class="oe_stat_button" icon="fa-money" groups="hr_contract.group_hr_contract_manager">
<field name="len_related_contracts" widget="statinfo" string="Contrats liés"/>
</button>
</xpath>
</data>
<data>
<header>
<button name="create_child_contract" type="object" string="Créer un avenant" class="oe_highlight"/>
</header>
</data>
</field>
</record>
</odoo>
Loading…
Cancel
Save