diff --git a/addons/event/__manifest__.py b/addons/event/__manifest__.py
index 3dc6be1a116..bd221a9962d 100644
--- a/addons/event/__manifest__.py
+++ b/addons/event/__manifest__.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
{
'name': 'Events Organization',
- 'version': '1.4',
+ 'version': '1.5',
'website': 'https://www.odoo.com/page/events',
'category': 'Marketing/Events',
'summary': 'Trainings, Conferences, Meetings, Exhibitions, Registrations',
@@ -44,4 +44,7 @@ Key Features
],
'installable': True,
'auto_install': False,
+ 'qweb': [
+ 'static/src/xml/field_icon_selection.xml',
+ ],
}
diff --git a/addons/event/models/event_mail.py b/addons/event/models/event_mail.py
index 11ff8fbff64..57ac14ff55b 100644
--- a/addons/event/models/event_mail.py
+++ b/addons/event/models/event_mail.py
@@ -86,6 +86,10 @@ class EventMailScheduler(models.Model):
mail_registration_ids = fields.One2many('event.mail.registration', 'scheduler_id')
mail_sent = fields.Boolean('Mail Sent on Event', copy=False)
done = fields.Boolean('Sent', compute='_compute_done', store=True, copy=False)
+ mail_state = fields.Selection(
+ [('running', 'Running'), ('scheduled', 'Scheduled'), ('sent', 'Sent')],
+ string='Global communication Status', compute='_compute_mail_state')
+ mail_count_done = fields.Integer('# Sent', copy=False, readonly=True)
@api.depends('mail_sent', 'interval_type', 'event_id.registration_ids', 'mail_registration_ids.mail_sent')
def _compute_done(self):
@@ -107,6 +111,20 @@ class EventMailScheduler(models.Model):
scheduler.scheduled_date = date + _INTERVALS[scheduler.interval_unit](sign * scheduler.interval_nbr) if date else False
+ @api.depends('interval_type', 'scheduled_date', 'event_mail_sent')
+ def _compute_mail_state(self):
+ for scheduler in self:
+ # registrations based
+ if scheduler.interval_type == 'after_sub':
+ scheduler.mail_state = 'running'
+ # global event based
+ elif scheduler.event_mail_sent:
+ scheduler.mail_state = 'sent'
+ elif scheduler.scheduled_date:
+ scheduler.mail_state = 'scheduled'
+ else:
+ scheduler.mail_state = 'running'
+
def execute(self):
for mail in self:
now = fields.Datetime.now()
@@ -120,12 +138,15 @@ class EventMailScheduler(models.Model):
mail.write({'mail_registration_ids': lines})
# execute scheduler on registrations
mail.mail_registration_ids.execute()
+ mail.mail_count_done = len(mail.mail_registration_ids.filtered(lambda reg: reg.mail_sent))
else:
# Do not send emails if the mailing was scheduled before the event but the event is over
if not mail.mail_sent and mail.scheduled_date <= now and mail.notification_type == 'mail' and \
(mail.interval_type != 'before_event' or mail.event_id.date_end > now):
mail.event_id.mail_attendees(mail.template_id.id)
mail.write({'mail_sent': True})
+ mail.mail_count_done = len(mail.event_id.registration_ids.filtered(lambda reg: reg.state != 'cancel'))
+
return True
@api.model
diff --git a/addons/event/static/src/js/field_icon_selection.js b/addons/event/static/src/js/field_icon_selection.js
new file mode 100644
index 00000000000..95740ea62d9
--- /dev/null
+++ b/addons/event/static/src/js/field_icon_selection.js
@@ -0,0 +1,29 @@
+odoo.define('event.field_icon_selection', function (require) {
+"use strict";
+
+var core = require('web.core');
+var registry = require('web.field_registry');
+var AbstractField = require('web.AbstractField');
+var QWeb = core.qweb;
+
+var IconSelection = AbstractField.extend({
+ supportedFieldTypes: ['char', 'text', 'selection'],
+
+ /**
+ * @override
+ * @private
+ */
+ _render: function () {
+ this._super.apply(this, arguments);
+ this.icon = this.nodeOptions[this.value];
+ this.title = this.value.charAt(0).toUpperCase() + this.value.slice(1);
+ this.$el.empty().append(QWeb.render('event.IconSelection', {'widget': this}));
+ },
+
+});
+
+registry.add('icon_selection', IconSelection);
+
+return IconSelection;
+
+});
diff --git a/addons/event/static/src/xml/field_icon_selection.xml b/addons/event/static/src/xml/field_icon_selection.xml
new file mode 100644
index 00000000000..399be360311
--- /dev/null
+++ b/addons/event/static/src/xml/field_icon_selection.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/addons/event/views/event_templates.xml b/addons/event/views/event_templates.xml
index c8e320e5515..54cbdb0b684 100644
--- a/addons/event/views/event_templates.xml
+++ b/addons/event/views/event_templates.xml
@@ -4,6 +4,7 @@
+
diff --git a/addons/event/views/event_views.xml b/addons/event/views/event_views.xml
index da2acc446e6..eaa9c2bba50 100644
--- a/addons/event/views/event_views.xml
+++ b/addons/event/views/event_views.xml
@@ -266,7 +266,10 @@
-
+
+
+
@@ -750,7 +753,7 @@
-
+
@@ -787,8 +790,9 @@
-
-
+
+
diff --git a/addons/event_sms/models/event_mail.py b/addons/event_sms/models/event_mail.py
index 3e56a0552a7..3bdf5230c31 100644
--- a/addons/event_sms/models/event_mail.py
+++ b/addons/event_sms/models/event_mail.py
@@ -45,6 +45,9 @@ class EventMailScheduler(models.Model):
mass_keep_log=True
)
mail.write({'mail_sent': True})
+
+ mail.mail_count_done = len(mail.event_id.registration_ids.filtered(lambda reg: reg.state != 'cancel'))
+
return super(EventMailScheduler, self).execute()