I counter¶
Genropy offre un sistema predefinito di gestione contatori per la tabella, definibile con il metodo counter_nomecolonna
, dove nomecolonna è la colonna per la quale vogliamo che Genropy generi automaticamente il progressivo secondo le regole stabilite:
def counter_protocollo(self,record=None):
#F14/000001
return dict(format='$K$YY/$NNNNNN', code='F', period='YY',
date_field='data', showOnLoad=True, recycle=True)
Il metodo ritorna un dizionario con un formato secondo quanto definito nel parametro format
: in questo caso un codice (“F”) seguito dall’anno e da un numero progressivo di 6 cifre. Si noti che è prevista di default la presenza di:
un
code
, serie di caratteri che verranno sostituiti nella K del formatun
date_field
, la colonna della tabella che individua una dataun
period
, la codificazione del date_field per anno, mese, data completa, ecc
È possibile poi utilizzare una serie di altri attributi. Ad esempio, showOnLoad=True
permetterà di visualizzare il counter già in fase di inserimento del record e non solo dopo il salvataggio, mentre recycle=True
permetterà di rigenerare automaticamente i contatori riempiendo i «buchi» in caso di eliminazione dei record (se non presente, i contatori andranno riallineati manualmente nel’apposita voce di menu di sistema).
Suggerimento
È buona norma assegnare alla colonna che conterrà il contatore il parametro unique=True
, garantendosi automaticamente in questo modo l’unicità del valore in caso di duplicazione .
Vediamo un altro esempio con alcuni attributi accessori:
def counter_protocollo(self, record=None):
pars = dict(format='$K$YY.$NNNNN', period='YY', code=record['categoria'],
date_field='data', recycle=False, date_tolerant=True,
message_dateError="Impossibile creare riga in data corrente. Ultima riga in data %(last_used)s",
message_failed='La riga ha ricevuto un protocollo differente da quello in precedenza allocato: %(sequence)s')
return pars
Suggerimento
Oltre alla definizione del proprio metodo «counter», è necessario comunicare alla tabella che questa farà uso di un contatore, indicando nei sysFields
self.sysFields(tbl, counter=True)
Autore della sezione: Davide Paci