Browse Source

export des participants retraites

dev-rcn
root 3 years ago
parent
commit
ad4d6d7ac2
6 changed files with 230 additions and 4 deletions
  1. +20
    -0
      controllers/kalachakra.py
  2. +113
    -0
      models/booking_event.py
  3. +82
    -2
      models/booking_event_registration.py
  4. +4
    -0
      views/booking_event.xml
  5. +10
    -0
      views/booking_event_registration.xml
  6. +1
    -2
      views/event.xml

+ 20
- 0
controllers/kalachakra.py View File

@ -157,6 +157,26 @@ class KalaAuthSignupHome(Home):
class kalachakra_event(WebsiteEventController,PaymentProcessing):
#afficher la liste des prochains événement sur la home page (sans les retraites ! )
@http.route('/event/csv_booking_registrants', website=False, auth='user',methods=['GET'])
def export_csv_booking_registrants(self,id,*args,**kw):
data=request.env['event.event'].sudo().generate_csv_booking_registrants(id)
#csv = str.encode('Nom & Prénom;Rôle;Options;Montant retraite;Adhésion;Autre options;Montant à payer;Statut commande;Type de paiement;Règlement\n', 'utf-8')
#csv =csv+ str.encode('1;2\n', 'utf-8')
filename = 'Events - {}.csv'.format(
datetime.now().strftime("%m/%d/%Y"))
headers = [
('Content-Type', 'application/octet-stream'),
('Content-Disposition', 'attachment; filename="%s"' % (filename))
]
return request.make_response(data, headers=headers)
#afficher la liste des prochains événement sur la home page (sans les retraites ! )
@http.route('/event/get_country_booking_event_list', type='json', auth='public', website=True)
def get_country_booking_events(self, **post):


+ 113
- 0
models/booking_event.py View File

@ -86,6 +86,8 @@ class BookingEvent(models.Model):
)
@api.onchange('questionnaire_id')
def onchange_questionnaire(self):
@ -103,8 +105,119 @@ class BookingEvent(models.Model):
self.question_ids = [(0, 0, vals)]
def csv_booking_registrants(self):
act={ 'type': 'ir.actions.act_url',
'url': '/event/csv_booking_registrants?id=%s' % (self.id),
'target': 'self','res_id': self.id}
return act
def generate_csv_booking_registrants(self,id):
booking=self.env['event.event'].search([('id','=',int(id))])
header_ligne='Nom & Prénom;Rôle;Options;Montant retraite;Adhésion;Autre options;Montant à payer;Statut commande;Type de paiement;Règlement\n'
csv_lines=''
for reg in booking.registration_ids:
name=str(reg.name)
role=str(self._compute_member_status(reg))
options=str(self._compute_invoice_options(reg))
booking_amount=str(self._compute_booking_amount(reg))
membership_amount=str(self._compute_membership_amount(reg))
csv_lines=csv_lines+name+';'+role+';'+options+';'+booking_amount+';'+membership_amount+'\n'
return str.encode(header_ligne+csv_lines,'utf-8')
def _compute_booking_amount(self,rec):
membership_product=self.env['product.product'].sudo().search([('membership_product','=',True)],limit=1)
#si facture sans acompte:
booking_amount=0
i=1
if rec.invoice_id:
for line in rec.invoice_id.invoice_line_ids:
booking_amount=line.price_subtotal
break
#si facture avec acompte:
if rec.down_payment_invoice_id:
for line in rec.down_payment_invoice_id.invoice_line_ids:
if line.name==membership_product.name:
booking_amount=rec.booking_amount+line.price_subtotal
break
return booking_amount
def _compute_member_status(self,reg):
if reg.partner_id.email==reg.email:
status=reg.partner_id.member_status
#le participant n'est pas la personne qui s'est connecté
else:
participant=self.env['res.partner'].sudo().search([('email','=',reg.email)],limit=1)
if participant:
status=participant.member_status
else:
status='not member'
return status
def _compute_membership_amount(self,rec):
membership_product=self.env['product.product'].sudo().search([('membership_product','=',True)],limit=1)
#si facture sans acompte:
membership_amount=0
if rec.invoice_id:
for line in rec.invoice_id.invoice_line_ids:
if line.name==membership_product.name:
membership_amount=line.price_subtotal
#si facture avec acompte:
if rec.balance_invoice_id:
for line in rec.balance_invoice_id.invoice_line_ids:
if line.name==membership_product.name:
membership_amount=line.price_subtotal
return membership_amount
def _compute_invoice_options(self,rec):
membership_product=self.env['product.product'].sudo().search([('membership_product','=',True)],limit=1)
invoice_options=''
#si facture sans acompte:
i=1
if rec.invoice_id:
for line in rec.invoice_id.invoice_line_ids:
if i>1:
if line.name!=membership_product.name:
invoice_options=invoice_options+str(line.name)+'('+str(line.price_subtotal)+' €)- '
i=i+1
#si facture avec acompte:
i=1
if rec.balance_invoice_id:
for line in rec.balance_invoice_id.invoice_line_ids:
if i>1:
if line.name!=membership_product.name:
invoice_options=invoice_options+str(line.name)+'('+str(line.price_subtotal)+' €)- '
i=i+1
i=1
if rec.end_of_stay_invoice_id:
for line in rec.end_of_stay_invoice_id.invoice_line_ids:
if i>1:
if line.name!=membership_product.name:
invoice_options=invoice_options+str(line.name)+'('+str(line.price_subtotal)+' €)- '
i=i+1
return invoice_options
# booking_option_ids=fields.One2many('booking.option','event_id','booking options')
# @api.model


