Questo sito utilizza cookie per le proprie funzionalità e per inviarti pubblicità e servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie.

Accedendo al link http://www.odoo-italia.org/index.php/home/cookie-policy puoi leggere in dettaglio le modalità di trattamento dei cookie da parte dell'Associazione Odoo Italia.

Benvenuto, Ospite
Nome utente: Password: Ricordami
Ricordati di inserire la versioni di Odoo per cui poni la domanda

ARGOMENTO: Odoo9 Generare un template

Odoo9 Generare un template 2 Anni 8 Mesi fa #24281

  • giancarlo64
  • Avatar di giancarlo64
  • Offline
  • Senior Boarder
  • Messaggi: 68
  • Karma: 0
Ciao a tutti,
purtroppo in questi mesi non sono riuscito ad avanzare nelal crazione di un nuovo report. Da qualche giorno ho fatto qualche passo avanti. Elenco un attimo quello che ho fatto:

Da shell di linux :
Nella directory /usr/lib/python2.7/dist-package/openerp ho dato il comando
python /usr/bin/odoo.py scaffold <MIO_MODULO> addons che mi ha creato il nuovo modulo

Poi mi sono basato su questo tutorial per ereditare il report
www.odoo.yenthevg.com/inheriting-and-modifying-qweb-reports/

Dato che anche io volevo ereditare da "sale" ho copiato il suo esempio di template.xml

<openerp>
<data>
<!-- Inherit quotation report (from module sale) -->
<template id="report_quotation_inherit_demo" inherit_id="sale.report_saleorder_document">
<!-- Finds the first table with as class table table-condensed and gives the ability to modify it
This will replace everything withing tr (including tr)-->
<xpath expr="//table[@class='table table-condensed']//thead//tr" position="replace">
<tr style="background-color:lightgray;">
<th>Description</th>
<th class="text-right">Price</th>
</tr>
</xpath>
<!-- This will search for the 4'th td element (in the tbody with class sale_tbody) and will remove it. -->
<!-- Important: if you would start with element 2, then do 3 and then do 4 you will see strange behaviour.
The first statement would remove element 2 making all other elements move in numbering too. -->
<xpath expr="//tbody[@class='sale_tbody']//tr//td[4]" position="replace">
</xpath>
<xpath expr="//tbody[@class='sale_tbody']//tr//td[3]" position="replace">
</xpath>
<xpath expr="//tbody[@class='sale_tbody']//tr//td[2]" position="replace">
</xpath>
</template>
</data>
</openerp>

In seguito da interfaccia WEB ho aggiornato i moduli (Apps -> update) e abilitando nel filtro anche gli "extra" ho trovato il mio nuovo modulo.
L'ho installato senza problemi ma se entro nel modulo e visualizzo le funzione installate mi dice:

Menu Creati
- Questo modulo non crea menu.

Report Definiti
- Questo modulo non crea report.

Difatti nel menu configuarazioni -> Reports -> Reports non vedo nessun nuovo report e anche quando vado in Vendite -> Preventivi e voglio stampare un preventivo non ho differenti tipi di report di stampa.

In pratica, come già detto, vorrei creare dei report personalizzati del modulo gestione vendite (sale)

Qualcuno mi può dare un aiuto?

Grazie
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Odoo9 Generare un template 2 Anni 8 Mesi fa #24282

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
Vuoi modificare la stampa del report esistente (cambiare il layout) oppure creare un nuovo report alternativo?

Quello che stai facendo al momento è modificare il report esistente per cambiarne l'aspetto grafico.

Se vuoi creare un report alternativo devi procedere diversamente.
@KTec
www.ktec.it
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Odoo9 Generare un template 2 Anni 8 Mesi fa #24284

  • giancarlo64
  • Avatar di giancarlo64
  • Offline
  • Senior Boarder
  • Messaggi: 68
  • Karma: 0
Ciao gigidn
hai ragione. I vorrei solo cambiare le formattazioni dei report.
Ho trovato un totorial che spiega bene come fare:

www.askmpa.com/creating-multiple-invoice-templates-in-odoo-v8/

L'ho seguito e sono riuscito a creare un nuovo template che vedo nel menu a tendina quando voglio stampare l'offerta.
Come dice il tutorial:
ho creato un nuovo report partendo dal report Preventivo / Ordine che ho chiamato Preventivo / Ordine _miaditta
ho creato le due nuove Qweb view. Adesso queste due nuove Qweb view le vedo però nel report Preventivo / Ordine e non nel report Preventivo / Ordine _miaditta. In Preventivo / Ordine _miaditta vedo solo "report_saleorder_miaditta" È corretto?
Se modifico l'architettura delle due nuove Qweb view poi se faccio un upgrade del modulo originale non perdo le modifiche?

Grazie per l'aiuto
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Odoo9 Generare un template 2 Anni 8 Mesi fa #24285

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
Cerchiam di far chiarezza ......

Se vuoi creare un nuovo report in aggiunta a quello esistente, devi procedere definendo sia il report che le viste qweb collegate. Questo nuovo report sarà accessibile tramite menu' stampa dell'oggetto collegato, sale.order nel tuo caso.

Se vuoi estendere un report esistente modificando alcune parti (come nel tuo esempio messo qualche post sopra) devi ereditare il report e poi procedere alla sua modifica mediante xpath (buono solo per pochissimi cambiamenti o per aggiungere pezzi extra senza variare la struttura generale del report). Le estensioni non li vedi nelle viste report collegate ma le trovi tra le viste se le cerchi per nome.

Se vuoi completamente cambiare la struttura del report allora devi sovrascrivere il report originale con uno tuo ... ti avevo gia' messo il link ma lo ripeto direttamente all'xml che cambia sale.order (anche se fai attenzione è per la 8 e non la 9)

