Browse Source

individual booking

dev-rcn
root 3 years ago
parent
commit
b119ec9ea4
9 changed files with 183 additions and 62 deletions
  1. +28
    -21
      controllers/booking.py
  2. +2
    -0
      controllers/kalachakra.py
  3. +12
    -9
      models/booking_event_registration.py
  4. +4
    -0
      models/event.py
  5. +1
    -0
      static/js/Datejs
  6. +96
    -30
      static/js/booking.js
  7. +7
    -0
      views/booking_event.xml
  8. +6
    -0
      views/booking_event_registration.xml
  9. +27
    -2
      views/booking_website_registration.xml

+ 28
- 21
controllers/booking.py View File

@ -103,7 +103,7 @@ class booking(WebsiteEventController,AuthSignupHome):
#si déjà inscrit, redirection vers page d'information
reg=request.env['event.registration'].sudo().search([('event_id','=',int(post.get('event_id'))),('email','=',post.get('email'))])
if reg:
if reg and not request.session['individual_booking_event']:
return http.request.render('kalachakra.booking_registration_already_registered')
vals['event_id']=post.get('event_id')
@ -243,29 +243,36 @@ class booking(WebsiteEventController,AuthSignupHome):
res.write({'option_ids':[(4,res3.id)]})
i=i+1
invoice=request.env['event.registration'].sudo().action_event_registration_generate_invoice(request.session['res_id'],False,False)
request.session['invoice_id']=invoice.id
#ajout de l'adhésion
if membership:
membership_product=request.env['product.product'].sudo().search([('membership_product','=',True)],limit=1)
if not membership_product: raise UserError(_('No membership product, please add one'))
vals={}
vals['invoice_id']=int(invoice.id)
vals['partner_id']=int(res.partner_id)
vals['product_id']=int(membership_product.id)
vals['start_date']=datetime.now()
vals['end_date']=datetime.now()+relativedelta(years=1)
vals['amount']=membership_product.list_price
membership=request.env['kalachakra.membership'].sudo().create(vals)
#redirection sur la page de paiement de la facture :
url="/my/invoices/"+str(invoice.id)#+"?access_token="+str(invoice.access_token)
if res.event_id.individual_booking_event:
url="/booking/individual_confirmation/"
else:
invoice=request.env['event.registration'].sudo().action_event_registration_generate_invoice(request.session['res_id'],False,False)
request.session['invoice_id']=invoice.id
#ajout de l'adhésion
if membership:
membership_product=request.env['product.product'].sudo().search([('membership_product','=',True)],limit=1)
if not membership_product: raise UserError(_('No membership product, please add one'))
vals={}
vals['invoice_id']=int(invoice.id)
vals['partner_id']=int(res.partner_id)
vals['product_id']=int(membership_product.id)
vals['start_date']=datetime.now()
vals['end_date']=datetime.now()+relativedelta(years=1)
vals['amount']=membership_product.list_price
membership=request.env['kalachakra.membership'].sudo().create(vals)
#redirection sur la page de paiement de la facture :
url="/my/invoices/"+str(invoice.id)
return request.redirect(url)
@http.route(['/booking/individual_confirmation'], type='http',auth='user', website=True, sitemap=False,csrf=False)
def individual_confirmation(self,**post):
return http.request.render('kalachakra.individual_confirmation')
@http.route(['/booking/payment/transaction/',
'/booking/payment/transaction/<int:so_id>',
'/booking/payment/transaction/<int:so_id>/<string:access_token>'], type='json', auth="public", website=True)


+ 2
- 0
controllers/kalachakra.py View File

@ -979,6 +979,7 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
donation=request.env['donation.donation'].sudo().search([('id','=',donation_id)])
donation.state='done'
request.session['donation_id']=None
_logger.error("donor="+donation.partner_id.name+" donation_id="+str(donation_id)+" state="+donation.state)
if request.session['kalachakra_transaction'] in ['membership']:
membership_id=int(request.session['membership_id'])
@ -986,6 +987,7 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
membership=request.env['kalachakra.membership'].sudo().search([('id','=',membership_id)])
membership.state='done'
request.session['membership_id']=None
_logger.error("membership partner="+membership.partner_id.name+" state="+membership.state)
transaction_id=int(request.session['__website_sale_last_tx_id'] )
tx = request.env['payment.transaction'].sudo().browse(transaction_id)


+ 12
- 9
models/booking_event_registration.py View File

