From b119ec9ea41c929e1b578112514ee683483fc774 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 14 Oct 2022 15:51:35 +0200 Subject: [PATCH] individual booking --- controllers/booking.py | 49 +++++----- controllers/kalachakra.py | 2 + models/booking_event_registration.py | 21 +++-- models/event.py | 4 + static/js/Datejs | 1 + static/js/booking.js | 126 +++++++++++++++++++------ views/booking_event.xml | 7 ++ views/booking_event_registration.xml | 6 ++ views/booking_website_registration.xml | 29 +++++- 9 files changed, 183 insertions(+), 62 deletions(-) create mode 160000 static/js/Datejs diff --git a/controllers/booking.py b/controllers/booking.py index 6aab257..78f866b 100755 --- a/controllers/booking.py +++ b/controllers/booking.py @@ -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/', '/booking/payment/transaction//'], type='json', auth="public", website=True) diff --git a/controllers/kalachakra.py b/controllers/kalachakra.py index c6d922b..59a91f9 100755 --- a/controllers/kalachakra.py +++ b/controllers/kalachakra.py @@ -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) diff --git a/models/booking_event_registration.py b/models/booking_event_registration.py index e26ba72..b6d745d 100755 --- a/models/booking_event_registration.py +++ b/models/booking_event_registration.py @@ -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_price100) + 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 :
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_datestart_date_p1month) + { + + + + } diff --git a/views/booking_event.xml b/views/booking_event.xml index 85bac49..32f9e4a 100755 --- a/views/booking_event.xml +++ b/views/booking_event.xml @@ -154,6 +154,13 @@ + + + + + + + diff --git a/views/booking_event_registration.xml b/views/booking_event_registration.xml index 3dd1e5b..7d690e2 100755 --- a/views/booking_event_registration.xml +++ b/views/booking_event_registration.xml @@ -70,7 +70,13 @@ + + + + + + diff --git a/views/booking_website_registration.xml b/views/booking_website_registration.xml index f43ea4c..0f64041 100755 --- a/views/booking_website_registration.xml +++ b/views/booking_website_registration.xml @@ -23,6 +23,7 @@ + @@ -76,6 +77,10 @@ de séjour en solitaire. + 1 month + + + @@ -119,10 +124,10 @@ de séjour en solitaire. -
+
-
Total Price :
+
Total Price :
@@ -174,6 +179,11 @@ de séjour en solitaire. + + + + + @@ -484,4 +494,19 @@ de séjour en solitaire.
+ + + \ No newline at end of file