// cglib03.h #ifndef __CGLIB03_H #define __CGLIB03_H #ifndef __CG2103_H #include "cg2103.h" #endif #ifndef __TABUTIL_H #include #endif // Defines per TInteressi_IVA_table. Servono per comporre i nomi dei campi #define P_1_TRIMESTRE 0 #define P_2_TRIMESTRE 1 #define P_3_TRIMESTRE 2 #define P_4_TRIMESTRE 3 #define P_ANNUALE 4 #define I_PERIODICO 5 #define I_ANNUALE 6 #define I_ACCONTOIVA 7 #define I_INTEGRATIVO 8 #define I_CESSAZIONE 9 #define I_ART74 10 #define B_LIQ_DIFF 11 #define B_LIQ_NORM 12 class TInteressi_IVA_table : public TTable { public: int read(int anno, int mese); //int status() { return _ver->status();} real get(int what); TInteressi_IVA_table(); virtual ~TInteressi_IVA_table(); }; struct TDociva : public TObject { TString _descrdoc; real _totdociva; int _ndoc; TDociva(const char* _descrdociva, const real& _importo,const int _natdoc) :_descrdoc(_descrdociva),_totdociva(_importo),_ndoc(_natdoc) { } virtual ~TDociva() { } }; class TDociva_array : public TArray { public: bool add_riga(const char* _descrdociva,const real& _importo,const int _natdoc); TDociva& riga(int i) { return (TDociva&)(*this)[i]; } }; struct TRigaiva : public TObject { real _imponibile, _imposta; real _imponibilep, _impostap; TString4 _codiva; int _tipodet; int _tipocr, _tipoatt; bool _intra; const TString& descr_det() const; TRigaiva (const real& imponibile, const real& imposta, const real& imponibilep, const real& impostap, const char* codiva, int tipodet, int tipocr, bool intra, int tipoatt): _imponibile(imponibile),_imposta(imposta),_imponibilep(imponibilep),_impostap(impostap),_codiva(codiva),_tipodet(tipodet),_tipocr(tipocr),_tipoatt(tipoatt),_intra(intra) {} }; // TRigaiva_array // Tabella per il calcolo degli imponibili Iva class TRigaiva_array : public TArray { public: bool add_riga(const real& imponibile, const real& imposta, const real& imponibilep, const real& impostap, const char* codiva, int tipodet, int tipocr, bool intra, int tipoatt); bool add_riga(const TRectype& rmi); TRigaiva& riga(int i) { return (TRigaiva&)(*this)[i]; } const TRigaiva& riga(int i) const { return (const TRigaiva&)(*this)[i]; } }; struct TTipodoc : public TObject { TString4 _tipodoc; TString _descrdoc; real _totdoc; TTipodoc (const char* tipodoc, const char* descrdoc, const real& totdoc): _tipodoc(tipodoc),_descrdoc(descrdoc),_totdoc(totdoc) {} }; class TTipodoc_array : public TArray { public: bool add_riga(const char* tipodoc, const char* descrdoc, const real& totdoc); const TTipodoc& riga(int i) const { return (TTipodoc&)(*this)[i]; } }; struct TRiga : public TObject { real _imponibile, _imposta, _implordo; //totali del periodo real _imponibilep, _impostap, _implordop; //totali progressivi TString4 _codiva; TRiga (const real& imponibile, const real& imposta, const real& implordo, const real& imponibilep, const real& impostap, const real& implordop, const char* codiva): _imponibile(imponibile),_imposta(imposta),_implordo(implordo),_imponibilep(imponibilep),_impostap(impostap),_implordop(implordop),_codiva(codiva) {} }; class TRiga_array : public TArray { public: bool add_riga(const real& imponibile, const real& imposta, const real& implordo, const real& imponibilep, const real& impostap, const real& implordop, const char* codiva); const TRiga& riga(int i) const { return (const TRiga&)(*this)[i]; } TRiga& riga(int i) { return (TRiga&)(*this)[i]; } }; /////////////////////////////////////////////////////////// // Arrotondamenti IVA /////////////////////////////////////////////////////////// enum TRound_mode { rm_unknown, rm_round, rm_ceil, rm_millelire }; class TIva_round : public TObject { static TRound_mode _def_mode; static int _def_decimals; TRound_mode _mode; int _decimals; public: // Low level functions (rare usage) void set_default_mode(TRound_mode m, int d); void set_mode(TRound_mode m, int d); public: // High level functions (common usage) virtual bool ok() const { return _mode != rm_unknown; } // Call this before the first call to round! void set_default_iva_mode(int year, bool declaration = false, long firm = 0L); void round(real& n) const; TIva_round(); }; real indetraibile_al(const TString& codind, const TCausale& caus, int annodoc, int& tipodet); int analizza_IVA(const real& imptot, const real& ivatot, const real perc_ind, const bool corrispettivo, const bool iva_ind_al_costo, const TString& codiva, real& imp_det, real& iva_det, real& imp_ind, real& iva_ind); int get_tipodet_from_rmi(const TRectype& rmi, const TRectype& mv, real& percind); #endif