_rec_name = 'subject'
_columns = {
'subject': fields.char('Subject', size=512, required=True),
- 'model': fields.char('Related Document model', size=128, select=1), # was rfeadonly
- 'res_id': fields.integer('Related Document ID', select=1), # was rfeadonly
+ 'model': fields.char('Related Document model', size=128, select=1), # was readonly
+ 'res_id': fields.integer('Related Document ID', select=1), # was readonly
'date': fields.datetime('Date'),
'email_from': fields.char('From', size=128, help='Message sender, taken from user preferences. If empty, this is not a mail but a message.'),
'email_to': fields.char('To', size=256, help='Message recipients'),
}
#------------------------------------------------------
- # Note specific api
+ # Generic api
#------------------------------------------------------
def create(self, cr, uid, vals, context=None):
- return super(mail_message, self).create(cr, uid, vals, context)
+ msg_id = super(mail_message, self).create(cr, uid, vals, context)
+ # push the message to suscribed users
+ subscription_obj = self.pool.get('mail.subscription')
+ notification_obj = self.pool.get('mail.notification')
+ sub_ids = subscription_obj.search(cr, uid, ['&', ('res_model', '=', vals['model']), ('user_id', '=', uid)], context=context)
+ subs = subscription_obj.browse(cr, uid, sub_ids, context=context)
+ for sub in subs:
+ notification_obj.create(cr, uid, {'user_id': sub.user_id, 'message_id': msg_id}, context=context)
+ return msg_id
+
+ #------------------------------------------------------
+ # Note specific api
+ #------------------------------------------------------
def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False):
if not context or not context.has_key('filter_search'):
A subscription can be of following:
- res_model: model of the followed objects
- res_id: ID of resource OR
- - res_domain: a domain filtering followed objects
+ - res_domain: a domain filtering followed objects - currently removed
"""
_name = 'mail.subscription'
_columns = {
'res_model': fields.char('Related Document model', size=128, select=1),
'res_id': fields.integer('Related Document ID', select=1),
- 'res_domain': fields.char('res_domain', size=256),
+ #'res_domain': fields.char('res_domain', size=256),
'user_id': fields.integer('Related User ID', select=1),
}
}
_defaults = {
+ 'read': False,
}
mail_notification()
<openerp>
<data>
+ <!--
+ SUBSCRIPTION
+ !-->
+
+ <record model="ir.ui.view" id="view_subscription_tree">
+ <field name="name">mail.subscription.tree</field>
+ <field name="model">mail.subscription</field>
+ <field name="type">tree</field>
+ <field name="sequence">10</field>
+ <field name="arch" type="xml">
+ <tree string="Subscription">
+ <field name="user_id"/>
+ <field name="res_model"/>
+ <field name="res_id"/>
+ </tree>
+ </field>
+ </record>
+
+ <!--
+ NOTIFICATION
+ !-->
+
+ <record model="ir.ui.view" id="view_notification_tree">
+ <field name="name">mail.notification.tree</field>
+ <field name="model">mail.notification</field>
+ <field name="type">tree</field>
+ <field name="sequence">10</field>
+ <field name="arch" type="xml">
+ <tree string="Subscription">
+ <field name="user_id"/>
+ <field name="message_id"/>
+ <field name="read"/>
+ </tree>
+ </field>
+ </record>
+
<record id="action_view_subscriptions" model="ir.actions.act_window">
<field name="name">Subscriptions</field>
<field name="res_model">mail.subscription</field>
def message_get_subscribers(self, cr, uid, ids, context=None):
subscription_obj = self.pool.get('mail.subscription')
for id in ids:
- sub_ids = subscription_obj.search(cr, uid, ['res_model': self._name, 'res_id': id], context=context)
+ sub_ids = subscription_obj.search(cr, uid, ['&', ('res_model', '=', self._name), ('res_id', '=', id)], context=context)
subs = subscription_obj.browse(cr, uid, sub_ids, context=context)
return subs
subscriber_id = uid # TODO
sub_ids = []
for id in ids:
- sub_ids += subscription_obj.search(cr, uid, ['res_model': self._name, 'res_id': id, 'user_id': subscriber_id], context=context)
+ sub_ids += subscription_obj.search(cr, uid, ['&', '&', ('res_model', '=', self._name), ('res_id', '=', id), ('user_id', '=', subscriber_id)], context=context)
subscription_obj.unlink(cr, uid, ids, context=context)
return True