github.com/ktecsrl/odoo_examples/blob/ma...saleorder-report.xml

Come puoi vedere la codice il report sovrascrive quello originale fornito da odoo. Il report è inserito in un modulo che ha come dipendenza sale quindi verrà caricato dopo l'inizializzazione del modulo sale con il risultato che anche reinizializzando il db la copia originale del report ripristinata verrà sovrascritta ancora una volta quando il tuo modulo si inizializza.

Riassumendo:

a) vuoi creare un report aggiuntivo ... crei un nuovo report
b) vuoi cambiare piccole parti del report o aggiungere nuovi pezzi ... estendi
c) vuoi cambiare completamente la struttura di un report esistente .... sovrascrivi.

Compreso questo struttura il tuo modulo di conseguenza perchè ho come l'impressione che stai mischiando un po' di cose.
@KTec
www.ktec.it
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Odoo9 Generare un template 2 Anni 8 Mesi fa #24286

  • giancarlo64
  • Avatar di giancarlo64
  • Offline
  • Senior Boarder
  • Messaggi: 68
  • Karma: 0
ciao gigidn,
si effettivamente sto facendo un po di confusione. Penso che la soluzione b) per me sia la migliore. Avevo già modificato a suo tempo i report originali ed avevo ottenuto dei risultati soddisfacenti ma poi mi hanno detto di non modificarli direttamente perché poi dopo un upgrade perdo le modifiche.
Questo potrebbe essere un buon tutorial?

www.odoo.yenthevg.com/creating-custom-reports-odoo-8/


Grazie
Ultima modifica: 2 Anni 8 Mesi fa da giancarlo64.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Odoo9 Generare un template 2 Anni 8 Mesi fa #24287

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
Sa soluzione (b) è quella tecnicamente più complicata da realizzare e da manutenere ... quando estendi un report le tue modifiche devono essere per forza compatibili con il vecchio.

Torno a ripeterti di guardare il mio esempio

github.com/ktecsrl/odoo_examples/tree/master/ktec-reports

è abbastanza autoespicativo ma scrivo due righe anche per altri che potrebbero essere interessati.

La struttura è gia quella base di un modulo odoo ... volendo la si puo' usare come seed

Il file __openerp__.py contiene l'elenco di tutti gli xml che vanno a modificare i report

github.com/ktecsrl/odoo_examples/blob/ma...ports/__openerp__.py, meglio creare un file per ogni report che si vorra modificare, nel tuo caso visto che vuoi intervenire solo su sale.report potrebbe essere qualcosa del tipo:
{
    'name': 'KTec Custom Reports',
    'version': '1.0',
    'category': 'general',
    'description': """
KTec Custom reports
===================
This module add special reports for meet the request of KTec
Reports
-------
    * Custom header and footer
    * Custom report for invoice
    * Custom report for sale order
""",
    'author': 'KTec S.r.l.',
    'website': 'http://www.ktec.it',
    'license': 'AGPL-3',
   #se personalizzo solo gli ordini posso far dipendere esclusivamente da 'sale'
    "depends": ['account','sale'],
    "data": ['reports/header-footer.xml',
             'reports/saleorder-report.xml'
            ],
    "qweb": [],
    "demo": [],
    "test": [],
    "active": False,
    'installable': True
}

Il primo file modifica header e footer il secondo invece la struttura interna dell'ordine .... vediamo com'e' composto uno di questi file:

github.com/ktecsrl/odoo_examples/blob/ma...ts/header-footer.xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <template id="report.external_layout_header">
            <div class="header">
                  !!! qui ci va il tuo codice html con css che se non vuoi modificare son quelli base di bootstrap (quindi regole per griglie ed altro) !!!!
            </div>
        </template>
    </data>
</openerp>

Da codice sopra potrai vedere una struttura di base, il tag
<template id="report.external_layout_header">
identifica il template che andremo a sovrascrivere, il suo corpo ne definisce la struttura.

Ora esaminiamo un attimo il file ....

github.com/ktecsrl/odoo_examples/blob/ma...saleorder-report.xml

fai attenzione al nuovo tag rispetto al precedente:
<t t-call="report.external_layout"></t>

Questo richiamo un altro template, nel nostro caso quello di cui al file precedente e poi aggiunge tutto quello che ha nel corpo.

div speciali "header" e "footer" vanno utilizzati per istruire wkhtml2pdf su cosa renderizzare in queste posizioni, se non vuoi usare un layout esterno come nel mio caso puoi inserire i vari elementi:
<div class="header"> !!! TUO CONTENUTO !!! </div>
<div class="page">  !!! TUO CONTENUTO !!! </div>
<div class="footer"> !!! TUO CONTENUTO !!! </div>

E per finire la chicca ...
<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <template id="sale.report_saleorder_document">
                <div class="header"> !!! TUO CONTENUTO !!! </div>
                <div class="page">  !!! TUO CONTENUTO !!! </div>
               <div class="footer"> !!! TUO CONTENUTO !!! </div>
        </template>
    </data>
</openerp>

Se scrivi un modulo con un solo file xml ed il contenuto di cui sopra avrai un ordini bello e vuoto con la scritta !!! TUO CONTENUTO !!! che potrai anche editare da web e poi riportare le modifiche nel file che diventerà definitivo.

Su come usare la sintassi qweb ti rimando a:

www.odoo.com/documentation/9.0/reference/qweb.html

Buon divertimento.
@KTec
www.ktec.it
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Ringraziano per il messaggio: banane
Tempo creazione pagina: 0.158 secondi

Odoo Italia Associazione - C.F: 94200470485 - Sede: Viale dei Cadorna, 83 - Firenze - Italy

Protected by R Antispam