From 7e61793ad70bf3a56bfc19131ce81e14eb5e43b5 Mon Sep 17 00:00:00 2001 From: Patrick Hoste Date: Wed, 13 May 2020 12:06:38 +0000 Subject: [PATCH 1/4] [IMP] mail: add activity_search method in mail.activity.mixin PURPOSE After this commit it will be easier to find all the corresponding automated activities in a model. SPECIFICATIONS Add an activity_search method in the mail.activity.mixin model to ease the searching on mail.activity corresponding to the model. It is already inlined in activity_reschedule and activity_feedback. LINKS Task ID : 2127364 PR : #40708 --- addons/mail/models/mail_activity.py | 66 ++++++++++++++++------------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/addons/mail/models/mail_activity.py b/addons/mail/models/mail_activity.py index 25160ec89b1..2f12a2eb0a4 100644 --- a/addons/mail/models/mail_activity.py +++ b/addons/mail/models/mail_activity.py @@ -8,6 +8,7 @@ import logging import pytz from odoo import api, exceptions, fields, models, _ +from odoo.osv import expression from odoo.tools.misc import clean_context from odoo.addons.base.models.ir_model import MODULE_UNINSTALL_FLAG @@ -781,6 +782,38 @@ class MailActivityMixin(models.AbstractModel): ) return True + def activity_search(self, act_type_xmlids='', user_id=None, additional_domain=None): + """ Search automated activities on current record set, given a list of activity + types xml IDs. It is useful when dealing with specific types involved in automatic + activities management. + + :param act_type_xmlids: list of activity types xml IDs + :param user_id: if set, restrict to activities of that user_id; + :param additional_domain: if set, filter on that domain; + """ + if self.env.context.get('mail_activity_automation_skip'): + return False + + Data = self.env['ir.model.data'].sudo() + activity_types_ids = [type_id for type_id in (Data.xmlid_to_res_id(xmlid, raise_if_not_found=False) for xmlid in act_type_xmlids) if type_id] + if not any(activity_types_ids): + return False + + domain = [ + '&', '&', '&', + ('res_model', '=', self._name), + ('res_id', 'in', self.ids), + ('automated', '=', True), + ('activity_type_id', 'in', activity_types_ids) + ] + + if user_id: + domain = expression.AND([domain, [('user_id', '=', user_id)]]) + if additional_domain: + domain = expression.AND([domain, additional_domain]) + + return self.env['mail.activity'].search(domain) + def activity_schedule(self, act_type_xmlid='', date_deadline=None, summary='', note='', **act_values): """ Schedule an activity on each record of the current record set. This method allow to provide as parameter act_type_xmlid. This is an @@ -864,16 +897,7 @@ class MailActivityMixin(models.AbstractModel): activity_types_ids = [act_type_id for act_type_id in activity_types_ids if act_type_id] if not any(activity_types_ids): return False - domain = [ - '&', '&', '&', - ('res_model', '=', self._name), - ('res_id', 'in', self.ids), - ('automated', '=', True), - ('activity_type_id', 'in', activity_types_ids) - ] - if user_id: - domain = ['&'] + domain + [('user_id', '=', user_id)] - activities = self.env['mail.activity'].search(domain) + activities = self.activity_search(act_type_xmlids, user_id=user_id) if activities: write_vals = {} if date_deadline: @@ -894,16 +918,7 @@ class MailActivityMixin(models.AbstractModel): activity_types_ids = [act_type_id for act_type_id in activity_types_ids if act_type_id] if not any(activity_types_ids): return False - domain = [ - '&', '&', '&', - ('res_model', '=', self._name), - ('res_id', 'in', self.ids), - ('automated', '=', True), - ('activity_type_id', 'in', activity_types_ids) - ] - if user_id: - domain = ['&'] + domain + [('user_id', '=', user_id)] - activities = self.env['mail.activity'].search(domain) + activities = self.activity_search(act_type_xmlids, user_id=user_id) if activities: activities.action_feedback(feedback=feedback) return True @@ -919,14 +934,5 @@ class MailActivityMixin(models.AbstractModel): activity_types_ids = [act_type_id for act_type_id in activity_types_ids if act_type_id] if not any(activity_types_ids): return False - domain = [ - '&', '&', '&', - ('res_model', '=', self._name), - ('res_id', 'in', self.ids), - ('automated', '=', True), - ('activity_type_id', 'in', activity_types_ids) - ] - if user_id: - domain = ['&'] + domain + [('user_id', '=', user_id)] - self.env['mail.activity'].search(domain).unlink() + self.activity_search(act_type_xmlids, user_id=user_id).unlink() return True From 2aa150e195bef5b68ea306b33531c6390667e9cc Mon Sep 17 00:00:00 2001 From: Patrick Hoste Date: Mon, 8 Jun 2020 07:02:06 +0000 Subject: [PATCH 2/4] [IMP] mail: add possibility to choose a source / request partner on activity PURPOSE Allow to know if an activity is linked to a customer or a requesting partner. SPECIFCIATIONS Add a partner_id field on mail.activity model. It will be used notably in website slides to know who triggered an "request access" activity. It can also be used in various business flows when assigned user is different from the "source" or "requesting" partner. LINKS Task ID : 2127364 Community PR odoo/odoo#40708 Upgrade PR odoo/upgrade#1101 --- addons/mail/models/mail_activity.py | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/mail/models/mail_activity.py b/addons/mail/models/mail_activity.py index 2f12a2eb0a4..71ccce481bf 100644 --- a/addons/mail/models/mail_activity.py +++ b/addons/mail/models/mail_activity.py @@ -163,6 +163,7 @@ class MailActivity(models.Model): 'res.users', 'Assigned to', default=lambda self: self.env.user, index=True, required=True) + request_partner_id = fields.Many2one('res.partner', string='Requesting Partner') state = fields.Selection([ ('overdue', 'Overdue'), ('today', 'Today'), From ad8c53ac2c5bc25ea94d5cddf8d1aa48efad5928 Mon Sep 17 00:00:00 2001 From: Patrick Hoste Date: Wed, 4 Dec 2019 09:09:06 +0000 Subject: [PATCH 3/4] [FIX] website_slides: changes enroll_msg default value SPECIFICATION Changes enroll_msg default value to 'Contact Responsible' instead of testing if it was empty or not. Since the FieldHtml widget sets the default value to '


