# -*- coding: utf-8 -*-
|
|
from odoo import http
|
|
from odoo.http import request
|
|
import werkzeug
|
|
from datetime import datetime
|
|
from odoo.tools import format_datetime, format_date, is_html_empty
|
|
from dateutil.relativedelta import relativedelta
|
|
from odoo.exceptions import UserError
|
|
from odoo.addons.website_event.controllers.main import WebsiteEventController
|
|
from odoo.addons.payment.controllers.portal import PaymentProcessing
|
|
from odoo.addons.auth_signup.controllers.main import AuthSignupHome
|
|
from odoo.addons.sale.controllers.portal import CustomerPortal
|
|
from odoo.addons.portal.controllers.portal import pager as portal_pager, get_records_pager
|
|
|
|
|
|
class kalachakra_event(WebsiteEventController,PaymentProcessing,AuthSignupHome):
|
|
|
|
def _extract_searched_event_tags(self, searches):
|
|
tags = request.env['event.tag']
|
|
|
|
if searches.get('tags'):
|
|
|
|
tags = request.env['event.tag'].search([('name', '=', searches['tags'])])
|
|
return tags
|
|
|
|
@http.route(['/event/calendar'], type='http', auth='public', website=True, sitemap=False,csrf=False)
|
|
def eventCalendar(self,**post):
|
|
url='https://calendar.google.com/calendar/embed?height=600&wkst=2&bgcolor=%23ffffff&ctz=Europe%2FParis&mode=WEEK&src=aXRrYWxhY2hha3JhQGdtYWlsLmNvbQ&src=bjYxODA1OXQ2dmRwNmp0Y3Foa3FjMTMwdWtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ&src=MnJzc2VvY3MzcGNiaDliaGFvNXZ1a3JpM3NAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ&src=cGJ0YjBtbTBja2NsMDZmdTNvb2ViMDJpOXNAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ&src=ZnIuZnJlbmNoI2hvbGlkYXlAZ3JvdXAudi5jYWxlbmRhci5nb29nbGUuY29t&color=%23039BE5&color=%238E24AA&color=%23E4C441&color=%237CB342&color=%230B8043" style="border:solid 1px #777" width="800" height="600" frameborder="0" scrolling="no"'
|
|
#url='https://calendar.google.com/calendar/embed?height=600&wkst=1&bgcolor=%23ffffff&ctz=Europe%2FParis&src=cmF5bmFsZC5jYW5kZWxpZXJAZ21haWwuY29t&src=Z3I4aGdpbm5hYjNwZ2ExY3M4MTAxczVlcjhAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ&src=ZnIuZnJlbmNoI2hvbGlkYXlAZ3JvdXAudi5jYWxlbmRhci5nb29nbGUuY29t&color=%23039BE5&color=%23D50000&color=%237986CB'
|
|
return http.request.render('kalachakra.event_calendar',{'url':url})
|
|
|
|
@http.route(['/event/calendartui'], type='http', auth='public', website=True, sitemap=False,csrf=False)
|
|
def eventCalendartui(self,**post):
|
|
|
|
return http.request.render('kalachakra.event_calendartui')
|
|
|
|
@http.route(['/kalachakra/contactus'], type='http', auth='public', website=True, sitemap=False,csrf=False)
|
|
def kalachakracontactus(self,**post):
|
|
|
|
return http.request.render('kalachakra.contactus')
|
|
|
|
@http.route(['/kalachakra/programme'], type='http', auth='public', website=True, sitemap=False,csrf=False)
|
|
def kalachakracontactus(self,**post):
|
|
|
|
return http.request.redirect('https://www.dropbox.com/s/ijsd6n82oyp0gw8/programme_Paris.pdf?dl=0')
|
|
|
|
|
|
@http.route(['/event/registration/step1'], type='http', auth='user', website=True, sitemap=False,csrf=False)
|
|
def event_registration_step1(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))])
|
|
request.session['partner_id']=int(partner.id)
|
|
#si le pays n'est pas renseigné, on le renseigne avec France
|
|
#c'est indispensable pour pouvoir régléer le devis
|
|
if not partner.country_id:
|
|
country=request.env['res.country'].search([('name','=','France')])
|
|
partner.country_id=country.id
|
|
|
|
data={}
|
|
data['partner']=partner
|
|
|
|
#évenement
|
|
request.session['event_id']=int(event_id)
|
|
event=request.env['event.event'].sudo().search([('id','=',int(event_id))])
|
|
data['event']=event
|
|
|
|
|
|
data['status']=partner.member_status
|
|
if data['status']=='not member':data['status']='standard'
|
|
#prix
|
|
data['price']=''
|
|
if data['status']=='standard':data['price']=event.booking_price
|
|
if data['status']=='member':data['price']=event.booking_member_price
|
|
if data['status']=='super member':data['price']=event.booking_super_member_price
|
|
|
|
if event.online_event:
|
|
return http.request.render('kalachakra.registration_distancial',data)
|
|
|
|
|
|
|
|
|
|
@http.route(['/kalachakra/makedonation'], type='http', auth='public', website=True, sitemap=False,csrf=False)
|
|
def makedonation(self,**post):
|
|
data={}
|
|
|
|
userid=request.env.context.get('uid')
|
|
#title options
|
|
title=request.env['res.partner.title'].sudo().search([])
|
|
data['titles']=title
|
|
title_male=request.env['res.partner.title'].sudo().search([('name','=','Monsieur')])
|
|
#country options
|
|
country=request.env['res.country'].sudo().search([])
|
|
data['countries']=country
|
|
country_france=request.env['res.country'].sudo().search([('name','=','France')])
|
|
|
|
|
|
if userid:
|
|
user=request.env['res.users'].search([('id','=',int(userid))])
|
|
partner=request.env['res.partner'].sudo().search([('id','=',int(user.partner_id))])
|
|
request.session['partner_id']=int(partner.id)
|
|
data['partner']=partner
|
|
|
|
|
|
|
|
|
|
|
|
else:
|
|
partner=request.env['res.partner']
|
|
partner.email=''
|
|
partner.title=title_male.id
|
|
partner.country_id=country_france.id
|
|
|
|
partner.firstname=''
|
|
partner.name=''
|
|
partner.street=''
|
|
partner.street2=''
|
|
partner.zip=''
|
|
|
|
data['partner']=partner
|
|
|
|
data['amount']=10
|
|
|
|
|
|
|
|
return http.request.render('kalachakra.makedonation_form',data)
|
|
|
|
|
|
@http.route(['/kalachakra/participation'], type='http', auth='public', website=True, sitemap=False,csrf=False)
|
|
def participation(self,type=None,**post):
|
|
data={}
|
|
request.session['kalachakra_transaction']=''
|
|
if type=='donation':
|
|
request.session['kalachakra_transaction']='donation'
|
|
data['kalachakra_transaction']='donation'
|
|
data['title']='make donation'
|
|
data['amount']=10
|
|
#donation product
|
|
data['products']=request.env['product.product'].search([('donation','=',True)])
|
|
if type=='membership':
|
|
request.session['kalachakra_transaction']='membership'
|
|
data['kalachakra_transaction']='membership'
|
|
data['title']='Become a member'
|
|
p=request.env['product.template'].search([('membership_product','=',True)])
|
|
if not p: raise UserError(_('No membership product, please add one'))
|
|
data['amount']=p.list_price
|
|
|
|
#membership product
|
|
data['products']=p
|
|
|
|
|
|
userid=request.env.context.get('uid')
|
|
#title options
|
|
title=request.env['res.partner.title'].sudo().search([])
|
|
data['titles']=title
|
|
|
|
|
|
|
|
|
|
if userid:
|
|
user=request.env['res.users'].search([('id','=',int(userid))])
|
|
partner=request.env['res.partner'].sudo().search([('id','=',int(user.partner_id))])
|
|
request.session['partner_id']=int(partner.id)
|
|
data['partner']=partner
|
|
data['registred']=True
|
|
|
|
|
|
else:
|
|
data['registred']=False
|
|
title_male=request.env['res.partner.title'].sudo().search([('name','=','Monsieur')])
|
|
#country options
|
|
country=request.env['res.country'].sudo().search([])
|
|
data['countries']=country
|
|
country_france=request.env['res.country'].sudo().search([('name','=','France')])
|
|
|
|
|
|
partner=request.env['res.partner']
|
|
partner.email=''
|
|
partner.title=title_male.id
|
|
partner.country_id=country_france.id
|
|
|
|
partner.firstname=''
|
|
partner.name=''
|
|
partner.street=''
|
|
partner.street2=''
|
|
partner.zip=''
|
|
|
|
data['partner']=partner
|
|
|
|
|
|
return http.request.render('kalachakra.participation_form',data)
|
|
|
|
@http.route(['/kalachakra/payment_choice'], type='http', auth='public', website=True, sitemap=False,csrf=False)
|
|
def payment_choice(self,**post):
|
|
|
|
#gestion du retour page précédente depuis page de paiement : on supprime les éléments générés ( don , adhésion)
|
|
if not post.get('product_id'):
|
|
if request.session['kalachakra_transaction']=='donation':
|
|
request.env['donation.donation'].search([('id','=',int(request.session['donation_id']))]).unlink()
|
|
if request.session['kalachakra_transaction']=='membership':
|
|
request.env['kalachakra.membership'].search([('id','=',int(request.session['membership_id']))]).unlink()
|
|
|
|
return request.redirect('/kalachakra/participation?type='+request.session['kalachakra_transaction'])
|
|
|
|
|
|
userid=request.env.context.get('uid')
|
|
if userid:
|
|
user=request.env['res.users'].search([('id','=',int(userid))])
|
|
partner=request.env['res.partner'].sudo().search([('id','=',int(user.partner_id))])
|
|
request.session['partner_id']=int(partner.id)
|
|
else:
|
|
|
|
#si pas connecté on chercher le contact indiqué par l'email
|
|
partner=request.env['res.partner'].sudo().search([('email','=',post.get('email'))],limit=1)
|
|
#si pas de contact on le créé dans la base
|
|
if not partner:
|
|
vals={}
|
|
vals['email']=post.get('email')
|
|
vals['name']=post.get('name')
|
|
vals['firstname']=post.get('firstname')
|
|
vals['title']=int(post.get('title_id'))
|
|
vals['street']=post.get('street')
|
|
vals['street2']=post.get('street2')
|
|
vals['zip']=post.get('zip')
|
|
vals['country_id']=int(post.get('country_id'))
|
|
vals['phone']=post.get('phone')
|
|
partner=request.env['res.partner'].sudo().create(vals)
|
|
|
|
|
|
data={}
|
|
if request.session['kalachakra_transaction']=='donation':
|
|
data['submit_txt']='Donate now'
|
|
if request.session['kalachakra_transaction']=='membership':
|
|
data['submit_txt']='Pay now'
|
|
|
|
data['success_url']='/kalachakra/payment/success'
|
|
data['error_url']='/kalachakra/payment/error'
|
|
|
|
if request.session['kalachakra_transaction'] in ['donation','membership']:
|
|
data['acquirers'] = list(request.env['payment.acquirer'].search([
|
|
('state', 'in', ['enabled', 'test']),
|
|
('company_id', '=', request.env.company.id),
|
|
('provider', '!=', 'transfer')
|
|
|
|
]))
|
|
else:
|
|
data['acquirers'] = list(request.env['payment.acquirer'].search([
|
|
('state', 'in', ['enabled', 'test']),
|
|
('company_id', '=', request.env.company.id)
|
|
]))
|
|
|
|
|
|
|
|
payment_tokens = partner.payment_token_ids
|
|
payment_tokens |= partner.commercial_partner_id.sudo().payment_token_ids
|
|
|
|
data['payment_tokens']=payment_tokens
|
|
|
|
#create donation
|
|
if request.session['kalachakra_transaction'] in ['donation']:
|
|
vals={}
|
|
vals['partner_id']=partner.id
|
|
vals['donation_date']=datetime.now()
|
|
vals['tax_receipt_option']='annual'
|
|
#mode de paiement CB
|
|
electronic_method=request.env['account.payment.method'].search([('code','=','electronic')],limit=1)
|
|
if electronic_method:
|
|
cb_mode=request.env['account.payment.mode'].search([('payment_method_id','=',int(electronic_method.id))],limit=1)
|
|
if cb_mode:
|
|
vals['payment_mode_id']=cb_mode.id
|
|
else:
|
|
raise Warning('please configure credit card mode')
|
|
vals['state']='draft'
|
|
vals['payment_ref']='internet'
|
|
donation_draft=request.env['donation.donation'].sudo().create(vals)
|
|
vals={}
|
|
#create line donation
|
|
vals['donation_id']=donation_draft.id
|
|
product=request.env['product.product'].search([('id','=',int(post.get('product_id')))])
|
|
vals['product_id']=int(post.get('product_id'))
|
|
vals['display_name']=product.name
|
|
vals['quantity']=1
|
|
vals['unit_price']=post.get('amount')
|
|
vals['tax_receipt_ok']=product.tax_receipt_ok
|
|
|
|
|
|
donation_line=request.env['donation.line'].sudo().create(vals)
|
|
|
|
data['order_id']=donation_draft.id
|
|
request.session['donation_id'] = donation_draft.id
|
|
|
|
#create membership
|
|
if request.session['kalachakra_transaction'] in ['membership']:
|
|
vals={}
|
|
|
|
vals['partner_id']=partner.id
|
|
vals['product_id']=int(post.get('product_id'))
|
|
vals['start_date']=datetime.now()
|
|
vals['end_date']=datetime.now()+relativedelta(years=1)
|
|
vals['amount']=post.get('amount')
|
|
membership=request.env['kalachakra.membership'].sudo().create(vals)
|
|
data['order_id']=membership.id
|
|
request.session['membership_id'] = membership.id
|
|
|
|
return http.request.render('kalachakra.payment_choice_form',data)
|
|
|
|
|
|
@http.route(['/kalachakra/payment/transaction/',
|
|
'/kalachakra/payment/transaction/<int:so_id>',
|
|
'/kalachakra/payment/transaction/<int:so_id>/<string:access_token>'], type='json', auth="public", website=True)
|
|
def kalachakra_payment_transaction(self, acquirer_id,order_id, save_token=False, so_id=None, access_token=None, token=None, **kwargs):
|
|
""" Json method that creates a payment.transaction, used to create a
|
|
transaction when the user clicks on 'pay now' button. After having
|
|
created the transaction, the event continues and the user is redirected
|
|
to the acquirer website.
|
|
|
|
:param int acquirer_id: id of a payment.acquirer record. If not set the
|
|
user is redirected to the checkout page
|
|
"""
|
|
# Ensure a payment acquirer is selected
|
|
|
|
|
|
if not acquirer_id:
|
|
return False
|
|
|
|
try:
|
|
acquirer_id = int(acquirer_id)
|
|
except:
|
|
return False
|
|
|
|
if request.session['kalachakra_transaction'] in ['donation']:
|
|
# Retrieve the donation
|
|
donation_id=order_id
|
|
donation=request.env['donation.donation'].search([('id','=',int(donation_id))], limit=1)
|
|
|
|
|
|
# Ensure there is something to proceed
|
|
if not donation or (donation and not donation.line_ids):
|
|
return False
|
|
|
|
assert donation.partner_id.id != request.website.partner_id.id
|
|
|
|
# Create transaction
|
|
vals = {'acquirer_id': acquirer_id,
|
|
'return_url': '/kalachakra/payment/validate'}
|
|
|
|
if save_token:
|
|
vals['type'] = 'form_save'
|
|
if token:
|
|
vals['payment_token_id'] = int(token)
|
|
|
|
transaction = donation._create_payment_transaction(vals)
|
|
|
|
# store the new transaction into the transaction list and if there's an old one, we remove it
|
|
# until the day the ecommerce supports multiple orders at the same time
|
|
last_tx_id = request.session.get('__website_sale_last_tx_id')
|
|
last_tx = request.env['payment.transaction'].browse(last_tx_id).sudo().exists()
|
|
if last_tx:
|
|
PaymentProcessing.remove_payment_transaction(last_tx)
|
|
PaymentProcessing.add_payment_transaction(transaction)
|
|
request.session['__website_sale_last_tx_id'] = transaction.id
|
|
return transaction.render_donation_button(donation)
|
|
|
|
if request.session['kalachakra_transaction'] in ['membership']:
|
|
# Retrieve the donation
|
|
membership_id=order_id
|
|
membership=request.env['kalachakra.membership'].search([('id','=',int(membership_id))], limit=1)
|
|
|
|
|
|
# Ensure there is something to proceed
|
|
if not membership :
|
|
return False
|
|
|
|
assert membership.partner_id.id != request.website.partner_id.id
|
|
|
|
# Create transaction
|
|
vals = {'acquirer_id': acquirer_id,
|
|
'return_url': '/kalachakra/payment/validate'}
|
|
|
|
if save_token:
|
|
vals['type'] = 'form_save'
|
|
if token:
|
|
vals['payment_token_id'] = int(token)
|
|
|
|
transaction = membership._create_payment_transaction(vals)
|
|
|
|
# store the new transaction into the transaction list and if there's an old one, we remove it
|
|
# until the day the ecommerce supports multiple orders at the same time
|
|
last_tx_id = request.session.get('__website_sale_last_tx_id')
|
|
last_tx = request.env['payment.transaction'].browse(last_tx_id).sudo().exists()
|
|
if last_tx:
|
|
PaymentProcessing.remove_payment_transaction(last_tx)
|
|
PaymentProcessing.add_payment_transaction(transaction)
|
|
request.session['__website_sale_last_tx_id'] = transaction.id
|
|
return transaction.render_membership_button(membership)
|
|
|
|
http.route('/kalachakra/payment/token', type='http', auth='public', website=True, sitemap=False)
|
|
def kalachakra_payment_token(self, pm_id=None, **kwargs):
|
|
""" Method that handles payment using saved tokens
|
|
|
|
:param int pm_id: id of the payment.token that we want to use to pay.
|
|
"""
|
|
|
|
try:
|
|
pm_id = int(pm_id)
|
|
except ValueError:
|
|
return request.redirect('/shop/?error=invalid_token_id')
|
|
|
|
# We retrieve the token the user want to use to pay
|
|
if not request.env['payment.token'].sudo().search_count([('id', '=', pm_id)]):
|
|
return request.redirect('/shop/?error=token_not_found')
|
|
|
|
# Create transaction
|
|
vals = {'payment_token_id': pm_id, 'return_url': '/kalachakra/payment/validate'}
|
|
|
|
if request.session['kalachakra_transaction'] in ['donation']:
|
|
tx = donation._create_payment_transaction(vals)
|
|
|
|
if request.session['kalachakra_transaction'] in ['membership']:
|
|
tx = membership._create_payment_transaction(vals)
|
|
|
|
request.session['transaction_id']=tx.id
|
|
PaymentProcessing.add_payment_transaction(tx)
|
|
return request.redirect('kalachakra/payment/process')
|
|
|
|
@http.route(['/kalachakra/payment/process'], type="http", auth="public", website=True, sitemap=False)
|
|
def kalachakra_payment_status_page(self, **kwargs):
|
|
# When the customer is redirect to this website page,
|
|
# we retrieve the payment transaction list from his session
|
|
tx_ids_list = self.get_payment_transaction_ids()
|
|
payment_transaction_ids = request.env['payment.transaction'].sudo().browse(tx_ids_list).exists()
|
|
|
|
render_ctx = {
|
|
'payment_tx_ids': payment_transaction_ids.ids,
|
|
}
|
|
return request.render("payment.payment_process_page", render_ctx)
|
|
|
|
@http.route('/kalachakra/payment/validate', type='http', auth="public", website=True, sitemap=False)
|
|
def kalachakra_payment_validate(self, transaction_id=None, sale_order_id=None, **post):
|
|
""" Method that should be called by the server when receiving an update
|
|
for a transaction. State at this point :
|
|
|
|
- UDPATE ME
|
|
"""
|
|
if request.session['kalachakra_transaction'] in ['donation']:
|
|
|
|
donation_id=int(request.session['donation_id'])
|
|
#validation du don car la tranasction est ok
|
|
donation=request.env['donation.donation'].search([('id','=',donation_id)])
|
|
donation.state='done'
|
|
request.session['donation_id']=None
|
|
|
|
if request.session['kalachakra_transaction'] in ['membership']:
|
|
membership_id=int(request.session['membership_id'])
|
|
#validation du don car la tranasction est ok
|
|
membership=request.env['kalachakra.membership'].search([('id','=',membership_id)])
|
|
membership.state='done'
|
|
request.session['membership_id']=None
|
|
|
|
transaction_id=int(request.session['__website_sale_last_tx_id'] )
|
|
tx = request.env['payment.transaction'].sudo().browse(transaction_id)
|
|
|
|
|
|
|
|
|
|
PaymentProcessing.remove_payment_transaction(tx)
|
|
return request.redirect('/kalachakra/payment/confirmation')
|
|
|
|
|
|
@http.route(['/kalachakra/payment/confirmation'], type='http', auth="public", website=True, sitemap=False)
|
|
def kalachakra_payment_confirmation(self, **post):
|
|
|
|
return request.render("kalachakra.thankyou")
|
|
|
|
|