Browse Source

accounting file

master
root 2 years ago
parent
commit
20c611e561
2 changed files with 214 additions and 151 deletions
  1. +2
    -0
      models/event_registration.py
  2. +212
    -151
      wizard/accounting_file_wizard.py

+ 2
- 0
models/event_registration.py View File

@ -14,6 +14,8 @@ class EventRegistration(models.Model):
free_participation=fields.Boolean(related='event_id.free_participation') free_participation=fields.Boolean(related='event_id.free_participation')
with_membership=fields.Boolean('with membership') with_membership=fields.Boolean('with membership')
headphone=fields.Boolean('headphone') headphone=fields.Boolean('headphone')
date_compta=fields.Datetime('date import',default=False)
date_compta_down_payment=fields.Datetime('date import down payment',default=False)
def create(self,vals): def create(self,vals):


+ 212
- 151
wizard/accounting_file_wizard.py View File

@ -16,6 +16,14 @@ class AccountingFileWizard(models.TransientModel):
donation=self.env['donation.donation'].search([]) donation=self.env['donation.donation'].search([])
for d in donation: for d in donation:
d.date_compta=False d.date_compta=False
membership=self.env['kalachakra.membership'].search([])
for m in membership:
m.date_compta=False
reg=self.env['event.registration'].search([])
for r in reg:
r.date_compta=False
r.date_compta_down_payment=False
tmstp=secrets.token_hex(16) tmstp=secrets.token_hex(16)
filename='/tmp/accounting_file_'+tmstp+'.txt' filename='/tmp/accounting_file_'+tmstp+'.txt'
@ -41,11 +49,14 @@ class AccountingFileWizard(models.TransientModel):
#car traité avec les retraites #car traité avec les retraites
if d.invoice_id: continue if d.invoice_id: continue
d.date_compta=date_compta d.date_compta=date_compta
if not d.payment_mode_id: raise UserError(_("no payment mode found for donation %r ",donation.number))
if not d.payment_mode_id.fixed_journal_id: raise UserError(_("no account found for payment mode %r",d.payment_mode_id.name))
account_debit_number=self._file_format(str(d.payment_mode_id.fixed_journal_id.default_account_id.code),6) account_debit_number=self._file_format(str(d.payment_mode_id.fixed_journal_id.default_account_id.code),6)
firstname=d.partner_id.firstname firstname=d.partner_id.firstname
name=d.partner_id.name name=d.partner_id.name
if not firstname: firstname=' '
lib1=firstname[0]+' '+name lib1=firstname[0]+' '+name
lib1=self._file_format(lib1,12) lib1=self._file_format(lib1,12)
#lib1=lib1[11] #lib1=lib1[11]
@ -58,6 +69,7 @@ class AccountingFileWizard(models.TransientModel):
for line in d.line_ids: for line in d.line_ids:
affectation=line.product_id.name affectation=line.product_id.name
amount=str(line.amount) amount=str(line.amount)
if not line.product_id.property_account_income_id: raise UserError(_("no credit account found for product %r",line.product_id))
account_credit_number=self._file_format(line.product_id.property_account_income_id.code,6) account_credit_number=self._file_format(line.product_id.property_account_income_id.code,6)
break break
@ -88,6 +100,7 @@ class AccountingFileWizard(models.TransientModel):
#si l'adhésion est liée à une facture, alors on récupère la facture pour trouver le mode de paiement #si l'adhésion est liée à une facture, alors on récupère la facture pour trouver le mode de paiement
if m.invoice_id: if m.invoice_id:
if not m.invoice_id.payment_id.fixed_journal_id: raise UserError(_("no account found for payment mode %r",m.invoice_id.payment_id.name))
account_debit_number=self._file_format(str(m.invoice_id.payment_id.fixed_journal_id.default_account_id.code),6) account_debit_number=self._file_format(str(m.invoice_id.payment_id.fixed_journal_id.default_account_id.code),6)
#si l'adhésion est liée à une transaction,le mode de paiement est CB #si l'adhésion est liée à une transaction,le mode de paiement est CB
elif m.transaction_id: elif m.transaction_id:
@ -100,14 +113,17 @@ class AccountingFileWizard(models.TransientModel):
#sinon on prend le mode de paiement au niveau de la fiche d'adhésion #sinon on prend le mode de paiement au niveau de la fiche d'adhésion
else: else:
if m.payment_mode_id: if m.payment_mode_id:
if not m.payment_mode_id: raise UserError(_("no payment mode found for membership %r",m.partner_id.name))
account_debit_number=self._file_format(str(m.payment_mode_id.fixed_journal_id.default_account_id.code),6) account_debit_number=self._file_format(str(m.payment_mode_id.fixed_journal_id.default_account_id.code),6)
firstname=m.partner_id.firstname firstname=m.partner_id.firstname
name=m.partner_id.name name=m.partner_id.name
if not firstname: firstname=' '
lib1=firstname[0]+' '+name lib1=firstname[0]+' '+name
lib1=self._file_format(lib1,12) lib1=self._file_format(lib1,12)
date_line=self._date_format(str(m.start_date)) date_line=self._date_format(str(m.start_date))
amount=str(m.amount) amount=str(m.amount)
if not m.product_id.property_account_income_id: raise UserError(_("no credit account found for product %r",m.product_id.name))
account_credit_number=self._file_format(m.product_id.property_account_income_id.code,6) account_credit_number=self._file_format(m.product_id.property_account_income_id.code,6)
affectation=m.product_id.name affectation=m.product_id.name
@ -117,7 +133,7 @@ class AccountingFileWizard(models.TransientModel):
elif m.invoice_id: elif m.invoice_id:
lib_piece=self._file_format(m.invoice_id.name,20) lib_piece=self._file_format(m.invoice_id.name,20)
else: else:
lib_piece=self._file_format(m.id,20)
lib_piece=self._file_format(m.partner_id.name,20)
#credit line #credit line
lib2=self._file_format(affectation,13) lib2=self._file_format(affectation,13)
@ -138,176 +154,221 @@ class AccountingFileWizard(models.TransientModel):
#écritures pour les inscriptions évts hors RETRAITES avec facture payée non déjà exportés #écritures pour les inscriptions évts hors RETRAITES avec facture payée non déjà exportés
move=self.env['account.move'].search([('date_compta','=',False),('payment_state','=','paid')])
for m in move:
reg=self.env['event.registration'].search([('invoice_id','=',int(move.id))])
if reg:
if not reg.event_id.booking_event and not reg.event_id.individual_booking_event:
m.date_compta=date_compta
account_debit_number=self._file_format(str(m.payment_id.fixed_journal_id.default_account_id.code),6)
firstname=m.partner_id.firstname
name=m.partner_id.name
lib1=firstname[0]+' '+name
lib1=self._file_format(lib1,12)
#date du paiement
date_line=self._date_format(str(m.write_date))
amount=str(m.amount_total)
account_credit_number=self._file_format(reg.event_id.participation_product_id.property_account_income_id.code,6)
affectation=reg.event_id.participation_product_id.name
#si facture liée à une transaction:
trans=self.env['payment.transaction'].search([('invoice_ids','in',m.id)])
if trans:
lib_piece=self._file_format(trans.reference,20)
else:
lib_piece=self._file_format(m.name,20)
#credit line
lib2=self._file_format(affectation,13)
lib=lib1+' '+lib2
debit=''
credit=str(amount)
fic_line=str(no_mvt)+';'+'IN'+';'+date_line+';'+account_credit_number+';'+lib+';'+debit+';'+credit+';'+lib_piece+'\n'
f.write(fic_line)
no_mvt=no_mvt+1
#debit line
debit=str(amount)
credit=''
fic_line=str(no_mvt)+';'+'IN'+';'+date_line+';'+account_debit_number+';'+lib+';'+debit+';'+credit+';'+lib_piece+'\n'
f.write(fic_line)
no_mvt=no_mvt+1
#écritures pour les inscription aux RETRAITES avec facture acomptes payés + factures soldes payés non déjà exporté
reg=self.env['event.registration'].search(['|',('date_compta','=',False),('date_compta_down_payment','!=',False)])
if reg:
reg.date_compta=date_compta
account_credit_number=self._file_format(reg.event_id.participation_product_id.property_account_income_id.code,6)
account_debit_number=self._file_format(str(m.payment_id.fixed_journal_id.default_account_id.code),6)
firstname=reg.firstname
name=reg.name
lib1=firstname[0]+' '+name
lib1=self._file_format(lib1,12)
lib2=self._file_format(reg.event_id.participation_product_id.name,13)
lib=lib1+' '+lib2
#si pas de facture d'acompte et facture payée:
if not down_payment_invoice_id and reg.payment_status=='paid' and not reg.date_compta :
down_payment=False
balance_payment=False
amount=reg.invoice_id.amount_total
#recherche de l'adhésion
membership_credit_line=False
membership=self.env['kalachakra.membership'].search([('invoice_id','=',int(reg.invoice_id))])
if membership:membership_credit_line=True
#recherche de dons
donation_credit_line=False
donations=donation_booking=self.env['donation.donation'].search([('invoice_id','=',int(reg.invoice_id))])
if donations:donation_credit_line=True
date_line=self._date_format(str(reg.invoice_id.write_date))
trans=self.env['payment.transaction'].search([('invoice_ids','in',reg.invoice_id)])
registration=self.env['event.registration'].search([('date_compta','=',False),('payment_status','=','paid'),('event_id.booking_event','=',False),('event_id.individual_booking_event','=',False)])
if registration:
for reg in registration:
reg.date_compta=date_compta
if not reg.invoice_id.payment_mode_id.fixed_journal_id: raise UserError(_("no account found for payment mode %r",reg.invoice_id.payment_mode_id))
account_debit_number=self._file_format(str(reg.invoice_id.payment_mode_id.fixed_journal_id.default_account_id.code),6)
firstname=m.partner_id.firstname
name=m.partner_id.name
if not firstname: firstname=' '
lib1=firstname[0]+' '+name
lib1=self._file_format(lib1,12)
#date du paiement
date_line=m.write_date.year+'-'+m.write_date.month+'-'+m.write_date.day
date_line=self._date_format(date_line)
amount=str(m.amount)
if not reg.event_id.participation_product_id: raise UserError(_("no credit account found for product %r",reg.event_id.participation_product_id.name))
account_credit_number=self._file_format(reg.event_id.participation_product_id.property_account_income_id.code,6)
affectation=reg.event_id.participation_product_id.name
#si facture liée à une transaction:
trans=self.env['payment.transaction'].search([('invoice_ids','in',reg.invoice_id.id),('state','=','done')])
if trans:
lib_piece=self._file_format(trans.reference,20)
else:
lib_piece=self._file_format(reg.invoice_id.name,20)
#credit line
lib2=self._file_format(affectation,13)
lib=lib1+' '+lib2
debit=''
credit=str(amount)
fic_line=str(no_mvt)+';'+'IN'+';'+date_line+';'+account_credit_number+';'+lib+';'+debit+';'+credit+';'+lib_piece+'\n'
f.write(fic_line)
no_mvt=no_mvt+1
#debit line
debit=str(amount)
credit=''
fic_line=str(no_mvt)+';'+'IN'+';'+date_line+';'+account_debit_number+';'+lib+';'+debit+';'+credit+';'+lib_piece+'\n'
f.write(fic_line)
no_mvt=no_mvt+1
#si facture d'acompte payée et solde payée et pas encore exportée :
if reg.payment_status=='paid' and not reg.date_compta:
reg.date_compta=date_compta
down_payment=True
balance_payment=True
#écritures pour les inscription aux RETRAITES avec facture acomptes payés + factures soldes payés non déjà exporté
registration=self.env['event.registration'].search(['|',('date_compta','=',False),('date_compta_down_payment','!=',False)])
for reg in registration:
if reg:
membership_amount=0 membership_amount=0
donation_amount=0 donation_amount=0
amount=reg.down_payment_invoice_id.amount_total+reg.balance_invoice_id.amount_total
date_line=self._date_format(str(reg.balance_invoice_id.write_date))
#recherche de l'adhésion
membership_credit_line=False membership_credit_line=False
membership=self.env['kalachakra.membership'].search([('balance_invoice_id','=',int(reg.balance_invoice_id))])
if membership:
membership_credit_line=True
membership_amount=membership.amount
donation_credit_line=False
reg.date_compta=date_compta
if not reg.event_id.participation_product_id.property_account_income_id: raise UserError(_("no credit account found for product %r",reg.event_id.participation_product_id.name))
account_credit_number=self._file_format(reg.event_id.participation_product_id.property_account_income_id.code,6)
firstname=reg.firstname
name=reg.name
if not firstname: firstname=' '
lib1=firstname[0]+' '+name
lib1=self._file_format(lib1,12)
lib2=self._file_format(reg.event_id.participation_product_id.name,13)
lib=lib1+' '+lib2
#si pas de facture d'acompte et facture payée:
if not reg.down_payment_invoice_id and reg.payment_status=='paid' and not reg.date_compta :
down_payment=False
balance_payment=False
if not reg.invoice_id.payment_mode_id.fixed_journal_id: raise UserError(_("no account found payment mode %r",reg.invoice_id.payment_mode_id.name))
account_debit_number=self._file_format(str(reg.invoice_id.payment_mode_id.fixed_journal_id.default_account_id.code),6)
amount=reg.invoice_id.amount_total
#recherche de l'adhésion
membership_credit_line=False
membership=self.env['kalachakra.membership'].search([('invoice_id','=',int(reg.invoice_id))])
if membership:membership_credit_line=True
#recherche de dons
donation_credit_line=False
donations=donation_booking=self.env['donation.donation'].search([('invoice_id','=',int(reg.invoice_id))])
if donations:donation_credit_line=True
date_line=self._date_format(str(reg.invoice_id.write_date))
trans=self.env['payment.transaction'].search([('invoice_ids','in',reg.invoice_id)])
#recherche de dons
donation_credit_line=False
donations=donation_booking=self.env['donation.donation'].search([('invoice_id','=',int(reg.balance_invoice_id))])
if donations:
donation_credit_line=True
for d in donations:
donation_amount=donation_amount+d.amount_total
trans=self.env['payment.transaction'].search([('invoice_ids','in',reg.invoice_id)])
#si facture d'acompte payée et solde payée et pas encore exportée :
if reg.payment_status=='paid' and not reg.date_compta:
reg.date_compta=date_compta
down_payment=True
balance_payment=True
membership_amount=0
donation_amount=0
membership_credit_line=False
donation_credit_line=False
if not reg.down_payment_invoice_id.payment_mode_id.fixed_journal_id: raise UserError(_("no account found payment mode %r",reg.down_payment_invoice_id.payment_mode_id.name))
account_debit_number=self._file_format(str(reg.down_payment_invoice_id.payment_mode_id.fixed_journal_id.default_account_id.code),6)
amount=reg.down_payment_invoice_id.amount_total+reg.balance_invoice_id.amount_total
date_line=self._date_format(str(reg.balance_invoice_id.write_date))
#recherche de l'adhésion
membership=self.env['kalachakra.membership'].search([('balance_invoice_id','=',int(reg.balance_invoice_id))])
if membership:
membership_credit_line=True
membership_amount=membership.amount
#recherche de dons
donation_credit_line=False
donations=donation_booking=self.env['donation.donation'].search([('invoice_id','=',int(reg.balance_invoice_id))])
if donations:
donation_credit_line=True
for d in donations:
donation_amount=donation_amount+d.amount_total
trans=self.env['payment.transaction'].search([('invoice_ids','in',reg.invoice_id)])
#si facture d'acompte payée pas encore exporté et solde non payée :
if reg.payment_status=='down payment paid' and not reg.date_compta_down_payment:
reg.date_compta_down_payment=date_compta
down_payment=True
balance_payment=False
donation_credit_line=False
membership_credit_line=False
if not reg.down_payment_invoice_id.payment_mode_id.fixed_journal_id: raise UserError(_("no account found payment mode %r",reg.down_payment_invoice_id.payment_mode_id.name))
account_debit_number=self._file_format(str(reg.down_payment_invoice_id.payment_mode_id.fixed_journal_id.default_account_id.code),6)
amount=reg.down_payment_invoice_id.amount_total
date_line=self._date_format(str(reg.down_payment_invoice_id.write_date))
#si facture d'acompte payée pas encore exporté et solde non payée :
if reg.payment_status=='down payment paid' and not reg.date_compta_down_payment:
reg.date_compta_down_payment=date_compta
down_payment=True
balance_payment=False
donation_credit_line=False
membership_credit_line=False
amount=reg.down_payment_invoice_id.amount_total
date_line=self._date_format(str(reg.down_payment_invoice_id.write_date))
#si facture d'acompte payée et exporté et solde payée pas exporté :
if reg.payment_status=='paid' and reg.date_compta_down_payment:
reg.date_compta=date_compta
down_payment=False
balance_payment=True
if not reg.balance_invoice_id.payment_mode_id.fixed_journal_id: raise UserError(_("no account found payment mode %r",reg.balance_invoice_id.payment_mode_id.name))
account_debit_number=self._file_format(str(reg.down_payment_invoice_id.payment_mode_id.fixed_journal_id.default_account_id.code),6)
date_line=self._date_format(str(reg.balance_invoice_id.write_date))
#recherche de l'adhésion
membership_credit_line=False
membership=self.env['kalachakra.membership'].search([('balance_invoice_id','=',int(reg.balance_invoice_id))])
if membership:
membership_credit_line=True
membership_amount=membership.amount
#recherche de dons
donation_credit_line=False
donations=donation_booking=self.env['donation.donation'].search([('invoice_id','=',int(reg.balance_invoice_id))])
if donations:
donation_credit_line=True
for d in donations:
amount_donation=amount_donation+donations.amount_total
#si facture d'acompte payée et exporté et solde payée pas exporté :
if reg.payment_status=='paid' and reg.date_compta_down_payment:
reg.date_compta=date_compta
down_payment=False
balance_payment=True
date_line=self._date_format(str(reg.balance_invoice_id.write_date))
#recherche de l'adhésion
membership_credit_line=False
membership=self.env['kalachakra.membership'].search([('balance_invoice_id','=',int(reg.balance_invoice_id))])
if membership:membership_credit_line=True
#écritures pour les inscription aux RETRAITES avec facture complémentaire
if trans:
lib_piece=self._file_format(trans.reference,20)
else:
lib_piece=self._file_format(lib2,20)
#recherche de dons
donation_credit_line=False
donations=donation_booking=self.env['donation.donation'].search([('invoice_id','=',int(reg.balance_invoice_id))])
if donations:
donation_credit_line=True
for d in donations:
amount_donation=amount_donation+donations.amount_total
#écritures pour les inscription aux RETRAITES avec facture complémentaire
if trans:
lib_piece=self._file_format(trans.reference,20)
else:
lib_piece=self._file_format(lib2,20)
#debit line
debit=str(amount)
credit=''
fic_line=str(no_mvt)+';'+'IN'+';'+date_line+';'+account_debit_number+';'+lib+';'+debit+';'+credit+';'+lib_piece+'\n'
f.write(fic_line)
no_mvt=no_mvt+1
#credit(s) line(s)
#participation credit line
amount=amount-membership_amount-donation_amount
debit=''
credit=str(amount)
fic_line=str(no_mvt)+';'+'IN'+';'+date_line+';'+account_credit_number+';'+lib+';'+debit+';'+credit+';'+lib_piece+'\n'
f.write(fic_line)
no_mvt=no_mvt+1
if membership_credit_line:
#debit line
debit=str(amount)
credit=''
fic_line=str(no_mvt)+';'+'IN'+';'+date_line+';'+account_debit_number+';'+lib+';'+debit+';'+credit+';'+lib_piece+'\n'
f.write(fic_line)
no_mvt=no_mvt+1
#credit(s) line(s)
#participation credit line
if not amount: amount=0
amount=float(amount)-float(membership_amount)-float(donation_amount)
debit='' debit=''
credit=str(membership_amount)
credit=str(amount)
fic_line=str(no_mvt)+';'+'IN'+';'+date_line+';'+account_credit_number+';'+lib+';'+debit+';'+credit+';'+lib_piece+'\n' fic_line=str(no_mvt)+';'+'IN'+';'+date_line+';'+account_credit_number+';'+lib+';'+debit+';'+credit+';'+lib_piece+'\n'
f.write(fic_line) f.write(fic_line)
no_mvt=no_mvt+1 no_mvt=no_mvt+1
if donation_credit_line:
for d in donations :
if membership_credit_line:
debit='' debit=''
credit=str(d.amount_total)
credit=str(membership_amount)
fic_line=str(no_mvt)+';'+'IN'+';'+date_line+';'+account_credit_number+';'+lib+';'+debit+';'+credit+';'+lib_piece+'\n' fic_line=str(no_mvt)+';'+'IN'+';'+date_line+';'+account_credit_number+';'+lib+';'+debit+';'+credit+';'+lib_piece+'\n'
f.write(fic_line) f.write(fic_line)
no_mvt=no_mvt+1 no_mvt=no_mvt+1
if donation_credit_line:
for d in donations :
debit=''
credit=str(d.amount_total)
fic_line=str(no_mvt)+';'+'IN'+';'+date_line+';'+account_credit_number+';'+lib+';'+debit+';'+credit+';'+lib_piece+'\n'
f.write(fic_line)
no_mvt=no_mvt+1
f.close
f = open(filename, "r")
data = str.encode(f.read(), 'utf-8')
#raise UserError('gg'+f.read())
vals={}
vals['accounting_file']=base64.encodebytes(data)
vals['document_fname']='export_comptable.txt'
vals['exported_date']=fields.Date.context_today(self)
res=self.env['accounting.file'].create(vals)
f.close
os.unlink(filename)
#display account deposit
return {
'name': 'Account deposit form',
'view_type': 'form',
'view_mode': 'form',
'res_model': 'accounting.file',
'res_id': int(res.id),
'type': 'ir.actions.act_window',
'target': 'current'
}


Loading…
Cancel
Save