[MERGE] event: improve emails sent by events and fix access rights issues
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
{
|
||||
'name': 'Events Organisation',
|
||||
'version': '0.1',
|
||||
'name': 'Events Organization',
|
||||
'version': '1.0',
|
||||
'website': 'https://www.odoo.com/page/events',
|
||||
'category': 'Marketing',
|
||||
'summary': 'Trainings, Conferences, Meetings, Exhibitions, Registrations',
|
||||
@@ -9,13 +9,13 @@
|
||||
Organization and management of Events.
|
||||
======================================
|
||||
|
||||
The event module allows you to efficiently organise events and all related tasks: planification, registration tracking,
|
||||
The event module allows you to efficiently organize events and all related tasks: planning, registration tracking,
|
||||
attendances, etc.
|
||||
|
||||
Key Features
|
||||
------------
|
||||
* Manage your Events and Registrations
|
||||
* Use emails to automatically confirm and send acknowledgements for any event registration
|
||||
* Use emails to automatically confirm and send acknowledgments for any event registration
|
||||
""",
|
||||
'depends': ['base_setup', 'mail', 'report'],
|
||||
'data': [
|
||||
|
||||
@@ -29,11 +29,123 @@
|
||||
<field name="reply_to">${object.event_id.reply_to|safe}</field>
|
||||
<field name="subject">Your registration at ${object.event_id.name}</field>
|
||||
<field name="body_html"><![CDATA[
|
||||
<p>Dear ${object.name},</p>
|
||||
<p>Thank you for your inquiry.</p>
|
||||
<p>We confirm your registration to the event <b>${object.event_id.name}</b>. You will receive emails with practical information.</p>
|
||||
<p>If you have any questions, please let us know.</p>
|
||||
<p>Best regards,</p>]]></field>
|
||||
% set date_begin = format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%SZ')
|
||||
% set date_end = format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%SZ')
|
||||
<div style="background:#F3F5F6;color:#515166;padding:25px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;">
|
||||
<table style="width:600px;margin:5px auto;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/">
|
||||
<img src="/logo" alt="${object.company_id.name}" style="vertical-align:baseline;max-width:100px;" />
|
||||
</a>
|
||||
</td>
|
||||
<td style="text-align:right;vertical-align:middle;">
|
||||
% if 'website_url' in object.event_id and object.event_id.website_url:
|
||||
<a href="/event" style="text-decoration:none;color:#717188;">More Events</a>
|
||||
% endif
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table style="width:600px;margin:0px auto;background:white;border:1px solid #e1e1e1;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding:15px 20px 0px 20px;">
|
||||
<h2 style="font-weight:300;">
|
||||
Hi ${object.name}, here is your order confirmation for
|
||||
% if 'website_url' in object.event_id and object.event_id.website_url:
|
||||
<a href="${object.event_id.website_url}" style="color:#a24689;text-decoration:none;">${object.event_id.name}</a>
|
||||
% else:
|
||||
<strong>${object.event_id.name}</strong>
|
||||
% endif
|
||||
</h2>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding:15px 20px 0px 20px;">
|
||||
<table style="width:100%;border-top:1px solid #e1e1e1;">
|
||||
<tr>
|
||||
<td style="padding:25px 0px;vertical-align:top;">
|
||||
<img src="/web_editor/font_to_img/61505/rgb(81,81,102)/34" style="padding:4px;max-width:inherit;" height="34">
|
||||
</td>
|
||||
<td style="padding:30px 10px 25px 10px;width:50%;vertical-align:top;">
|
||||
% if object.event_id.address_id.street:
|
||||
<p style="margin:0px 0px 0px 0px;">${object.event_id.address_id.street},</p>
|
||||
% set location = object.event_id.address_id.street
|
||||
% endif
|
||||
% if object.event_id.address_id.street2:
|
||||
<p style="margin:0px 0px 0px 0px;">${object.event_id.address_id.street2},</p>
|
||||
% set location = '%s, %s' % (location, object.event_id.address_id.street2)
|
||||
% endif
|
||||
% if object.event_id.address_id.city:
|
||||
${object.event_id.address_id.city},
|
||||
% set location = '%s, %s' % (location, object.event_id.address_id.city)
|
||||
% endif
|
||||
% if object.event_id.address_id.state_id.name:
|
||||
${object.event_id.address_id.state_id.name},
|
||||
% set location = '%s, %s' % (location, object.event_id.address_id.state_id.name)
|
||||
% endif
|
||||
% if object.event_id.address_id.zip:
|
||||
${object.event_id.address_id.zip},
|
||||
% set location = '%s, %s' % (location, object.event_id.address_id.zip)
|
||||
% endif
|
||||
% if object.event_id.address_id.country_id.name:
|
||||
<p style="margin:0px 0px 0px 0px;">${object.event_id.address_id.country_id.name}</p>
|
||||
% set location = '%s, %s' % (location, object.event_id.address_id.country_id.name)
|
||||
% endif
|
||||
</td>
|
||||
<td style="padding:25px 0px;vertical-align:top;">
|
||||
<img src="/web_editor/font_to_img/61555/rgb(81,81,102)/34" style="padding:4px;max-width:inherit;" height="34">
|
||||
</td>
|
||||
<td style="padding:25px 10px 25px 10px;width:50%;line-height:20px;vertical-align:top;">
|
||||
<div><strong>From</strong> ${object.event_id.date_begin_located}</div>
|
||||
<div><strong>To</strong> ${object.event_id.date_end_located}</div>
|
||||
<div style="font-size:12px;color:#9e9e9e"><i><strong>TZ</strong> ${object.event_id.date_tz}</i></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
% if object.event_id.organizer_id.email:
|
||||
<table style="width:100%;border-top:1px solid #e1e1e1;">
|
||||
<tr>
|
||||
<td style="padding:10px 0px 25px 0px;">
|
||||
<h2 style="font-weight:300;margin:10px 0px">Questions about this event?</h2>
|
||||
<div>Please contact the organizer at <a href="mailto:${object.event_id.organizer_id.email}" style="text-decoration:none;color:#a24689;">${object.event_id.organizer_id.email}</a></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
% endif
|
||||
<table style="width:100%;border-top:1px solid #e1e1e1;">
|
||||
<tr>
|
||||
<td style="padding:25px 0px;">
|
||||
<strong>Add this event to your calendar</strong>
|
||||
<a href="https://www.google.com/calendar/render?action=TEMPLATE&text=${object.event_id.name}&dates=${date_begin}/${date_end}&location=${location}" style="padding:3px 5px;border:1px solid #a24689;color:#a24689;text-decoration:none;border-radius:3px;" target="new"><img src="/web_editor/font_to_img/61525/rgb(162,70,137)/16" style="vertical-align:middle;" height="16"> Google</a>
|
||||
<a href="https://bay02.calendar.live.com/calendar/calendar.aspx?rru=addevent&summary=${object.event_id.name}&dtstart=${date_begin}&dtend=${date_end}&location=${location}" style="padding:3px 5px;border:1px solid #a24689;color:#a24689;text-decoration:none;border-radius:3px;" target="new"><img src="/web_editor/font_to_img/61525/rgb(162,70,137)/16" style="vertical-align:middle;" height="16"> Outlook</a>
|
||||
<a href="https://calendar.yahoo.com/?v=60&view=d&type=20&title=${object.event_id.name}&in_loc=${location}&st=${format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%S')}&et=${format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%S')}" style="padding:3px 5px;border:1px solid #a24689;color:#a24689;text-decoration:none;border-radius:3px;" target="new"><img src="/web_editor/font_to_img/61525/rgb(162,70,137)/16" style="vertical-align:middle;" height="16"> Yahoo</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div style="width:598px;margin:0px auto;border-left:1px solid #dddddd;border-right:1px solid #dddddd;border-bottom:1px solid #dddddd;">
|
||||
<a href="https://maps.google.com/maps?q=${location}" target="new">
|
||||
<img src="http://maps.googleapis.com/maps/api/staticmap?autoscale=1&size=598x100&maptype=roadmap&format=png&visual_refresh=true&markers=size:mid%7Ccolor:0xa5117d%7Clabel:%7C${location}" style="vertical-align:bottom;" />
|
||||
</a>
|
||||
</div>
|
||||
<table style="width:600px;margin:0px auto;text-align:center;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding-top:10px;font-size: 12px;">
|
||||
<div>This email was sent to <a href="mailto:${object.email}" style="text-decoration:none;color:#a24689;">${object.email}</a></div>
|
||||
<p style="margin:0px 0px 9px 0px;padding-top:10px;">Copyright © ${object.company_id.name}</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<record id="event_reminder" model="mail.template">
|
||||
@@ -43,17 +155,130 @@
|
||||
<field name="email_to" >${object.partner_id.email or object.email|safe}</field>
|
||||
<field name="lang">${object.partner_id.lang}</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="subject">Reminder for ${object.event_id.name}</field>
|
||||
<field name="body_html"><![CDATA[
|
||||
<p>Dear ${object.name},</p>
|
||||
<p>Thank you for your registration to the event ${object.event_id.name}.</p>
|
||||
<p>The event will take place at ${object.event_id.address_id.city}
|
||||
% if object.event_id.address_id.street
|
||||
, ${object.event_id.address_id.street}
|
||||
% endif
|
||||
from ${object.event_id.date_begin_located} to ${object.event_id.date_end_located}.</p>
|
||||
<p>If you have any questions, please let us know.</p>
|
||||
<p>Best regards,</p>]]></field>
|
||||
% set date_begin = format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%SZ')
|
||||
% set date_end = format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%SZ')
|
||||
<div style="background:#F3F5F6;color:#515166;padding:25px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;">
|
||||
<table style="width:600px;margin:5px auto;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/">
|
||||
<img src="/logo" alt="${object.company_id.name}" style="vertical-align:baseline;max-width:100px;" />
|
||||
</a>
|
||||
</td>
|
||||
<td style="text-align:right;vertical-align:middle;">
|
||||
% if 'website_url' in object.event_id and object.event_id.website_url:
|
||||
<a href="/event" style="text-decoration:none;color:#717188;">More Events</a>
|
||||
% endif
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table style="width:600px;margin:0px auto;background:white;border:1px solid #e1e1e1;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding:15px 20px 0px 20px;">
|
||||
<h2 style="font-weight:300;">
|
||||
Hi ${object.name},
|
||||
</h2>
|
||||
<p style="font-size:16px;">
|
||||
Please keep in mind that the event
|
||||
% if 'website_url' in object.event_id and object.event_id.website_url:
|
||||
<a href="${object.event_id.website_url}" style="color:#a24689;text-decoration:none;">${object.event_id.name}</a>
|
||||
% else:
|
||||
<strong>${object.event_id.name}</strong>
|
||||
% endif
|
||||
takes place on
|
||||
<strong>${object.get_date_range_str()}</strong>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding:15px 20px 0px 20px;">
|
||||
<table style="width:100%;border-top:1px solid #e1e1e1;">
|
||||
<tr>
|
||||
<td style="padding:25px 0px;vertical-align:top;">
|
||||
<img src="/web_editor/font_to_img/61505/rgb(81,81,102)/34" style="padding:4px;max-width:inherit;" height="34">
|
||||
</td>
|
||||
<td style="padding:30px 10px 25px 10px;width:50%;vertical-align:top;">
|
||||
% if object.event_id.address_id.street:
|
||||
<p style="margin:0px 0px 0px 0px;">${object.event_id.address_id.street},</p>
|
||||
% set location = object.event_id.address_id.street
|
||||
% endif
|
||||
% if object.event_id.address_id.street2:
|
||||
<p style="margin:0px 0px 0px 0px;">${object.event_id.address_id.street2},</p>
|
||||
% set location = '%s, %s' % (location, object.event_id.address_id.street2)
|
||||
% endif
|
||||
% if object.event_id.address_id.city:
|
||||
${object.event_id.address_id.city},
|
||||
% set location = '%s, %s' % (location, object.event_id.address_id.city)
|
||||
% endif
|
||||
% if object.event_id.address_id.state_id.name:
|
||||
${object.event_id.address_id.state_id.name},
|
||||
% set location = '%s, %s' % (location, object.event_id.address_id.state_id.name)
|
||||
% endif
|
||||
% if object.event_id.address_id.zip:
|
||||
${object.event_id.address_id.zip},
|
||||
% set location = '%s, %s' % (location, object.event_id.address_id.zip)
|
||||
% endif
|
||||
% if object.event_id.address_id.country_id.name:
|
||||
<p style="margin:0px 0px 0px 0px;">${object.event_id.address_id.country_id.name}</p>
|
||||
% set location = '%s, %s' % (location, object.event_id.address_id.country_id.name)
|
||||
% endif
|
||||
</td>
|
||||
<td style="padding:25px 0px;vertical-align:top;">
|
||||
<img src="/web_editor/font_to_img/61555/rgb(81,81,102)/34" style="padding:4px;max-width:inherit;" height="34">
|
||||
</td>
|
||||
<td style="padding:25px 10px 25px 10px;width:50%;line-height:20px;vertical-align:top;">
|
||||
<div><strong>From</strong> ${object.event_id.date_begin_located}</div>
|
||||
<div><strong>To</strong> ${object.event_id.date_end_located}</div>
|
||||
<div style="font-size:12px;color:#9e9e9e"><i><strong>TZ</strong> ${object.event_id.date_tz}</i></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
% if object.event_id.organizer_id.email:
|
||||
<table style="width:100%;border-top:1px solid #e1e1e1;">
|
||||
<tr>
|
||||
<td style="padding:10px 0px 25px 0px;">
|
||||
<h2 style="font-weight:300;margin:10px 0px">Questions about this event?</h2>
|
||||
<div>Please contact the organizer at <a href="mailto:${object.event_id.organizer_id.email}" style="text-decoration:none;color:#a24689;">${object.event_id.organizer_id.email}</a></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
% endif
|
||||
<table style="width:100%;border-top:1px solid #e1e1e1;">
|
||||
<tr>
|
||||
<td style="padding:25px 0px;">
|
||||
<strong>Add this event to your calendar</strong>
|
||||
<a href="https://www.google.com/calendar/render?action=TEMPLATE&text=${object.event_id.name}&dates=${date_begin}/${date_end}&location=${location}" style="padding:3px 5px;border:1px solid #a24689;color:#a24689;text-decoration:none;border-radius:3px;" target="new"><img src="/web_editor/font_to_img/61525/rgb(162,70,137)/16" style="vertical-align:middle;" height="16"> Google</a>
|
||||
<a href="https://bay02.calendar.live.com/calendar/calendar.aspx?rru=addevent&summary=${object.event_id.name}&dtstart=${date_begin}&dtend=${date_end}&location=${location}" style="padding:3px 5px;border:1px solid #a24689;color:#a24689;text-decoration:none;border-radius:3px;" target="new"><img src="/web_editor/font_to_img/61525/rgb(162,70,137)/16" style="vertical-align:middle;" height="16"> Outlook</a>
|
||||
<a href="https://calendar.yahoo.com/?v=60&view=d&type=20&title=${object.event_id.name}&in_loc=${location}&st=${format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%S')}&et=${format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%S')}" style="padding:3px 5px;border:1px solid #a24689;color:#a24689;text-decoration:none;border-radius:3px;" target="new"><img src="/web_editor/font_to_img/61525/rgb(162,70,137)/16" style="vertical-align:middle;" height="16"> Yahoo</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div style="width:598px;margin:0px auto;border-left:1px solid #dddddd;border-right:1px solid #dddddd;border-bottom:1px solid #dddddd;">
|
||||
<a href="https://maps.google.com/maps?q=${location}" target="new">
|
||||
<img src="http://maps.googleapis.com/maps/api/staticmap?autoscale=1&size=598x100&maptype=roadmap&format=png&visual_refresh=true&markers=size:mid%7Ccolor:0xa5117d%7Clabel:%7C${location}" style="vertical-align:bottom;" />
|
||||
</a>
|
||||
</div>
|
||||
<table style="width:600px;margin:0px auto;text-align:center;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding-top:10px;font-size: 12px;">
|
||||
<div>This email was sent to <a href="mailto:${object.email}" style="text-decoration:none;color:#a24689;">${object.email}</a></div>
|
||||
<p style="margin:0px 0px 9px 0px;padding-top:10px;">Copyright © ${object.company_id.name}</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import pytz
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.addons.mail.models.mail_template import format_tz
|
||||
from odoo.exceptions import AccessError, UserError, ValidationError
|
||||
from odoo.tools.translate import html_translate
|
||||
|
||||
@@ -57,6 +58,16 @@ class EventEvent(models.Model):
|
||||
'interval_unit': 'now',
|
||||
'interval_type': 'after_sub',
|
||||
'template_id': self.env.ref('event.event_subscription')
|
||||
}), (0, 0, {
|
||||
'interval_nbr': 2,
|
||||
'interval_unit': 'days',
|
||||
'interval_type': 'before_event',
|
||||
'template_id': self.env.ref('event.event_reminder')
|
||||
}), (0, 0, {
|
||||
'interval_nbr': 15,
|
||||
'interval_unit': 'days',
|
||||
'interval_type': 'before_event',
|
||||
'template_id': self.env.ref('event.event_reminder')
|
||||
})]
|
||||
|
||||
# Seats and computation
|
||||
@@ -367,9 +378,9 @@ class EventRegistration(models.Model):
|
||||
contact_id = self.partner_id.address_get().get('contact', False)
|
||||
if contact_id:
|
||||
contact = self.env['res.partner'].browse(contact_id)
|
||||
self.name = self.name or contact.name
|
||||
self.email = self.email or contact.email
|
||||
self.phone = self.phone or contact.phone
|
||||
self.name = contact.name or self.name
|
||||
self.email = contact.email or self.email
|
||||
self.phone = contact.phone or self.phone
|
||||
|
||||
@api.multi
|
||||
def message_get_suggested_recipients(self):
|
||||
@@ -410,3 +421,23 @@ class EventRegistration(models.Model):
|
||||
'target': 'new',
|
||||
'context': ctx,
|
||||
}
|
||||
|
||||
@api.multi
|
||||
def get_date_range_str(self):
|
||||
self.ensure_one()
|
||||
today = fields.Datetime.from_string(fields.Datetime.now())
|
||||
event_date = fields.Datetime.from_string(self.event_begin_date)
|
||||
|
||||
if today.month == event_date.month:
|
||||
if event_date.day == today.day:
|
||||
return _('Today')
|
||||
elif event_date.day - today.day == 1:
|
||||
return _('Tomorrow')
|
||||
elif event_date.isocalendar()[1] == today.isocalendar()[1]:
|
||||
return _('This week')
|
||||
else:
|
||||
return _('This month')
|
||||
elif event_date.month - today.month == 1:
|
||||
return _('Next month')
|
||||
else:
|
||||
return format_tz(self.event_begin_date, tz='UTC', format='%Y%m%dT%H%M%SZ')
|
||||
|
||||
@@ -37,4 +37,8 @@ class event_config_settings(models.TransientModel):
|
||||
|
||||
@api.multi
|
||||
def set_default_auto_confirmation(self):
|
||||
self.env['ir.values'].set_default('event.config.settings', 'auto_confirmation', self.auto_confirmation)
|
||||
if self.env.user._is_admin() or self.env['res.users'].has_group('event.group_event_manager'):
|
||||
IrValues = self.env['ir.values'].sudo()
|
||||
else:
|
||||
IrValues = self.env['ir.values']
|
||||
IrValues.set_default('event.config.settings', 'auto_confirmation', self.auto_confirmation)
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_event_type,event.type,model_event_type,event.group_event_user,1,0,0,0
|
||||
access_event_type_manager,event.type manager,model_event_type,event.group_event_manager,1,1,1,1
|
||||
access_event_event,event.event,model_event_event,event.group_event_user,1,1,1,1
|
||||
access_event_event_portal,event.event.portal,model_event_event,,1,0,0,0
|
||||
access_event_event_user,event.event.user,model_event_event,event.group_event_user,1,0,0,0
|
||||
access_event_event_manager,event.event.manager,model_event_event,event.group_event_manager,1,1,1,1
|
||||
access_event_registration,event.registration,model_event_registration,event.group_event_user,1,1,1,1
|
||||
access_report_event_registration,report.event.registration,model_report_event_registration,event.group_event_user,1,1,1,1
|
||||
access_event_event_portal,event.event,model_event_event,,1,0,0,0
|
||||
access_event_registration_portal,event.registration,model_event_registration,,1,0,0,0
|
||||
access_event_mail,event.mail,model_event_mail,event.group_event_user,1,0,0,0
|
||||
access_event_mail_manager,event.mail manager,model_event_mail,event.group_event_manager,1,1,1,1
|
||||
access_event_mail_registration,event.mail.registration,model_event_mail_registration,event.group_event_user,1,0,0,0
|
||||
access_event_mail_registration_manager,event.mail.registration.manager,model_event_mail_registration,event.group_event_manager,1,1,1,1
|
||||
access_event_mail_registration_manager,event.mail.registration.manager,model_event_mail_registration,event.group_event_manager,1,1,1,1
|
||||
access_report_event_registration,report.event.registration,model_report_event_registration,event.group_event_user,1,1,1,1
|
||||
|
@@ -1,5 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from odoo import fields
|
||||
from odoo.tests import common
|
||||
|
||||
|
||||
@@ -18,6 +21,7 @@ class TestEventCommon(common.TransactionCase):
|
||||
self.group_employee_id = self.env['ir.model.data'].xmlid_to_res_id('base.group_user')
|
||||
self.group_event_user_id = self.env['ir.model.data'].xmlid_to_res_id('event.group_event_user')
|
||||
self.group_event_manager_id = self.env['ir.model.data'].xmlid_to_res_id('event.group_event_manager')
|
||||
group_system = self.env.ref('base.group_system')
|
||||
|
||||
# Test users to use through the various tests
|
||||
self.user_eventuser = self.Users.with_context({'no_reset_password': True}).create({
|
||||
@@ -34,5 +38,17 @@ class TestEventCommon(common.TransactionCase):
|
||||
'alias_name': 'bastien',
|
||||
'email': 'bastien.eventmanager@example.com',
|
||||
'tz': 'Europe/Brussels',
|
||||
'groups_id': [(6, 0, [self.group_employee_id, self.group_event_manager_id])]
|
||||
'groups_id': [(6, 0, [
|
||||
self.group_employee_id,
|
||||
self.group_event_manager_id,
|
||||
group_system.id])]
|
||||
})
|
||||
|
||||
self.event_0 = self.env['event.event'].create({
|
||||
'name': 'TestEvent',
|
||||
'date_begin': fields.Datetime.to_string(datetime.today() + timedelta(days=1)),
|
||||
'date_end': fields.Datetime.to_string(datetime.today() + timedelta(days=15)),
|
||||
'registration_ids': [(0, 0, {
|
||||
'partner_id': self.user_eventuser.partner_id.id,
|
||||
})]
|
||||
})
|
||||
|
||||
@@ -4,7 +4,7 @@ import datetime
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
from odoo.addons.event.tests.common import TestEventCommon
|
||||
from odoo.exceptions import ValidationError, UserError
|
||||
from odoo.exceptions import ValidationError, UserError, AccessError
|
||||
from odoo.tools import mute_logger
|
||||
|
||||
|
||||
@@ -13,7 +13,10 @@ class TestEventFlow(TestEventCommon):
|
||||
@mute_logger('openerp.addons.base.ir.ir_model', 'openerp.models')
|
||||
def test_00_basic_event_auto_confirm(self):
|
||||
""" Basic event management with auto confirmation """
|
||||
self.env['ir.values'].set_default('event.config.settings', 'auto_confirmation', True)
|
||||
event_config = self.env['event.config.settings'].sudo(self.user_eventmanager).create({
|
||||
'auto_confirmation': 1
|
||||
})
|
||||
event_config.execute()
|
||||
|
||||
# EventUser creates a new event: ok
|
||||
test_event = self.Event.sudo(self.user_eventmanager).create({
|
||||
@@ -87,3 +90,31 @@ class TestEventFlow(TestEventCommon):
|
||||
self.assertEqual(
|
||||
test_reg1.state, 'draft',
|
||||
'Event: new registration should not be confirmed with auto_confirmation parameter being False')
|
||||
|
||||
def test_event_access_rights(self):
|
||||
# EventManager required to create or update events
|
||||
with self.assertRaises(AccessError):
|
||||
self.Event.sudo(self.user_eventuser).create({
|
||||
'name': 'TestEvent',
|
||||
'date_begin': datetime.datetime.now() + relativedelta(days=-1),
|
||||
'date_end': datetime.datetime.now() + relativedelta(days=1),
|
||||
'seats_max': 10,
|
||||
})
|
||||
with self.assertRaises(AccessError):
|
||||
self.event_0.sudo(self.user_eventuser).write({
|
||||
'name': 'TestEvent Modified',
|
||||
})
|
||||
|
||||
# Settings access rights required to enable some features
|
||||
self.user_eventmanager.write({'groups_id': [
|
||||
(3, self.env.ref('base.group_system').id),
|
||||
(4, self.env.ref('base.group_erp_manager').id)
|
||||
]})
|
||||
with self.assertRaises(AccessError):
|
||||
event_config = self.env['event.config.settings'].sudo(self.user_eventmanager).create({
|
||||
'auto_confirmation': 1
|
||||
})
|
||||
event_config.execute()
|
||||
|
||||
def test_event_data(self):
|
||||
self.assertEqual(self.event_0.registration_ids.get_date_range_str(), u'Tomorrow')
|
||||
|
||||
@@ -7,7 +7,6 @@ from odoo.addons.website.models.website import slug
|
||||
|
||||
|
||||
class Event(models.Model):
|
||||
|
||||
_name = 'event.event'
|
||||
_inherit = ['event.event', 'website.seo.metadata', 'website.published.mixin']
|
||||
|
||||
|
||||
Reference in New Issue
Block a user