Browse Source

correction retraites

dev-rcn
root 3 years ago
parent
commit
4e44c8068f
12 changed files with 158 additions and 40 deletions
  1. +1
    -1
      __manifest__.py
  2. +2
    -1
      controllers/booking.py
  3. +1
    -1
      models/__init__.py
  4. +1
    -0
      models/booking_event.py
  5. +9
    -5
      models/booking_event_registration.py
  6. +1
    -1
      models/partner.py
  7. +30
    -4
      models/res_users.py
  8. +23
    -0
      static/js/booking.js
  9. +1
    -6
      views/auth_signup_login_templates.xml
  10. +39
    -13
      views/booking_event_registration.xml
  11. +27
    -7
      views/booking_website_registration.xml
  12. +23
    -1
      views/partner.xml

+ 1
- 1
__manifest__.py View File

@ -20,7 +20,7 @@
'version': '0.1',
# any module necessary for this one to work correctly
'depends': ['base','mail','donation','event','website'],
'depends': ['base','mail','donation','event','website','auth_signup'],
# always loaded
'data': [


+ 2
- 1
controllers/booking.py View File

@ -155,6 +155,7 @@ class booking(WebsiteEventController,AuthSignupHome):
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['image_permission']=post.get('image_permission')
vals['down_payment']=request.session['down_payment']
vals['state']='draft'
@ -199,7 +200,7 @@ class booking(WebsiteEventController,AuthSignupHome):
res.write({'option_ids':[(4,res3.id)]})
i=i+1
invoice=request.env['event.registration'].sudo().action_event_registration_generate_invoice(request.session['res_id'])
invoice=request.env['event.registration'].sudo().action_event_registration_generate_invoice(request.session['res_id'],False)
request.session['invoice_id']=invoice.id
#redirection sur la page de paiement de la facture :


+ 1
- 1
models/__init__.py View File

@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
from . import models
from . import partnerimport
# from . import partnerimport
from . import donation
from . import event
from . import product


+ 1
- 0
models/booking_event.py View File

@ -84,6 +84,7 @@ class BookingEvent(models.Model):
string='Questions'
)
@api.onchange('questionnaire_id')
def onchange_questionnaire(self):


+ 9
- 5
models/booking_event_registration.py View File

@ -77,7 +77,7 @@ class EventRegistration(models.Model):
image_right_clearance=fields.Boolean('image right clearance')
train_arrival_time=fields.Float(string="train arrival time")
train_arrival_date=fields.Date(string="train arrival date")
image_permission=fields.Boolean("Image permission")
kanban_color=fields.Char('kanban color',compute='_compute_kanban_color')
invoice_state=fields.Selection(related='invoice_id.payment_state')
@ -183,7 +183,7 @@ class EventRegistration(models.Model):
def action_event_registration_generate_invoice(self,id_registration=None):
def action_event_registration_generate_invoice(self,id_registration=None,backoffice=True):
#suppression des factures existantes
@ -326,7 +326,9 @@ class EventRegistration(models.Model):
if status=="member":price_unit=event_option.booking_option_member_price
if status=="not member" and membership_option:price_unit=event_option.booking_option_member_price
if status=="not member" and not membership_option:price_unit=event_option.booking_option_price
if backoffice:
if option.booking_option_id.booking_option_product_backoffice:
price_unit=option.booking_option_price
vals={}
vals['move_id']=invoice.id
@ -596,8 +598,10 @@ class EventRegistration_questionnaire(models.Model):
_name = 'event.registration_option'
_description = 'event registration option'
booking_option_id=fields.Many2one('product.product',string='booking options',domain="[('id','in',selectable_option_ids)]")
booking_option_price=fields.Monetary('Price',currency_field='currency_id',readonly=True)
#booking_option_id=fields.Many2one('product.product',string='booking options',domain="[('id','in',selectable_option_ids)]")
booking_option_id=fields.Many2one('product.product',string='booking options', domain="['|',('booking_option_product_backoffice','=','True'),('booking_option_product','=','True')]")
booking_option_price=fields.Monetary('Price',currency_field='currency_id')
booking_option_backoffice=fields.Boolean(related='booking_option_id.booking_option_product_backoffice',store=True)
selectable_option_ids = fields.Many2many('product.product', compute='_compute_selectable_option')
event_registration_id=fields.Many2one(
'event.registration',


+ 1
- 1
models/partner.py View File

@ -69,7 +69,7 @@ class ResPartner(models.Model):
if rec.super_member: rec.member_status='super member'
member_status=fields.Selection(string='member status',selection=[('not member','Not member'),('member','Member'),('super member','Super member')]
,compute="_compute_member_status")
,compute="_compute_member_status",store=True)
super_member=fields.Boolean("Super member")


