Как распечатать все счета? Odoo-10

Я хочу распечатать все отчеты, относящиеся к конкретному клиенту. У меня уже есть своя форма отчета. Не знаю, как добавить кнопку «print_all» для печати (или просто сохранения в pdf) всех счетов

Если кто-то знает, где я могу найти похожие решения, помогите, пожалуйста. Если я был недостаточно ясен или вам нужно больше информации, пожалуйста, дайте мне знать.


person Dejan Dakovic    schedule 03.05.2019    source источник
comment
Выберите все счета в списке и нажмите кнопку печати.   -  person Kenly    schedule 05.05.2019
comment
Спасибо за совет, но мне нужно распечатать все счета отдельно. Например, если у пользователя some_name 55 счетов-фактур, мне нужно 55 документов в формате PDF.   -  person Dejan Dakovic    schedule 06.05.2019


Ответы (2)


Нет необходимости писать свою собственную функцию, чтобы распечатать весь отчет, связанный с клиентом, в форме клиента есть интеллектуальная кнопка «выставлен счет», она откроет счета для конкретного клиента, и вы можете распечатать ответ от @WaKo.

person Bhavesh Kagathara    schedule 05.05.2019
comment
Спасибо за совет, но мне нужно распечатать все счета отдельно. Например, если у пользователя some_name 55 счетов-фактур, мне нужно 55 документов в формате PDF. - person Dejan Dakovic; 06.05.2019

Вы можете добавить кнопку в ListView и использовать JavaScript для загрузки файлов отдельно (вызовите метод python, чтобы получить данные отчета в виде строки base64).

Чтобы добавить кнопку, вам нужно переопределить шаблон ListView Qweb.

Qweb:

<?xml version="1.0" encoding="UTF-8"?>
<templates id="sync_template" xml:space="preserve">
    <t t-extend="ListView.buttons">
       <t t-jquery="button.oe_list_add" t-operation="after">
            <t t-if="widget.model == 'account.invoice'">
                  <button class="btn btn-sm btn-default oe_print_all" type="button">Print All</button>
            </t>
       </t>
    </t>
</templates>

JavaScript:
я включил download.js, чтобы иметь возможность звонить download из js.

openerp.print_all = function(instance) {

 instance.web.ListView.include({
    load_list: function(data) {
        this._super(data);
        if (this.$buttons) {
            this.$buttons.find('.oe_print_all').off().click(this.proxy('print_all')) ;
        }
    },

    print_all: function () {
        var report_obj = new instance.web.Model("report")
        var dataset = this.dataset;
        new instance.web.Model("account.invoice")
        .call("get_report_data", [this.groups.get_selection().ids])
        .done(function (datas) {

            console.log(datas);

            $.each(datas, function( index, data ) {
                download('data:application/pdf;base64,' + data[0], "Invoice_" + data[1] + '.pdf','application/pdf');
            });
        });
    }
 });

}

Я использовал get_report_data метод, который возвращает список кортежей [(invoice_data, name), ...]

Python

class AccountInvoice(models.Model):
    _inherit = "account.invoice"

    @api.model
    def get_report_data(self, ids):
        report_obj = self.env['report']
        return [(base64.b64encode(report_obj.get_pdf(invoice, "account.report_invoice")),
                 invoice.number.replace('/', '-') if invoice.number else '')
                for invoice in self.browse(ids)]
person Kenly    schedule 08.05.2019