diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py index f23b61df5ea..00b964a2039 100644 --- a/addons/crm/__openerp__.py +++ b/addons/crm/__openerp__.py @@ -83,8 +83,8 @@ Create dashboard for CRM that includes: 'wizard/crm_opportunity_to_phonecall_view.xml', 'wizard/crm_partner_to_opportunity_view.xml', - 'wizard/crm_forward_to_partner_view.xml', 'wizard/crm_send_email_view.xml', + 'wizard/crm_forward_to_partner_view.xml', 'wizard/crm_custom_create_menu_view.xml', 'crm_view.xml', diff --git a/addons/crm/wizard/crm_forward_to_partner.py b/addons/crm/wizard/crm_forward_to_partner.py index 1a6e1fb505b..def6ddf1812 100644 --- a/addons/crm/wizard/crm_forward_to_partner.py +++ b/addons/crm/wizard/crm_forward_to_partner.py @@ -23,7 +23,7 @@ import base64 import itertools import time - +import re from osv import osv, fields import tools from tools.translate import _ @@ -31,6 +31,7 @@ from tools.translate import _ class crm_lead_forward_to_partner(osv.osv_memory): """Forwards lead history""" _name = 'crm.lead.forward.to.partner' + _inherit = "crm.send.mail" _columns = { 'name': fields.selection([('user', 'User'), ('partner', 'Partner'), \ @@ -38,19 +39,12 @@ class crm_lead_forward_to_partner(osv.osv_memory): 'user_id': fields.many2one('res.users', "User"), 'partner_id' : fields.many2one('res.partner', 'Partner'), 'address_id' : fields.many2one('res.partner.address', 'Address'), - 'email_from' : fields.char('From', required=True, size=128), - 'email_to' : fields.char('To', required=True, size=128), - 'subject' : fields.char('Subject', required=True, size=128), - 'message' : fields.text('Message', required=True), - 'history': fields.selection([('latest', 'Latest email'), ('whole', 'Whole Story'), ('info', 'Case Information')], 'Send history', required=True), - 'add_cc': fields.boolean('Add as CC', required=False, help="Check this box if you want this address to be added in the CC list"\ - " for this case, in order to receive all future conversations"), + 'history': fields.selection([('info', 'Case Information'), ('latest', 'Latest email'), ('whole', 'Whole Story')], 'Send history', required=True), } _defaults = { 'name' : 'email', - 'history': 'info', - 'add_cc': True, + 'history': 'latest', 'email_from': lambda self, cr, uid, *a: self.pool.get('res.users')._get_email_from(cr, uid, uid)[uid] } @@ -117,7 +111,7 @@ class crm_lead_forward_to_partner(osv.osv_memory): res_id = context.get('active_id') msg_val = self._get_case_history(cr, uid, history_type, res_id, context=context) if msg_val: - res = {'value': {'message' : '\n\n' + msg_val}} + res = {'value': {'body' : '\n\n' + msg_val}} return res def _get_case_history(self, cr, uid, history_type, res_id, context=None): @@ -125,22 +119,23 @@ class crm_lead_forward_to_partner(osv.osv_memory): return msg_val = '' + case_info = self.get_lead_details(cr, uid, res_id, context=context) model_pool = self.pool.get('crm.lead') + if history_type == 'info': - msg_val = self.get_lead_details(cr, uid, res_id, context=context) + msg_val = case_info elif history_type == 'whole': log_ids = model_pool.browse(cr, uid, res_id, context=context).message_ids log_ids = [x.id for x in log_ids] - if not log_ids: - raise osv.except_osv('Warning!', 'There is no history to send') - msg_val = self.get_whole_history(cr, uid, log_ids, context=context) + msg_val = case_info + '\n\n' + self.get_whole_history(cr, uid, log_ids, context=context) elif history_type == 'latest': log_ids = model_pool.browse(cr, uid, res_id, context=context).message_ids if not log_ids: - raise osv.except_osv('Warning!', 'There is no history to send') - msg_val = self.get_latest_history(cr, uid, log_ids[0].id, context=context) + msg_val = case_info + else: + msg_val = case_info + '\n\n' + self.get_latest_history(cr, uid, log_ids[0].id, context=context) return msg_val @@ -186,13 +181,14 @@ class crm_lead_forward_to_partner(osv.osv_memory): if not res_id or not model: return {} + email_re = r'([^ ,<@]+@[^> ,]+)' this = self.browse(cr, uid, ids[0], context=context) case_pool = self.pool.get(model) case = case_pool.browse(cr, uid, res_id, context=context) emails = [this.email_to] - body = case_pool.format_body(this.message) + body = case_pool.format_body(this.body) email_from = this.email_from or False # extract attachements from case and emails according to mode @@ -226,13 +222,19 @@ class crm_lead_forward_to_partner(osv.osv_memory): else: raise osv.except_osv(_('Error!'), _('Unable to send mail. Please check SMTP is configured properly.')) - if this.add_cc and (not case.email_cc or not this.email_to in case.email_cc): - case_pool.write(cr, uid, case.id, {'email_cc' : case.email_cc and case.email_cc + ', ' + this.email_to or this.email_to}) + email_cc = re.findall(email_re, case.email_cc or '') + new_cc = '' + for to in this.email_to.split(','): + email_to = re.findall(email_re, to) + email_to = email_to and email_to[0] or '' + if email_to not in email_cc: + new_cc += ', ' + to + case_pool.write(cr, uid, case.id, {'email_cc' : case.email_cc and case.email_cc + new_cc}) return {} def get_lead_details(self, cr, uid, lead_id, context=None): - message = [] + body = [] lead_proxy = self.pool.get('crm.lead') lead = lead_proxy.browse(cr, uid, lead_id, context=context) if not lead.type or lead.type == 'lead': @@ -258,10 +260,10 @@ class crm_lead_forward_to_partner(osv.osv_memory): else: value = lead[field_name] - message.append("%s: %s" % (field_definition.string, value or '')) + body.append("%s: %s" % (field_definition.string, value or '')) elif lead.type == 'opportunity': pa = lead.partner_address_id - message = [ + body = [ "Partner: %s" % (lead.partner_id.name_get()[0][1]), "Contact: %s" % (pa.name or ''), "Title: %s" % (pa.title or ''), @@ -277,7 +279,7 @@ class crm_lead_forward_to_partner(osv.osv_memory): "Fax: %s" % (pa.fax or ''), "Mobile: %s" % (pa.mobile or ''), ] - return "\n".join(message + ['---']) + return "\n".join(body + ['---']) def default_get(self, cr, uid, fields, context=None): """ @@ -295,10 +297,10 @@ class crm_lead_forward_to_partner(osv.osv_memory): lead_proxy = self.pool.get('crm.lead') lead = lead_proxy.browse(cr, uid, active_id, context=context) - message = self._get_case_history(cr, uid, defaults.get('history', 'latest'), lead.id, context=context) + body = self._get_case_history(cr, uid, defaults.get('history', 'latest'), lead.id, context=context) defaults.update({ 'subject' : '%s: %s' % (_('Fwd'), lead.name), - 'message' : message, + 'body' : body, }) return defaults diff --git a/addons/crm/wizard/crm_forward_to_partner_view.xml b/addons/crm/wizard/crm_forward_to_partner_view.xml index e8a60cea01f..d2705c8f0db 100644 --- a/addons/crm/wizard/crm_forward_to_partner_view.xml +++ b/addons/crm/wizard/crm_forward_to_partner_view.xml @@ -5,41 +5,45 @@ crm_lead_forward_to_partner crm.lead.forward.to.partner form + -
- - - - - - - + + + + + + + + + + + + - - - - - - - - - - - + + Forward to Partner crm.lead.forward.to.partner form form + new diff --git a/addons/crm/wizard/crm_send_email.py b/addons/crm/wizard/crm_send_email.py index bc2b5357c15..02acee1c1d2 100644 --- a/addons/crm/wizard/crm_send_email.py +++ b/addons/crm/wizard/crm_send_email.py @@ -49,7 +49,7 @@ class crm_send_new_email(osv.osv_memory): 'email_cc' : fields.char('CC', size=512, help="Carbon Copy: list of recipients that will receive"\ " a copy of this mail, and future communication related to this case"), 'subject': fields.char('Subject', size=512, required=True), - 'text': fields.text('Message', required=True), + 'body': fields.text('Message Body', required=True), 'state': fields.selection(crm.AVAILABLE_STATES, string='Set New State To', required=True), 'attachment_ids' : fields.one2many('crm.send.mail.attachment', 'wizard_id'), } @@ -68,10 +68,10 @@ class crm_send_new_email(osv.osv_memory): if not context: context = {} - if not context.get('model'): + if not context.get('active_model'): raise osv.except_osv(_('Error'), _('Can not send mail!')) - model = context.get('model') + model = context.get('active_model') case_pool = self.pool.get(model) res_id = context and context.get('active_id', False) or False @@ -91,16 +91,16 @@ class crm_send_new_email(osv.osv_memory): hist = hist_obj.browse(cr, uid, res_id) message_id = hist.message_id model = hist.model - model_pool = self.pool.get(model) + case_pool = self.pool.get(model) res_id = hist.res_id ref_id = hist.ref_id - case = model_pool.browse(cr, uid, res_id) + case = case_pool.browse(cr, uid, res_id) emails = [obj.email_to] email_cc = obj.email_cc and obj.email_cc.split(',') or '' emails = filter(None, emails) - body = obj.text + body = obj.body - body = case_pool.format_body(body) + body = body and tools.ustr(body) or '' email_from = getattr(obj, 'email_from', False) x_headers = {} if message_id: @@ -124,7 +124,7 @@ class crm_send_new_email(osv.osv_memory): case_pool.history(cr, uid, [case], _('Send'), history=True, \ email=obj.email_to, details=body, \ subject=obj.subject, email_from=email_from, \ - email_cc=email_cc, message_id=message_id, \ + email_cc=', '.join(email_cc), message_id=message_id, \ references=ref_id or message_id, attach=attach) if obj.state == 'unchanged': pass @@ -145,7 +145,7 @@ class crm_send_new_email(osv.osv_memory): if not context: context = {} - if not context.get('model'): + if not context.get('active_model'): raise osv.except_osv(_('Error'), _('Can not send mail!')) res = super(crm_send_new_email, self).default_get(cr, uid, fields, context=context) @@ -154,7 +154,7 @@ class crm_send_new_email(osv.osv_memory): res.update(self.get_reply_defaults(cr, uid, fields, context=context)) return res - model = context.get('model') + model = context.get('active_model') mod_obj = self.pool.get(model) res_id = context and context.get('active_ids', []) or [] @@ -172,8 +172,8 @@ class crm_send_new_email(osv.osv_memory): res.update({'subject': tools.ustr(context.get('subject', case.name) or '')}) if 'email_cc' in fields: res.update({'email_cc': tools.ustr(case.email_cc or '')}) - if 'text' in fields: - res.update({'text': u'\n'+(tools.ustr(case.user_id.signature or ''))}) + if 'body' in fields: + res.update({'body': u'\n'+(tools.ustr(case.user_id.signature or ''))}) if 'state' in fields: res.update({'state': u'pending'}) @@ -209,7 +209,7 @@ class crm_send_new_email(osv.osv_memory): signature = u'\n' + (tools.ustr(case.user_id.signature or '')) + u'\n' original = [signature] - if include_original == True and 'text' in fields: + if include_original == True and 'body' in fields: header = u'-------- Original Message --------' sender = u'From: %s' %(tools.ustr(hist.email_from or '')) to = u'To: %s' % (tools.ustr(hist.email_to or '')) @@ -218,10 +218,14 @@ class crm_send_new_email(osv.osv_memory): original = [signature, header, sender, to, sentdate, desc] - res['text']= u'\n' + u'\n'.join(original) + res['body']= u'\n' + u'\n'.join(original) if 'subject' in fields: res.update({u'subject': u'Re: %s' %(tools.ustr(hist.name or ''))}) + if 'email_cc' in fields: + res.update({'email_cc': case.email_cc and tools.ustr(case.email_cc) or False}) + if 'reply_to' in fields: + res.update({'reply_to': case.section_id.reply_to}) if 'state' in fields: res['state'] = u'pending' return res @@ -239,7 +243,7 @@ class crm_send_new_email(osv.osv_memory): if not context: context = {} - if not context.get('model'): + if not context.get('active_model'): raise osv.except_osv(_('Error'), _('Can not send mail!')) return True diff --git a/addons/crm/wizard/crm_send_email_view.xml b/addons/crm/wizard/crm_send_email_view.xml index df7218cbc02..aac7d854b88 100644 --- a/addons/crm/wizard/crm_send_email_view.xml +++ b/addons/crm/wizard/crm_send_email_view.xml @@ -9,7 +9,7 @@ crm.send.mail form -
+ @@ -19,7 +19,7 @@ - + @@ -46,7 +46,7 @@ - Send New Mail + Send Mail crm.send.mail form form @@ -77,7 +77,7 @@ - +