+ 30
- 4
models/res_users.py View File

@ -1,9 +1,9 @@
import logging
import random
from ast import literal_eval
from collections import defaultdict
from dateutil.relativedelta import relativedelta
from datetime import datetime, timedelta
from odoo import api, fields, models, _
from odoo.exceptions import UserError
from odoo.osv import expression
@ -17,6 +17,11 @@ _logger = logging.getLogger(__name__)
class ResUsers(models.Model):
_inherit = 'res.users'
def random_token(self):
# the token has an entropy of about 120 bits (6 bits/char * 20 chars)
chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
return ''.join(random.SystemRandom().choice(chars) for _ in range(20))
@api.model
def signup(self, values, token=None):
""" signup a user, to either:
@ -27,7 +32,25 @@ class ResUsers(models.Model):
:param token: signup token (optional)
:return: (dbname, login, password) for the signed up user
"""
#recherche si un contact existe avec l'adresse email saisie
partner_email=self.env['res.partner'].sudo().search([('email','=',values.get('login'))])
_logger.error("partner_email:"+str(partner_email.email))
#si le contact existe déjà on vérifie s'il existe déjà un compte utilisateur
if partner_email:
user_email=self.env['res.users'].sudo().search([('login','=',values.get('email'))])
#si un compte utilisateur existe déjà avec l'adresse email, message
if user_email: return True
#si pas de compte utilisateur on crée un token pour le contact trouvé
else:
partner_email.signup_type='signup'
partner_email.signup_token=self.random_token()
partner_email.signup_expiration=datetime.today()+timedelta(days=1)
token=partner_email.signup_token
if token:
# signup with a token: find the corresponding partner id
partner = self.env['res.partner']._signup_retrieve_partner(token, check_validity=True, raise_exception=True)
# invalidate signup token
@ -43,19 +66,20 @@ class ResUsers(models.Model):
values.pop('lang', None)
if partner_user:
_logger.error("user exists, modify it according to values"+str(partner.email))
# user exists, modify it according to values
values.pop('login', None)
values.pop('name', None)
values.pop('firstname', None)
partner_user.write(values)
if not partner_user.login_date:
partner_user._notify_inviter()
return (self.env.cr.dbname, partner_user.login, values.get('password'))
else:
_logger.error("user does not exist: sign up invited user")
# user does not exist: sign up invited user
values.update({
'name': partner.name,
'firstname': partner.firstname,
'partner_id': partner.id,
'email': values.get('email') or values.get('login'),
})
@ -67,6 +91,8 @@ class ResUsers(models.Model):
else:
# no token, sign up an external user
values['email'] = values.get('email') or values.get('login')
self._signup_create_user(values)
return (self.env.cr.dbname, values.get('login'), values.get('password'))

+ 23
- 0
static/js/booking.js View File

@ -8,6 +8,9 @@ odoo.define('booking.main', function (require) {
$('#booking_total_price').text(
$('#booking_price_product').val()+' €'
);
//$( "#continue_button2").unbind( "click" );
});
@ -69,6 +72,26 @@ odoo.define('booking.main', function (require) {
}
});
$( "#continue_button2" ).click(function() {
if ($('#image_permission').val()=='')
{
$('#validation_message').text('merci de répondre à la demande d\'autorisation de l\'utilisation de votre image')
$('#validation_message').show()
}
else
{
$('#form2').submit()
}
});
$( "#back_button2" ).click(function() {
history.back()
});


+ 1
- 6
views/auth_signup_login_templates.xml View File

@ -7,12 +7,7 @@
required="required" t-att-readonly="'readonly' if only_passwords else None"
t-att-autofocus="'autofocus' if login and not only_passwords else None" />
</div>
<div class="form-group field-name">
<label for="name">Your First name</label>
<input type="text" name="firstname" t-att-value="firstname" id="firstname" class="form-control form-control-sm"
required="required" t-att-readonly="'readonly' if only_passwords else None"
t-att-autofocus="'autofocus' if login and not only_passwords else None" />
</div>
</xpath>
</template>


