campo-sirio/src/li/lilib01.h
Mattia Tollari e1ae493ddf Patch level : 12.0 638
Files correlati     : ve,li
Commento            :
- Corretto ordinamento lettere di intento nella mappa
- Creata funzione make_key
- Cambiato cast in ve0100
2018-10-23 10:21:33 +02:00

109 lines
3.7 KiB
C++

#ifndef __LILIB01_H
#define __LILIB01_H
#ifndef __DATE_H
#include <date.h>
#endif
#ifndef __RELATION_H
#include <relation.h>
#endif
#ifndef __VELIB04_H
#include "../ve/velib04.h"
#endif
#ifndef __REPUTILS_H
#include <reputils.h>
#endif
#include <map>
#include <unordered_map>
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<TString, real> plafondi;
std::map<int, TString> 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