diff options
| author | RomainLibert <rli@odoo.com> | 2018-06-12 11:30:02 +0000 |
|---|---|---|
| committer | RomainLibert <rli@odoo.com> | 2018-12-17 11:46:48 +0000 |
| commit | a03faab03fdf8a164c2f1298cc138b3fa83b0bea (patch) | |
| tree | b62bc7a1dedb4756ee19103199084adf2c9d3734 /addons/website_event | |
| parent | 496920a8f5691b7654b83453f9dd855af8a3c504 (diff) | |
[IMP] event, website_event: Make ics file generation available in event
Ics file generation should be possible even when only event is
installed as it is a basic feature of events.
Moreover we need to be able to generate such files in order to replace
the old outlook api used in the event templates, api which is not
supported anymore.
We decided to use ics files because it is supported by most calendar
schedulers hence working with outlook.
Linked to task #1853063
closes odoo/odoo#28477
Diffstat (limited to 'addons/website_event')
| -rw-r--r-- | addons/website_event/controllers/main.py | 14 | ||||
| -rw-r--r-- | addons/website_event/models/event.py | 36 |
2 files changed, 2 insertions, 48 deletions
diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index acff56f9321..1174f91d40e 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -10,7 +10,7 @@ from dateutil.relativedelta import relativedelta from odoo import fields, http, _ from odoo.addons.http_routing.models.ir_http import slug -from odoo.http import content_disposition, request +from odoo.http import request class WebsiteEventController(http.Controller): @@ -283,15 +283,3 @@ class WebsiteEventController(http.Controller): 'google_url': urls.get('google_url'), 'iCal_url': urls.get('iCal_url') }) - - @http.route(['''/event/<model("event.event", "[('website_id', 'in', (False, current_website_id))]"):event>/ics'''], type='http', auth="public", website=True) - def make_event_ics_file(self, event, **kwargs): - if not event or not event.registration_ids: - return request.not_found() - files = event._get_ics_file() - content = files[event.id] - return request.make_response(content, [ - ('Content-Type', 'application/octet-stream'), - ('Content-Length', len(content)), - ('Content-Disposition', content_disposition('%s.ics' % event.name)) - ]) diff --git a/addons/website_event/models/event.py b/addons/website_event/models/event.py index 3b02869cf2e..86f172b96ca 100644 --- a/addons/website_event/models/event.py +++ b/addons/website_event/models/event.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -import logging import pytz import werkzeug @@ -8,14 +7,6 @@ from odoo import api, fields, models, _ from odoo.addons.http_routing.models.ir_http import slug from odoo.exceptions import UserError -_logger = logging.getLogger(__name__) - -try: - import vobject -except ImportError: - _logger.warning("`vobject` Python module not found, iCal file generation disabled. Consider installing this module if you want to generate iCal files") - vobject = None - GOOGLE_CALENDAR_URL = 'https://www.google.com/calendar/render?' @@ -133,31 +124,6 @@ class Event(models.Model): 'url': '/report/html/%s/%s?enable_editor' % ('event.event_event_report_template_badge', self.id), } - @api.multi - def _get_ics_file(self): - """ Returns iCalendar file for the event invitation. - :returns a dict of .ics file content for each event - """ - result = {} - if not vobject: - return result - - for event in self: - cal = vobject.iCalendar() - cal_event = cal.add('vevent') - - if not event.date_begin or not event.date_end: - raise UserError(_("No date has been specified for the event, no file will be generated.")) - cal_event.add('created').value = fields.Datetime.now().replace(tzinfo=pytz.timezone('UTC')) - cal_event.add('dtstart').value = fields.Datetime.from_string(event.date_begin).replace(tzinfo=pytz.timezone('UTC')) - cal_event.add('dtend').value = fields.Datetime.from_string(event.date_end).replace(tzinfo=pytz.timezone('UTC')) - cal_event.add('summary').value = event.name - if event.address_id: - cal_event.add('location').value = event.sudo().address_id.contact_address - - result[event.id] = cal.serialize().encode('utf-8') - return result - def _get_event_resource_urls(self, attendees): url_date_start = self.date_begin.strftime('%Y%m%dT%H%M%SZ') url_date_stop = self.date_end.strftime('%Y%m%dT%H%M%SZ') @@ -171,7 +137,7 @@ class Event(models.Model): params.update(location=self.sudo().address_id.contact_address.replace('\n', ' ')) encoded_params = werkzeug.url_encode(params) google_url = GOOGLE_CALENDAR_URL + encoded_params - iCal_url = '/event/%s/ics?%s' % (slug(self), encoded_params) + iCal_url = '/event/%d/ics?%s' % (self.id, encoded_params) return {'google_url': google_url, 'iCal_url': iCal_url} def _default_website_meta(self): |
