diff --git a/__manifest__.py b/__manifest__.py index 671f0d2..79c6d48 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -41,7 +41,19 @@ 'views/event_templates_list.xml', 'views/membership.xml', 'views/website_event_registration.xml', - 'views/event_templates_page_registration.xml' + 'views/event_templates_page_registration.xml', + + 'views/booking_product.xml', + 'views/booking_event.xml', + 'views/booking_event_registration.xml', + 'views/booking_website_registration.xml', + 'views/booking_registration.xml', + 'views/booking_event_templates_list.xml', + #'views/booking_event_templates_page_registration.xml', + 'views/booking_location.xml', + 'views/booking_room.xml', + 'views/booking_questionnaire.xml', + ], # only loaded in demonstration mode diff --git a/controllers/__init__.py b/controllers/__init__.py index 75e6f07..7a4c15f 100644 --- a/controllers/__init__.py +++ b/controllers/__init__.py @@ -1,3 +1,4 @@ # -*- coding: utf-8 -*- -from . import kalachakra \ No newline at end of file +from . import kalachakra +from . import booking \ No newline at end of file diff --git a/controllers/booking.py b/controllers/booking.py new file mode 100644 index 0000000..80a1d52 --- /dev/null +++ b/controllers/booking.py @@ -0,0 +1,401 @@ +from odoo import fields, http, _ +from odoo.http import request +import werkzeug +from odoo.tools import format_datetime, format_date, is_html_empty +from odoo.exceptions import UserError,AccessError, MissingError,Warning +from odoo.addons.website_event.controllers.main import WebsiteEventController +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 +import json +import binascii +from odoo.addons.payment.controllers.portal import PaymentProcessing +from odoo.addons.portal.controllers.mail import _message_post_helper +from odoo.osv import expression + + +class booking(WebsiteEventController,AuthSignupHome): + + @http.route(['/booking/registration/options'], type='http', auth='user', website=True, sitemap=False,csrf=False) + def bookingregistration_options(self,event_id,*args,**kw): + 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))]) + 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['partner']=partner + + #évenement + request.session['event_id']=int(event_id) + event=request.env['event.event'].sudo().search([('id','=',int(event_id))]) + data['event']=event + + + #status + # category_ids=partner.category_id + # data['status']='standard' + # if category_ids: + # for c in category_ids: + # category=request.env['event.partner_category'].sudo().search([('partner_category_id','=',c.id)]) + + # #category=request.env['res.partner.category'].search([('id','=',c.id)]) + # if category:data['status']=category.status + 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 + + #membership product + membership_product=request.env['event.membership_product'].sudo().search([]) + if not membership_product: raise Warning('no membership product find') + data['membership_product']=membership_product + #options + data['options']=[] + for opt in event.booking_option_ids: + + if opt.booking_option_id==membership_product.membership_product_id: + + if data['status']!='member' and data['status']!='super member':data['options'].append(opt) + else:data['options'].append(opt) + + #data['options']=event.booking_option_ids + + + #questions + data['questions']=event.question_ids + + + + return http.request.render('booking.registration_options_form',data) + + @http.route(['/booking/registration/questionnaire'], type='http', auth='user', website=True, sitemap=False,csrf=False) + def bookingregistration_questionnaire(self,**post): + vals={} + data={} + + vals['event_id']=post.get('event_id') + vals['name']=post.get('name') + vals['phone']=post.get('phone') + vals['email']=post.get('email') + + vals['firstname']=post.get('firstname') + vals['age']=post.get('age') + vals['gender']=post.get('gender') + vals['mobile']=post.get('mobile') + + request.session['registrant'] = vals + request.session['down_payment'] =False + if post.get('down_payment')=="false":request.session['down_payment'] = False + if post.get('down_payment')=="true":request.session['down_payment'] = True + + #options + + if post.get('nb_o')!="0": + + vals3={} + i=1 + k=1 + while i <= int(post.get('nb_o')): + if post.get('o['+str(i)+']'): + vals3[k]=post.get('o['+str(i)+']') + k=k+1 + i=i+1 + request.session['options']=vals3 + request.session['nb_o']=k-1 + else: + request.session['options']=None + request.session['nb_o']=0 + #questions + + event=request.env['event.event'].sudo().search([('id','=',int(post.get('event_id')))]) + data['event']=event + data['questions']=False + if event.question_ids: + data['questions']=event.question_ids + #return vals3 + return http.request.render('booking.registration_questionnaire_form',data) + + @http.route(['/booking/payment_choice'], type='http',auth='user', website=True, sitemap=False,csrf=False) + def bookinginvoice(self,**post): + + + vals={} + vals['event_id']=request.session['event_id'] + vals['partner_id']=request.session['partner_id'] + vals['name']=request.session['registrant']['name'] + vals['phone']=request.session['registrant']['phone'] + vals['email']=request.session['registrant']['email'] + vals['firstname']=request.session['registrant']['firstname'] + vals['age']=request.session['registrant']['age'] + vals['gender']=request.session['registrant']['gender'] + vals['mobile']=request.session['registrant']['mobile'] + + vals['medical_concern']=post.get('medical_concern') + vals['medical_information']=post.get('medical_information') + vals['medical_contact_name']=post.get('medical_contact_name') + vals['medical_contact_phone']=post.get('medical_contact_phone') + + vals['down_payment']=request.session['down_payment'] + vals['state']='draft' + + res=request.env['event.registration'].sudo().create(vals) + + vals2={} + + #questionnaire' + i=1 + vals2['event_registration_id']=res.id + #suppression du questionnaire de la personne inscrite + request.env['event.registration_questionnaire'].sudo().search([('event_registration_id','=',int(res.id))]).unlink() + + if post.get('nb_q')!="0": + while i < int(post.get('nb_q')): + vals2['sequence']=i + vals2['question']=post.get('q['+str(i)+']') + vals2['answer']=post.get('a['+str(i)+']') + + + #ajout du questionnaire avec les réponses + res2=request.env['event.registration_questionnaire'].sudo().create(vals2) + + res.write({'questionnaire_ids':[(4,res2.id)]}) + i=i+1 + + #options + if request.session['nb_o']!=0 : + vals3={} + i=1 + #suppression des options de la personne inscrite + request.env['event.registration_option'].sudo().search([('event_registration_id','=',int(res.id))]).unlink() + + while i <= int(request.session['nb_o']): + + vals3['booking_option_id']=request.session['options'][i] + vals3['event_registration_id']=res.id + #ajout des options + res3=request.env['event.registration_option'].sudo().create(vals3) + res.write({'option_ids':[(4,res3.id)]}) + i=i+1 + + + #création du devis + order_id=request.env['event.registration'].sudo().action_event_registration_generate_order(res.id) + order=request.env['sale.order'].sudo().search([("id","=",int(order_id))]) + + data={} + data['submit_txt']='Pay now' + + data['success_url']='/booking/payment/success' + data['error_url']='/booking/payment/error' + data['acquirers'] = list(request.env['payment.acquirer'].search([ + ('state', 'in', ['enabled', 'test']), + ('company_id', '=', request.env.company.id) + ])) + + + + 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) + + payment_tokens = partner.payment_token_ids + payment_tokens |= partner.commercial_partner_id.sudo().payment_token_ids + + data['payment_tokens']=payment_tokens + data['order_id']=order_id + + + return http.request.render('booking.payment_choice_form',data) + + + #return http.request.redirect(order.access_url) + + @http.route(['/booking/payment/transaction/', + '/booking/payment/transaction/', + '/booking/payment/transaction//'], type='json', auth="public", website=True) + def booking_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 + + order_id=order_id + order=request.env['sale.order'].search([('id','=',int(order_id))], limit=1) + + + # Ensure there is something to proceed + if not order or (order and not order.order_line): + return False + + assert order.partner_id.id != request.website.partner_id.id + + # Create transaction + vals = {'acquirer_id': acquirer_id, + 'return_url': '/booking/payment/validate'} + + if save_token: + vals['type'] = 'form_save' + if token: + vals['payment_token_id'] = int(token) + + transaction = order._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 + request.session['order_id']=order.id + return transaction.render_sale_button(order) + + + + http.route('/booking/payment/token', type='http', auth='public', website=True, sitemap=False) + def booking_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': '/booking/payment/validate'} + + + tx = order._create_payment_transaction(vals) + + request.session['transaction_id']=tx.id + PaymentProcessing.add_payment_transaction(tx) + return request.redirect('booking/payment/process') + + @http.route(['/booking/payment/process'], type="http", auth="public", website=True, sitemap=False) + def booking_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('/booking/payment/validate', type='http', auth="public", website=True, sitemap=False) + def booking_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 + """ + + + order_id=int(request.session['order_id']) + order=request.env['sale.order'].search([('id','=',order_id)]) + order.state='sale' + request.session['order_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('/booking/payment/confirmation') + + + @http.route(['/booking/payment/confirmation'], type='http', auth="public", website=True, sitemap=False) + def booking_payment_confirmation(self, **post): + + return request.render("booking.thankyou") + + +# class CustomerPortal(CustomerPortal): +# #affichage de la page de paiement +# @http.route(['/my/quotes', '/my/quotes/page/'], type='http', auth="user", website=True) +# def portal_my_quotes(self, page=1, date_begin=None, date_end=None, sortby=None, **kw): +# values = self._prepare_portal_layout_values() +# partner = request.env.user.partner_id +# SaleOrder = request.env['sale.order'] +# #return str(len(SaleOrder)) +# domain = [('partner_id','=',int(partner.id)),('state','in',('draft','sent'))] + +# searchbar_sortings = { +# 'date': {'label': _('Order Date'), 'order': 'date_order desc'}, +# 'name': {'label': _('Reference'), 'order': 'name'}, +# 'stage': {'label': _('Stage'), 'order': 'state'}, +# } + +# # default sortby order +# if not sortby: +# sortby = 'date' +# sort_order = searchbar_sortings[sortby]['order'] + +# if date_begin and date_end: +# domain += [('create_date', '>', date_begin), ('create_date', '<=', date_end)] + +# # count for pager +# quotation_count = SaleOrder.search_count(domain) +# # make pager +# pager = portal_pager( +# url="/my/quotes", +# url_args={'date_begin': date_begin, 'date_end': date_end, 'sortby': sortby}, +# total=quotation_count, +# page=page, +# step=self._items_per_page +# ) + +# # search the count to display, according to the pager data +# quotations = SaleOrder.search(domain, order=sort_order, limit=self._items_per_page, offset=pager['offset']) +# request.session['my_quotations_history'] = quotations.ids[:100] + +# values.update({ +# 'date': date_begin, +# 'quotations': quotations.sudo(), +# 'page_name': 'quote', +# 'pager': pager, +# 'default_url': '/my/quotes', +# 'searchbar_sortings': searchbar_sortings, +# 'sortby': sortby, +# }) +# return request.render("sale.portal_my_quotations", values) \ No newline at end of file diff --git a/controllers/kalachakra.py b/controllers/kalachakra.py index ab5575d..9f86809 100644 --- a/controllers/kalachakra.py +++ b/controllers/kalachakra.py @@ -8,12 +8,12 @@ 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.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): +class kalachakra_event(WebsiteEventController,PaymentProcessing): def _extract_searched_event_tags(self, searches): tags = request.env['event.tag'] @@ -76,8 +76,8 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing,AuthSignupHome): if data['status']=='member':data['price']=event.booking_member_price if data['status']=='super member':data['price']=event.booking_super_member_price request.session['status']=data['status'] - if event.online_event: - return http.request.render('kalachakra.registration_step1',data) + + return http.request.render('kalachakra.registration_step1',data) @http.route(['/event/registration/step2'], type='http', auth='user', website=True, sitemap=False,csrf=False) def event_registration_step2(self,**post): diff --git a/i18n/fr.po b/i18n/fr.po index 4c3a966..b97425b 100644 --- a/i18n/fr.po +++ b/i18n/fr.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0-20210413\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-05-31 13:07+0000\n" -"PO-Revision-Date: 2022-05-31 13:07+0000\n" +"POT-Creation-Date: 2022-06-06 19:21+0000\n" +"PO-Revision-Date: 2022-06-06 19:21+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -15,6 +15,26 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.event_registration_template +msgid "(only" +msgstr "(" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "(standard price :" +msgstr "(Participation standard :" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid ", member price :" +msgstr ", participation membre:" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid ", super member price :" +msgstr ", participation membre de soutien :" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt msgid "5 Passage Delessert – 75010 PARIS" @@ -37,6 +57,113 @@ msgid "" " tags" msgstr "" +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "" +"Age\n" +" *" +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "" +"First name\n" +" *" +msgstr "" +"Prénom\n" +" *" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "" +"Gender\n" +" *" +msgstr "" +"Sexe\n" +" *" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_questionnaire_form +msgid "" +"Informations de nature médicale utiles à connaître (allergies, prise de médicaments, contre-indications…)\n" +" " +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_questionnaire_form +msgid "" +"Medical concern\n" +" *" +msgstr "" +"Renseignements médicaux\n" +" *" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "" +"Mobile\n" +" " +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_questionnaire_form +msgid "" +"Name of the medical contact\n" +" " +msgstr "" +"Nom du contact\n" +" " + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "" +"Name\n" +" *" +msgstr "" +"Nom\n" +" *" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_questionnaire_form +msgid "" +"Phone of the medical contact\n" +" " +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "" +"Phone\n" +" " +msgstr "" +"Téléphone\n" +" " + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "" +"To stay informed I subscribe to" +" the newsletter of the center" +msgstr "Pour être informé,je m'inscris" +" à la liste de diffusion du centre" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "" +"email\n" +" " +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "Do you want to pay only the deposit " +msgstr "Vous voulez régler avec un acompte ? " + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_questionnaire_form +msgid "Health quiz" +msgstr "Questionnaire de santé" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt msgid "" @@ -44,6 +171,11 @@ msgid "" "\t\t\t\t\tAssociation cultuelle loi 1905 autorisée à recevoir des dons, déclarée le 20/07/1999 à la Préfecture de Paris" msgstr "" +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_questionnaire_form +msgid "Questionnaire :" +msgstr "" + #. module: kalachakra #: code:addons/kalachakra/models/donation.py:0 #: code:addons/kalachakra/models/membership.py:0 @@ -71,11 +203,36 @@ msgstr "" msgid "Add event to google agenda" msgstr "Ajouter l'événement au calendrier google" +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__statut_contact__adherent +msgid "Adhérent" +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.events_list +msgid "Adhérent et autres :" +msgstr "" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.participation_form msgid "Affectation *" msgstr "" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__age +msgid "Age" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__alan_wallace +msgid "Alan wallace" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__amis +msgid "Amis" +msgstr "" + #. module: kalachakra #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__amount msgid "Amount" @@ -111,17 +268,144 @@ msgstr "" msgid "Attachment" msgstr "" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_room_occupation__name +msgid "Attendee Name" +msgstr "Nom du participant" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__autre +msgid "Autre" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__b__actualit +msgid "B. Actualit" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__b_actualit +msgid "B.Actualit" +msgstr "" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt msgid "BENEFICIAIRE DES VERSEMENTS" msgstr "" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__balance_order_id +msgid "Balance Order" +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "Become a member" +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "Become a super member" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__bercy +msgid "Bercy" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__statut_contact__bienfaiteur +msgid "Bienfaiteur" +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.event_registration_view_kanban +msgid "Booked by" +msgstr "Réservé par" + +#. module: kalachakra +#: model:ir.ui.menu,name:kalachakra.booking_title_menu +msgid "Booking" +msgstr "Réservation" + +#. module: kalachakra +#: model:ir.actions.act_window,name:kalachakra.action_view_event_registration_option +msgid "Booking Options" +msgstr "Options" + +#. module: kalachakra +#: model:ir.actions.act_window,name:kalachakra.action_view_event_registration_questionnaire +#: model:ir.model.fields,field_description:kalachakra.field_event_type__booking_questionnaire_id +msgid "Booking Questionnaire" +msgstr "Questionnaire" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_event__booking_event +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__booking_event +#: model:ir.model.fields,field_description:kalachakra.field_event_type__booking_event +msgid "Booking event" +msgstr "Sejour/ Retraite" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.product_template_search_view +msgid "Booking option products" +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.product_template_search_view +msgid "Booking products" +msgstr "Produits de séjour" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__boutique +msgid "Boutique" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__centre_fpmt +msgid "Centre FPMT" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__conf_m_ricard +msgid "Conf M Ricard" +msgstr "" + +#. module: kalachakra +#: model:ir.model,name:kalachakra.model_res_partner +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__statut_contact__contact +msgid "Contact" +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_questionnaire_form +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step1 +msgid "Continue" +msgstr "Suite" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.participation_form msgid "Country *" +msgstr "Pays *" + +#. module: kalachakra +#: model_terms:ir.actions.act_window,help:kalachakra.registration_action_orders +msgid "Create a new quotation, the first step of a new sale!" msgstr "" #. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_location__create_uid +#: model:ir.model.fields,field_description:kalachakra.field_booking_option__create_uid +#: model:ir.model.fields,field_description:kalachakra.field_booking_question__create_uid +#: model:ir.model.fields,field_description:kalachakra.field_booking_questionnaire__create_uid +#: model:ir.model.fields,field_description:kalachakra.field_booking_room__create_uid +#: model:ir.model.fields,field_description:kalachakra.field_booking_room_occupation__create_uid +#: model:ir.model.fields,field_description:kalachakra.field_event_membership_product__create_uid +#: model:ir.model.fields,field_description:kalachakra.field_event_partner_category__create_uid +#: model:ir.model.fields,field_description:kalachakra.field_event_question__create_uid +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_option__create_uid +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_questionnaire__create_uid #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__create_uid #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraft__create_uid #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__create_uid @@ -130,6 +414,17 @@ msgid "Created by" msgstr "" #. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_location__create_date +#: model:ir.model.fields,field_description:kalachakra.field_booking_option__create_date +#: model:ir.model.fields,field_description:kalachakra.field_booking_question__create_date +#: model:ir.model.fields,field_description:kalachakra.field_booking_questionnaire__create_date +#: model:ir.model.fields,field_description:kalachakra.field_booking_room__create_date +#: model:ir.model.fields,field_description:kalachakra.field_booking_room_occupation__create_date +#: model:ir.model.fields,field_description:kalachakra.field_event_membership_product__create_date +#: model:ir.model.fields,field_description:kalachakra.field_event_partner_category__create_date +#: model:ir.model.fields,field_description:kalachakra.field_event_question__create_date +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_option__create_date +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_questionnaire__create_date #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__create_date #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraft__create_date #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__create_date @@ -138,37 +433,83 @@ msgid "Created on" msgstr "Créé le" #. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_option__currency_id +#: model:ir.model.fields,field_description:kalachakra.field_event_event__currency_id +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_option__currency_id #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__currency_id msgid "Currency" msgstr "devise" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_res_partner__date_adhesion +#: model:ir.model.fields,field_description:kalachakra.field_res_users__date_adhesion +msgid "Date adhesion" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_res_partner__date_creation_contact +#: model:ir.model.fields,field_description:kalachakra.field_res_users__date_creation_contact +msgid "Date de création du contact" +msgstr "" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt msgid "Date du paiement : Année {{FISCALYEAR}}" msgstr "" #. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_questionnaire__description +msgid "Description" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_location__display_name +#: model:ir.model.fields,field_description:kalachakra.field_booking_option__display_name +#: model:ir.model.fields,field_description:kalachakra.field_booking_question__display_name +#: model:ir.model.fields,field_description:kalachakra.field_booking_questionnaire__display_name +#: model:ir.model.fields,field_description:kalachakra.field_booking_room__display_name +#: model:ir.model.fields,field_description:kalachakra.field_booking_room_occupation__display_name #: model:ir.model.fields,field_description:kalachakra.field_donation_donation__display_name #: model:ir.model.fields,field_description:kalachakra.field_event_event__display_name +#: model:ir.model.fields,field_description:kalachakra.field_event_membership_product__display_name +#: model:ir.model.fields,field_description:kalachakra.field_event_partner_category__display_name +#: model:ir.model.fields,field_description:kalachakra.field_event_question__display_name +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__display_name +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_option__display_name +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_questionnaire__display_name #: model:ir.model.fields,field_description:kalachakra.field_event_tag_category__display_name +#: model:ir.model.fields,field_description:kalachakra.field_event_type__display_name #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__display_name #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraft__display_name #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__display_name #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile_mapping__display_name #: model:ir.model.fields,field_description:kalachakra.field_payment_transaction__display_name #: model:ir.model.fields,field_description:kalachakra.field_product_template__display_name +#: model:ir.model.fields,field_description:kalachakra.field_res_partner__display_name +#: model:ir.model.fields,field_description:kalachakra.field_sale_order__display_name msgid "Display Name" msgstr "Nom affiché" #. module: kalachakra #: model:ir.model,name:kalachakra.model_donation_donation +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__donation_ids msgid "Donation" msgstr "Dons" #. module: kalachakra #: model:ir.model.fields,field_description:kalachakra.field_payment_transaction__donation_ids msgid "Donations" -msgstr "" +msgstr "Dons" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__down_payment_order_id +msgid "Down Payment Order" +msgstr "Acompte" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_event__booking_down_payment +msgid "Down payment" +msgstr "Acompte" #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.participation_form @@ -177,36 +518,178 @@ msgid "" " *" msgstr "" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__event_end +msgid "End Stage" +msgstr "Fin de séjour" + #. module: kalachakra #: model:ir.model,name:kalachakra.model_event_event +#: model:ir.model.fields,field_description:kalachakra.field_booking_option__event_id +#: model:ir.model.fields,field_description:kalachakra.field_booking_room_occupation__event_id +#: model:ir.model.fields,field_description:kalachakra.field_event_question__event_id msgid "Event" msgstr "Événement" +#. module: kalachakra +#: model:ir.model,name:kalachakra.model_event_registration +#: model:ir.model.fields,field_description:kalachakra.field_donation_donation__event_registration_id +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_option__event_registration_id +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_questionnaire__event_registration_id +msgid "Event Registration" +msgstr "Inscription à l'événement" + +#. module: kalachakra +#: model:ir.model,name:kalachakra.model_event_type +msgid "Event Template" +msgstr "Modèle d'événement" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_option__event_type_id +msgid "Event Type" +msgstr "Type d'événement" + #. module: kalachakra #: model:ir.model,name:kalachakra.model_event_tag_category msgid "Event tag category" +msgstr "Catégorie d'étiquette" + +#. module: kalachakra +#: model:ir.model.fields,help:kalachakra.field_event_registration__event_end +msgid "" +"Events will automatically be moved into this stage when they are finished. " +"The event moved into this stage will automatically be set as green." msgstr "" +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__event_registration__gender__femelle +msgid "Femelle" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__firstname +msgid "Firstname" +msgstr "Femme" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.participation_form msgid "" "Firstname\n" " *" msgstr "" +"Prénom\n" +" *" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_event__free_participation +msgid "Free participation" +msgstr "Participation libre" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step1 +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "From" +msgstr "Du" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.event_registration_view_form +msgid "Generate quotation(s)" +msgstr "Générer le(s) devis" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "Here is the information to attend on Zoom :" +msgstr "Voici les informations pour participer sur Zoom" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__event_registration__medical_concern__no_answer +msgid "I don't want to answer" +msgstr "Je ne veux pas répondre" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__event_registration__medical_concern__have_medical_concern +msgid "I have a medical concern to report" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__event_registration__medical_concern__have_no_medical_concern +msgid "I have no medical concern to report" +msgstr "J'ai un problème médical à signaler" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "I pay the participation now" +msgstr "Je n'ai pas de problème médical à signaler" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "I will pay the participation on the spot" +msgstr "Je règlerai sur place" #. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_location__id +#: model:ir.model.fields,field_description:kalachakra.field_booking_option__id +#: model:ir.model.fields,field_description:kalachakra.field_booking_question__id +#: model:ir.model.fields,field_description:kalachakra.field_booking_questionnaire__id +#: model:ir.model.fields,field_description:kalachakra.field_booking_room__id +#: model:ir.model.fields,field_description:kalachakra.field_booking_room_occupation__id #: model:ir.model.fields,field_description:kalachakra.field_donation_donation__id #: model:ir.model.fields,field_description:kalachakra.field_event_event__id +#: model:ir.model.fields,field_description:kalachakra.field_event_membership_product__id +#: model:ir.model.fields,field_description:kalachakra.field_event_partner_category__id +#: model:ir.model.fields,field_description:kalachakra.field_event_question__id +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__id +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_option__id +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_questionnaire__id #: model:ir.model.fields,field_description:kalachakra.field_event_tag_category__id +#: model:ir.model.fields,field_description:kalachakra.field_event_type__id #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__id #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraft__id #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__id #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile_mapping__id #: model:ir.model.fields,field_description:kalachakra.field_payment_transaction__id #: model:ir.model.fields,field_description:kalachakra.field_product_template__id +#: model:ir.model.fields,field_description:kalachakra.field_res_partner__id +#: model:ir.model.fields,field_description:kalachakra.field_sale_order__id msgid "ID" msgstr "" +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "If you want to be a member, click here :" +msgstr "Si vous voulez devenir membre, cliquez ici" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "If you want to be a super member, click here :" +msgstr "Si vous voulez devenir membre de soutien, cliquez ici" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "If you want to make a donation, click here :" +msgstr "Si vous voulez faire un don, cliquer ici :" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__initiation_kalachakr +msgid "Initiation kalachakr" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__institut_vy +msgid "Institut vy" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__internet +msgid "Internet" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__internet_boutique +msgid "Internet Boutique" +msgstr "" + #. module: kalachakra #: code:addons/kalachakra/models/donation.py:0 #: code:addons/kalachakra/models/membership.py:0 @@ -222,19 +705,65 @@ msgid "Invalid token found! Token partner %s != %s" msgstr "" #. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step1 +msgid "Je choisirai plus tard" +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step1 +msgid "Je participerai au centre Kalachakra" +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step1 +msgid "Je participerai sur Zoom" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__journal_m +msgid "Journal m" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_location____last_update +#: model:ir.model.fields,field_description:kalachakra.field_booking_option____last_update +#: model:ir.model.fields,field_description:kalachakra.field_booking_question____last_update +#: model:ir.model.fields,field_description:kalachakra.field_booking_questionnaire____last_update +#: model:ir.model.fields,field_description:kalachakra.field_booking_room____last_update +#: model:ir.model.fields,field_description:kalachakra.field_booking_room_occupation____last_update #: model:ir.model.fields,field_description:kalachakra.field_donation_donation____last_update #: model:ir.model.fields,field_description:kalachakra.field_event_event____last_update +#: model:ir.model.fields,field_description:kalachakra.field_event_membership_product____last_update +#: model:ir.model.fields,field_description:kalachakra.field_event_partner_category____last_update +#: model:ir.model.fields,field_description:kalachakra.field_event_question____last_update +#: model:ir.model.fields,field_description:kalachakra.field_event_registration____last_update +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_option____last_update +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_questionnaire____last_update #: model:ir.model.fields,field_description:kalachakra.field_event_tag_category____last_update +#: model:ir.model.fields,field_description:kalachakra.field_event_type____last_update #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership____last_update #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraft____last_update #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile____last_update #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile_mapping____last_update #: model:ir.model.fields,field_description:kalachakra.field_payment_transaction____last_update #: model:ir.model.fields,field_description:kalachakra.field_product_template____last_update +#: model:ir.model.fields,field_description:kalachakra.field_res_partner____last_update +#: model:ir.model.fields,field_description:kalachakra.field_sale_order____last_update msgid "Last Modified on" msgstr "Last Updated on" #. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_location__write_uid +#: model:ir.model.fields,field_description:kalachakra.field_booking_option__write_uid +#: model:ir.model.fields,field_description:kalachakra.field_booking_question__write_uid +#: model:ir.model.fields,field_description:kalachakra.field_booking_questionnaire__write_uid +#: model:ir.model.fields,field_description:kalachakra.field_booking_room__write_uid +#: model:ir.model.fields,field_description:kalachakra.field_booking_room_occupation__write_uid +#: model:ir.model.fields,field_description:kalachakra.field_event_membership_product__write_uid +#: model:ir.model.fields,field_description:kalachakra.field_event_partner_category__write_uid +#: model:ir.model.fields,field_description:kalachakra.field_event_question__write_uid +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_option__write_uid +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_questionnaire__write_uid #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__write_uid #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraft__write_uid #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__write_uid @@ -243,6 +772,17 @@ msgid "Last Updated by" msgstr "" #. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_location__write_date +#: model:ir.model.fields,field_description:kalachakra.field_booking_option__write_date +#: model:ir.model.fields,field_description:kalachakra.field_booking_question__write_date +#: model:ir.model.fields,field_description:kalachakra.field_booking_questionnaire__write_date +#: model:ir.model.fields,field_description:kalachakra.field_booking_room__write_date +#: model:ir.model.fields,field_description:kalachakra.field_booking_room_occupation__write_date +#: model:ir.model.fields,field_description:kalachakra.field_event_membership_product__write_date +#: model:ir.model.fields,field_description:kalachakra.field_event_partner_category__write_date +#: model:ir.model.fields,field_description:kalachakra.field_event_question__write_date +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_option__write_date +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_questionnaire__write_date #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__write_date #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraft__write_date #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__write_date @@ -250,6 +790,22 @@ msgstr "" msgid "Last Updated on" msgstr "" +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__librairie +msgid "Librairie" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__lille +msgid "Lille" +msgstr "" + +#. module: kalachakra +#: model:ir.actions.act_window,name:kalachakra.location_action +#: model:ir.ui.menu,name:kalachakra.booking_location_menu +msgid "Locations" +msgstr "Lieux" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt msgid "" @@ -267,11 +823,53 @@ msgstr "" msgid "Madame, Monsieur," msgstr "" +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "Make a donation" +msgstr "Faire un don" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__event_registration__gender__male +msgid "Male" +msgstr "Homme" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__medical_concern +msgid "Medical concern" +msgstr "Problème médical" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__medical_information +msgid "Medical informations" +msgstr "Informations médicales" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__event_partner_category__status__member +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__member_status__member +msgid "Member" +msgstr "Membre" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_option__booking_option_member_price +#: model:ir.model.fields,field_description:kalachakra.field_event_event__booking_member_price +#: model:ir.model.fields,field_description:kalachakra.field_event_event__participation_member_price +#: model:ir.model.fields,field_description:kalachakra.field_event_event__subscription_member_price +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "Member price" +msgstr "Participation membre" + #. module: kalachakra #: model:ir.model.fields,field_description:kalachakra.field_payment_transaction__membership_ids msgid "Membership" msgstr "Adhésion" +#. module: kalachakra +#: model:ir.actions.act_window,name:kalachakra.membership_product_action +#: model:ir.model.fields,field_description:kalachakra.field_event_membership_product__membership_product_id +#: model:ir.ui.menu,name:kalachakra.booking_membership_product__menu +msgid "Membership product" +msgstr "Produit d'adhésion" + #. module: kalachakra #: model:ir.actions.act_window,name:kalachakra.membership_action #: model:ir.ui.menu,name:kalachakra.membership_menu @@ -280,29 +878,62 @@ msgstr "Adhésion" msgid "Memberships" msgstr "Adhésions" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__mobile +msgid "Mobile" +msgstr "" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt msgid "Mode de versement : Chèque, prélèvement ou espèces" msgstr "" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_option__name +#: model:ir.model.fields,field_description:kalachakra.field_booking_questionnaire__name +msgid "Name" +msgstr "Nom" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.participation_form msgid "" "Name\n" " *" msgstr "" +"Nom\n" +" *" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__medical_contact_name +msgid "Name and Firstname of the contact" +msgstr "Nom et prénom du contact" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__nantes +msgid "Nantes" +msgstr "" #. module: kalachakra #: code:addons/kalachakra/controllers/kalachakra.py:0 #, python-format msgid "No membership product, please add one" -msgstr "" +msgstr "Pas de produit d'adhésion, ajoutez-en un" #. module: kalachakra #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__file_name msgid "Nom du fichier" msgstr "" +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.events_list +msgid "Non adhérent :" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__member_status__not_member +msgid "Not member" +msgstr "Non membre" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt msgid "" @@ -327,27 +958,79 @@ msgid "N° Siret 44509616700017 – N°APE 9499 Z" msgstr "" #. module: kalachakra -#: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt +#: model_terms:ir.actions.act_window,help:kalachakra.registration_action_orders msgid "" -"Paris, le {{DATE}}
\n" +"Once the quotation is confirmed, it becomes a sales order.
You will be " +"able to create an invoice and collect the payment." +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_event__online_event +msgid "Online event" +msgstr "Evénement en ligne" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__option_ids +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "Option" +msgstr "Option" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.booking_event_type_view_form +#: model_terms:ir.ui.view,arch_db:kalachakra.booking_event_view_form +#: model_terms:ir.ui.view,arch_db:kalachakra.event_registration_view_form +msgid "Options" +msgstr "Options" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__order_id +msgid "Order" +msgstr "Commande" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_res_partner__origine +#: model:ir.model.fields,field_description:kalachakra.field_res_users__origine +msgid "Origine" +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt +msgid "" +"Paris, le {{DATE}}
\n" "\t\t
\n" "\t\t{{FIRSTNAME}} {{LASTNAME}}
\n" "\t\t\t{{ADDRESS}}
\n" "\t\t\t{{ZIP}} {{CITY}}
" msgstr "" +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "Participant :" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_partner_category__partner_category_id +msgid "Partner Category" +msgstr "Catégorie" + +#. module: kalachakra +#: model:ir.actions.act_window,name:kalachakra.partner_category_action +#: model:ir.ui.menu,name:kalachakra.booking_partner_category_menu +msgid "Partner categories" +msgstr "catégories" + #. module: kalachakra #: code:addons/kalachakra/models/donation.py:0 #: code:addons/kalachakra/models/payment_transaction.py:0 #: code:addons/kalachakra/models/payment_transaction.py:0 #, python-format msgid "Pay Now" -msgstr "" +msgstr "Régler maintenant" #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.payment_choice_form msgid "Pay with" -msgstr "" +msgstr "Régler avec" #. module: kalachakra #: model:ir.model,name:kalachakra.model_payment_transaction @@ -357,75 +1040,394 @@ msgstr "Transaction" #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.participation_form msgid "Payment choice" -msgstr "" +msgstr "Choix du paiement" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.event_registration_view_form +msgid "Payments" +msgstr "Paiements" #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.participation_form msgid "Phone" +msgstr "Téléphone" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__medical_contact_phone +msgid "Phone of the contact" +msgstr "Téléphone du contact" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "Please select your booking options :" +msgstr "Merci de sélectionner vos options du séjour" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__portes_ouvertes_st_cosme +msgid "Portes ouvertes st cosme" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__presse_bouddhiste +msgid "Presse bouddhiste" msgstr "" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_option__booking_option_price +#: model:ir.model.fields,field_description:kalachakra.field_event_event__booking_price +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_option__booking_option_price +msgid "Price" +msgstr "Participation" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "Price of the stay :" +msgstr "Participation du séjour :" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.booking_event_view_form +msgid "Prices" +msgstr "Participations" + #. module: kalachakra #: model:ir.model,name:kalachakra.model_product_template msgid "Product Template" msgstr "Modèle d'article" +#. module: kalachakra +#: model:ir.ui.menu,name:kalachakra.menu_booking_product_template_action +msgid "Products" +msgstr "Produits" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__question_mail +msgid "Question mail" +msgstr "Question" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_question__questionnaire_id +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__questionnaire_ids +#: model_terms:ir.ui.view,arch_db:kalachakra.event_registration_view_form +msgid "Questionnaire" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_questionnaire__question_ids +#: model:ir.model.fields,field_description:kalachakra.field_event_event__question_ids +#: model_terms:ir.ui.view,arch_db:kalachakra.booking_event_view_form +msgid "Questions" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_event__recurring_event +msgid "Recurring event" +msgstr "Evénement recurrent" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_event__recurring_event_newsletter_id +msgid "Recurring event Newsletter" +msgstr "Liste de diffusion" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__refuge +msgid "Refuge" +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.event_registration_template +msgid "Register" +msgstr "S'inscrire" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step1 +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "Registering to :" +msgstr "S'inscrire à" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__reliques +msgid "Reliques" +msgstr "" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.event_view_form msgid "Remove event from google agenda" msgstr "Supprimer l'événement du calendrier google" +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__retraite +msgid "Retraite" +msgstr "" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt msgid "Reçu de dons aux Œuvres" msgstr "" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__room_id +#: model_terms:ir.ui.view,arch_db:kalachakra.view_registration_search +#: model_terms:ir.ui.view,arch_db:kalachakra.view_room_occupation_search +msgid "Room" +msgstr "Chambre" + +#. module: kalachakra +#: model:ir.actions.act_window,name:kalachakra.action_registration +#: model:ir.ui.menu,name:kalachakra.booking_room_occupation_menu +msgid "Room occupation" +msgstr "Occupation" + +#. module: kalachakra +#: model:ir.actions.act_window,name:kalachakra.room_action +#: model:ir.ui.menu,name:kalachakra.booking_room_menu +msgid "Rooms" +msgstr "Chambres" + +#. module: kalachakra +#: model:ir.actions.act_window,name:kalachakra.room_occupation_action +msgid "Rooms occupation" +msgstr "Occupation des chambres" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__réservation +msgid "Réservation" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__réservations +msgid "Réservations" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__réservtions +msgid "Réservtions" +msgstr "Réservations" + +#. module: kalachakra +#: model:ir.model,name:kalachakra.model_sale_order +msgid "Sales Order" +msgstr "Bon de commande" + +#. module: kalachakra +#: model:ir.actions.act_window,name:kalachakra.registration_action_orders +msgid "Sales Orders" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__salon_rouen +msgid "Salon Rouen" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__salon_zen +msgid "Salon Zen" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__samsara +msgid "Samsara" +msgstr "" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.view_membership_search msgid "Search" -msgstr "" +msgstr "Cherchez" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.view_room_occupation_search +msgid "Search Room" +msgstr "Chercher une chambre" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.event_registration_option_search +#: model_terms:ir.ui.view,arch_db:kalachakra.event_registration_questionnaire_search +msgid "Search registrant" +msgstr "Chercher" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "Selection" +msgstr "Sélection" #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt msgid "Signature
" msgstr "" +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__site +msgid "Site" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__site_internet_boutique +msgid "Site internet boutique" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__site_réservations +msgid "Site réservations" +msgstr "" + #. module: kalachakra #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__source_name msgid "Source" msgstr "" +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.view_partner_form +msgid "Sources info" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__statut_contact__soutien +msgid "Soutien" +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.events_list +msgid "Soutien et Sangha :" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__stage +msgid "Stage" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_event__participation_standard_price +#: model:ir.model.fields,field_description:kalachakra.field_event_event__subscription_standard_price +msgid "Standard Price" +msgstr "Participation standard" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "Standard price" +msgstr "Participation standard" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_room_occupation__date_begin +#: model:ir.model.fields,field_description:kalachakra.field_booking_room_occupation__date_end +msgid "Start Date" +msgstr "Date début" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_partner_category__status +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__balance_order_state +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__down_payment_order_state +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__order_state +msgid "Status" +msgstr "Statut" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_res_partner__statut_contact +#: model:ir.model.fields,field_description:kalachakra.field_res_users__statut_contact +msgid "Statut" +msgstr "Statut" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.participation_form msgid "" "Street 1\n" " *" msgstr "" +"Rue 1\n" +" *" #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.participation_form msgid "Street 2" -msgstr "" +msgstr "Rue 2" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__event_partner_category__status__supermember +msgid "Super Member" +msgstr "Membre de soutien" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_res_partner__super_member +#: model:ir.model.fields,field_description:kalachakra.field_res_users__super_member +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__member_status__super_member +msgid "Super member" +msgstr "Membre de soutien" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_option__booking_option_super_member_price +#: model:ir.model.fields,field_description:kalachakra.field_event_event__booking_super_member_price +#: model:ir.model.fields,field_description:kalachakra.field_event_event__participation_super_member_price +#: model:ir.model.fields,field_description:kalachakra.field_event_event__subscription_super_member_price +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "Super member price" +msgstr "Participation membre de soutien" #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.thankyou -msgid "Thank you for your generosity !" -msgstr "" +msgid "Thank you for your registration !" +msgstr "Merci pour votre inscription !" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "The participation is free." +msgstr "La participation est libre" #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.participation_form msgid "Title *" -msgstr "" +msgstr "Titre *" #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.event_calendartui msgid "Today" -msgstr "" +msgstr "Auourd'hui" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +msgid "Total Price : " +msgstr "Montant total : " #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt msgid "Tél/Fax : 01 40 05 02 22" msgstr "" +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__vincennes +msgid "Vincennes" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__visite_lzr_09 +msgid "Visite lzr 09" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__visiteur +msgid "Visiteur" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__voyage_inde +msgid "Voyage inde" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__yoga +msgid "Yoga" +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step1 +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "Your status :" +msgstr "Votre statut :" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__zen +msgid "Zen" +msgstr "" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.participation_form msgid "Zip" @@ -436,10 +1438,69 @@ msgstr "" msgid "actif" msgstr "" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_questionnaire__answer +msgid "answer" +msgstr "réponse" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_location__available_seats +#: model:ir.model.fields,field_description:kalachakra.field_booking_room__available_seats +msgid "available seats" +msgstr "places disponibles" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.event_registration_template +msgid "available)" +msgstr "disponible)" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_questionnaire_form +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step1 +msgid "back" +msgstr "Retour" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.thankyou msgid "back Home" -msgstr "" +msgstr "Retour à la page d'accueil" + +#. module: kalachakra +#: model:ir.model,name:kalachakra.model_booking_location +msgid "booking location" +msgstr "Lieux" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_product_product__booking_option_product +#: model:ir.model.fields,field_description:kalachakra.field_product_template__booking_option_product +msgid "booking option product" +msgstr "Produits d'options de réservation" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_option__booking_option_id +#: model:ir.model.fields,field_description:kalachakra.field_event_event__booking_option_ids +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_option__booking_option_id +#: model:ir.model.fields,field_description:kalachakra.field_event_type__booking_option_ids +msgid "booking options" +msgstr "Options de réservation" + +#. module: kalachakra +#: model:ir.model,name:kalachakra.model_booking_option +msgid "booking options for events" +msgstr "options de réservation pour les événements" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_event__booking_product_id +#: model:ir.model.fields,field_description:kalachakra.field_product_product__booking_product +#: model:ir.model.fields,field_description:kalachakra.field_product_template__booking_product +msgid "booking product" +msgstr "produit de réservation" + +#. module: kalachakra +#: model:ir.model,name:kalachakra.model_booking_room +msgid "booking room" +msgstr "chambre" #. module: kalachakra #: model:ir.model.fields,field_description:kalachakra.field_event_event__calendar_id @@ -451,10 +1512,21 @@ msgstr "" msgid "coucou" msgstr "" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_location__description +#: model:ir.model.fields,field_description:kalachakra.field_booking_room__description +msgid "description" +msgstr "" + #. module: kalachakra #: model:ir.model.fields.selection,name:kalachakra.selection__kalachakra_membership__state__done msgid "done" -msgstr "payé" +msgstr "réglé" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__down_payment +msgid "down payment" +msgstr "Acompte" #. module: kalachakra #: model:ir.model.fields.selection,name:kalachakra.selection__kalachakra_membership__state__draft @@ -472,10 +1544,30 @@ msgid "end date" msgstr "date de fin" #. module: kalachakra -#: model:ir.model.fields,field_description:kalachakra.field_event_event__event_id +#: model:ir.model.fields,field_description:kalachakra.field_event_event__calendar_event_id msgid "event id" msgstr "" +#. module: kalachakra +#: model:ir.model,name:kalachakra.model_event_question +msgid "event question" +msgstr "question" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_room_occupation__event_registration_id +msgid "event registration" +msgstr "inscription à l'événement" + +#. module: kalachakra +#: model:ir.model,name:kalachakra.model_event_registration_option +msgid "event registration option" +msgstr "option de séjour" + +#. module: kalachakra +#: model:ir.model,name:kalachakra.model_event_registration_questionnaire +msgid "event registration questionnaire" +msgstr "questionnaire" + #. module: kalachakra #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile_mapping__external_field msgid "external field" @@ -486,22 +1578,87 @@ msgstr "" msgid "file mapping" msgstr "" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__gender +msgid "gender" +msgstr "sexe" + #. module: kalachakra #: model:ir.model.fields,field_description:kalachakra.field_event_tag_category__calendar_id msgid "google calendar id" msgstr "" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_event__online_id +#: model:ir.model.fields,field_description:kalachakra.field_res_partner__external_id +#: model:ir.model.fields,field_description:kalachakra.field_res_users__external_id +msgid "id" +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "id :" +msgstr "" + #. module: kalachakra #: model:ir.model,name:kalachakra.model_kalachakra_partnerdraft msgid "import draft partner" msgstr "" +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__interreligieux +msgid "interreligieux" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__kanban_color +msgid "kanban color" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_event__online_link +msgid "link" +msgstr "lien" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "link :" +msgstr "lien :" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_room__location_id +msgid "location" +msgstr "lieu" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__maitreya +msgid "maitreya" +msgstr "" + #. module: kalachakra #: model:ir.model,name:kalachakra.model_kalachakra_membership msgid "manage membership" msgstr "gérer les adhésions" #. module: kalachakra +#: model:ir.model,name:kalachakra.model_event_partner_category +msgid "map partner categories vs member or super-member for pricing" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_location__capacity +#: model:ir.model.fields,field_description:kalachakra.field_booking_room__capacity +msgid "max capacity" +msgstr "capacité maximale" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_res_partner__member_status +#: model:ir.model.fields,field_description:kalachakra.field_res_users__member_status +msgid "member status" +msgstr "statut d'adhésion" + +#. module: kalachakra +#: model:ir.model,name:kalachakra.model_event_membership_product #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__product_id #: model:ir.model.fields,field_description:kalachakra.field_product_product__membership_product #: model:ir.model.fields,field_description:kalachakra.field_product_template__membership_product @@ -513,24 +1670,106 @@ msgstr "produit d'adhésion" msgid "memberships of the current year" msgstr "adhésions de l'année civile en cours" +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__missun@gmail_com +msgid "missun@gmail.com" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_location__name +#: model:ir.model.fields,field_description:kalachakra.field_booking_room__name2 +msgid "name" +msgstr "nom" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.event_calendartui msgid "next" -msgstr "" +msgstr "suivant" #. module: kalachakra #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile_mapping__odoo_field msgid "odoo field" msgstr "" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_event__participation_product_id +msgid "participation product" +msgstr "produit de participation" + #. module: kalachakra #: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__partner_id msgid "partner" msgstr "Contact" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_event__online_password +msgid "password" +msgstr "mot de passe" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "password :" +msgstr "mot de passe :" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_registration__payment_status +msgid "payment status" +msgstr "statut du paiement" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.event_calendartui msgid "prev" +msgstr "suivant" + +#. module: kalachakra +#: model:ir.model,name:kalachakra.model_booking_question +#: model:ir.model.fields,field_description:kalachakra.field_booking_question__question +#: model:ir.model.fields,field_description:kalachakra.field_event_question__question +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_questionnaire__question +msgid "question" +msgstr "" + +#. module: kalachakra +#: model:ir.actions.act_window,name:kalachakra.questionnaire_action +#: model:ir.ui.menu,name:kalachakra.menu_event_questionnaire +msgid "questionnaire" +msgstr "" + +#. module: kalachakra +#: model:ir.model,name:kalachakra.model_booking_questionnaire +msgid "questionnaire pour inscription" +msgstr "" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.questionnaire_form +msgid "questionnaire_form" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__retraite_vipassana +msgid "retraite vipassana" +msgstr "" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_room_occupation__room_id +msgid "room" +msgstr "chambre" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_room__name +msgid "room name" +msgstr "Nom de la chambre" + +#. module: kalachakra +#: model:ir.model,name:kalachakra.model_booking_room_occupation +msgid "room occupation" +msgstr "occupation" + +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_booking_question__sequence +#: model:ir.model.fields,field_description:kalachakra.field_event_question__sequence +#: model:ir.model.fields,field_description:kalachakra.field_event_registration_questionnaire__sequence +msgid "sequence" msgstr "" #. module: kalachakra @@ -543,12 +1782,39 @@ msgstr "Date début" msgid "state" msgstr "état" +#. module: kalachakra +#: model:ir.model.fields,field_description:kalachakra.field_event_event__subscription_product_id +msgid "subscription product" +msgstr "produit d'adhésion" + #. module: kalachakra #: model:ir.model.fields,field_description:kalachakra.field_product_product__super_membership_product #: model:ir.model.fields,field_description:kalachakra.field_product_template__super_membership_product msgid "super membership product" msgstr "produit membre de soutien" +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_options_form +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step1 +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "to" +msgstr "à" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.view_membership_search +msgid "valid memberships" +msgstr "adhésions valides" + +#. module: kalachakra +#: model_terms:ir.ui.view,arch_db:kalachakra.registration_step2 +msgid "your registration is taken into account !" +msgstr "Votre inscrition a bien été prise en compte" + +#. module: kalachakra +#: model:ir.model.fields.selection,name:kalachakra.selection__res_partner__origine__zoom +msgid "zoom" +msgstr "Zoom" + #. module: kalachakra #: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt msgid "" @@ -566,8 +1832,3 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt msgid "{{SIGNATORY}} / {{SIGNATORYJOB}}" msgstr "" - -#. module: kalachakra -#: model_terms:ir.ui.view,arch_db:kalachakra.view_membership_search -msgid "valid memberships" -msgstr "adhésions valides" \ No newline at end of file diff --git a/models/__init__.py b/models/__init__.py index a85bca6..bff1c60 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -7,4 +7,12 @@ from . import event from . import product from . import membership from . import payment_transaction -from . import partner \ No newline at end of file +from . import partner +from . import booking_product +from . import booking_event +from . import booking_location +from . import booking_room +from . import booking_questionnaire +from . import booking_event_registration +from . import booking_donation +from . import booking_sale_order \ No newline at end of file diff --git a/models/booking_donation.py b/models/booking_donation.py new file mode 100644 index 0000000..52151bb --- /dev/null +++ b/models/booking_donation.py @@ -0,0 +1,18 @@ + +from odoo import models, fields, api + + +class DonationDonation(models.Model): + _inherit = 'donation.donation' + + event_registration_id=fields.Many2one( + 'event.registration', + String='Event registration', + index=True, + readonly=True, + track_visibility='onchange', + + ) + + + diff --git a/models/booking_event.py b/models/booking_event.py new file mode 100644 index 0000000..f3e14c9 --- /dev/null +++ b/models/booking_event.py @@ -0,0 +1,185 @@ +from odoo import models, fields, api +from odoo.exceptions import UserError, ValidationError,Warning +from psycopg2 import sql, DatabaseError + +from werkzeug import utils + + +class EventType(models.Model): + _inherit = "event.type" + _description = 'Event Template' + + booking_event = fields.Boolean(string="Booking event", tracking=True) + booking_option_ids=fields.One2many('booking.option','event_type_id','booking options') + booking_questionnaire_id=fields.Many2one( + 'booking.questionnaire', + String='Questionnaire', + index=True, + track_visibility='onchange', + ondelete='cascade' + ) +class EventBookingOptions(models.Model): + _name='booking.option' + _description='booking options for events' + booking_option_id=fields.Many2one('product.product',string='booking options',domain="[('booking_option_product','=','True')]") + name=fields.Char(related='booking_option_id.name') + + booking_option_price=fields.Monetary('Price',currency_field='currency_id') + booking_option_member_price=fields.Monetary('Member price',currency_field='currency_id') + booking_option_super_member_price=fields.Monetary('Super member price',currency_field='currency_id') + + event_type_id = fields.Many2one( + 'event.type', + String='Event type', + index=True, + readonly=True, + track_visibility='onchange', + ondelete='cascade' + ) + event_id = fields.Many2one( + 'event.event', + String='Event', + index=True, + readonly=True, + track_visibility='onchange', + ondelete='cascade' + ) + + + @api.model + def _default_currency(self): + company = self.env['res.company']._company_default_get( + 'event.event') + return company.currency_id + + currency_id = fields.Many2one( + 'res.currency', + string='Currency', + required=True, + track_visibility='onchange', + ondelete='restrict', + default=_default_currency + ) + @api.onchange('booking_option_id') + def onchange_booking_option(self): + + #for option in self: + if self.booking_option_id: + bo= self.env['product.product'].search([('id',"=",int(self.booking_option_id))]) + + self.booking_option_price= bo.lst_price + + + + + + +# class BookingEvent(models.Model): +# _inherit = "event.event" +# _description = 'Event' + + # booking_event = fields.Boolean(string="Booking event", tracking=True) + # question_ids=fields.One2many( + # 'event.question', + # 'event_id', + # string='Questions' + + # ) + # booking_option_ids=fields.One2many('booking.option','event_id','booking options') + + # @api.model + # def _default_currency(self): + # company = self.env['res.company']._company_default_get( + # 'event.event') + # return company.currency_id + + # currency_id = fields.Many2one( + # 'res.currency', + # string='Currency', + # required=True, + # states={'done': [('readonly', True)]}, + # track_visibility='onchange', + # ondelete='restrict', + # default=_default_currency + #) + # booking_price=fields.Monetary('Price',currency_field='currency_id') + # booking_member_price=fields.Monetary('Member price',currency_field='currency_id') + # booking_super_member_price=fields.Monetary('Super member price',currency_field='currency_id') + # booking_down_payment=fields.Monetary('Down payment',currency_field='currency_id') + # booking_product_id=fields.Many2one('product.product',string='booking product',domain="[('booking_product','=','True')]") + + + # @api.depends('event_type_id') + # def _compute_booking_event(self): + # self.booking_event=self.event_type_id.booking_event + + # @api.onchange('event_type_id') + # def onchange_state(self): + # self.booking_event=self.event_type_id.booking_event + + # booking_option=self.env['booking.option'].search([('event_type_id','=',int(self.event_type_id))]) + # if booking_option: + # on supprime les options existantes: + # self.booking_option_ids=False + + # on rappatrie les options du modèle + # for option in booking_option: + # vals={} + # vals['event_id']=self.id + # vals['booking_option_id']=option.booking_option_id + # vals['booking_option_price']=option.booking_option_price + # vals['currency_id']=option.currency_id + # self.booking_option_ids = [(0, 0, vals)] + + + # if self.event_type_id.booking_questionnaire_id: + + # on supprime les question existantes: + # self.question_ids=False + # questions=self.env['booking.question'].search([('questionnaire_id','=',int(self.event_type_id.booking_questionnaire_id))]) + # on rappatrie les question + # for question in questions: + # vals={} + # vals['event_id']=self.id + # vals['sequence']=question.sequence + # vals['question']=question.question + + # self.question_ids = [(0, 0, vals)] + + #super(event, self).write(vals) + #self.booking_option_ids=self.event_type_id.booking_option_ids +class event_question(models.Model): + _name = 'event.question' + _description = 'event question' + + question=fields.Text(string='question') + sequence = fields.Integer(string="sequence", default=10) + event_id = fields.Many2one( + 'event.event', + String='Questionnaire', + index=True, + readonly=True, + track_visibility='onchange', + ondelete='cascade' + ) + +class event_partner_category(models.Model): + _name = 'event.partner_category' + _description = 'map partner categories vs member or super-member for pricing' + + partner_category_id=fields.Many2one( + 'res.partner.category', + String='Category', + index=True, + track_visibility='onchange', + ondelete='cascade' + ) + + status=fields.Selection(selection=[('member','Member'),('supermember','Super Member')]) + +class event_membership_product(models.Model): + _name = 'event.membership_product' + _description = 'membership product' + + membership_product_id=fields.Many2one('product.product',string='Membership product',domain="[('booking_option_product','=','True')]") + diff --git a/models/booking_event_registration.py b/models/booking_event_registration.py new file mode 100644 index 0000000..278cf0d --- /dev/null +++ b/models/booking_event_registration.py @@ -0,0 +1,392 @@ +from odoo import models, fields, api +from odoo.exceptions import UserError, ValidationError, Warning +from psycopg2 import sql, DatabaseError +from dateutil.relativedelta import relativedelta +from datetime import datetime +from werkzeug import utils + + + +class EventRegistration(models.Model): + _inherit = 'event.registration' + + room_id = fields.Many2one( + 'booking.room', + String='Room', + index=True, + group_expand='_read_group_room_ids', + track_visibility='onchange', + + ) + booking_event=fields.Boolean(related='event_id.booking_event') + event_end=fields.Boolean(related='event_id.stage_id.pipe_end') + + medical_concern=fields.Selection( + [('have medical concern','I have a medical concern to report'), + ('have no medical concern','I have no medical concern to report'), + ('no answer','I don\'t want to answer')], + string='Medical concern', + ) + medical_information=fields.Char('Medical informations') + medical_contact_name=fields.Char('Name and Firstname of the contact') + medical_contact_phone=fields.Char('Phone of the contact') + + questionnaire_ids=fields.One2many( + 'event.registration_questionnaire', + 'event_registration_id', + String='Questionnaire', + + readonly=True + + ) + option_ids=fields.One2many( + 'event.registration_option', + 'event_registration_id', + String='Options', + + readonly=True + + ) + donation_ids=fields.One2many( + 'donation.donation', + 'event_registration_id', + String='Donations', + + readonly=True + + ) + + + down_payment=fields.Boolean('down payment',default=False) + firstname=fields.Char('Firstname') + age=fields.Integer('Age') + gender=fields.Selection([('male','Male'),('femelle','Femelle')],string='gender') + mobile=fields.Char('Mobile') + kanban_color=fields.Char('kanban color',compute='_compute_kanban_color') + order_id=fields.Many2one('sale.order') + order_state=fields.Selection(related='order_id.state') + down_payment_order_id=fields.Many2one('sale.order') + down_payment_order_state=fields.Selection(related='down_payment_order_id.state') + balance_order_id=fields.Many2one('sale.order') + balance_order_state=fields.Selection(related='balance_order_id.state') + + payment_status=fields.Char(string='payment status',compute='_compute_payment_status') + + + def _compute_payment_status(self): + for rec in self: + rec.payment_status='undefined' + if rec.order_id: + if rec.order_state in ('draft','sent'):rec.payment_status='not paid' + if rec.order_state=='sale':rec.payment_status='paid' + if rec.order_state in ('done','cancel'):rec.payment_status=rec.order_state + + else: + if rec.down_payment_order_id and balance_order_state: + if rec.down_payment_order_state in ('draft','sent'):rec.payment_status='down payment not paid' + if rec.down_payment_order_state=='sale' and rec.balance_payment_order_state=='sale' :rec.payment_status='paid' + if rec.down_payment_order_state=='sale' and rec.balance_payment_order_state!='sale':rec.payment_status='down payment paid' + + + + + + def _compute_kanban_color(self): + for rec in self: + rec.kanban_color='' + if rec.gender=='male':rec.kanban_color="d0e0e3" + if rec.gender=='femelle':rec.kanban_color="eebbcc" + @api.model + def _read_group_room_ids(self, stages, domain, order): + return self.env['booking.room'].search([]) + + @api.model_create_multi + def create(self, vals_list): + registrations = super(EventRegistration, self).create(vals_list) + if registrations._check_auto_confirmation(): + registrations.sudo().action_confirm() + + #ajout du questionnaire pour la personne inscrite + questions=self.env['event.question'].search([('event_id','=',int(registrations.event_id))]) + if questions: + for question in questions: + vals={} + vals['sequence']=question.sequence + vals['question']=question.question + vals['event_registration_id']=registrations.id + res=self.env['event.registration_questionnaire'].create(vals) + + #ajout des options pour la personne inscrite + options=self.env['booking.option'].search([('event_id','=',int(registrations.event_id))]) + if options: + for option in options: + vals={} + vals['booking_option_id']=int(option.booking_option_id) + vals['booking_option_price']=option.booking_option_price + vals['event_registration_id']=int(registrations.id) + res=self.env['event.registration_option'].create(vals) + + return registrations + + def action_event_registration_order(self): + return True + + def create_donation(self,event_registration_id,partner_id,product_id,price_unit): + vals={} + vals['partner_id']=int(partner_id) + #raise Warning(vals['partner_id']) + + vals['donation_date']=datetime.now() + vals['tax_receipt_option']='annual' + #mode de paiement CB par defaut + electronic_method=self.env['account.payment.method'].search([('code','=','electronic')],limit=1) + if electronic_method: + cb_mode=self.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') + #tant que le devis n'est pas validé (paiment effectué), le don est en brouillon + vals['state']='draft' + vals['payment_ref']='internet' + donation_draft=self.env['donation.donation'].sudo().create(vals) + #ajout du don au niveau de l'inscription + reg=self.env['event.registration'].search([('id','=',int(event_registration_id))]) + if reg: + reg.write({'donation_ids':[(4,int(donation_draft.id))]}) + + vals={} + #create line donation + vals['donation_id']=donation_draft.id + product=self.env['product.product'].search([('id','=',int(product_id))]) + vals['product_id']=int(product_id) + vals['display_name']=product.name + vals['quantity']=1 + vals['unit_price']=price_unit + vals['tax_receipt_ok']=product.tax_receipt_ok + + + donation_line=self.env['donation.line'].sudo().create(vals) + donation_draft.state='done' + + def action_event_registration_generate_order(self,id_registration=None): + + + #suppression des devis existants + if self.order_id: + self.env['sale.order'].search([('id','=',int(self.order_id))]).unlink() + self.order_id=False + + if self.down_payment_order_id: + self.env['sale.order'].search([('id','=',int(self.down_payment_order_id))]).unlink() + self.down_payment_order_id=False + + if self.balance_order_id: + self.env['sale.order'].search([('id','=',int(self.balance_order_id))]).unlink() + self.balance_order_id=False + + #suppression des dons existants + self.env['donation.donation'].search([('id','in',self.donation_ids)]).unlink() + self.donation_ids=False + + if id_registration:reg=self.env['event.registration'].search([('id','=',int(id_registration))]) + else : reg=self + + event=self.env['event.event'].search([('id','=',int(reg.event_id))]) + selected_registrant_options=self.env['event.registration_option'].search([ + ('event_registration_id','=',int(reg.id))]) + + #controles avant traitement : un produit doit être associé à l'événement + if not event.booking_product_id: raise Warning('product missing for event booking') + + #Prix à appliquer au produit en fonction du statut de l'inscrit + status=reg.partner_id.member_status + product_price=event.booking_price + if status=='not member':product_price=event.booking_price + if status=='member':product_price=event.booking_member_price + if status=='super member':product_price=event.booking_super_member_price + + #Prix à appliquer au produit si paiement de l'adhésion + membership_option=False + membership_product=self.env['event.membership_product'].search([]) + if membership_product: + if selected_registrant_options: + for opt in selected_registrant_options: + if opt.booking_option_id==membership_product.id: + membership_option=True + if status!="super member": + product_price=event.booking_member_price + + #calcul du montant total à régler + + + #création du devis sans accompte + + if not reg.down_payment: + #création du devis + vals={} + + vals['partner_id']=int(reg.partner_id) + order=self.env['sale.order'].create(vals) + #création des lignes de devis + vals={} + vals['order_id']=order.id + #ajout du produit + vals['product_id']=int(event.booking_product_id) + vals['product_uom_qty']=1 + vals['price_unit']=product_price + vals['name']=event.booking_product_id.name + order_line=self.env['sale.order.line'].create(vals) + + #ajout des options + vals={} + if selected_registrant_options: + for option in selected_registrant_options: + + vals['order_id']=order.id + vals['product_id']=int(option.booking_option_id.id) + vals['product_uom_qty']=1 + + prd=self.env['product.product'].search([('id','=',int(option.booking_option_id.id))]) + + + vals['name']=prd.name + + #prix à appliquer aux options en fonction du statut ou de la présence de l'option d'adhesion + event_option=self.env['booking.option'].search(['&',('event_id','=',int(reg.event_id)),('booking_option_id','=',int(option.booking_option_id.id))]) + + if event_option: + if status=="super member":vals['price_unit']=event_option.booking_option_super_member_price + if status=="member":vals['price_unit']=event_option.booking_option_member_price + if status=="not member" and membership_option: vals['price_unit']=event_option.booking_option_member_price + if status=="not member" and not membership_option: vals['price_unit']=event_option.booking_option_price + + order_line=self.env['sale.order.line'].create(vals) + #si l'option est un produit de don on créé un don pour la personne + #if prd.donation: self.create_donation(reg.id,reg.partner_id,vals['product_id'],vals['price_unit']) + + order.message_subscribe(partner_ids=order.partner_id.ids) + order.state='sent' + reg.order_id=order.id + + return order.id + + + #2 devis si paiement avec acompte + else: + #création du 1er devis d'acompte + vals={} + vals['partner_id']=int(reg.partner_id) + order=self.env['sale.order'].create(vals) + #création des lignes de devis + vals={} + vals['order_id']=order.id + #ajout du produit + vals['product_id']=int(event.booking_product_id) + vals['product_uom_qty']=1 + vals['price_unit']=event.booking_down_payment + vals['name']='Acompte '+event.booking_product_id.name + order_line=self.env['sale.order.line'].create(vals) + order.message_subscribe(partner_ids=order.partner_id.ids) + order.state='sent' + reg.down_payment_order_id=order.id + + + #création du 2ème devis de solde + paiement des options + + vals={} + + vals['partner_id']=int(reg.partner_id) + order2=self.env['sale.order'].create(vals) + #création des lignes de devis + vals={} + vals['order_id']=order2.id + #ajout du produit + vals['product_id']=int(event.booking_product_id) + vals['product_uom_qty']=1 + vals['price_unit']=product_price-event.booking_down_payment + vals['name']='solde '+event.booking_product_id.name + order_line=self.env['sale.order.line'].create(vals) + + #ajout des options + vals={} + if selected_registrant_options: + for option in selected_registrant_options: + + vals['order_id']=order2.id + vals['product_id']=int(option.booking_option_id.id) + vals['product_uom_qty']=1 + + prd=self.env['product.product'].search([('id','=',int(option.booking_option_id.id))]) + vals['name']=prd.name + + #prix à appliquer aux options en fonction du statut ou de la présence de l'option d'adhesion + event_option=self.env['booking.option'].search(['&',('event_id','=',int(reg.event_id)),('booking_option_id','=',int(option.booking_option_id.id))]) + + if event_option: + if status=="super member":vals['price_unit']=event_option.booking_option_super_member_price + if status=="member":vals['price_unit']=event_option.booking_option_member_price + if status=="not member" and membership_option: vals['price_unit']=event_option.booking_option_member_price + if status=="not member" and not membership_option: vals['price_unit']=event_option.booking_option_price + + order_line=self.env['sale.order.line'].create(vals) + order2.message_subscribe(partner_ids=order2.partner_id.ids) + order2.state='sent' + reg.balance_order_id=order2.id + return order.id + + + + + + + +class EventRegistration_questionnaire(models.Model): + _name = 'event.registration_questionnaire' + _description = 'event registration questionnaire' + + sequence = fields.Integer(string="sequence", default=10) + question=fields.Text(string='question',readonly=True) + answer=fields.Text(string='answer') + event_registration_id=fields.Many2one( + 'event.registration', + String='Event registration', + index=True, + readonly=True, + track_visibility='onchange', + ondelete='cascade' + + + ) + + class EventRegistration_option(models.Model): + _name = 'event.registration_option' + _description = 'event registration option' + + booking_option_id=fields.Many2one('product.product',string='booking options',domain="[('booking_option_product','=','True')]") + booking_option_price=fields.Monetary('Price',currency_field='currency_id',readonly=True) + event_registration_id=fields.Many2one( + 'event.registration', + String='Event registration', + index=True, + readonly=True, + track_visibility='onchange', + + ) + + + @api.model + def _default_currency(self): + company = self.env['res.company']._company_default_get( + 'event.event') + return company.currency_id + + currency_id = fields.Many2one( + 'res.currency', + string='Currency', + required=True, + states={'done': [('readonly', True)]}, + track_visibility='onchange', + ondelete='restrict', + default=_default_currency + ) \ No newline at end of file diff --git a/models/booking_location.py b/models/booking_location.py new file mode 100644 index 0000000..55be9c0 --- /dev/null +++ b/models/booking_location.py @@ -0,0 +1,14 @@ +from odoo import models, fields, api + + +class booking_location(models.Model): + _name = 'booking.location' + _description = 'booking location' + + name = fields.Char('name',required=True) + description = fields.Text('description') + capacity = fields.Integer('max capacity') + available_seats = fields.Integer('available seats') + + + \ No newline at end of file diff --git a/models/booking_partner.py b/models/booking_partner.py new file mode 100644 index 0000000..e69de29 diff --git a/models/booking_product.py b/models/booking_product.py new file mode 100644 index 0000000..1ff56de --- /dev/null +++ b/models/booking_product.py @@ -0,0 +1,26 @@ +from odoo import models, fields, api +from odoo.exceptions import UserError, ValidationError +from psycopg2 import sql, DatabaseError + +from werkzeug import utils + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + booking_product = fields.Boolean(string="booking product", tracking=True) + booking_option_product = fields.Boolean(string="booking option product", tracking=True) + + # def _get_special_price(self, combination=False, product_id=False, add_qty=1, pricelist=False, parent_combination=False, only_template=False): + + + # special_price={} + # special_price['price_adherent']=100 + # special_price['price_soutien']=100 + # return special_price + + + + + + diff --git a/models/booking_questionnaire.py b/models/booking_questionnaire.py new file mode 100644 index 0000000..6b5d905 --- /dev/null +++ b/models/booking_questionnaire.py @@ -0,0 +1,33 @@ +from odoo import models, fields, api,_ +from odoo.exceptions import UserError, ValidationError,Warning +from psycopg2 import sql, DatabaseError + + + +class booking_questionnaire(models.Model): + _name = 'booking.questionnaire' + _description = 'questionnaire pour inscription' + + name=fields.Char(string='Name') + description=fields.Text(string='Description') + question_ids = fields.One2many( + 'booking.question', + 'questionnaire_id', + string='Questions' + + ) + +class booking_question(models.Model): + _name = 'booking.question' + _description = 'question' + + question=fields.Text(string='question') + sequence = fields.Integer(string="sequence", default=10) + questionnaire_id = fields.Many2one( + 'booking.questionnaire', + String='Questionnaire', + index=True, + readonly=True, + track_visibility='onchange', + ondelete='cascade' + ) diff --git a/models/booking_room.py b/models/booking_room.py new file mode 100644 index 0000000..77e3a62 --- /dev/null +++ b/models/booking_room.py @@ -0,0 +1,46 @@ +from odoo import models, fields, api +from odoo.exceptions import UserError, ValidationError,Warning + + +class booking_room(models.Model): + _name = 'booking.room' + _description = 'booking room' + + name2 = fields.Char('name',required=True) + name=fields.Char('room name',compute='_compute_room_name') + description = fields.Text('description') + capacity = fields.Integer('max capacity') + available_seats = fields.Integer('available seats') + location_id=fields.Many2one('booking.location', string='location') + + def _compute_room_name(self): + for rec in self: + rec.name='' + if rec.name2: + rec.name=rec.name2+'('+str(rec.capacity)+')' + + +class booking_room_occupation(models.Model): + _name = 'booking.room.occupation' + _description = 'room occupation' + + room_id = fields.Many2one('booking.room', string='room') + event_id=fields.Many2one('event.event',domain="[('date_begin','>=',context_today().strftime('%Y-%m-%d 00:00:00'))]") + event_registration_id = fields.Many2one('event.registration', string='event registration',domain="['&',('event_id', '=', event_id),('room_id', '=', False),('event_id.booking_event', '=', True)]") + name=fields.Char(related='event_registration_id.name') + + date_begin=fields.Datetime(related='event_registration_id.event_id.date_begin') + date_end=fields.Datetime(related='event_registration_id.event_id.date_begin') + + @api.model + def create(self,vals): + + res=super(booking_room_occupation, self).create(vals) + + #event_reg=self.env['booking.room.occupation'].search([]) + + event_reg=self.env['event.registration'].search([('id','=',int(res.event_registration_id))]) + + + event_reg.room_id= res.room_id + return res \ No newline at end of file diff --git a/models/booking_sale_order.py b/models/booking_sale_order.py new file mode 100644 index 0000000..6146338 --- /dev/null +++ b/models/booking_sale_order.py @@ -0,0 +1,39 @@ +from odoo import models, fields, api + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + + def write(self,vals): + + res = super(SaleOrder, self).write(vals) + + if self.state=='sale': + + #on recherche si le devis est lié à une booking inscription + event_registration=self.env['event.registration'].search(['|','|',('order_id','=',int(self.id)),('down_payment_order_id','=',int(self.id)),('balance_order_id','=',int(self.id))]) + #event_registration=self.env['event.registration'].search([('order_id','=',int(self.id))]) + + if event_registration: + + if event_registration.payment_status=='paid': + amount=0 + for option in event_registration.option_ids: + prd=self.env['product.product'].search([('id','=',int(option.booking_option_id)),('donation','=',True)]) + if prd: + #au niveau de l'événement,on recherche le montant du don en fonction du statut: + booking_option=self.env['booking.option'].search([('event_id','=',int(event_registration.event_id)),('booking_option_id','=',int(option.booking_option_id))]) + if booking_option: + if event_registration.partner_id.member_status=='not member' : amount=booking_option.booking_option_price + if event_registration.partner_id.member_status=='member': amount=booking_option.booking_option_member_price + if event_registration.partner_id.member_status=='super member': amount=booking_option.booking_option_super_member_price + + + self.env['event.registration'].create_donation(event_registration.id,event_registration.partner_id,option.booking_option_id,amount) + + + + + + \ No newline at end of file diff --git a/models/event.py b/models/event.py index 4c0a448..30999a1 100644 --- a/models/event.py +++ b/models/event.py @@ -1,6 +1,3 @@ - - - from odoo import models, fields, api from odoo.exceptions import UserError, ValidationError,Warning from psycopg2 import sql, DatabaseError @@ -26,7 +23,7 @@ class EventTagCategory(models.Model): calendar_id=fields.Char('google calendar id') -class EventEvent(models.Model): +class KalachakraEvent(models.Model): _inherit = "event.event" _description = 'Event' @@ -48,6 +45,54 @@ class EventEvent(models.Model): online_link=fields.Char('link') online_id=fields.Char('id') online_password=fields.Char('password') + + booking_event = fields.Boolean(string="Booking event", tracking=True) + question_ids=fields.One2many( + 'event.question', + 'event_id', + string='Questions' + + ) + booking_option_ids=fields.One2many('booking.option','event_id','booking options') + booking_price=fields.Monetary('Price',currency_field='currency_id') + booking_member_price=fields.Monetary('Member price',currency_field='currency_id') + booking_super_member_price=fields.Monetary('Super member price',currency_field='currency_id') + booking_down_payment=fields.Monetary('Down payment',currency_field='currency_id') + booking_product_id=fields.Many2one('product.product',string='booking product',domain="[('booking_product','=','True')]") + + @api.onchange('event_type_id') + def onchange_state(self): + self.booking_event=self.event_type_id.booking_event + + booking_option=self.env['booking.option'].search([('event_type_id','=',int(self.event_type_id))]) + if booking_option: + #on supprime les options existantes: + self.booking_option_ids=False + + #on rappatrie les options du modèle + for option in booking_option: + vals={} + vals['event_id']=self.id + vals['booking_option_id']=option.booking_option_id + vals['booking_option_price']=option.booking_option_price + vals['currency_id']=option.currency_id + self.booking_option_ids = [(0, 0, vals)] + + + if self.event_type_id.booking_questionnaire_id: + + #on supprime les question existantes: + self.question_ids=False + questions=self.env['booking.question'].search([('questionnaire_id','=',int(self.event_type_id.booking_questionnaire_id))]) + #on rappatrie les question + for question in questions: + vals={} + vals['event_id']=self.id + vals['sequence']=question.sequence + vals['question']=question.question + + self.question_ids = [(0, 0, vals)] + @api.model def _default_currency(self): diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 277b982..e608963 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -2,3 +2,18 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_kalachakra_membership,kalachakra.membership,model_kalachakra_membership,base.group_user,1,1,1,1 +access_booking_booking_option,booking.booking_option,model_booking_option,base.group_user,1,1,1,1 +access_booking_location,booking.booking_location,model_booking_location,base.group_user,1,1,1,1 +access_booking_room,booking.booking_room,model_booking_room,base.group_user,1,1,1,1 +access_booking_room_occupation,booking.booking_room_occupation,model_booking_room_occupation,base.group_user,1,1,1,1 + +access_booking_questionnaire,booking.booking_questionnaire,model_booking_questionnaire,base.group_user,1,1,1,1 +access_booking_questionnaire_question,booking.booking_question,model_booking_question,base.group_user,1,1,1,1 + +access_booking_event_question,booking.event_question,model_event_question,base.group_user,1,1,1,1 + +access_event_registration,event.registration,model_event_registration,base.group_user,1,1,1,1 +access_event_registration_questionnaire,event.registration_questionnaire,model_event_registration_questionnaire,base.group_user,1,1,1,1 +access_event_registration_option,event.registration_option,model_event_registration_option,base.group_user,1,1,1,1 +access_event_partner_category,event.partner_category,model_event_partner_category,base.group_user,1,1,1,1 +access_event_membership_product,event.membership_product,model_event_membership_product,base.group_user,1,1,1,1 diff --git a/static/js/booking.js b/static/js/booking.js new file mode 100644 index 0000000..39beddc --- /dev/null +++ b/static/js/booking.js @@ -0,0 +1,111 @@ +odoo.define('booking.main', function (require) { + + + $(document).ready(function() { + + $('#medical_info').hide() + + $('#booking_total_price').text( + $('#booking_price_product').val()+' €' + ); + + }); + + $( "#medical_concern" ).change(function() { + + if (this.value=='have medical concern') + { + $('#medical_info').show() + $("medical_info_div").addClass("s_website_form_required"); + $("medical_information").prop('required',true); + } + else + { + $('#medical__info').hide() + $("medical_info_div").removeClass("s_website_form_required"); + $("medical_information").prop('required',false); + } + + + }); + + $( "#back_button2" ).click(function() { + history.back() + }); + + $( "#back_button1" ).click(function() { + history.back() + }); + + $(":checkbox").change(function() { + + if(this.value==$("#membership_product").val() && this.checked) + { + + if ($("#status").val()=='standard') {$("#status2").val('member')} + + + } + if(this.value==$("#membership_product").val() && this.checked==false) + { + if ($("#status").val()=='standard'){$("#status2").val('standard')} + + } + + + + + //recalcul du prix total + if ($("#status2").val()=='standard') + { + $("#your_status").text('standard') + + $("#price_of_the_stay").text($("#booking_price").val()+' €') + $("#total_price").val($("#booking_price").val()) + } + if ($("#status2").val()=='member') + { + $("#your_status").text('member') + $("#price_of_the_stay").text($("#booking_member_price").val()+' €') + $("#total_price").val($("#booking_member_price").val()) + } + if ($("#status2").val()=='super member') + { + $("#your_status").text('super member') + $("#price_of_the_stay").text($("#booking_super_member_price").val()+' €') + $("#total_price").val($("#booking_super_member_price").val()) + } + + $( ":checkbox" ).each(function( index ) { + var l=this.name.length + var i=this.name.substring(2,l-1) + + if (this.value==$("#membership_product").val()) + { + var option_price_str='#o_standard'+i + } + else + { + var option_price_str='#o_'+$("#status2").val()+i + } + + + option_price=$(option_price_str).val() + + total_price=$("#total_price").val() + + if(this.checked) { + + $("#total_price").val(parseInt(total_price)+parseInt(option_price)) + + } + + }); + + $("#booking_total_price").text($("#total_price").val()+' €'); + + + }); + + +}); \ No newline at end of file diff --git a/views/booking_event.xml b/views/booking_event.xml new file mode 100644 index 0000000..50ab0b6 --- /dev/null +++ b/views/booking_event.xml @@ -0,0 +1,155 @@ + + + + + partner category list + event.partner_category + + + + + + + + + + Membership product list + event.membership_product + + + + + + + + + + event.type.view.form.inherit.booking + event.type + + + +
+
+
+ +
+
+
+ +
+ +
+ + + + +
+ + + +
+
+ + + event.view.form.inherit.booking + event.event + + + +
+
+
+ +
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + Partner categories + event.partner_category + tree,form + + + + Membership product + event.membership_product + tree,form + + + + + + + + +
\ No newline at end of file diff --git a/views/booking_event_registration.xml b/views/booking_event_registration.xml new file mode 100644 index 0000000..d49d64e --- /dev/null +++ b/views/booking_event_registration.xml @@ -0,0 +1,208 @@ + + + + Booking Questionnaire + event.registration_questionnaire + tree,form + {'search_default_event_registration_id': active_id} + + + + event_registration_questionnaire.search + event.registration_questionnaire + + + + + + + + + Booking Options + event.registration_option + tree,form + {'search_default_event_registration_id': active_id} + + + + Sales Orders + ir.actions.act_window + sale.order + tree,kanban,form,calendar,pivot,graph,activity + + {} + [('state', 'not in', ('draft', 'sent', 'cancel'))] + +

