Ajout à la classe cmmi.evolution.phase une méthode commencer
[OpenERP/cmmi.git] / evolution.py
1 #-*- coding: utf8 -*-
2 '''
3 '''
4
5 from openerp.osv import osv, fields
6
7
8 # ================================ EVOLUTION ================================ #
9 class Evolution(osv.Model):
10     _name = "cmmi.evolution"
11
12     _description = "Table de reference des evolutions."
13
14     _domains = {
15         'human': [('is_company', '=', "False")],
16     }
17
18     _priorites = [("incontournable", "Incontournable"),
19                   ("necessaire", "Nécéssaire"),
20                   ("utile", "Utile")]
21
22     _statuts = [("cree", "Crée"), ("encours", "En cours"),
23                 ("termine", "Terminé"), ("abandonne", "Abandonné"),
24                 ("suspendu", "Suspendu")]
25
26     _columns = {
27         "pid": fields.integer(string="PID"),
28         "name": fields.char(string="Title", size=64, required=True),
29         "description": fields.text(string="Description"),
30         "objectif": fields.text(string="Objectif"),
31         "commentaire": fields.text(string="Commentaire"),
32         "keywords": fields.text(string="Mots clés"),
33         "priorite": fields.selection(_priorites, string="Priorité"),
34         "state": fields.selection(_statuts, string="Statut"),
35 #        "charges": fields.one2many("cmmi.evolution.charge", # Supprimé !
36 #                                   "evolution_id",
37 #                                   string="Charges"),
38         # Backrefs
39         "module_id": fields.many2one("cmmi.description.module",
40                                      string="Modules"),
41         "chantier_id": fields.many2one("cmmi.axes.chantier",
42                                        string="Chantier"),
43         "palier_id": fields.many2one("cmmi.axes.palier",
44                                      string="Palier"),
45         "projet_id": fields.many2one("cmmi.projet",
46                                      string="Projet"),
47         "demandeur": fields.many2one("res.partner",
48                                      string="Demandeur",
49                                      domain=_domains['human']),
50     }
51
52     _defaults = {
53         "state": "cree",
54     }
55
56     def action_commencer(self, cr, uid, ids, context=None):
57         if type(ids) == list:
58             if len(ids) != 1:
59                 return # TODO: message d'avertissement
60             ids = ids[0]
61
62         evo = self.read(cr, uid, ids, ['state'], context)
63
64         if evo['state'] != 'cree':
65             return
66         self.write(
67             cr,
68             uid,
69             ids,
70             {'state': 'encours'},
71             context,
72         )
73         return self
74
75     def action_suspendre(self, cr, uid, ids, context=None):
76         if type(ids) == list:
77             if len(ids) != 1:
78                 return # TODO: message d'avertissement
79             ids = ids[0]
80
81         evo = self.read(cr, uid, ids, ['state'], context)
82         if evo['state'] != 'encours':
83             return
84         self.write(
85             cr,
86             uid,
87             ids,
88             {'state': 'suspendu'},
89             context,
90         )
91         return self
92
93     def action_terminer(self, cr, uid, ids, context=None):
94         if type(ids) == list:
95             if len(ids) != 1:
96                 return # TODO: message d'avertissement
97             ids = ids[0]
98
99         evo = self.read(cr, uid, ids, ['state'], context)
100         if evo['state'] != 'encours':
101             return
102         self.write(
103             cr,
104             uid,
105             ids,
106             {'state': 'termine'},
107             context,
108         )
109         return self
110
111     def action_abandonner(self, cr, uid, ids, context=None):
112         if type(ids) == list:
113             if len(ids) != 1:
114                 return # TODO: message d'avertissement
115             ids = ids[0]
116
117         evo = self.read(cr, uid, ids, ['state'], context)
118
119         if not ('encours', 'cree').__contains__(evo['state']):
120             return
121         self.write(
122             cr,
123             uid,
124             ids,
125             {'state': 'abandonne'},
126             context,
127         )
128         return self
129
130     def action_reprendre(self, cr, uid, ids, context=None):
131         if type(ids) == list:
132             if len(ids) != 1:
133                 return # TODO: message d'avertissement
134             ids = ids[0]
135
136         evo = self.read(cr, uid, ids, ['state'], context)
137
138         if evo['state'] != 'suspendu':
139             return
140         self.write(
141             cr,
142             uid,
143             ids,
144             {'state': 'encours'},
145             context,
146         )
147         return self
148
149
150 # =========================== EVOLUTION PHASE =============================== #
151 class Phase(osv.Model):
152     _name = "cmmi.evolution.phase"
153
154     _description = "Phase d'une evolution."
155
156     def _get_name(self, cr, uid, ids, field_name=None, arg=None, context=None):
157         if isinstance(ids, (int, long)):
158             ids = [ids]
159         return dict([(i, r.phase_id.name) for i, r in
160                 zip(ids, self.browse(cr, uid, ids, context=context))])
161
162
163     _columns = {
164         "name": fields.function(_get_name,
165                                 type='char',
166                                 store=True,
167                                 string="Nom de la phase"),
168         "description": fields.text(string="Description"),
169         "charge_init": fields.integer(string="Charge initiale"),
170         "charge_plan": fields.integer(string="Charge plannifiée"),
171         "phase_id": fields.many2one("cmmi.axes.palier.phase",
172                                     string="Phase"),
173         "evolution_id": fields.many2one("cmmi.evolution",
174                                         string="Evolution"),
175     }
176
177     def create(self, cr, uid, vals, context=None):
178         # TODO: gérer la création d'une phase d'évolution.
179         # Vérifier les valeurs contenues dans vals et les modifier / rajouter si nécessaire selon les cas suivants
180
181         # Si description est vide, alors par défaut, recopie de la description de l'evolution et de la phase (concaténés avec un retour à la ligne entre les deux).
182         # Si commentaire est vide, alors par défaut, recopie du commentaire de ?
183         # Si version est vide, alors par dégaut, recopie de la version de ?
184 #        phase_model = self.pool.get("cmmi.axes.palier.phase")
185 #        evolution_model = self.pool.get("cmmi.evolution")
186 #
187 #        phase = phase_model.read(cr, vals["phase_id"], fields=None,context=None)
188 #        evolution = evolution_model.read(cr, vals["evolution_id"], fields=None,context=None)
189
190 #        if vals["description"] == "":
191 #            vals["description"] = "" + evolution["description"] + "\n" + phase["description"]
192
193 #        if vals["commentaire"] == "" # cmmi.evolution.phase n'a pas de commentaire
194 #            vals["commentaire"] = evolution["commentaire"]
195
196 #        if vals["version"] == "" # cmmi.evolution.phase n'a pas de version
197 #            vals["version"] = phase["version"]
198
199         return osv.Model.create(self, cr, uid, vals, context=context)
200
201     def commencer(self, cr, uid, ids, context=None):
202         if type(ids) == list:
203             if len(ids) != 1:
204                 return
205             ids = ids[0]
206
207         phase = self.read(cr, uid, ids, ['charge_plan'], context)
208
209         self.write(
210             cr,
211             uid,
212             ids, {
213                 'charge_init' : phase['charge_plan'],
214             },
215             context)
216         return self
217
218
219 # =========================== EVOLUTION CHARGE ============================== #
220 class Charge(osv.Model):
221     _name = "cmmi.evolution.charge"
222
223     _description = "Charge d'une evolution."
224
225     _columns = {
226         "name": fields.char(string="Title", size=64, required=True),
227         "description": fields.text(string="Description"),
228         "evolution_id": fields.many2one("cmmi.evolution",
229                                         string="Palier"),
230         "phase_id": fields.many2one("cmmi.evolution.phase",
231                                     string="Phase de l'évolution",
232                                     required=True),
233         "teammember_id": fields.many2one("res.partner", # TODO: Vers l'association teammember MO plutôt que MO.
234                                          string="Team Member",
235                                          required=True),
236     }