from odoo import models, fields, api from odoo.exceptions import UserError, ValidationError, Warning from psycopg2 import sql, DatabaseError from datetime import date,datetime,timedelta from dateutil.relativedelta import relativedelta import logging from werkzeug import utils import re _logger = logging.getLogger(__name__) import json class AccountMove(models.Model): _inherit = 'account.move' description=fields.Char(compute='_compute_description') transaction_date=fields.Datetime(compute='_compute_transaction_date') transaction_amount=fields.Float(compute='_compute_transaction_amount') systempay_ref=fields.Text(compute='_compute_systempay_ref') date_compta=fields.Datetime('date import',default=False) date_compta_end_of_stay=fields.Datetime('date import',default=False) date_compta_out_refund=fields.Datetime('date import',default=False) out_invoice_id=fields.Many2one('account.move' ,ondelete="cascade",domain="[('partner_id','=',partner_id),('move_type','=','out_invoice'),('state','!=','paid')]") payment_ids=fields.Many2many('account.payment',compute='_compute_payment_ids') down_payment_paid=fields.Boolean(compute='_compute_down_payment_paid') is_balance_invoice=fields.Boolean(compute='_compute_is_balance_invoice') def write(self, data): res = super(AccountMove, self).write(data) membership=False #Si option d'adhesion on prepare la creation de l'adhesion membership_product=self.env['product.product'].sudo().search([('membership_product','=',True)],limit=1) for line in self.invoice_line_ids: if membership_product.id==int(line.product_id.id): membership=True break if self.payment_state=='paid' and membership: #recherche de l'ahésion associée à la facture m=self.env['kalachakra.membership'].search([('invoice_id','=',int(self.id))]) if m: m.start_date=datetime.now() m.end_date=datetime.now()+relativedelta(years=1) #m.email_confirmation() #mise à jour des dates adhésions à partir de la date de paiement else: #création de l'adhésion vals={} vals['invoice_id']=int(self.id) vals['partner_id']=int(self.partner_id) vals['product_id']=int(membership_product.id) vals['start_date']=datetime.now() vals['end_date']=datetime.now()+relativedelta(years=1) vals['amount']=line.price_unit vals['state']='done' membership=self.env['kalachakra.membership'].sudo().create(vals) return True def _compute_payment_ids(self): payments=self.env['account.payment'].sudo().search([]) for rec in self: rec.payment_ids=False for p in payments: for recon in p.reconciled_invoice_ids: if recon.id==rec.id: rec.write({'payment_ids':[(4,p.id)]}) def _compute_description(self): for a in self: a.description='' for line in a.line_ids: a.description=line.product_id.name break def _compute_transaction_date(self): for a in self: a.transaction_date=False for t in a.transaction_ids: a.transaction_date=t.date break def _compute_transaction_amount(self): for a in self: a.transaction_amount=False for t in a.transaction_ids: a.transaction_amount=t.amount break def _compute_systempay_ref(self): for a in self: a.systempay_ref=False for t in a.transaction_ids: if t.systempay_raw_data: raw=t.systempay_raw_data.split(",") for r in raw: r_s=r.split(":") #_logger.error('vads:'+r_s[0]) if r_s[0]==" 'vads_order_id'": a.systempay_ref=r_s[1].replace("'","") break def _compute_down_payment_paid(self): reg=self.env['event.registration'].search([('balance_invoice_id','=',self.id)]) if reg : if reg.date_payment_down_payment :self.down_payment_paid=True else :self.down_payment_paid=False else: self.down_payment_paid=False down_payment_paid=True def _compute_is_balance_invoice(self): reg=self.env['event.registration'].search([('balance_invoice_id','=',self.id)]) if reg:self.is_balance_invoice=True else:self.is_balance_invoice=False def button_event_registration(self): reg=self.env['event.registration'].search(['|','|','|',('invoice_id','=',self.id),\ ('down_payment_invoice_id','=',self.id),\ ('balance_invoice_id','=',self.id),\ ('end_of_stay_invoice_id','=',self.id)]) if reg : event_id=reg.event_id action=self.env.ref('event.action_registration').read()[0] action.update({ 'view_mode': 'form', 'res_id': reg.id, 'view_type':'form', "views": [[False, "form"]], }) return action