Skip to Content
Menu
This question has been flagged
5 Replies
7071 Views

i have multi-pal line of item what i need is when product line reached 4 of line

page break and show 4th item in next page with complete header and footer

is it possible ?



First Page



Second Page





this is current situation

Avatar
Discard
Best Answer

Hello Usman,

you have to set a counter.. on every line,
you can use index to count in the loop...
for example :

<div t-if="line_index % 4 == 0" style="page-break-after: always;">
    <br/>
</div>

this will give you the page break after the loop index reaches 4...


if this doesn't work you can simply set a boolean field which can be computed to be true after every 4 lines.. if the field is true, then add the page break code...



Best Regards

Team Kanak

Skype : kanakinfosystems

email : sales@kanakinfosystems.com

Avatar
Discard
Author

no effect :-/

share your code files plz

Author

no effect :-/

Author

<table class="table table-bordered" style="margin-top: 50px;font-size:20px;width:100%;">

<t t-set="i" t-value="1"/>

<t t-set="val" t-value="0"/>

<tbody class="gst_tbody">

<tr t-foreach="o.order_line" t-as="line">

<td class="text-center" style="width:6%;">

<span t-esc="i"/>

<t t-set="i" t-value="i+1"/>

</td>

<td class="text-center" style="width:16%;">

<span t-field="line.product_id.barcode"/>

</td>

<td class="text-left" style="width:38%;">

<span t-field="line.product_id.name"/>

</td>

<td class="text-left" style="width:9%;">

<span t-field="line.product_uom.name"/>

</td>

<td class="text-center" style="width:10%;">

<span t-field="line.product_uom_qty"/>

</td>

<td class="text-center" style="width:10%;">

<span t-field="line.price_unit"/>

</td>

<!-- <td class="text-center" >

<span t-field="line.discount"/>

</td> -->

<td class="text-right">

<span t-field="line.price_subtotal" style="width:10%;"/>

</td>

<div t-if="line_index % 4 == 0" style="page-break-after: always;">

<br/>

</div>

</tr>

</tbody>

</table>

Author Best Answer

<table class="table table-bordered" style="margin-top: 50px;font-size:20px;width:100%;">
                  
                            <t t-set="i" t-value="1"/>
                            <t t-set="val" t-value="0"/>
                            <tbody class="gst_tbody">
                               
                               
                                       
                                        <tr t-foreach="o.order_line" t-as="line">
                                           
                                           
                                           
                                                <td class="text-center" style="width:6%;">
                                                     <span t-esc="i"/>
                                                     <t t-set="i" t-value="i+1"/>
                                                </td>
                                                <td class="text-center" style="width:16%;">
                                                    <span t-field="line.product_id.barcode"/>
                                                </td>

                                                <td class="text-left" style="width:38%;">
                                                    <span t-field="line.product_id.name"/>
                                                </td>
                                                 <td class="text-left" style="width:9%;">
                                                    <span t-field="line.product_uom.name"/>
                                                </td>
                                                <td class="text-center" style="width:10%;">
                                                    <span t-field="line.product_uom_qty"/>
                                                </td>
                                                <td class="text-center" style="width:10%;">
                                                    <span t-field="line.price_unit"/>
                                                </td>
                                                <!-- <td  class="text-center" >
                                                    <span t-field="line.discount"/>
                                                </td> -->
                                               
                                                <td class="text-right">
                                                    <span t-field="line.price_subtotal" style="width:10%;"/>
                                                </td>
                                           
                                             <div t-if="line_index % 4 == 0" style="page-break-after: always;">
           <br/>
                    </div>
                                          
                                           
                                        </tr>
                                    
                                  
                               
                        </tbody>
                        </table>

Avatar
Discard

Hello Usman,

please Try this solution,

1. create This method in Sale Order Object.

def _get_order_line(self):

cnt_number_of_page = len(self.invoice_line_ids) / 4

number_of_page = round(cnt_number_of_page) + 1

line = self.env['sale.order.line']

lst = {page: line for page in range(number_of_page)}

order_lines = self.order_line

for key in lst.keys():

for line in order_lines:

if len(lst[key]) < 4:

lst[key] |= line

order_lines = order_lines - line

else:

break

return lst

2. Write this code in your report xml

<t t-set="order_lines" t-value="o._get_order_line()"/>

<t t-foreach="order_lines.keys()" t-as="key">

<t t-set="lines" t-value="order_lines[key]"/>

<table class="table table-sm o_main_table" name="invoice_line_table">

<thead>

<tr>

<th>No</th>

<th>Barcode</th>

<th>Name</th>

<th>Uom</th>

<th>Qty</th>

<th>Unit</th>

<th>Discount</th>

<th>Price Subtotal</th>

</tr>

</thead>

<tbody class="gst_tbody">

<tr t-foreach="o.order_line" t-as="line">

<td class="text-center" style="width:6%;">

<span t-esc="i"/>

<t t-set="i" t-value="i+1"/>

</td>

<td class="text-center" style="width:16%;">

<span t-field="line.product_id.barcode"/>

</td>

<td class="text-left" style="width:38%;">

<span t-field="line.product_id.name"/>

</td>

<td class="text-left" style="width:9%;">

<span t-field="line.product_uom.name"/>

</td>

<td class="text-center" style="width:10%;">

<span t-field="line.product_uom_qty"/>

</td>

<td class="text-center" style="width:10%;">

<span t-field="line.price_unit"/>

</td>

<!-- <td class="text-center" >

<span t-field="line.discount"/>

</td> -->

<td class="text-right">

<span t-field="line.price_subtotal" style="width:10%;"/>

</td>

</tr>

</tbody>

</table>

</t>

<p style="page-break-before:always;"></p>

</t>

Thanks

Hello Kanak. I have same issues in my custom model.I create with report in wizard.

@api.model

def _get_report_values(self, docids, data=None):

report = self.env['ir.actions.report']._get_report_from_name(

'sc_thai_wht_pnd53_report.pnd53_summary')

date_from = data['form']['date_from']

date_to = data['form']['date_to']

partner_id = data['form']['partner_id']

original_copy = data['form']['original_copy']

copy_count = data['form']['copy_count']

month_from = data['form']['month_from']

with_attachments = data['form']['with_attachments']

if partner_id:

domain = [('supplier_partner_id','=',partner_id),('date','>=',date_from),('date','<=',date_to),('income_tax_form','=','pnd53'),('state','=','done')]

else:

domain = [('date','>=',date_from),('date','<=',date_to),('income_tax_form','=','pnd53'),('state','=','done')]

wht_certs = self.env['withholding.tax.cert'].search(domain)

pages_count = int(len(wht_certs)/6) + 1 if len(wht_certs) % 6 > 0 else int(len(wht_certs)/6)

return {

'doc_ids': docids,

'pages_count': pages_count,

'pages': range(pages_count),

'wht_certs': wht_certs,

'doc_model': report.model,

'docs': self.env.user.company_id,

'report_type': data.get('report_type') if data else '',

'company': self.env.user.company_id,

}

How can I fix for split 6 row in each page.