@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from odoo import http , _
from odoo.http import request
import requests
from odoo.osv import expression
import logging
from odoo import models , fields , api
@ -18,6 +19,7 @@ from odoo.addons.website_event.controllers.main import WebsiteEventController
from odoo.addons.website.controllers.main import QueryURL
from odoo.addons.payment.controllers.portal import PaymentProcessing
#from odoo.addons.sale.controllers.portal import CustomerPortal
import odoo.addons.portal.controllers.portal
from odoo.addons.account.controllers.portal import CustomerPortal
from odoo.tools.misc import formatLang , format_date as odoo_format_date , get_lang
from odoo.addons.portal.controllers.portal import pager as portal_pager , get_records_pager
@ -29,6 +31,13 @@ from collections import OrderedDict
_logger = logging . getLogger ( __name__ )
def create_donation ( self ) :
return True
class Kalachakra_CustomerPortal ( odoo . addons . portal . controllers . portal . CustomerPortal ) :
MANDATORY_BILLING_FIELDS = [ " name " , " firstname " , " birthday_year " , " email " , " street " , " city " , " country_id " ]
OPTIONAL_BILLING_FIELDS = [ " phone " , " mobile " , " zipcode " , " state_id " , " vat " , " company_name " ]
class Kalachakra_PortalAccount ( CustomerPortal ) :
@http.route ( [ ' /invoice_event ' ] , type = ' http ' , auth = ' user ' , website = True , sitemap = False , csrf = False )
@ -145,11 +154,14 @@ class Kalachakra_PortalAccount(CustomerPortal):
values [ ' invoice_count ' ] = invoice_count
return values
class KalaAuthSignupHome ( Home ) :
@http.route ( ' /web/signup ' , type = ' http ' , auth = ' public ' , website = True , sitemap = False )
def kalachakra_web_auth_signup ( self , * args , * * kw ) :
qcontext = self . get_auth_signup_qcontext ( )
_logger . info ( qcontext )
if not qcontext . get ( ' token ' ) and not qcontext . get ( ' signup_enabled ' ) :
raise werkzeug . exceptions . NotFound ( )
@ -184,9 +196,45 @@ class KalaAuthSignupHome(Home):
return response
class kalachakra_event ( WebsiteEventController , PaymentProcessing ) :
def sitemap_event ( env , rule , qs ) :
if not qs or qs . lower ( ) in ' /events ' :
yield { ' loc ' : ' /events ' }
@http.route ( [ ''' /event/<model( " event.event " ):event>/register ''' ] , type = ' http ' , auth = " user " , website = True , sitemap = False )
def event_register ( self , event , * * post ) :
if not event . can_access_from_current_website ( ) :
raise werkzeug . exceptions . NotFound ( )
values = self . _prepare_event_register_values ( event , * * post )
return request . render ( " website_event.event_description_full " , values )
def _prepare_event_register_values ( self , event , * * post ) :
""" Return the require values to render the template. """
#contact lié à l'utilisateur
userid = request . env . context . get ( ' uid ' )
cancel_option = 0
if userid :
user = request . env [ ' res.users ' ] . search ( [ ( ' id ' , ' = ' , int ( userid ) ) ] )
partner = request . env [ ' res.partner ' ] . sudo ( ) . search ( [ ( ' id ' , ' = ' , int ( user . partner_id ) ) ] )
#si le contact est déjà inscrit et qu'il n'a pas payé: il peut annuler son inscription
reg = request . env [ ' event.registration ' ] . sudo ( ) . search ( [ ( ' event_id ' , ' = ' , int ( event . id ) ) , ( ' state ' , ' != ' , ' cancel ' ) , ( ' partner_id ' , ' = ' , int ( partner . id ) ) ] )
if reg : cancel_option = 1
urls = event . _get_event_resource_urls ( )
return {
' cancel_option ' : cancel_option ,
' event ' : event ,
' main_object ' : event ,
' range ' : range ,
' google_url ' : urls . get ( ' google_url ' ) ,
' iCal_url ' : urls . get ( ' iCal_url ' ) ,
}
#afficher la liste des prochains événement sur la home page (sans les retraites ! )
@http.route ( ' /event/csv_booking_registrants ' , website = False , auth = ' user ' , methods = [ ' GET ' ] )
def export_csv_booking_registrants ( self , id , * args , * * kw ) :
@ -296,6 +344,25 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
tags = request . env [ ' event.tag ' ] . search ( [ ( ' name ' , ' in ' , lst_tags ) ] )
return tags
def update_partner_data ( self , partner , post ) :
_logger . error ( partner )
_logger . error ( ' post: ' + str ( post ) )
if len ( post ) > 0 :
partner . name = post . get ( ' name ' )
partner . firstname = post . get ( ' firstname ' )
partner . birthday_year = post . get ( ' birthday_year ' )
partner . street = post . get ( ' street ' )
partner . street2 = post . get ( ' street2 ' )
partner . zip = post . get ( ' zip ' )
partner . city = post . get ( ' city ' )
partner . phone = post . get ( ' phone ' )
partner . mobile = post . get ( ' mobile ' )
partner . country_id = int ( post . get ( ' country_id ' ) )
partner . contact_form_update_date = fields . Date . today ( )
@http.route ( [ ' /kalachakra/mediatheque/event ' ] , type = ' http ' , auth = " public " , website = True , sitemap = sitemap_event )
def kalachakraMediathequeEvent ( self , * * id ) :
id = id . get ( ' id ' )
@ -601,6 +668,20 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
return http . request . redirect ( ' https://www.dropbox.com/s/ijsd6n82oyp0gw8/programme_Paris.pdf?dl=0 ' )
@http.route ( [ ' /event/registration/cancel ' ] , type = ' http ' , auth = ' user ' , website = True , sitemap = False , csrf = False )
def event_registration_cancel ( self , event_id , * args , * * kw ) :
#contact lié à l'utilisateur
userid = request . env . context . get ( ' uid ' )
user = request . env [ ' res.users ' ] . search ( [ ( ' id ' , ' = ' , int ( userid ) ) ] )
partner = request . env [ ' res.partner ' ] . sudo ( ) . search ( [ ( ' id ' , ' = ' , int ( user . partner_id ) ) ] )
reg = request . env [ ' event.registration ' ] . sudo ( ) . search ( [ ( ' event_id ' , ' = ' , int ( event_id ) ) , ( ' state ' , ' != ' , ' cancel ' ) , ( ' partner_id ' , ' = ' , int ( partner . id ) ) ] , limit = 1 )
reg . action_cancel ( )
return http . request . render ( ' kalachakra.registration_cancel ' )
@http.route ( [ ' /event/registration/step1 ' ] , type = ' http ' , auth = ' user ' , website = True , sitemap = False , csrf = False )
def event_registration_step1 ( self , event_id , * args , * * kw ) :
data = { }
@ -608,6 +689,10 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
userid = request . env . context . get ( ' uid ' )
user = request . env [ ' res.users ' ] . search ( [ ( ' id ' , ' = ' , int ( userid ) ) ] )
partner = request . env [ ' res.partner ' ] . sudo ( ) . search ( [ ( ' id ' , ' = ' , int ( user . partner_id ) ) ] )
#mise à jour des infos du contact à partir du formulaire
self . update_partner_data ( partner , request . session [ ' partner_data ' ] )
data [ ' partner ' ] = partner
#évenement
event = request . env [ ' event.event ' ] . sudo ( ) . search ( [ ( ' id ' , ' = ' , int ( event_id ) ) ] )
@ -637,30 +722,62 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
@http.route ( [ ' /event/registration/contactform ' ] , type = ' http ' , auth = ' user ' , website = True , sitemap = False , csrf = False )
#def event_registration_contactform(self,event_id,*args,**kw):
def event_registration_contactform ( self , * args , * * kw ) :
def event_registration_contactform ( self , event_id , * args , * * kw ) :
data = { }
#contact lié à l'utilisateur
event = request . env [ ' event.event ' ] . sudo ( ) . search ( [ ( ' id ' , ' = ' , int ( event_id ) ) ] )
request . session [ ' event_id ' ] = int ( event_id )
data [ ' event ' ] = event
userid = request . env . context . get ( ' uid ' )
data [ ' lang ' ] = request . env . context . get ( ' lang ' )
user = request . env [ ' res.users ' ] . search ( [ ( ' id ' , ' = ' , int ( userid ) ) ] )
partner = request . env [ ' res.partner ' ] . sudo ( ) . search ( [ ( ' id ' , ' = ' , int ( user . partner_id ) ) ] )
data [ ' partner ' ] = partner
#évenement
# event=request.env['event.event'].sudo().search([('id','=',int(event_id))])
# request.session['event_id']=int(event_id)
#data['event']=event
country = request . env [ ' res.country ' ] . sudo ( ) . search ( [ ] )
data [ ' countries ' ] = country
data [ ' country_id ' ] = int ( partner . country_id )
last_update_date = partner . contact_form_update_date
#_logger.error('last update:'+str(last_update_date))
#_logger.error(str(last_update_date +relativedelta(days=365)))
if not last_update_date or last_update_date + relativedelta ( days = 365 ) < = datetime . now ( ) . date ( ) :
return http . request . render ( ' kalachakra.registration_contactform ' , data )
else :
url = ' /event/registration/step0?event_id= ' + str ( event . id )
return request . redirect ( url )
@http.route ( [ ' /event/registration/step0 ' ] , type = ' http ' , auth = ' user ' , website = True , sitemap = False , csrf = False )
def event_registration_step0 ( self , event_id , * * post ) :
event = request . env [ ' event.event ' ] . sudo ( ) . search ( [ ( ' id ' , ' = ' , int ( event_id ) ) ] )
if event . online_event and not event . online_only : next_step = " step1 "
if event . online_only and not event . headphone_option : next_step = " step2 "
if not event . online_event and not event . online_only and not event . headphone_option : next_step = " step2 "
if event . online_only and event . headphone_option : next_step = " step2 "
if not event . online_event and not event . online_only and event . headphone_option : next_step = " step1b "
url = ' /event/registration/ ' + next_step + ' ?event_id= ' + str ( event . id )
request . session [ ' partner_data ' ] = post
return request . redirect ( url )
return http . request . render ( ' kalachakra.registration_contactform ' , data )
@http.route ( [ ' /event/registration/step1b ' ] , type = ' http ' , auth = ' user ' , website = True , sitemap = False , csrf = False )
def event_registration_step1b ( self , event_id , * args , * * kw ) :
def event_registration_step1b ( self , event_id , * * post ) :
data = { }
#contact lié à l'utilisateur
userid = request . env . context . get ( ' uid ' )
user = request . env [ ' res.users ' ] . search ( [ ( ' id ' , ' = ' , int ( userid ) ) ] )
partner = request . env [ ' res.partner ' ] . sudo ( ) . search ( [ ( ' id ' , ' = ' , int ( user . partner_id ) ) ] )
data [ ' partner ' ] = partner
#mise à jour des infos du contact à partir du formulaire
self . update_partner_data ( partner , request . session [ ' partner_data ' ] )
#évenement
event = request . env [ ' event.event ' ] . sudo ( ) . search ( [ ( ' id ' , ' = ' , int ( event_id ) ) ] )
request . session [ ' event_id ' ] = int ( event_id )
@ -678,6 +795,10 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
userid = request . env . context . get ( ' uid ' )
user = request . env [ ' res.users ' ] . search ( [ ( ' id ' , ' = ' , int ( userid ) ) ] )
partner = request . env [ ' res.partner ' ] . sudo ( ) . search ( [ ( ' id ' , ' = ' , int ( user . partner_id ) ) ] )
#mise à jour des infos du contact à partir du formulaire
self . update_partner_data ( partner , request . session [ ' partner_data ' ] )
request . session [ ' partner_id ' ] = int ( partner . id )
request . session [ ' status ' ] = partner . member_status
data [ ' partner ' ] = partner
@ -710,7 +831,7 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
data [ ' membership_and_participation_amount ' ] = str ( int ( data [ ' membership_amount ' ] ) + int ( event . participation_member_price ) ) + ' ( ' + str ( int ( data [ ' membership_amount ' ] ) ) + ' + ' + str ( int ( event . participation_member_price ) ) + ' ) '
#enregistrement de l'inscription si pas déjà inscrit :
res = request . env [ ' event.registration ' ] . sudo ( ) . search ( [ ( ' event_id ' , ' = ' , int ( request . session [ ' event_id ' ] ) ) , ( ' partner_id ' , ' = ' , int ( request . session [ ' partner_id ' ] ) ) ] , limit = 1 )
res = request . env [ ' event.registration ' ] . sudo ( ) . search ( [ ( ' event_id ' , ' = ' , int ( request . session [ ' event_id ' ] ) ) , ( ' state ' , ' != ' , ' cancel ' ) , ( ' partner_id' , ' = ' , int ( request . session [ ' partner_id ' ] ) ) ] , limit = 1 )
data [ ' already_registered ' ] = True
data [ ' payment_status ' ] = res . payment_status