[IMP] create mail subtype module
bzr revid: fka@tinyerp.com-20120813115903-wm6n9arze1u0900k
This commit is contained in:
commit
a6850805df
|
@ -278,6 +278,9 @@ class crm_lead(base_stage, osv.osv):
|
|||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
obj_id = super(crm_lead, self).create(cr, uid, vals, context)
|
||||
obj = self.browse(cr, uid, obj_id, context)
|
||||
if obj.user_id:
|
||||
self.message_subscribe(cr, uid, [obj_id], [obj.user_id.id], context = context)
|
||||
self.create_send_note(cr, uid, [obj_id], context=context)
|
||||
return obj_id
|
||||
|
||||
|
@ -859,14 +862,6 @@ class crm_lead(base_stage, osv.osv):
|
|||
# OpenChatter methods and notifications
|
||||
# ----------------------------------------
|
||||
|
||||
def message_get_subscribers(self, cr, uid, ids, context=None):
|
||||
""" Override to add the salesman. """
|
||||
user_ids = super(crm_lead, self).message_get_subscribers(cr, uid, ids, context=context)
|
||||
for obj in self.browse(cr, uid, ids, context=context):
|
||||
if obj.user_id and not obj.user_id.id in user_ids:
|
||||
user_ids.append(obj.user_id.id)
|
||||
return user_ids
|
||||
|
||||
def stage_set_send_note(self, cr, uid, ids, stage_id, context=None):
|
||||
""" Override of the (void) default notification method. """
|
||||
stage_name = self.pool.get('crm.case.stage').name_get(cr, uid, [stage_id], context=context)[0][1]
|
||||
|
|
|
@ -156,5 +156,38 @@
|
|||
<field name="object_id" search="[('model','=','crm.lead')]" model="ir.model"/>
|
||||
</record>
|
||||
|
||||
<!-- mail subtype -->
|
||||
<record id="mail_subtype_lead_new" model="mail.message.subtype">
|
||||
<field name="name">new</field>
|
||||
<field name="model_ids" eval="[(6, 0, [ref('crm.model_crm_lead')])]"/>
|
||||
<field name="default" eval="False"/>
|
||||
</record>
|
||||
<record id="mail_subtype_lead_won" model="mail.message.subtype">
|
||||
<field name="name">won</field>
|
||||
<field name="model_ids" eval="[(6, 0, [ref('crm.model_crm_lead')])]"/>
|
||||
</record>
|
||||
<record id="mail_subtype_lead_lost" model="mail.message.subtype">
|
||||
<field name="name">lost</field>
|
||||
<field name="model_ids" eval="[(6, 0, [ref('crm.model_crm_lead')])]"/>
|
||||
</record>
|
||||
<record id="mail_subtype_lead_stage_change" model="mail.message.subtype">
|
||||
<field name="name">stage change</field>
|
||||
<field name="model_ids" eval="[(6, 0, [ref('crm.model_crm_lead')])]"/>
|
||||
<field name="default" eval="False"/>
|
||||
</record>
|
||||
<record id="mail_subtype_lead_other" model="mail.message.subtype">
|
||||
<field name="name">other</field>
|
||||
<field name="model_ids" eval="[(6, 0, [ref('crm.model_crm_lead')])]"/>
|
||||
<field name="default" eval="False"/>
|
||||
</record>
|
||||
<record id="mail_subtype_lead_email" model="mail.message.subtype">
|
||||
<field name="name">email</field>
|
||||
<field name="model_ids" eval="[(6, 0, [ref('crm.model_crm_lead')])]"/>
|
||||
</record>
|
||||
<record id="mail_subtype_lead_comment" model="mail.message.subtype">
|
||||
<field name="name">comment</field>
|
||||
<field name="model_ids" eval="[(6, 0, [ref('crm.model_crm_lead')])]"/>
|
||||
<field name="default" eval="False"/>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
import mail_message_subtype
|
||||
import mail_alias
|
||||
import mail_message
|
||||
import mail_thread
|
||||
|
|
|
@ -62,6 +62,7 @@ The main features of the module are:
|
|||
'depends': ['base', 'base_tools', 'base_setup'],
|
||||
'data': [
|
||||
'wizard/mail_compose_message_view.xml',
|
||||
'mail_message_subtype.xml',
|
||||
'res_config_view.xml',
|
||||
'mail_message_view.xml',
|
||||
'mail_subscription_view.xml',
|
||||
|
|
|
@ -230,6 +230,7 @@ class mail_message(osv.Model):
|
|||
select=True, ondelete='set null',
|
||||
help="Parent message, used for displaying as threads with hierarchy"),
|
||||
'child_ids': fields.one2many('mail.message', 'parent_id', 'Child Messages'),
|
||||
'subtype_id': fields.many2one('mail.message.subtype', 'Subtype', select = True),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
@ -274,7 +275,7 @@ class mail_message(osv.Model):
|
|||
def create(self, cr, uid, values, context=None):
|
||||
self.check(cr, uid, [], mode='create', context=context, values=values)
|
||||
return super(mail_message, self).create(cr, uid, values, context)
|
||||
|
||||
|
||||
def read(self, cr, uid, ids, fields_to_read=None, context=None, load='_classic_read'):
|
||||
self.check(cr, uid, ids, 'read', context=context)
|
||||
return super(mail_message, self).read(cr, uid, ids, fields_to_read, context, load)
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2009-today OpenERP SA (<http://www.openerp.com>)
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import osv
|
||||
from osv import fields
|
||||
|
||||
class mail_message_subtype(osv.osv):
|
||||
|
||||
_name = 'mail.message.subtype'
|
||||
_description = 'mail_message_subtype'
|
||||
_columns = {
|
||||
'name': fields.char(' Message Subtype ', size = 128,
|
||||
required = True, select = 1,
|
||||
help = 'Subtype Of Message'),
|
||||
'model_ids': fields.many2many('ir.model',
|
||||
'mail_message_subtyp_message_rel',
|
||||
'message_subtype_id', 'model_id', 'Model',
|
||||
help = "link some subtypes to several models, for projet/task"),
|
||||
'default': fields.boolean('Default', help = "When subscribing to the document, users will receive by default messages related to this subtype unless they uncheck this subtype"),
|
||||
}
|
||||
_defaults = {
|
||||
'default': True,
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<!--
|
||||
SUBTYPES
|
||||
!-->
|
||||
|
||||
<record model="ir.ui.view" id="view_message_subtype_tree">
|
||||
<field name="name">mail.message.subtype.tree</field>
|
||||
<field name="model">mail.message.subtype</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="priority">10</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Subtype">
|
||||
<field name="name"/>
|
||||
<field name="model_ids" invisible="1"/>
|
||||
<field name="default"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_mail_message_subtype_form">
|
||||
<field name="name">mail.message.subtype.form</field>
|
||||
<field name="model">mail.message.subtype</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Email message" version="7.0">
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="default"/>
|
||||
</group>
|
||||
</group>
|
||||
<separator string="Models"/>
|
||||
<field name="model_ids" widget="many2many"/>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_view_message_subtype" model="ir.actions.act_window">
|
||||
<field name="name">Subtypes</field>
|
||||
<field name="res_model">mail.message.subtype</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
<menuitem name="Subtypes" id="menu_message_subtype" parent="base.menu_email"
|
||||
action="action_view_message_subtype"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -150,6 +150,7 @@
|
|||
<group>
|
||||
<field name="auto_delete"/>
|
||||
<field name="type"/>
|
||||
<field name="subtype_id"/>
|
||||
<field name="content_subtype"/>
|
||||
<field name="state" colspan="2"/>
|
||||
<field name="mail_server_id"/>
|
||||
|
|
|
@ -42,6 +42,10 @@ class mail_subscription(osv.osv):
|
|||
help='Id of the followed resource'),
|
||||
'user_id': fields.many2one('res.users', string='Related User',
|
||||
ondelete='cascade', required=True, select=1),
|
||||
'subtype_ids': fields.many2many('mail.message.subtype',
|
||||
'mail_message_subtyp_rel',
|
||||
'subscription_id', 'subtype_id', 'Subtype',
|
||||
help = "linking some subscription to several subtype for projet/task"),
|
||||
}
|
||||
|
||||
class mail_notification(osv.osv):
|
||||
|
|
|
@ -20,6 +20,27 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_mail_subscription_form">
|
||||
<field name="name">mail.subscription.form</field>
|
||||
<field name="model">mail.subscription</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Subscription Form" version="7.0">
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="res_model"/>
|
||||
<field name="user_id"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="res_id"/>
|
||||
<field name="subtype_ids" widget="many2many_tags"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<!--
|
||||
NOTIFICATION
|
||||
!-->
|
||||
|
|
|
@ -229,7 +229,7 @@ class mail_thread(osv.Model):
|
|||
return ret_dict
|
||||
|
||||
def message_append(self, cr, uid, threads, subject, body_text=None, body_html=None,
|
||||
type='email', email_date=None, parent_id=False,
|
||||
type = 'email', subtype_id = False, email_date = None, parent_id = False,
|
||||
content_subtype='plain', state=None,
|
||||
partner_ids=None, email_from=False, email_to=False,
|
||||
email_cc=None, email_bcc=None, reply_to=None,
|
||||
|
@ -386,6 +386,7 @@ class mail_thread(osv.Model):
|
|||
body_html= msg_dict.get('body_html'),
|
||||
parent_id = msg_dict.get('parent_id', False),
|
||||
type = msg_dict.get('type', 'email'),
|
||||
subtype_id = msg_dict.get('subtype_id', False),
|
||||
content_subtype = msg_dict.get('content_subtype'),
|
||||
state = msg_dict.get('state'),
|
||||
partner_ids = msg_dict.get('partner_ids'),
|
||||
|
@ -865,7 +866,7 @@ class mail_thread(osv.Model):
|
|||
now deprecated res.log.")
|
||||
self.message_append_note(cr, uid, [id], 'res.log', message, context=context)
|
||||
|
||||
def message_append_note(self, cr, uid, ids, subject=None, body=None, parent_id=False,
|
||||
def message_append_note(self, cr, uid, ids, subject=None, subtype_id=None, body=None, parent_id=False,
|
||||
type='notification', content_subtype='html', context=None):
|
||||
if content_subtype == 'html':
|
||||
body_html = body
|
||||
|
@ -874,7 +875,7 @@ class mail_thread(osv.Model):
|
|||
body_html = body
|
||||
body_text = body
|
||||
return self.message_append(cr, uid, ids, subject, body_html, body_text,
|
||||
type, parent_id=parent_id,
|
||||
type, subtype_id = subtype_id, parent_id = parent_id,
|
||||
content_subtype=content_subtype, context=context)
|
||||
|
||||
#------------------------------------------------------
|
||||
|
@ -913,7 +914,7 @@ class mail_thread(osv.Model):
|
|||
return True
|
||||
return False
|
||||
|
||||
def message_subscribe(self, cr, uid, ids, user_ids = None, context=None):
|
||||
def message_subscribe(self, cr, uid, ids, user_ids = None, subtype_ids = None, context = None):
|
||||
""" Subscribe the user (or user_ids) to the current document.
|
||||
|
||||
:param user_ids: a list of user_ids; if not set, subscribe
|
||||
|
@ -925,8 +926,13 @@ class mail_thread(osv.Model):
|
|||
for id in ids:
|
||||
already_subscribed_user_ids = self.message_get_subscribers(cr, uid, [id], context=context)
|
||||
for user_id in to_subscribe_uids:
|
||||
if user_id in already_subscribed_user_ids: continue
|
||||
create_ids.append(subscription_obj.create(cr, uid, {'res_model': self._name, 'res_id': id, 'user_id': user_id}, context=context))
|
||||
res = {'res_model': self._name, 'res_id': id, 'user_id': user_id}
|
||||
res['subtype_ids'] = [0, 0, {'res_model': self._name, 'default': True}]
|
||||
if user_id in already_subscribed_user_ids:
|
||||
if subtype_ids:
|
||||
res['subtype_ids'] = [(6, 0, subtype_ids)]
|
||||
else: continue
|
||||
create_ids.append(subscription_obj.create(cr, uid, res, context = context))
|
||||
return create_ids
|
||||
|
||||
def message_unsubscribe(self, cr, uid, ids, user_ids = None, context=None):
|
||||
|
@ -1066,10 +1072,25 @@ class mail_thread(osv.Model):
|
|||
for obj in self.browse(cr, uid, ids, context=context):
|
||||
if not obj.message_state and hasattr(obj, 'user_id') and obj.user_id and obj.user_id.id == uid:
|
||||
self.message_mark_as_read(cr, uid, [obj.id], context=context)
|
||||
|
||||
|
||||
def message_mark_as_read(self, cr, uid, ids, context=None):
|
||||
""" Set as read. """
|
||||
return self.write(cr, uid, ids, {'message_state': True}, context=context)
|
||||
|
||||
|
||||
def message_subscribe_udpate_subtypes(self, cr, uid, ids, user_id, subtype_ids):
|
||||
subscription_obj = self.pool.get('mail.subscription')
|
||||
subscription_ids = subscription_obj.search(cr, uid, [('res_model', '=', self._name), ('res_id', 'in', ids)])
|
||||
return subscription_obj.write(cr, uid, subscription_ids, {'subtype_ids': [6, 0 , subtype_ids]}, context = context) #overright or add new one
|
||||
|
||||
def message_subscription_remove_subtype(self, cr, uid, ids, user_id, subtype_id):
|
||||
subscription_obj = self.pool.get('mail.subscription')
|
||||
subscription_ids = subscription_obj.search(cr, uid, [('res_model', '=', self._name), ('res_id', 'in', ids)])
|
||||
return subscription_obj.write(cr, uid, subscription_ids, {'subtype_ids': [3, subtype_id]}, context = context) # remove link
|
||||
|
||||
def message_subscription_remove_subtype_name(self, cr, uid, ids, user_id, subtype_name):
|
||||
subtype_obj = self.pool.get('mail.message.subtype')
|
||||
subtype_ids = subtype_obj.search(cr, uid, [('name', '=', subtype_name), ('model_ids', '=', self._name)])
|
||||
if not subtype_ids:
|
||||
return False
|
||||
self.message_subscription_remove_subtype(cr, uid, ids, user_id, subtype_ids)
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
Loading…
Reference in New Issue