gn_odoo/gn_career/models/gn_career.py
2024-03-08 16:16:56 +01:00

70 lines
3.1 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models, api
from odoo.exceptions import ValidationError
import logging
_logger = logging.getLogger(__name__)
class GnCareer(models.Model):
_name = "gn_career.career"
_description = "Analyse du poste"
_order = 'start_date'
name = fields.Char("Nom", compute='_compute_name')
start_date = fields.Date('From', required=True, default=lambda self: fields.Date.today())
contract_id = fields.Many2one('hr.contract', string="Contrat ou Avenant associé")
status = fields.Selection([
('draft', 'Brouillon'),
('wait_manager_approval', "En attente de validation du manager"),
('wait_director_approval', "En attente de validation par la direction"),
('wait_employee_approval', "En attente de signature par le salarié"),
('ready', 'Prête'),
('active', 'Active'),
], string="Statut", default='draft')
mission_ids = fields.Many2many('gn_career.mission', 'career_ids', compute='_compute_mission_ids', string="Missions effectuées")
mission_detail_ids = fields.One2many('gn_career.mission.detail', 'career_id', string="Détail de la mission")
total_percentage = fields.Float(compute='_compute_total_percentage', string="Total Percentage")
@api.depends('mission_detail_ids.percentage')
def _compute_total_percentage(self):
for record in self:
record.total_percentage = sum(mission.percentage for mission in record.mission_detail_ids)
@api.constrains('mission_detail_ids', 'total_percentage')
def _check_total_percentage(self):
for record in self:
if record.total_percentage != 100:
raise ValidationError("Le pourcentage total des missions au sein de la fiche de poste doit atteindre 100%. Veuillez ajuster la répartition de la mission.")
@api.depends('mission_detail_ids.mission_id')
def _compute_mission_ids(self):
for record in self:
mission_ids_set = set()
for mission_detail in record.mission_detail_ids:
mission_ids_set.add(mission_detail.mission_id.id)
record.mission_ids = [(6, 0, list(mission_ids_set))]
@api.depends('start_date')
def _compute_name(self):
for record in self:
if record.start_date:
# Use an f-string for formatting
record.name = f"Fiche de poste du {record.start_date}"
else:
# Provide a default or handle the case where start_date isn't set
record.name = "Fiche de poste sans date"
class GnCareerMissionDetail(models.Model):
_name = 'gn_career.mission.detail'
_description = "Détails d'une mission pour une fiche de poste"
name = fields.Char(related='mission_id.name')
career_id = fields.Many2one('gn_career.career', string="Fiche de poste")
mission_id = fields.Many2one('gn_career.mission', string="Mission")
percentage = fields.Integer("Temps occupé par la mission en %", default="100")
task_ids = fields.Many2many('gn_career.task', 'mission_detail', string="Tâches incluses dans la mission")