diff --git a/src/cg/cglib.h b/src/cg/cglib.h index c7a89d368..38c7f5f3f 100644 --- a/src/cg/cglib.h +++ b/src/cg/cglib.h @@ -447,6 +447,7 @@ public: // TObject int regime_speciale() const { return get_int("I5");} const TString& natura() const { return get("S12"); } + const TString& tipo_intra() const { return get("S13"); } TCodiceIVA(const char* codice = nullptr); TCodiceIVA(const TRectype & rec) : TRectype(rec) {} @@ -940,8 +941,8 @@ public: virtual const TString& query_text() const; virtual unsigned int columns() const { return _info.items(); } virtual const TRecordset_column_info& column_info(unsigned int column) const { return (const TRecordset_column_info&)_info[column]; } - // const TString& col2name(unsigned int column) const; virtual const TVariant& get(unsigned int column) const; + const TVariant& get(const char * name) const; void set_from(const TDate& from) { set_var("#FROMDATE", from, true); ; } void set_to(const TDate& to) { set_var("#TODATE", to, true); } @@ -960,6 +961,8 @@ public: bool set_annual(bool on) { return _annuale = on; } bool annuale() const { return _annuale; } virtual bool is_competenza() const { return false; } + virtual int is_intra() const { return false; } + virtual const char * remap_IVA(const char * codIVA, const TISAM_recordset & rmov) const { return codIVA; } TRiepilogoIVA_recordset(); virtual ~TRiepilogoIVA_recordset() { } diff --git a/src/cg/cglib05.cpp b/src/cg/cglib05.cpp index 43788fca9..2788b61d1 100644 --- a/src/cg/cglib05.cpp +++ b/src/cg/cglib05.cpp @@ -72,7 +72,7 @@ void TRiepilogoIVA_recordset::requery() TAssoc_array work_array; TISAM_recordset recset(query_text()); - recset.set_var("#FROMDATE", from(), true); + recset.set_var("#FROMDATE", from(), true); recset.set_var("#TODATE", to(), true); recset.set_var("#ANNO", (long)anno(), true); if (codatt().full()) @@ -81,79 +81,84 @@ void TRiepilogoIVA_recordset::requery() recset.set_var("#AMESE", (long)a_mese(), true); for (bool ok = recset.move_first(); ok; ok = recset.move_next()) { - TString cod = recset.get(RMI_CODIVA).as_string(); - TRiepilogoIVA_record * rec = (TRiepilogoIVA_record *)work_array.objptr(cod); - long gruppo = recset.get(RMI_GRUPPO).as_int(); - long conto = recset.get(RMI_CONTO).as_int(); - long sottoconto = recset.get(RMI_SOTTOCONTO).as_int(); - int indetr = recset.get(RMI_TIPODET).as_int(); + TString cod = remap_IVA(recset.get(RMI_CODIVA).as_string(), recset); - TRegistro reg(recset.get(FIELD_NAME(LF_MOV, MOV_REG)).as_string()); - TipoIVA t = reg.iva(); - TDate data = recset.get(FIELD_NAME(LF_MOV, MOV_DATAREG)).as_date(); - const int meseliq = recset.get(FIELD_NAME(LF_MOV, MOV_MESELIQ)).as_int(); - const TDate datadoc = recset.get(FIELD_NAME(LF_MOV, MOV_DATADOC)).as_date(); - const TipoIVA tipo = reg.iva(); // 1=Vendite; 2=Acquisti - const bool fatt_rit_2018 = recset.get(FIELD_NAME(LF_MOV, MOV_RITFATT)).as_bool() && (data.year() >= 2018); - const int year_diff = data.year() - datadoc.year(); - const bool fattritind = ((tipo == iva_acquisti) && fatt_rit_2018) && ((year_diff > 2) || ((year_diff >= 1) && data.month() >= 5)); - const bool fattrit = ((tipo == iva_acquisti) && !fattritind && fatt_rit_2018) && (year_diff >= 1); + if (cod.full()) + { + TRiepilogoIVA_record * rec = (TRiepilogoIVA_record *)work_array.objptr(cod); + + long gruppo = recset.get(RMI_GRUPPO).as_int(); + long conto = recset.get(RMI_CONTO).as_int(); + long sottoconto = recset.get(RMI_SOTTOCONTO).as_int(); + int indetr = recset.get(RMI_TIPODET).as_int(); - if (is_competenza()) - { - if (meseliq != 0) - { - if (meseliq > data.month()) - data.addyear(-1); - data.set_month(meseliq); - data.set_end_month(); - } - } - if (fattrit) - { - data.addyear(-1); - data.set_month(12); - data.set_end_month(); - } - if (data.year() != anno() || (data.year() == anno() && (data.month() < da_mese() || data.month() > a_mese()))) - continue; - if (rec == nullptr) - work_array.add(cod, rec = new TRiepilogoIVA_record(cod)); - if (t == iva_acquisti) - { - if (indetr == 0) - { - real & r = rec->impacq(); - r += recset.get(RMI_IMPONIBILE).as_real(); - real & r1 = rec->ivaacq(); - r1 += recset.get(RMI_IMPOSTA).as_real(); - } - else - { - real & r = rec->impacqind(); - r += recset.get(RMI_IMPONIBILE).as_real(); - real & r1 = rec->ivaacqind(); - r1 += recset.get(RMI_IMPOSTA).as_real(); - } - } - else - if (t == iva_vendite) - { - if (reg.corrispettivi()) - { - real & r = rec->impcorr(); - r += recset.get(RMI_IMPONIBILE).as_real(); - real & r1 = rec->ivacorr(); - r1 += recset.get(RMI_IMPOSTA).as_real(); - } - else - { - real & r = rec->impven(); - r += recset.get(RMI_IMPONIBILE).as_real(); - real & r1 = rec->ivaven(); - r1 += recset.get(RMI_IMPOSTA).as_real(); - } - } + TRegistro reg(recset.get(FIELD_NAME(LF_MOV, MOV_REG)).as_string()); + TipoIVA t = reg.iva(); + TDate data = recset.get(FIELD_NAME(LF_MOV, MOV_DATAREG)).as_date(); + const int meseliq = recset.get(FIELD_NAME(LF_MOV, MOV_MESELIQ)).as_int(); + const TDate datadoc = recset.get(FIELD_NAME(LF_MOV, MOV_DATADOC)).as_date(); + const TipoIVA tipo = reg.iva(); // 1=Vendite; 2=Acquisti + const bool fatt_rit_2018 = recset.get(FIELD_NAME(LF_MOV, MOV_RITFATT)).as_bool() && (data.year() >= 2018); + const int year_diff = data.year() - datadoc.year(); + const bool fattritind = ((tipo == iva_acquisti) && fatt_rit_2018) && ((year_diff > 2) || ((year_diff >= 1) && data.month() >= 5)); + const bool fattrit = ((tipo == iva_acquisti) && !fattritind && fatt_rit_2018) && (year_diff >= 1); + + if (is_competenza()) + { + if (meseliq != 0) + { + if (meseliq > data.month()) + data.addyear(-1); + data.set_month(meseliq); + data.set_end_month(); + } + } + if (fattrit) + { + data.addyear(-1); + data.set_month(12); + data.set_end_month(); + } + if (data.year() != anno() || (data.year() == anno() && (data.month() < da_mese() || data.month() > a_mese()))) + continue; + if (rec == nullptr) + work_array.add(cod, rec = new TRiepilogoIVA_record(cod)); + if (t == iva_acquisti) + { + if (indetr == 0) + { + real & r = rec->impacq(); + r += recset.get(RMI_IMPONIBILE).as_real(); + real & r1 = rec->ivaacq(); + r1 += recset.get(RMI_IMPOSTA).as_real(); + } + else + { + real & r = rec->impacqind(); + r += recset.get(RMI_IMPONIBILE).as_real(); + real & r1 = rec->ivaacqind(); + r1 += recset.get(RMI_IMPOSTA).as_real(); + } + } + else + if (t == iva_vendite) + { + if (reg.corrispettivi()) + { + real & r = rec->impcorr(); + r += recset.get(RMI_IMPONIBILE).as_real(); + real & r1 = rec->ivacorr(); + r1 += recset.get(RMI_IMPOSTA).as_real(); + } + else + { + real & r = rec->impven(); + r += recset.get(RMI_IMPONIBILE).as_real(); + real & r1 = rec->ivaven(); + r1 += recset.get(RMI_IMPOSTA).as_real(); + } + } + } } TString_array keys; @@ -187,9 +192,11 @@ const TString& TRiepilogoIVA_recordset::query_text() const { TString & query = get_tmp_string(); -// query << "USE " << LF_RMOVIVA << " KEY 1 SELECT BETWEEN(" << FIELD_NAME(LF_MOV, MOV_DATAREG) << ";" << '"' << "FROMDATE" << '"' << ";" << '"' << "TODATE" << '"' << ")"; query << "USE " << LF_RMOVIVA << " KEY 1 SELECT BETWEEN(" << FIELD_NAME(LF_MOV, MOV_DATAREG) << "; #FROMDATE; #TODATE)"; - if (codatt().full()) + if (is_intra()) + query << "&&(" << FIELD_NAME(LF_CAUSALI, CAU_INTRACOM) << "==\"X\")&&(" + << FIELD_NAME(REG, "I0") << "=\"2\")"; + if (codatt().full()) { // query << "&&(" << FIELD_NAME(REG, "S8") << "==\"" << _codatt << "\")"; query << "&&(" << FIELD_NAME(REG, "S8") << "=#CODATT)"; @@ -198,7 +205,13 @@ const TString& TRiepilogoIVA_recordset::query_text() const } else query << "\nJOIN " << LF_MOV << " INTO " << MOV_NUMREG << "==" << RMI_NUMREG; -// query << "USE " << LF_RMOVIVA << " KEY 1 SELECT BETWEEN(" << LF_MOV << "." << MOV_DATAREG << ";FROMDATE;TODATE) \nJOIN " << LF_MOV << " INTO NUMREG==NUMREG"; + if (is_intra()) + { + query << "\nJOIN " << LF_CAUSALI << " TO " << LF_MOV << " INTO " << CAU_CODCAUS << "==" << MOV_CODCAUS; + query << "\nJOIN REG TO " << LF_MOV << " INTO CODTAB==" << MAIN_SUB_FIELD_NAME(MOV_DATAREG, 7, 10) << "+" << MOV_REG; + query << "\nJOIN " << LF_CLIFO << " TO " << LF_MOV << " INTO " << CLI_TIPOCF << "==" << MOV_TIPO << " " << CLI_CODCF << "==" << MOV_CODCF; + } + return query; } @@ -291,6 +304,44 @@ void TRiepilogoIVA_recordset::add_field(TFieldtypes tipo, short id, int width, c _info.add(i); } +const TVariant& TRiepilogoIVA_recordset::get(const char * name) const +{ + const TString16 fldname(name); + TVariant & v = get_tmp_var(); + + if (fldname == COD) + return v = get((unsigned int) 0); + else + if (fldname == DESC) + v = get(1); + else + if (fldname == IMPACQ) + v = get(2); + else + if (fldname == IVAACQ) + v = get(3); + else + if (fldname == IMPCORR) + v = get(4); + else + if (fldname == IVACORR) + v = get(5); + else + if (fldname == IMPVEN) + v = get(6); + else + if (fldname == IVAVEN) + v = get(7); + else + if (fldname == IMPACQIND) + v = get(8); + else + if (fldname == IVAACQIND) + v = get(9); + return v; +} + + const TVariant& TRiepilogoIVA_recordset::get(unsigned int column) const { TVariant & v = get_tmp_var(); @@ -300,7 +351,6 @@ const TVariant& TRiepilogoIVA_recordset::get(unsigned int column) const v = get_field(0, info._name); } - return v; }