|
from odoo import api, fields, models
|
|
from datetime import datetime,timedelta,date
|
|
import locale
|
|
import threading
|
|
from num2words import num2words
|
|
from contextlib import contextmanager
|
|
class DonationTaxReceipt(models.Model):
|
|
_inherit = "donation.tax.receipt"
|
|
|
|
template_rf_id=fields.Many2one('opendons.template_rf', 'RF template')
|
|
|
|
html_content_print=fields.Html('html content print')
|
|
css_print=fields.Text('css')
|
|
pdf_file=fields.Binary("PDF")
|
|
|
|
|
|
@api.model
|
|
def create(self, values):
|
|
|
|
res = super(DonationTaxReceipt, self).create(values)
|
|
#generate the taxreceipt in HTMl format for PDF print
|
|
template_rf=self.env['opendons.template_rf'].search([('type_rf','=','generic'),('active','=',True)],limit=1)
|
|
res.css_print=template_rf.css
|
|
html_content_print=template_rf.html_content
|
|
|
|
html_content_print=html_content_print.replace('{{partner_id.name}}',str(res.partner_id.name))
|
|
html_content_print=html_content_print.replace('{{partner_id.firstname}}',str(res.partner_id.firstname))
|
|
html_content_print=html_content_print.replace('{{adresse}}',str(res.update_adresse()))
|
|
html_content_print=html_content_print.replace('{{number}}',str(res.number))
|
|
locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')
|
|
today=datetime.today()
|
|
html_content_print=html_content_print.replace('{{date}}',today.strftime("%d %B %Y"))
|
|
html_content_print=html_content_print.replace('{{donor_id}}',str(self.partner_id.donor_id))
|
|
html_content_print=html_content_print.replace('{{fiscalyear}}',str(int(today.strftime("%Y"))-1))
|
|
html_content_print=html_content_print.replace('{{amount}}',str(res.amount))
|
|
html_content_print=html_content_print.replace('{{amountstr}}',num2words(float(res.amount),lang="fr",to="currency"))
|
|
|
|
res.html_content_print=html_content_print
|
|
res.template_rf_id=template_rf.id
|
|
return res
|
|
|
|
|
|
def get_portal_url(self):
|
|
return "/my/taxreceipt/print?id="+str(self.id)
|
|
def action_print_rf(self):
|
|
self.ensure_one()
|
|
self.print_date=datetime.now()
|
|
|
|
return self.env.ref("opendons.report_donation_tax_receipt").report_action(self)
|
|
|
|
|
|
def _html_content_rf(self):
|
|
self.html_content=self.template_rf_id.html_content
|
|
|
|
|
|
def update_adresse(self):
|
|
p=self.env['res.partner'].search([('id','=',int(self.partner_id))])
|
|
result=''
|
|
#prise en compte de l'adresse fiscale ou non
|
|
if p.tax_street and p.tax_zip and p.city:
|
|
title=p.title.name if p.title.name else ''
|
|
name=p.name if p.name else ''
|
|
firstname=p.firstname if p.firstname else ''
|
|
street=p.tax_street if p.tax_street else ''
|
|
street2='<br>'+p.tax_street2 if p.tax_street2 else ''
|
|
locality='<br>'+p.tax_locality if p.tax_locality else ''
|
|
zip=p.tax_zip if p.tax_zip else ''
|
|
city=p.tax_city if p.tax_city else ''
|
|
|
|
|
|
result='<p>'+title+' '+name+' '+firstname+'<br>'+street+street2+locality+'<br>'+zip+' '+city+'</p>'
|
|
else:
|
|
title=p.title.name if p.title.name else ''
|
|
name=p.name if p.name else ''
|
|
firstname=p.firstname if p.firstname else ''
|
|
street=p.street if p.street else ''
|
|
street2='<br>'+p.street2 if p.street2 else ''
|
|
locality='<br>'+p.locality if p.locality else ''
|
|
zip=p.zip if p.zip else ''
|
|
city=p.city if p.city else ''
|
|
|
|
|
|
result='<p>'+title+' '+name+' '+firstname+'<br>'+street+street2+locality+'<br>'+zip+' '+city+'</p>'
|
|
|
|
#result="<p>Monsieur Dupont Marcel<br>7 avenue de la Marne</p><p>75016 Paris</p>"
|
|
return result
|
|
|
|
class DonationTaxReceiptPrint(models.TransientModel):
|
|
_inherit = "donation.tax.receipt.print"
|
|
|
|
|
|
def print_receipts(self):
|
|
self.ensure_one()
|
|
if not self.receipt_ids:
|
|
raise UserError(_("There are no tax receipts to print."))
|
|
today = fields.Date.context_today(self)
|
|
|
|
|
|
|
|
return self.env.ref("opendons.report_donation_tax_receipt").report_action(self.receipt_ids)
|