# -*- coding: utf-8 -*- from datetime import datetime, date import time from odoo import tools from odoo import models, fields, api, osv class FilamentProjet(models.Model): _name = 'project.project' _inherit = 'project.project' lf_total_budget = fields.Float('Budget Projet',) lf_heures_budget = fields.Float('Budget Heures', compute='_budget_heures') lf_tarif_jour = fields.Float('Tarif Jour',) lf_taux_horaire = fields.Float('Taux Horaire', compute='_taux_horaire') lf_heures_projet = fields.Float('Allouées (h)', compute='_total_heures') lf_heures_passees = fields.Float('Heures passées', compute='_total_heures_passees') lf_heures_restantes = fields.Float('Restant (h)', compute='_total_heures_restantes') lf_heures_planifiees = fields.Float('Planifiées (h)', compute='_total_heures_planifiees') lf_couts_annexes = fields.Float('Coûts Annexes', compute='_couts_annexes') lf_couts_estimes = fields.Float('Coûts Estimes') lf_commentaire = fields.Text('Commentaires') @api.one def _taux_horaire(self): self.lf_taux_horaire = self.lf_tarif_jour / 8 @api.one def _total_heures_passees(self): res = 0.0 account = self.analytic_account_id.id ############## Calcul couts annexes ################ self.env.cr.execute("select sum(unit_amount) from account_analytic_line where account_id=%s;", (account, ) ) heures_passees = self.env.cr.fetchone()[0] if heures_passees: self.lf_heures_passees = heures_passees else: self.lf_heures_passees = 0.0 @api.one def _total_heures_planifiees(self): res = 0.0 for record in self.task_ids: res = res + record.planned_hours self.lf_heures_planifiees = res @api.one def _couts_annexes(self): account = self.analytic_account_id.id ############## Calcul couts annexes ################ ## self.env.cr.execute("select sum(amount) from account_analytic_line where amount<0 and is_timesheet=FALSE and account_id=%s;", (account, ) ) self.env.cr.execute("select sum(amount) from account_analytic_line where amount<0 and account_id=%s;", (account, ) ) couts_annexes = self.env.cr.fetchone()[0] if couts_annexes: self.lf_couts_annexes = couts_annexes * (-1.0) else: self.lf_couts_annexes = 0.0 @api.one @api.depends('lf_total_budget','lf_couts_annexes') def _budget_heures(self): self.lf_heures_budget = self.lf_total_budget - self.lf_couts_estimes @api.one def _total_heures(self): if (self.lf_tarif_jour != 0.0): self.lf_heures_projet = (self.lf_heures_budget / self.lf_tarif_jour) * 8 else: self.lf_heures_projet = 0.0 @api.one def _total_heures_restantes(self): self.lf_heures_restantes = self.lf_heures_projet - self.lf_heures_passees def open_project(self): return { 'type': 'ir.actions.act_window', 'name': 'Projet' + self.name, 'view_mode': 'kanban', 'res_model': 'project.project', 'res_id': self.id, 'views': [(False, 'kanban')], }