จะพิมพ์ใบแจ้งหนี้ทั้งหมดได้อย่างไร? โอดู-10

ฉันต้องการพิมพ์รายงานทั้งหมดที่เป็นของลูกค้ารายใดรายหนึ่ง ฉันมีรูปแบบการรายงานของตัวเองอยู่แล้ว ฉันไม่รู้วิธีเพิ่มปุ่ม "print_all" สำหรับพิมพ์ (หรือบันทึกเป็น pdf) ใบแจ้งหนี้ทั้งหมด

หากมีใครรู้ว่าฉันสามารถหาวิธีแก้ปัญหาที่คล้ายกันได้ที่ไหน โปรดช่วยด้วย หากฉันไม่ชัดเจนเพียงพอหรือหากคุณต้องการข้อมูลเพิ่มเติม โปรดแจ้งให้เราทราบ


person Dejan Dakovic    schedule 03.05.2019    source แหล่งที่มา
comment
เลือกใบแจ้งหนี้ทั้งหมดในมุมมองรายการแล้วคลิกปุ่มพิมพ์   -  person Kenly    schedule 05.05.2019
comment
ขอบคุณสำหรับคำแนะนำ แต่ฉันต้องพิมพ์ใบแจ้งหนี้ทั้งหมดแยกกัน ตัวอย่างเช่น หากผู้ใช้ some_name มีใบแจ้งหนี้ 55 ใบ ฉันจำเป็นต้องมีเอกสาร PDF 55 ฉบับ   -  person Dejan Dakovic    schedule 06.05.2019


คำตอบ (2)


ไม่จำเป็นต้องเขียนฟังก์ชันของคุณเองเพื่อพิมพ์รายงานทั้งหมดที่เกี่ยวข้องกับลูกค้า ภายใต้แบบฟอร์มลูกค้าจะมีปุ่มอัจฉริยะ "ออกใบแจ้งหนี้" ซึ่งจะเปิดใบแจ้งหนี้เฉพาะลูกค้า และคุณสามารถพิมพ์ตามที่ตอบโดย @WaKo ได้

person Bhavesh Kagathara    schedule 05.05.2019
comment
ขอบคุณสำหรับคำแนะนำ แต่ฉันต้องพิมพ์ใบแจ้งหนี้ทั้งหมดแยกกัน ตัวอย่างเช่น หากผู้ใช้ some_name มีใบแจ้งหนี้ 55 ใบ ฉันจำเป็นต้องมีเอกสาร PDF 55 ฉบับ - person Dejan Dakovic; 06.05.2019

คุณสามารถเพิ่มปุ่มลงใน ListView และใช้ JavaScript เพื่อดาวน์โหลดไฟล์แยกกัน (เรียกใช้เมธอด python เพื่อรับข้อมูลรายงานเป็นสตริง base64)

หากต้องการเพิ่มปุ่ม คุณจะต้องแทนที่เทมเพลต ListView 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), ...]

หลาม

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