summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorThibault Delavallée <tde@openerp.com>2014-04-08 14:40:53 +0200
committerThibault Delavallée <tde@openerp.com>2014-04-08 14:40:53 +0200
commit8178669795e987c9b3df7eec7712f2f6cd1fba47 (patch)
tree8127640054563850d4781b619ed68d9857203630 /addons
parentcbfc26fe77d6cc216b47e4fbe08727b6cb511847 (diff)
[FIX] mail, mass_mailing
- mail: now trigger postprocess_sent_message in every case, being sent or not, as the state is propagated in the method; udpated all addons accordingly; - email_template: fixed URL to edit it in website + form view; - mass_mailing: barchart now send jsonified value; - mass_mailing: tweaking the form view with all options bzr revid: tde@openerp.com-20140408124053-o9tb14k6v47s5mjd
Diffstat (limited to 'addons')
-rw-r--r--addons/mail/mail_mail.py4
-rw-r--r--addons/mass_mailing/models/email_template.py2
-rw-r--r--addons/mass_mailing/models/mass_mailing.py20
-rw-r--r--addons/mass_mailing/views/email_template.xml3
-rw-r--r--addons/mass_mailing/views/mass_mailing.xml16
-rw-r--r--addons/mass_mailing/wizard/test_mailing.py1
-rw-r--r--addons/portal_sale/portal_sale.py2
-rw-r--r--addons/purchase/purchase.py2
-rw-r--r--addons/website_mail/models/email_template.py2
-rw-r--r--addons/website_mail/views/email_template_view.xml2
10 files changed, 33 insertions, 21 deletions
diff --git a/addons/mail/mail_mail.py b/addons/mail/mail_mail.py
index 64efb181045..12903d02236 100644
--- a/addons/mail/mail_mail.py
+++ b/addons/mail/mail_mail.py
@@ -288,11 +288,11 @@ class mail_mail(osv.Model):
# /!\ can't use mail.state here, as mail.refresh() will cause an error
# see revid:odo@openerp.com-20120622152536-42b2s28lvdv3odyr in 6.1
- if mail_sent:
- self._postprocess_sent_message(cr, uid, mail, context=context, mail_sent=mail_sent)
+ self._postprocess_sent_message(cr, uid, mail, context=context, mail_sent=mail_sent)
except Exception as e:
_logger.exception('failed sending mail.mail %s', mail.id)
mail.write({'state': 'exception'})
+ self._postprocess_sent_message(cr, uid, mail, context=context, mail_sent=False)
if raise_exception:
if isinstance(e, AssertionError):
# get the args of the original error, wrap into a value and throw a MailDeliveryException
diff --git a/addons/mass_mailing/models/email_template.py b/addons/mass_mailing/models/email_template.py
index db5782c3234..0403c857528 100644
--- a/addons/mass_mailing/models/email_template.py
+++ b/addons/mass_mailing/models/email_template.py
@@ -32,5 +32,7 @@ class EmailTemplate(osv.Model):
class email_template_preview(osv.TransientModel):
+ """ Reinitialize email template preview model to have access to all email.template
+ new fields. """
_name = "email_template.preview"
_inherit = ['email.template', 'email_template.preview']
diff --git a/addons/mass_mailing/models/mass_mailing.py b/addons/mass_mailing/models/mass_mailing.py
index 375f2e1162d..f7c6a1d5127 100644
--- a/addons/mass_mailing/models/mass_mailing.py
+++ b/addons/mass_mailing/models/mass_mailing.py
@@ -22,6 +22,10 @@
from datetime import datetime
from dateutil import relativedelta
import random
+try:
+ import simplejson as json
+except ImportError:
+ import json
import urllib
import urlparse
@@ -230,20 +234,18 @@ class MassMailingCampaign(osv.Model):
"""Model of mass mailing campaigns. """
_name = "mail.mass_mailing.campaign"
_description = 'Mass Mailing Campaign'
- # number of embedded mailings in kanban view
- _kanban_mailing_nbr = 4
def _get_statistics(self, cr, uid, ids, name, arg, context=None):
""" Compute statistics of the mass mailing campaign """
Statistics = self.pool['mail.mail.statistics']
results = dict.fromkeys(ids, False)
for cid in ids:
- stat_ids = Statistics.search(cr, uid, [('mass_mailing_campaign_id', '=', cid)], context=context),
+ stat_ids = Statistics.search(cr, uid, [('mass_mailing_campaign_id', '=', cid)], context=context)
stats = Statistics.browse(cr, uid, stat_ids, context=context)
results[cid] = {
'total': len(stats),
'failed': len([s for s in stats if not s.scheduled is False and s.sent is False and not s.exception is False]),
- 'scheduled': len([s for s in stats if not s.scheduled is False and s.sent is False]),
+ 'scheduled': len([s for s in stats if not s.scheduled is False and s.sent is False and s.exception is False]),
'sent': len([s for s in stats if not s.sent is False]),
'opened': len([s for s in stats if not s.opened is False]),
'replied': len([s for s in stats if not s.replied is False]),
@@ -416,9 +418,9 @@ class MassMailing(osv.Model):
date_begin_str = date_begin.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)
date_end_str = date_end.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)
domain = [('mass_mailing_id', '=', id), ('opened', '>=', date_begin_str), ('opened', '<=', date_end_str)]
- res[id]['opened_dayly'] = self.__get_bar_values(cr, uid, id, obj, domain, ['opened'], 'opened_count', 'opened:day', context=context)
+ res[id]['opened_dayly'] = json.dumps(self.__get_bar_values(cr, uid, id, obj, domain, ['opened'], 'opened_count', 'opened:day', context=context))
domain = [('mass_mailing_id', '=', id), ('replied', '>=', date_begin_str), ('replied', '<=', date_end_str)]
- res[id]['replied_dayly'] = self.__get_bar_values(cr, uid, id, obj, domain, ['replied'], 'replied_count', 'replied:day', context=context)
+ res[id]['replied_dayly'] = json.dumps(self.__get_bar_values(cr, uid, id, obj, domain, ['replied'], 'replied_count', 'replied:day', context=context))
return res
def _get_statistics(self, cr, uid, ids, name, arg, context=None):
@@ -431,7 +433,7 @@ class MassMailing(osv.Model):
results[mid] = {
'total': len(stats),
'failed': len([s for s in stats if not s.scheduled is False and s.sent is False and not s.exception is False]),
- 'scheduled': len([s for s in stats if not s.scheduled is False and s.sent is False]),
+ 'scheduled': len([s for s in stats if not s.scheduled is False and s.sent is False and s.exception is False]),
'sent': len([s for s in stats if not s.sent is False]),
'opened': len([s for s in stats if not s.opened is False]),
'replied': len([s for s in stats if not s.replied is False]),
@@ -699,6 +701,9 @@ class MassMailing(osv.Model):
values['body_html'] = False
return {'value': values}
+ def on_change_contact_ab_pc(self, cr, uid, ids, contact_ab_pc, contact_nbr, context=None):
+ return {'value': {'contact_ab_nbr': contact_nbr * contact_ab_pc / 100.0}}
+
def action_duplicate(self, cr, uid, ids, context=None):
copy_id = None
for mid in ids:
@@ -837,6 +842,7 @@ class MassMailing(osv.Model):
composer_values['reply_to'] = mailing.reply_to
composer_id = self.pool['mail.compose.message'].create(cr, uid, composer_values, context=comp_ctx)
self.pool['mail.compose.message'].send_mail(cr, uid, [composer_id], context=comp_ctx)
+ self.write(cr, uid, [mailing.id], {'date': fields.datetime.now(), 'state': 'done'}, context=context)
return True
diff --git a/addons/mass_mailing/views/email_template.xml b/addons/mass_mailing/views/email_template.xml
index cb1a6b2d514..438852609bb 100644
--- a/addons/mass_mailing/views/email_template.xml
+++ b/addons/mass_mailing/views/email_template.xml
@@ -36,6 +36,9 @@
<button name="%(email_template.wizard_email_template_preview)d" string="Preview"
type="action" target="new"
context="{'template_id':active_id}"/>
+ <br />
+ <field name="website_link" widget='html' radonly='1'
+ style='margin: 0px; padding: 0px;'/>
</div>
</group>
</group>
diff --git a/addons/mass_mailing/views/mass_mailing.xml b/addons/mass_mailing/views/mass_mailing.xml
index 8ef02545a2f..8bca6473828 100644
--- a/addons/mass_mailing/views/mass_mailing.xml
+++ b/addons/mass_mailing/views/mass_mailing.xml
@@ -228,7 +228,6 @@
<field name="name"/>
</group>
<group>
- <field name="total" invisible="1"/>
<div class="oe_right oe_button_box" name="buttons">
<div>
<button name="action_see_recipients" type="object"
@@ -301,14 +300,13 @@
<span style="margin-left: 8px; margin-right: 8px">or</span>
<button string='Create a New List' class="oe_link" type='object' name='action_new_list'/><br />
- <!-- <label for="contact_nbr" string="Total" style="display: inline-block; min-width: 90px;"/> -->
- <!-- <field name="contact_nbr" nolabel="1" class="oe_inline" readonly="True"/> recipients -->
- <!-- <button name="action_see_recipients" type="object" string="See Recipients" class="oe_inline oe_link" style='margin-left: 8px;'/><br /> -->
-
<div groups="mass_mailing.group_mass_mailing_campaign" style="display: inline;">
<field name="ab_testing" invisible="1"/>
- <label for="contact_ab_pc" string="AB Testing"/>
- <field name="contact_ab_pc" class="oe_inline"/>%, <field name="contact_ab_nbr" class="oe_inline"/> contacts to mail
+ <label for="contact_ab_pc" string="AB Testing" style="display: inline-block; min-width: 90px;"/>
+ Email <field name="contact_ab_pc" class="oe_inline"
+ on_change="on_change_contact_ab_pc(contact_ab_pc, contact_nbr, context)"/>
+ <strong>%</strong> of recipients
+ (<field name="contact_ab_nbr" class="oe_inline"/> recipients)
<div attrs="{'invisible': [('ab_testing', '=', False)]}" style="display: inline;">
<span>(</span>
<field name="contact_ab_done" class="oe_inline"
@@ -318,7 +316,8 @@
</div>
</div>
- <field name="date" readonly="True" groups="mass_mailing.group_mass_mailing_campaign"/>
+ <field name="date" readonly="True" groups="mass_mailing.group_mass_mailing_campaign"
+ attrs="{'invisible': [('state', '!=', 'done')]}"/>
<field name="mass_mailing_campaign_id" groups="mass_mailing.group_mass_mailing_campaign"/>
<label for="body_html" string="Email"/>
<div>
@@ -665,6 +664,7 @@
<group>
<field name="mail_mail_id"/>
<field name="message_id"/>
+ <field name="exception"/>
<field name="sent"/>
<field name="opened"/>
<field name="replied"/>
diff --git a/addons/mass_mailing/wizard/test_mailing.py b/addons/mass_mailing/wizard/test_mailing.py
index bbc41dde48d..817839459f6 100644
--- a/addons/mass_mailing/wizard/test_mailing.py
+++ b/addons/mass_mailing/wizard/test_mailing.py
@@ -39,4 +39,5 @@ class TestMassMailing(osv.TransientModel):
}
mail_ids.append(Mail.create(cr, uid, mail_values, context=context))
Mail.send(cr, uid, mail_ids, context=context)
+ self.pool['mail.mass_mailing'].write(cr, uid, [mailing.id], {'state': 'test'}, context=context)
return True
diff --git a/addons/portal_sale/portal_sale.py b/addons/portal_sale/portal_sale.py
index b79be7391e1..f45acf45523 100644
--- a/addons/portal_sale/portal_sale.py
+++ b/addons/portal_sale/portal_sale.py
@@ -127,7 +127,7 @@ class mail_mail(osv.osv):
_inherit = 'mail.mail'
def _postprocess_sent_message(self, cr, uid, mail, context=None, mail_sent=True):
- if mail.model == 'sale.order':
+ if mail_sent and mail.model == 'sale.order':
so_obj = self.pool.get('sale.order')
order = so_obj.browse(cr, uid, mail.res_id, context=context)
partner = order.partner_id
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index ea23a23e30b..378e3b12e2e 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -1249,7 +1249,7 @@ class mail_mail(osv.Model):
_inherit = 'mail.mail'
def _postprocess_sent_message(self, cr, uid, mail, context=None, mail_sent=True):
- if mail.model == 'purchase.order':
+ if mail_sent and mail.model == 'purchase.order':
self.pool.get('purchase.order').signal_send_rfq(cr, uid, [mail.res_id])
return super(mail_mail, self)._postprocess_sent_message(cr, uid, mail=mail, context=context, mail_sent=mail_sent)
diff --git a/addons/website_mail/models/email_template.py b/addons/website_mail/models/email_template.py
index 87daac6aabb..64beacea835 100644
--- a/addons/website_mail/models/email_template.py
+++ b/addons/website_mail/models/email_template.py
@@ -27,7 +27,7 @@ class EmailTemplate(osv.Model):
_inherit = 'email.template'
def _get_website_link(self, cr, uid, ids, name, args, context=None):
- return dict((id, _('<a href="website_mail/email_designer/%s">Open with visual editor</a>') % id) for id in ids)
+ return dict((id, _('<a href="website_mail/email_designer?model=email.template&res_id=%d">Open with visual editor</a>') % id) for id in ids)
_columns = {
'website_link': fields.function(
diff --git a/addons/website_mail/views/email_template_view.xml b/addons/website_mail/views/email_template_view.xml
index bb346af5e97..295002a98e7 100644
--- a/addons/website_mail/views/email_template_view.xml
+++ b/addons/website_mail/views/email_template_view.xml
@@ -6,7 +6,7 @@
<field name="model">email.template</field>
<field name="inherit_id" ref="email_template.email_template_form"/>
<field name="arch" type="xml">
- <xpath expr="//field[@name='model']" position="before">
+ <xpath expr="//h1" position="after">
<br />
<field name="website_link" widget='html' radonly='1'
style='margin: 0px; padding: 0px;'/>