#ifndef __LILIB01_H #define __LILIB01_H #ifndef __DATE_H #include #endif #ifndef __RELATION_H #include #endif #ifndef __VELIB04_H #include "../ve/velib04.h" #endif #ifndef __REPUTILS_H #include #endif #include #include enum plafStruct { _planno, _plnumprot, _plimporto, _plchiusura, _plNC }; class TLi_manager : TObject { TToken_string tipi; TToken_string stati; bool validPlafond; bool soluzione; bool elabPR; const char tipocf; const long codcli; TDate iniDicInt; TDate finDicInt; real plafond; const TString codivaDef; const TString codivaAlt; // Elenco di plafond con eventuale // Chiave ANNO|NUMERO(6) std::map plafondi; std::map modifiche; // Progressivo, TToken_string(chiave,stato); void elabTipiStati(); // Preparo due token string con tipi[0] -> stati[0], ... public: // Getters // Ritorno il plafond const real getPlafond() { return plafond; } // Ritorno se il plafond è valido bool hasValidPlafond() { return validPlafond; } // Ritorna se è una dichiarazione di tipo soluzione bool isSoluzione() { return soluzione; } // Funzione che unisce consPlaf e incrPlaf const TToken_string& getUse(TDocumento& d, const bool write = false); // "Consuma" il plafond const TToken_string& consPlaf(real& plafUsed, const bool write = false); // Da una nota credito passata incremento il plafond const TToken_string& incrPlaf(TDocumento& d, real impNC = ZERO, const bool write = false); // Storna un documento che riceve const TToken_string& stornaDoc(const TDocumento& d, real impDC = ZERO, const bool write = false); // Storna i documenti dopo a quello che riceve //void stornaDocs(const TDocumento& d, const bool write = false); // Ricalcola i documenti dopo quello che riceve //bool recalcAfter(const TDocumento& d, TLog_report& lerr); // Functions // Vado a estrapolare il plafond void elabPlafond(); // Testo se con i documenti passati supero il plafond bool testPlafond(TLista_documenti& dout, TLog_report& lerr); // Controllo se il codice iva è uguale a quello impostato per il calcolo del plafond bool checkIva(TString cod) { return cod == codivaDef || cod == codivaAlt; } // Controllo se il plafond che la NC passata rilascia non è già stato utilizzato bool checkUtilizzo(TDocumento& d, real impNC = ZERO); // Calcolo il rimanente del plafond const real getPlaRes(); // Calcolo il rimanente del plafond su tipi e stati documento passati const real getPlaRes(TToken_string tipi, TToken_string stati); // Funzione che effettivamente effettua il calcolodalla data della dichiarazione alla data passata const real elabPlaRes(TToken_string t = "", TToken_string s = "", TDate ad = 0L); // Ritorna la quantità di plafond utilizzato dalla data della dichiarazione alla data passata const real elabUtil(TToken_string tipi, TToken_string stati, TDate ad = 0L); // Modifica una lettera e salva la modifica in "modifiche" void changeStato(const TString& key, const bool stato); // Controlla se ci sono delle modifiche da salvare nei plafonds bool hasModifiche() { return !modifiche.empty(); } // Annullo le modifiche void revertModifiche(); // Vuoto le modifiche void clearModifiche() { modifiche.clear(); } // Costructors/Destructors TLi_manager(const char t, const long c, TDate iniDic, TDate finDic); TLi_manager(const char t, const long c, TDate finDic); // Sets iniDicInt as 01/01/finDic.year() virtual ~TLi_manager() {} }; static void createTipiStati(TToken_string& tipi, TToken_string& stati); bool generaLiStorico(TDate dataIni); bool popolaPlafond(TLista_documenti& din, const TDate& data_elab); #endif