summaryrefslogtreecommitdiff
path: root/addons/event
diff options
context:
space:
mode:
authorMahendra Barad <mba@openerp.com>2015-01-29 15:32:43 +0100
committerThibault Delavallée <tde@openerp.com>2015-01-29 17:39:41 +0100
commitd9fa702d5e6183bfe57c3de9cab869dc3fa79718 (patch)
tree92eec376839edd3ed634306e3836e547e247636e /addons/event
parent5d53fbc8336ed1f13b999cc7b3699349ead818c9 (diff)
[IMP] event and event_* modules: onboarding improvements
event: - added tip - default subscription/reminder/thanks templates for registrations are now using the reply_to defined on the event - fixed check of available seats: use seats_availability field, unlimited events should never trigger the constraint - added a sequence on scheduled emails on events - config: wording improvements - various improvements in event, registration, event_mail and event_report views event_sale: - removed override of seats_max: should not depend on available seats in tickets. Indeed you may have less available places than the sum of seats for each ticket type, for example if you have 0-10 VIP and 0-20 Standard tickets for a 20-seats event. - removed a duplicated view override - added a seats_availability field on tickets, same meaning as on event. - improved event form view: registration tab is now replaced by the tickets tab when tickets are used website_event: - better management of sold-out event in the front-end, when doing registrations website_event_sale: - removed register link on the event kanban view. There is no need to to from the back-end to the front-end from the kanban view. The published button on the event form view already allows to go to the front-end view on the event - better management of sold-out event in the front-end, when doing registrations - fixed a template that was in customize and should not website_event_track: - wording improvements - small improvements in the front-end of tracks
Diffstat (limited to 'addons/event')
-rw-r--r--addons/event/__openerp__.py1
-rw-r--r--addons/event/email_template.xml3
-rw-r--r--addons/event/event.py6
-rw-r--r--addons/event/event_mail.py10
-rw-r--r--addons/event/event_tip_data.xml13
-rw-r--r--addons/event/event_view.xml11
-rw-r--r--addons/event/report/report_event_registration.py2
-rw-r--r--addons/event/report/report_event_registration_view.xml4
-rw-r--r--addons/event/res_config.py4
-rw-r--r--addons/event/static/src/css/event.css3
-rw-r--r--addons/event/tests/test_event_flow.py1
11 files changed, 41 insertions, 17 deletions
diff --git a/addons/event/__openerp__.py b/addons/event/__openerp__.py
index 7ac32912056..6d82badeb0a 100644
--- a/addons/event/__openerp__.py
+++ b/addons/event/__openerp__.py
@@ -26,6 +26,7 @@ Key Features
'report/report_event_registration_view.xml',
'event_view.xml',
'event_data.xml',
+ 'event_tip_data.xml',
'res_config_view.xml',
'email_template.xml',
'views/event.xml',
diff --git a/addons/event/email_template.xml b/addons/event/email_template.xml
index e36256dbad6..26a9341b756 100644
--- a/addons/event/email_template.xml
+++ b/addons/event/email_template.xml
@@ -7,6 +7,7 @@
<field name="model_id" ref="event.model_event_registration"/>
<field name="email_from">${(object.event_id.organizer_id.email or object.event_id.user_id.email or '')|safe}</field>
<field name="email_to" >${object.email|safe}</field>
+ <field name="reply_to">${object.event_id.reply_to|safe}</field>
<field name="subject">Your subscription at ${object.event_id.name}</field>
<field name="body_html"><![CDATA[<p>Hello ${object.name},</p>
<p>We confirm that your subscription to the event ${object.event_id.name} has been recorded.
@@ -20,6 +21,7 @@ You will automatically receive an email providing you more practical information
<field name="model_id" ref="event.model_event_registration"/>
<field name="email_from">${(object.event_id.organizer_id.email or object.event_id.user_id.email or '')|safe}</field>
<field name="email_to" >${object.partner_id.email or object.email|safe}</field>
+ <field name="reply_to">${object.event_id.reply_to|safe}</field>
<field name="subject">Reminder of event ${object.event_id.name}</field>
<field name="body_html"><![CDATA[<p>Hello ${object.name},</p>
<p>This is a reminder for ${object.event_id.name} that you registered for is confirmed and will be held from ${object.event_id.date_begin_located} to ${object.event_id.date_end_located}.
@@ -33,6 +35,7 @@ For any further information please contact our event department.</p>
<field name="model_id" ref="event.model_event_registration"/>
<field name="email_from">${(object.event_id.organizer_id.email or object.event_id.user_id.email or '')|safe}</field>
<field name="email_to" >${object.partner_id.email or object.email|safe}</field>
+ <field name="reply_to">${object.event_id.reply_to|safe}</field>
<field name="subject">Thanks for attending ${object.event_id.name}</field>
<field name="body_html"><![CDATA[<p>Hello ${object.name},</p>
<p>We would like to thank you for your presence at our event ${object.event_id.name}.
diff --git a/addons/event/event.py b/addons/event/event.py
index ec05901d4cd..8efd1eb2942 100644
--- a/addons/event/event.py
+++ b/addons/event/event.py
@@ -183,7 +183,7 @@ class event_event(models.Model):
@api.one
@api.constrains('seats_max', 'seats_available')
def _check_seats_limit(self):
- if self.seats_max and self.seats_available < 0:
+ if self.seats_availability == 'limited' and self.seats_max and self.seats_available < 0:
raise UserError(_('No more available seats.'))
@api.one
@@ -283,7 +283,7 @@ class event_registration(models.Model):
@api.one
@api.constrains('event_id', 'state')
def _check_seats_limit(self):
- if self.event_id.seats_max and self.event_id.seats_available < (1 if self.state == 'draft' else 0):
+ if self.event_id.seats_availability == 'limited' and self.event_id.seats_max and self.event_id.seats_available < (1 if self.state == 'draft' else 0):
raise UserError(_('No more seats available for this event.'))
@api.multi
@@ -292,7 +292,7 @@ class event_registration(models.Model):
return False
if any(registration.event_id.state != 'confirm' or
not registration.event_id.auto_confirm or
- not registration.event_id.seats_available for registration in self):
+ (not registration.event_id.seats_available and registration.event_id.seats_availability == 'limited') for registration in self):
return False
return True
diff --git a/addons/event/event_mail.py b/addons/event/event_mail.py
index 548e05aa2c4..565b40c8914 100644
--- a/addons/event/event_mail.py
+++ b/addons/event/event_mail.py
@@ -21,8 +21,9 @@ class EventMailScheduler(models.Model):
that periodically checks for mailing to run. """
_name = 'event.mail'
- event_id = fields.Many2one('event.event', string='Event', required=True, readonly=True, ondelete='cascade')
- interval_nbr = fields.Integer('Timing', default=1)
+ event_id = fields.Many2one('event.event', string='Event', required=True, ondelete='cascade')
+ sequence = fields.Integer('Display order')
+ interval_nbr = fields.Integer('Interval', default=1)
interval_unit = fields.Selection([
('now', 'Immediately'),
('hours', 'Hour(s)'), ('days', 'Day(s)'),
@@ -108,4 +109,7 @@ class EventMailRegistration(models.Model):
@api.one
@api.depends('registration_id', 'scheduler_id.interval_unit', 'scheduler_id.interval_type')
def _compute_scheduled_date(self):
- self.scheduled_date = datetime.strptime(self.registration_id.date_open, tools.DEFAULT_SERVER_DATETIME_FORMAT) + _INTERVALS[self.scheduler_id.interval_unit](self.scheduler_id.interval_nbr)
+ if self.registration_id:
+ self.scheduled_date = datetime.strptime(self.registration_id.date_open, tools.DEFAULT_SERVER_DATETIME_FORMAT) + _INTERVALS[self.scheduler_id.interval_unit](self.scheduler_id.interval_nbr)
+ else:
+ self.scheduled_date = False
diff --git a/addons/event/event_tip_data.xml b/addons/event/event_tip_data.xml
new file mode 100644
index 00000000000..f7c6a66064c
--- /dev/null
+++ b/addons/event/event_tip_data.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<odoo>
+ <record model="web.tip" id="event_tip_1">
+ <field name="title"></field>
+ <field name="description">By clicking here, you can create and manage registration(s) for this event, send emails to attendee(s) and print identification badges.</field>
+ <field name="action_id" ref="event.action_event_view"/>
+ <field name="model">event.event</field>
+ <field name="mode">form</field>
+ <field name="trigger_selector">.oe_form_buttons_view:visible,div.oe_right.oe_button_box > button</field>
+ <field name="highlight_selector">div.oe_right.oe_button_box:visible > button:nth-child(1)</field>
+ <field name="placement">bottom</field>
+ </record>
+</odoo>
diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml
index 2f8a7ac3bf7..df7622a5845 100644
--- a/addons/event/event_view.xml
+++ b/addons/event/event_view.xml
@@ -102,11 +102,14 @@
</group>
</page>
<page string="Email Schedule">
- <field name="reply_to"/>
+ <group>
+ <field name="reply_to"/>
+ </group>
<field name="event_mail_ids">
<tree string="Email Schedule" editable="bottom">
+ <field name="sequence" widget="handle"/>
<field name="template_id" />
- <field name="interval_nbr"/>
+ <field name="interval_nbr" attrs="{'readonly':[('interval_unit','=','now')]}"/>
<field name="interval_unit"/>
<field name="interval_type"/>
<field name="done"/>
@@ -312,7 +315,7 @@
<field name="partner_id" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
</group>
<group string="Event Information" name="event">
- <field name="event_id" readonly="1"/>
+ <field name="event_id" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="date_open" groups="base.group_no_one"/>
<field name="date_closed" groups="base.group_no_one"/>
</group>
@@ -407,7 +410,7 @@
<field name="mail_sent"/>
</group>
<group>
- <field name="interval_nbr"/>
+ <field name="interval_nbr" attrs="{'readonly':[('interval_unit', '=', 'now')]}"/>
<field name="interval_unit"/>
<field name="interval_type"/>
<field name="scheduled_date"/>
diff --git a/addons/event/report/report_event_registration.py b/addons/event/report/report_event_registration.py
index f30ddbf5785..b0d9c82a0b6 100644
--- a/addons/event/report/report_event_registration.py
+++ b/addons/event/report/report_event_registration.py
@@ -33,6 +33,7 @@ class report_event_registration(models.Model):
event_date = fields.Datetime('Event Date', readonly=True)
event_id = fields.Many2one('event.event', 'Event', required=True)
draft_state = fields.Integer(' # No of Draft Registrations')
+ cancel_state = fields.Integer(' # No of Cancelled Registrations')
confirm_state = fields.Integer(' # No of Confirmed Registrations')
seats_max = fields.Integer('Max Seats')
nbevent = fields.Integer('Number of Events')
@@ -62,6 +63,7 @@ class report_event_registration(models.Model):
count(r.event_id) AS nbregistration,
CASE WHEN r.state IN ('draft') THEN count(r.event_id) ELSE 0 END AS draft_state,
CASE WHEN r.state IN ('open','done') THEN count(r.event_id) ELSE 0 END AS confirm_state,
+ CASE WHEN r.state IN ('cancel') THEN count(r.event_id) ELSE 0 END AS cancel_state,
e.type AS event_type,
e.seats_max AS seats_max,
e.state AS event_state,
diff --git a/addons/event/report/report_event_registration_view.xml b/addons/event/report/report_event_registration_view.xml
index 16e9fbef562..454073671d2 100644
--- a/addons/event/report/report_event_registration_view.xml
+++ b/addons/event/report/report_event_registration_view.xml
@@ -7,7 +7,7 @@
<field name="model">report.event.registration</field>
<field name="arch" type="xml">
<pivot string="Event on Registration" disable_linking="True">
- <field name="event_type" type="row"/>
+ <field name="event_id" type="row"/>
<field name="event_date" interval="month" type="col"/>
<field name="confirm_state" type="measure"/>
</pivot>
@@ -19,7 +19,7 @@
<field name="model">report.event.registration</field>
<field name="arch" type="xml">
<graph string="Event on Registration">
- <field name="event_type"/>
+ <field name="event_id"/>
<field name="event_date" interval="month"/>
<field name="confirm_state" type="measure"/>
</graph>
diff --git a/addons/event/res_config.py b/addons/event/res_config.py
index e2d8e5621ce..6686f495920 100644
--- a/addons/event/res_config.py
+++ b/addons/event/res_config.py
@@ -7,10 +7,10 @@ class event_config_settings(osv.TransientModel):
_inherit='marketing.config.settings'
_columns = {
'module_event_sale': fields.boolean(
- 'Sale different type of ticket',
+ 'Sell events tickets',
help='Install the event_sale module'),
'module_website_event_track': fields.boolean(
- 'Organize few days event with track,full agenda,own menu in website'),
+ 'Organize few days event with track, full agenda, own menu in website'),
'auto_confirmation': fields.boolean(
'Automate events and subscription confirmation', help='Unselect this option to manually manage draft event and draft subscription'),
}
diff --git a/addons/event/static/src/css/event.css b/addons/event/static/src/css/event.css
index 2d64b4f50b5..87e346d0ddf 100644
--- a/addons/event/static/src/css/event.css
+++ b/addons/event/static/src/css/event.css
@@ -5,9 +5,6 @@
/* End of customize */
cursor: default;
}
-.openerp .oe_kanban_view .oe_event_kanban_view .oe_event_fontend_link {
- /*padding-top: 2px;*/
-}
.openerp .oe_kanban_view .oe_event_kanban_view .oe_event_date_thumb {
border-top-left-radius:3px;
border-top-right-radius:3px;
diff --git a/addons/event/tests/test_event_flow.py b/addons/event/tests/test_event_flow.py
index ccddd11e00b..27b05333799 100644
--- a/addons/event/tests/test_event_flow.py
+++ b/addons/event/tests/test_event_flow.py
@@ -21,6 +21,7 @@ class TestEventFlow(TestEventCommon):
'date_begin': datetime.datetime.now() + relativedelta(days=-1),
'date_end': datetime.datetime.now() + relativedelta(days=1),
'seats_max': 2,
+ 'seats_availability': 'limited',
})
self.assertEqual(test_event.state, 'confirm', 'Event: auto_confirmation of event failed')