Patch level : 12.0 932

Files correlati     : ve6.exe
Commento            : Corretta data inizializzazione oggetto per dichiarazione d'intento: problema a cavallo d'anno che non becca l'anno giusto
This commit is contained in:
Simone Palacino 2020-01-27 16:06:22 +01:00
parent 5a7d48435d
commit 0cbbbc42c5

View File

@ -44,37 +44,37 @@ bool TFatturazione_bolle_app::process(TProgress_monitor& iw, TElaborazione & eld
create_tipi_stati(tipi, stati);
int clifo = din[0].clifor().codice();
TDate aData(TODAY);
TLi_manager currentCli('C', clifo, aData); // Inizializzo l'oggetto per la gestione del plafond
TDate aData(data_elab);
TLi_manager currentCli('C', clifo, aData); // Inizializzo l'oggetto per la gestione del plafond
real plafond, res_plafond, tot_fat;
if (currentCli.has_valid_plafond())
{
plafond = currentCli.get_plafond();
res_plafond = plafond - currentCli.elab_util(tipi, stati, aData);
for (int i = 0; i < din.items(); ++i)
tot_fat += din[i].totale_doc();
if (currentCli.has_valid_plafond())
{
plafond = currentCli.get_plafond();
res_plafond = plafond - currentCli.elab_util(tipi, stati, aData);
for (int i = 0; i < din.items(); ++i)
tot_fat += din[i].totale_doc();
TLog_report lerr;
if (tot_fat > res_plafond)
{
bool plur = din.items() > 1;
TString err;
err << "Errore durante la generazione del plafond:\n" <<
(plur ? "I documenti da elaborare superano" : "Il documento da elaborare supera") << " il plafond per questo cliente.\n"
"Plafond rimanente: %s\n" <<
(plur ? "Totale fatture: %s\n" : "Totale fattura: %s\n") <<
(plur ? "Le fatture non sono state create." : "La fattura non e' stata creata.");
return error_box(err, res_plafond.string(), tot_fat.string());
}
TLog_report lerr;
if (tot_fat > res_plafond)
{
bool plur = din.items() > 1;
TString err;
err << "Errore durante la generazione del plafond:\n" <<
(plur ? "I documenti da elaborare superano" : "Il documento da elaborare supera") << " il plafond per questo cliente.\n"
"Plafond rimanente: %s\n" <<
(plur ? "Totale fatture: %s\n" : "Totale fattura: %s\n") <<
(plur ? "Le fatture non sono state create." : "La fattura non e' stata creata.");
return error_box(err, res_plafond.string(), tot_fat.string());
}
// Una volta che di documenti sono elaborati ci scrivo sopra il valore del plafond
scrivi_plafond(dout, data_elab);
// Una volta che di documenti sono elaborati ci scrivo sopra il valore del plafond
scrivi_plafond(dout, data_elab);
//if (!popola_plafond(dout, data_elab))
//{
// return error_box("Errore durante la generazione del plafond, le fatture non son state create");
//}
}
}
int err = dout.write(); // Scrive documenti di output
if (err == NOERR)
@ -144,7 +144,7 @@ void TFatturazione_bolle_app::process_by_cli(const TMask& m)
if (!iw.add_status())
break;
}
delete &eld;
delete &eld;
}
void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m)
@ -202,7 +202,7 @@ void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m)
if (!iw.add_status())
break;
}
delete e;
delete e;
}
@ -249,7 +249,7 @@ void TFatturazione_bolle_app::process_by_doc(const TMask& m)
iw.set_text(msg); // Messaggio sul cliente
do_events(); // Attende visualizzazione
TLista_documenti list;
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--)
@ -274,7 +274,7 @@ void TFatturazione_bolle_app::process_by_doc(const TMask& m)
}
const int items = list.items();
for (int j = 0; j < items; j++)
din.add(list[j]);
din.add(list[j]);
if (!iw.add_status())
break;
@ -285,7 +285,7 @@ void TFatturazione_bolle_app::process_by_doc(const TMask& m)
din.sort(DOC_ZONA "|" DOC_DATADOC "|" DOC_NDOC);
process(iw, eld, din, data_elab);
}
delete e;
delete e;
}
void TFatturazione_bolle_app::process_by_fatt(const TMask& m)
@ -400,166 +400,166 @@ void TFatturazione_bolle_app::process_by_fatt(const TMask& m)
if (din.items() > 0 && !iw.is_cancelled())
process(iw, eld, din, data_elab);
delete e;
delete e;
}
// 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 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 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);
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);
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);
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);
const int tot_cli = clienti.leggi_doc(eld, dd, ad, dc, ac, da, aa, dz, az);
TString msg(80);
TString msg(80);
TLog_report lerr(TR("Errori controllo plafond e CONAI"));
lerr.log(0,"\n");
bool err = false;
for (int c = 0; c < tot_cli; c++)
{
const long codcli = clienti[c]; // Codice cliente in esame
TLog_report lerr(TR("Errori controllo plafond e CONAI"));
lerr.log(0,"\n");
bool err = false;
for (int c = 0; c < tot_cli; c++)
{
const long codcli = clienti[c]; // Codice cliente in esame
TLi_manager currentCli(tipocf, codcli, ad); // Inizializzo l'oggetto per la gestione del plafond
TLi_manager currentCli(tipocf, codcli, ad); // Inizializzo l'oggetto per la gestione del plafond
if (currentCli.has_valid_plafond())
{
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)
{
err |= currentCli.test_plafond(din, lerr);
}
}
}
if (currentCli.has_valid_plafond())
{
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)
{
err |= currentCli.test_plafond(din, lerr);
}
}
}
delete &eld;
if(err)
{
lerr.print_or_preview();
return false;
}
return true;
delete &eld;
if(err)
{
lerr.print_or_preview();
return false;
}
return true;
}
// 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)
{
const TDate data_elab = m.get_date(F_DATA_ELAB);
const int anno = data_elab.year();
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 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);
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);
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);
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);
const int tot_cli = clienti.leggi_doc(eld, dd, ad, dc, ac, da, aa, dz, az);
TString msg(80);
TLog_report lerr(TR("Errori controllo CONAI"));
lerr.log(0, "\n");
bool err = false;
for (int c = 0; c < tot_cli; c++)
{
const long codcli = clienti[c]; // Codice cliente in esame
TConai conai;
TLog_report lerr(TR("Errori controllo CONAI"));
lerr.log(0, "\n");
bool err = false;
for (int c = 0; c < tot_cli; c++)
{
const long codcli = clienti[c]; // Codice cliente in esame
TConai conai;
{
TLista_documenti din; // Legge tutti i documenti di input
din.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an);
const int nbolle = din.items();
for (int b = 0; b < nbolle; b++)
{
TDocumento & bolla = din[b];
const int nrows = bolla.physical_rows();
{
TLista_documenti din; // Legge tutti i documenti di input
din.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an);
const int nbolle = din.items();
for (int b = 0; b < nbolle; b++)
{
TDocumento & bolla = din[b];
const int nrows = bolla.physical_rows();
for (int r = 1; r <= nrows; r++)
{
TRiga_documento & row = bolla[r];
for (int r = 1; r <= nrows; r++)
{
TRiga_documento & row = bolla[r];
msg.format("Cliente %ld Bolla %ld Riga %d - ",
bolla.get_long(DOC_CODCF),
bolla.get_long(DOC_NDOC),
row.get_int(RDOC_NRIGA));
for (int i = 1; i <= FR_CMAX; i++)
{
const TString8 sottocat = row.get(conai_sottocat_name(i));
msg.format("Cliente %ld Bolla %ld Riga %d - ",
bolla.get_long(DOC_CODCF),
bolla.get_long(DOC_NDOC),
row.get_int(RDOC_NRIGA));
for (int i = 1; i <= FR_CMAX; i++)
{
const TString8 sottocat = row.get(conai_sottocat_name(i));
if (sottocat.full())
{
if (!conai.exist_sottocat(sottocat))
{
err = true;
TString msgerr(msg);
msgerr << format("Sottocategoria CONAI %s assente", (const char *)sottocat);
lerr.log(2, msgerr);
continue;
}
if (sottocat.full())
{
if (!conai.exist_sottocat(sottocat))
{
err = true;
TString msgerr(msg);
msgerr << format("Sottocategoria CONAI %s assente", (const char *)sottocat);
lerr.log(2, msgerr);
continue;
}
TSpesa_prest sp = conai.get_spesa(sottocat);
TSpesa_prest sp = conai.get_spesa(sottocat);
if (!sp.valid())
{
err = true;
TString msgerr(msg);
msgerr << sp.err_msg();
lerr.log(2, msgerr);
}
}
}
}
}
}
}
delete &eld;
if (err)
{
lerr.print_or_preview();
return false;
}
return true;
if (!sp.valid())
{
err = true;
TString msgerr(msg);
msgerr << sp.err_msg();
lerr.log(2, msgerr);
}
}
}
}
}
}
}
delete &eld;
if (err)
{
lerr.print_or_preview();
return false;
}
return true;
}
bool TFatturazione_bolle_app::clifo_da_fatt(const TMask& m) const
@ -582,32 +582,32 @@ 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(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")
if (orderby == "R")
process_by_ragsoc(m);
else
{
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 (select_from == "D")
process_by_doc(m);
else
process_by_cli(m);
}
}
}
}