diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/calendar/controllers | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/calendar/controllers')
| -rw-r--r-- | addons/calendar/controllers/__init__.py | 5 | ||||
| -rw-r--r-- | addons/calendar/controllers/bus.py | 15 | ||||
| -rw-r--r-- | addons/calendar/controllers/main.py | 93 |
3 files changed, 113 insertions, 0 deletions
diff --git a/addons/calendar/controllers/__init__.py b/addons/calendar/controllers/__init__.py new file mode 100644 index 00000000..bb87d678 --- /dev/null +++ b/addons/calendar/controllers/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import main +from . import bus diff --git a/addons/calendar/controllers/bus.py b/addons/calendar/controllers/bus.py new file mode 100644 index 00000000..4ed07ebb --- /dev/null +++ b/addons/calendar/controllers/bus.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -* + +from odoo.addons.bus.controllers.main import BusController +from odoo.http import request + + +class CalendarBusController(BusController): + # -------------------------- + # Extends BUS Controller Poll + # -------------------------- + def _poll(self, dbname, channels, last, options): + if request.session.uid: + channels = list(channels) + channels.append((request.db, 'calendar.alarm', request.env.user.partner_id.id)) + return super(CalendarBusController, self)._poll(dbname, channels, last, options) diff --git a/addons/calendar/controllers/main.py b/addons/calendar/controllers/main.py new file mode 100644 index 00000000..e68a5bab --- /dev/null +++ b/addons/calendar/controllers/main.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import werkzeug + +import odoo.http as http + +from odoo.http import request +from odoo.tools.misc import get_lang + + +class CalendarController(http.Controller): + + # YTI Note: Keep id and kwargs only for retrocompatibility purpose + @http.route('/calendar/meeting/accept', type='http', auth="calendar") + def accept_meeting(self, token, id, **kwargs): + attendee = request.env['calendar.attendee'].sudo().search([ + ('access_token', '=', token), + ('state', '!=', 'accepted')]) + attendee.do_accept() + return self.view_meeting(token, id) + + @http.route('/calendar/recurrence/accept', type='http', auth="calendar") + def accept_recurrence(self, token, id, **kwargs): + attendee = request.env['calendar.attendee'].sudo().search([ + ('access_token', '=', token), + ('state', '!=', 'accepted')]) + if attendee: + attendees = request.env['calendar.attendee'].sudo().search([ + ('event_id', 'in', attendee.event_id.recurrence_id.calendar_event_ids.ids), + ('partner_id', '=', attendee.partner_id.id), + ('state', '!=', 'accepted'), + ]) + attendees.do_accept() + return self.view_meeting(token, id) + + @http.route('/calendar/meeting/decline', type='http', auth="calendar") + def decline_meeting(self, token, id, **kwargs): + attendee = request.env['calendar.attendee'].sudo().search([ + ('access_token', '=', token), + ('state', '!=', 'declined')]) + attendee.do_decline() + return self.view_meeting(token, id) + + @http.route('/calendar/recurrence/decline', type='http', auth="calendar") + def decline_recurrence(self, token, id, **kwargs): + attendee = request.env['calendar.attendee'].sudo().search([ + ('access_token', '=', token), + ('state', '!=', 'declined')]) + if attendee: + attendees = request.env['calendar.attendee'].sudo().search([ + ('event_id', 'in', attendee.event_id.recurrence_id.calendar_event_ids.ids), + ('partner_id', '=', attendee.partner_id.id), + ('state', '!=', 'declined'), + ]) + attendees.do_decline() + return self.view_meeting(token, id) + + @http.route('/calendar/meeting/view', type='http', auth="calendar") + def view_meeting(self, token, id, **kwargs): + attendee = request.env['calendar.attendee'].sudo().search([ + ('access_token', '=', token), + ('event_id', '=', int(id))]) + if not attendee: + return request.not_found() + timezone = attendee.partner_id.tz + lang = attendee.partner_id.lang or get_lang(request.env).code + event = request.env['calendar.event'].with_context(tz=timezone, lang=lang).sudo().browse(int(id)) + + # If user is internal and logged, redirect to form view of event + # otherwise, display the simplifyed web page with event informations + if request.session.uid and request.env['res.users'].browse(request.session.uid).user_has_groups('base.group_user'): + return werkzeug.utils.redirect('/web?db=%s#id=%s&view_type=form&model=calendar.event' % (request.env.cr.dbname, id)) + + # NOTE : we don't use request.render() since: + # - we need a template rendering which is not lazy, to render before cursor closing + # - we need to display the template in the language of the user (not possible with + # request.render()) + response_content = request.env['ir.ui.view'].with_context(lang=lang)._render_template( + 'calendar.invitation_page_anonymous', { + 'event': event, + 'attendee': attendee, + }) + return request.make_response(response_content, headers=[('Content-Type', 'text/html')]) + + # Function used, in RPC to check every 5 minutes, if notification to do for an event or not + @http.route('/calendar/notify', type='json', auth="user") + def notify(self): + return request.env['calendar.alarm_manager'].get_next_notif() + + @http.route('/calendar/notify_ack', type='json', auth="user") + def notify_ack(self): + return request.env['res.partner'].sudo()._set_calendar_last_notif_ack() |
