diff --git a/src/cg/cglib.h b/src/cg/cglib.h index c134cb12c..2f91baa76 100644 --- a/src/cg/cglib.h +++ b/src/cg/cglib.h @@ -84,6 +84,12 @@ class TProgind; #define PROVV_BIL "B" #define PROVV_CESP "C" +#define IVA_DA_VENTILARE "VE" +#define IVA_ESENTE "ES" +#define IVA_NON_IMPONIBILE "NI" +#define IVA_NON_SOGGETTA "NS" +#define REVERSE_CHARGE "RC" + // Defines per TInteressi_IVA_table. Servono per comporre i nomi dei campi #define P_1_TRIMESTRE 0 @@ -374,6 +380,7 @@ public: const TString & causale_reg_iva() const; const TString & tipo_doc() const; const TString & codice_registro() const { return _rec.get(CAU_REG); } + const TString & causale_770() const { return _rec.get(CAU_M770); } const TRegistro& reg() const { return cached_registro(codice_registro(), _year); } TipoIVA iva() const { return _iva; } int regime_speciale() const; @@ -419,23 +426,37 @@ protected: public: // TObject virtual bool ok() const { return !empty(); } - TCodiceIVA& operator =(const TCodiceIVA & iva) { copy(iva) ; return *this;} + TCodiceIVA& operator =(const TCodiceIVA & iva) { copy(iva); return *this; } TObject* dup() const { return new TCodiceIVA(*this); } - bool read(const char* codice); + bool read(const char* codice); const TString& codice() const { return get("CODTAB"); } - const TString& descrizione() const { return get("S0"); } + const TString& descrizione() const { return get("S0"); } const real percentuale() const { return get_real("R0"); } + const real moltiplicatore_percentuale() const { return get_real("R0") / CENTO; } const TString & aliquota() const { return get("R0"); } const TString& tipo() const { return get("S1"); } + const TString& IVA11_vendite() const { return get("S2"); } + const TString& IVA11_acquisti() const { return get("S9"); } + const bool iva_imponibile() const { return tipo().empty() || tipo() == REVERSE_CHARGE; } + const bool iva_da_ventilare() const { return tipo() == IVA_DA_VENTILARE; } + const bool iva_esente() const { return tipo() == IVA_ESENTE; } + const bool iva_non_imponibile() const { return tipo() == IVA_NON_IMPONIBILE; } + const bool iva_non_soggetta() const { return tipo() == IVA_NON_SOGGETTA; } const int tipo_IVA_agricola() const { return get_int("I4"); } const bool is_agricola() const { return tipo_IVA_agricola() != 0; } const TString& indetraibilita() const { return get("S4"); } // Codice indetraibilità alfanumerico (ex. 1, 3, 9) + const TString& iva_a_cui_ventilare() const { return get("S6"); } + const TString& tipo_comunicazione_attive() const { return get("S10"); } int tipo_indetraibilita() const; // Tipo indetraibilità: 1,3,9 - bool senza_imposta() { return percentuale() == ZERO;} + int tipo_agenzie_viaggio() const { return get_int("S5"); } + int tipo_plafond() const { return get_int("S3"); } + bool senza_imposta() const { return percentuale() == ZERO;} int allegato(char tipocf) const { return get_int(tipocf == 'F' ? "S8" : "S7"); } bool has_plafond() const { return get_int("S3") > 0; } bool sospeso() const { return get_bool("B2"); } + bool codice_rimborso_infrannuale() const { return get_bool("B3"); } + bool escluso_dal_rimborso() const { return get_bool("B4"); } bool escluso_esenti() const { return get_bool("B5"); } bool numeratore_pro_rata() const { return get_bool("B6"); } bool denominatore_pro_rata() const { return get_bool("B7"); } @@ -444,6 +465,7 @@ public: // TObject real imposta(const real& imponibile, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Calcola l'imposta sull'imponibile l'imposta e la ritorna real scorpora(real& imponibile, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Scorpora dall'imponibile l'imposta e la ritorna real lordo(const real& imponibile, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Calcola il lordo dell'imponibile l'imposta e la ritorna + real imponibile(const real& imposta, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Calcola l'imponibile dell'imposta e lo ritorna // bool reverse_charge() const; // bool reverse_charge_pubb() const; @@ -1017,6 +1039,7 @@ public: int cg_rows() const { return cg().rows(); } int iva_rows() const { return iva().rows(); } bool solo_IVA() const { return iva_rows() > 0 && cg_rows() == 0; } + bool is_IVA() const { return iva_rows() > 0; } virtual int readat(TRecnotype nrec, word lockop = _nolock); virtual int read(word op = _isequal, word lockop = _nolock); @@ -1544,8 +1567,10 @@ public: const TRectype & indsp(const int codindsp) const; char tipo() const { return get_char(CLI_TIPOCF); } - long codice() const { return get_long(CLI_CODCF); } + long codice() const { return get_long(CLI_CODCF); } + const TString & str_codice() const { return get(CLI_CODCF); } int alleg() const { return get_int(CLI_ALLEG); } + bool gruppo_IVA() const { return get(CLI_ALLEG) == "G"; } bool ok() const { return !empty(); } virtual int read(const TRectype& rec, word op = _isequal, word lockop = _nolock); diff --git a/src/cg/cglib01.cpp b/src/cg/cglib01.cpp index d471bb5fd..b194fffae 100755 --- a/src/cg/cglib01.cpp +++ b/src/cg/cglib01.cpp @@ -348,8 +348,8 @@ void TCausale::calcIVA() { TipoIVA i = nessuna_iva; // Tipo IVA di default bool c = false; // Corrispettivi di default - const TString& td = tipo_doc(); + if (td.full()) { const TRectype& tpd = cache().get("%TPD", td); @@ -362,7 +362,7 @@ void TCausale::calcIVA() i = ri; if (i != ri) { - error_box(FR("Tipo documento '%s' incompatibile con tipo registro"), (const char*)td); + error_box(FR("Tipo documento '%s' incompatibile con tipo registro (registo %s)"), (const char*) td, (const char*) codice_registro()); i = iva_errata; } c = tpd.get_bool("B0"); // B0 flag corrispettivi @@ -1182,6 +1182,12 @@ real TCodiceIVA::imposta(const real& imponibile, int ndec, const char* codval) c return iva; } +real TCodiceIVA::imponibile(const real& imposta, int ndec, const char* codval) const +{ + real imp = imposta * CENTO / percentuale() ; + round(imp, ndec, codval); + return imp; +} real TCodiceIVA::scorpora(real& lordo, int ndec, const char* codval) const { round(lordo, ndec, codval); // Arrotondo importo lordo