Champs des wizards maintenant obligatoires
[OpenERP/cmmi.git] / wizards / domaine.py
1 #-*- coding: utf8 -*-
2
3 from openerp.osv import osv, fields
4
5 #TODO: A la place de modifier le contexte pour ajouter projet_id,
6 #      Pourrait-on se fier à active_id ou active_ids ?
7
8 #TODO: Il faut que si l'on coche une autre case, le rafraichissement se fasse.
9
10 #TODO: erreur inexpliquée à corriger.
11
12 class ProjetDomaineWizard(osv.TransientModel):
13
14     _name = "cmmi.projet.domain.wizard"
15
16     def default_get(self, cr, uid, fields, context=None):
17         ret = osv.TransientModel.default_get(self, cr, uid, fields, context=context)
18         project_id = context.get('project_id', False)
19         if project_id:
20             ret['project_id'] = project_id
21         return ret
22
23     def _domaines_selection(self, cr, uid, context=None):
24         model_base = self.pool.get("cmmi.description.domaine")
25         model_proj = self.pool.get("cmmi.projet.domaine")
26
27         if context is None or not context.has_key("project_id"):
28             return []
29
30         # recherche des lien entre le projet et les domaines
31         links_ids = model_proj.search(
32             cr,
33             uid,
34             [('project_id', '=', context["project_id"])],
35             context=context,
36         )
37
38         # récupérations des domaines déjà sélectionnés pour le projet
39         excluded_ids = list(set([r['domaine_id'][0] for r in model_proj.read(
40             cr,
41             uid,
42             links_ids,
43             fields=["domaine_id"],
44             context=context
45         )]))
46
47         # recherche des domaines autres que ceux déjà sélectionnés
48         domaines_ids = model_base.search(
49             cr,
50             uid,
51             [('id', 'not in', excluded_ids)],
52             context=context,
53         )
54
55         # renvoi des 2 uplets (id, name)
56         print [(r["id"], r["name"]) for r in model_base.read(
57             cr,
58             uid,
59             domaines_ids,
60             fields=["id", "name"],
61             context=context
62         )]
63         return [(r["id"], r["name"]) for r in model_base.read(
64             cr,
65             uid,
66             domaines_ids,
67             fields=["id", "name"],
68             context=context
69         )]
70
71     def action_add_domain_to_project(self, cr, uid, ids, context=None):
72         # Récupération du modèle utile pour écrire les données
73         model = self.pool.get("cmmi.projet.domaine")
74
75         # Un wizard, donc un seul identifiant
76         id = ids[0]
77
78         # Récupération des informations mises dans l'assistant
79         result = self.read(cr, uid, id, context=context)
80
81         # Si on a coché principal, on vire principal des autres domaines
82         if result["main"]:
83             model.write(
84                 cr,
85                 uid,
86                 model.search(
87                     cr,
88                     uid,
89                     [('project_id', '=', result["project_id"][0])],
90                     context=context,
91                 ),
92                 {'main': False},
93                 context=context,
94             )
95
96         # Création de la donnée à partir de la donnée du magicien
97         model.create(cr, uid, {
98             "main": result["main"],
99             "project_id": result["project_id"][0],
100             "domaine_id": result["domaine_id"],
101             }, context=context)
102
103         # Fermer simplement la fenêtre
104         #return {'type': 'ir.actions.act_window_close'}
105
106         # Renvoi vers la vue du modèle
107         return {
108             "type": 'ir.actions.act_window',
109             "res_model": "cmmi.projet",
110             'view_type': 'form',
111             'view_mode': 'form',
112             'res_id': result["project_id"][0],
113             #'target': 'new', = pop-up
114             'context': context,
115         }
116
117     _columns = {
118         "main": fields.boolean(string="Domaine principal ?"),
119         "project_id": fields.many2one("cmmi.projet",
120                                       string="Projet",
121                                       required=True),
122         "domaine_id": fields.selection(_domaines_selection,
123                                        string="Domaine",
124                                        required=True),
125     }
126