diff --git a/src/in/f135.dir b/src/in/f135.dir index 3be1e8186..be7a7478a 100755 --- a/src/in/f135.dir +++ b/src/in/f135.dir @@ -1,3 +1,3 @@ 135 0 -$rieprett|||174|0|Riepiloghi e rettifiche INTRA||| +$rieprett|1|1|174|0|Riepiloghi e rettifiche INTRA||| diff --git a/src/in/f135.trr b/src/in/f135.trr index fc5a7ba67..84ecf98a2 100755 --- a/src/in/f135.trr +++ b/src/in/f135.trr @@ -1,6 +1,6 @@ 135 30 -TIPOINTRA|1|1|0|eni o ervizi +SEZIONE|2|1|0|<1> Beni, <2> Rettifiche beni, <3> Servizi, <4> Rettifiche servizi TIPO|1|1|0|cquisti o essioni , rettifiche acquisti o cessioni ANNO|2|4|0|Anno PERIODO|9|2|0|Periodo (Mese[1,12] / Trimestre[1,4] / Anno [1.,1]) @@ -28,7 +28,8 @@ FREQUENZA|1|1|0|Frequenza (ensile, rimestrale, nnuale) NUMREG|3|7|0|Eventuale movimento di prima nota collegato CODSERV|1|5|0|Codice prestazione di servizio MODEROG|1|1|0|Modalità di erogazione mmediata o a più riprese -MODINC|1|1|0|Modalità di incasso onifico, ccredito o Altro -ISOPAG|1|2|0|Codice Iso Paese di pagamento -1 -TIPO+ANNO+PERIODO+NUMRIG| +MODINCPAG|1|1|0|Modalità di incasso onifico, ccredito o Altro +ISOINCPAG|1|2|0|Codice Iso Paese di pagamento +2 +ANNO+PERIODO+NUMRIG| +ANNO+PERIODO+TIPO+SEZIONE+NUMRIG|X diff --git a/src/in/in0200.cpp b/src/in/in0200.cpp index 7e09fc2a6..f2dc6bc22 100755 --- a/src/in/in0200.cpp +++ b/src/in/in0200.cpp @@ -30,7 +30,7 @@ public: void put(real num, int pos, int dim, int dec = 0); void put(long num, int pos, int dim); void put(char chr, int pos); - void genera_testata(const TIntra_context& ic); + void genera_testata(const TIntra_context& ic, long progr[], long tot[]); void put(const TRectype& rec, TIntra_context& ic); TRecord_intra(); }; @@ -102,10 +102,14 @@ void TRecord_intra::reset(const TIntra_context& ic) { spaces(); put("EUROX", 1, 5); + const TRectype& ditta = cache().get(LF_NDITTE, main_app().get_firm()); TString16 cod; + cod.format("%c|%ld", ditta.get_char(NDT_TIPOA), ditta.get_long(NDT_CODANAGR)); + const TRectype& anagr = cache().get(LF_ANAG, cod); + put(anagr.get(ANA_PAIV), 6, 11); put(ic._progr, 17, 6); } @@ -118,7 +122,7 @@ void TRecord_intra::reset_data() } // Scrive la testata con le informazioni della ditta -void TRecord_intra::genera_testata(const TIntra_context& ic) +void TRecord_intra::genera_testata(const TIntra_context& ic, long progr[], long tot[]) { reset(ic); @@ -136,12 +140,13 @@ void TRecord_intra::genera_testata(const TIntra_context& ic) put(cod, 35, 11); const TRectype& ditta = cache().get(LF_NDITTE, main_app().get_firm()); - put(ditta.get_bool("PRESELEN") ? '1' : '0', 46); - put(ditta.get_bool("CESSIVA") ? '1' : '0', 47); + + put(ditta.get_bool(NDT_PRESELEN) ? '1' : '0', 46); + put(ditta.get_bool(NDT_CESSIVA) ? '1' : '0', 47); cod.cut(0); - cod << ditta.get_char("TIPOSOGDEL") << '|'; - cod << ditta.get("CODSOGDEL"); + cod << ditta.get_char(NDT_TIPOSOGDEL) << '|'; + cod << ditta.get(NDT_CODSOGDEL); if (cod.len() >= 3) { const TRectype& sogdel = cache().get(LF_ANAG, cod); @@ -150,10 +155,11 @@ void TRecord_intra::genera_testata(const TIntra_context& ic) else put("", 48, 11, "Z"); - put(ic._righe_riep, 59, 5); - put(ic._totale_riep, 64, 13, _ndec); - put(ic._righe_rett, 77, 5); - put(ic._totale_rett, 82, 13, _ndec); + for (int i = 0; i < 4; i++) + { + put(progr[i], 59 + i * 18, 5); + put(tot[i], 64 + i * 18, 13, _ndec); + } } // Scrive un intero record del file riepiloghi/rettifiche @@ -161,184 +167,190 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic) { reset_data(); - put(rec.get_long("NUMRIG"), 24, 5); - const char tipointra = rec.get_char("TIPOINTRA"); - const char tipo = rec.get_char("TIPO"); + const int sezione = rec.get_int(RIEPINTRA_SEZIONE); + const TString & tipo = rec.get(RIEPINTRA_TIPO); - CHECK(tipointra == ic._tipointra, "Tipo Intra non previsto"); - - if (tipointra == 'B') + put((long) sezione, 23, 1); + put(rec.get_long(RIEPINTRA_NUMRIG), 24, 5); //? + if (tipo == "A") { - switch (tipo) + switch (sezione) { - case 'A': - put('1', 23); - put(rec.get("STATO"), 29, 2); - put(rec.get("PIVA"), 31, 12); - put(rec.get_real("AMMLIRE"), 43, 13, _ndec); - put(rec.get_real("AMMVALUTA"), 56, 13); - put(rec.get_char("NATURA"), 69); - put(rec.get("NOMENCL").mid(0, 4), 70, 4, "Z"); //il campo viene spezzato in 3 pezzi - put(rec.get("NOMENCL").mid(4, 2), 74, 2, "Z"); - put(rec.get("NOMENCL").mid(6, 2), 76, 2, "Z"); - if (ic._freq == 'M') - { - put(rec.get_real("MASSAKG"), 78, 10, 0); - put(rec.get_real("MASSAUMS"), 88, 10, 0); - put(rec.get_real("VALSTAT"), 98, 13, _ndec); - put(rec.get_char("CONSEGNA"), 111); - put(rec.get_char("TRASPORTO"), 112); - put(rec.get("PAESE"), 113, 2); - put(rec.get("PAESEORIG"), 115, 2); - put(rec.get("PROV"), 117, 2); - } - else - put("", 78, 100); + case 1: + put(rec.get(RIEPINTRA_STATO), 29, 2); + put(rec.get(RIEPINTRA_PIVA), 31, 12); + put(rec.get_real(RIEPINTRA_AMMLIRE), 43, 13, _ndec); + put(rec.get_real(RIEPINTRA_AMMVALUTA), 56, 13); + put(rec.get_char(RIEPINTRA_NATURA), 69); + put(rec.get(RIEPINTRA_NOMENCL).mid(0, 4), 70, 4, "Z"); //il campo viene spezzato in 3 pezzi + put(rec.get(RIEPINTRA_NOMENCL).mid(4, 2), 74, 2, "Z"); + put(rec.get(RIEPINTRA_NOMENCL).mid(6, 2), 76, 2, "Z"); + if (ic._freq == 'M') + { + put(rec.get_real(RIEPINTRA_MASSAKG), 78, 10, 0); + put(rec.get_real(RIEPINTRA_MASSAUMS), 88, 10, 0); + put(rec.get_real(RIEPINTRA_VALSTAT), 98, 13, _ndec); + put(rec.get_char(RIEPINTRA_CONSEGNA), 111); + put(rec.get_char(RIEPINTRA_TRASPORTO), 112); + put(rec.get(RIEPINTRA_PAESE), 113, 2); + put(rec.get(RIEPINTRA_PAESEORIG), 115, 2); + put(rec.get(RIEPINTRA_PROV), 117, 2); + } + else + put("", 78, 100); break; - case 'B': - { - put('2', 23); - if (ic._freq == 'M') - put(rec.get("PERETT"), 29, 2, "RZ"); - else - put("", 29, 2, "RZ"); - if (ic._freq == 'T') - put(rec.get("PERETT")[1], 31); - else - put('0', 31); - put(rec.get("ANNORETT").right(2), 32, 2, "RZ"); - put(rec.get("STATO"), 34, 2); - put(rec.get("PIVA"), 36, 12); - put(rec.get("SEGNORETT"), 48, 1); - put(rec.get_real("AMMLIRE"), 49, 13, _ndec); - put(rec.get_real("AMMVALUTA"), 62, 13); - put(rec.get_char("NATURA"), 75); - put(rec.get("NOMENCL").mid(0, 4), 76, 4, "Z"); //il campo viene spezzato in 3 pezzi - put(rec.get("NOMENCL").mid(4, 2), 80, 2, "Z"); - put(rec.get("NOMENCL").mid(6, 2), 82, 2, "Z"); - if (ic._freq == 'M') - put(rec.get_real("VALSTAT"), 84, 13, _ndec); - else - put("", 84, 13); - } - break; - case 'C': - put('1', 23); - put(rec.get("STATO"), 29, 2); - put(rec.get("PIVA"), 31, 12); - put(rec.get_real("AMMLIRE"), 43, 13, _ndec); - put(rec.get_char("NATURA"), 56); - put(rec.get("NOMENCL"), 57, 8, "Z"); //il campo NON viene spezzato in 3 pezzi - if (ic._freq == 'M') + case 2: { - put(rec.get_real("MASSAKG"), 65, 10); - put(rec.get_real("MASSAUMS"), 75, 10); - put(rec.get_real("VALSTAT"), 85, 13, _ndec); - put(rec.get_char("CONSEGNA"), 98); - put(rec.get_char("TRASPORTO"), 99); - put(rec.get("PAESE"), 100, 2); - put(rec.get("PROV"), 102, 2); + if (ic._freq == 'M') + put(rec.get(RIEPINTRA_PERETT), 29, 2, "RZ"); + else + put("", 29, 2, "RZ"); + if (ic._freq == 'T') + put(rec.get(RIEPINTRA_PERETT)[1], 31); + else + put('0', 31); + put(rec.get(RIEPINTRA_ANNORETT).right(2), 32, 2, "RZ"); + put(rec.get(RIEPINTRA_STATO), 34, 2); + put(rec.get(RIEPINTRA_PIVA), 36, 12); + put(rec.get(RIEPINTRA_SEGNORETT), 48, 1); + put(rec.get_real(RIEPINTRA_AMMLIRE), 49, 13, _ndec); + put(rec.get_real(RIEPINTRA_AMMVALUTA), 62, 13); + put(rec.get_char(RIEPINTRA_NATURA), 75); + put(rec.get(RIEPINTRA_NOMENCL).mid(0, 4), 76, 4, "Z"); //il campo viene spezzato in 3 pezzi + put(rec.get(RIEPINTRA_NOMENCL).mid(4, 2), 80, 2, "Z"); + put(rec.get(RIEPINTRA_NOMENCL).mid(6, 2), 82, 2, "Z"); + if (ic._freq == 'M') + put(rec.get_real(RIEPINTRA_VALSTAT), 84, 13, _ndec); + else + put("", 84, 13); } - else - put("", 65, 100); break; - case 'D': - { - put('2', 23); - if (ic._freq == 'M') - put(rec.get("PERETT"), 29, 2, "RZ"); - else - put("", 29, 2, "RZ"); - if (ic._freq == 'T') - put(rec.get("PERETT")[1], 31); - else - put('0', 31); - put(rec.get("ANNORETT").right(2), 32, 2, "RZ"); - put(rec.get("STATO"), 34, 2); - put(rec.get("PIVA"), 36, 12); - put(rec.get("SEGNORETT"), 48, 1); - put(abs(rec.get_real("AMMLIRE")), 49, 13, _ndec); - put(rec.get("NATURA"), 62, 1); - put(rec.get("NOMENCL"), 63, 8, "Z"); // il campo NON viene spezzato in 3 pezzi + case 3: + put(rec.get(RIEPINTRA_STATO), 29, 2); + put(rec.get(RIEPINTRA_PIVA), 31, 12); + put(rec.get_real(RIEPINTRA_AMMLIRE), 43, 13, _ndec); + put(rec.get_real(RIEPINTRA_AMMVALUTA), 56, 13); + // put(numero fattura, 69, 15); facoltativo + // put(data fattura, 84, 6); facoltativo + put(rec.get(RIEPINTRA_CODSERV), 90, 6); + put(rec.get_char(RIEPINTRA_MODEROG), 96); + put(rec.get_char(RIEPINTRA_MODINCPAG), 97); + put(rec.get(RIEPINTRA_ISOINCPAG), 98, 2); + break; + case 4: + { + const TRectype& ditta = cache().get(LF_NDITTE, main_app().get_firm()); + + put(ditta.get(NDT_UFFDOG), 29, 6); + put(rec.get(RIEPINTRA_ANNORETT).right(2), 35, 2, "RZ"); + // put(protocollo rettifica, 37, 6, "RZ"); + // put(progressivo rettifica, 43, 5, "RZ"); + put(rec.get(RIEPINTRA_STATO), 48, 2); + put(rec.get(RIEPINTRA_PIVA), 50, 12); + + real ammlire = rec.get_real(RIEPINTRA_AMMLIRE); - if (ic._freq == 'M') - put(abs(rec.get_real("VALSTAT")), 71, 13, _ndec); - else - put("", 71, 13); - } - break; - default: - NFCHECK("Record di tipo sconosciuto: %c", tipo); + if (rec.get_real(RIEPINTRA_SEGNORETT) == "+") + ammlire = -ammlire; + put(rec.get_real(RIEPINTRA_AMMLIRE), 62, 13, _ndec); + put(rec.get_real(RIEPINTRA_AMMVALUTA), 75, 13); + // put(numero fattura, 88, 15); facoltativo + // put(data fattura, 103, 6); facoltativo + put(rec.get(RIEPINTRA_CODSERV), 109, 6); + put(rec.get_char(RIEPINTRA_MODEROG), 115); + put(rec.get_char(RIEPINTRA_MODINCPAG), 116); + put(rec.get(RIEPINTRA_ISOINCPAG), 117, 2); + } + break; + default: + NFCHECK("sezione sconosciuta: %d", sezione); break; } } else { - switch (tipo) + switch (sezione) { - case 'A': - put('3', 23); - put(rec.get("STATO"), 29, 2); - put(rec.get("PIVA"), 31, 12); - put(rec.get_real("AMMLIRE"), 43, 13, _ndec); - put(rec.get_real("AMMVALUTA"), 56, 13); - // put(numero fattura, 69, 15); - // put(data fattura, 84, 6); - // put(codice servizio, 90, 6); - // put(modalità di erogazione, 96); - // put(modalità di incasso, 97); - // put(codice paese di pagamento, 98, 2); + case 1: + put(rec.get(RIEPINTRA_STATO), 29, 2); + put(rec.get(RIEPINTRA_PIVA), 31, 12); + put(rec.get_real(RIEPINTRA_AMMLIRE), 43, 13, _ndec); + put(rec.get_char(RIEPINTRA_NATURA), 56); + put(rec.get(RIEPINTRA_NOMENCL), 57, 8, "Z"); //il campo NON viene spezzato in 3 pezzi + if (ic._freq == 'M') + { + put(rec.get_real(RIEPINTRA_MASSAKG), 65, 10); + put(rec.get_real(RIEPINTRA_MASSAUMS), 75, 10); + put(rec.get_real(RIEPINTRA_VALSTAT), 85, 13, _ndec); + put(rec.get_char(RIEPINTRA_CONSEGNA), 98); + put(rec.get_char(RIEPINTRA_TRASPORTO), 99); + put(rec.get(RIEPINTRA_PAESE), 100, 2); + put(rec.get(RIEPINTRA_PROV), 102, 2); + } + else + put("", 65, 100); + break; + case 2: + { + if (ic._freq == 'M') + put(rec.get(RIEPINTRA_PERETT), 29, 2, "RZ"); + else + put("", 29, 2, "RZ"); + if (ic._freq == 'T') + put(rec.get(RIEPINTRA_PERETT)[1], 31); + else + put('0', 31); + put(rec.get(RIEPINTRA_ANNORETT).right(2), 32, 2, "RZ"); + put(rec.get(RIEPINTRA_STATO), 34, 2); + put(rec.get(RIEPINTRA_PIVA), 36, 12); + put(rec.get(RIEPINTRA_SEGNORETT), 48, 1); + put(abs(rec.get_real(RIEPINTRA_AMMLIRE)), 49, 13, _ndec); + put(rec.get(RIEPINTRA_NATURA), 62, 1); + put(rec.get(RIEPINTRA_NOMENCL), 63, 8, "Z"); // il campo NON viene spezzato in 3 pezzi + + if (ic._freq == 'M') + put(abs(rec.get_real(RIEPINTRA_VALSTAT)), 71, 13, _ndec); + else + put("", 71, 13); + } break; - case 'B': - { - put('4', 23); - // put(sezione doganale, 29, 6); - put(rec.get("ANNORETT").right(2), 35, 2, "RZ"); - // put(protocollo rettifica, 37, 6, "RZ"); - // put(progressivo rettifica, 43, 5, "RZ"); - put(rec.get("STATO"), 48, 2); - put(rec.get("PIVA"), 50, 12); - put(rec.get_real("AMMLIRE"), 62, 13, _ndec); - put(rec.get_real("AMMVALUTA"), 75, 13); - // put(numero fattura, 88, 15); - // put(data fattura, 103, 6); - // put(codice servizio, 109, 6); - // put(modalità di erogazione, 115); - // put(modalità di incasso, 116); - // put(codice paese di pagamento, 117, 2); - } - break; - case 'C': - put('3', 23); - put(rec.get("STATO"), 29, 2); - put(rec.get("PIVA"), 31, 12); - put(rec.get_real("AMMLIRE"), 43, 13, _ndec); - // put(numero fattura, 56, 15); - // put(data fattura, 71, 6); - // put(codice servizio, 77, 6); - // put(modalità di erogazione, 83); - // put(modalità di incasso,84); - // put(codice paese di pagamento, 85, 2); + case 3: + put(rec.get(RIEPINTRA_STATO), 29, 2); + put(rec.get(RIEPINTRA_PIVA), 31, 12); + put(rec.get_real(RIEPINTRA_AMMLIRE), 43, 13, _ndec); + // put(numero fattura, 56, 15); facoltativo + // put(data fattura, 71, 6); facoltativo + put(rec.get(RIEPINTRA_CODSERV), 77, 6); + put(rec.get_char(RIEPINTRA_MODEROG), 83); + put(rec.get_char(RIEPINTRA_MODINCPAG), 84); + put(rec.get(RIEPINTRA_ISOINCPAG), 85, 2); + break; + case 4: + { + const TRectype& ditta = cache().get(LF_NDITTE, main_app().get_firm()); + + put(ditta.get(NDT_UFFDOG), 29, 6); + put(rec.get(RIEPINTRA_ANNORETT).right(2), 35, 2, "RZ"); + // put(protocollo rettifica, 37, 6, "RZ"); + // put(progressivo rettifica, 43, 5, "RZ"); + put(rec.get(RIEPINTRA_STATO), 48, 2); + put(rec.get(RIEPINTRA_PIVA), 50, 12); + + real ammlire = rec.get_real(RIEPINTRA_AMMLIRE); + + if (rec.get_real(RIEPINTRA_SEGNORETT) == "+") + ammlire = -ammlire; + put(ammlire, 2, 13, _ndec); + // put(numero fattura, 75, 15); facoltativo + // put(data fattura, 90, 6); facoltativo + put(rec.get(RIEPINTRA_CODSERV), 96, 6); + put(rec.get_char(RIEPINTRA_MODEROG), 102); + put(rec.get_char(RIEPINTRA_MODINCPAG), 103); + put(rec.get(RIEPINTRA_ISOINCPAG), 104, 2); + } break; - case 'D': - { - put('4', 23); - // put(sezione doganale, 29, 6); - put(rec.get("ANNORETT").right(2), 35, 2, "RZ"); - // put(protocollo rettifica, 37, 6, "RZ"); - // put(progressivo rettifica, 43, 5, "RZ"); - put(rec.get("STATO"), 48, 2); - put(rec.get("PIVA"), 50, 12); - put(rec.get_real("AMMLIRE"), 2, 13, _ndec); - // put(numero fattura, 75, 15); - // put(data fattura, 90, 6); - // put(codice servizio, 96, 6); - // put(modalità di erogazione, 102); - // put(modalità di incasso, 103); - } - break; - default: - NFCHECK("Record di tipo sconosciuto: %c", tipo); + default: + NFCHECK("sezione sconosciuta: %d", sezione); break; } } @@ -362,17 +374,20 @@ TRecord_intra::TRecord_intra() : TString(132), _ndec(0) class TInvioIntra1_2_mask : public TIntra_mask { + long _progr[4]; + long _totale[4]; + protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual short type_field() const { return F_TIPO; } virtual short period_field() const { return F_PERIODO_M; } virtual int anno() const { return get_int(F_ANNO); } - - TRecnotype calcola_totale(TCursor& cur, real& tot) const; + void calcola_repiloghi(const TRectype & rec); void proponi_numero(); public: - void genera(char tipointra, char tipo); + void genera(char tipointra, char tipo, bool reset = false); + void update_testata(char tipo); TInvioIntra1_2_mask::TInvioIntra1_2_mask() : TIntra_mask("in0200a") {} }; @@ -452,33 +467,21 @@ bool TInvioIntra1_2_mask::on_field_event(TOperable_field& o, TField_event e, lon return TIntra_mask::on_field_event(o, e, jolly); } -TRecnotype TInvioIntra1_2_mask::calcola_totale(TCursor& cur, real& tot) const +void TInvioIntra1_2_mask::calcola_repiloghi(const TRectype & rec) { - TWait_cursor arrow; - const TRecnotype items = cur.items(); - cur.freeze(); + int sezione = rec.get_int(RIEPINTRA_SEZIONE); + real r = rec.get_real(RIEPINTRA_AMMLIRE).round(0); // Arrotonda all'Euro i valori intermedi + long val = atol(r.string()); - tot = ZERO; - - const TRectype& rec = cur.curr(); - for (cur = 0L; cur.pos() < items; ++cur) - { - const char tipo = rec.get_char("TIPO"); - const real val = rec.get_real("AMMLIRE").round(0); // Arrotonda all'Euro i valori intermedi - // Da chiarire: come sommare le rettifiche negative! - if ((tipo == 'B' || tipo == 'D') && rec.get_char("SEGNORETT") == '-') - tot -= val; // Rettifiche negative - else - tot += val; - } - return items; + if ((sezione == 2 || sezione == 4) && rec.get_char("SEGNORETT") == '-') + val = -val; // Rettifiche negative + _totale[--sezione] += val; } -void TInvioIntra1_2_mask::genera(char tipointra, char tipo) +void TInvioIntra1_2_mask::genera(char tipointra, char tipo, bool reset) { TIntra_context ic; - ic._tipointra = tipointra; ic._tipo = tipo; ic._anno = anno(); ic._freq = frequenza(ic._anno); @@ -491,7 +494,7 @@ void TInvioIntra1_2_mask::genera(char tipointra, char tipo) ird.put("CODTAB", codtab); const bool exist = ird.read() == NOERR; - if (exist) + if (reset && exist) { const char* ac = tipo == 'A' ? TR("acquisti") : TR("cessioni"); if (!yesno_box(FR("Il file %s del periodo indicato è già stato generato:\n" @@ -502,71 +505,99 @@ void TInvioIntra1_2_mask::genera(char tipointra, char tipo) TRelation rel(LF_RIEPRETT); TRectype filter(LF_RIEPRETT); - filter.put("TIPOINTRA", ic._tipointra); - filter.put("TIPO", ic._tipo); filter.put("ANNO", ic._anno); filter.put("PERIODO", periodo_str()); - TCursor riep(&rel, "", 1, &filter, &filter); - ic._righe_riep = calcola_totale(riep, ic._totale_riep); - - filter.put("TIPO", char(ic._tipo+1)); - TCursor rett(&rel, "", 1, &filter, &filter); - - ic._righe_rett = calcola_totale(rett, ic._totale_rett); - + TCursor riep(&rel, "", 2, &filter, &filter); + const TRectype & rieprec = riep.curr(); + const long items = riep.items(); TFilename name = get(F_PATH); TString filename(get(F_CODUA)); filename << format("%02d%02d%02d", today.day(), today.month(), get_int(F_NUMERO)); name.add(filename); - if (name.exist() && yesno_box(FR("Il file %s esiste già: si desiderla sostituirlo ?\n"), (const char*)name)) - return; ofstream out(name, ios::out | ios::app); - if (!out) + if (!out.good()) + { + cantwrite_box(name); + return; + } + if (reset) + { + _progr[0] = 0L; + _progr[1] = 0L; + _progr[2] = 0L; + _progr[3] = 0L; + _totale[0] = 0L; + _totale[1] = 0L; + _totale[2] = 0L; + _totale[3] = 0L; + } + + TProgress_monitor pi(2 * items, TR("Generazione Intra 1/2"), false); + TRecord_intra rec; + + for (riep = 0L; pi.add_status() && riep.pos() < items; ++riep) + calcola_repiloghi(rieprec); + rec.genera_testata(ic, _progr, _totale); + out << rec; + for (riep = 0L; pi.add_status() && riep.pos() < items; ++riep) + { + rec.put(rieprec, ic); + out << rec; + } +} + +void TInvioIntra1_2_mask::update_testata(char tipo) +{ + TIntra_context ic; + + ic._tipo = tipo; + ic._anno = anno(); + ic._freq = frequenza(ic._anno); + ic._periodo = periodo(); + ic._progr = get_long(F_NUMERO); + TFilename name = get(F_PATH); + TString filename(get(F_CODUA)); + TRecord_intra rec; + + filename << format("%02d%02d%02d", today.day(), today.month(), get_int(F_NUMERO)); + name.add(filename); + + ofstream out(name, ios::out | ios::ate); + + if (!out.good()) { cantwrite_box(name); return; } - const long total = ic._righe_riep + ic._righe_rett; - - TProgress_monitor pi(total, TR("Generazione Intra 1/2"), false); - TRecord_intra rec; - rec.genera_testata(ic); + rec.genera_testata(ic, _progr, _totale); out << rec; - - rec.reset_data(); - for (riep = 0L; riep.pos() < ic._righe_riep; ++riep) - { - pi.add_status(); - rec.put(riep.curr(), ic); - out << rec; - } - rec.reset_data(); - for (rett = 0L; rett.pos() < ic._righe_rett; ++rett) - { - pi.add_status(); - rec.put(riep.curr(), ic); - out << rec; - } + TString8 codtab; codtab.format("%c%04d%02d", ic._tipo, ic._anno, ic._periodo); + TTable ird("IRD"); + + set(F_NUMERO, ic._progr + 1); - codtab.format("%c%04d%02d", ic._tipo, ic._anno, ic._periodo); - ird.put("CODTAB", codtab); - ird.put("I2", ic._righe_riep); - ird.put("I3", ic._righe_rett); - ird.put("R0", ic._totale_riep); - ird.put("R1", ic._totale_rett); + ird.put("I0", ic._progr + 1); + ird.put("I2", _progr[0]); + ird.put("I3", _progr[1]); + ird.put("I4", _progr[2]); + ird.put("I5", _progr[3]); + ird.put("R2", _totale[0]); + ird.put("R3", _totale[1]); + ird.put("R4", _totale[2]); + ird.put("R5", _totale[3]); ird.rewrite_write(); - set(F_NUMERO, ic._progr + 1); + set(F_NUMERO, ic._progr + 1); TString msg("Generato il file "); msg << name; - message_box(name); + message_box(msg); } /////////////////////////////////////////////////////////// @@ -589,17 +620,20 @@ void TInvioIntra1_2_app::main_loop() while (m.run() == K_ENTER) { const char tip = m.tipo(); + if (tip == 'T') { - m.genera('B', 'C'); + m.genera('B', 'C', true); m.genera('B', 'A'); m.genera('S', 'C'); m.genera('S', 'A'); + m.update_testata('A'); } else { - m.genera('B', tip); + m.genera('B', tip, true); m.genera('S', tip); + m.update_testata('C'); } } m.save(); diff --git a/src/in/in0300.cpp b/src/in/in0300.cpp index 9ee25fb91..c6bfa6057 100644 --- a/src/in/in0300.cpp +++ b/src/in/in0300.cpp @@ -650,12 +650,12 @@ void TInvioIntra12_13_mask::genera() rec_z.fill(); out << rec_z; - /* TString8 codtab; codtab.format("A%04d%01", get_int(F_ANNO)); - TRectype & rird = (TRectype &)cache().get("IRD", codtab); + TString8 codtab; codtab.format("A%04d%01", get_int(F_ANNO)); + TRectype & rird = (TRectype &)cache().get("IRD", codtab); ic._progr = get_long(F_NUMERO); - rird.put("I4", ic._progr); - rird.rewrite_write(); */ + rird.put("I6", ic._progr); + rird.rewrite_write(); TString msg("Generato il file "); diff --git a/src/in/in0500.cpp b/src/in/in0500.cpp index cfe66ae65..3154c5c05 100755 --- a/src/in/in0500.cpp +++ b/src/in/in0500.cpp @@ -56,6 +56,14 @@ protected: virtual bool changing_mask(int mode) { return FALSE; } virtual bool user_destroy(); virtual bool protected_record(TRectype & rec); + // @cmember Inizializza la maschera per il modo ricerca + virtual void init_query_mode(TMask&); + // @cmember Inizializza la maschera per il modo ricerca ed inserimento (chiama ) + virtual void init_query_insert_mode(TMask& m); + // @cmember Inizializza la maschera per il modo inserimento + virtual void init_insert_mode(TMask&); + // @cmember Inizializza la maschera per il modo modifica + virtual void init_modify_mode(TMask&); public: }; @@ -295,9 +303,13 @@ bool TImmissione_mask::on_sheet_field_event(TOperable_field& o, TField_event e, if (e == fe_modify) { TMask& m = o.mask(); - if (!o.empty()) + const TString & val = o.get(); + + if (val.len() != 8) + return error_box(TR("La lunghezza del codice nomenclatura combinata deve essere 8")); + if (val.full()) { - const TRectype& nom = cache().get("%NOC", o.get()); + const TRectype& nom = cache().get("%NOC", val); m.set(F_UMS, nom.get("S5"), 0x1); @@ -333,6 +345,50 @@ TImmissione_mask::TImmissione_mask() // Applicazione principale /////////////////////////////////////////////////////////// +void TImmissione_intra::init_query_mode(TMask& m) +{ + TRelation_application::init_query_mode(m); + m.show(F_NUM_REG); + m.hide(F_NUM_REG_INS); +} + +void TImmissione_intra::init_query_insert_mode(TMask& m) +{ + m.hide(F_NUM_REG); + m.show(F_NUM_REG_INS); +} + +void TImmissione_intra::init_insert_mode(TMask& m) +{ + TRelation_application::init_insert_mode(m); + m.show(F_NUM_REG); + m.hide(F_NUM_REG_INS); + + const TRectype & mov = cache().get(LF_MOV, m.get(F_NUM_REG)); + const TString & tipocf = mov.get(MOV_TIPO); + const long codcf = mov.get_long(MOV_CODCF); + + m.set(F_TIPO_MOV, tipocf == "F" ? "A" : "C"); + m.set(F_CLIFO, codcf); + m.enable(F_TIPO_MOV, codcf == 0L); + m.enable(F_CLIFO, codcf == 0L); + m.enable(F_RAGSOC, codcf == 0L); +} + +void TImmissione_intra::init_modify_mode(TMask& m) +{ + TRelation_application::init_modify_mode(m); + m.show(F_NUM_REG); + m.hide(F_NUM_REG_INS); + + const long codcf = m.get_long(F_CLIFO); + + m.enable(F_TIPO_MOV, codcf == 0L); + m.enable(F_CLIFO, codcf == 0L); + m.enable(F_RAGSOC, codcf == 0L); +} + + bool TImmissione_intra::protected_record(TRectype & rec) { const char tipo = rec.get_char("TIPOMOV"); diff --git a/src/in/in0500a.h b/src/in/in0500a.h index 398a0f7e5..a47999bb6 100755 --- a/src/in/in0500a.h +++ b/src/in/in0500a.h @@ -2,26 +2,27 @@ #define F_DITTA_DESCR 302 #define F_NUM_REG 303 -#define F_DATA_DOC 304 -#define F_NUM_DOC 305 +#define F_NUM_REG_INS 304 +#define F_DATA_DOC 305 +#define F_NUM_DOC 306 -#define F_DATA_REG 306 -#define F_DATA_INT 307 -#define F_TIPO_MOV 308 +#define F_DATA_REG 307 +#define F_DATA_INT 308 +#define F_TIPO_MOV 309 -#define F_TIPO_CF 310 -#define F_CLIFO 311 -#define F_RAGSOC 312 +#define F_TIPO_CF 320 +#define F_CLIFO 321 +#define F_RAGSOC 322 -#define F_STATO 315 -#define F_PARTITA_IVA 316 +#define F_STATO 325 +#define F_PARTITA_IVA 326 -#define F_TOT_DOC 320 -#define F_TOT_IMM 321 -#define F_DIF 322 +#define F_TOT_DOC 330 +#define F_TOT_IMM 331 +#define F_DIF 332 -#define F_VALUTA 330 -#define F_CAMBIO 331 +#define F_VALUTA 340 +#define F_CAMBIO 341 #define F_RIGHE 350 diff --git a/src/in/in0500a.uml b/src/in/in0500a.uml index 24c75df86..a76aa9ca5 100755 --- a/src/in/in0500a.uml +++ b/src/in/in0500a.uml @@ -36,15 +36,37 @@ BEGIN DISPLAY "Numero" NUMREG DISPLAY "Data@10" DATAREG DISPLAY "C/A" TIPOMOV - DISPLAY "Totale documento@R" TOTDOC + DISPLAY "Totale documento" TOTDOC DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC OUTPUT F_NUM_REG NUMREG + OUTPUT F_NUM_REG_INS NUMREG CHECKTYPE REQUIRED FLAGS "G" KEY 1 FIELD NUMREG END +NUMBER F_NUM_REG_INS 7 +BEGIN + PROMPT 1 3 "Numero registrazione " + USE MOV SELECT (LF_CAUSALI->INTRACOM=="X")&&(LF_INTRA->NUMREG="") + JOIN LF_INTRA INTO NUMREG==NUMREG + JOIN LF_CAUSALI INTO CODCAUS==CODCAUS + JOIN LF_CLIFO INTO TIPOCF==TIPO CODCF==CODCF + INPUT NUMREG F_NUM_REG + DISPLAY "Numero" NUMREG + DISPLAY "Data@10" DATAREG + DISPLAY "C/A" TIPOMOV + DISPLAY "Totale documento" TOTDOC + DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC + OUTPUT F_NUM_REG_INS NUMREG + OUTPUT F_NUM_REG NUMREG + CHECKTYPE REQUIRED + FLAGS "GH" + KEY 1 + FIELD NUMREG +END + DATA F_DATA_DOC BEGIN PROMPT 34 3 "Documento numero " @@ -179,7 +201,7 @@ BEGIN FIELD CAMBIO END -SPREADSHEET F_RIGHE 78 -3 +SPREADSHEET F_RIGHE -1 -3 BEGIN PROMPT 0 10 "" ITEM "Tipo@7" @@ -264,7 +286,6 @@ BEGIN DISPLAY "Descrizione@50" S0 OUTPUT F_NOMENCLATURA CODTAB FIELD NOMENCL - VALIDATE FIXLEN_FUNC 8 CHECKTYPE REQUIRED GROUP GR_BENI FLAGS "Z" diff --git a/src/in/in0600.cpp b/src/in/in0600.cpp index f97548e66..5c027c5a9 100755 --- a/src/in/in0600.cpp +++ b/src/in/in0600.cpp @@ -161,7 +161,7 @@ protected: virtual void init_insert_mode(TMask& m); virtual void init_modify_mode(TMask& m); virtual bool save_and_new() const { return TRUE; }; - virtual void check_existent_disk(const TMask& m); +// virtual void check_existent_disk(const TMask& m); public: }; @@ -183,12 +183,12 @@ bool TRiepiloghi_intra::user_destroy() bool TRiepiloghi_intra::get_next_key(TToken_string& k) { - if (_msk->get(F_ANNO).empty() || _msk->get(F_PARTITA_IVA).empty()) + if (_msk->get(F_ANNO).empty()) // || _msk->get(F_PARTITA_IVA).empty()) return false; _msk->autosave(*_rel); TRectype filter(_rel->curr()); - filter.zero("NUMRIG"); + filter.zero(RIEPINTRA_NUMRIG); TCursor cur(_rel, "", 1, &filter, &filter); const long r = cur.items(); @@ -205,19 +205,19 @@ bool TRiepiloghi_intra::get_next_key(TToken_string& k) void TRiepiloghi_intra::init_insert_mode(TMask& m) { - check_existent_disk(m); +// check_existent_disk(m); m.enable(F_VALUTA); } void TRiepiloghi_intra::init_modify_mode(TMask& m) { - check_existent_disk(m); +// check_existent_disk(m); m.enable(F_VALUTA); } int TRiepiloghi_intra::write(const TMask& m) { - _rel->curr().put("FREQUENZA", ((TRiepiloghi_mask &) m).frequenza(m.get_int(F_ANNO))); + _rel->curr().put(RIEPINTRA_FREQUENZA, ((TRiepiloghi_mask &) m).frequenza(m.get_int(F_ANNO))); return TRelation_application::write(m); } void TRiepiloghi_intra::init_query_mode(TMask& m) @@ -240,6 +240,7 @@ void TRiepiloghi_intra::init_query_mode(TMask& m) m.disable(F_VALUTA); } +/* void TRiepiloghi_intra::check_existent_disk(const TMask& m) { int anno = m.get_int(F_ANNO); @@ -262,6 +263,7 @@ void TRiepiloghi_intra::check_existent_disk(const TMask& m) warning_box(FR("E' già stato generato scambi.cee per il periodo %d dell'anno %d"), periodo,anno); } + */ int in0600(int argc, char* argv[]) { diff --git a/src/in/in0600a.h b/src/in/in0600a.h index 1ec7a099b..53c3eae4e 100755 --- a/src/in/in0600a.h +++ b/src/in/in0600a.h @@ -1,17 +1,18 @@ #define F_DITTA 301 #define F_DITTA_DESCR 302 -#define F_TIPO 303 -#define F_ANNO 304 -#define F_PERIODO_M 305 -#define F_PERIODO_T 306 -#define F_PERIODO_A 307 -#define F_STATO 308 -#define F_TIPO_CF 309 -#define F_PARTITA_IVA 310 -#define F_PARTITA_DESC 311 -#define F_NUM_RIG 312 -#define F_RIEPILOGHI 313 +#define F_SEZIONE 303 +#define F_TIPO 304 +#define F_ANNO 305 +#define F_PERIODO_M 306 +#define F_PERIODO_T 307 +#define F_PERIODO_A 308 +#define F_STATO 309 +#define F_TIPO_CF 310 +#define F_PARTITA_IVA 311 +#define F_PARTITA_DESC 312 +#define F_NUM_RIG 313 +#define F_RIEPILOGHI 314 #define F_NATURA_TRANS 321 #define F_NATURA_DESCR 322 @@ -34,6 +35,12 @@ #define F_TRASPORTO_DESC 358 #define F_PERIODO_H 359 #define F_UMS 360 +#define F_CODSERV 361 +#define F_MODEROG 362 +#define F_MODINCPAG 363 +#define F_STATOINCPAG 364 #define GR_CESSIONI 1 #define GR_ACQUISTI 2 +#define GR_BENI 3 +#define GR_SERVIZI 4 diff --git a/src/in/in0600a.uml b/src/in/in0600a.uml index f0fe7fa1f..334fdae40 100755 --- a/src/in/in0600a.uml +++ b/src/in/in0600a.uml @@ -101,32 +101,26 @@ BEGIN WARNING "Anno non valido" END -LIST F_TIPOINTRA 1 7 +LIST F_SEZIONE 1 7 BEGIN - PROMPT 46 3 "Tipo Intra " - ITEM "B|Beni" MESSAGE ENABLE,-GR_BENI|DISABLE,GR_SERVIZI - ITEM "S|Servizi" MESSAGE DISABLE,-GR_BENI|ENABLE,GR_SERVIZI - KEY 1 - FIELD TIPOINTRA + PROMPT 46 3 "Sezione " + ITEM "1|Beni" MESSAGE ENABLE,GR_BENI@|DISABLE,GR_SERVIZI@ + ITEM "3|Servizi" MESSAGE DISABLE,GR_BENI@|ENABLE,GR_SERVIZI@ + FIELD SEZIONE END LIST F_TIPO 1 10 BEGIN PROMPT 67 3 "Tipo riepilogo " - ITEM "C|Cessioni" - MESSAGE "C",F_TIPO_CF|SHOW,GR_CESSIONI@|HIDE,GR_ACQUISTI@ - ITEM "A|Acquisti" - MESSAGE "F",F_TIPO_CF|SHOW,GR_ACQUISTI@|HIDE,GR_CESSIONI@ - KEY 1 + ITEM "C|Cessioni" MESSAGE "C",F_TIPO_CF|SHOW,GR_CESSIONI@|HIDE,GR_ACQUISTI@ + ITEM "A|Acquisti" MESSAGE "F",F_TIPO_CF|SHOW,GR_ACQUISTI@|HIDE,GR_CESSIONI@ FIELD TIPO END NUBER F_NUM_RIG 7 BEGIN PROMPT 1 4 "Riga di riepilogo " - USE LF_RIEPRETT - INPUT TIPOINTRA F_TIPO SELECT - INPUT TIPO F_TIPO SELECT + USE LF_RIEPRETT SELECT (SEZIONE=="1")||(SEZIONE=="3") INPUT ANNO F_ANNO SELECT INPUT PERIODO F_PERIODO_H SELECT INPUT NUMRIG F_NUM_RIG @@ -192,7 +186,6 @@ BEGIN FLAGS "D" END - STRING F_NATURA_TRANS 1 BEGIN PROMPT 1 8 "Natura transazione " @@ -205,6 +198,7 @@ BEGIN OUTPUT F_NATURA_DESCR S0 CHECKTYPE REQUIRED FIELD NATURA + GROUP GR_BENI END MEMO F_NATURA_DESCR 50 3 @@ -238,6 +232,7 @@ BEGIN MESSAGE DIRTY,F_NOMENCLATURA3 FIELD NOMENCL[1,4] WARNING "Nomenclatura combinata assente" + GROUP GR_BENI END STRING F_NOMENCLATURA2 2 @@ -248,6 +243,7 @@ BEGIN VALIDATE REQIF_FUNC 1 F_NOMENCLATURA3 MESSAGE DIRTY,F_NOMENCLATURA3 WARNING "Nomenclatura combinata assente" + GROUP GR_BENI END NUMBER F_NOMENCLATURA3 2 @@ -258,6 +254,7 @@ BEGIN CHECKTYPE NORMAL FIELD NOMENCL[7,8] WARNING "Nomenclatura combinata assente" + GROUP GR_BENI END STRING F_NOMENCL_DESC 40 @@ -279,6 +276,7 @@ BEGIN CHECKTYPE REQUIRED FIELD CONSEGNA WARNING "Condizione di consegna assente" + GROUP GR_BENI END STRING F_CONSEGNA_DESC 50 @@ -299,6 +297,7 @@ BEGIN CHECKTYPE REQUIRED FIELD TRASPORTO WARNING "Modo di trasporto assente" + GROUP GR_BENI END STRING F_TRASPORTO_DESC 50 @@ -311,13 +310,13 @@ END TEXT DLG_NULL BEGIN PROMPT 1 13 "Paese di destinazione" - GROUP GR_CESSIONI + GROUP GR_CESSIONI GR_BENI END TEXT DLG_NULL BEGIN PROMPT 1 13 "Paese di provenienza" - GROUP GR_ACQUISTI + GROUP GR_ACQUISTI GR_BENI END STRING F_PAESE 2 @@ -331,6 +330,7 @@ BEGIN OUTPUT F_PAESE CODTAB CHECKTYPE REQUIRED FIELD PAESE + GROUP GR_BENI WARNING "Paese assente" END @@ -341,19 +341,20 @@ BEGIN CHECKTYPE REQUIRED FLAGS "U" FIELD PAESEORIG + GROUP GR_BENI WARNING "Paese di origine assente" END TEXT DLG_NULL BEGIN PROMPT 46 13 "Provincia d'origine " - GROUP GR_CESSIONI + GROUP GR_CESSIONI GR_BENI END TEXT DLG_NULL BEGIN PROMPT 46 13 "Prov. destinazione " - GROUP GR_ACQUISTI + GROUP GR_ACQUISTI GR_BENI END STRING F_PROV 2 @@ -363,6 +364,7 @@ BEGIN FIELD PROV CHECTYPE REQUIRED WARNING "Provincia assente" + GROUP GR_BENI END CURRENCY F_AMM_LIRE 18 @@ -384,6 +386,7 @@ BEGIN OUTPUT F_VALUTA CODTAB FIELD CODVAL FLAGS "GUZ" + GROUP GR_BENI END CURRENCY F_AMM_VALUTA 18 @@ -392,12 +395,14 @@ BEGIN DRIVENBY F_VALUTA FIELD AMMVALUTA WARNING "Inserire l'ammontare in valuta" + GROUP GR_BENI END CURRENCY F_VALORE_STAT 18 BEGIN PROMPT 1 16 "Valore statistico " FIELD VALSTAT + GROUP GR_BENI END NUMBER F_MASSA_KG 18 5 @@ -405,6 +410,7 @@ BEGIN PROMPT 1 17 "Massa netta in Kg " PICTURE ".5" FIELD MASSAKG + GROUP GR_BENI END STRING F_UMS 2 @@ -419,6 +425,76 @@ BEGIN PICTURE ".5" FIELD MASSAUMS WARNING "Inserire la massa in unità supplementare" + GROUP GR_BENI +END + +STRING F_CODSERV 5 +BEGIN + PROMPT 1 18 + FIELD CODSERV + USE %CPA + INPUT CODTAB F_CODSERV + DISPLAY "Classificazione" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODSERV CODTAB + GROUP GR_SERVIZI +END + +LIST F_MODEROG 1 15 +BEGIN + PROMPT 1 19 "Modalità Erogazione" + ITEM "I|Unica soluzione" + ITEM "R|Più soluzioni" + FIELD MODEROG + GROUP GR_SERVIZI +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 20 "Modalità di incasso " + GROUP GR_CESSIONI GR_SERVIZI + FLAGS "G" +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 20 "Modalità di pagamento" + GROUP GR_ACQUISTI GR_BENI + FLAGS "G" +END + +LIST F_MODINCPAG 1 9 +BEGIN + PROMPT 20 20 "" + ITEM "B|Bonifico" + ITEM "A|Accredito" + ITEM "X|Altro" + FIELD MODINCPAG + GROUP GR_SERVIZI +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 21 "Stato di incasso " + GROUP GR_CESSIONI GR_SERVIZI +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 21 "Stato di pagamento " + GROUP GR_ACQUISTI GR_BENI +END + +STRING F_STATOINCPAG 2 +BEGIN + PROMPT 20 21 "" + USE %SCE + INPUT CODTAB F_STATOINCPAG + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_STATOINCPAG CODTAB + FIELD ISOINCPAG + GROUP GR_SERVIZI END BUTTON F_RIEPILOGHI 20 2 diff --git a/src/in/in0700.cpp b/src/in/in0700.cpp index 95ec7186f..af748b8f6 100755 --- a/src/in/in0700.cpp +++ b/src/in/in0700.cpp @@ -87,6 +87,7 @@ bool TRettifiche_mask::on_field_event(TOperable_field& o, TField_event e, long j break; default: const int pos = id2pos(dlg); + if (pos >= 0) set(dlg + F_STATO - O_STATO, fld(pos).get()); break; @@ -201,8 +202,7 @@ void TRettifiche_intra::init_modify_mode(TMask& m) const char* TRettifiche_intra::get_next_key() { TRectype& curr = _rel->curr(); - curr.put("TIPO", _msk->tipo()); - curr.put("ANNO", _msk->anno()); + curr.put("ANNO", _msk->anno()); curr.put("PERIODO", _msk->periodo_str()); TCursor cur(_rel, "", 1, &curr, &curr); const long items = cur.items(); @@ -213,8 +213,6 @@ const char* TRettifiche_intra::get_next_key() last_row = curr.get_int("NUMRIG"); } _str.cut(0); - _str.add(F_TIPO); - _str.add(curr.get("TIPO")); _str.add(F_ANNO); _str.add(curr.get("ANNO")); _str.add(F_PERIODO_M); diff --git a/src/in/in0700a.h b/src/in/in0700a.h index e003b10f8..2daa27a31 100755 --- a/src/in/in0700a.h +++ b/src/in/in0700a.h @@ -11,6 +11,7 @@ #define O_PARTITA_IVA 110 #define O_PARTITA_DESC 111 #define O_NUM_RIG 112 +#define O_SEZIONE 113 #define O_NATURA_TRANS 121 #define O_NOMENCLATURA 122 @@ -37,3 +38,13 @@ #define F_VALUTA 225 #define F_VALORE_STAT 226 #define F_NUMREG 229 +#define F_SEZIONE 230 +#define F_CODSERV 231 +#define F_MODEROG 232 +#define F_MODINCPAG 233 +#define F_STATOINCPAG 234 + +#define GR_CESSIONI 1 +#define GR_ACQUISTI 2 +#define GR_BENI 3 +#define GR_SERVIZI 4 diff --git a/src/in/in0700a.uml b/src/in/in0700a.uml index 5441d8ede..4b3d06b5c 100755 --- a/src/in/in0700a.uml +++ b/src/in/in0700a.uml @@ -79,15 +79,24 @@ BEGIN ITEM "01|Annuale" END -NUBER O_NUM_RIG 7 +LIST O_SEZIONE 1 7 +BEGIN + PROMPT 46 4 "Sezione " + ITEM "1|Beni" MESSAGE ENABLE,GR_BENI@|DISABLE,GR_SERVIZI@ + ITEM "3|Servizi" MESSAGE DISABLE,GR_BENI@|ENABLE,GR_SERVIZI@ + KEY 1 + FLAGS "D" +END + +NUMBER O_NUM_RIG 7 BEGIN PROMPT 63 4 "Riga " - USE LF_RIEPRETT - INPUT TIPO O_TIPO SELECT + USE LF_RIEPRETT SELECT (SEZIONE==#OSEZIONE)&&(TIPO==#O_TIPO) INPUT ANNO O_ANNO SELECT INPUT PERIODO O_PERIODO_M INPUT NUMRIG O_NUM_RIG DISPLAY "Tipo" TIPO + DISPLAY "Sezione" SEZIONE DISPLAY "Anno" ANNO DISPLAY "Periodo" PERIODO DISPLAY "Numero" NUMRIG @@ -102,6 +111,8 @@ BEGIN OUTPUT O_PERIODO_T PERIODO OUTPUT O_NUM_RIG NUMRIG OUTPUT O_STATO STATO + // OUTPUT O_TIPO TIPO + OUTPUT O_SEZIONE SEZIONE OUTPUT O_PARTITA_IVA PIVA OUTPUT O_NATURA_TRANS NATURA OUTPUT O_NOMENCLATURA NOMENCL @@ -199,11 +210,8 @@ END LIST F_TIPO 1 10 BEGIN PROMPT 2 12 "Tipo " - ITEM "D|Cessioni" - MESSAGE "C",F_TIPO_CF|"C",O_TIPO - ITEM "B|Acquisti" - MESSAGE "F",F_TIPO_CF|"A",O_TIPO - KEY 1 + ITEM "A|Cessioni" MESSAGE "C",F_TIPO_CF|"C",O_TIPO|SHOW,GR_CESSIONI@|HIDE,GR_ACQUISTI@ + ITEM "C|Acquisti" MESSAGE "F",F_TIPO_CF|"A",O_TIPO|HIDE,GR_CESSIONI@|SHOW,GR_ACQUISTI@ FIELD TIPO END @@ -242,10 +250,19 @@ BEGIN KEY 1 END +LIST F_SEZIONE 1 7 +BEGIN + PROMPT 46 12 "Sezione" + ITEM "2|Beni" MESSAGE ENABLE,GR_BENI@|DISABLE,GR_SERVIZI@|"2",O_SEZIONE + ITEM "4|Servizi" MESSAGE DISABLE,GR_BENI@|ENABLE,GR_SERVIZI@|"4",O_SEZIONE + KEY 1 + FIELD SEZIONE +END + NUBER F_NUM_RIG 7 BEGIN PROMPT 63 12 "Riga " - USE LF_RIEPRETT + USE LF_RIEPRETT (SEZIONE=="2")||(SEZIONE=="4") INPUT TIPO F_TIPO SELECT INPUT ANNO F_ANNO SELECT INPUT PERIODO F_PERIODO_M @@ -322,6 +339,7 @@ BEGIN DISPLAY "Descrizione@70" S0 OUTPUT F_NATURA_TRANS CODTAB FIELD NATURA + GROUP GR_BENI END NUMBER F_NOMENCLATURA 8 @@ -334,6 +352,7 @@ BEGIN OUTPUT F_NOMENCLATURA CODTAB FIELD NOMENCL WARNING "Nomenclatura combinata assente" + GROUP GR_BENI END LIST F_SEGNO 1 @@ -361,6 +380,7 @@ BEGIN OUTPUT F_VALUTA CODTAB CHECKTYPE NORMAL FIELD CODVAL + GROUP GR_BENI END CURRENCY F_AMM_VALUTA 18 @@ -368,17 +388,88 @@ BEGIN PROMPT 59 16 "" DRIVENBY F_VALUTA FIELD AMMVALUTA + GROUP GR_BENI END CURRENCY F_VALORE_STAT 18 BEGIN PROMPT 2 17 "Valore statistico " FIELD VALSTAT + GROUP GR_BENI +END + +STRING F_CODSERV 5 +BEGIN + PROMPT 1 18 + FIELD CODSERV + USE %CPA + INPUT CODTAB F_CODSERV + DISPLAY "Classificazione" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODSERV CODTAB + GROUP GR_SERVIZI +END + +LIST F_MODEROG 1 15 +BEGIN + PROMPT 1 19 "Modalità Erogazione" + ITEM "I|Unica soluzione" + ITEM "R|Più soluzioni" + FIELD MODEROG + GROUP GR_SERVIZI +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 20 "Modalità di incasso " + GROUP GR_CESSIONI GR_SERVIZI + FLAGS "G" +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 20 "Modalità di pagamento" + GROUP GR_ACQUISTI GR_BENI + FLAGS "G" +END + +LIST F_MODINCPAG 1 9 +BEGIN + PROMPT 20 20 "" + ITEM "B|Bonifico" + ITEM "A|Accredito" + ITEM "X|Altro" + FIELD MODINCPAG + GROUP GR_SERVIZI +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 21 "Stato di incasso " + GROUP GR_CESSIONI GR_SERVIZI +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 21 "Stato di pagamento " + GROUP GR_ACQUISTI GR_BENI +END + +STRING F_STATOINCPAG 2 +BEGIN + PROMPT 20 21 "" + USE %SCE + INPUT CODTAB F_STATOINCPAG + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_STATOINCPAG CODTAB + FIELD ISOINCPAG + GROUP GR_SERVIZI END NUMBER F_NUMREG 7 BEGIN - PROMPT 53 17 "Numero movimento " + PROMPT 2 22 "Numero movimento " FIELD NUMREG FLAGS "D" END diff --git a/src/in/inlib01.cpp b/src/in/inlib01.cpp index 75456f998..b21becb1e 100755 --- a/src/in/inlib01.cpp +++ b/src/in/inlib01.cpp @@ -18,9 +18,8 @@ TIntra_context::TIntra_context() { - _tipointra = 'B'; _tipo = 'C'; _freq = 'T'; _anno = 1999; _periodo = 1; - _progr = _righe_riep = _righe_rett = 0L; + _progr = 0L; // Intra 12/13 _tInvioIntra = _Intra12; @@ -33,36 +32,25 @@ TIntra_context::TIntra_context() // TIntra_frequency /////////////////////////////////////////////////////////// -char TIntra_frequency::frequenza(int a, char t) const +char TIntra_frequency::frequenza(int a, const char t) const { - switch (t) - { - case 'A': break; - case 'C': break; - case 'B': t = 'A'; break; // Rettifiche su Acquisti - case 'D': t = 'C'; break; // Rettifiche su Cessioni - default : break; - } - - const TDate d(TODAY); if (a <= 0) - a = d.year(); - if (a < d.year()) + a = today.year(); + if (a < today.year()) { TLocalisamfile riep(LF_RIEPRETT); riep.put("TIPO", t); riep.put("ANNO", a); if (riep.read(_isgteq) == NOERR) { - if (riep.get_char("TIPO") == t && riep.get_int("ANNO") == a) + if (riep.get(RIEPINTRA_TIPO) == t && riep.get_int(RIEPINTRA_ANNO) == a) { - const char freq = riep.get_char("FREQUENZA"); + const char freq = riep.get_char(RIEPINTRA_FREQUENZA); if (freq > ' ') - return freq; + return freq; } } } - return (t == 'A') ? _freq_acq : _freq_ces; } @@ -120,18 +108,12 @@ void TIntra_mask::on_firm_change() _freq.update(); } -char TIntra_mask::tipo() const -{ - short id = type_field(); - char t = get(id)[0]; - return t; -} char TIntra_mask::frequenza(int a, char t) const { if (a <= 0) a = anno(); - if (t < 'A' || t > 'D') + if (t < 'A') t = tipo(); return _freq.frequenza(a, t); } @@ -188,166 +170,126 @@ TIntra_mask::TIntra_mask(const char* name) on_firm_change(); } -/////////////////////////////////////////////////////////// -// TDati_riepilogo -/////////////////////////////////////////////////////////// - -class TDati_riepilogo : public TSortable -{ - TToken_string _key; - TCurrency _ammlire, _ammvaluta; - real _valstat, _massakg, _massaums; - long _numreg; - -protected: - virtual TObject* dup() const { return new TDati_riepilogo(*this); } - virtual int compare(const TSortable& s) const; - -public: - TDati_riepilogo& operator +=(const TDati_riepilogo& r); - void write(TRectype& rec) const; - - const TString& tipo_intra(TString& c) const { _key.get(0, c); return c; } - const TString& stato(TString& c) const { _key.get(1, c); return c; } - const TString& partita_iva(TString& c) const { _key.get(2, c); return c; } - const TString& natura(TString& c) const { _key.get(4, c); return c; } - const TString& nomenclatura(TString& c) const { _key.get(5, c); return c; } - const TString& consegna(TString& c) const { _key.get(6, c); return c; } - const TString& trasporto(TString& c) const { _key.get(7, c); return c; } - const TString& paese(TString& c) const { _key.get(8, c); return c; } - const TString& paese_orig(TString& c) const { _key.get(9, c); return c; } - const TString& provincia(TString& c) const { _key.get(10, c); return c; } - - TDati_riepilogo(const TDati_riepilogo& r); - TDati_riepilogo(const TToken_string& key, const TRectype& rec, const TString& codval); - virtual ~TDati_riepilogo() { } -}; - -int TDati_riepilogo::compare(const TSortable& s) const -{ - const TDati_riepilogo& r = (const TDati_riepilogo&)s; - return _key.compare(r._key); -} - -TDati_riepilogo& TDati_riepilogo::operator +=(const TDati_riepilogo& r) -{ - _ammlire += r._ammlire; - _ammvaluta += r._ammvaluta; - _valstat += r._valstat; - _massakg += r._massakg; - _massaums += r._massaums; - return *this; -} - -void TDati_riepilogo::write(TRectype& rec) const -{ - TString str; - - rec.put("TIPOINTRA", tipo_intra(str)); - rec.put("STATO", stato(str)); - rec.put("PIVA", partita_iva(str)); - rec.put("NATURA", natura(str)); - rec.put("NOMENCL", nomenclatura(str)); - rec.put("CONSEGNA", consegna(str)); - rec.put("TRASPORTO", trasporto(str)); - rec.put("PAESE", paese(str)); - rec.put("PAESEORIG", paese_orig(str)); - rec.put("PROV", provincia(str)); - - rec.put("AMMLIRE", _ammlire.get_num()); - if (_ammvaluta.is_zero() || _ammvaluta.is_firm_value()) - { - rec.zero("CODVAL"); // Altrimenti genera falsi codici valuta EUR ... - rec.zero("AMMVALUTA"); // ... con importi nulli - } - else - { - rec.put("CODVAL", _ammvaluta.get_value()); - rec.put("AMMVALUTA", _ammvaluta.get_num()); - } - rec.put("VALSTAT", _valstat); - rec.put("MASSAKG", _massakg); - rec.put("MASSAUMS", _massaums); - rec.put("NUMREG", _numreg); -} - -TDati_riepilogo::TDati_riepilogo(const TDati_riepilogo& r) -: _key(r._key), _valstat(r._valstat), - _ammlire(r._ammlire), _ammvaluta(r._ammvaluta), - _massakg(r._massakg), _massaums(r._massaums) -{ } - -TDati_riepilogo::TDati_riepilogo(const TToken_string& key, - const TRectype& rec, - const TString& codval) -: _key(key), _ammlire(rec.get_real("AMMLIRE")), - _ammvaluta(rec.get_real("AMMVALUTA"), codval), - _valstat(rec.get_real("VALSTAT")), - _massakg(rec.get_real("MASSAKG")), - _massaums(rec.get_real("MASSAUMS")), - _numreg(rec.get_long("NUMREG")) -{ } - /////////////////////////////////////////////////////////// -// TRiepiloghi +// TRiepiloghi_Intra /////////////////////////////////////////////////////////// -class TRiepiloghi : public TObject +class TRiepiloghi_Intra : public TObject { - TPointer_array _arr; TAssoc_array _ass; public: - void destroy() { _arr.destroy(); _ass.destroy(); } - void add(const TRectype& row, const TRectype& head, const TRectype& mov); + void destroy() { _ass.destroy(); } + void add(const TRectype& row, const TRectype& head, int peri, char freq); - int items() const { return _arr.items(); } - int sort() { _arr.sort(); return items(); } - - const TDati_riepilogo& operator[](int r) const - { return (const TDati_riepilogo&)_arr[r]; } -}; + int items() const { return _ass.items(); } + int write(int from = 1); + }; -void TRiepiloghi::add(const TRectype& row, const TRectype& head, const TRectype& mov) +int TRiepiloghi_Intra::write(int from) +{ + TString_array keys; + TLocalisamfile riep(LF_RIEPRETT); + TProgress_monitor pi(items(), TR("Scrittura riepiloghi intra..."), false); + + _ass.get_keys(keys); + keys.sort(); + FOR_EACH_ARRAY_ITEM(keys, r, k) + { + TString * key = (TString *) k; + TRectype * rec = (TRectype *) _ass.objptr(*key); + + pi.addstatus(1L); + rec->put(RIEPINTRA_NUMRIG, r + from); + + const int err = rec->write_rewrite(riep); + + if (err != NOERR) + error_box(FR("Errore %d durante la scrittura dei riepiloghi riga %d"), err, r + from); + } + return from + items(); +} + +void TRiepiloghi_Intra::add(const TRectype& row, const TRectype& head, int peri, char freq) { TString8 cod; cod << head.get_char(INTRA_TIPOCF) << '|' << head.get(INTRA_CODCF); const TRectype& clifo = cache().get(LF_CLIFO, cod); - TString4 codval = head.get(MOV_CODVAL); - const TString4 tipointra = row.get(RINTRA_TIPOINTRA); - + TString4 codval = head.get(INTRA_CODVAL); + if (::is_euro_value(codval)) codval.cut(0); - + + TRectype rec(LF_RIEPRETT); + const TString4 tipointra = row.get(RINTRA_TIPOINTRA); + const TString4 tipo = head.get(INTRA_TIPOMOV); TToken_string key; + + key.add(head.get(INTRA_TIPOMOV)); key.add(tipointra); key.add(clifo.get(CLI_STATOPAIV)); key.add(clifo.get(CLI_PAIV)); key.add(codval); // Non e' chiaro se raggruppare per valuta! key.add(row.get(RINTRA_NATURA)); - key.add(row.get(tipointra == "B" ? RINTRA_NOMENCL : RINTRA_CODSERV)); - key.add(row.get(RINTRA_CONSEGNA)); - key.add(row.get(RINTRA_TRASPORTO)); - key.add(row.get(RINTRA_PAESE)); - key.add(row.get(RINTRA_PAESEORIG)); // Campo solo per Acquisti - key.add(row.get(RINTRA_PROV)); - - TDati_riepilogo* data = (TDati_riepilogo*)_ass.objptr(key); - - if (data == nullptr) + if (tipointra == "B") { - data = new TDati_riepilogo(key, row, codval); - _ass.add(key, data); - _arr.add(data); + key.add(row.get(RINTRA_NOMENCL)); + key.add(row.get(RINTRA_CONSEGNA)); + key.add(row.get(RINTRA_TRASPORTO)); + key.add(row.get(RINTRA_PAESE)); + key.add(row.get(RINTRA_PAESEORIG)); // Campo solo per Acquisti + key.add(row.get(RINTRA_PROV)); } else { - const TDati_riepilogo dr(key, row, codval); - *data += dr; + + key.add(row.get(RINTRA_CODSERV)); + key.add(row.get(RINTRA_MODEROG)); + key.add(row.get(RINTRA_MODINCPAG)); + key.add(row.get(RINTRA_ISOINCPAG)); + } + + rec.put(RIEPINTRA_SEZIONE, tipointra == "B" ? 1 : 3); + rec.put(RIEPINTRA_TIPO, tipo); + rec.put(RIEPINTRA_ANNO, head.get_date(INTRA_DATAREG).year()); + rec.put(RIEPINTRA_PERIODO, peri); + rec.zero(RIEPINTRA_NUMRIG); + rec.put(RIEPINTRA_STATO, clifo.get(CLI_STATOPAIV)); + rec.put(RIEPINTRA_PIVA, clifo.get(CLI_PAIV)); + rec.put(RIEPINTRA_NATURA, row.get(RINTRA_NATURA)); + rec.put(RIEPINTRA_NOMENCL, row.get(RINTRA_NOMENCL)); + rec.put(RIEPINTRA_CONSEGNA, row.get(RINTRA_CONSEGNA)); + rec.put(RIEPINTRA_TRASPORTO, row.get(RINTRA_TRASPORTO)); + rec.put(RIEPINTRA_PAESE, row.get(RINTRA_PAESE)); + rec.put(RIEPINTRA_PAESEORIG, row.get(RINTRA_PAESEORIG)); + rec.put(RIEPINTRA_PROV, row.get(RINTRA_PROV)); + rec.put(RIEPINTRA_AMMLIRE, row.get(RINTRA_AMMLIRE)); + rec.put(RIEPINTRA_AMMVALUTA, row.get(RINTRA_AMMVALUTA)); + rec.put(RIEPINTRA_CODVAL, codval); + rec.put(RIEPINTRA_VALSTAT, row.get(RINTRA_VALSTAT)); + rec.put(RIEPINTRA_MASSAKG, row.get(RINTRA_MASSAKG)); + rec.put(RIEPINTRA_MASSAUMS, row.get(RINTRA_MASSAUMS)); + rec.put(RIEPINTRA_FREQUENZA, freq); + rec.put(RIEPINTRA_CODSERV, row.get(RINTRA_CODSERV)); + rec.put(RIEPINTRA_MODEROG, row.get(RINTRA_MODEROG)); + rec.put(RIEPINTRA_MODINCPAG, row.get(RINTRA_MODINCPAG)); + rec.put(RIEPINTRA_ISOINCPAG, row.get(RINTRA_ISOINCPAG)); + + TRectype * data = (TRectype *)_ass.objptr(key); + + if (data == nullptr) + _ass.add(key, rec); + else + { + data->add(RIEPINTRA_AMMLIRE, row.get_real(RINTRA_AMMLIRE)); + data->add(RIEPINTRA_AMMVALUTA, row.get_real(RINTRA_AMMVALUTA)); + data->add(RIEPINTRA_VALSTAT, row.get_real(RINTRA_VALSTAT)); + data->add(RIEPINTRA_MASSAKG, row.get_real(RINTRA_MASSAKG)); + data->add(RIEPINTRA_MASSAUMS, row.get_real(RINTRA_MASSAUMS)); } } -class TRettifiche : public TObject +class TRettifiche_Intra : public TObject { TArray _rett; TIntra_frequency _freq; @@ -360,11 +302,10 @@ public: long nc2ft(long numreg_nc) const; int add(const TRectype& rintra, const TRectype& mov, long nr_fattura); int load_manual_rett(char tipo, int anno, int periodo); - int sort(); - const TRectype& operator[](int r) const { return (const TRectype&)_rett[r]; } + int write(int from = 1); }; -long TRettifiche::nc2ft(long numreg_nc) const +long TRettifiche_Intra::nc2ft(long numreg_nc) const { long numreg_ft = 0L; @@ -373,10 +314,6 @@ long TRettifiche::nc2ft(long numreg_nc) const games.add_numreg(numreg_nc); // Carica le partite in cui è coinvolta questa nota di credito (sempre e solo una!) for (TPartita* p = games.first(); p != nullptr && numreg_ft<=0; p = games.next()) { -#ifdef DBG - if (p->conto().codclifo() == 13201) - int farmoki = 1; -#endif for (int r = p->prima_fattura(); r >= 0 && r <= p->last(); r = p->succ(r)) { const TRiga_partite& partita = p->riga(r); @@ -396,7 +333,7 @@ long TRettifiche::nc2ft(long numreg_nc) const return numreg_ft; } -int TRettifiche::load_manual_rett(char tipo, int anno, int periodo) +int TRettifiche_Intra::load_manual_rett(char tipo, int anno, int periodo) { _rett.destroy(); tipo = tipo < 'C' ? 'B' : 'D'; // forzatura tipo = B o D @@ -413,7 +350,7 @@ int TRettifiche::load_manual_rett(char tipo, int anno, int periodo) return _rett.items(); } -long TRettifiche::rett2riep(const TRectype& rett) const +long TRettifiche_Intra::rett2riep(const TRectype& rett) const { TString query, filter; @@ -429,22 +366,23 @@ long TRettifiche::rett2riep(const TRectype& rett) const return nriga; } -int TRettifiche::add(const TRectype& rintra, const TRectype& mov, long nr_fattura) +int TRettifiche_Intra::add(const TRectype& rintra, const TRectype& mov, long nr_fattura) { CHECKD(rintra.num() == LF_RINTRA, "Record non INTRA ", rintra.num()); const TDate datareg = mov.get(MOV_DATAREG); TRectype rett(LF_RIEPRETT); - const char tipo = mov.get_char(MOV_TIPO)=='F' ? 'B' : 'D'; + const char tipo = mov.get_char(INTRA_TIPOMOV); const TString4 tipointra = rintra.get(RINTRA_TIPOINTRA); - rett.put(RIEPINTRA_TIPOINTRA, tipointra); - rett.put(RIEPINTRA_TIPO, tipo); rett.put(RIEPINTRA_ANNO, datareg.year()); rett.put(RIEPINTRA_PERIODO, _freq.date2periodo(datareg, tipo)); - rett.put(RIEPINTRA_NUMRIG, 0); // Auto + rett.zero(RIEPINTRA_NUMRIG); // Auto - TString8 cod; cod << mov.get_char(MOV_TIPO) << '|' << mov.get(MOV_CODCF); + rett.put(RIEPINTRA_SEZIONE, tipointra ? 2 : 4); + rett.put(RIEPINTRA_TIPO, tipo); + + TString8 cod; cod << mov.get_char(INTRA_TIPOCF) << '|' << mov.get(INTRA_CODCF); const TRectype& clifo = cache().get(LF_CLIFO, cod); TString4 codval = mov.get(MOV_CODVALI); @@ -454,10 +392,7 @@ int TRettifiche::add(const TRectype& rintra, const TRectype& mov, long nr_fattur rett.put(RIEPINTRA_STATO, clifo.get(CLI_STATOPAIV)); rett.put(RIEPINTRA_PIVA, clifo.get(CLI_PAIV)); rett.put(RIEPINTRA_NATURA, rintra.get(RINTRA_NATURA)); - if (tipointra == "B") - rett.put(RIEPINTRA_NOMENCL, rintra.get(RINTRA_NOMENCL)); - else - rett.put(RIEPINTRA_CODSERV, rintra.get(RINTRA_CODSERV)); + rett.put(RIEPINTRA_NOMENCL, rintra.get(RINTRA_NOMENCL)); rett.put(RIEPINTRA_CONSEGNA, rintra.get(RINTRA_CONSEGNA)); rett.put(RIEPINTRA_TRASPORTO, rintra.get(RINTRA_TRASPORTO)); rett.put(RIEPINTRA_PAESE, rintra.get(RINTRA_PAESE)); @@ -467,20 +402,16 @@ int TRettifiche::add(const TRectype& rintra, const TRectype& mov, long nr_fattur rett.put(RIEPINTRA_PROV, rintra.get(RINTRA_PROV)); } - real euri = rintra.get_real(RINTRA_AMMLIRE); + const real euri = rintra.get_real(RINTRA_AMMLIRE); - rett.put(RIEPINTRA_SEGNORETT, ((tipointra == "S") || (euri > ZERO)) ? '+' : '-'); - if (tipointra == "B") - euri = abs(euri); - rett.put(RIEPINTRA_AMMLIRE, euri); + rett.put(RIEPINTRA_SEGNORETT, euri > ZERO ? '+' : '-'); + rett.put(RIEPINTRA_AMMLIRE, abs(euri)); if (codval.full()) { rett.put(RIEPINTRA_CODVAL, codval); - real impval = rintra.get_real(RINTRA_AMMVALUTA); + const real impval = rintra.get_real(RINTRA_AMMVALUTA); - if (tipointra == "B") - impval = abs(impval); - rett.put(RIEPINTRA_AMMVALUTA, impval); + rett.put(RIEPINTRA_AMMVALUTA, abs(impval)); } rett.put(RIEPINTRA_VALSTAT, abs(rintra.get_real(RINTRA_VALSTAT))); @@ -488,6 +419,7 @@ int TRettifiche::add(const TRectype& rintra, const TRectype& mov, long nr_fattur rett.put(RIEPINTRA_MASSAUMS, rintra.get(RINTRA_MASSAUMS)); rett.put(RIEPINTRA_NUMREG, mov.get(MOV_NUMREG)); + rett.put(RIEPINTRA_CODSERV, rintra.get(RINTRA_CODSERV)); rett.put(RIEPINTRA_MODEROG, rintra.get(RINTRA_MODEROG)); rett.put(RIEPINTRA_MODINCPAG, rintra.get(RINTRA_MODINCPAG)); rett.put(RIEPINTRA_MODEROG, rintra.get(RINTRA_MODEROG)); @@ -501,15 +433,24 @@ int TRettifiche::add(const TRectype& rintra, const TRectype& mov, long nr_fattur return _rett.add(rett); } -int TRettifiche::sort() +int TRettifiche_Intra::write(int from) { _rett.pack(); - for (int i = 0; i < _rett.items(); i++) + + const int items = _rett.items(); + TLocalisamfile riep(LF_RIEPRETT); + + FOR_EACH_ARRAY_ITEM(_rett, r, data) { - TRectype* r = (TRectype*)_rett.objptr(i); - r->put(RIEPINTRA_NUMRIG, i+1); + TRectype* rec = (TRectype*) data; + + rec->put(RIEPINTRA_NUMRIG, r + from); + const int err = rec->write_rewrite(riep); + + if (err != NOERR) + error_box(FR("Errore %d durante la scrittura dei riepiloghi riga %d"), err, r + from); } - return _rett.items(); + return from + items; } /////////////////////////////////////////////////////////// @@ -518,8 +459,8 @@ int TRettifiche::sort() class TGenerazione_mask : public TIntra_mask { - TRiepiloghi _riep; - TRettifiche _rett; + TRiepiloghi_Intra _riep; + TRettifiche_Intra _rett; protected: virtual short type_field() const { return R_TIPO; } @@ -626,7 +567,7 @@ bool TGenerazione_mask::genera_riepiloghi() if (is_rettifica) _rett.add(row, mov, numreg_ft); else - _riep.add(row, head, mov); + _riep.add(row, head, peri, freq); rowok = rel.next_match(LF_RINTRA); } } @@ -637,64 +578,29 @@ bool TGenerazione_mask::genera_riepiloghi() TLocalisamfile riep(LF_RIEPRETT); - const int riepiloghi = _riep.sort(); - if (riepiloghi > 0) - { - TProgress_monitor pi(riepiloghi, TR("Scrittura riepiloghi intra..."), false); - - riep.put(RIEPINTRA_TIPO, tipo); - riep.put(RIEPINTRA_ANNO, anno_r); - riep.put(RIEPINTRA_PERIODO, peri); - riep.put(RIEPINTRA_NUMRIG, 1); - - int err = riep.read(); - - for (int r = 0; pi.add_status() && r < riepiloghi; r++) - { - riep.put(RIEPINTRA_TIPO, tipo); - riep.put(RIEPINTRA_ANNO, anno_r); - riep.put(RIEPINTRA_PERIODO, peri); - riep.put(RIEPINTRA_NUMRIG, r+1); - _riep[r].write(riep.curr()); - riep.put(RIEPINTRA_FREQUENZA, freq); - - const int werr = err == NOERR ? riep.rewrite() : riep.write(); - if (werr != NOERR) - return error_box(FR("Errore %d durante la scrittura dei riepiloghi"), werr); - - if (err == NOERR) - { - err = riep.next(); - if (err == NOERR && riep.get_long("NUMRIG") == 1) - err = _iseof; - } - } - } + const int riepiloghi = _riep.items(); + int last_row = 0; - // Cancella eventuali altri riepiloghi del periodo + if (riepiloghi > 0) + last_row = _riep.write(); + + const int rettifiche = _rett.items(); + + if (rettifiche > 0) + last_row = _rett.write(last_row); + + + // cancella gli altri event TString query; + query << "USE " << LF_RIEPRETT - << "\nFROM TIPO=" << tipo << " ANNO=" << anno_r << " PERIODO=" << peri << " NUMRIG=" << long(riepiloghi+1) + << "\nFROM TIPO=" << tipo << " ANNO=" << anno_r << " PERIODO=" << peri << " NUMRIG=" << long(last_row + 1) << "\nTO TIPO=" << tipo << " ANNO=" << anno_r << " PERIODO=" << peri; TISAM_recordset riepset(query); + for (bool ok = riepset.move_first(); ok; ok = riepset.move_next()) riepset.cursor()->file().remove(); - const int rettifiche = _rett.sort(); - if (rettifiche > 0) - { - for (int r = 0; r < rettifiche; r++) - _rett[r].write_rewrite(riep); - } - - // Cancella eventuali altre rettifiche del periodo - query.cut(0) << "USE " << LF_RIEPRETT - << "\nFROM TIPO=" << char(tipo+1) << " ANNO=" << anno_r << " PERIODO=" << peri << " NUMRIG=" << long(rettifiche+1) - << "\nTO TIPO=" << char(tipo+1) << " ANNO=" << anno_r << " PERIODO=" << peri; - TISAM_recordset rettset(query); - for (bool ok = rettset.move_first(); ok; ok = rettset.move_next()) - rettset.cursor()->file().remove(); - return true; } diff --git a/src/in/inlib01.h b/src/in/inlib01.h index c74f71cf6..d55046728 100755 --- a/src/in/inlib01.h +++ b/src/in/inlib01.h @@ -9,17 +9,11 @@ typedef enum { _Intra12, _Intra13 } Intratype; struct TIntra_context { - char _tipointra; char _tipo; long _progr; char _freq; int _anno; int _periodo; - long _righe_riep; - real _totale_riep; - long _righe_rett; - real _totale_rett; - // Intra 12/13 Intratype _tInvioIntra; int _nb; @@ -55,7 +49,7 @@ protected: virtual int anno() const pure; public: - char tipo() const; + const char tipo() const { return get(type_field())[0]; } int periodo() const; virtual char frequenza(int anno = 0, char tipo = '\0') const; int date2periodo(const TDate& d) const; diff --git a/src/in/inmenu.men b/src/in/inmenu.men index 8ac54c1db..e77f05131 100755 --- a/src/in/inmenu.men +++ b/src/in/inmenu.men @@ -13,11 +13,12 @@ Picture = Module = 0 Flags = "" Item_01 = "Nomenclatura combinata", "ba3 -0 %noc", "" -Item_02 = "Stati CEE", "ba3 -0 %sce", "" -Item_03 = "Natura Transazione", "ba3 -0 %int", "" -Item_04 = "Condizioni di consegna", "ba3 -0 %icc", "" -Item_05 = "Modalita' di trasporto", "ba3 -0 %imt", "" -Item_06 = "Classificazione prestazioni dei servizi", "ba3 -0 %cpa", "" +Item_02 = "Classificazione prestazioni dei servizi", "ba3 -0 %cpa", "" +Item_03 = "Stati CEE", "ba3 -0 %sce", "" +Item_04 = "Natura Transazione", "ba3 -0 %int", "" +Item_05 = "Condizioni di consegna", "ba3 -0 %icc", "" +Item_06 = "Modalita' di trasporto", "ba3 -0 %imt", "" +Item_07 = "Classificazione prestazioni dei servizi", "ba3 -0 %cpa", "" [INMENU_003] Caption = "Stampa Tabelle" @@ -25,11 +26,12 @@ Picture = Module = 0 Flags = "" Item_01 = "Nomenclatura combinata", "ba3 -1 %noc", "" -Item_02 = "Stati CEE", "ba3 -1 %sce", "" -Item_03 = "Natura Transazione", "ba3 -1 %int", "" -Item_04 = "Condizioni di consegna", "ba3 -1 %icc", "" -Item_05 = "Modalita' di trasporto", "ba3 -1 %imt", "" -Item_06 = "Classificazione prestazioni dei servizi", "ba3 -1 %cpa", "" +Item_02 = "Nomenclatura combinata", "ba3 -1 %noc", "" +Item_03 = "Stati CEE", "ba3 -1 %sce", "" +Item_04 = "Natura Transazione", "ba3 -1 %int", "" +Item_05 = "Condizioni di consegna", "ba3 -1 %icc", "" +Item_06 = "Modalita' di trasporto", "ba3 -1 %imt", "" +Item_07 = "Classificazione prestazioni dei servizi", "ba3 -1 %cpa", "" [INMENU_004] Caption = "Gestione movimenti" diff --git a/src/in/instird.rep b/src/in/instird.rep index 8ecdc7523..f099d8ebd 100755 --- a/src/in/instird.rep +++ b/src/in/instird.rep @@ -19,22 +19,34 @@ -