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 risorsa print che chiamiamo scheda_cliente.py all’interno della cartella resources/tables/cliente/print, esattamente come abbiamo fatto nella 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 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 Stampe custom . Nel nostro caso, molto semplice, ci limitiamo nel main a invocare un altro metodo schedaCliente che si occuperà di definire Layout , Row e 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("<div style='font-size:20pt;padding:5px'><strong>Dati Anagrafici</strong></div>::HTML")
      dati_cliente = layout.row(height=20, lbl_height=4, lbl_class='smallCaption')
      layout.row(height=10).cell("<div style='font-size:20pt;padding:5px'><strong>Fatture Cliente</strong></div>::HTML")
      griglia_fatture = layout.row(height=150, lbl_height=4, lbl_class='smallCaption')
      layout.row(height=10).cell("<div style='font-size:20pt;padding:5px'><strong>Prodotti Cliente</strong></div>::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 Stampa righe 2: Vendite cliente .


Puoi provare la stampa direttamente su Sandbox, oppure scaricare i file di stampa qui di seguito.


Allegati: