Passa al contenuto
Odoo Menu
  • Accedi
  • Provalo gratis
  • App
    Finanze
    • Contabilità
    • Fatturazione
    • Note spese
    • Fogli di calcolo (BI)
    • Documenti
    • Firma
    Vendite
    • CRM
    • Vendite
    • Punto vendita Negozio
    • Punto vendita Ristorante
    • Abbonamenti
    • Noleggi
    Siti web
    • Configuratore sito web
    • E-commerce
    • Blog
    • Forum
    • Live chat
    • E-learning
    Supply chain
    • Magazzino
    • Produzione
    • PLM
    • Acquisti
    • Manutenzione
    • Qualità
    Risorse umane
    • Dipendenti
    • Assunzioni
    • Ferie
    • Valutazioni
    • Referral dipendenti
    • Parco veicoli
    Marketing
    • Social marketing
    • E-mail marketing
    • SMS marketing
    • Eventi
    • Marketing automation
    • Sondaggi
    Servizi
    • Progetti
    • Fogli ore
    • Assistenza sul campo
    • Helpdesk
    • Pianificazione
    • Appuntamenti
    Produttività
    • Comunicazioni
    • Approvazioni
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    App di terze parti Odoo Studio Piattaforma cloud Odoo
  • Settori
    Retail
    • Libreria
    • Negozio di abbigliamento
    • Negozio di arredamento
    • Alimentari
    • Ferramenta
    • Negozio di giocattoli
    Cibo e ospitalità
    • Bar e pub
    • Ristorante
    • Fast food
    • Pensione
    • Grossista di bevande
    • Hotel
    Agenzia immobiliare
    • Agenzia immobiliare
    • Studio di architettura
    • Edilizia
    • Gestione immobiliare
    • Impresa di giardinaggio
    • Associazione di proprietari immobiliari
    Consulenza
    • Società di contabilità
    • Partner Odoo
    • Agenzia di marketing
    • Studio legale
    • Selezione del personale
    • Audit e certificazione
    Produzione
    • Tessile
    • Metallo
    • Arredamenti
    • Alimentare
    • Birrificio
    • Ditta di regalistica aziendale
    Benessere e sport
    • Club sportivo
    • Negozio di ottica
    • Centro fitness
    • Centro benessere
    • Farmacia
    • Parrucchiere
    Commercio
    • Tuttofare
    • Hardware e assistenza IT
    • Ditta di installazione di pannelli solari
    • Calzolaio
    • Servizi di pulizia
    • Servizi di climatizzazione
    Altro
    • Organizzazione non profit
    • Ente per la tutela ambientale
    • Agenzia di cartellonistica pubblicitaria
    • Studio fotografico
    • Punto noleggio di biciclette
    • Rivenditore di software
    Carica tutti i settori
  • Community
    Apprendimento
    • Tutorial
    • Documentazione
    • Certificazioni 
    • Formazione
    • Blog
    • Podcast
    Potenzia la tua formazione
    • Programma educativo
    • Scale Up! Business Game
    • Visita Odoo
    Ottieni il software
    • Scarica
    • Versioni a confronto
    • Note di versione
    Collabora
    • Github
    • Forum
    • Eventi
    • Traduzioni
    • Diventa nostro partner
    • Servizi per partner
    • Registra la tua società di contabilità
    Ottieni servizi
    • Trova un partner
    • Trova un contabile
    • Incontra un esperto
    • Servizi di implementazione
    • Testimonianze dei clienti
    • Supporto
    • Aggiornamenti
    GitHub Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Richiedi una demo
  • Prezzi
  • Aiuto

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Contabilità
  • Magazzino
  • PoS
  • Progetti
  • MRP
All apps
È necessario essere registrati per interagire con la community.
Tutti gli articoli Persone Badge
Etichette (Mostra tutto)
odoo accounting v14 pos v15
Sul forum
È necessario essere registrati per interagire con la community.
Tutti gli articoli Persone Badge
Etichette (Mostra tutto)
odoo accounting v14 pos v15
Sul forum
Assistenza

