Odoo: come modificare un external layout solo per alcuni report

31 marzo 2024 di
Odoo: come modificare un external layout solo per alcuni report
Raffaele Del Gatto
| Ancora nessun commento

Odoo risulta essere estremamente flessib​ile quando si tratta di estendere i svariati report nativi del sistema. Una delle operazioni più classiche in fase di implementazione è proprio la personalizzazione delle varie stampe, che verranno adattate per riflettere lo stile desiderato dal cliente

Nella personalizzazione delle stampe un ruolo importante è costituito dai cosidetti external layout, che sono responsabili di renderizzare il footer e l'header della stampa. Viene da se che modifiche di un external layout avranno impatto su tutti i report che lo andranno a chiamare. Tuttavia, possono capitare situazioni in cui una modifica viene richiesta soltanto per uno specifico report o, specularmente, per tutti i report tranne uno o pochi altri. 

Una possibile soluzione potrebbe essere quella di creare un external layout totalmente nuovo ed ereditare ogni singolo report interessato per chiamarlo in sostituzione di quello standard. Se però le modifiche non sono tali da dover creare un nuovo report ci troveremmo di fronte ad un enorme spreco di codice. Vediamo quindi come estendere un external layout ed escludere dalla modifica un report specifico

Immaginiamo, ad esempio, di avere l'esigenza di modificare l'header dei nostri report, tranne per quello di acquisto, in modo che il logo della compagnia sia leggermente più grande rispetto alle dimensioni proposte.

<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<template id="new_external_layout" inherit_id="web.external_layout_standard">
<xpath expr="//img[@t-if='company.logo']" position="attributes">
<attribute name="style">max-height: 195px;</attribute>
</xpath>
</template>
</odoo>

Se vogliamo ora escludere il nostro report degli ordini di acquisto andiamo per prima cosa a identificare il report name di tale report (per chi non lo sapesse, basta andare in settings→ funzionalità tecniche→report, cercare il report in questione e prendere il valore indicato. Ovviamente il tutto deve essere fatto in modalità sviluppatore).

A questo punto possiamo utilizzare la proprietà xmlid direttamente nella nostra vista qweb per fare in modo che la modifica venga utilizzata per tutti i report tranne che per quello in questione. A livello di codice avremo:

<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<template id="new_external_layout" inherit_id="web.external_layout_standard">
<xpath expr="//img[@t-if='company.logo']" position="replace">
<t t-if="xmlid != 'purchase.report_purchaseorder'">
<img t-if="company.logo" t-att-src="image_data_uri(company.logo)" style="max-height: 195px;" alt="Logo"/>
</t>
<t t-else="">
<img t-if="company.logo" t-att-src="image_data_uri(company.logo)" style="max-height: 45px;" alt="Logo"/>
</t>
</xpath>
</template>
</odoo>
Odoo: come modificare un external layout solo per alcuni report
Raffaele Del Gatto 31 marzo 2024
Condividi articolo
Archivio
Accedi per lasciare un commento