+ Create a new quotation, the first step of a new sale! +

+ Once the quotation is confirmed, it becomes a sales order.
You will be able to create an invoice and collect the payment. +

+
+
+ + + event_registration_option.search + event.registration_option + + + + + + + + + event.type.view.form.inherit.booking + event.registration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + event registration questionnaire List + event.registration_questionnaire + + + + + + + + + + + event registration option List + event.registration_option + + + + + + + + + + + + booking.event.registration.kanban.inherit + event.registration + + + + + + + + + + + room_id + + + + + + + +
+
+
+
+
+ + + Booked by +
+ +
+ +
+
+
+
+
+
+
+ + +
+
+
+
+
+
+ + + booking.event.registration.tree.inherit + event.registration + + + + + + + + + + + + + event.registration.search.inherit + event.registration + + + + + + + + + +
\ No newline at end of file diff --git a/views/booking_event_templates_list.xml b/views/booking_event_templates_list.xml new file mode 100644 index 0000000..0d0bc5d --- /dev/null +++ b/views/booking_event_templates_list.xml @@ -0,0 +1,33 @@ + + + + + + \ No newline at end of file diff --git a/views/booking_event_templates_page_registration.xml b/views/booking_event_templates_page_registration.xml new file mode 100644 index 0000000..3678524 --- /dev/null +++ b/views/booking_event_templates_page_registration.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/views/booking_location.xml b/views/booking_location.xml new file mode 100644 index 0000000..b774375 --- /dev/null +++ b/views/booking_location.xml @@ -0,0 +1,32 @@ + + + + + + + booking_location list + booking.location + + + + + + + + + + + + Locations + booking.location + tree,form + + + + + + + + \ No newline at end of file diff --git a/views/booking_product.xml b/views/booking_product.xml new file mode 100644 index 0000000..b6f9d89 --- /dev/null +++ b/views/booking_product.xml @@ -0,0 +1,38 @@ + + + + + booking.product.template.search + product.template + + + + + + + + + + + + booking.product.template.form + product.template + + +
+ +
+
+
+
\ No newline at end of file diff --git a/views/booking_questionnaire.xml b/views/booking_questionnaire.xml new file mode 100644 index 0000000..f4aaa0e --- /dev/null +++ b/views/booking_questionnaire.xml @@ -0,0 +1,57 @@ + + + + + booking_questionnaire list + booking.questionnaire + + + + + + + + + + + booking_questionnaire Form + booking.questionnaire + +
+ + + + + + + + + + + + + + + + + +
+
+
+ + + + questionnaire + booking.questionnaire + tree,form + + + + +
+
\ No newline at end of file diff --git a/views/booking_registration.xml b/views/booking_registration.xml new file mode 100644 index 0000000..8b628ea --- /dev/null +++ b/views/booking_registration.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/views/booking_room.xml b/views/booking_room.xml new file mode 100644 index 0000000..c25fe0d --- /dev/null +++ b/views/booking_room.xml @@ -0,0 +1,101 @@ + + + + + + booking_room list + booking.room + + + + + + + + + + + + + + + Rooms + booking.room + tree,form + + + + + + + booking_room_occupation list + booking.room.occupation + + + + + + + + + + + + + booking_room_occupation Form + booking.room.occupation + +
+ + + + + + + + + + +
+
+
+ + + room.occupation.search + booking.room.occupation + 1 + + + + + + + + + + Rooms occupation + booking.room.occupation + tree,form,pivot + + + + Room occupation + event.registration + + kanban,pivot,graph,tree,form + {} + [('booking_event','=',True),('event_end','=',False)] + + + + + + + + + + +
+
\ No newline at end of file diff --git a/views/booking_website_registration.xml b/views/booking_website_registration.xml new file mode 100644 index 0000000..2f732fa --- /dev/null +++ b/views/booking_website_registration.xml @@ -0,0 +1,319 @@ + + + + + + + + +