Open Dasc3er opened 4 years ago
Il sistema dovrebbe essere anche in grado di prevedere una gestione più complessa dei contenuti, quale quella prevista per la fatturazione di contratti e preventivi per le future versioni #788.
Riferimento ulteriore con dettagli: #381
Comportamento richiesto
Molto spesso vengono richieste delle nuove relazioni di importazione documenti in altri documenti. Esempio: importare attività in ordini, ddt in attività, preventivi in ddt, ... (#742, #582)
Potrebbe essere utile sviluppare una generalizzazione del sistema attuale: dato un elenco di classi standard, il sistema dovrebbe visualizzare in automatico i record relativi per l'anagrafica corrente che possono essere evasi o utilizzati per creare nuovi documenti. Questo dovrebbe inoltre essere personalizzabile dall'utente a livello di interfaccia grafica, in modo da non riempire le pagine di pulsanti poco utili. Per generalizzare gli stati propongo l'introduzione di nuovi flag is_evadibilie e is_evaso, che andrebbero a sostituire i il relativo funzionamento di is_fatturabile e is_completo per l'evasione documenti. is_completo deve essere utilizzato per gestire il completamento del documento, che diviene quindi non modificabile.
Un primo problema in questo contesto è la gestione degli interventi, che presenta un sistema non standard di importazione a causa di sessioni di lavoro, viaggio e diritto di chiamata. Un interessante applicazione in questo senso può essere: https://stackoverflow.com/questions/50585390/laravel-variable-model-polymorphic, che permette di separare la gestione delle righe dalle classi standard Row/Article/... e lascerebbe una maggiore flessibilità anche per la gestione delle sessioni.
E' inoltre necessario prevedere una generalizzazione per l'aggiunta di un collegamento tra documenti, come avviene ora tra interventi e contratti/preventivi: in questo caso l'evasione del contratto/preventivo dovrebbe automaticamente evadere l'intervento, semplicemente modificandone lo stato e non lavorando sulle quantità. Questo problema dei documenti collegati ma non tramite evasione si potrebbe risolvere con un metodo generale getRelatedDocuments() che restituisce i documenti che devono essere processati insieme al corrente. In questo caso, se ad esempio un contratto viene considerato come semplice contenitore per diversi interventi, il metodo restituisce solo gli interventi e pertanto il contratto viene completamente ignorato. In questo sistema resta da definire come procedere con i riferimenti, perché tutti i documenti vengono importati separatamente e pertanto si perderebbe il riferimento al "contenitore".