a2e82e4d5812160b496b043cec80a4184e622545
[OpenERP/todolist.git] / todolist.py
1 #-*- coding: utf8 -*-
2
3 from openerp.osv import osv, fields
4 from reportlab.lib.xmllib import _Name
5
6 class TodoList(osv.Model):
7     _name = "todolist.todolist"
8
9     _status = [('draft', 'Brouillon'), ('pending', 'En cours'), ('done', 'Termine')]
10
11     _columns = {
12         "name": fields.char(string='Title', size=64, required=True),
13         "description": fields.text(string="Description"),
14         "date_cible": fields.date(string='Cible'),
15         "date_jalon": fields.date(string='Jalon'),
16         "manday": fields.integer(string="Jours/homme"),
17         "valide": fields.boolean(string='Validé'),
18         "assigned": fields.many2one("res.partner", string="Assigné à", domain=[("is_company", "=", False)]),
19         "state": fields.selection(_status, string="State", select=True),
20         "actions": fields.one2many('todolist.action', 'todolist_id', string="Action"),
21         "themes_id": fields.many2many('todolist.theme', 'todolist_todolist_theme_rel', 'todolist_id', 'theme_id', string='Thèmes', domain=[("actif", "=", True)]),
22
23     }
24
25     _defaults = {
26         "state": "draft",
27     }
28
29     _sql_constraints = [
30         (
31             'nom_de_la_contrainte',
32             'CHECK(name <> description)',
33             'Le nom doit être différent de la description',
34         ),
35         (
36             'cible_and_jalon_constraint',
37             'CHECK(date_cible < date_jalon)',
38             'La cible doit être inferieur au jalon',
39         ),
40     ]
41
42     def vider_description(self, cr, uid, ids, context=None):
43         self.write(cr, uid, ids, {'description': ''}, context=context)
44         return self
45
46     def action_start(self, cr, uid, ids, context=None):
47         self.write(cr, uid, ids, {'state': 'pending'}, context=context)
48         return self
49
50
51     def action_stop(self, cr, uid, ids, context=None):
52         self.write(cr, uid, ids, {'state': 'done'}, context=context)
53         return self
54
55
56     def action_restart(self, cr, uid, ids, context=None):
57         self.write(cr, uid, ids, {'state': 'draft'}, context=context)
58         return self
59
60
61
62 # ------------------- class Action ------------------- #
63
64 class Action(osv.Model):
65     _name = "todolist.action"
66
67     _priorities = [('utile', 'Utile'), ('necessary', 'Nécéssaire'), ('indispensable', 'Indispensable')]
68
69     _states = [('draft', 'Brouillon'), ('proposal', 'Proposition'), ('valid', 'Validé'), ('begin', 'Débute'), ('done', 'Terminé')]
70
71     _columns = {
72         "name": fields.char(string='Title', size=64, required=True),
73         "description": fields.text(string='Description'),
74         "deadline": fields.date(string='Jalon'),
75         "planned": fields.date(string='Planifié'),
76         "manday": fields.integer(string='Jours/homme'),
77         "priority": fields.selection(_priorities, string='Priorite', select=True),
78         "state": fields.selection(_states, string='State', select=True),
79         "todolist_id": fields.many2one('todolist.todolist', string="TodoList", required=True),
80     }
81
82     _defaults = {
83         "state": "draft"
84     }
85
86     def action_draft(self, cr, uid, ids, context=None):
87         self.write(cr, uid, ids, {'state': 'draft'}, context=context)
88         return self
89
90     def action_propose(self, cr, uid, ids, context=None):
91         self.write(cr, uid, ids, {'state': 'proposal'}, context=context)
92         return self
93
94     def action_validate(self, cr, uid, ids, context=None):
95         self.write(cr, uid, ids, {'state': 'valid'}, context=context)
96         return self
97
98     def action_begin(self, cr, uid, ids, context=None):
99         self.write(cr, uid, ids, {'state': 'begin'}, context=context)
100         return self
101
102     def action_done(self, cr, uid, ids, context=None):
103         self.write(cr, uid, ids, {'state': 'done'}, context=context)
104         return self
105
106
107 # ------------------- class Theme ------------------- #
108
109 class Theme(osv.Model):
110     _name = "todolist.theme"
111
112     _states = [('Actif', 'Actif'), ('Inactif', 'Inactif')]
113
114     _columns = {
115         "name": fields.char(string='Title', size=64, required=True),
116         "description": fields.text(string='Description'),
117         "actif": fields.selection(_states, string='Actif', select=True),
118         "todolist_ids": fields.many2many('todolist.todolist', 'todolist_todolist_theme_rel', 'theme_id', 'todolist_id', string='TODO Listes'),
119     }
120
121     _defaults = {
122         'actif': 'actif'
123     }