2013-06-27 10:42:06 +00:00
import simplejson
import urllib
2013-10-08 07:28:41 +00:00
import openerp
2013-07-03 06:07:54 +00:00
import openerp . addons . web . http as http
from openerp . addons . web . http import request
2013-06-27 10:42:06 +00:00
import openerp . addons . web . controllers . main as webmain
2013-10-09 07:19:37 +00:00
import json
2013-10-11 12:38:19 +00:00
from openerp . addons . web . http import SessionExpiredException
from werkzeug . exceptions import BadRequest
2013-06-27 10:42:06 +00:00
2013-12-19 14:47:39 +00:00
class meeting_invitation ( http . Controller ) :
2013-10-09 07:19:37 +00:00
2013-10-11 12:38:19 +00:00
def check_security ( self , db , token ) :
registry = openerp . modules . registry . RegistryManager . get ( db )
attendee_pool = registry . get ( ' calendar.attendee ' )
error_message = False
with registry . cursor ( ) as cr :
attendee_id = attendee_pool . search ( cr , openerp . SUPERUSER_ID , [ ( ' access_token ' , ' = ' , token ) ] )
if not attendee_id :
error_message = """ Invalid Invitation Token. """
2014-01-10 17:09:12 +00:00
elif request . session . uid and request . session . login != ' anonymous ' :
# if valid session but user is not match
attendee = attendee_pool . browse ( cr , openerp . SUPERUSER_ID , attendee_id [ 0 ] )
user = registry . get ( ' res.users ' ) . browse ( cr , openerp . SUPERUSER_ID , request . session . uid )
if attendee . partner_id . user_id . id != user . id :
error_message = """ Invitation cannot be forwarded via email. This event/meeting belongs to %s and you are logged in as %s . Please ask organizer to add you. """ % ( attendee . email , user . email )
2013-12-20 16:08:18 +00:00
2013-10-11 12:38:19 +00:00
if error_message :
raise BadRequest ( error_message )
return True
2013-12-19 14:47:39 +00:00
@http.route ( ' /calendar/meeting/accept ' , type = ' http ' , auth = " none " )
2013-10-08 07:28:41 +00:00
def accept ( self , db , token , action , id ) :
2013-10-11 12:38:19 +00:00
self . check_security ( db , token )
2013-10-08 07:28:41 +00:00
registry = openerp . modules . registry . RegistryManager . get ( db )
attendee_pool = registry . get ( ' calendar.attendee ' )
with registry . cursor ( ) as cr :
2013-10-10 13:21:00 +00:00
attendee_id = attendee_pool . search ( cr , openerp . SUPERUSER_ID , [ ( ' access_token ' , ' = ' , token ) , ( ' state ' , ' != ' , ' accepted ' ) ] )
2013-10-09 07:19:37 +00:00
if attendee_id :
attendee_pool . do_accept ( cr , openerp . SUPERUSER_ID , attendee_id )
return self . view ( db , token , action , id , view = ' form ' )
2013-12-19 14:47:39 +00:00
@http.route ( ' /calendar/meeting/decline ' , type = ' http ' , auth = " none " )
2013-10-08 09:38:30 +00:00
def declined ( self , db , token , action , id ) :
2013-10-11 12:38:19 +00:00
self . check_security ( db , token )
2013-10-08 07:28:41 +00:00
registry = openerp . modules . registry . RegistryManager . get ( db )
attendee_pool = registry . get ( ' calendar.attendee ' )
with registry . cursor ( ) as cr :
2013-10-10 13:21:00 +00:00
attendee_id = attendee_pool . search ( cr , openerp . SUPERUSER_ID , [ ( ' access_token ' , ' = ' , token ) , ( ' state ' , ' != ' , ' declined ' ) ] )
2013-10-09 07:19:37 +00:00
if attendee_id :
attendee_pool . do_decline ( cr , openerp . SUPERUSER_ID , attendee_id )
return self . view ( db , token , action , id , view = ' form ' )
2013-12-19 14:47:39 +00:00
@http.route ( ' /calendar/meeting/view ' , type = ' http ' , auth = " none " )
2013-10-09 07:19:37 +00:00
def view ( self , db , token , action , id , view = ' calendar ' ) :
2013-10-11 12:38:19 +00:00
self . check_security ( db , token )
2013-10-09 07:19:37 +00:00
registry = openerp . modules . registry . RegistryManager . get ( db )
meeting_pool = registry . get ( ' crm.meeting ' )
attendee_pool = registry . get ( ' calendar.attendee ' )
with registry . cursor ( ) as cr :
attendee_data = meeting_pool . get_attendee ( cr , openerp . SUPERUSER_ID , id ) ;
attendee = attendee_pool . search_read ( cr , openerp . SUPERUSER_ID , [ ( ' access_token ' , ' = ' , token ) ] , [ ] )
2013-11-13 13:10:15 +00:00
2013-10-09 07:19:37 +00:00
if attendee :
attendee_data [ ' current_attendee ' ] = attendee [ 0 ]
2013-07-03 06:07:54 +00:00
js = " \n " . join ( ' <script type= " text/javascript " src= " %s " ></script> ' % i for i in webmain . manifest_list ( ' js ' , db = db ) )
2013-11-15 16:59:05 +00:00
css = " \n " . join ( ' <link rel= " stylesheet " href= " %s " > ' % i for i in webmain . manifest_list ( ' css ' , db = db ) )
2013-06-27 10:42:06 +00:00
return webmain . html_template % {
' js ' : js ,
' css ' : css ,
2013-07-03 06:07:54 +00:00
' modules ' : simplejson . dumps ( webmain . module_boot ( db ) ) ,
2013-12-19 14:47:39 +00:00
' init ' : " s.calendar.event( ' %s ' , ' %s ' , ' %s ' , ' %s ' , ' %s ' ); " % ( db , action , id , ' form ' , json . dumps ( attendee_data ) ) ,
2013-06-27 10:42:06 +00:00
}
2013-12-20 16:08:18 +00:00
# Function used, in RPC to check every 5 minutes, if notification to do for an event or not
2014-01-10 17:09:12 +00:00
@http.route ( ' /calendar/notify ' , type = ' json ' , auth = " none " )
def notify ( self ) :
2013-11-23 11:36:27 +00:00
registry = openerp . modules . registry . RegistryManager . get ( request . session . db )
uid = request . session . uid
context = request . session . context
with registry . cursor ( ) as cr :
2014-01-10 17:09:12 +00:00
res = registry . get ( " calendar.alarm_manager " ) . do_run_next_event ( cr , uid , context = context )
return res
@http.route ( ' /calendar/notify_ack ' , type = ' json ' , auth = " none " )
def notify_ack ( self , type = ' ' ) :
registry = openerp . modules . registry . RegistryManager . get ( request . session . db )
uid = request . session . uid
context = request . session . context
with registry . cursor ( ) as cr :
res = registry . get ( " res.partner " ) . update_cal_last_event ( cr , uid , context = context )
return res
2013-06-27 10:42:06 +00:00