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
Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:
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
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
no effect :-/
share your code files plz
no effect :-/
<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>
<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>
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.
Create an account today to enjoy exclusive features and engage with our awesome community!
Sign up