コンテンツへスキップ
メニュー
この質問にフラグが付けられました
2 返信
4703 ビュー

Hello everyone,

I am using Odoo 12 and need to run a code after printing a report.

The code I am inheriting from 'account.invoice' is:

    @api.multi
    def invoice_print(self):

         res = super(AccountInvoice, self).invoice_print()

         # First, I need to print the report... and then
         # ...run the code here (after printing the report)...

First, I need to print the report and then execute a code to change a value of a field.

Can anyone help me please?

Thank you all in advance

Regards

PM

アバター
破棄
最善の回答

Hi Paulo,

If the order doesn't strictly matter, then the following code is the easiest approach:

@api.multi
def invoice_print(self):
    res = super(ReportController, self).invoice_print()
    self.write({'print_button_pressed': True})
    return res

The main thing to note is that you are returning the result of the super, which contains the print action. As I mentioned, the order wrong in this, but in most case it shouldn't matter. This change will technically come into effect before the invoice is printed, which will only matter if you are showing that field on the invoice and need the value from before the change.

If you do need the original value, you can use the following at the end of the invoice report:

<t t-set="dummy" t-value="o.your_function_name()"/>

Then create a function your_function_name on the invoice with the code you need.


アバター
破棄
著作者

Thank you @Jake Robinson,

This is what I need: <t t-set="dummy" t-value="o.your_function_name()"/>

Best regards

PM

最善の回答

Report will print only if you return report action from a function which means you can not run code after print report.

You can call another function from qweb report which will get called during report print. With browse object you can call function of same class in qweb code.

Thanks

アバター
破棄
関連投稿 返信 ビュー 活動
1
1月 20
4356
2
12月 19
5058
3
12月 19
7481
1
2月 19
9816
1
11月 24
1616