This question has been flagged

Hello,


Is it possible to create a link in the same way one does for sales orders, to a generated pdf?

For instance, a link to a sales order is formatted like this:

https://oursite.com/my/orders/267?access_token=long-uuid-here


I tried using the same access token like this:

https://oursite.com/report/pdf/module.report_id/item-id?access_token=long-uuid-here
But by following the link, I am taken to the login page. The same link works if I log in beforehand (and optionally remove the access_token).


Do I have to give some special access to the report in question for this to work?

Avatar
Discard

hi did you solve it?if you did can you tell me how?
am facing the same issue,,,
regards

Hi, did someone know to access report by public user without login by using access token?

Hi, i'm facing the same problem,
I want to allow access to :domaine_name/report/pdf/module.report_id/item_id by Portal without login
please did you solve it or does someone khow how to do it?
Regards.

I'm facing the same problem,
When I add attachements through API, in database without access_token
But if I use the HTML editor, they get access_token and portal user can download it

Best Answer

Here is an example of how you could create a link to a generated PDF in Odoo for a sales order:


Create a new report action for the sales order:

Copy code

from odoo import api, models


class SalesOrderReport(models.AbstractModel):

    _name = 'report.sales_order_report'


    @api.model

    def render_html(self, docids, data=None):

        # Get the sales order record

        order = self.env['sale.order'].browse(docids[0])


        # Generate the PDF report

        pdf_report = self.env.ref('module_name.report_name').render_qweb_pdf([order.id])[0]


        # Attach the generated PDF report to the sales order record

        order.write({'pdf_report': pdf_report})


        # Return the HTML for the report

        return self.env['report'].render('module_name.report_name', {'order': order})

Add a new field to the sales order model to store the PDF report:

Copy code

pdf_report = fields.Binary('PDF Report')

Create a new button in the sales order form view to generate the PDF report and open it in a new window:

Copy code

Add an action to the button to call the report action and open the generated PDF:

Copy code

@api.multi

def generate_pdf(self):

    return self.env.ref('module_name.report_name').report_action(self)

Add the pdf_report field to the view :

Copy code

This is just a basic example to illustrate the process of creating a link to a generated PDF in Odoo for a sales order. You may need to adjust the code to suit the specific requirements of your implementation.


Avatar
Discard
Best Answer

There are two sides to this:

1) access_token is in base model, so it does exist for all models AFAIK.

2) To have same functionality as in sales & invoice, you need to write a controller that will handle external user access. Check the code in sales controller for " /my/orders/" to be able to do the same for your report.

Avatar
Discard