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
|
|
import json
|
|
|
|
class EventRegistration(models.Model):
|
|
_inherit = 'event.registration'
|
|
|
|
online=fields.Boolean(string='Online participation')
|
|
onthespot_payment=fields.Boolean(string='On the spot payment')
|
|
free_participation=fields.Boolean(related='event_id.free_participation')
|
|
|
|
def action_generate_participation_invoice(self,id_registration=None,payment_mode=None):
|
|
|
|
if not id_registration:id_registration=int(self.id)
|
|
reg=self.env['event.registration'].search([('id','=',id_registration)])
|
|
event=self.env['event.event'].search([('id','=',int(reg.event_id))])
|
|
|
|
#Prix à appliquer au produit en fonction du statut de l'inscrit
|
|
status=reg.partner_id.member_status
|
|
|
|
if status=='not member':product_price=event.participation_standard_price
|
|
if status=='member':product_price=event.participation_member_price
|
|
if status=='super member':product_price=event.participation_super_member_price
|
|
product_id=event.participation_product_id
|
|
|
|
|
|
#création de la facture
|
|
vals={}
|
|
|
|
vals['partner_id']=int(reg.partner_id)
|
|
vals['invoice_date']=datetime.now()
|
|
|
|
#mode de paiement CB
|
|
if payment_mode=='CB':
|
|
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')
|
|
|
|
vals['move_type']='out_invoice'
|
|
vals['state']='draft'
|
|
#vals['currency_id']=self.currency_id.id
|
|
#raise Warning(json.dumps(vals,indent = 4))
|
|
invoice=self.env['account.move'].create(vals)
|
|
|
|
invoice.state='posted'
|
|
invoice.name='REC'+str(invoice.id)
|
|
invoice.payment_reference=invoice.name
|
|
|
|
vals={}
|
|
account_credit=self.env['account.account'].search([('code','=','707100')])
|
|
account_debit=self.env['account.account'].search([('code','=','411100')])
|
|
|
|
vals['move_id']=invoice.id
|
|
vals['product_id']=int(event.participation_product_id)
|
|
vals['quantity']=1
|
|
vals['price_unit']=product_price
|
|
vals['name']=event.participation_product_id.name
|
|
|
|
vals['account_id']=int(account_credit.id)
|
|
|
|
invoice_line=self.env['account.move.line'].with_context(check_move_validity=False).create(vals)
|
|
|
|
|
|
# #debit_line
|
|
vals_d={}
|
|
vals_d['move_id']=invoice.id
|
|
vals_d['debit']=product_price
|
|
vals_d['credit']=0
|
|
vals_d['date']=datetime.now()
|
|
vals_d['partner_id']=int(reg.partner_id)
|
|
vals_d['product_id']=int(event.participation_product_id)
|
|
vals_d['name']=event.participation_product_id.name
|
|
vals_d['account_id']=int(account_debit.id)
|
|
vals_d['quantity']=1
|
|
vals_d['price_unit']=product_price
|
|
vals_d['exclude_from_invoice_tab']=True
|
|
|
|
|
|
invoice_line=self.env['account.move.line'].with_context(check_move_validity=False).create(vals_d)
|
|
l=self.env['account.move.line'].search([('move_id','=',invoice.id),('balance','<',0)])
|
|
l.partner_id=int(reg.partner_id)
|
|
reg.invoice_id=invoice.id
|
|
|
|
return invoice.id
|
|
|
|
|