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
1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.