from odoo import api, fields, models from datetime import datetime,timedelta,date class DonationTaxReceipt(models.Model): _inherit = "donation.tax.receipt" template_rf_id=fields.Many2one('opendons.template_rf', 'RF template') #html_content=fields.Html('html content',) html_content_print=fields.Html('html content print') pdf_file=fields.Binary("PDF") @api.model def create(self, values): res = super(DonationTaxReceipt, self).create(values) #génération du RF au format HTML pour impression pdf template_rf=self.env['opendons.template_rf'].search([('type_rf','=','generic'),('active','=',True)],limit=1) html_content_print=template_rf.html_content html_content_print=html_content_print.replace('{{partner_id.name}}',str(self.partner_id.name)) html_content_print=html_content_print.replace('{{partner_id.firstname}}',str(self.partner_id.firstname)) html_content_print=html_content_print.replace('{{adresse}}',str(self.update_adresse())) html_content_print=html_content_print.replace('{{donor_id}}',str(self.partner_id.donor_id)) 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 #affichage du RF depuis l'espace donateur def update_print_pdf(self): html_content_print=self.html_content html_content_print=html_content_print.replace('{{partner_id.name}}',self.partner_id.name) html_content_print=html_content_print.replace('{{partner_id.firstname}}',self.partner_id.firstname) html_content_print=html_content_print.replace('{{donor_id}}',self.partner_id.donor_id) html_content_print=html_content_print.replace('{{adresse}}',self.update_adresse()) self.html_content_print=html_content_print 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='
'+p.tax_street2 if p.tax_street2 else '' locality='
'+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 '' country=p.tax_country_id.name if p.tax_country_id.name else '' result='

'+title+' '+name+' '+firstname+'
'+street+street2+locality+'
'+zip+' '+city+'
'+country+'

' 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='
'+p.street2 if p.street2 else '' locality='
'+p.locality if p.locality else '' zip=p.zip if p.zip else '' city=p.city if p.city else '' country=p.country_id.name if p.country_id.name else '' result='

'+title+' '+name+' '+firstname+'
'+street+street2+locality+'
'+zip+' '+city+'
'+country+'

' #result="

Monsieur Dupont Marcel
7 avenue de la Marne

75016 Paris

" 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) #self.receipt_ids.write({"print_date": today}) #update htm to print in receipts for receipt_id in self.receipt_ids: receipt_id.update_print_pdf() return self.env.ref("opendons.report_donation_tax_receipt").report_action(self.receipt_ids)