Rajout de champs à la classe commune de palier et chantier
[OpenERP/cmmi.git] / projet.py
1 #-*- coding: utf8 -*-
2 '''
3 '''
4
5 from openerp.osv import osv, fields
6 from gtk import TRUE
7
8 class Projet(osv.Model):
9     _name = "projet.projet"
10
11     _columns = {
12         "name": fields.char(string="Title", size=64, required=True),
13         "description": fields.text(string="Description"),
14         "domaines": fields.many2many("projet.domaine",
15                                      "projet_projet_domaine_rel",
16                                      "projets",
17                                      string="Domaines"),
18         "structures": fields.many2many("projet.structure",
19                                        "projet_projet_structure_rel",
20                                        "projets",
21                                        string="Structures"),
22         "team_members": fields.many2many("projet.teammember",
23                                          "projet_projet_teammember_rel",
24                                          "projets",
25                                          string="Team Members"),
26         "modules": fields.one2many("projet.module",
27                                    "projet_id",
28                                    string="Modules"),
29         "chantiers": fields.one2many("projet.chantier",
30                                      "projet_id",
31                                      string="Chantiers"),
32         "paliers": fields.one2many("projet.palier",
33                                    "projet_id",
34                                    string="Paliers"),
35         "phases": fields.one2many("projet.phase",
36                                    "projet_id",
37                                    string="Phases"),
38         "evolutions":fields.one2many("projet.evolution",
39                                      "projet_id",
40                                      string="Evolutions"),
41         "moe_id": fields.many2one("projet.moe", string="MoE", required=True),
42         "moa_id": fields.many2one("projet.moa", string="MoA", required=True),
43     }
44
45
46 class Evolution(osv.Model):
47     _name = "projet.evolution"
48
49     _columns = {
50         "name": fields.char(string="Title", size=64, required=True),
51         "description": fields.text(string="Description"),
52         "charges": fields.one2many("projet.charge",
53                                    "evolution_id",
54                                    string="Charges"),
55         "module_id": fields.many2one("projet.module",
56                                      string="Modules"),
57         "chantier_id": fields.many2one("projet.chantier",
58                                     string="Chantier"),
59         "palier_id": fields.many2one("projet.palier",
60                                      string="Palier"),
61         "phase_id": fields.many2one("projet.phase",
62                                     string="Phase"),
63         "projet_id": fields.many2one("projet.projet",
64                                      string="Projet")
65     }
66
67
68 class Structure(osv.Model):
69     _name = "projet.structure"
70
71     _statuts = [("actif", "Actif"), ("inactif", "Inactif")]
72
73     _columns = {
74         "name": fields.char(string="Title", size=64, required=True),
75         "code": fields.char(string="Code", size=8, required=True),
76         "description": fields.text(string="Description"),
77         "parent_id": fields.many2one("projet.structure", string="Parent_id"),
78         "statut": fields.selection(_statuts, string="Statut"),
79         "projets": fields.many2many("projet.projet",
80                                     "projet_projet_structure_rel",
81                                     "structures",
82                                     string="Projets"),
83     }
84
85
86 class Module(osv.Model):
87     _name = "projet.module"
88
89     _columns = {
90         "name": fields.char(string="Title", size=64, required=True),
91         "description": fields.text(string="Description"),
92         "projet_id": fields.many2one("projet.projet",
93                                      string="Projet",
94                                      required=True),
95         "evolutions": fields.one2many("projet.evolution",
96                                       "module_id",
97                                       string="Evolutions")
98     }
99
100
101 class Domaine(osv.Model):
102     _name = "projet.domaine"
103
104     _statuts = [("actif", "Actif"), ("inactif", "Inactif")]
105
106     _columns = {
107         "name": fields.char(string="Title", size=64, required=True),
108         "code": fields.char(string="Code", size=8),
109         "description": fields.text(string="Description"),
110         "ordre": fields.integer(string="Ordre"),
111         "parent_id": fields.many2one("projet.domaine", string="Parent_id"),
112         "statut": fields.selection(_statuts, string="Statut"),
113         "projets": fields.many2many("projet.projet",
114                                     "projet_projet_structure_rel",
115                                     "domaines",
116                                     string="Projets"),
117     }
118
119
120 class Teammember(osv.Model):
121     _name = "projet.teammember"
122
123     _inherit = "res.partner"
124
125     _columns = {
126         "projets": fields.many2many("projet.projet",
127                                     "projet_projet_teammember_rel",
128                                     "team_members",
129                                     string="Projets"),
130         "charges": fields.one2many("projet.projet",
131                                    "team_members",
132                                    string="Charges"),
133     }
134
135
136 class Phase(osv.Model):
137     _name = "projet.phase"
138
139     _statuts = [("actif", "Actif"), ("inactif", "Inactif")]
140
141
142     _columns = {
143         "name": fields.char(string="Title", size=64, required=True),
144         "description": fields.text(string="Description"),
145         "statut": fields.selection(_statuts, string="Statut"),
146         "projet_id": fields.many2one("projet.projet",
147                                      string="Projet",
148                                      required=True),
149         "charges": fields.one2many("projet.charge",
150                                    "phase_id",
151                                    string="Charges"),
152         "evolutions": fields.one2many("projet.evolution",
153                                       "phase_id",
154                                       string="Evolutions"),
155         "palier_id": fields.many2one("projet.palier",
156                                      string="Palier"),
157     }
158
159 #TODO trouver un nom a cette chose
160 class qqch(osv.Model):
161     _name = "projet.qqch"
162
163     _statuts = [("cree", "Crée"), ("encours", "En cours"),
164                 ("termine", "Terminé"), ("abandonne", "Abandonné"),
165                 ("suspendu", "Suspendu"), ("generique", "Générique")]
166
167     _columns = {
168         "name": fields.char(string="Title", size=64, required=True),
169         "description": fields.text(string="Description"),
170         "commentaire": fields.text(string="Commentaire"),
171         "statut": fields.selection(_statuts, string="Statut"),
172         "version": fields.char(string="Version", size=16),
173         "date_jalon": fields.date(sring="Jalon"),
174         "date_init_deb": fields.date(sring="Date initiale début"),
175         "date_init_fin": fields.date(sring="Date initiale de fin"),
176         "date_plan_deb": fields.date(string="Date plannifiée début"),
177         "date_plan_fin": fields.date(string="Date plannifiée de fin"),
178         "date_reel_deb": fields.date(string="Data réelle début"),
179         "date_reel_fin": fields.date(string="Data réelle fin"),
180     }
181
182     _sql_constraints = [
183         (
184             "date_init_deb_before_date_init_fin",
185             "CHECK(date_init_deb<> date_init_fin)",
186             "The date_init_deb should be previous date_init_fin",
187         ),
188         (
189             "date_plan_deb_before_date_plan_fin",
190             "CHECK(date_plan_deb <> date_plan_fin)",
191             "The date_plan_deb should be previous date_plan_fin",
192         ),
193         (
194             "date_reel_deb_before_date_reel_fin",
195             "CHECK(date_reel_deb<> date_reel_fin)",
196             "The date_reel_deb should be previous date_reel_fin",
197         ),
198     ]
199
200
201 class Chantier(osv.Model):
202     _name = "projet.chantier"
203
204     _inherit = "projet.qqch"
205
206     _columns = {
207         "projet_id": fields.many2one("projet.projet",
208                                      string="Projet",
209                                      required=True),
210         "evolutions": fields.one2many("projet.evolution",
211                                       "chantier_id",
212                                       string="Evolutions"),
213     }
214
215
216 class Palier(osv.Model):
217     _name = "projet.palier"
218
219     _types_palier = [("normal", "Normal"), ("exceptionnel", "Exceptionnel"), ("correctif", "Correctif"), ("autre", "Autre")]
220
221
222     _inherit = "projet.qqch"
223
224     _columns = {
225         "type_palier": fields.selection(_types_palier, string="Type"),
226         "projet_id": fields.many2one("projet.projet",
227                                      string="Projet",
228                                      required=True),
229         "evolutions": fields.one2many("projet.evolution",
230                                       "palier_id",
231                                       string="Evolutions"),
232         "phases": fields.one2many("projet.phase",
233                                   "palier_id",
234                                   string="Phases"),
235     }
236
237
238 class Charge(osv.Model):
239     _name = "projet.charge"
240
241     _columns = {
242         "name": fields.char(string="Title", size=64, required=True),
243         "description": fields.text(string="Description"),
244         "teammember_id": fields.many2one("projet.teammember",
245                                          string="Team Member",
246                                          required=True),
247         "phase_id": fields.many2one("projet.phase",
248                                     string="Phase",
249                                     required=True),
250         "evolution_id": fields.many2one("projet.evolution",
251                                     string="Evolution",
252                                     required=True),
253         "mo_id": fields.many2one("projet.mo",
254                                  string="Mo"),
255     }
256
257 class mo(osv.Model):
258     _name = "projet.mo"
259
260     _choses = [("primaire", "Primaire"),
261                ("secondaire", "Secondaire"),
262                ("generique", "Générique")]
263
264     _columns = {
265         "name": fields.char(string="Title"),
266         "description": fields.text(string="Description"),
267         "chose": fields.selection(_choses, string="Chose", required=True),
268         "charges": fields.one2many("projet.charge",
269                                    "mo_id",
270                                    string="Charges"),
271     }
272
273     _defaults = {
274         "chose": "generique"}
275
276
277 class moe(osv.Model):
278     _name = "projet.moe"
279     _inherit = "projet.mo"
280
281     _columns = {
282         "projets": fields.one2many("projet.projet",
283                                      "moe_id",
284                                      string="Projets"),
285     }
286
287
288 class moa(osv.Model):
289     _name= "projet.moa"
290     _inherit = "projet.mo"
291
292     _columns = {
293         "projets": fields.one2many("projet.projet",
294                                      "moa_id",
295                                      string="Projets"),
296     }