Patch level : 12.0 982

Files correlati     : ve0.exe ve1.exe ve5.exe ve6.exe ve0200b.msk
Commento            :

Ristrutturato modulo li
This commit is contained in:
Alessandro Bonazzi 2020-07-27 08:52:10 +02:00
parent 8bdb4472ef
commit d74548ab04
3 changed files with 393 additions and 389 deletions

View File

@ -27,7 +27,7 @@ bool TFatturazione_bolle_app::create()
} }
bool TFatturazione_bolle_app::process(TProgress_monitor& iw, TElaborazione & eld, 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 // Crea documenti di output
TLista_documenti dout; TLista_documenti dout;
@ -37,6 +37,7 @@ bool TFatturazione_bolle_app::process(TProgress_monitor& iw, TElaborazione & eld
TString msg; TString msg;
msg << din.items() << TR(" documenti raggruppati in ") << dout.items(); msg << din.items() << TR(" documenti raggruppati in ") << dout.items();
log.log(0, msg);
iw.set_text(msg); // Messaggio sul cliente iw.set_text(msg); // Messaggio sul cliente
do_events(); // Attende visualizzazione do_events(); // Attende visualizzazione
lint_batch(true); lint_batch(true);
@ -57,15 +58,22 @@ bool TFatturazione_bolle_app::process(TProgress_monitor& iw, TElaborazione & eld
const TString & str = lint_get_msg(); const TString & str = lint_get_msg();
if (str.full()) 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; return ok;
} }
void TFatturazione_bolle_app::process_by_cli(const TMask& m) void TFatturazione_bolle_app::process_by_cli(const TMask& m)
{
TLog_report log;
{ {
TProgress_monitor iw(0, "Inizializzazione...\n "); TProgress_monitor iw(0, "Inizializzazione...\n ");
const TDate data_elab = m.get_date(F_DATA_ELAB); const TDate data_elab = m.get_date(F_DATA_ELAB);
const int anno = data_elab.year(); const int anno = data_elab.year();
@ -98,8 +106,10 @@ void TFatturazione_bolle_app::process_by_cli(const TMask& m)
for (int c = 0; c < tot_cli; c++) for (int c = 0; c < tot_cli; c++)
{ {
const long codcli = clienti[c]; // Codice cliente in esame const long codcli = clienti[c]; // Codice cliente in esame
msg = TR("Elaborazione documenti del cliente "); msg = TR("Elaborazione documenti del cliente ");
msg << codcli << " ..."; msg << codcli << " ...";
log.log(0, msg);
iw.set_text(msg); // Messaggio sul cliente iw.set_text(msg); // Messaggio sul cliente
do_events(); // Attende visualizzazione do_events(); // Attende visualizzazione
@ -109,7 +119,7 @@ void TFatturazione_bolle_app::process_by_cli(const TMask& m)
{ {
if (m.get(F_ORDINAMENTO) == "Z") if (m.get(F_ORDINAMENTO) == "Z")
din.sort(DOC_ZONA "|" DOC_DATADOC "|" DOC_NDOC); din.sort(DOC_ZONA "|" DOC_DATADOC "|" DOC_NDOC);
bool ok = process(iw, eld, din, data_elab); bool ok = process(iw, eld, din, data_elab, log);
if (!ok) // In caso di errore termina qui l'elaborazione. if (!ok) // In caso di errore termina qui l'elaborazione.
break; break;
} }
@ -119,11 +129,14 @@ void TFatturazione_bolle_app::process_by_cli(const TMask& m)
} }
delete &eld; delete &eld;
} }
log.print_or_preview();
}
void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m) void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m)
{
TLog_report log;
{ {
TProgress_monitor iw(0, "Inizializzazione...\n "); TProgress_monitor iw(0, "Inizializzazione...\n ");
const TDate data_elab = m.get_date(F_DATA_ELAB); const TDate data_elab = m.get_date(F_DATA_ELAB);
const int anno = data_elab.year(); const int anno = data_elab.year();
@ -158,6 +171,7 @@ void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m)
const long codcli = clienti[c]; // Codice cliente in esame const long codcli = clienti[c]; // Codice cliente in esame
msg = TR("Elaborazione documenti del cliente "); msg = TR("Elaborazione documenti del cliente ");
msg << codcli << " ..."; msg << codcli << " ...";
log.log(0, msg);
iw.set_text(msg); // Messaggio sul cliente iw.set_text(msg); // Messaggio sul cliente
do_events(); // Attende visualizzazione do_events(); // Attende visualizzazione
@ -167,7 +181,7 @@ void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m)
{ {
if (m.get(F_ORDINAMENTO) == "Z") if (m.get(F_ORDINAMENTO) == "Z")
din.sort(DOC_ZONA "|" DOC_DATADOC "|" DOC_NDOC); din.sort(DOC_ZONA "|" DOC_DATADOC "|" DOC_NDOC);
bool ok = process(iw, eld, din, data_elab); bool ok = process(iw, eld, din, data_elab, log);
if (!ok) // In caso di errore termina qui l'elaborazione. if (!ok) // In caso di errore termina qui l'elaborazione.
break; break;
} }
@ -176,13 +190,15 @@ void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m)
break; break;
} }
delete e; delete e;
}
log.print_or_preview();
} }
void TFatturazione_bolle_app::process_by_doc(const TMask& m) void TFatturazione_bolle_app::process_by_doc(const TMask& m)
{
TLog_report log;
{ {
TProgress_monitor iw(0, TR("Inizializzazione...\n ")); TProgress_monitor iw(0, TR("Inizializzazione...\n "));
const TDate data_elab = m.get_date(F_DATA_ELAB); const TDate data_elab = m.get_date(F_DATA_ELAB);
const int anno = data_elab.year(); const int anno = data_elab.year();
long dc = m.get_long(F_CODICE_CLIFO_DA); long dc = m.get_long(F_CODICE_CLIFO_DA);
@ -211,14 +227,15 @@ void TFatturazione_bolle_app::process_by_doc(const TMask& m)
TLista_cf clienti(tipocf); TLista_cf clienti(tipocf);
const int tot_cli = clienti.leggi(dc, ac); const int tot_cli = clienti.leggi(dc, ac);
TLista_documenti din, dout; // Legge tutti i documenti di input TLista_documenti din, dout; // Legge tutti i documenti di input
TString msg(80); TString msg(80);
iw.set_max(tot_cli); iw.set_max(tot_cli);
for (int c = 0; c < tot_cli; c++) for (int c = 0; c < tot_cli; c++)
{ {
const long codcli = clienti[c]; // Codice cliente in esame const long codcli = clienti[c]; // Codice cliente in esame
msg = TR("Elaborazione documenti del cliente"); msg = TR("Elaborazione documenti del cliente");
msg << ' ' << codcli << "..."; msg << ' ' << codcli << "...";
log.log(0, msg);
iw.set_text(msg); // Messaggio sul cliente iw.set_text(msg); // Messaggio sul cliente
do_events(); // Attende visualizzazione do_events(); // Attende visualizzazione
@ -256,15 +273,18 @@ void TFatturazione_bolle_app::process_by_doc(const TMask& m)
{ {
if (m.get(F_ORDINAMENTO) == "Z") if (m.get(F_ORDINAMENTO) == "Z")
din.sort(DOC_ZONA "|" DOC_DATADOC "|" DOC_NDOC); din.sort(DOC_ZONA "|" DOC_DATADOC "|" DOC_NDOC);
process(iw, eld, din, data_elab); process(iw, eld, din, data_elab, log);
} }
delete e; delete e;
} }
log.print_or_preview();
}
void TFatturazione_bolle_app::process_by_fatt(const TMask& m) void TFatturazione_bolle_app::process_by_fatt(const TMask& m)
{
TLog_report log;
{ {
TWait_cursor hourglass; TWait_cursor hourglass;
TElaborazione* e = elab(m.get(F_CODICE_ELAB)); TElaborazione* e = elab(m.get(F_CODICE_ELAB));
TElaborazione& eld = *e; TElaborazione& eld = *e;
TToken_string tipidoc(24), statidoc(10); TToken_string tipidoc(24), statidoc(10);
@ -330,13 +350,10 @@ void TFatturazione_bolle_app::process_by_fatt(const TMask& m)
TISAM_recordset docs(query); TISAM_recordset docs(query);
const TRectype& head = docs.cursor()->curr(); const TRectype& head = docs.cursor()->curr();
TProgress_monitor iw(docs.items(), TR("Elaborazione documenti da fatturare"), true); TProgress_monitor iw(docs.items(), TR("Elaborazione documenti da fatturare"), true);
long last_clifo = 0; // Ultimo cliente elaborato long last_clifo = 0; // Ultimo cliente elaborato
TLista_documenti din; // Lista dei documenti dell'ultimo cliente TLista_documenti din; // Lista dei documenti dell'ultimo cliente
for (bool ok = docs.move_first(); ok; ok = docs.move_next()) for (bool ok = docs.move_first(); ok; ok = docs.move_next())
{ {
const long clifo = docs.get(DOC_CODCFFATT).as_int(); const long clifo = docs.get(DOC_CODCFFATT).as_int();
@ -346,7 +363,7 @@ void TFatturazione_bolle_app::process_by_fatt(const TMask& m)
{ {
if (din.items() > 0) // Ci sono documenti da elaborare? if (din.items() > 0) // Ci sono documenti da elaborare?
{ {
process(iw, eld, din, data_elab); // Elaborali ... process(iw, eld, din, data_elab, log); // Elaborali ...
din.destroy(-1); // ... e poi buttali din.destroy(-1); // ... e poi buttali
} }
last_clifo = clifo; last_clifo = clifo;
@ -371,13 +388,18 @@ void TFatturazione_bolle_app::process_by_fatt(const TMask& m)
// Termina l'elaborazione dei documenti dell'ultimo cliente // Termina l'elaborazione dei documenti dell'ultimo cliente
if (din.items() > 0 && !iw.is_cancelled()) if (din.items() > 0 && !iw.is_cancelled())
process(iw, eld, din, data_elab); process(iw, eld, din, data_elab, log);
safe_delete(e);
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 // 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) bool TFatturazione_bolle_app::test_dicint(const TMask& m)
{
bool ok = true;
if (has_module(LIAUT, CHK_DONGLE))
{ {
const TDate data_elab = m.get_date(F_DATA_ELAB); const TDate data_elab = m.get_date(F_DATA_ELAB);
const int anno = data_elab.year(); const int anno = data_elab.year();
@ -403,10 +425,8 @@ bool TFatturazione_bolle_app::test_dicint(const TMask& m)
TTipo_documento t(eld->tipo_iniziale(0)); TTipo_documento t(eld->tipo_iniziale(0));
char tipocf(t.tipocf()); char tipocf(t.tipocf());
TLista_cf clienti(tipocf); TLista_cf clienti(tipocf);
TString msg(80);
const int tot_cli = clienti.leggi_doc(*eld, dd, ad, dc, ac, da, aa, dz, az); const int tot_cli = clienti.leggi_doc(*eld, dd, ad, dc, ac, da, aa, dz, az);
TLog_report lerr(TR("Errori controllo plafond")); TLog_report lerr(TR("Errori controllo plafond"));
bool err = false;
lerr.log(0, "\n"); lerr.log(0, "\n");
for (int c = 0; c < tot_cli; c++) for (int c = 0; c < tot_cli; c++)
@ -416,10 +436,10 @@ bool TFatturazione_bolle_app::test_dicint(const TMask& m)
if (cli.has_valid_plafond()) if (cli.has_valid_plafond())
{ {
bool ok = true;
real plafond, res_plafond, utilizzo; real plafond, res_plafond, utilizzo;
TLista_documenti din; // Legge tutti i documenti di input TLista_documenti din; // Legge tutti i documenti di input
din.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an); din.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an);
bool cli_ok = true;
lint_batch(true); lint_batch(true);
lint_reset_msg(); lint_reset_msg();
@ -432,36 +452,33 @@ bool TFatturazione_bolle_app::test_dicint(const TMask& m)
const TDate datadoc = din[i].get_date(DOC_DATADOC); const TDate datadoc = din[i].get_date(DOC_DATADOC);
utilizzo += importo_utilizzato; utilizzo += importo_utilizzato;
ok = cli.utilizza_plafond(din[i], plafs, importo_utilizzato); cli_ok = cli.utilizza_plafond(din[i], plafs, importo_utilizzato);
} }
cli.set_dirty(false); cli.set_dirty(false);
lint_batch(false); lint_batch(false);
if (!ok || utilizzo > res_plafond) if (!cli_ok || utilizzo > res_plafond)
{ {
bool plur = din.items() > 1; bool plur = din.items() > 1;
TString err; TString msg;
const TString & str = lint_get_msg(); const TString & str = lint_get_msg();
msg << TR("Errore durante la generazione del plafond:\n"); msg << TR("Errore durante la generazione del plafond:") << '\n';
msg << (plur ? TR("I documenti da elaborare superano") : TR("Il documento da elaborare supera")); msg << (plur ? TR("I documenti da elaborare superano") : TR("Il documento da elaborare supera"));
msg << TR(" il plafond per questo cliente.") << '\n'; msg << TR(" il plafond del cliente.") << ' ' << codcli << '\n';
msg << TR("Plafond rimanente: ") << res_plafond << '\n'; msg << TR("Plafond rimanente: ") << res_plafond << '\n';
msg << TR("Totale plafond in fattura : ") << utilizzo << '\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.")); msg << (plur ? TR("Le fatture non sono state create.") : TR("La fattura non e' stata creata.")) << '\n';
if (str.full())
msg << '\n' << str;
lerr.log(0, msg); lerr.log(0, msg);
ok = false;
} }
err &= !ok;
} }
} }
safe_delete(eld); safe_delete(eld);
if(err) if (!ok)
{
lerr.print_or_preview(); lerr.print_or_preview();
return false;
} }
return true; return ok;
} }
// Effettuo un test per i clienti che hanno un plafond attivo, se trovo delle bolle che fuoriescono chiedo se continuare // 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) bool TFatturazione_bolle_app::test_CONAI(const TMask& m)
@ -581,17 +598,13 @@ void TFatturazione_bolle_app::main_loop()
while (m.run() == K_ENTER) 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 if (test_dicint(m) && test_CONAI(m))
{ {
continue;
}
if (!test_CONAI(m))
continue;
const TString& select_from = m.get(F_SELEZIONE); const TString& select_from = m.get(F_SELEZIONE);
const TString& orderby = m.get(F_ORDINAMENTO);
if (select_from != _default_selection) if (select_from != _default_selection)
ini_set_string(CONFIG_DITTA, "ve", "FATBOLSEL", _default_selection = select_from); ini_set_string(CONFIG_DITTA, "ve", "FATBOLSEL", _default_selection = select_from);
const TString& orderby = m.get(F_ORDINAMENTO);
if (orderby == "R") if (orderby == "R")
process_by_ragsoc(m); process_by_ragsoc(m);
else else
@ -610,6 +623,7 @@ void TFatturazione_bolle_app::main_loop()
} }
} }
} }
}
int ve6200 (int argc, char **argv) int ve6200 (int argc, char **argv)
{ {

View File

@ -23,7 +23,7 @@ protected:
virtual TFatturazione_bolle * elab(const TString & cod) const { return new TFatturazione_bolle(cod);} virtual TFatturazione_bolle * elab(const TString & cod) const { return new TFatturazione_bolle(cod);}
bool clifo_da_fatt(const TMask& m) const; 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: public:
void process_by_cli(const TMask& m); void process_by_cli(const TMask& m);

View File

@ -936,9 +936,8 @@ void TDocumento::set_riga_sconto()
void TDocumento::update_esenzione() void TDocumento::update_esenzione()
{ {
if (!clifor().use_lettere()) if (clifor().use_lettere())
{ {
bool to_update = false;
const TString4 codiva = codesiva(); const TString4 codiva = codesiva();
for (int i = physical_rows(); i > 0; i--) for (int i = physical_rows(); i > 0; i--)
@ -946,7 +945,7 @@ void TDocumento::update_esenzione()
TRiga_documento & rdoc = row(i); TRiga_documento & rdoc = row(i);
const TString& cod = rdoc.get(RDOC_CODIVA); const TString& cod = rdoc.get(RDOC_CODIVA);
if (cod.blank()) if (!rdoc.is_descrizione() && cod.blank())
{ {
if (codiva.full()) if (codiva.full())
rdoc.put(RDOC_CODIVA, codiva); rdoc.put(RDOC_CODIVA, codiva);
@ -1541,15 +1540,6 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
if (!dcons.ok()) if (!dcons.ok())
r.put(RDOC_DATACONS, datacons); 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_FASCMS).blank()) r.put(RDOC_FASCMS, fascms);
if (r.get(RDOC_CODCOSTO).blank()) r.put(RDOC_CODCOSTO, codcos); if (r.get(RDOC_CODCOSTO).blank()) r.put(RDOC_CODCOSTO, codcos);