Target all element td with xpath in qweb view

Iscriviti

Ricevi una notifica quando c'è un'attività per questo post

La domanda è stata contrassegnata
viewsqwebreportxpathwkhtmltopdf
13 Risposte
34073 Visualizzazioni
Avatar
Youri Lebarch

Hello, 

I try to add condition in all td element of first table in report sale_order. For this i use xpath.
But, just the first td element is targeting. Why ? It's bug ? This error come to qweb ? wkhtmltopdf ? 
My code

<template id="report_so_no_print_lines" inherit_id="sale.report_saleorder_document">

	<xpath expr="//table[1]/tbody/tr/td" position="attributes">	

		<attribute name="t-if">l.product_id.product_tmpl_id.no_print_in_invoice != True</attribute>

	</xpath> 

</template>


I try with other element, other position for test and with this code : 

<xpath expr="//span" position="replace">	

<span>COUCOU</span>
</xpath>

And I've the same problem, just the first element span is replace. 
Please, can you help me ?

0
Avatar
Abbandona
Avatar
Temur
Risposta migliore

Add brackets () at the end, it means All Elements... otherwise it matches the first element, it's expected behavior, not an error.

for all span, your example will become:

<xpath expr="//span()" position="replace">	

<span>COUCOU</span>

</xpath>
3
Avatar
Abbandona
Youri Lebarch
Autore

Doesn't work, i have a parse error : ParseError: "ValidateError Field(s) `arch` failed against a constraint: Invalid view definition

Temur

You tried for span?

Youri Lebarch
Autore

For //span and for //table[1]/tbody/tr/td And i've this error

Temur

and for expr="//table[1]/tbody/tr::td()" ? I never tried it in Odoo, but in Xpath "//node()" should select all "node"-s. I do not know why you get that error.

Youri Lebarch
Autore

Thanks for your responses, but it doesn't work too :( I think odoo's parser has little problem.

Avatar
TKF
Risposta migliore

Hello dark,

I adapted your xpath's expression to "//table[1]/tbody/t/tr/td", because my template is :

template id="report_saleorder_document">
<t t-call="report.external_layout">
<t t-set="doc" t-value="doc.with_context({'lang':doc.partner_id.lang})" />
<div class="page">
<div class="oe_structure"/>
<div class="row">
<div class="col-xs-6">
<strong t-if="doc.partner_shipping_id == doc.partner_invoice_id">Invoicing and shipping address:</strong>
<strong t-if="doc.partner_shipping_id != doc.partner_invoice_id">Invoicing address:</strong>
<div t-field="doc.partner_invoice_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": true, "phone_icons": true}'/>
<p t-if="doc.partner_id.vat">VAT: <span t-field="doc.partner_id.vat"/></p>
<div t-if="doc.partner_shipping_id != doc.partner_invoice_id" class="mt8">
<strong>Shipping address:</strong>
<div t-field="doc.partner_shipping_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": true, "phone_icons": true}'/>
<p t-if="doc.partner_id.vat">VAT: <span t-field="doc.partner_id.vat"/></p>
</div>
</div>
<div class="col-xs-5 col-xs-offset-1">
<div t-field="doc.partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": true}' />
</div>
</div>

<h2>
<span t-if="doc.state not in ['draft','sent']">Order # </span>
<span t-if="doc.state in ['draft','sent']">Quotation # </span>
<span t-field="doc.name"/>
</h2>

<div class="row mt32 mb32" id="informations">
<div t-if="doc.client_order_ref" class="col-xs-3">
<strong>Your Reference:</strong>
<p t-field="doc.client_order_ref"/>
</div>
<div t-if="doc.date_order" class="col-xs-3">
<strong t-if="doc.state not in ['draft','sent']">Date Ordered:</strong>
<strong t-if="doc.state in ['draft','sent']">Quotation Date:</strong>
<p t-field="doc.date_order"/>
</div>
<div t-if="doc.user_id.name" class="col-xs-3">
<strong>Salesperson:</strong>
<p t-field="doc.user_id"/>
</div>
<div name="payment_term" t-if="doc.payment_term_id" class="col-xs-3">
<strong>Payment Term:</strong>
<p t-field="doc.payment_term_id"/>
</div>
</div>

