Skip to content
Snippets Groups Projects
project_task.py 3.6 KiB
Newer Older
# Copyright 2020-2022 Le Filament (<http://www.le-filament.com>)
Juliana's avatar
Juliana committed
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

Rémi - Le Filament's avatar
Rémi - Le Filament committed
from odoo import api, fields, models
Juliana's avatar
Juliana committed


class ProjectTask(models.Model):
Rémi - Le Filament's avatar
Rémi - Le Filament committed
    _inherit = "project.task"
Juliana's avatar
Juliana committed

    @api.model
    def default_get(self, fields):
        res = super(ProjectTask, self).default_get(fields)
Rémi - Le Filament's avatar
Rémi - Le Filament committed
        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 = {
Rémi - Le Filament's avatar
Rémi - Le Filament committed
                        "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))
Rémi - Le Filament's avatar
Rémi - Le Filament committed
                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:
Rémi - Le Filament's avatar
Rémi - Le Filament committed
                    res.update({"formateur_id": cout_id.partner_id.id})
Juliana's avatar
Juliana committed
        return res
Juliana's avatar
Juliana committed

    user_id = fields.Many2one(
Rémi - Le Filament's avatar
Rémi - Le Filament committed
        "res.users",
        string="CFD",
        default=lambda self: self.env.uid,
        index=True,
Rémi - Le Filament's avatar
Rémi - Le Filament committed
        track_visibility="always",
    )
    formateur_id = fields.Many2one(
Rémi - Le Filament's avatar
Rémi - Le Filament committed
        "res.partner",
        string="Formateur",
Juliana's avatar
Juliana committed
        domain=[
Rémi - Le Filament's avatar
Rémi - Le Filament committed
            ("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"),
Juliana's avatar
Juliana committed
        ],
Rémi - Le Filament's avatar
Rémi - Le Filament committed
        "Durée (en jours)",
Juliana's avatar
Juliana committed
    )
    duree_hr = fields.Float("Durée (int)", compute="_compute_duree_hr", store=True)
Juliana's avatar
Juliana committed
    participant_ids = fields.One2many(
Rémi - Le Filament's avatar
Rémi - Le Filament committed
        "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")
Rémi - Le Filament's avatar
Rémi - Le Filament committed
    @api.depends("duree_jr")
    @api.multi
    def _compute_duree_hr(self):
        for task in self:
Rémi - Le Filament's avatar
Rémi - Le Filament committed
            if task.duree_jr == "journee":
                task.duree_hr = 1
Rémi - Le Filament's avatar
Rémi - Le Filament committed
            if task.duree_jr == "demi_journee":
                task.duree_hr = 0.5
Rémi - Le Filament's avatar
Rémi - Le Filament committed
    @api.depends("formateur_id", "duree_hr")
Juliana's avatar
Juliana committed
    @api.multi
    def _compute_cout_seance(self):
        for task in self:
            if task.formateur_id:
Rémi - Le Filament's avatar
Rémi - Le Filament committed
                formateur_proj = self.env["adefpat.project.cout"].search(
                    [
                        ("project_id", "=", task.project_id.id),
                        ("partner_id", "=", task.formateur_id.id),
                    ],
                    limit=1,
                )
Juliana's avatar
Juliana committed
                if formateur_proj:
Rémi - Le Filament's avatar
Rémi - Le Filament committed
                    task.cout_seance = formateur_proj.cout_jour * task.duree_hr