Как распечатать все счета?Odoo-10 - PullRequest
0 голосов
/ 03 мая 2019

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

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

Ответы [ 2 ]

1 голос
/ 05 мая 2019

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

0 голосов
/ 08 мая 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)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...