From d74548ab0403adb669108446fe1500f6ae72d0be Mon Sep 17 00:00:00 2001 From: Alessandro Bonazzi Date: Mon, 27 Jul 2020 08:52:10 +0200 Subject: [PATCH] Patch level : 12.0 982 Files correlati : ve0.exe ve1.exe ve5.exe ve6.exe ve0200b.msk Commento : Ristrutturato modulo li --- src/ve/ve6200.cpp | 764 +++++++++++++++++++++++---------------------- src/ve/ve6200.h | 2 +- src/ve/velib03.cpp | 16 +- 3 files changed, 393 insertions(+), 389 deletions(-) diff --git a/src/ve/ve6200.cpp b/src/ve/ve6200.cpp index 6a81fe856..dcaffd719 100755 --- a/src/ve/ve6200.cpp +++ b/src/ve/ve6200.cpp @@ -27,7 +27,7 @@ bool TFatturazione_bolle_app::create() } bool TFatturazione_bolle_app::process(TProgress_monitor& iw, TElaborazione & eld, - TLista_documenti& din, const TDate& data_elab) + TLista_documenti& din, const TDate& data_elab, TLog_report & log) { // Crea documenti di output TLista_documenti dout; @@ -37,7 +37,8 @@ bool TFatturazione_bolle_app::process(TProgress_monitor& iw, TElaborazione & eld TString msg; msg << din.items() << TR(" documenti raggruppati in ") << dout.items(); - iw.set_text(msg); // Messaggio sul cliente + log.log(0, msg); + iw.set_text(msg); // Messaggio sul cliente do_events(); // Attende visualizzazione lint_batch(true); lint_reset_msg(); @@ -57,411 +58,427 @@ bool TFatturazione_bolle_app::process(TProgress_monitor& iw, TElaborazione & eld const TString & str = lint_get_msg(); if (str.full()) - ok = error_box(str); + { + TToken_string errmsg(str, '\n'); + const int items = errmsg.items(); + + for (int i = 0; i < items; i++) + log.log(0, errmsg.get()); + } } return ok; } void TFatturazione_bolle_app::process_by_cli(const TMask& m) { - TProgress_monitor iw(0, "Inizializzazione...\n "); - - const TDate data_elab = m.get_date(F_DATA_ELAB); - const int anno = data_elab.year(); - - const long dc = m.get_long(F_CODICE_CLIFO_DA); - const long ac = m.get_long(F_CODICE_CLIFO_A); - const int da = m.get_int(F_CODICE_AGENTE_DA); - const int aa = m.get_int(F_CODICE_AGENTE_A); - const TString16 dz(m.get(F_CODICE_ZONA_DA)); - const TString16 az(m.get(F_CODICE_ZONA_A)); - - const TDate dd = m.get_date(F_DATA_DOCUMENTO_DA); - TString st_da = m.get(F_DATA_DOCUMENTO_A); // qui verificare - const TDate ad = st_da.not_empty() ? (TDate)(const char*)st_da : data_elab; - const TString& codnum = m.get(F_CODICE_NUMERAZIONE); - const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA); - const long an = m.get_long(F_NUMERO_DOCUMENTO_A); - - TElaborazione& eld = *elab(m.get(F_CODICE_ELAB)); - TToken_string tipidoc(24), statidoc(10); - eld.tipi_stati_iniziali(tipidoc, statidoc); - - TTipo_documento t(eld.tipo_iniziale(0)); - char tipocf(t.tipocf()); - TLista_cf clienti(tipocf); + TLog_report log; + { + TProgress_monitor iw(0, "Inizializzazione...\n "); + const TDate data_elab = m.get_date(F_DATA_ELAB); + const int anno = data_elab.year(); - const int tot_cli = clienti.leggi_doc(eld, dd, ad, dc, ac, da, aa, dz, az); - - TString msg(80); - iw.set_max(tot_cli); - for (int c = 0; c < tot_cli; c++) - { - const long codcli = clienti[c]; // Codice cliente in esame - msg = TR("Elaborazione documenti del cliente "); - msg << codcli << " ..."; - iw.set_text(msg); // Messaggio sul cliente - do_events(); // Attende visualizzazione + const long dc = m.get_long(F_CODICE_CLIFO_DA); + const long ac = m.get_long(F_CODICE_CLIFO_A); + const int da = m.get_int(F_CODICE_AGENTE_DA); + const int aa = m.get_int(F_CODICE_AGENTE_A); + const TString16 dz(m.get(F_CODICE_ZONA_DA)); + const TString16 az(m.get(F_CODICE_ZONA_A)); - TLista_documenti din; // Legge tutti i documenti di input - din.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an); - if (din.items() > 0) - { - if (m.get(F_ORDINAMENTO) == "Z") - din.sort(DOC_ZONA "|" DOC_DATADOC "|" DOC_NDOC); - bool ok = process(iw, eld, din, data_elab); - if (!ok) // In caso di errore termina qui l'elaborazione. - break; - } + const TDate dd = m.get_date(F_DATA_DOCUMENTO_DA); + TString st_da = m.get(F_DATA_DOCUMENTO_A); // qui verificare + const TDate ad = st_da.not_empty() ? (TDate)(const char*)st_da : data_elab; + const TString& codnum = m.get(F_CODICE_NUMERAZIONE); + const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA); + const long an = m.get_long(F_NUMERO_DOCUMENTO_A); - if (!iw.add_status()) - break; - } - delete &eld; + TElaborazione& eld = *elab(m.get(F_CODICE_ELAB)); + TToken_string tipidoc(24), statidoc(10); + eld.tipi_stati_iniziali(tipidoc, statidoc); + + TTipo_documento t(eld.tipo_iniziale(0)); + char tipocf(t.tipocf()); + TLista_cf clienti(tipocf); + + const int tot_cli = clienti.leggi_doc(eld, dd, ad, dc, ac, da, aa, dz, az); + + TString msg(80); + iw.set_max(tot_cli); + for (int c = 0; c < tot_cli; c++) + { + const long codcli = clienti[c]; // Codice cliente in esame + + msg = TR("Elaborazione documenti del cliente "); + msg << codcli << " ..."; + log.log(0, msg); + iw.set_text(msg); // Messaggio sul cliente + do_events(); // Attende visualizzazione + + TLista_documenti din; // Legge tutti i documenti di input + din.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an); + if (din.items() > 0) + { + if (m.get(F_ORDINAMENTO) == "Z") + din.sort(DOC_ZONA "|" DOC_DATADOC "|" DOC_NDOC); + bool ok = process(iw, eld, din, data_elab, log); + if (!ok) // In caso di errore termina qui l'elaborazione. + break; + } + + if (!iw.add_status()) + break; + } + delete &eld; + } + log.print_or_preview(); } void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m) { - TProgress_monitor iw(0, "Inizializzazione...\n "); - - const TDate data_elab = m.get_date(F_DATA_ELAB); - const int anno = data_elab.year(); - - const TString dr = m.get(F_RAGSOC_CLIFO_DA); - const TString ar = m.get(F_RAGSOC_CLIFO_A); - const int da = m.get_int(F_CODICE_AGENTE_DA); - const int aa = m.get_int(F_CODICE_AGENTE_A); - const TString16 dz(m.get(F_CODICE_ZONA_DA)); - const TString16 az(m.get(F_CODICE_ZONA_A)); - - const TDate dd = m.get_date(F_DATA_DOCUMENTO_DA); - TString st_da = m.get(F_DATA_DOCUMENTO_A); // qui verificare - const TDate ad = st_da.not_empty() ? (TDate)(const char*)st_da : data_elab; - const TString& codnum = m.get(F_CODICE_NUMERAZIONE); - const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA); - const long an = m.get_long(F_NUMERO_DOCUMENTO_A); - - TElaborazione * e = elab(m.get(F_CODICE_ELAB)); - TElaborazione & eld = *e; - TToken_string tipidoc(24), statidoc(10); - eld.tipi_stati_iniziali(tipidoc, statidoc); - - TTipo_documento t(eld.tipo_iniziale(0)); - char tipocf(t.tipocf()); - TLista_cf clienti(tipocf); - const int tot_cli = clienti.leggi_ragsoc(dr, ar, da, aa, dz, az); - - TString msg(80); - iw.set_max(tot_cli); - for (int c = 0; c < tot_cli; c++) - { - const long codcli = clienti[c]; // Codice cliente in esame - msg = TR("Elaborazione documenti del cliente "); - msg << codcli << " ..."; - iw.set_text(msg); // Messaggio sul cliente - do_events(); // Attende visualizzazione - - TLista_documenti din; // Legge tutti i documenti di input - din.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an); - if (din.items() > 0) - { - if (m.get(F_ORDINAMENTO) == "Z") - din.sort(DOC_ZONA "|" DOC_DATADOC "|" DOC_NDOC); - bool ok = process(iw, eld, din, data_elab); - if (!ok) // In caso di errore termina qui l'elaborazione. - break; - } + TLog_report log; + { + TProgress_monitor iw(0, "Inizializzazione...\n "); + const TDate data_elab = m.get_date(F_DATA_ELAB); + const int anno = data_elab.year(); - if (!iw.add_status()) - break; - } - delete e; + const TString dr = m.get(F_RAGSOC_CLIFO_DA); + const TString ar = m.get(F_RAGSOC_CLIFO_A); + const int da = m.get_int(F_CODICE_AGENTE_DA); + const int aa = m.get_int(F_CODICE_AGENTE_A); + const TString16 dz(m.get(F_CODICE_ZONA_DA)); + const TString16 az(m.get(F_CODICE_ZONA_A)); + const TDate dd = m.get_date(F_DATA_DOCUMENTO_DA); + TString st_da = m.get(F_DATA_DOCUMENTO_A); // qui verificare + const TDate ad = st_da.not_empty() ? (TDate)(const char*)st_da : data_elab; + const TString& codnum = m.get(F_CODICE_NUMERAZIONE); + const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA); + const long an = m.get_long(F_NUMERO_DOCUMENTO_A); + + TElaborazione * e = elab(m.get(F_CODICE_ELAB)); + TElaborazione & eld = *e; + TToken_string tipidoc(24), statidoc(10); + eld.tipi_stati_iniziali(tipidoc, statidoc); + + TTipo_documento t(eld.tipo_iniziale(0)); + char tipocf(t.tipocf()); + TLista_cf clienti(tipocf); + const int tot_cli = clienti.leggi_ragsoc(dr, ar, da, aa, dz, az); + + TString msg(80); + iw.set_max(tot_cli); + for (int c = 0; c < tot_cli; c++) + { + const long codcli = clienti[c]; // Codice cliente in esame + msg = TR("Elaborazione documenti del cliente "); + msg << codcli << " ..."; + log.log(0, msg); + iw.set_text(msg); // Messaggio sul cliente + do_events(); // Attende visualizzazione + + TLista_documenti din; // Legge tutti i documenti di input + din.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an); + if (din.items() > 0) + { + if (m.get(F_ORDINAMENTO) == "Z") + din.sort(DOC_ZONA "|" DOC_DATADOC "|" DOC_NDOC); + bool ok = process(iw, eld, din, data_elab, log); + if (!ok) // In caso di errore termina qui l'elaborazione. + break; + } + + if (!iw.add_status()) + break; + } + delete e; + } + log.print_or_preview(); } void TFatturazione_bolle_app::process_by_doc(const TMask& m) { - TProgress_monitor iw(0, TR("Inizializzazione...\n ")); + TLog_report log; + { + TProgress_monitor iw(0, TR("Inizializzazione...\n ")); + const TDate data_elab = m.get_date(F_DATA_ELAB); + const int anno = data_elab.year(); + long dc = m.get_long(F_CODICE_CLIFO_DA); + long ac = m.get_long(F_CODICE_CLIFO_A); + + const int da = m.get_int(F_CODICE_AGENTE_DA); + const int aa = m.get_int(F_CODICE_AGENTE_A); + const TString8 dz(m.get(F_CODICE_ZONA_DA)); + const TString8 az(m.get(F_CODICE_ZONA_A)); + + const TDate dd = m.get_date(F_DATA_DOCUMENTO_DA); + TDate ad = m.get_date(F_DATA_DOCUMENTO_A); + if (!ad.ok()) ad = data_elab; + + const TString& codnum = m.get(F_CODICE_NUMERAZIONE); + const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA); + const long an = m.get_long(F_NUMERO_DOCUMENTO_A); - const TDate data_elab = m.get_date(F_DATA_ELAB); - const int anno = data_elab.year(); - long dc = m.get_long(F_CODICE_CLIFO_DA); - long ac = m.get_long(F_CODICE_CLIFO_A); - - const int da = m.get_int(F_CODICE_AGENTE_DA); - const int aa = m.get_int(F_CODICE_AGENTE_A); - const TString8 dz(m.get(F_CODICE_ZONA_DA)); - const TString8 az(m.get(F_CODICE_ZONA_A)); - - const TDate dd = m.get_date(F_DATA_DOCUMENTO_DA); - TDate ad = m.get_date(F_DATA_DOCUMENTO_A); - if (!ad.ok()) ad = data_elab; - - const TString& codnum = m.get(F_CODICE_NUMERAZIONE); - const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA); - const long an = m.get_long(F_NUMERO_DOCUMENTO_A); + TElaborazione * e = elab(m.get(F_CODICE_ELAB)); + TElaborazione & eld = *e; + TToken_string tipidoc(24), statidoc(10); + eld.tipi_stati_iniziali(tipidoc, statidoc); - TElaborazione * e = elab(m.get(F_CODICE_ELAB)); - TElaborazione & eld = *e; - TToken_string tipidoc(24), statidoc(10); - eld.tipi_stati_iniziali(tipidoc, statidoc); + TTipo_documento t(eld.tipo_iniziale(0)); + char tipocf(t.tipocf()); + TLista_cf clienti(tipocf); + const int tot_cli = clienti.leggi(dc, ac); + TLista_documenti din, dout; // Legge tutti i documenti di input + TString msg(80); - TTipo_documento t(eld.tipo_iniziale(0)); - char tipocf(t.tipocf()); - TLista_cf clienti(tipocf); - const int tot_cli = clienti.leggi(dc, ac); - TLista_documenti din, dout; // Legge tutti i documenti di input + iw.set_max(tot_cli); + for (int c = 0; c < tot_cli; c++) + { + const long codcli = clienti[c]; // Codice cliente in esame + msg = TR("Elaborazione documenti del cliente"); + msg << ' ' << codcli << "..."; + log.log(0, msg); + iw.set_text(msg); // Messaggio sul cliente + do_events(); // Attende visualizzazione - TString msg(80); - iw.set_max(tot_cli); - for (int c = 0; c < tot_cli; c++) - { - const long codcli = clienti[c]; // Codice cliente in esame - msg = TR("Elaborazione documenti del cliente"); - msg << ' ' << codcli << "..."; - iw.set_text(msg); // Messaggio sul cliente - do_events(); // Attende visualizzazione + TLista_documenti list; + list.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an); - TLista_documenti list; - list.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an); - - for (int i = list.items()-1; i >= 0; i--) - { - const TDocumento& doc = list[i]; - - bool to_del = FALSE; - const int agente = doc.get_int(DOC_CODAG); - if (agente > 0) - { - if (da > 0 && agente < da) to_del = true; - if (aa > 0 && agente > aa) to_del = true; - } - const TString8 zona = doc.get(DOC_ZONA); - if (zona.full()) - { - if (dz.not_empty() && zona < dz) to_del = true; - if (az.not_empty() && zona > az) to_del = true; - } - if (to_del) - list.destroy(i); - } - const int items = list.items(); - for (int j = 0; j < items; j++) - din.add(list[j]); + for (int i = list.items() - 1; i >= 0; i--) + { + const TDocumento& doc = list[i]; - if (!iw.add_status()) - break; - } - if (din.items() > 0 && !iw.is_cancelled()) - { - if (m.get(F_ORDINAMENTO) == "Z") - din.sort(DOC_ZONA "|" DOC_DATADOC "|" DOC_NDOC); - process(iw, eld, din, data_elab); - } - delete e; + bool to_del = FALSE; + const int agente = doc.get_int(DOC_CODAG); + if (agente > 0) + { + if (da > 0 && agente < da) to_del = true; + if (aa > 0 && agente > aa) to_del = true; + } + const TString8 zona = doc.get(DOC_ZONA); + if (zona.full()) + { + if (dz.not_empty() && zona < dz) to_del = true; + if (az.not_empty() && zona > az) to_del = true; + } + if (to_del) + list.destroy(i); + } + const int items = list.items(); + for (int j = 0; j < items; j++) + din.add(list[j]); + + if (!iw.add_status()) + break; + } + if (din.items() > 0 && !iw.is_cancelled()) + { + if (m.get(F_ORDINAMENTO) == "Z") + din.sort(DOC_ZONA "|" DOC_DATADOC "|" DOC_NDOC); + process(iw, eld, din, data_elab, log); + } + delete e; + } + log.print_or_preview(); } void TFatturazione_bolle_app::process_by_fatt(const TMask& m) { - TWait_cursor hourglass; + TLog_report log; + { + TWait_cursor hourglass; + TElaborazione* e = elab(m.get(F_CODICE_ELAB)); + TElaborazione& eld = *e; + TToken_string tipidoc(24), statidoc(10); + eld.tipi_stati_iniziali(tipidoc, statidoc); - TElaborazione* e = elab(m.get(F_CODICE_ELAB)); - TElaborazione& eld = *e; - TToken_string tipidoc(24), statidoc(10); - eld.tipi_stati_iniziali(tipidoc, statidoc); + const TTipo_documento t(eld.tipo_iniziale(0)); + const char tipocffatt = t.tipocf() == 'C' ? 'F' : 'C'; - const TTipo_documento t(eld.tipo_iniziale(0)); - const char tipocffatt = t.tipocf() == 'C' ? 'F' : 'C'; + const TDate data_elab = m.get_date(F_DATA_ELAB); + const int anno = data_elab.year(); + long dc = m.get_long(F_CODICE_CLIFO_DA); + long ac = m.get_long(F_CODICE_CLIFO_A); - const TDate data_elab = m.get_date(F_DATA_ELAB); - const int anno = data_elab.year(); - long dc = m.get_long(F_CODICE_CLIFO_DA); - long ac = m.get_long(F_CODICE_CLIFO_A); - - const int da = m.get_int(F_CODICE_AGENTE_DA); - const int aa = m.get_int(F_CODICE_AGENTE_A); - const TString& dz = m.get(F_CODICE_ZONA_DA); - const TString& az = m.get(F_CODICE_ZONA_A); - - const TString& codnum = m.get(F_CODICE_NUMERAZIONE); - const long dn = codnum.full() ? m.get_long(F_NUMERO_DOCUMENTO_DA) : 0; - const long an = codnum.full() ? m.get_long(F_NUMERO_DOCUMENTO_A) : 0; + const int da = m.get_int(F_CODICE_AGENTE_DA); + const int aa = m.get_int(F_CODICE_AGENTE_A); + const TString& dz = m.get(F_CODICE_ZONA_DA); + const TString& az = m.get(F_CODICE_ZONA_A); - TDate dd = m.get_date(F_DATA_DOCUMENTO_DA); - if (!dd.ok()) - dd = TDate(1,1,anno); - TDate ad = m.get_date(F_DATA_DOCUMENTO_A); - if (!ad.ok()) - ad = data_elab; + const TString& codnum = m.get(F_CODICE_NUMERAZIONE); + const long dn = codnum.full() ? m.get_long(F_NUMERO_DOCUMENTO_DA) : 0; + const long an = codnum.full() ? m.get_long(F_NUMERO_DOCUMENTO_A) : 0; - const int nkey = (dn > 0 || an > 0) ? 1 : 3; - TString query; - query << "USE DOC KEY " << nkey << " SELECT (TIPOCFFATT=\"" << tipocffatt << "\")"; + TDate dd = m.get_date(F_DATA_DOCUMENTO_DA); + if (!dd.ok()) + dd = TDate(1, 1, anno); + TDate ad = m.get_date(F_DATA_DOCUMENTO_A); + if (!ad.ok()) + ad = data_elab; - if (dc > 0 || ac > 0) - query << "&&(BETWEEN(CODCFFATT," << dc << ',' << ac << "))"; - - query << "&&(BETWEEN(DATADOC," << dd.date2ansi() << ',' << ad.date2ansi() << "))"; + const int nkey = (dn > 0 || an > 0) ? 1 : 3; + TString query; + query << "USE DOC KEY " << nkey << " SELECT (TIPOCFFATT=\"" << tipocffatt << "\")"; - if (da > 0 || aa > 0) - query << "&&(BETWEEN(CODAG," << da << "," << aa << "))"; - - if (dz.full() || az.full()) - query << "&&(BETWEEN(ZONA,\"" << dz << "\",\"" << az << "\"))"; + if (dc > 0 || ac > 0) + query << "&&(BETWEEN(CODCFFATT," << dc << ',' << ac << "))"; - if (nkey == 3 && codnum.full()) - query << "&&(CODNUM=\"" << codnum << "\")"; + query << "&&(BETWEEN(DATADOC," << dd.date2ansi() << ',' << ad.date2ansi() << "))"; - query << "\nBY " << DOC_CODCFFATT; - if (eld.usa_doc_rif()) - query << ' ' << DOC_DATADOCRIF; + if (da > 0 || aa > 0) + query << "&&(BETWEEN(CODAG," << da << "," << aa << "))"; - if (nkey == 1) - { - query << "\nFROM PROVV=D ANNO=" << anno << " CODNUM=" << codnum << " NDOC=" << dn; - query << "\nTO PROVV=D ANNO=" << anno << " CODNUM=" << codnum << " NDOC=" << an; - } - else - { - query << "\nFROM DATADOC=" << dd.date2ansi(); - query << "\nTO DATADOC=" << ad.date2ansi(); - } + if (dz.full() || az.full()) + query << "&&(BETWEEN(ZONA,\"" << dz << "\",\"" << az << "\"))"; + + if (nkey == 3 && codnum.full()) + query << "&&(CODNUM=\"" << codnum << "\")"; + + query << "\nBY " << DOC_CODCFFATT; + if (eld.usa_doc_rif()) + query << ' ' << DOC_DATADOCRIF; + + if (nkey == 1) + { + query << "\nFROM PROVV=D ANNO=" << anno << " CODNUM=" << codnum << " NDOC=" << dn; + query << "\nTO PROVV=D ANNO=" << anno << " CODNUM=" << codnum << " NDOC=" << an; + } + else + { + query << "\nFROM DATADOC=" << dd.date2ansi(); + query << "\nTO DATADOC=" << ad.date2ansi(); + } - TISAM_recordset docs(query); - const TRectype& head = docs.cursor()->curr(); + TISAM_recordset docs(query); + const TRectype& head = docs.cursor()->curr(); + TProgress_monitor iw(docs.items(), TR("Elaborazione documenti da fatturare"), true); + long last_clifo = 0; // Ultimo cliente elaborato + TLista_documenti din; // Lista dei documenti dell'ultimo cliente - TProgress_monitor iw(docs.items(), TR("Elaborazione documenti da fatturare"), true); + for (bool ok = docs.move_first(); ok; ok = docs.move_next()) + { + const long clifo = docs.get(DOC_CODCFFATT).as_int(); + if (clifo > 0 && clifo >= dc && (clifo <= ac || ac <= 0)) // Cliente da fatturare non nullo e valido + { + if (clifo != last_clifo) // Cambio cliente + { + if (din.items() > 0) // Ci sono documenti da elaborare? + { + process(iw, eld, din, data_elab, log); // Elaborali ... + din.destroy(-1); // ... e poi buttali + } + last_clifo = clifo; + } - long last_clifo = 0; // Ultimo cliente elaborato - TLista_documenti din; // Lista dei documenti dell'ultimo cliente - + if (!iw.add_status(1)) + break; - for (bool ok = docs.move_first(); ok; ok = docs.move_next()) - { - const long clifo = docs.get(DOC_CODCFFATT).as_int(); - if (clifo > 0 && clifo >= dc && (clifo <= ac || ac <= 0)) // Cliente da fatturare non nullo e valido - { - if (clifo != last_clifo) // Cambio cliente - { - if (din.items() > 0) // Ci sono documenti da elaborare? - { - process(iw, eld, din, data_elab); // Elaborali ... - din.destroy(-1); // ... e poi buttali - } - last_clifo = clifo; - } + // Controlla se il documento e' in uno stato valido per l'elaborazione + const TString4 tipodoc = head.get(DOC_TIPODOC); + const char statodoc = head.get_char(DOC_STATO); + for (int i = tipidoc.items() - 1; i >= 0; i--) + { + if (tipodoc == tipidoc.get(i) && statodoc == statidoc.get_char(i)) + { + din.add(head); + break; + } + } + } + } - if (!iw.add_status(1)) - break; - - // Controlla se il documento e' in uno stato valido per l'elaborazione - const TString4 tipodoc = head.get(DOC_TIPODOC); - const char statodoc = head.get_char(DOC_STATO); - for (int i = tipidoc.items()-1; i>=0; i--) - { - if (tipodoc == tipidoc.get(i) && statodoc == statidoc.get_char(i)) - { - din.add(head); - break; - } - } - } - } - - // Termina l'elaborazione dei documenti dell'ultimo cliente - if (din.items() > 0 && !iw.is_cancelled()) - process(iw, eld, din, data_elab); - - delete e; + // Termina l'elaborazione dei documenti dell'ultimo cliente + if (din.items() > 0 && !iw.is_cancelled()) + process(iw, eld, din, data_elab, log); + safe_delete(e); + } + log.print_or_preview(); } // Effettuo un test per i clienti che hanno un plafond attivo, se trovo delle bolle che fuoriescono chiedo se continuare bool TFatturazione_bolle_app::test_dicint(const TMask& m) { - const TDate data_elab = m.get_date(F_DATA_ELAB); - const int anno = data_elab.year(); - - const long dc = m.get_long(F_CODICE_CLIFO_DA); - const long ac = m.get_long(F_CODICE_CLIFO_A); - const int da = m.get_int(F_CODICE_AGENTE_DA); - const int aa = m.get_int(F_CODICE_AGENTE_A); - const TString16 dz(m.get(F_CODICE_ZONA_DA)); - const TString16 az(m.get(F_CODICE_ZONA_A)); - - const TDate dd = m.get_date(F_DATA_DOCUMENTO_DA); - TString st_da = m.get(F_DATA_DOCUMENTO_A); // qui verificare - const TDate ad = st_da.not_empty() ? (TDate)(const char*)st_da : data_elab; - const TString& codnum = m.get(F_CODICE_NUMERAZIONE); - const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA); - const long an = m.get_long(F_NUMERO_DOCUMENTO_A); - - TElaborazione * eld = elab(m.get(F_CODICE_ELAB)); - TToken_string tipidoc(24), statidoc(10); - eld->tipi_stati_iniziali(tipidoc, statidoc); - - TTipo_documento t(eld->tipo_iniziale(0)); - char tipocf(t.tipocf()); - TLista_cf clienti(tipocf); - TString msg(80); - const int tot_cli = clienti.leggi_doc(*eld, dd, ad, dc, ac, da, aa, dz, az); - TLog_report lerr(TR("Errori controllo plafond")); - bool err = false; + bool ok = true; - lerr.log(0,"\n"); - for (int c = 0; c < tot_cli; c++) - { - const long codcli = clienti[c]; // Codice cliente in esame - TLi_manager cli('C', codcli, data_elab.year()); // Inizializzo l'oggetto per la gestione del plafond + if (has_module(LIAUT, CHK_DONGLE)) + { + const TDate data_elab = m.get_date(F_DATA_ELAB); + const int anno = data_elab.year(); - if (cli.has_valid_plafond()) + const long dc = m.get_long(F_CODICE_CLIFO_DA); + const long ac = m.get_long(F_CODICE_CLIFO_A); + const int da = m.get_int(F_CODICE_AGENTE_DA); + const int aa = m.get_int(F_CODICE_AGENTE_A); + const TString16 dz(m.get(F_CODICE_ZONA_DA)); + const TString16 az(m.get(F_CODICE_ZONA_A)); + + const TDate dd = m.get_date(F_DATA_DOCUMENTO_DA); + TString st_da = m.get(F_DATA_DOCUMENTO_A); // qui verificare + const TDate ad = st_da.not_empty() ? (TDate)(const char*)st_da : data_elab; + const TString& codnum = m.get(F_CODICE_NUMERAZIONE); + const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA); + const long an = m.get_long(F_NUMERO_DOCUMENTO_A); + + TElaborazione * eld = elab(m.get(F_CODICE_ELAB)); + TToken_string tipidoc(24), statidoc(10); + eld->tipi_stati_iniziali(tipidoc, statidoc); + + TTipo_documento t(eld->tipo_iniziale(0)); + char tipocf(t.tipocf()); + TLista_cf clienti(tipocf); + const int tot_cli = clienti.leggi_doc(*eld, dd, ad, dc, ac, da, aa, dz, az); + TLog_report lerr(TR("Errori controllo plafond")); + + lerr.log(0, "\n"); + for (int c = 0; c < tot_cli; c++) { - bool ok = true; - real plafond, res_plafond, utilizzo; - TLista_documenti din; // Legge tutti i documenti di input - din.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an); + const long codcli = clienti[c]; // Codice cliente in esame + TLi_manager cli('C', codcli, data_elab.year()); // Inizializzo l'oggetto per la gestione del plafond - lint_batch(true); - lint_reset_msg(); - plafond = cli.get_plafond(); - res_plafond = cli.get_residuo(); - for (int i = 0; i < din.items(); i++) + if (cli.has_valid_plafond()) { - const real importo_utilizzato = din[i].importo_plafond(); - TToken_string plafs(din[i].get(DOC_PLAFOND), ','); - const TDate datadoc = din[i].get_date(DOC_DATADOC); + real plafond, res_plafond, utilizzo; + TLista_documenti din; // Legge tutti i documenti di input + din.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an); + bool cli_ok = true; + + lint_batch(true); + lint_reset_msg(); + plafond = cli.get_plafond(); + res_plafond = cli.get_residuo(); + for (int i = 0; i < din.items(); i++) + { + const real importo_utilizzato = din[i].importo_plafond(); + TToken_string plafs(din[i].get(DOC_PLAFOND), ','); + const TDate datadoc = din[i].get_date(DOC_DATADOC); - utilizzo += importo_utilizzato; - ok = cli.utilizza_plafond(din[i], plafs, importo_utilizzato); - } - cli.set_dirty(false); - lint_batch(false); - if (!ok || utilizzo > res_plafond) - { - bool plur = din.items() > 1; - TString err; - const TString & str = lint_get_msg(); + utilizzo += importo_utilizzato; + cli_ok = cli.utilizza_plafond(din[i], plafs, importo_utilizzato); + + } + cli.set_dirty(false); + lint_batch(false); + if (!cli_ok || utilizzo > res_plafond) + { + bool plur = din.items() > 1; + TString msg; + const TString & str = lint_get_msg(); - msg << TR("Errore durante la generazione del plafond:\n"); - msg << (plur ? TR("I documenti da elaborare superano") : TR("Il documento da elaborare supera")); - msg << TR(" il plafond per questo cliente.") << '\n'; - msg << TR("Plafond rimanente: ") << res_plafond << '\n'; - msg << TR("Totale plafond in fattura : ") << utilizzo << '\n'; - msg << (plur ? TR("Le fatture non sono state create.") : TR("La fattura non e' stata creata.")); - if (str.full()) - msg << '\n' << str; - lerr.log(0, msg); + msg << TR("Errore durante la generazione del plafond:") << '\n'; + msg << (plur ? TR("I documenti da elaborare superano") : TR("Il documento da elaborare supera")); + msg << TR(" il plafond del cliente.") << ' ' << codcli << '\n'; + msg << TR("Plafond rimanente: ") << res_plafond << '\n'; + msg << TR("Totale plafond in fattura : ") << utilizzo << '\n'; + msg << (plur ? TR("Le fatture non sono state create.") : TR("La fattura non e' stata creata.")) << '\n'; + lerr.log(0, msg); + ok = false; + } } - err &= !ok; } - } - safe_delete(eld); - if(err) - { - lerr.print_or_preview(); - return false; - } - return true; + safe_delete(eld); + if (!ok) + lerr.print_or_preview(); + } + return ok; } // Effettuo un test per i clienti che hanno un plafond attivo, se trovo delle bolle che fuoriescono chiedo se continuare bool TFatturazione_bolle_app::test_CONAI(const TMask& m) @@ -581,33 +598,30 @@ void TFatturazione_bolle_app::main_loop() while (m.run() == K_ENTER) { - if(has_module(LIAUT, CHK_DONGLE) && ini_get_bool(CONFIG_DITTA, "ve", "USELETTERE") && !test_dicint(m)) // Controllo se ho documenti al di fuori del plafond - { - continue; - } - if (!test_CONAI(m)) - continue; - const TString& select_from = m.get(F_SELEZIONE); - if (select_from != _default_selection) - ini_set_string(CONFIG_DITTA, "ve", "FATBOLSEL", _default_selection = select_from); - - const TString& orderby = m.get(F_ORDINAMENTO); - if (orderby == "R") - process_by_ragsoc(m); - else - { - if (clifo_da_fatt(m)) - { - process_by_fatt(m); - } - else - { - if (select_from == "D") - process_by_doc(m); - else - process_by_cli(m); - } - } + if (test_dicint(m) && test_CONAI(m)) + { + const TString& select_from = m.get(F_SELEZIONE); + const TString& orderby = m.get(F_ORDINAMENTO); + + if (select_from != _default_selection) + ini_set_string(CONFIG_DITTA, "ve", "FATBOLSEL", _default_selection = select_from); + if (orderby == "R") + process_by_ragsoc(m); + else + { + if (clifo_da_fatt(m)) + { + process_by_fatt(m); + } + else + { + if (select_from == "D") + process_by_doc(m); + else + process_by_cli(m); + } + } + } } } diff --git a/src/ve/ve6200.h b/src/ve/ve6200.h index 037b8f5b4..81137f560 100755 --- a/src/ve/ve6200.h +++ b/src/ve/ve6200.h @@ -23,7 +23,7 @@ protected: virtual TFatturazione_bolle * elab(const TString & cod) const { return new TFatturazione_bolle(cod);} bool clifo_da_fatt(const TMask& m) const; - bool process(TProgress_monitor& iw, TElaborazione & eld, TLista_documenti& din, const TDate& data_elab); + bool process(TProgress_monitor& iw, TElaborazione & eld, TLista_documenti& din, const TDate& data_elab, TLog_report & log); public: void process_by_cli(const TMask& m); diff --git a/src/ve/velib03.cpp b/src/ve/velib03.cpp index 4eed420d6..43851257f 100755 --- a/src/ve/velib03.cpp +++ b/src/ve/velib03.cpp @@ -936,9 +936,8 @@ void TDocumento::set_riga_sconto() void TDocumento::update_esenzione() { - if (!clifor().use_lettere()) + if (clifor().use_lettere()) { - bool to_update = false; const TString4 codiva = codesiva(); for (int i = physical_rows(); i > 0; i--) @@ -946,7 +945,7 @@ void TDocumento::update_esenzione() TRiga_documento & rdoc = row(i); const TString& cod = rdoc.get(RDOC_CODIVA); - if (cod.blank()) + if (!rdoc.is_descrizione() && cod.blank()) { if (codiva.full()) rdoc.put(RDOC_CODIVA, codiva); @@ -1541,16 +1540,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const if (!dcons.ok()) r.put(RDOC_DATACONS, datacons); } - - /* dal 27-9-2013 considero singolarmente i campi di analitica replicati sulle righe - if (r.get(RDOC_CODCMS).blank() && r.get(RDOC_FASCMS).blank() && r.get(RDOC_CODCOSTO).blank()) - { - r.put(RDOC_CODCMS, codcms); - r.put(RDOC_FASCMS, fascms); - r.put(RDOC_CODCOSTO, codcos); - } - */ - if (r.get(RDOC_CODCMS).blank()) r.put(RDOC_CODCMS, codcms); + if (r.get(RDOC_CODCMS).blank()) r.put(RDOC_CODCMS, codcms); if (r.get(RDOC_FASCMS).blank()) r.put(RDOC_FASCMS, fascms); if (r.get(RDOC_CODCOSTO).blank()) r.put(RDOC_CODCOSTO, codcos); }