.. _le_stampe/stampe_genropy/stampe_risorsa/esempi_stampa/stampa_custom: Stampa custom: Scheda cliente ============================= Supponiamo di voler stampare non una classica "griglia", ma una serie di griglie, all'interno della stessa stampa. In questo caso non potremo sfruttare il cliclo *MainLoop* di default della stampa, ma saremo costretti a replicare il processo manualmente per ciascuna griglia che intendiamo stampare. In quest'esempio vedremo come definire la risorsa di stampa relativa a una *Scheda cliente** contenente diverse informazioni: i **dati anagrafici del cliente, le fatture del cliente nell'anno, i 10 prodotti più acquistati**. La stampa verrà lanciata dalla tabella *Cliente* del progetto `Sandbox `_. In particolare, questo esempio ci permetterà di vedere come stampare **tre griglie differenti** con dati provenienti da tabelle differenti. La stampa verrà lanciata da un bottone presente sulla toolbar della Form del Cliente. Per fare tutto questo sarà necessario ridefinire integralmente il *main* della stampa. Definizione della print action ------------------------------ Per prima cosa andiamo a definire la :ref:`risorsa print` che chiamiamo *scheda_cliente.py* all'interno della cartella ``resources/tables/cliente/print``, esattamente come abbiamo fatto nella :ref:`Stampa con griglia 1: Fatturato per esercizio` . Non inseriamo alcun parametro, di conseguenza evitiamo di ridefinire il metodo ``table_script_parameters_pane``. Si noti che la particolarità di questa stampa è che prevediamo possa essere lanciata, oltre che nella modalità consueta con la *selezione dei record* (ottenendo in quel caso un unico file pdf con un foglio per ogni cliente), anche dalla Form del cliente, dall'apposito bottone in basso a destra ``Stampa scheda``. Definizione della risorsa html_res ---------------------------------- Passiamo a questo punto alla definizione della :ref:`risorsa html_res` che chiamiamo *stampa_scheda_cliente.py* all'interno della cartella ``resources/tables/cliente/html_res``. In questo caso non possiamo utilizzare il *MainLoop* di default della stampa, e ci troviamo quindi costretti a ridefinire in toto il *main*, come descritto nella sezione :ref:`Stampe custom` . Nel nostro caso, molto semplice, ci limitiamo nel *main* a invocare un altro metodo ``schedaCliente`` che si occuperà di definire :ref:`Layout` , :ref:`Row` e :ref:`Cell` e la loro modalità di riempimento:: class Main(TableScriptToHtml): maintable = 'fatt.cliente' virtual_columns = '$n_fatture,$tot_fatturato,$iscritto_newsletter' def main(self): self.schedaCliente() def schedaCliente(self): self.paperpage = self.getNewPage() layout = self.paperpage.layout( um='mm',top=5,left=4,right=4, bottom=3, border_width=1, font_family='Helvetica', font_size='9pt', lbl_height=4,lbl_class='caption', border_color='grey') layout.row(height=10).cell("
Dati Anagrafici
::HTML") dati_cliente = layout.row(height=20, lbl_height=4, lbl_class='smallCaption') layout.row(height=10).cell("
Fatture Cliente
::HTML") griglia_fatture = layout.row(height=150, lbl_height=4, lbl_class='smallCaption') layout.row(height=10).cell("
Prodotti Cliente
::HTML") griglia_prodotti = layout.row(height=74, lbl_height=4, lbl_class='smallCaption') self.datiCliente(dati_cliente) self.righeFatture(griglia_fatture) self.righeProdotti(griglia_prodotti) Nella classe *Main* specifichiamo innanzitutto le `virtual_columns `_ per permettere la lettura dei relativi dati, altrimenti non presenti di default nel record. Si noti poi che con ``self.paperpage = self.getNewPage()`` andiamo a creare la prima pagina, nella quale andiamo poi a inserire un primo *layout* e una serie di righe (titoli + griglie dati). Affidiamo poi ai metodi ``datiCliente``, ``righeFatture``, ``righeProdotti`` la creazione di altri *layout* all'interno di queste righe e il popolamento delle varie celle, seguendo la stessa logica che abbiamo utilizzato nell'esempio precedente :ref:`Stampa righe 2: Vendite cliente` . .. raw:: html
Puoi provare la stampa direttamente su `Sandbox `_, oppure scaricare i file di stampa qui di seguito. .. raw:: html
**Allegati:** - `scheda_cliente `_ - `scheda-cliente_berlucchi-sandionigi-alberto_09_42_59 `_ - `scheda-cliente_berlucchi-sandionigi-alberto `_ - `stampa_scheda_cliente `_