[genropy] Re: Protocollo e tipo di documento

  • From: Giovanni Porcari <giovanni.porcari@xxxxxxxxx>
  • To: genropy <genropy@xxxxxxxxxxxxx>
  • Date: Wed, 19 Apr 2017 12:33:01 +0200


Il giorno 19 apr 2017, alle ore 12:18, Ivan B. <ivanbag@xxxxxxxxxx> ha 
scritto:

Buongiorno a tutti,
come al solito ho fatto alcune prove, ma il risultato è stato più un 
pasticcio che altro...

Per una tabella documenti che conterrà lettere, raccomandate, ecc devo dare 
all'utente la possibilità di crearsi dei protocolli personalizzati in base al 
contenuto di una tabella di lookup "tipo_documento".
All'inserimento di un documento, l'utente, selezionerà il tipo ed in base 
alla scelta verrà suggerito il primo numero di protocollo libero.

In pratica, nel campo "protocollo", si dovranno trovare cose di questo tipo:

LT2017/1
LT2017/2
RR2017/1
LT2017/3
RR2017/2
...

Devo quindi associare più contatori allo stesso campo protocollo ed, in base 
alla scelta fatta dall'utente, modificarlo di conseguenza. Ovviamente se 
l'utente deve registrare qualche altro tipo di documento (per esempio i fax) 
deve poterlo inserire nella tabella di lookup e poi "agganciarci" record. 
Deve anche poterlo modificare in caso di errore. Si accorge di aver sbagliato 
a mettere RR al posto di LT deve poterlo cambiare con il primo numero libero 
di LT. Inoltre deve poter registrare documenti con date non in ordine 
cronologico, quindi il protocollo 2 potrebbe essere stato ricevuto prima del 
protocollo 1. Conta l'ordine di registrazione.

Ho pasticciato un po' con counter_ ma ho fatto solo danni. Avete suggerimenti?

Grazie mille, buona giornata
Ivan

p.s. in realtà mi hanno chiesto tante altre nuove funzioni, è la volta buona 
che studio meglio genropy e che quasi quasi faccio un refactoring ^^


La soluzione standard è proprio quella di usare la funzione con counter_ come 
ad esempio nelle fatture di sandbox:


    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)


Tutto quello che tu chiedi dovrebbe essere gestito tranquillamente dal sistema 
dei contatori.

Purtroppo se non so come hai provato ad usarlo non posso darti suggerimenti 
validi :).

In linea di massima il formato che propni non è ottimale perchè non 
supporterebbe l'ordinamento alfabetico.

Ti suggerirei quindi:
LT2017/000001
LT2017/000002
RR2017/000001

e via dicendo.

Addirittura, dato che nel 2100 non ci sarà certo in funzione il sistema, 
potresti accorciare con:
LT17/000001
LT17/000002
RR17/000001

Se volessi configurare così dovresti fare:

    def counter_protocollo(self,record=None):
        #F14/000001
        return 
dict(format='$K$YY/$NNNNNN',code=record['tipo_tocumento'],period='YY',
                    date_field='data',showOnLoad=True,recycle=True)

Questo dice al sistema che il prefisso lo trova dentro al record al campo 
'tipo_documento' mentre la data
cui riferirsi per calcolare l'anno la trova nel record al campo 'data'.

showOnLoad lo devi usare se vuoi far sapere a video al tuo utente che 
protocollo verrà assegnato (o almeno quello che
potrebbe essere assegnato se non ci fosse un altro user che lo 'ruba' prima', 
nel qual caso gli verrà assegnato il protocollo seguente)
recycle=True invece dice che in caso di cancellazioni il numero perso può 
essere riassegnato.

Di norma la riassegnazione prevede che la data sia valida ma è una condizione, 
quella della cronologicità, che può essere evitata.


Vedi se con quello che ti ho detto ti può andare. Semmai fammi sapere se ti 
servono altri dettagli.


Ciao

G






Other related posts: