X-Git-Url: http://git.inspyration.org/?a=blobdiff_plain;f=axes.py;h=23437c10ac01ed3d30ca5838086366ab423fd932;hb=a9e473b2fbdf6f7792fba455d444975b2886c838;hp=be4b6ae58bb0ff2c0e5d2f6e5b0114f068ee3225;hpb=c046013cc4809c1bfab6c27296c38d5fe2e26fee;p=OpenERP%2Fcmmi.git diff --git a/axes.py b/axes.py index be4b6ae..23437c1 100644 --- a/axes.py +++ b/axes.py @@ -5,7 +5,6 @@ from openerp.osv import osv, fields from datetime import date, timedelta, datetime - # ================================ MESURABLE ================================ # class Mesurable(osv.Model): _name = "cmmi.axes.mesurable" @@ -16,6 +15,7 @@ class Mesurable(osv.Model): ("termine", "Terminé"), ("abandonne", "Abandonné"), ("suspendu", "Suspendu"), ("generique", "Générique")] + def _nb_jours_init(self, cr, uid, ids, field, arg, context=None): result = {} for m in self.browse(cr, uid, ids, context=context): @@ -27,6 +27,31 @@ class Mesurable(osv.Model): datetime.strptime(m.date_init_fin, "%Y-%m-%d").date()) return result + + def _nb_jours_plan(self, cr, uid, ids, field, arg, context=None): + result = {} + for m in self.browse(cr, uid, ids, context=context): + if not m.date_plan_deb or not m.date_plan_fin: + result[m.id] = 0 + continue + result[m.id] = Mesurable._nb_jours_ouvre_entre_2_dates( + datetime.strptime(m.date_plan_deb, "%Y-%m-%d").date(), + datetime.strptime(m.date_plan_fin, "%Y-%m-%d").date()) + return result + + + def _nb_jours_reel(self, cr, uid, ids, field, arg, context=None): + result = {} + for m in self.browse(cr, uid, ids, context=context): + if not m.date_reel_deb or not m.date_reel_fin: + result[m.id] = 0 + continue + result[m.id] = Mesurable._nb_jours_ouvre_entre_2_dates( + datetime.strptime(m.date_reel_deb, "%Y-%m-%d").date(), + datetime.strptime(m.date_reel_fin, "%Y-%m-%d").date()) + return result + + _columns = { "name": fields.char(string="Title", size=64, required=True), "description": fields.text(string="Description"), @@ -40,9 +65,15 @@ class Mesurable(osv.Model): "date_plan_fin": fields.date(string="Plan fin"), "date_reel_deb": fields.date(string="Réel début"), "date_reel_fin": fields.date(string="Réel fin"), - "nb_jours_initial": fields.function(_nb_jours_init, - type="integer", - string="Nombre de jour"), + "nb_jours_init": fields.function(_nb_jours_init, + type="integer", + string="Nombre de jours initials"), + "nb_jours_plan": fields.function(_nb_jours_plan, + type="integer", + string="Nombre de jours planifiés"), + "nb_jours_reel": fields.function(_nb_jours_reel, + type="integer", + string="Nombre de jours réels"), } _defaults = { @@ -68,7 +99,7 @@ class Mesurable(osv.Model): ] - def commencer(self, cr, uid, ids, context=None): + def action_commencer(self, cr, uid, ids, context=None): if type(ids) == list: if len(ids) != 1: return @@ -77,8 +108,7 @@ class Mesurable(osv.Model): palier = self.read(cr, uid, ids, ['date_plan_deb', 'date_plan_fin', 'state'], context) if palier['state'] != 'cree': - return # TODO: Message d'erreur : ne fonctionne pas pour les boutons - # Trouver alternative + return self.write( cr, @@ -92,16 +122,15 @@ class Mesurable(osv.Model): return self - def suspendre(self, cr, uid, ids, context=None): + def action_suspendre(self, cr, uid, ids, context=None): if type(ids) == list: if len(ids) != 1: - return + return # TODO: message d'avertissement ids = ids[0] - mesurable = self.read(cr, uid, ids, ['state'], context, context) + mesurable = self.read(cr, uid, ids, ['state'], context) if mesurable['state'] != 'encours': - return # TODO: Message d'erreur : ne fonctionne pas pour les boutons - # Trouver alternative + return self.write( cr, uid, @@ -111,17 +140,15 @@ class Mesurable(osv.Model): ) return self - - def terminer(self, cr, uid, ids, context=None): + def action_terminer(self, cr, uid, ids, context=None): if type(ids) == list: if len(ids) != 1: - return + return # TODO: message d'avertissement ids = ids[0] - mesurable = self.read(cr, uid, ids, ['state'], context, context) + mesurable = self.read(cr, uid, ids, ['state'], context) if mesurable['state'] != 'encours': - return # TODO: Message d'erreur : ne fonctionne pas pour les boutons - # Trouver alternative + return self.write( cr, uid, @@ -131,17 +158,15 @@ class Mesurable(osv.Model): ) return self - - def abandonner(self, cr, uid, ids, context=None): + def action_abandonner(self, cr, uid, ids, context=None): if type(ids) == list: if len(ids) != 1: - return + return # TODO: message d'avertissement ids = ids[0] - mesurable = self.read(cr, uid, ids, ['state'], context, context) + mesurable = self.read(cr, uid, ids, ['state'], context) if not ('encours', 'cree').__contains__(mesurable['state']): - return # TODO: Message d'erreur : ne fonctionne pas pour les boutons - # Trouver alternative + return self.write( cr, uid, @@ -151,17 +176,15 @@ class Mesurable(osv.Model): ) return self - - def reprendre(self, cr, uid, ids, context=None): + def action_reprendre(self, cr, uid, ids, context=None): if type(ids) == list: if len(ids) != 1: - return + return # TODO: message d'avertissement ids = ids[0] - mesurable = self.read(cr, uid, ids, ['state'], context, context) + mesurable = self.read(cr, uid, ids, ['state'], context) if mesurable['state'] != 'suspendu': - return # TODO: Message d'erreur : ne fonctionne pas pour les boutons - # Trouver alternative + return self.write( cr, uid, @@ -254,6 +277,21 @@ class Palier(osv.Model): _types_palier = [("normal", "Normal"), ("exceptionnel", "Exceptionnel"), ("correctif", "Correctif"), ("autre", "Autre")] + + def _get_charge_init(self, cr, uid, ids, field, arg, context=None): + result = {} + for palier in self.browse(cr, uid, ids, context=context): + result[palier.id] = sum([e.charge_init for e in palier.evolutions]) + return result + + + def _get_charge_plan(self, cr, uid, ids, field, arg, context=None): + result = {} + for palier in self.browse(cr, uid, ids, context=context): + result[palier.id] = sum([e.charge_plan for e in palier.evolutions]) + return result + + _columns = { "type_palier": fields.selection(_types_palier, string="Type"), "projet_id": fields.many2one("cmmi.projet", @@ -265,6 +303,12 @@ class Palier(osv.Model): "phases": fields.one2many("cmmi.axes.palier.phase", "palier_id", string="Phases"), + "charge_init": fields.function(_get_charge_init, + type="integer", + string="Charge initiale"), + "charge_plan": fields.function(_get_charge_plan, + type="integer", + string="Charge plannifiée"), } _defaults = { @@ -314,6 +358,20 @@ class PalierPhase(osv.Model): zip(ids, self.browse(cr, uid, ids, context=context))]) + def _get_charge_init(self, cr, uid, ids, field, arg, context=None): + result = {} + for pp in self.browse(cr, uid, ids, context=context): + result[pp.id] = sum([p.charge_init for p in pp.phases]) + return result + + + def _get_charge_plan(self, cr, uid, ids, field, arg, context=None): + result = {} + for pp in self.browse(cr, uid, ids, context=context): + result[pp.id] = sum([p.charge_plan for p in pp.phases]) + return result + + _columns = { "name": fields.function(_get_name, type='char', @@ -323,10 +381,19 @@ class PalierPhase(osv.Model): string="Phase du projet"), "palier_id": fields.many2one("cmmi.axes.palier", string="Palier"), + "charge_init": fields.function(_get_charge_init, + type="integer", + string="Charge initiale"), + "charge_plan": fields.function(_get_charge_plan, + type="integer", + string="Charge plannifiée"), # backrefs "charges": fields.one2many("cmmi.evolution.charge", "phase_id", string="Charges"), + "phases": fields.one2many("cmmi.evolution.phase", + "phase_id", + string="Phases"), # "evolutions": fields.one2many("cmmi.evolution", #Supprimé ! # "phase_id", # string="Evolutions"), @@ -343,7 +410,6 @@ class PalierPhase(osv.Model): return osv.Model.create(self, cr, uid, vals, context=context) - # ================================ CHANTIER ================================= # class Chantier(osv.Model): _name = "cmmi.axes.chantier" @@ -352,6 +418,21 @@ class Chantier(osv.Model): _inherit = "cmmi.axes.mesurable" + + def _get_charge_init(self, cr, uid, ids, field, arg, context=None): + result = {} + for chantier in self.browse(cr, uid, ids, context=context): + result[chantier.id] = sum([e.charge_init for e in chantier.evolutions]) + return result + + + def _get_charge_plan(self, cr, uid, ids, field, arg, context=None): + result = {} + for chantier in self.browse(cr, uid, ids, context=context): + result[chantier.id] = sum([e.charge_plan for e in chantier.evolutions]) + return result + + _columns = { "projet_id": fields.many2one("cmmi.projet", string="Projet", @@ -364,4 +445,10 @@ class Chantier(osv.Model): "evolutions": fields.one2many("cmmi.evolution", "chantier_id", string="Evolutions"), + "charge_init": fields.function(_get_charge_init, + type="integer", + string="Charge initiale"), + "charge_plan": fields.function(_get_charge_plan, + type="integer", + string="Charge plannifiée"), }