+ 82
- 2
models/booking_event_registration.py View File

@ -102,7 +102,87 @@ class EventRegistration(models.Model):
individual_room=fields.Boolean('Individual room',compute='compute_individual_room')
start_day_individual_booking=fields.Date('Start day individual booking')
end_day_individual_booking=fields.Date('End day individual booking')
#pour rapport
# member_status=fields.Char('member status', compute='_compute_member_status')
# invoice_options_amount=fields.Float('invoice options amount',compute='_compute_invoice_options_amount')
# membership_amount=fields.Float('membership amount',compute='_compute_membership_amount')
# booking_amount=fields.Float('booking amount',compute='_compute_booking_amount')
# amount_to_be_paid=fields.Float('booking amount to be paid',compute='_compute_amount_to_be_paid')
# amount_paid=fields.Float('booking amount paid',compute='_compute_amount_paid')
# invoice_options=fields.Char('invoice options',compute='_compute_invoice_options')
# payment_mode=fields.Char('invoice options',compute='_compute_payment_mode')
def _compute_payment_mode(self):
for rec in self:
rec.payment_mode=''
if rec.invoice_id:
rec.payment_mode=rec.invoice_id.payment_mode_id.name
if rec.down_payment_invoice_id:
rec.payment_mode=rec.down_payment_invoice_id.payment_mode_id.name
def _compute_amount_paid(self):
for rec in self:
rec.amount_paid=0
if rec.invoice_id:
rec.amount_paid=rec.invoice_id.amount_total-rec.invoice_id.amount_residual
if rec.down_payment_invoice_id:
rec.amount_paid=rec.amount_paid+rec.down_payment_invoice_id.amount_total-rec.down_payment_invoice_id.amount_residual
if rec.balance_invoice_id:
rec.amount_paid=rec.amount_paid+rec.balance_invoice_id.amount_total-rec.balance_invoice_id.amount_residual
if rec.end_of_stay_invoice_id:
rec.amount_paid=rec.amount_paid+rec.end_of_stay_invoice_id.amount_total-rec.end_of_stay_invoice_id.amount_residual
def _compute_amount_to_be_paid(self):
for rec in self:
rec.amount_to_be_paid=0
if rec.invoice_id:
rec.amount_to_be_paid=rec.invoice_id.amount_residual
if rec.down_payment_invoice_id:
rec.amount_to_be_paid=rec.amount_to_be_paid+rec.down_payment_invoice_id.amount_residual
if rec.balance_invoice_id:
rec.amount_to_be_paid=rec.amount_to_be_paid+rec.balance_invoice_id.amount_residual
if rec.end_of_stay_invoice_id:
rec.amount_to_be_paid=rec.amount_to_be_paid+rec.end_of_stay_invoice_id.amount_residual
def _compute_invoice_options_amount(self):
membership_product=self.env['product.product'].sudo().search([('membership_product','=',True)],limit=1)
for rec in self:
rec.invoice_options_amount=0
#si facture sans acompte:
i=1
if rec.invoice_id:
for line in rec.invoice_id.invoice_line_ids:
if i>1:
if line.name!=membership_product.name:
rec.invoice_options_amount=rec.invoice_options_amount+line.price_subtotal
i=i+1
#si facture avec acompte:
i=1
if rec.balance_invoice_id:
for line in rec.balance_invoice_id.invoice_line_ids:
if i>1:
if line.name!=membership_product.name:
rec.invoice_options_amount=rec.invoice_options_amount+line.price_subtotal
i=i+1
i=1
if rec.end_of_stay_invoice_id:
for line in rec.end_of_stay_invoice_id.invoice_line_ids:
if i>1:
if line.name!=membership_product.name:
rec.invoice_options_amount=rec.invoice_options_amount+line.price_subtotal
i=i+1
def compute_individual_room(self):
for rec in self:
@ -539,7 +619,7 @@ class EventRegistration(models.Model):
invoice.state='posted'
invoice.name='REC'+str(invoice.id)
invoice.payment_reference=invoice.name
user=self.env['res.users'].search([('email','ilike',reg.partner_id.email)])
user=self.env['res.users'].search([('email','ilike',reg.partner_id.email)],limit=1)
invoice.invoice_user_id=user.id
invoice.user_id=user.id
@ -595,7 +675,7 @@ class EventRegistration(models.Model):
invoice.state='posted'
invoice.name='REC'+str(invoice.id)
invoice.payment_reference=invoice.name
user=self.env['res.users'].search([('email','ilike',reg.partner_id.email)])
user=self.env['res.users'].search([('email','ilike',reg.partner_id.email)],limit=1)
invoice.invoice_user_id=user.id
invoice.user_id=user.id


