Gestion du domaine principal
[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("cmmi.partner.teammember",
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 action_add_domain(self, cr, uid, ids, context=None):
77         pass
78
79     def action_add_moe(self, cr, uid, ids, context=None):
80         pass
81
82     def action_add_moa(self, cr, uid, ids, context=None):
83         pass
84
85 class ProjetDomaine(osv.Model):
86
87     _name = "cmmi.projet.domaine"
88
89     def _get_name(self, cr, uid, ids, field_name=None, arg=None, context=None):
90         if isinstance(ids, (int, long)):
91             ids = [ids]
92         #return {i: r.domaine_id.name for i, r in
93         #        zip(ids, self.browse(cr, uid, ids, context=context))}
94         return dict([(i, r.domaine_id.name) for i, r in
95                 zip(ids, self.browse(cr, uid, ids, context=context))])
96
97     _columns = {
98         "name": fields.function(_get_name,
99                                 type='char',
100                                 store=True,
101                                 string="Nom du domaine"),
102         "main": fields.boolean(string="Domaine principal ?"),
103         "project_id": fields.many2one("cmmi.projet",
104                                       string="Projet"),
105         "domaine_id": fields.many2one("cmmi.description.domaine",
106                                       string="Domaine"),
107     }
108
109     def onchange_main(self, cr, uid, ids, project, domaine, main, context=None):
110         if not main:
111             return {'value': {'main': True},
112                     'warning': {
113                         'title'   : "Integrity Warning",
114                         'message' : "One of the domains should be the main domain",
115                     }
116                 }
117         ids = self.search(
118             cr,
119             uid,
120             [
121                 ('project_id', '=', project),
122                 ('domaine_id', '!=', domaine),
123             ],
124             context=context,
125         )
126         current_id = self.search(
127             cr,
128             uid,
129             [
130                 ('project_id', '=', project),
131                 ('domaine_id', '=', domaine),
132             ],
133             context=context,
134         )
135         self.write(cr, uid, ids, {'main': False}, context=context)
136         self.write(cr, uid, current_id, {'main': True}, context=context)
137
138         return {'value': {'main': True}}
139
140
141
142 class ProjetMoe(osv.Model):
143     _name = "cmmi.projet.moe"
144
145     def _get_name(self, cr, uid, ids, field_name=None, arg=None, context=None):
146         if isinstance(ids, (int, long)):
147             ids = [ids]
148         return dict([(i, r.moe_id.name) for i, r in
149                 zip(ids, self.browse(cr, uid, ids, context=context))])
150
151     _columns = {
152         "name": fields.function(_get_name,
153                                 type='char',
154                                 store=True, # Permet d'enregistrer le champ.
155                                 string="Nom de la MOE"),
156         "main": fields.boolean(string="MOE principale ?"),
157         "project_id": fields.many2one("cmmi.projet",
158                                       string="Projet"),
159         "moe_id": fields.many2one("cmmi.mo.moe",
160                                       string="MOE"),
161     }
162
163     def onchange_main(self, cr, uid, ids, project, moe, main, context=None):
164         pass
165
166
167 class ProjetMoa(osv.Model):
168     _name = "cmmi.projet.moa"
169
170     def _get_name(self, cr, uid, ids, field_name=None, arg=None, context=None):
171         if isinstance(ids, (int, long)):
172             ids = [ids]
173         return dict([(i, r.moa_id.name) for i, r in
174                 zip(ids, self.browse(cr, uid, ids, context=context))])
175
176     _columns = {
177         "name": fields.function(_get_name,
178                                 type='char',
179                                 store=True,
180                                 string="Nom de la MOA"),
181         "main": fields.boolean(string="MOA principale ?"),
182         "project_id": fields.many2one("cmmi.projet",
183                                       string="Projet"),
184         "moa_id": fields.many2one("cmmi.mo.moa",
185                                       string="MOA"),
186     }
187
188     def onchange_main(self, cr, uid, ids, project, moa, main, context=None):
189         pass
190
191
192 class ProjetPhase(osv.Model):
193     _name = "cmmi.projet.phase"
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.phase_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 phase"),
206         "selectionne": fields.boolean(string="Phase sélectionnée ?"),
207         "projet_id": fields.many2one("cmmi.projet",
208                                      string="Projet"),
209         "phase_id": fields.many2one("cmmi.phase",
210                                     string="Phase"),
211     }