+ 39
- 13
views/booking_event_registration.xml View File

@ -17,11 +17,20 @@
</field>
</record>
<record model="ir.actions.act_window" id="action_view_event_registration_option">
<record model="ir.actions.act_window" id="action_view_event_registration_option_frontoffice">
<field name="name">Booking Options</field>
<field name="res_model">event.registration_option</field>
<field name="view_mode">tree,form</field>
<field name="context">{'search_default_event_registration_id': active_id}</field>
<field name="domain">[('booking_option_backoffice', '=', False)]</field>
<field name="context">{'frontoffice':True,'search_default_event_registration_id': active_id,'search_default_booking_option_backoffice': False}</field>
</record>
<record model="ir.actions.act_window" id="action_view_event_registration_option_backoffice">
<field name="name">Booking Options Backoffice</field>
<field name="res_model">event.registration_option</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('booking_option_backoffice', '=', True)]</field>
<field name="context">{'frontoffice':False,'search_default_event_registration_id': active_id,'search_default_booking_option_backoffice': True}</field>
</record>
<record id="registration_action_orders" model="ir.actions.act_window">
@ -68,7 +77,7 @@
<field name="room_id" attrs="{'invisible':[('booking_event','!=',True)]}"/>
<field name="train_arrival_date" widget="date" attrs="{'invisible':[('booking_event','!=',True)]}"/>
<field name="train_arrival_time" widget="float_time" attrs="{'invisible':[('booking_event','!=',True)]}"/>
<field name="image_permission" attrs="{'invisible':[('booking_event','!=',True)]}"/>
</xpath>
@ -81,8 +90,15 @@
</xpath>
<xpath expr="//div[@name='button_box']" position="inside">
<t t-if="booking_event" >
<button name="%(action_view_event_registration_option)d" type="action"
class="oe_stat_button" icon="fa-bed" string="Options" attrs="{'invisible':[('booking_event','!=',True)]}">
<button name="%(action_view_event_registration_option_frontoffice)d" type="action"
class="oe_stat_button" icon="fa-bed" string="Options front-office" attrs="{'invisible':[('booking_event','!=',True)]}">
</button>
</t>
</xpath>
<xpath expr="//div[@name='button_box']" position="inside">
<t t-if="booking_event" >
<button name="%(action_view_event_registration_option_backoffice)d" type="action"
class="oe_stat_button" icon="fa-bed" string="Options backoffice" attrs="{'invisible':[('booking_event','!=',True)]}">
</button>
</t>
</xpath>
@ -133,14 +149,28 @@
<tree editable="bottom">
<field name="booking_option_id"/>
<field name="selectable_option_ids" invisible="1"/>
<!-- <field name="booking_option_price"/> -->
<field invisible="context.get('frontoffice')" name="booking_option_price"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="event_registration_option_form" >
<field name="name">event registration option Form</field>
<field name="model">event.registration_option</field>
<field name="arch" type="xml">
<form>
<group>
<field name="booking_option_id"/>
<field name="selectable_option_ids" invisible="1"/>
</group>
</form>
</field>
</record>
<record id="event_registration_view_kanban" model="ir.ui.view">
<field name="name">booking.event.registration.kanban.inherit</field>
<field name="model">event.registration</field>
@ -159,11 +189,7 @@
</xpath>
<!-- <xpath expr="/kanban/templates/t[3]/div/div/div/div/div/span" position="replace">
<span attrs="{'invisible': [('partner_id', '=', False)]}">Booked by <field name="partner_id" /> (<field name="gender" />)</span>
</xpath> -->
<xpath expr="/kanban/templates/t[3]/div" position="replace">
<!-- <attribute name="style">background-color:red</attribute> -->
<div t-attf-class="oe_kanban_global_click oe_kanban_color_#{record.kanban_color.raw_value} o_event_registration_kanban container-fluid p-0" t-attf-style="background-color:##{record.kanban_color.raw_value};">


+ 27
- 7
views/booking_website_registration.xml View File

