Skip to content
Extraits de code Groupes Projets
project_task.py 3,45 ko
Newer Older
  • Learn to ignore specific revisions
  • # Copyright 2020-2022 Le Filament (<http://www.le-filament.com>)
    
    Juliana's avatar
    Juliana a validé
    # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
    
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
    from odoo import api, fields, models
    
    Juliana's avatar
    Juliana a validé
    
    
    
    class ProjectTask(models.Model):
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
        _inherit = "project.task"
    
    Juliana's avatar
    Juliana a validé
    
        @api.model
    
        def _default_formateur_id(self):
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
            if "default_project_id" in self.env.context:
    
                cout_id = self.env["adefpat.project.cout"].search(
                    [
                        ("project_id", "=", self.env.context["default_project_id"]),
                        ("partner_id", "!=", False),
                    ],
                    limit=1,
                )
                return cout_id.partner_id.id
    
        @api.model
        def _default_participant_ids(self):
            if "default_project_id" in self.env.context:
                project_id = self.env["project.project"].browse(
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
                    self.env.context["default_project_id"]
                )
    
                if project_id.exists().membre_ids:
                    participant_ids = project_id.porteurs_projets_ids.mapped(lambda p: (0, 0, {
                        "porteur_id": p.porteur_id.id,
                        "lastname": p.lastname,
                        "firstname": p.firstname,
                        "commune": p.commune,
                        "mobile": p.mobile,
                        "fixe": p.fixe,
                        "email": p.email,
                        "eligible": p.eligible,
                    }))
                    self.update({"participant_ids": participant_ids})
                    return participant_ids
    
    Juliana's avatar
    Juliana a validé
    
    
        user_id = fields.Many2one(
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
            "res.users",
            string="CFD",
    
            default=lambda self: self.env.uid,
            index=True,
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
            track_visibility="always",
        )
    
        formateur_id = fields.Many2one(
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
            "res.partner",
            string="Formateur",
    
    Juliana's avatar
    Juliana a validé
            domain=[
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
                ("active", "=", True),
                ("is_company", "=", False),
                ("is_consultant_form", "=", True),
                "|",
                ("reference", "=", "reference"),
                ("reference", "=", "prereference"),
            ],
    
            ondelete="restrict",
    
            default=_default_formateur_id,
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
        )
        duree_jr = fields.Selection(
            [
                ("demi_journee", "Demi journée"),
                ("journee", "Journée"),
    
    Juliana's avatar
    Juliana a validé
            ],
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
            "Durée (en jours)",
    
    Juliana's avatar
    Juliana a validé
        )
    
        duree_hr = fields.Float("Durée (int)", compute="_compute_duree_hr", store=True)
    
    Juliana's avatar
    Juliana a validé
        participant_ids = fields.One2many(
    
            comodel_name="res.partner.porteur.project",
            inverse_name="task_id",
            string="Participants",
            default=_default_participant_ids,
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
        )
        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 a validé
        @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 a validé
                if task.duree_jr == "journee":
    
                    task.duree_hr = 1
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
                if task.duree_jr == "demi_journee":
                    task.duree_hr = 0.5
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
        @api.depends("formateur_id", "duree_hr")
    
    Juliana's avatar
    Juliana a validé
        @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 a validé
                    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 a validé
                    if formateur_proj:
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
                        task.cout_seance = formateur_proj.cout_jour * task.duree_hr