<!-- Is there a discount on at least one line? -->
<t t-set="display_discount" t-value="any([l.discount for l in doc.order_line])"/>

<table class="table table-condensed">
<thead>
<tr>
<th>Description</th>
<th class="text-right">Quantity</th>
<th class="text-right">Unit Price</th>
<th t-if="display_discount" class="text-right" groups="sale.group_discount_per_so_line">Disc.(%)</th>
<th class="text-right">Taxes</th>
<th class="text-right">Price</th>
</tr>
</thead>
<tbody class="sale_tbody">
<t t-foreach="doc.order_line" t-as="l">
<tr t-if="l.product_uom_qty">
<td>
<span t-field="l.name"/>
</td>
<td class="text-right">
<span t-field="l.product_uom_qty"/>
<span groups="product.group_uom" t-field="l.product_uom"/>
</td>
<td class="text-right">
<span t-field="l.price_unit"/>
</td>
<td t-if="display_discount" class="text-right" groups="sale.group_discount_per_so_line">
<span t-field="l.discount"/>
</td>
<td class="text-right">
<span t-esc="', '.join(map(lambda x: (x.description or x.name), l.tax_id))"/>
</td>
<td class="text-right">
<span t-field="l.price_subtotal"
t-field-options='{"widget": "monetary", "display_currency": "doc.pricelist_id.currency_id"}'/>
</td>
</tr>
</t>
</tbody>
</table>

<div class="row" name="total">
<div class="col-xs-4 pull-right">
<table class="table table-condensed">
<tr class="border-black">
<td><strong>Total Without Taxes</strong></td>
<td class="text-right">
<span t-field="doc.amount_untaxed"
t-field-options='{"widget": "monetary", "display_currency": "doc.pricelist_id.currency_id"}'/>
</td>
</tr>
<tr>
<td>Taxes</td>
<td class="text-right">
<span t-field="doc.amount_tax"
t-field-options='{"widget": "monetary", "display_currency": "doc.pricelist_id.currency_id"}'/>
</td>
</tr>
<tr class="border-black">
<td><strong>Total</strong></td>
<td class="text-right">
<span t-field="doc.amount_total"
t-field-options='{"widget": "monetary", "display_currency": "doc.pricelist_id.currency_id"}'/>
</td>
</tr>
</table>
</div>
</div>

<p t-field="doc.note" />
<p t-if="doc.payment_term_id.note">
<span t-field="doc.payment_term_id.note"/>
</p>
<p t-if="not doc.payment_term_id and doc.partner_id.property_payment_term_id">
<span t-field="doc.partner_id.property_payment_term_id.note"/>
</p>
<p id="fiscal_position_remark" t-if="doc.fiscal_position_id and doc.fiscal_position_id.note">
<strong>Fiscal Position Remark:</strong>
<span t-field="doc.fiscal_position_id.note"/>
</p>
<div class="oe_structure"/>
</div>
</t>
</template>

And I got the first too. But when I try on "online xpath tester", like : www.codebeautify.org/Xpath-Tester

I have what you wanted:

<td>
<span t:field="l.name"/>
</td>
<td class="text:right">
<span t:field="l.product_uom_qty"/>
<span groups="product.group_uom" t:field="l.product_uom"/>
</td>
<td class="text:right">
<span t:field="l.price_unit"/>
</td>
<td t:if="display_discount" class="text:right" groups="sale.group_discount_per_so_line">
<span t:field="l.discount"/>
</td>
<td class="text:right">
<span t:esc="', '.join(map(lambda x: (x.description or x.name), l.tax_id))"/>
</td>
<td class="text:right">
<span t:field="l.price_subtotal" t:field:options="{&quot;widget&quot;: &quot;monetary&quot;, &quot;display_currency&quot;: &quot;doc.pricelist_id.currency_id&quot;}"/>
</td>


So my conclusion is that there is a bug.

