This question has been flagged
483 Views

"Hello everyone,

We have a problem with our module on Odoo 16. Our goal is to allow our users to download a discounted pro-forma invoice. We have created a method to generate the invoice and another method to download the invoice PDF file. We have also created a modal for users to enter the discount percentage.

However, when we call the method to download the PDF file, nothing happens. We've checked the code and everything looks fine, but we're not sure what's wrong. The modal window that calls the method is also a modal window.

If anyone has any idea what is wrong or has encountered a similar problem, we would be grateful for any help or suggestions.

Thank you in advance for your help !"


code:

import base64
from odoo import api, fields, models, _


class SaleOrder(models.Model):
_inherit = 'sale.order'

discount = fields.Float(string="Discount")

def apply_discount(self):
# Ouvrir une fenêtre modale pour saisir le pourcentage de remise
return {
'name': 'Remise facture pro-forma',
'type': 'ir.actions.act_window',
'res_model': 'sale\.order\.discount\.wizard',
\ \ \ \ \ \ \ \ \ \ \ \ 'view_mode':\ 'form',
\ \ \ \ \ \ \ \ \ \ \ \ 'target':\ 'new'
\ \ \ \ \ \ \ \ \}

\ \ \ \ def\ print_sale_order_report\(self,\ discount_percentage\):
\ \ \ \ \ \ \ \ \#\ Code\ pour\ générer\ la\ facture\ pro\-forma\ remisée
\ \ \ \ \ \ \ \ return\ pdf_content

\ \ \ \ def\ generate_sale_order_report\(self\):
\ \ \ \ \ \ \ \ \#\ Obtenir\ le\ pourcentage\ de\ remise\ saisi\ dans\ le\ contexte\ de\ la\ fenêtre\ modale
\ \ \ \ \ \ \ \ discount_percentage\ =\ self\.env\.context\.get\('discount_percentage',\ 0\.0\)

\ \ \ \ \ \ \ \ \#\ Générer\ la\ facture\ pro\-forma\ remisée\ et\ obtenir\ le\ contenu\ du\ fichier\ PDF
\ \ \ \ \ \ \ \ pdf_content\ =\ self\.print_sale_order_report\(discount_percentage\)

\ \ \ \ \ \ \ \ \#\ Enregistrer\ le\ contenu\ du\ fichier\ PDF\ dans\ le\ modèle\ de\ données
\ \ \ \ \ \ \ \ report\ =\ self\.env\['sale\.order\.report'\]\.create\(\{
\ \ \ \ \ \ \ \ \ \ \ \ 'name':\ 'sale_order_report\.pdf',
\ \ \ \ \ \ \ \ \ \ \ \ 'content':\ base64\.b64encode\(pdf_content\),
\ \ \ \ \ \ \ \ \ \ \ \ 'sale_order_id':\ self\.id,
\ \ \ \ \ \ \ \ \}\)

\ \ \ \ \ \ \ \ \#\ Renvoyer\ l'ID\ du\ modèle\ de\ données\ dans\ le\ contexte
\ \ \ \ \ \ \ \ return\ \{
\ \ \ \ \ \ \ \ \ \ \ \ 'type':\ 'ir\.actions\.act_window',
\ \ \ \ \ \ \ \ \ \ \ \ 'res_model':\ 'sale\.order',
\ \ \ \ \ \ \ \ \ \ \ \ 'res_id':\ self\.id,
\ \ \ \ \ \ \ \ \ \ \ \ 'view_mode':\ 'form',
\ \ \ \ \ \ \ \ \ \ \ \ 'target':\ 'current',
\ \ \ \ \ \ \ \ \ \ \ \ 'context':\ \{'sale_order_report_id':\ report\.id\},
\ \ \ \ \ \ \ \ \}


class\ SaleOrderReport\(models\.Model\):
\ \ \ \ _name\ =\ 'sale\.order\.report'

\ \ \ \ name\ =\ fields\.Char\(\)
\ \ \ \ content\ =\ fields\.Binary\(\)
\ \ \ \ sale_order_id\ =\ fields\.Many2one\('sale\.order'\)

\ \ \ \ def\ download_sale_order_report\(self\):
\ \ \ \ \ \ \ \ \#\ Obtenir\ l'ID\ du\ modèle\ de\ données\ à\ partir\ du\ contexte\ de\ la\ fenêtre\ principale
\ \ \ \ \ \ \ \ report_id\ =\ self\.env\.context\.get\('sale_order_report_id'\)

\ \ \ \ \ \ \ \ \#\ Trouver\ le\ modèle\ de\ données\ correspondant
\ \ \ \ \ \ \ \ report\ =\ self\.env\['sale.order.report'].browse(report_id)

# Renvoyer le fichier pour le téléchargement
return request.make_response(report.content, [
('Content-Type', 'application/pdf'),
('Content-Disposition', 'attachment; filename=sale_order_report.pdf;')
])

Avatar
Discard