' it was never empty. LINKS Task ID : 2127364 PR : #40708 --- addons/website_slides/models/slide_channel.py | 5 ++++- .../website_slides/views/website_slides_templates_course.xml | 3 +-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/website_slides/models/slide_channel.py b/addons/website_slides/models/slide_channel.py index fe2c009f6ee..7a950e7d1b6 100644 --- a/addons/website_slides/models/slide_channel.py +++ b/addons/website_slides/models/slide_channel.py @@ -85,6 +85,9 @@ class Channel(models.Model): def _default_access_token(self): return str(uuid.uuid4()) + def _get_default_enroll_msg(self): + return _('Contact Responsible') + # description name = fields.Char('Name', translate=True, required=True) active = fields.Boolean(default=True, tracking=100) @@ -145,7 +148,7 @@ class Channel(models.Model): help='Condition to enroll: everyone, on invite, on payment (sale bridge).') enroll_msg = fields.Html( 'Enroll Message', help="Message explaining the enroll process", - default=False, translate=tools.html_translate, sanitize_attributes=False) + default=_get_default_enroll_msg, translate=tools.html_translate, sanitize_attributes=False) enroll_group_ids = fields.Many2many('res.groups', string='Auto Enroll Groups', help="Members of those groups are automatically added as members of the channel.") visibility = fields.Selection([ ('public', 'Public'), ('members', 'Members Only')], diff --git a/addons/website_slides/views/website_slides_templates_course.xml b/addons/website_slides/views/website_slides_templates_course.xml index 53e57546ed8..dd44da2ac59 100644 --- a/addons/website_slides/views/website_slides_templates_course.xml +++ b/addons/website_slides/views/website_slides_templates_course.xml @@ -296,8 +296,7 @@
Private Course
-
- Contact website administrator. +
+ + +
+

Do you want to request access to this course ?

+
+
diff --git a/addons/website_slides/static/src/xml/slide_quiz.xml b/addons/website_slides/static/src/xml/slide_quiz.xml index e64bc96604e..aa7bcc3f835 100644 --- a/addons/website_slides/static/src/xml/slide_quiz.xml +++ b/addons/website_slides/static/src/xml/slide_quiz.xml @@ -47,8 +47,23 @@
- - This course is private. Contact the website administrator to enroll. + This course is private. + + Please + + sign in + + to enroll. + + + + Responsible already contacted. + + + Contact the responsible to enroll. + + diff --git a/addons/website_slides/views/assets.xml b/addons/website_slides/views/assets.xml index 3d896e8473e..78a54ef2f68 100644 --- a/addons/website_slides/views/assets.xml +++ b/addons/website_slides/views/assets.xml @@ -7,6 +7,7 @@