@ -210,7 +210,7 @@
<div class="container-fluid">
<h4 t-esc="'Inscription à : '+event.name"></h4>
<h6><u>Health quiz</u></h6>
<form action="/booking/payment_choice" method="post" class="form js_website_submit_form">
<form name="form2" id="form2" action="/booking/payment_choice" method="post" class="form js_website_submit_form">
<input type="hidden" name="event_id" t-att-value="event.id"/>
<div class="form-group s_website_form_field col-8 s_website_form_custom s_website_form_required" data-type="char" data-name="Field">
<div class="row s_col_no_resize s_col_no_bgcolor">
@ -241,14 +241,15 @@
</div>
</div>
</div>
</div>
<h6>Please provide us with the contact details of a loved one in the event of a problem encountered during your stay:</h6>
<div class="form-group s_website_form_field col-6 s_website_form_custom" data-type="char" data-name="Field">
<div class="row s_col_no_resize s_col_no_bgcolor">
<label class="col-form-label col-sm-auto s_website_form_label" style="width: 200px" for="9ois9pkv0wv">
<span class="s_website_form_label_content">Name of the medical contact</span>
<span class="s_website_form_label_content">Name of the contact</span>
<span class="s_website_form_mark"></span>
</label>
<div class="col-sm">
<div class="col-12 col-sm-12 col-md-6 col-lg-4 col-xl-3">
<input type="text" class="form-control s_website_form_input" name="medical_contact_name" value="" id="medical_contact_name" style="cursor: auto;"/>
</div>
</div>
@ -256,15 +257,32 @@
<div class="form-group s_website_form_field col-6 s_website_form_custom " data-type="char" data-name="Field">
<div class="row s_col_no_resize s_col_no_bgcolor">
<label class="col-form-label col-sm-auto s_website_form_label" style="width: 200px" for="9ois9pkv0wv">
<span class="s_website_form_label_content">Phone of the medical contact</span>
<span class="s_website_form_label_content">Phone of the contact</span>
<span class="s_website_form_mark"></span>
</label>
<div class="col-sm">
<div class="col-12 col-sm-12 col-md-6 col-lg-4 col-xl-3">
<input type="text" class="form-control s_website_form_input" name="medical_contact_phone" value="" id="medical_contact_phone" style="cursor: auto;"/>
</div>
</div>
</div>
</div>
<div class="form-group s_website_form_field col- s_website_form_custom s_website_form_required" data-type="char" data-name="Field">
<div class="row s_col_no_resize s_col_no_bgcolor">
<label class="col-form-label col-sm-auto s_website_form_label" style="width: 400px">
<span class="s_website_form_label_content">J'autorise le Centre Kalachakra à utiliser les images fixes ou animées sur lesquelles j'apparais<br></br> pour les usages de promotion et de présentation du centre (facebook, plaquette, site internet etc.)</span>
</label>
<span class="s_website_form_mark"> *</span>
<div class="col-12 col-sm-12 col-md-6 col-lg-1 col-xl-1">
<select id="image_permission" name="image_permission" class="form-control s_website_form_input" required="1" >
<option name="yes_no" value="" label=""></option>
<option name="yes" value="true" label="Oui"></option>
<option name="no" value="false" label="Non"></option>
</select>
</div>
</div>
</div>
<br/>
@ -298,8 +316,10 @@
<div class="row">
<div class="col">
<br/>
<h6 id='validation_message' style='display:none;color:red'>Please enter an email or a phone or a mobile</h6>
<button id="back_button2" type="button" class="btn btn-warning" >back</button>
<button type="submit" class="btn btn-primary" >Continue</button>
<button id="continue_button2" type="submit" class="btn btn-primary" >Continue</button>
<br/>
<br/>


+ 23
- 1
views/partner.xml View File

@ -24,12 +24,34 @@
<xpath expr="//field[@name='name']" position="after">
<field name="member_status" widget='label_selection'/>
<field name="super_member"/>
</xpath>
</field>
</record>
<record id="res_partner_view_search" model="ir.ui.view">
<field name="name">kalachakra.res.partner.search</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="donation_base.res_partner_view_search" />
<field name="arch" type="xml">
<filter name="donor" position="after">
<filter
string="members"
name="member"
domain="[('member_status','=', 'member')]"
/>
<filter
string="super members"
name="super_member"
domain="[('super_member','=', True)]"
/>
</filter>
</field>
</record>


Loading…
Cancel
Save