закрыть мастер после нажатия кнопки в odoo 12 - PullRequest
1 голос
/ 07 мая 2020

, не могли бы вы помочь мне относительно мастера закрытия. Я создал мастер из xml, когда я добавляю даты и нажимаю кнопку xlsx, xlsx и мастер закрывает его самостоятельно. работает нормально. но когда я нажимаю на pdf, pdf создается успешно, но мастер остается открытым. как я могу его закрыть. вот мой код xml.

<record id="payment_invoice_wizard_form" model="ir.ui.view">
        <field name="name">Invoice Payment Report</field>
        <field name="model">invoice.payment_report</field>
        <field name="arch" type="xml">
            <form string="Invoice Payment Report">
                <group>
                    <field name="start_date"/>
                    <field name="end_date"/>
                    <field name="status"/>
                </group>
                <!-- other fields -->
                 <footer>
                    <button name="print_pdf" string="Print" type="object" class="btn-primary"/>
                    <button name="print_xls" string="Print in XLS" type="object" class="btn-primary"/>
                    <button string="Cancel" class="btn-default" special="cancel" />   
                </footer>

            </form>          
        </field>
    </record>

на стороне py я получаю все необходимые данные и возвращаю эту функцию

    @api.multi
    def print_pdf(self):
        #mycode
        return self.env.ref('customer_products.pdf_products').report_action(self)

1 Ответ

1 голос
/ 07 мая 2020

Когда Odoo запускает действие загрузки отчета , он проверяет, установлен ли атрибут close_on_report_download action на true, если да, он вернет действие типа ir.actions.act_window_close, которое закроет мастер .

@api.multi
def print_pdf(self):
    action = self.env.ref('customer_products.pdf_products').report_action(self)
    action.update({'close_on_report_download': True})
    return action

Изменить:

Вы можете реализовать тот же logi c, переопределить QWEBActionManager и проверить если опция передана через определение действия, и если да, закройте окно.

var ActionManager = require('web.ActionManager');
var session = require('web.session');

ActionManager.include({
    ir_actions_report: function (action, options) {
        var self = this;
        return $.when(this._super.apply(this, arguments), session.is_bound).then(function() {
            if (action && action.report_type === 'qweb-pdf' && action.close_on_report_download) {
                return self.do_action({ type: 'ir.actions.act_window_close' });
            }
        });
    },
});
...