[IMP] labelling of read field on res.log
[odoo/odoo.git] / bin / addons / base / res / res_log.py
1 # -*- coding: utf-8 -*-
2 ##############################################################################
3 #
4 #    OpenERP, Open Source Management Solution
5 #    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
6 #
7 #    This program is free software: you can redistribute it and/or modify
8 #    it under the terms of the GNU Affero General Public License as
9 #    published by the Free Software Foundation, either version 3 of the
10 #    License, or (at your option) any later version.
11 #
12 #    This program is distributed in the hope that it will be useful,
13 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 #    GNU Affero General Public License for more details.
16 #
17 #    You should have received a copy of the GNU Affero General Public License
18 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 #
20 ##############################################################################
21
22 from osv import fields, osv
23 import tools
24 import time
25
26 class res_log(osv.osv_memory):
27     _name = 'res.log'
28     _columns = {
29         'name': fields.char('Message', size=128, help='The logging message.', required=True),
30         'user_id': fields.many2one('res.users','User', required=True),
31         'res_model': fields.char('Object', size=128),
32         'context': fields.char('Context', size=250),
33         'res_id': fields.integer('Object ID'),
34         'secondary': fields.boolean('Secondary Log', help='Do not display this log if it belongs to the same object the user is working on'),
35         'create_date': fields.datetime('Created Date', readonly=True),
36         'read': fields.boolean('Read', help="If this log item has been read, get() should not send it to the client")
37     }
38     _defaults = {
39         'user_id': lambda self,cr,uid,ctx: uid,
40         'create_date': fields.datetime.now,
41         'context': "{}",
42         'read': False
43     }
44     _order='create_date desc'
45
46     # TODO: do not return secondary log if same object than in the model (but unlink it)
47     def get(self, cr, uid, context=None):
48         unread_log_ids = self.search(cr, uid, [('user_id','=',uid),
49                                                ('read', '=', False)],
50                                      context=context)
51         unread_logs = self.read(cr, uid, unread_log_ids,
52                                 ['name','res_model','res_id'],
53                                 context=context)
54         self.write(cr, uid, unread_log_ids, {'read': True}, context=context)
55         return unread_logs
56
57     def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False):
58         res = []
59         log_ids = super(res_log, self).search(cr, uid, args, offset, limit, order, context, count)
60         logs = {}
61         for log in self.browse(cr, uid, log_ids, context=context):
62             res_dict = logs.get(log.res_model, {})
63             res_dict.update({log.res_id: log.id})
64             logs.update({log.res_model: res_dict})
65         res = map(lambda x: x.values(), logs.values())
66         return tools.flatten(res)
67 res_log()