0
Avatar
Abbandona
Avatar
Akhil P Sivan
Risposta migliore

Hi,

Your code target only the first element and its not an error. A possible solution, please try:

<template id="report_so_no_print_lines" inherit_id="sale.report_saleorder_document">
<xpath expr="//table[1]/tbody/tr" position="replace">
<tr t-foreach="o.order_line" t-as="l">
<t t-if="l.product_id.product_tmpl_id.no_print_in_invoice != True">
<td>
<span t-field="l.name"/>
</td>
<td>
<span t-esc="', '.join(map(lambda x: x.name, l.tax_id))"/>
</td>
<td class="text-right">
<span t-field="l.product_uom_qty"/>
<span groups="product.group_uom" t-field="l.product_uom"/>
</td>
<td class="text-right">
<span t-field="l.price_unit"/>
</td>
<td groups="sale.group_discount_per_so_line">
<span t-field="l.discount"/>
</td>
<td class="text-right">
<span t-field="l.price_subtotal"
t-field-options='{"widget": "monetary", "display_currency": "o.pricelist_id.currency_id"}'/>
</td>
</t>
</tr>
</xpath>
</template>
0
Avatar
Abbandona
Youri Lebarch
Autore

Thank for your response but i try to generalize this fonctionality for all my project which have different sale.order report. So if you have an idea to put this element after

element but before first , i take ! ;)
Youri Lebarch
Autore

*So if you have an idea to put this element t after element tr but before first td element, i take ! ;)

Akhil P Sivan

Sorry dark, I didn't get you. You want to check that same condition on each column? You just tell me what exactly you need, I can help you to solve it.

Youri Lebarch
Autore

I want to hide a line of sale.order.line when user print report if product in this line is mark as hide in print (just checkbox in product form). I can't put condition in tr element because they are iteration. So i want to check that condition in each column, yes.

Akhil P Sivan

Means if you check "hide in print" on product form, then that product should not appear in sale order lines on the report right? Did you check report with the above code? As the condition is same and applicable to an entire line or row, I didn't put the condition on each column. If you need I can put the condition in each column, but before that please check with the above code.

Ti stai godendo la conversazione? Non leggere soltanto, partecipa anche tu!

Crea un account oggi per scoprire funzionalità esclusive ed entrare a far parte della nostra fantastica community!

Registrati
Post correlati Risposte Visualizzazioni Attività
Xpath problems...Help me write this xpath
views qweb xpath
Avatar
Avatar
1
ago 24
3253
external_layout_header's fixed space can not be changed in PDF
qweb report xpath
Avatar
Avatar
Avatar
2
feb 24
8321
Report text and header is overlaps when description is too long in QWeb report line.
qweb report wkhtmltopdf
Avatar
Avatar
1
feb 24
3995
How to add custom footer in invoice Qweb printouts of Odoo? Risolto
qweb report wkhtmltopdf odoo
Avatar
Avatar
Avatar
Avatar
Avatar
4
ott 24
54624
Odoo 11 Qweb Report: xpath tag "replace" not replacing?
qweb report xpath odoo11
Avatar
Avatar
1
feb 18
10405
Community
  • Tutorial
  • Documentazione
  • Forum
Open source
  • Scarica
  • Github
  • Runbot
  • Traduzioni
Servizi
  • Hosting Odoo.sh
  • Supporto
  • Aggiornamenti
  • Sviluppi personalizzati
  • Formazione
  • Trova un contabile
  • Trova un partner
  • Diventa nostro partner
Chi siamo
  • La nostra azienda
  • Branding
  • Contattaci
  • Lavora con noi
  • Eventi
  • Podcast
  • Blog
  • Clienti
  • Note legali • Privacy
  • Sicurezza
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo è un gestionale di applicazioni aziendali open source pensato per coprire tutte le esigenze della tua azienda: CRM, Vendite, E-commerce, Magazzino, Produzione, Fatturazione elettronica, Project Management e molto altro.

Il punto di forza di Odoo è quello di offrire un ecosistema unico di app facili da usare, intuitive e completamente integrate tra loro.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now