@ -18,6 +18,7 @@ class EventRegistration(models.Model):
)
booking_event=fields.Boolean(related='event_id.booking_event',store=True)
individual_booking_event=fields.Boolean(related='event_id.individual_booking_event',store=True)
event_end=fields.Boolean(related='event_id.stage_id.pipe_end')
medical_concern=fields.Selection(
@ -102,9 +103,9 @@ class EventRegistration(models.Model):
individual_room=fields.Boolean('Individual room',compute='compute_individual_room')
#individual booking fields
start_day_individual_booking=fields.Date('Start day individual booking')
end_day_individual_booking=fields.Date('End day individual booking')
days_duration=fields.Integer('duration in days')
start_day_individual_booking=fields.Date('Start day')
end_day_individual_booking=fields.Date('End day')
days_duration=fields.Integer('Duration in days')
price_individual_booking=fields.Monetary('price individual booking',currency_field='currency_id')
@ -668,16 +669,16 @@ class EventRegistration(models.Model):
raise Warning('please configure check mode')
invoice_line=self.env['account.move.line'].with_context(check_move_validity=False).sudo().create(vals)
# #debit_line
vals_d={}
vals_d['move_id']=invoice.id
if event.individual_booking_event:
if product_price<event.booking_down_payment:
vals['debit']=0
vals_d['debit']=0
else:
vals['debit']=product_price-event.booking_down_payment
vals_d['debit']=product_price-event.booking_down_payment
else:
vals_d['debit']=product_price-event.booking_down_payment
vals_d['credit']=0
@ -696,12 +697,13 @@ class EventRegistration(models.Model):
vals_d['price_unit']=product_price-event.booking_down_payment
vals_d['exclude_from_invoice_tab']=True
invoice_line=self.env['account.move.line'].with_context(check_move_validity=False).sudo().create(vals_d)
l=self.env['account.move.line'].sudo().search([('move_id','=',invoice.id),('balance','<',0)])
l.partner_id=int(reg.partner_id)
#ajout des options
if selected_registrant_options:
for option in selected_registrant_options:
@ -751,6 +753,7 @@ class EventRegistration(models.Model):
vals_d['exclude_from_invoice_tab']=True
invoice_line=self.env['account.move.line'].with_context(check_move_validity=True).sudo().create([vals_d])
l=self.env['account.move.line'].search([('move_id','=',invoice.id),('balance','<',0)])
l.partner_id=int(reg.partner_id)


+ 4
- 0
models/event.py View File

@ -296,6 +296,10 @@ class KalachakraEvent(models.Model):
individual_member_3weeks_price=fields.Monetary('Member 3 weeks price',currency_field='currency_id')
individual_super_member_3weeks_price=fields.Monetary('Super member 3 Weeks price',currency_field='currency_id')
individual_month_price=fields.Monetary('1 month price',currency_field='currency_id')
individual_member_month_price=fields.Monetary('1 month price',currency_field='currency_id')
individual_super_member_month_price=fields.Monetary('1 month price',currency_field='currency_id')
@api.onchange('booking_event')


+ 1
- 0
static/js/Datejs

@ -0,0 +1 @@
Subproject commit 56b945cf4ebb6b8eb6404c47697bd518e3d413b0

+ 96
- 30
static/js/booking.js View File

@ -1,5 +1,7 @@
odoo.define('booking.main', function (require) {
var core = require('web.core');
var QWeb = core.qweb;
var _t = core._t;
$(document).ready(function() {
@ -65,26 +67,58 @@ odoo.define('booking.main', function (require) {
function fct_days()
{
var s = $("#start_day").val().split('/');
var e = $("#end_day").val().split('/');
var end_day=e[2]+'-'+e[1]+'-'+e[0]
var start_day=s[2]+'-'+s[1]+'-'+s[0]
// var s = $("#start_day").val().split('/');
// var e = $("#end_day").val().split('/');
// var end_day=e[2]+'-'+e[1]+'-'+e[0]
// var start_day=s[2]+'-'+s[1]+'-'+s[0]
var diff = Math.floor((Date.parse(end_day) - Date.parse(start_day)) / 86400000)+1;
if (diff<0 || diff>100)
var diff = Math.floor((Date.parse($("#end_day").val()) - Date.parse($("#start_day").val())) / 86400000)+1;
console.log(diff)
var start_date = Date.parse($("#start_day").val())
var end_date = Date.parse($("#end_day").val())
var start_date_p1month=start_date.addMonths(1)
diff1=end_date-start_date_p1month
if (diff<=0)
{
$("#days").html(_t('Les dates saisies ne sont pas valides'))
$("#booking_total_price").hide()
$("#continue_button").hide()
}
else if (end_date>start_date_p1month)
{
$("#days").html(_t('Pour les retraites de plus d\'un mois, veuillez contacter le centre à l\'adresse suivante :<br>info@centre-kalachakra.net'))
$("#booking_total_price").hide()
$("#continue_button").hide()
}
else if (diff1==0)
{
return 'les dates saisies ne sont pas correctes'
$("#days").html(_t('soit 1 mois'))
$("#booking_total_price").show()
$("#continue_button").show()
}
html_days_message='Soit '+diff.toString()+' jours'
else
{
html_days_message=_t('soit ')+diff.toString()+_t(' jours')
console.log(html_days_message)
$("#days").html(html_days_message)
compute_individual_booking_prices_without_option(diff)
compute_total_price_from_status_without_options()
compute_total_price_with_options()
$("#booking_total_price").show()
$("#continue_button").show()
$("#days_duration").val(diff)
}
compute_individual_booking_prices_without_option(diff,start_day,end_day)
compute_total_price_from_status_without_options()
compute_total_price_with_options()
@ -97,9 +131,17 @@ odoo.define('booking.main', function (require) {
return (m) ? -1 : null;
}
function compute_individual_booking_prices_without_option(days)
function compute_individual_booking_prices_without_option(days,start_day,end_day)
{
mod_days=days%7
let coef_price=1+mod_days/7
var start_date = Date.parse($("#start_day").val())
var end_date = Date.parse($("#end_day").val())
var start_date_p1month=start_date.addMonths(1)
diff1=end_date-start_date_p1month
if (days<7)
{
@ -112,30 +154,54 @@ odoo.define('booking.main', function (require) {
}
if (days<14 && days>6)
{
mod_days=days%7
// console.log('booking_price'+mod_days*$("#individual_day_price").val())
$("#booking_price").val(parseInt($("#individual_week_price").val(),10)+mod_days*$("#individual_day_price").val())
$("#booking_member_price").val(parseInt($("#individual_member_week_price").val(),10)+mod_days*$("#individual_member_day_price").val())
$("#booking_super_member_price").val(parseInt($("#individual_super_member_week_price").val(),10)+mod_days*$("#individual_super_member_day_price").val())
price_not_member=Math.round(parseInt($("#individual_week_price").val(),10)*coef_price)
price_member=Math.round(parseInt($("#individual_member_week_price").val(),10)*coef_price)
price_super_member=Math.round(parseInt($("#individual_super_member_week_price").val(),10)*coef_price)
$("#booking_price").val(price_not_member)
$("#booking_member_price").val(price_member)
$("#booking_super_member_price").val(price_super_member)
}
if (days<22 && days>13)
if (days<21 && days>13)
{
mod_days=days%14
// console.log('booking_price'+mod_days*$("#individual_day_price").val())
$("#booking_price").val(parseInt($("#individual_2weeks_price").val(),10)+mod_days*$("#individual_day_price").val())
$("#booking_member_price").val(parseInt($("#individual_member_2weeks_price").val(),10)+mod_days*$("#individual_member_day_price").val())
$("#booking_super_member_price").val(parseInt($("#individual_super_member_2weeks_price").val(),10)+mod_days*$("#individual_super_member_day_price").val())
price_not_member=Math.round(parseInt($("#individual_2weeks_price").val(),10)*coef_price)
price_member=Math.round(parseInt($("#individual_member_2weeks_price").val(),10)*coef_price)
price_super_member=Math.round(parseInt($("#individual_super_member_2weeks_price").val(),10)*coef_price)
$("#booking_price").val(price_not_member)
$("#booking_member_price").val(price_member)
$("#booking_super_member_price").val(price_super_member)
}
if (days>21)
if (days>20 && end_date<start_date_p1month)
{
mod_days=days%21
// console.log('booking_price'+mod_days*$("#individual_day_price").val())
$("#booking_price").val(parseInt($("#individual_3weeks_price").val(),10)+mod_days*$("#individual_day_price").val())
$("#booking_member_price").val(parseInt($("#individual_member_3weeks_price").val(),10)+mod_days*$("#individual_member_day_price").val())
$("#booking_super_member_price").val(parseInt($("#individual_super_member_3weeks_price").val(),10)+mod_days*$("#individual_super_member_day_price").val())
price_not_member=Math.round(parseInt($("#individual_3weeks_price").val(),10)*coef_price)
price_member=Math.round(parseInt($("#individual_member_3weeks_price").val(),10)*coef_price)
price_super_member=Math.round(parseInt($("#individual_super_member_3weeks_price").val(),10)*coef_price)
$("#booking_price").val(price_not_member)
$("#booking_member_price").val(price_member)
$("#booking_super_member_price").val(price_super_member)
}
if (diff1==0)
{
$("#booking_price").val(parseInt($("#individual_month_price").val(),10))
$("#booking_member_price").val(parseInt($("#individual_member_month_price").val(),10))
$("#booking_super_member_price").val(parseInt($("#individual_super_member_month_price").val(),10))
}
if (end_date>start_date_p1month)
{
}


+ 7
- 0
views/booking_event.xml View File

@ -154,6 +154,13 @@
<field name="individual_member_3weeks_price" attrs="{'required': [('individual_booking_event','=', True)]}"/>
<field name="individual_super_member_3weeks_price" attrs="{'required': [('individual_booking_event','=', True)]}"/>
</group>
<group style="width:25%%">
<field name="individual_month_price" attrs="{'required': [('individual_booking_event','=', True)]}"/>
<field name="individual_member_month_price" attrs="{'required': [('individual_booking_event','=', True)]}"/>
<field name="individual_super_member_month_price" attrs="{'required': [('individual_booking_event','=', True)]}"/>
</group>
</page>


+ 6
- 0
views/booking_event_registration.xml View File

@ -70,7 +70,13 @@
</xpath>
<xpath expr="//group[@name='attendee']" position="inside">
<field name="start_day_individual_booking" widget="date" attrs="{'invisible':[('individual_booking_event','!=',True)]}"/>
<field name="end_day_individual_booking" widget="date" attrs="{'invisible':[('individual_booking_event','!=',True)]}"/>
<field name="days_duration" attrs="{'invisible':[('individual_booking_event','!=',True)]}"/>
<field name="price_individual_booking" attrs="{'invisible':[('individual_booking_event','!=',True)]}"/>
<field name='individual_booking_event' invisible="1"/>
<field name="gender" attrs="{'invisible':[('booking_event','!=',True)]}"/>
<field name="age" attrs="{'invisible':[('booking_event','!=',True)]}"/>
<field name="city" attrs="{'invisible':[('booking_event','!=',True)]}"/>


+ 27
- 2
views/booking_website_registration.xml View File

@ -23,6 +23,7 @@
<xpath expr="." position="inside">
<script type="text/javascript" src="/kalachakra/static/js/booking.js"></script>
<script type="text/javascript" src="/kalachakra/static/js/Datejs/build/date-fr-FR.js"></script>
</xpath>
<xpath expr="//link[last()]" position="after">
@ -76,6 +77,10 @@ de séjour en solitaire.</b>
<td><span t-esc="str(int(event.individual_member_3weeks_price))+' €'"/></td>
<td><span t-esc="str(int(event.individual_super_member_3weeks_price))+' €'"/></td>
</tr>
<tr><td>1 month</td><td><span t-esc="str(int(event.individual_month_price))+' €'"/></td>
<td><span t-esc="str(int(event.individual_member_month_price))+' €'"/></td>
<td><span t-esc="str(int(event.individual_super_member_month_price))+' €'"/></td>
</tr>
</table>
@ -119,10 +124,10 @@ de séjour en solitaire.</b>
</div>
</div>
</div>
<h6><span color="red" id="days"/></h6>
<h6 style="color:red;"><span id="days"/></h6>
</t>
<h6>Total Price : <span id="booking_total_price"></span></h6>
<h6 style="color:blue;">Total Price : <span id="booking_total_price"></span></h6>
<div class="form-group s_website_form_field col- s_website_form_custom s_website_form_required " data-type="char" data-name="Field">
@ -174,6 +179,11 @@ de séjour en solitaire.</b>
<input type="hidden" id="individual_member_3weeks_price" name="individual_member_3weeks_price" t-att-value="int(event.individual_member_3weeks_price)"/>
<input type="hidden" id="individual_super_member_3weeks_price" name="individual_super_member_3weeks_price" t-att-value="int(event.individual_super_member_3weeks_price)"/>
<input type="hidden" id="individual_month_price" name="individual_month_price" t-att-value="int(event.individual_month_price)"/>
<input type="hidden" id="individual_member_month_price" name="individual_member_month_price" t-att-value="int(event.individual_member_month_price)"/>
<input type="hidden" id="individual_super_member_month_price" name="individual_super_member_month_price" t-att-value="int(event.individual_super_member_month_price)"/>
<input type="hidden" id="days_duration" name="days_duration"/>
<input type="hidden" id="price_individual_booking" name="price_individual_booking"/>
@ -484,4 +494,19 @@ de séjour en solitaire.</b>
</div>
</t>
</template>
<template id="individual_confirmation" name="booking form">
<t t-call="website.layout">
<div class="container-fluid">
<h6>Thank you, your request has to be confirmed by the Kalachakra Center !</h6>
<h6>You will receive an e-mail soon</h6>
<a href="/" class="ml-4 btn btn-secondary">back Home</a>
</div>
</t>
</template>
</odoo>

Loading…
Cancel
Save