Skip to content
Snippets Groups Projects
project_task.py 3.06 KiB
Newer Older
Juliana's avatar
Juliana committed
# 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 fields, models, api


class ProjectTask(models.Model):
Juliana's avatar
Juliana committed
    _inherit = 'project.task'

    @api.model
    def default_get(self, fields):
        res = super(ProjectTask, self).default_get(fields)
Juliana's avatar
Juliana 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 = {
                        '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,
                    }
                    participant_ids.append((0, 0, vals))
                res.update({'participant_ids': participant_ids})
Juliana's avatar
Juliana committed
        return res
Juliana's avatar
Juliana committed

    user_id = fields.Many2one(
        'res.users',
        string='CFD',
        default=lambda self: self.env.uid,
        index=True,
        track_visibility='always')
    formateur_id = fields.Many2one(
Juliana's avatar
Juliana committed
        '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([
Juliana's avatar
Juliana committed
            ('demi_journee', "Demi journée"),
            ('journee', "Journée"),
        ],
        "Durée (en jours)")
Juliana's avatar
Juliana committed
    duree_hr = fields.Float(
        "Durée en heures",
        compute='_compute_duree_hr',
        store=True
    )
Juliana's avatar
Juliana committed
    participant_ids = fields.One2many(
        'res.partner.porteur.project',
        'task_id',
        string="Participants")
Juliana's avatar
Juliana committed
    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':
Juliana's avatar
Juliana committed
                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)
Juliana's avatar
Juliana committed
                ], limit=1)
Juliana's avatar
Juliana committed
                if formateur_proj:
                    task.cout_seance = formateur_proj.cout_jour * task.duree_hr