+ 4
- 0
views/booking_event.xml View File

@ -160,6 +160,10 @@
</xpath>
<xpath expr="//page[@name='tickets']" position="replace">
</xpath>
<xpath expr="//field[@name='stage_id']" position="before">
<button type="object" name="csv_booking_registrants" string="Export registrants"
attrs="{'invisible':[('booking_event','=',False)]}" />
</xpath>
</field>
</record>


+ 10
- 0
views/booking_event_registration.xml View File

@ -70,6 +70,7 @@
</xpath>
<xpath expr="//group[@name='attendee']" position="inside">
<field name="gender" attrs="{'invisible':[('booking_event','!=',True)]}"/>
<field name="age" attrs="{'invisible':[('booking_event','!=',True)]}"/>
<field name="city" attrs="{'invisible':[('booking_event','!=',True)]}"/>
@ -235,6 +236,15 @@
<xpath expr="//field[@name='event_ticket_id']" position="replace">
<field name="online" invisible="context.get('booking_view')==True"/>
<!-- <field name="invoice_options" invisible="context.get('booking_view')==False"/>
<field name="invoice_options_amount" invisible="context.get('booking_view')==False"/>
<field name="membership_amount" invisible="context.get('booking_view')==False"/>
<field name="booking_amount" invisible="context.get('booking_view')==False"/>
<field name="amount_to_be_paid" invisible="context.get('booking_view')==False"/> -->
<!-- <field name="amount_paid" invisible="context.get('booking_view')==False"/>
<field name="payment_mode" invisible="context.get('booking_view')==False"/> -->
<!-- <field name="payment_mode" invisible="context.get('booking_view')==False"/> -->
<field name="room_id" invisible="context.get('booking_view')==False"/>
<field name="city" invisible="context.get('booking_view')==False"/>
<field name="train_arrival_date" invisible="context.get('booking_view')==False" widget="date"/>


+ 1
- 2
views/event.xml View File

@ -191,8 +191,7 @@
</xpath>
<!-- <xpath expr="//div[@class='button_box']" position="replace">
</xpath> -->
</field>
</record>


Loading…
Cancel
Save