diff --git a/addons/account/report/account_invoice_report_view.xml b/addons/account/report/account_invoice_report_view.xml
index 24723d7fb12..eebc95ae0e2 100644
--- a/addons/account/report/account_invoice_report_view.xml
+++ b/addons/account/report/account_invoice_report_view.xml
@@ -25,7 +25,7 @@
-
+
diff --git a/addons/crm/test/lead2opportunity_assign_salesmen.yml b/addons/crm/test/lead2opportunity_assign_salesmen.yml
index 12d212ec5fd..76b35be531d 100644
--- a/addons/crm/test/lead2opportunity_assign_salesmen.yml
+++ b/addons/crm/test/lead2opportunity_assign_salesmen.yml
@@ -65,8 +65,8 @@
Salesman create a mass convert wizard and convert all the leads.
-
!python {model: crm.lead2opportunity.partner.mass}: |
- context.update({'active_model': 'crm.lead', 'active_ids': [ref("test_crm_lead_01"), ref("test_crm_lead_02"), ref("test_crm_lead_03"), ref("test_crm_lead_04"), ref("test_crm_lead_05"), ref("test_crm_lead_06")], 'active_id': ref("test_crm_lead_01"), 'no_force_assignation': False})
- id = self.create(cr, uid, {'user_ids': [(6, 0, [ref('test_res_user_01'), ref('test_res_user_02'), ref('test_res_user_03'), ref('test_res_user_04')])], 'section_id': ref('crm.section_sales_department'), 'deduplicate': False}, context=context)
+ context.update({'active_model': 'crm.lead', 'active_ids': [ref("test_crm_lead_01"), ref("test_crm_lead_02"), ref("test_crm_lead_03"), ref("test_crm_lead_04"), ref("test_crm_lead_05"), ref("test_crm_lead_06")], 'active_id': ref("test_crm_lead_01")})
+ id = self.create(cr, uid, {'user_ids': [(6, 0, [ref('test_res_user_01'), ref('test_res_user_02'), ref('test_res_user_03'), ref('test_res_user_04')])], 'section_id': ref('crm.section_sales_department'), 'deduplicate': False, 'force_assignation': True}, context=context)
self.mass_convert(cr, uid, [id], context=context)
-
The leads should now be opps with a salesman and a salesteam. Also, salesmen should have been assigned following a round-robin method.
diff --git a/addons/crm/wizard/crm_lead_to_opportunity.py b/addons/crm/wizard/crm_lead_to_opportunity.py
index 347475d100f..70f6712df74 100644
--- a/addons/crm/wizard/crm_lead_to_opportunity.py
+++ b/addons/crm/wizard/crm_lead_to_opportunity.py
@@ -197,8 +197,7 @@ class crm_lead2opportunity_mass_convert(osv.osv_memory):
('each_exist_or_create', 'Use existing partner or create'),
('nothing', 'Do not link to a customer')
], 'Related Customer', required=True),
- # Uncomment me in trunk
- # 'force_assignation': fields.boolean('Force assignation', help='If unchecked, this will leave the salesman of duplicated opportunities'),
+ 'force_assignation': fields.boolean('Force assignation', help='If unchecked, this will leave the salesman of duplicated opportunities'),
}
_defaults = {
@@ -274,10 +273,7 @@ class crm_lead2opportunity_mass_convert(osv.osv_memory):
active_ids = active_ids.difference(merged_lead_ids)
active_ids = active_ids.union(remaining_lead_ids)
ctx['active_ids'] = list(active_ids)
- # Remove me in trunk
- ctx['no_force_assignation'] = ctx.get('no_force_assignation', True)
- # Uncomment me in trunk
- # ctx['no_force_assignation'] = not data.force_assignation
+ ctx['no_force_assignation'] = not data.force_assignation
return self.action_apply(cr, uid, ids, context=ctx)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/website_mail/controllers/main.py b/addons/website_mail/controllers/main.py
index 601e1387f0a..a6b400ec4a1 100644
--- a/addons/website_mail/controllers/main.py
+++ b/addons/website_mail/controllers/main.py
@@ -26,43 +26,67 @@ from openerp.addons.web.http import request
class WebsiteMail(http.Controller):
- def _find_or_create_partner(self, email, context=None):
- # TDE TODO: FIXME: use mail_thread method
+ @http.route(['/website_mail/follow'], type='json', auth="public", website=True)
+ def website_message_subscribe(self, id=0, object=None, message_is_follower="on", email=False, **post):
+ cr, uid, context = request.cr, request.uid, request.context
+
partner_obj = request.registry['res.partner']
user_obj = request.registry['res.users']
- partner_ids = []
- if email and email != u'false': # post contains stringified booleans
- partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", email)], context=request.context)
- if not partner_ids:
- partner_ids = [partner_obj.name_create(request.cr, SUPERUSER_ID, email, request.context)[0]]
- else:
- partner_ids = [user_obj.browse(request.cr, request.uid, request.uid, request.context).partner_id.id]
- return partner_ids
+ website = request.registry['website']
- @http.route(['/website_mail/follow/'], type='json', auth="public", website=True)
- def website_message_subscribe(self, id=0, object=None, message_is_follower="on", email=False, **post):
_id = int(id)
_message_is_follower = message_is_follower == 'on'
_object = request.registry[object]
- partner_ids = self._find_or_create_partner(email, request.context)
- if _message_is_follower:
- _object.check_access_rule(request.cr, request.uid, [_id], 'read', request.context)
- _object.message_unsubscribe(request.cr, SUPERUSER_ID, [_id], partner_ids, context=request.context)
+ # search partner_id
+ public_id = website.get_public_user(cr, uid, context)
+ if uid != public_id:
+ partner_ids = [user_obj.browse(cr, uid, uid, context).partner_id.id]
else:
- _object.check_access_rule(request.cr, request.uid, [_id], 'read', request.context)
- _object.message_subscribe(request.cr, SUPERUSER_ID, [_id], partner_ids, context=request.context)
- obj = _object.browse(request.cr, request.uid, _id)
- follower_ids = [p.id for p in obj.message_follower_ids]
+ # mail_thread method
+ partner_ids = _object._find_partner_from_emails(
+ cr, SUPERUSER_ID, _id, [email], context=context, check_followers=True)
+ if not partner_ids or not partner_ids[0]:
+ partner_ids = [partner_obj.create(cr, SUPERUSER_ID, {'name': email, 'email': email}, context=context)]
- return partner_ids[0] in follower_ids and 1 or 0
+ # add or remove follower
+ if _message_is_follower:
+ _object.check_access_rule(cr, uid, [_id], 'read', context)
+ _object.message_unsubscribe(cr, SUPERUSER_ID, [_id], partner_ids, context=context)
+ return False
+ else:
+ _object.check_access_rule(cr, uid, [_id], 'read', context)
+ # add partner to session
+ request.session['partner_id'] = partner_ids[0]
+ _object.message_subscribe(cr, SUPERUSER_ID, [_id], partner_ids, context=context)
+ return True
- @http.route(['/website_mail/is_follower/'], type='json', auth="public", website=True)
+ @http.route(['/website_mail/is_follower'], type='json', auth="public", website=True)
def call(self, model, id, **post):
- email = request.registry['res.users'].browse(request.cr, request.uid, request.uid, request.context).partner_id.email
- value = request.registry.get(model).read(request.cr, request.uid, [id], ['message_is_follower'], request.context)
+ cr, uid, context = request.cr, request.uid, request.context
+
+ partner_obj = request.registry.get('res.partner')
+ users_obj = request.registry.get('res.users')
+ obj = request.registry.get(model)
+ website = request.registry['website']
+
+ partner_id = None
+ public_id = website.get_public_user(cr, uid, context)
+ if uid != public_id:
+ partner_id = users_obj.browse(cr, SUPERUSER_ID, uid, context).partner_id
+ elif request.session.get('partner_id'):
+ partner_id = partner_obj.browse(cr, SUPERUSER_ID, request.session.get('partner_id'), context)
+
+ email = ""
+ is_follower = False
+ if partner_id:
+ email = partner_id and partner_id.email
+ is_follower = partner_id.id in [
+ fol.id for fol in obj.browse(cr, SUPERUSER_ID, id, context).message_follower_ids]
+
return {
- 'email': email,
- 'is_follower': value and value[0]['message_is_follower'] or False
+ 'is_user': uid != public_id,
+ 'email': email,
+ 'is_follower': is_follower
}
diff --git a/addons/website_mail/static/src/css/website_mail.css b/addons/website_mail/static/src/css/website_mail.css
index 25d88ebf191..5678442416c 100644
--- a/addons/website_mail/static/src/css/website_mail.css
+++ b/addons/website_mail/static/src/css/website_mail.css
@@ -1,5 +1,4 @@
.js_follow[data-follow='on'] .js_follow_btn ,
-.js_follow[data-follow='on'] .js_follow_email,
.js_follow[data-follow='off'] .js_unfollow_btn {
display: none;
}
\ No newline at end of file
diff --git a/addons/website_mail/static/src/js/website_mail.js b/addons/website_mail/static/src/js/website_mail.js
index 672a21324a8..bd34b526ddd 100644
--- a/addons/website_mail/static/src/js/website_mail.js
+++ b/addons/website_mail/static/src/js/website_mail.js
@@ -9,13 +9,14 @@
var self = this;
// set value and display button
- openerp.jsonRpc('/website_mail/is_follower/', 'call', {
+ self.$target.find("input").removeClass("hidden");
+ openerp.jsonRpc('/website_mail/is_follower', 'call', {
model: this.$target.data('object'),
id: +this.$target.data('id'),
}).always(function (data) {
self.$target.find('input.js_follow_email')
.val(data.email ? data.email : "")
- .attr("disabled", data.email.length ? "disabled" : false);
+ .attr("disabled", data.is_follower && data.email.length ? "disabled" : false);
self.$target.attr("data-follow", data.is_follower ? 'on' : 'off');
self.$target.removeClass("hidden");
});
@@ -47,8 +48,10 @@
'email': $email.length ? $email.val() : false,
}).then(function (follow) {
if (follow) {
- self.$target.find(" > *").toggleClass("hidden");
+ self.$target.find(".js_follow_email, .input-group-btn").addClass("hidden");
+ self.$target.find(".alert").removeClass("hidden");
}
+ self.$target.find('input.js_follow_email').attr("disabled", follow ? "disabled" : false);
self.$target.attr("data-follow", follow ? 'on' : 'off');
});
},
diff --git a/addons/website_mail/views/snippets.xml b/addons/website_mail/views/snippets.xml
index 196ad39dac8..a930f2852a1 100644
--- a/addons/website_mail/views/snippets.xml
+++ b/addons/website_mail/views/snippets.xml
@@ -509,8 +509,8 @@
class="js_follow_email form-control"
placeholder="your email..."/>
- unsubscribe
- subscribe
+ Unsubscribe
+ Subscribe
thanks for your subscription!
diff --git a/addons/website_mail_group/controllers/main.py b/addons/website_mail_group/controllers/main.py
index a6f3adcd522..fe133434abc 100644
--- a/addons/website_mail_group/controllers/main.py
+++ b/addons/website_mail_group/controllers/main.py
@@ -59,7 +59,7 @@ class MailGroup(http.Controller):
domain.append(('parent_id','=',False))
thread_count = thread_obj.search_count(cr, uid, domain, context=context)
pager = request.website.pager(
- url='/groups/%s/%s' % (group.id, mode),
+ url='/groups/%s/%s/' % (group.id, mode),
total=thread_count,
page=page,
step=self._thread_per_page,
diff --git a/addons/website_mail_group/views/website_mail_group.xml b/addons/website_mail_group/views/website_mail_group.xml
index 9e4b41329b4..fb18ee9f3fd 100644
--- a/addons/website_mail_group/views/website_mail_group.xml
+++ b/addons/website_mail_group/views/website_mail_group.xml
@@ -45,13 +45,13 @@