Correction du bug avec les wizards
[OpenERP/cmmi.git] / projet.py
1 #-*- coding: utf8 -*-
2 '''
3 '''
4
5 from openerp.osv import osv, fields
6
7
8 class Projet(osv.Model):
9
10     _name = "cmmi.projet"
11
12     def _get_main_domain(self, cr, uid, ids, field_name=None, arg=None, context=None):
13         if type(ids) in (int, float):
14             ids = [ids]
15
16         projects = self.browse(cr, uid, ids, context=context)
17
18         result = {}
19
20         for project in projects:
21             for domain in project.domains:
22                 if domain.main:
23                     result[project.id] = domain.name
24                     break
25             else:
26                 result[project.id] = "Any domain is selected as main domain yet"
27
28         return result
29
30
31     _columns = {
32         "name": fields.char(string="Title", size=64, required=True),
33         "description": fields.text(string="Description"),
34         "domains": fields.one2many("cmmi.projet.domaine",
35                                     "project_id",
36                                     string="Domaines"),
37         "team_members": fields.many2many("res.partner",
38                                          "cmmi_projet_teammember_rel",
39                                          "projet_id",
40                                          "partner_id",
41                                          string="Team Members"),
42         "modules": fields.one2many("cmmi.description.module",
43                                    "projet_id",
44                                    string="Modules"),
45         "chantiers": fields.one2many("cmmi.axes.chantier",
46                                      "projet_id",
47                                      string="Chantiers"),
48         "paliers": fields.one2many("cmmi.axes.palier",
49                                    "projet_id",
50                                    string="Paliers"),
51         "phases": fields.one2many("cmmi.projet.phase",
52                                   "projet_id",
53                                   string="Phases"),
54         "evolutions": fields.one2many("cmmi.evolution",
55                                       "projet_id",
56                                       string="Evolutions"),
57         "moe_ids": fields.one2many("cmmi.projet.moe",
58                                    "project_id",
59                                    string="MOEs"),
60         "moa_ids": fields.one2many("cmmi.projet.moa",
61                                    "project_id",
62                                    string="MOAs"),
63         "moe_id": fields.one2many("cmmi.projet.moe",
64                                   "project_id",
65                                   string="MOE principale",
66                                   domaine=[('main', '=', True)]),
67         "moa_id": fields.one2many("cmmi.projet.moa",
68                                   "project_id",
69                                   string="MOA principale",
70                                   domaine=[('main', '=', True)]),
71         "main_domain": fields.function(_get_main_domain,
72                                        type="string",
73                                        string="Domaine principal"),
74     }
75
76     def create(self, cr, uid, vals, context=None):
77         project_id = osv.Model.create(self, cr, uid, vals, context=context)
78
79         # Récupération des ids de toutes les phases
80         phase_model = self.pool.get("cmmi.phase")
81         phases_ids = phase_model.search(cr, uid, [])
82
83         # Création des relations
84         projet_phase_model = self.pool.get("cmmi.projet.phase")
85         for phase_id in phases_ids:
86             projet_phase_model.create(
87                 cr,
88                 uid,
89                 {
90                     'projet_id': project_id,
91                     'phase_id': phase_id,
92                     'selectionne': False,
93                 }
94             )
95
96         return project_id
97
98
99     def action_add_domain(self, cr, uid, ids, context=None):
100         pass
101
102     def action_add_moe(self, cr, uid, ids, context=None):
103         pass
104
105     def action_add_moa(self, cr, uid, ids, context=None):
106         pass
107
108 class ProjetDomaine(osv.Model):
109
110     _name = "cmmi.projet.domaine"
111
112     def _get_name(self, cr, uid, ids, field_name=None, arg=None, context=None):
113         if isinstance(ids, (int, long)):
114             ids = [ids]
115         #return {i: r.domaine_id.name for i, r in
116         #        zip(ids, self.browse(cr, uid, ids, context=context))}
117         return dict([(i, r.domaine_id.name) for i, r in
118                 zip(ids, self.browse(cr, uid, ids, context=context))])
119
120     _columns = {
121         "name": fields.function(_get_name,
122                                 type='char',
123                                 store=True,
124                                 string="Nom du domaine"),
125         "main": fields.boolean(string="Domaine principal ?"),
126         "project_id": fields.many2one("cmmi.projet",
127                                       string="Projet"),
128         "domaine_id": fields.many2one("cmmi.description.domaine",
129                                       string="Domaine"),
130     }
131
132     def onchange_main(self, cr, uid, ids, project, domaine, main, context=None):
133         if not main:
134             return {'value': {'main': True},
135                     'warning': {
136                         'title'   : "Integrity Warning",
137                         'message' : "One of the domains should be the main domain",
138                     }
139                 }
140         ids = self.search(
141             cr,
142             uid,
143             [
144                 ('project_id', '=', project),
145                 ('domaine_id', '!=', domaine),
146             ],
147             context=context,
148         )
149         current_id = self.search(
150             cr,
151             uid,
152             [
153                 ('project_id', '=', project),
154                 ('domaine_id', '=', domaine),
155             ],
156             context=context,
157         )
158         self.write(cr, uid, ids, {'main': False}, context=context)
159         self.write(cr, uid, current_id, {'main': True}, context=context)
160
161         return {'value': {'main': True}}
162
163
164
165 class ProjetMoe(osv.Model):
166     _name = "cmmi.projet.moe"
167
168     def _get_name(self, cr, uid, ids, field_name=None, arg=None, context=None):
169         if isinstance(ids, (int, long)):
170             ids = [ids]
171         return dict([(i, r.moe_id.name) for i, r in
172                 zip(ids, self.browse(cr, uid, ids, context=context))])
173
174     _columns = {
175         "name": fields.function(_get_name,
176                                 type='char',
177                                 store=True, # Permet d'enregistrer le champ.
178                                 string="Nom de la MOE"),
179         "main": fields.boolean(string="MOE principale ?"),
180         "project_id": fields.many2one("cmmi.projet",
181                                       string="Projet",
182                                       required=True),
183         "moe_id": fields.many2one("cmmi.mo.moe",
184                                   string="MOE",
185                                   required=True),
186     }
187
188     def onchange_main(self, cr, uid, ids, project, moe, main, context=None):
189         pass
190
191
192 class ProjetMoa(osv.Model):
193     _name = "cmmi.projet.moa"
194
195     def _get_name(self, cr, uid, ids, field_name=None, arg=None, context=None):
196         if isinstance(ids, (int, long)):
197             ids = [ids]
198         return dict([(i, r.moa_id.name) for i, r in
199                 zip(ids, self.browse(cr, uid, ids, context=context))])
200
201     _columns = {
202         "name": fields.function(_get_name,
203                                 type='char',
204                                 store=True,
205                                 string="Nom de la MOA"),
206         "main": fields.boolean(string="MOA principale ?"),
207         "project_id": fields.many2one("cmmi.projet",
208                                       string="Projet",
209                                       required=True),
210         "moa_id": fields.many2one("cmmi.mo.moa",
211                                   string="MOA",
212                                   required=True),
213     }
214
215     def onchange_main(self, cr, uid, ids, project, moa, main, context=None):
216         pass
217
218
219 class ProjetPhase(osv.Model):
220     _name = "cmmi.projet.phase"
221
222     def _get_name(self, cr, uid, ids, field_name=None, arg=None, context=None):
223         if isinstance(ids, (int, long)):
224             ids = [ids]
225         return dict([(i, r.phase_id.name) for i, r in
226                 zip(ids, self.browse(cr, uid, ids, context=context))])
227
228     _columns = {
229         "name": fields.function(_get_name,
230                                 type='char',
231                                 store=True,
232                                 string="Nom de la phase"),
233         "selectionne": fields.boolean(string="Phase sélectionnée ?"),
234         "projet_id": fields.many2one("cmmi.projet",
235                                      string="Projet",
236                                      required=True),
237         "phase_id": fields.many2one("cmmi.phase",
238                                     string="Phase",
239                                     required=True),
240     }