diff --git a/lv/lv4500.cpp b/lv/lv4500.cpp index d5e66b313..7ca3f1284 100755 --- a/lv/lv4500.cpp +++ b/lv/lv4500.cpp @@ -327,6 +327,8 @@ class TImporta_fat_app : public TSkeleton_application { TImporta_fat_msk* _msk; TDecodifica_codici* _codici; + TArray _conti; + TArray _importi; protected: bool search_gr_sp_ca(const int gruppo, const char* specie, const int categoria); @@ -341,6 +343,7 @@ protected: const TString80 riclassifica_pconti(); TConfig* genera_testata(TImporta_fat_rec& recset, TFilename& tmpdir); + void leggi_righe_cg(TImporta_fat_rec& recset, const TString& codcau); void genera_righe_iva(TImporta_fat_rec& recset, TConfig& conf, int nriga, const TString& codcau); void genera_rate(TImporta_fat_rec& recset, TConfig& conf, int nriga); @@ -430,16 +433,32 @@ TConfig* TImporta_fat_app::genera_testata(TImporta_fat_rec& recset, TFilename& t conf->set(MOV_CODCAUS, _msk->get_bool(F_DECCAU) ? atol(_codici->decodifica_causali(recset.get("C.CODCAU").as_int())) : recset.get("C.CODCAU").as_int()); conf->set(MOV_ANNOIVA, datadoc.year()); conf->set(MOV_REG, _codici->decodifica_regiva(recset.get("C.REGIVA").as_int())); - conf->set(MOV_PROTIVA, recset.get("C.NREGIVA").as_int()); - conf->set(MOV_CODVAL, _msk->get_bool(F_DECVAL) ? _codici->decodifica_valute(recset.get("C.CODVAL").as_int()) : recset.get("C.CODVAL").as_string()); +// conf->set(MOV_PROTIVA, recset.get("C.NREGIVA").as_int()); + const TString & codval = _msk->get_bool(F_DECVAL) ? _codici->decodifica_valute(recset.get("C.CODVAL").as_int()) : recset.get("C.CODVAL").as_string(); + if (!::is_firm_value(codval) && codval != "EURO") + conf->set(MOV_CODVAL, codval); conf->set(MOV_TIPO, 'C'); conf->set(MOV_CODCF, recset.get("C.CODCF").as_int()); conf->set(MOV_TOTDOC, genera_real(recset.get("C.IMPORTO"), segno)); conf->set(MOV_CODPAG, _msk->get_bool(F_DECCDP) ? atol(_codici->decodifica_condpag(recset.get("C.CODPAG").as_int())) : recset.get("C.CODPAG").as_int()); - + _conti.destroy(); + _importi.destroy(); return conf; } +//GENERA_RIGHE_IVA: genero le righe IVA +void TImporta_fat_app::leggi_righe_cg(TImporta_fat_rec& recset, const TString& codcau) +{ + const char sezione = recset.get("G.SEZIONE").as_string()[0]; + const TCausale cau(codcau); + const int segno = segno_riga(sezione, cau); + const TBill& conto = _codici->decodifica_conto(recset.get("G.CODMASTRO").as_int(), recset.get("G.CODCONTO").as_int()); + const real importo = genera_real(recset.get("G.IMPORTO"), segno); + + _conti.add(new TBill(conto)); + _importi.add(importo); +} + //GENERA_RIGHE_IVA: genero le righe IVA void TImporta_fat_app::genera_righe_iva(TImporta_fat_rec& recset, TConfig& conf, int nriga, const TString& codcau) { @@ -447,26 +466,43 @@ void TImporta_fat_app::genera_righe_iva(TImporta_fat_rec& recset, TConfig& conf, const char sezione = recset.get("I.SEZIONE").as_string()[0]; const TCausale cau(codcau); const int segno = segno_riga(sezione, cau); - const TBill& conto = _codici->decodifica_conto(recset.get("I.CODMASTRO").as_int(), recset.get("I.CODCONTO").as_int()); - - TString paragraph; - paragraph.format("%d,%d", LF_RMOVIVA, ++nriga); - conf.set_paragraph(paragraph); +// const TBill& conto = _codici->decodifica_conto(recset.get("I.CODMASTRO").as_int(), recset.get("I.CODCONTO").as_int()); + TGeneric_distrib dm(recset.get("I.IMPONIBILE").as_real() * segno / CENTO, 2); + TGeneric_distrib dv(recset.get("I.IMPOSTA").as_real() * segno / CENTO, 2); - conf.set(RMI_ANNOES, datadoc.year()); - conf.set(RMI_CODIVA, _msk->get_bool(F_DECCODIVA) ? atol(_codici->decodifica_codiva(recset.get("I.CODIVA").as_int())) : recset.get("I.CODIVA").as_int()); - conf.set(RMI_IMPONIBILE, genera_real(recset.get("I.IMPONIBILE"), segno)); - conf.set(RMI_IMPOSTA, genera_real(recset.get("I.IMPOSTA"), segno)); - conf.set(RMI_GRUPPO, conto.gruppo()); - conf.set(RMI_CONTO, conto.conto()); - conf.set(RMI_SOTTOCONTO, conto.sottoconto()); + FOR_EACH_ARRAY_ITEM(_importi, r, obj) + { + real * slice = (real *) obj; + dm.add(*slice); + dv.add(*slice); + } + + real imp; + real iva; + + FOR_EACH_ARRAY_ITEM(_conti, r1, obj1) + { + + TString paragraph; + + paragraph.format("%d,%d", LF_RMOVIVA, ++nriga); + conf.set_paragraph(paragraph); + conf.set(RMI_ANNOES, datadoc.year()); + conf.set(RMI_CODIVA, _msk->get_bool(F_DECCODIVA) ? atol(_codici->decodifica_codiva(recset.get("I.CODIVA").as_int())) : recset.get("I.CODIVA").as_int()); + conf.set(RMI_IMPONIBILE, dm.get().string(0, 2)); + conf.set(RMI_IMPOSTA, dv.get().string(0, 2)); + TBill * conto = (TBill *) obj1; + conf.set(RMI_GRUPPO, conto->gruppo()); + conf.set(RMI_CONTO, conto->conto()); + conf.set(RMI_SOTTOCONTO, conto->sottoconto()); + } } //GENERA_RATE: genero le righe su SCAD void TImporta_fat_app::genera_rate(TImporta_fat_rec& recset, TConfig& conf, int nriga) { TString paragraph; - paragraph.format("%d,%d", LF_RMOVIVA, ++nriga); + paragraph.format("%d,%d", LF_SCADENZE, ++nriga); conf.set_paragraph(paragraph); const TDate datadoc = recset.get("R.DATADOC").as_date(); @@ -527,6 +563,9 @@ void TImporta_fat_app::transfer(const TFilename& file) configfile = genera_testata(recset, tmpdir); nrigai = nrigar = 0; } break; + case 'G': + leggi_righe_cg(recset, codcau); + break; case 'I': genera_righe_iva(recset, *configfile, nrigai, codcau); break;