# Copyright 2020 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from odoo import api, fields, models class ProjectTask(models.Model): _inherit = "project.task" @api.model def default_get(self, fields): res = super(ProjectTask, self).default_get(fields) if "default_project_id" in self.env.context: default_project_id = self.env["project.project"].browse( self.env.context["default_project_id"] ) if default_project_id.exists().porteurs_projets_ids: participant_ids = [] for porteur_project in default_project_id.porteurs_projets_ids: vals = { "porteur_id": porteur_project.porteur_id.id, "lastname": porteur_project.lastname, "firstname": porteur_project.firstname, "commune": porteur_project.commune, "mobile": porteur_project.mobile, "fixe": porteur_project.fixe, "email": porteur_project.email, "eligible": porteur_project.eligible, } participant_ids.append((0, 0, vals)) res.update({"participant_ids": participant_ids}) cout_id = self.env["adefpat.project.cout"].search( [ ("project_id", "=", default_project_id.id), ("partner_id", "!=", False), ], limit=1, ) if cout_id: res.update({"formateur_id": cout_id.partner_id.id}) return res user_id = fields.Many2one( "res.users", string="CFD", default=lambda self: self.env.uid, index=True, track_visibility="always", ) formateur_id = fields.Many2one( "res.partner", string="Formateur", domain=[ ("active", "=", True), ("is_company", "=", False), ("is_consultant_form", "=", True), "|", ("reference", "=", "reference"), ("reference", "=", "prereference"), ], on_delete="restrict", ) duree_jr = fields.Selection( [ ("demi_journee", "Demi journée"), ("journee", "Journée"), ], "Durée (en jours)", ) duree_hr = fields.Float("Durée en jours", compute="_compute_duree_hr", store=True) participant_ids = fields.One2many( "res.partner.porteur.project", "task_id", string="Participants" ) cout_seance = fields.Float("Coût de la séance", compute="_compute_cout_seance") date_account = fields.Date("Date de la facture") @api.depends("duree_jr") @api.multi def _compute_duree_hr(self): for task in self: if task.duree_jr == "journee": task.duree_hr = 1 if task.duree_jr == "demi_journee": task.duree_hr = 0.5 @api.depends("formateur_id", "duree_hr") @api.multi def _compute_cout_seance(self): for task in self: if task.formateur_id: formateur_proj = self.env["adefpat.project.cout"].search( [ ("project_id", "=", task.project_id.id), ("partner_id", "=", task.formateur_id.id), ], limit=1, ) if formateur_proj: task.cout_seance = formateur_proj.cout_jour * task.duree_hr