Patch level : 12.00 1402

Files correlati     : ve01.exe

Commento                :
Corretta abilitazione CIG CUP
This commit is contained in:
Alessandro Bonazzi 2026-01-15 00:25:16 +01:00
parent 649a136a8d
commit 6d9f1529cf
7 changed files with 415 additions and 103 deletions

View File

@ -68,6 +68,7 @@ void TParametri_mask::save_all() const
set_fp_var(FP_RAGSOCP, get(F_RAGSOCP)); set_fp_var(FP_RAGSOCP, get(F_RAGSOCP));
set_fp_var(FP_ADDINDSP, get(F_ADDINDSP)); set_fp_var(FP_ADDINDSP, get(F_ADDINDSP));
set_fp_var(FP_DUMP_VALS, get(F_DUMP_VALS)); set_fp_var(FP_DUMP_VALS, get(F_DUMP_VALS));
set_fp_var(FP_RIF_PAG, get(F_RIF_PAG));
TFP_nota_piede_f().save_sheet(sfield(F_NPFSHEET)); TFP_nota_piede_f().save_sheet(sfield(F_NPFSHEET));
@ -146,6 +147,7 @@ void TParametri_mask::load_all()
set(F_RAGSOCP, get_fp_bool_var(FP_RAGSOCP)); set(F_RAGSOCP, get_fp_bool_var(FP_RAGSOCP));
set(F_ADDINDSP, get_fp_bool_var(FP_ADDINDSP)); set(F_ADDINDSP, get_fp_bool_var(FP_ADDINDSP));
set(F_DUMP_VALS, get_fp_bool_var(FP_DUMP_VALS)); set(F_DUMP_VALS, get_fp_bool_var(FP_DUMP_VALS));
set(F_RIF_PAG, get_fp_bool_var(FP_RIF_PAG));
TFP_nota_piede_f().load_sheet(sfield(F_NPFSHEET)); TFP_nota_piede_f().load_sheet(sfield(F_NPFSHEET));
TSheet_field & stile = sfield(F_STYLES); TSheet_field & stile = sfield(F_STYLES);

View File

@ -36,11 +36,12 @@ protected:
void set_filter_changed(); void set_filter_changed();
void print(); void print();
void elabora(bool invia = true, bool reset_name = false, const char * stato = " "); void elabora(bool invia = true, bool reset_name = false, const char * stato = " ");
void check();
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
void next_page(int p) override; void next_page(int p) override;
bool on_key(KEY key) override; bool on_key(KEY key) override;
bool check_full_fields() const; bool check_full_fields() const;
void fill_docs(); void fill_docs(bool clear = false);
void init(); void init();
void fill_sheet(); void fill_sheet();
void load_all_fields(); void load_all_fields();
@ -138,7 +139,7 @@ int sort_by_num(TSheet_field & s, int r1, int r2)
return 0; return 0;
} }
void TPA_mask::fill_docs() void TPA_mask::fill_docs(bool clear)
{ {
TSheet_field& selected_docs = sfield(F_DOCUMENTI_TIPO); TSheet_field& selected_docs = sfield(F_DOCUMENTI_TIPO);
TSheet_field& docs = sfield(F_DOCS); TSheet_field& docs = sfield(F_DOCS);
@ -150,8 +151,9 @@ void TPA_mask::fill_docs()
docs.reset(); docs.reset();
_documenti.destroy(); _documenti.destroy();
enable(DLG_OK, filter_selected.empty() || filter_selected == "X"); enable(DLG_ELABORA, filter_selected.empty() || filter_selected == "X");
enable(DLG_FINDREC, filter_selected == "X" || filter_selected == "I" || filter_selected == "E"); enable(DLG_FINDREC, filter_selected == "X" || filter_selected == "I" || filter_selected == "E");
enable(DLG_CHECK_SDI, fp_has_check() && filter_selected.full());
enable(DLG_PDF, filter_selected == "X" || filter_selected == "I" || filter_selected == "E"); enable(DLG_PDF, filter_selected == "X" || filter_selected == "I" || filter_selected == "E");
docs.enable_column(S_SELECTED, filter_selected.empty() || filter_selected == "X" || filter_selected == "I"); docs.enable_column(S_SELECTED, filter_selected.empty() || filter_selected == "X" || filter_selected == "I");
docs.enable_column(S_CODSDI, filter_selected.empty()); docs.enable_column(S_CODSDI, filter_selected.empty());
@ -191,7 +193,7 @@ void TPA_mask::fill_docs()
{ {
const TDocumento & doc = (TDocumento & )_documenti[i]; const TDocumento & doc = (TDocumento & )_documenti[i];
const TTipo_documento& td = doc.tipo(); //cached_tipodoc(doc.get(DOC_TIPODOC)); const TTipo_documento& td = doc.tipo(); //cached_tipodoc(doc.get(DOC_TIPODOC));
int row = docs.set_row_cell(S_SELECTED, true); int row = docs.set_row_cell(S_SELECTED, !clear);
docs.set_row_cell(S_ANNO, doc.get_int(DOC_ANNO), row); docs.set_row_cell(S_ANNO, doc.get_int(DOC_ANNO), row);
docs.set_row_cell(S_CODNUM, doc.get(DOC_CODNUM), row); docs.set_row_cell(S_CODNUM, doc.get(DOC_CODNUM), row);
@ -293,11 +295,8 @@ void TPA_mask::print()
} }
sf.force_update(); sf.force_update();
if (files.full()) if (files.full())
{
goto_url(temp); goto_url(temp);
} }
return;
}
void TPA_mask::elabora(bool invia, bool reset_name, const char * stato) void TPA_mask::elabora(bool invia, bool reset_name, const char * stato)
{ {
@ -372,6 +371,34 @@ void TPA_mask::elabora(bool invia, bool reset_name, const char * stato)
fill_docs(); fill_docs();
} }
void TPA_mask::check()
{
int ndocs = 0;
TLocalisamfile doc(LF_DOC);
TSheet_field & sht = sfield(F_DOCS);
{
TProgress_monitor pi(sht.items(), "Diagnostica Fatture");
FOR_EACH_SHEET_ROW_LOOP(sht, r)
{
if (!pi.add_status())
break;
if (sht.get_bool_row_cell(r, S_SELECTED))
{
const int anno = sht.get_int_row_cell(r, S_ANNO);
const long ndoc = sht.get_long_row_cell(r, S_NDOC);
const TFixed_string codnum(sht.get_str_row_cell(r, S_CODNUM)); // lascio sapientemente per ultima la get di una stringa
TDocumento doc('D', anno, codnum, ndoc);
doc.check();
sht.set_row_cell(S_SELECTED, false, r);
}
}
}
fill_docs(true);
}
bool TPA_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TPA_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
switch (o.dlg()) switch (o.dlg())
@ -400,7 +427,7 @@ bool TPA_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
if (e == se_query_add || e == se_query_del) if (e == se_query_add || e == se_query_del)
return false; return false;
break; break;
case DLG_OK: case DLG_ELABORA:
if (e == fe_button) if (e == fe_button)
elabora(); elabora();
break; break;
@ -458,7 +485,10 @@ bool TPA_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
elabora(false, reset_name, stato); elabora(false, reset_name, stato);
} }
break; break;
case DLG_CHECK_SDI:
if (e == fe_button)
check();
break;
default: break; default: break;
} }
return true; return true;
@ -471,7 +501,10 @@ void TPA_mask::next_page(int p)
if (filter_changed()) if (filter_changed())
fill_docs(); fill_docs();
if (p == 1000) if (p == 1000)
{
disable(DLG_FINDREC); disable(DLG_FINDREC);
disable(DLG_CHECK_SDI);
}
TAutomask::next_page(p); TAutomask::next_page(p);
} }
@ -496,8 +529,9 @@ bool TPA_mask::check_full_fields() const
TPA_mask::TPA_mask() : TAutomask("fp0300a01"), _dirty(true) TPA_mask::TPA_mask() : TAutomask("fp0300a01"), _dirty(true)
{ {
disable(DLG_OK); disable(DLG_ELABORA);
disable(DLG_FINDREC); disable(DLG_FINDREC);
disable(DLG_CHECK_SDI);
disable(DLG_PDF); disable(DLG_PDF);
load_all_fields(); load_all_fields();
const TDate data_inizio = botime; const TDate data_inizio = botime;

View File

@ -45,6 +45,7 @@ protected:
void xml(); void xml();
void elimina(); void elimina();
void archivia(); void archivia();
void check();
void recupera(); void recupera();
TDate load_data() const; TDate load_data() const;
// bool on_key(KEY key) override; // bool on_key(KEY key) override;
@ -177,6 +178,10 @@ bool TPassive_mask::on_field_event(TOperable_field& o, TField_event e, long joll
case DLG_RESTORE: case DLG_RESTORE:
recupera(); recupera();
break; break;
case DLG_CHECK_SDI:
if (e == fe_button)
check();
break;
case F_DATAINI: case F_DATAINI:
if (e == fe_init) if (e == fe_init)
o.set(load_data()); o.set(load_data());
@ -261,6 +266,7 @@ void TPassive_mask::next_page(int p)
disable(DLG_PDF); disable(DLG_PDF);
disable(DLG_XML); disable(DLG_XML);
disable(DLG_COPY); disable(DLG_COPY);
disable(DLG_CHECK_SDI);
} }
else else
{ {
@ -275,6 +281,8 @@ void TPassive_mask::next_page(int p)
enable(DLG_PDF); enable(DLG_PDF);
enable(DLG_XML); enable(DLG_XML);
enable(DLG_COPY); enable(DLG_COPY);
enable(DLG_CHECK_SDI, fp_has_check());
} }
TAutomask::next_page(p); TAutomask::next_page(p);
} }
@ -313,7 +321,6 @@ void TPassive_mask::fill_docs()
if (name.full()) if (name.full())
{ {
int pos = name.find("_");
const int anno = d.get_int(DOC_ANNO); const int anno = d.get_int(DOC_ANNO);
TFilename xml_name = get_xml_arc(anno); TFilename xml_name = get_xml_arc(anno);
@ -352,11 +359,6 @@ void TPassive_mask::fill_docs()
} }
} }
real diff = sf.get_real_row_cell(r, S_TOTDOCXML) - sf.get_real_row_cell(r, S_TOTDOC);
sf.set_row_cell(S_DIFF, diff, r);
sf.set_back_and_fore_color(diff != ZERO ? COLOR_LTRED : COLOR_LTGREEN, NORMAL_COLOR, r, S_DIFF);
TDate dataric = datadoc; TDate dataric = datadoc;
TFilename ini_name = xml_name; TFilename ini_name = xml_name;
@ -379,12 +381,12 @@ void TPassive_mask::fill_docs()
sf.disable_cell(r, S_CODFISC); sf.disable_cell(r, S_CODFISC);
TXmlItem * h = xml.FindFirstChild("FatturaElettronicaHeader"); TXmlItem * h = xml.FindFirstChild("FatturaElettronicaHeader");
TXmlItem * dati_trasmissione = h != nullptr ? h->FindFirstChild("DatiTrasmissione") : nullptr;
if (dati_trasmissione == nullptr)
continue;
if (h != nullptr) if (h != nullptr)
{ {
TXmlItem * dati_trasmissione = h->FindFirstChild("DatiTrasmissione");
if (dati_trasmissione != nullptr) if (dati_trasmissione != nullptr)
sf.set_row_cell(S_IDSDI, dati_trasmissione->GetEnclosedText("ProgressivoInvio"), r); sf.set_row_cell(S_IDSDI, dati_trasmissione->GetEnclosedText("ProgressivoInvio"), r);
@ -392,11 +394,11 @@ void TPassive_mask::fill_docs()
if (cp != nullptr) if (cp != nullptr)
{ {
TXmlItem * da = cp->FindFirstChild("DatiAnagrafici"); TXmlItem * da = fattura_ordinaria(*dati_trasmissione) ? cp->FindFirstChild("DatiAnagrafici") : cp;
if (da != nullptr) if (da != nullptr)
{ {
TXmlItem * anagr = da->FindFirstChild("Anagrafica"); TXmlItem * anagr = fattura_ordinaria(*dati_trasmissione) ? da->FindFirstChild("Anagrafica") : cp;
TString ragione_sociale; TString ragione_sociale;
if (anagr != nullptr) if (anagr != nullptr)
@ -414,6 +416,25 @@ void TPassive_mask::fill_docs()
} }
} }
} }
if (fattura_semplificata(*dati_trasmissione))
{
real totale;
int last = 1;
for (TXmlItem * riga = body->FindFirstChild("DatiBeniServizi"); riga != nullptr; riga = body->FindChild("DatiBeniServizi", last))
{
TString natura = riga->GetEnclosedText("Natura");
TDate inizio = riga->GetEnclosedDate("DataInizioPeriodo");
totale += riga->GetEnclosedReal("Importo");
}
sf.set_row_cell(S_TOTDOCXML, totale, r);
}
real diff = sf.get_real_row_cell(r, S_TOTDOCXML) - sf.get_real_row_cell(r, S_TOTDOC);
sf.set_row_cell(S_DIFF, diff, r);
sf.set_back_and_fore_color(diff != ZERO ? COLOR_LTRED : COLOR_LTGREEN, NORMAL_COLOR, r, S_DIFF);
} }
sf.set_row_cell(S_NUMREGCG, d.get_long(DOC_NUMREG), r); sf.set_row_cell(S_NUMREGCG, d.get_long(DOC_NUMREG), r);
} }
@ -443,7 +464,6 @@ void TPassive_mask::fill_xml()
TXmlItem xml(*file, nullptr, "Allegati|ds:Signature"); TXmlItem xml(*file, nullptr, "Allegati|ds:Signature");
TFilename xml_name = *file; TFilename xml_name = *file;
TString name = xml_name.name_only(); TString name = xml_name.name_only();
int pos = name.find("_");
if (get_fp_bool_var(FP_HIDENOPIVA)) if (get_fp_bool_var(FP_HIDENOPIVA))
{ {
@ -482,14 +502,17 @@ void TPassive_mask::fill_xml()
TString cofi; TString cofi;
TString8 tipodocsdi; TString8 tipodocsdi;
TXmlItem * h = xml.FindFirstChild("FatturaElettronicaHeader"); TXmlItem * h = xml.FindFirstChild("FatturaElettronicaHeader");
TXmlItem * dati_trasmissione = h->FindFirstChild("DatiTrasmissione");
if (dati_trasmissione == nullptr)
continue;
if (h != nullptr) if (h != nullptr)
{ {
TXmlItem * c = h->FindFirstChild("CedentePrestatore"); TXmlItem * c = h->FindFirstChild("CedentePrestatore");
if (c != nullptr) if (c != nullptr)
{ {
TXmlItem * dati_anagr = c->FindFirstChild("DatiAnagrafici"); TXmlItem * dati_anagr = fattura_ordinaria(*dati_trasmissione) ? c->FindFirstChild("DatiAnagrafici") : c;
if (dati_anagr != nullptr) if (dati_anagr != nullptr)
{ {
@ -545,7 +568,8 @@ void TPassive_mask::fill_xml()
} }
} }
} }
if (fattura_ordinaria(*dati_trasmissione))
{
TXmlItem * corpo = body->FindFirstChild("DatiBeniServizi"); TXmlItem * corpo = body->FindFirstChild("DatiBeniServizi");
if (corpo != nullptr) if (corpo != nullptr)
@ -573,7 +597,7 @@ void TPassive_mask::fill_xml()
} }
for (TXmlItem * riga = corpo->FindChild("DettaglioLinee", last); riga != nullptr; riga = corpo->FindChild("DettaglioLinee", last)) for (TXmlItem * riga = corpo->FindChild("DettaglioLinee", last); riga != nullptr; riga = corpo->FindChild("DettaglioLinee", last))
{ {
TDate inizio = riga->GetEnclosedDate("Natura"); TDate inizio = riga->GetEnclosedDate("DataInizioPeriodo");
if (tipodocsdi == "TD18" && (inizio.ok())) if (tipodocsdi == "TD18" && (inizio.ok()))
{ {
@ -583,6 +607,35 @@ void TPassive_mask::fill_xml()
} }
} }
} }
else
{
real totale;
int last = 1;
for (TXmlItem * riga = body->FindFirstChild("DatiBeniServizi"); riga != nullptr; riga = body->FindChild("DatiBeniServizi", last))
{
TString natura = riga->GetEnclosedText("Natura");
TDate inizio = riga->GetEnclosedDate("DataInizioPeriodo");
totale += riga->GetEnclosedReal("Importo");
if (natura.starts_with("N6"))
{
if ((natura == "N6.3") || (natura == "N6.7"))
tipodocsdi = "TD19";
else
tipodocsdi = "TD16";
break;
}
else
if ((natura == "N3.2") || (natura == "N3.3"))
{
tipodocsdi = "TD18";
break;
}
}
sf.set_row_cell(S_TOTDOCXML, totale, r);
}
}
TToken_string key = "F"; TToken_string key = "F";
long codcf = 0; long codcf = 0;
@ -672,8 +725,6 @@ void TPassive_mask::fill_xml()
if (h != nullptr) if (h != nullptr)
{ {
TXmlItem * dati_trasmissione = h->FindFirstChild("DatiTrasmissione");
if (dati_trasmissione != nullptr) if (dati_trasmissione != nullptr)
sf.set_row_cell(S_IDSDI, dati_trasmissione->GetEnclosedText("ProgressivoInvio"), r); sf.set_row_cell(S_IDSDI, dati_trasmissione->GetEnclosedText("ProgressivoInvio"), r);
@ -681,11 +732,11 @@ void TPassive_mask::fill_xml()
if (cp != nullptr) if (cp != nullptr)
{ {
TXmlItem * da = cp->FindFirstChild("DatiAnagrafici"); TXmlItem * da = fattura_ordinaria(*dati_trasmissione) ? cp->FindFirstChild("DatiAnagrafici") : cp;
if (da != nullptr) if (da != nullptr)
{ {
TXmlItem * anagr = da->FindFirstChild("Anagrafica"); TXmlItem * anagr = fattura_ordinaria(*dati_trasmissione) ? da->FindFirstChild("Anagrafica") : cp;
TString ragione_sociale; TString ragione_sociale;
if (anagr != nullptr) if (anagr != nullptr)
@ -731,7 +782,6 @@ void TPassive_mask::fill_archived()
TXmlItem xml(*file, nullptr, "Allegati|ds:Signature"); TXmlItem xml(*file, nullptr, "Allegati|ds:Signature");
TFilename xml_name = *file; TFilename xml_name = *file;
TString name = xml_name.name_only(); TString name = xml_name.name_only();
int pos = name.find("_");
if (get_fp_bool_var(FP_HIDENOPIVA)) if (get_fp_bool_var(FP_HIDENOPIVA))
{ {
@ -770,14 +820,17 @@ void TPassive_mask::fill_archived()
TString cofi; TString cofi;
TString8 tipodocsdi; TString8 tipodocsdi;
TXmlItem * h = xml.FindFirstChild("FatturaElettronicaHeader"); TXmlItem * h = xml.FindFirstChild("FatturaElettronicaHeader");
TXmlItem * dati_trasmissione = h->FindFirstChild("DatiTrasmissione");
if (dati_trasmissione == nullptr)
continue;
if (h != nullptr) if (h != nullptr)
{ {
TXmlItem * c = h->FindFirstChild("CedentePrestatore"); TXmlItem * c = h->FindFirstChild("CedentePrestatore");
if (c != nullptr) if (c != nullptr)
{ {
TXmlItem * dati_anagr = c->FindFirstChild("DatiAnagrafici"); TXmlItem * dati_anagr = fattura_ordinaria(*dati_trasmissione) ? c->FindFirstChild("DatiAnagrafici") : c;
if (dati_anagr != nullptr) if (dati_anagr != nullptr)
{ {
@ -833,7 +886,8 @@ void TPassive_mask::fill_archived()
} }
} }
} }
if (fattura_ordinaria(*dati_trasmissione))
{
TXmlItem * corpo = body->FindFirstChild("DatiBeniServizi"); TXmlItem * corpo = body->FindFirstChild("DatiBeniServizi");
if (corpo != nullptr) if (corpo != nullptr)
@ -861,7 +915,7 @@ void TPassive_mask::fill_archived()
} }
for (TXmlItem * riga = corpo->FindChild("DettaglioLinee", last); riga != nullptr; riga = corpo->FindChild("DettaglioLinee", last)) for (TXmlItem * riga = corpo->FindChild("DettaglioLinee", last); riga != nullptr; riga = corpo->FindChild("DettaglioLinee", last))
{ {
TDate inizio = riga->GetEnclosedDate("Natura"); TDate inizio = riga->GetEnclosedDate("DataInizioPeriodo");
if (tipodocsdi == "TD18" && (inizio.ok())) if (tipodocsdi == "TD18" && (inizio.ok()))
{ {
@ -871,6 +925,35 @@ void TPassive_mask::fill_archived()
} }
} }
} }
else
{
real totale;
int last = 1;
for (TXmlItem * riga = body->FindFirstChild("DatiBeniServizi"); riga != nullptr; riga = body->FindChild("DatiBeniServizi", last))
{
TString natura = riga->GetEnclosedText("Natura");
TDate inizio = riga->GetEnclosedDate("DataInizioPeriodo");
totale += riga->GetEnclosedReal("Importo");
if (natura.starts_with("N6"))
{
if ((natura == "N6.3") || (natura == "N6.7"))
tipodocsdi = "TD19";
else
tipodocsdi = "TD16";
break;
}
else
if ((natura == "N3.2") || (natura == "N3.3"))
{
tipodocsdi = "TD18";
break;
}
}
sf.set_row_cell(S_TOTDOCXML, totale, r);
}
}
TToken_string key = "F"; TToken_string key = "F";
long codcf = 0; long codcf = 0;
@ -960,8 +1043,6 @@ void TPassive_mask::fill_archived()
if (h != nullptr) if (h != nullptr)
{ {
TXmlItem * dati_trasmissione = h->FindFirstChild("DatiTrasmissione");
if (dati_trasmissione != nullptr) if (dati_trasmissione != nullptr)
sf.set_row_cell(S_IDSDI, dati_trasmissione->GetEnclosedText("ProgressivoInvio"), r); sf.set_row_cell(S_IDSDI, dati_trasmissione->GetEnclosedText("ProgressivoInvio"), r);
@ -969,11 +1050,11 @@ void TPassive_mask::fill_archived()
if (cp != nullptr) if (cp != nullptr)
{ {
TXmlItem * da = cp->FindFirstChild("DatiAnagrafici"); TXmlItem * da = fattura_ordinaria(*dati_trasmissione) ? cp->FindFirstChild("DatiAnagrafici") : cp;
if (da != nullptr) if (da != nullptr)
{ {
TXmlItem * anagr = da->FindFirstChild("Anagrafica"); TXmlItem * anagr = fattura_ordinaria(*dati_trasmissione) ? da->FindFirstChild("Anagrafica") : cp;
TString ragione_sociale; TString ragione_sociale;
if (anagr != nullptr) if (anagr != nullptr)
@ -1319,6 +1400,35 @@ void TPassive_mask::recupera()
return; return;
} }
void TPassive_mask::check()
{
int ndocs = 0;
TLocalisamfile doc(LF_DOC);
TSheet_field & sht = sfield(F_DOCS);
TLog_report log;
{
TProgress_monitor pi(sht.items(), "Diagnostica Fatture");
FOR_EACH_SHEET_ROW_LOOP(sht, r)
{
if (!pi.add_status())
break;
if (sht.get_bool_row_cell(r, S_SELECTED))
{
const int anno = sht.get_int_row_cell(r, S_ANNO);
const long ndoc = sht.get_long_row_cell(r, S_NDOC);
const TFixed_string codnum(sht.get_str_row_cell(r, S_CODNUM)); // lascio sapientemente per ultima la get di una stringa
TDocumento doc('D', anno, codnum, ndoc);
doc.check();
sht.set_row_cell(S_SELECTED, false, r);
}
}
fill();
}
}
TDate TPassive_mask::load_data() const TDate TPassive_mask::load_data() const
{ {
TDate date = get_fp_date_var(F1_DATAINI); TDate date = get_fp_date_var(F1_DATAINI);

View File

@ -33,6 +33,7 @@ protected:
void set_filter_changed(); void set_filter_changed();
void elabora(bool invia = true, bool reset_name = false, const char * stato = " "); void elabora(bool invia = true, bool reset_name = false, const char * stato = " ");
void check();
void print(); void print();
void print_reg(); void print_reg();
bool on_field_event(TOperable_field& o, TField_event e, long jolly); bool on_field_event(TOperable_field& o, TField_event e, long jolly);
@ -40,7 +41,7 @@ protected:
virtual bool on_key(KEY key) ; virtual bool on_key(KEY key) ;
bool check_not_empty(); bool check_not_empty();
bool check_full_fields() const; bool check_full_fields() const;
void fill(); void fill(bool clear = false);
void init(); void init();
void force_reload_sheet(); void force_reload_sheet();
bool filter_changed(); bool filter_changed();
@ -151,7 +152,7 @@ bool TPAR_mask::check_full_fields() const
return true; return true;
} }
void TPAR_mask::fill() void TPAR_mask::fill(bool clear)
{ {
const TDate dal = get(F_DATAINI); const TDate dal = get(F_DATAINI);
const TDate al = get(F_DATAEND); const TDate al = get(F_DATAEND);
@ -182,8 +183,10 @@ void TPAR_mask::fill()
filter << "==\"" << filter_selected << "\""; filter << "==\"" << filter_selected << "\"";
TCursor cur(new TRelation(LF_MOV), filter, 2, &from, &to); TCursor cur(new TRelation(LF_MOV), filter, 2, &from, &to);
enable(DLG_OK, filter_selected.empty() || filter_selected == "X");
enable(DLG_ELABORA, filter_selected.empty() || filter_selected == "X");
enable(DLG_FINDREC, filter_selected == "X" || filter_selected == "I" || filter_selected == "E"); enable(DLG_FINDREC, filter_selected == "X" || filter_selected == "I" || filter_selected == "E");
enable(DLG_CHECK_SDI, fp_has_check() && filter_selected.full());
regs.enable_column(S_SELECTED, filter_selected.empty() || filter_selected == "X" || filter_selected == "I"); regs.enable_column(S_SELECTED, filter_selected.empty() || filter_selected == "X" || filter_selected == "I");
enable(DLG_PDF, filter_selected == "X" || filter_selected == "I" || filter_selected == "E"); enable(DLG_PDF, filter_selected == "X" || filter_selected == "I" || filter_selected == "E");
enable(DLG_ALL, true); enable(DLG_ALL, true);
@ -214,7 +217,7 @@ void TPAR_mask::fill()
const TCausale& caus = cached_causale(mov); const TCausale& caus = cached_causale(mov);
const TString& tipodocsdi = caus.tipodocsdi(); const TString& tipodocsdi = caus.tipodocsdi();
const TString & prefisso = caus.reg().prefisso(); const TString & prefisso = caus.reg().prefisso();
int r = regs.set_row_cell(S_SELECTED, true); int r = regs.set_row_cell(S_SELECTED, !clear);
regs.set_row_cell(S_ANNO, mov.get_int(MOV_ANNOES), r); regs.set_row_cell(S_ANNO, mov.get_int(MOV_ANNOES), r);
regs.set_row_cell(S_NUMREG, mov.get(MOV_NUMREG), r); regs.set_row_cell(S_NUMREG, mov.get(MOV_NUMREG), r);
@ -331,6 +334,32 @@ void TPAR_mask::elabora(bool invia, bool reset_name, const char * stato)
fill(); fill();
} }
void TPAR_mask::check()
{
int ndocs = 0;
TLocalisamfile doc(LF_DOC);
TSheet_field & sht = sfield(F_REGS);
{
TProgress_monitor pi(sht.items(), "Diagnostica Fatture");
FOR_EACH_SHEET_ROW_LOOP(sht, r)
{
if (!pi.add_status())
break;
if (sht.get_bool_row_cell(r, S_SELECTED))
{
const long nreg = sht.get_long_row_cell(r, S_NUMREG);
TMovimento_contabile mov(nreg);
mov.check();
sht.set_row_cell(S_SELECTED, false, r);
}
}
}
fill(true);
}
void TPAR_mask::print() void TPAR_mask::print()
{ {
@ -462,12 +491,9 @@ bool TPAR_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
if (e == fe_modify) if (e == fe_modify)
load_sheet(o.get()); load_sheet(o.get());
break; break;
case DLG_OK: case DLG_ELABORA:
if (e == fe_button)
{
if (e == fe_button) if (e == fe_button)
elabora(); elabora();
}
break; break;
case DLG_PDF: case DLG_PDF:
if (e == fe_button) if (e == fe_button)
@ -525,6 +551,10 @@ bool TPAR_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
elabora(false, reset_name, stato); elabora(false, reset_name, stato);
} }
break; break;
case DLG_CHECK_SDI:
if (e == fe_button)
check();
break;
default: break; default: break;
} }
if ((e == fe_modify || e >= se_enter) && jolly == 0) if ((e == fe_modify || e >= se_enter) && jolly == 0)
@ -539,7 +569,10 @@ void TPAR_mask::next_page(int p)
if (filter_changed()) if (filter_changed())
fill(); fill();
if (p == 1000) if (p == 1000)
{
disable(DLG_FINDREC); disable(DLG_FINDREC);
disable(DLG_CHECK_SDI);
}
if (ok) if (ok)
TAutomask::next_page(p); TAutomask::next_page(p);
} }
@ -550,17 +583,19 @@ bool TPAR_mask::on_key(KEY key)
if (ok && curr_page() == 0) if (ok && curr_page() == 0)
{ {
disable(DLG_OK); disable(DLG_ELABORA);
disable(DLG_PDF); disable(DLG_PDF);
disable(DLG_ALL); disable(DLG_ALL);
enable(DLG_CHECK_SDI);
} }
return ok; return ok;
} }
TPAR_mask::TPAR_mask() : TAutomask("fp0700a01"), _dirty(true) TPAR_mask::TPAR_mask() : TAutomask("fp0700a01"), _dirty(true)
{ {
disable(DLG_OK); disable(DLG_ELABORA);
disable(DLG_PDF); disable(DLG_PDF);
enable(DLG_CHECK_SDI);
load_all_fields(); load_all_fields();
if (!get_fp_bool_var(FP_SEND_TD16)) if (!get_fp_bool_var(FP_SEND_TD16))
{ {

View File

@ -63,6 +63,7 @@
#define FP_RAGSOCP "ragsocp" #define FP_RAGSOCP "ragsocp"
#define FP_ADDINDSP "addindsp" #define FP_ADDINDSP "addindsp"
#define FP_DUMP_VALS "dumpvals" #define FP_DUMP_VALS "dumpvals"
#define FP_RIF_PAG "rifpag"
// F1 // F1
#define F1_USEDATARIC "usedataric" #define F1_USEDATARIC "usedataric"
#define F1_DATAINI "datainif1" #define F1_DATAINI "datainif1"
@ -80,7 +81,7 @@ TLog_report * get_xml_log();
void show_xml_log(); void show_xml_log();
void copy_xml_log(TReport_book & book); void copy_xml_log(TReport_book & book);
const TString & get_numdoc_exp_fp(int numreg); const TString & get_numdoc_exp_fp(int numreg);
bool fp_has_check();
// Compila il numero di documento per la scrittura sui paf // Compila il numero di documento per la scrittura sui paf
// TString& complete_num_FP(con// Genera la chiave per i paf // TString& complete_num_FP(con// Genera la chiave per i paf
// Ritorna cod sdi, pec o vuoto. Chiama get_coddest() // Ritorna cod sdi, pec o vuoto. Chiama get_coddest()

View File

@ -110,6 +110,7 @@ void check_acquisti()
TFiles_array files(true); TFiles_array files(true);
TFiles_array dest_files(true); TFiles_array dest_files(true);
TFiles_array elab(true); TFiles_array elab(true);
TFiles_array coded(true);
TAnagrafica ditta(LF_NDITTE, prefix().get_codditta()); TAnagrafica ditta(LF_NDITTE, prefix().get_codditta());
TString paiva(ditta.stato_partita_IVA()); TString paiva(ditta.stato_partita_IVA());
TString cofi(ditta.codice_fiscale()); TString cofi(ditta.codice_fiscale());
@ -120,6 +121,83 @@ void check_acquisti()
paiva << ditta.partita_IVA(); paiva << ditta.partita_IVA();
if (!dexist(mask)) if (!dexist(mask))
make_dir(mask); make_dir(mask);
// p7m firmati
mask.add("*.p7m");
if (get_fp_bool_var(FP_RECURSIVE))
list_files_recursive(mask, coded);
else
list_files(mask, coded);
FOR_EACH_ARRAY_ROW(coded, r1, riga1)
{
TFilename & file = coded[r1];
TFilename name = file.name();
TFilename xml = file;
xml.ext("");
xml.ext("xml");
{
ifstream cd(file, ios::binary);
ofstream xm(xml);
bool write = false;
long size = fsize(file);
cd >> std::noskipws;
while (cd.tellg() < size)
{
unsigned char c;
cd >> c;
if (write && c == 4)
{
cd >> c; // skip four chars
cd >> c;
cd >> c;
cd >> c;
}
if (!write && c == '<')
{
write = true;
continue;
}
if (write && c == ':')
{
int count = 0;
const TString cmp("FatturaElettronica>");
TString str;
while (count < cmp.len())
{
unsigned char c1;
cd >> c1;
str << (char)c1;
if (str[count] == cmp[count])
count++;
else
break;
}
if (count == cmp.len())
{
xm << c;
xm << str;
write = false;
}
else
{
for (int i = count; i >= 0; i--)
cd.putback(str[i]);
}
}
if (write)
xm << c;
}
}
file.fremove();
}
// xml e metadati
mask = get_ext_acq_src();
mask.add("*.xml"); mask.add("*.xml");
if(get_fp_bool_var(FP_RECURSIVE)) if(get_fp_bool_var(FP_RECURSIVE))
list_files_recursive(mask, files); list_files_recursive(mask, files);
@ -129,9 +207,28 @@ void check_acquisti()
FOR_EACH_ARRAY_ROW(files, r0, riga) FOR_EACH_ARRAY_ROW(files, r0, riga)
{ {
TFilename & file = files[r0]; TFilename & file = files[r0];
TFilename name = file.name();
name.lower();
if (name.find("_metadato") > 0)
{
TFilename ini = file.path();
name = file.name();
const int pos = name.find(".");
if (pos > 0)
name.cut(pos);
ini.add(name);
ini.ext("ini");
fmove(file, ini);
files.destroy(r0);
}
else
file.ext("xml"); file.ext("xml");
} }
files.pack();
TFilename dest = get_xml_src(); TFilename dest = get_xml_src();
if (!dexist(dest)) if (!dexist(dest))
@ -178,7 +275,6 @@ void check_acquisti()
{ {
files -= elab; files -= elab;
dest_files -= elab; dest_files -= elab;
} }
TProgind p(files.items(), TR("Recupero fatture di acquisto")); TProgind p(files.items(), TR("Recupero fatture di acquisto"));
@ -192,9 +288,27 @@ void check_acquisti()
break; break;
const TFilename & src_file = files[r]; const TFilename & src_file = files[r];
TFilename temp_xml_file = src_file;
TFilename temp_dest_xml;
TFilename temp_dest_ini;
if (is_remote(temp_xml_file))
{
TFilename temp_ini_file = temp_xml_file;
temp_dest_xml.tempdir();
temp_dest_xml.add(temp_xml_file.name());
fcopy(temp_xml_file, temp_dest_xml, false, true);
temp_ini_file.ext("ini");
temp_dest_ini = temp_dest_xml;
temp_dest_ini.ext("ini");
fcopy(temp_ini_file, temp_dest_ini, false, true);
temp_xml_file = temp_dest_xml;
}
bool found = import_FePA; bool found = import_FePA;
TXmlItem i(src_file, nullptr, "Allegati|ds:Signature", true, true); TXmlItem i(temp_xml_file, nullptr, "Allegati|ds:Signature", true, true);
TString tipodocsdi = "TD01"; TString tipodocsdi = "TD01";
if (!found) if (!found)
@ -248,7 +362,7 @@ void check_acquisti()
if (found) if (found)
{ {
TFilename & dest = (TFilename &) dest_files[r]; TFilename & dest = (TFilename &) dest_files[r];
TFilename ini(src_file); TFilename ini(temp_xml_file);
i.Write(dest, 0); i.Write(dest, 0);
ini.ext("ini"); ini.ext("ini");
@ -271,6 +385,8 @@ void check_acquisti()
move_xml_acq(dest, anno); move_xml_acq(dest, anno);
} }
} }
temp_dest_xml.fremove();
temp_dest_ini.fremove();
} }
reset_xml_special_text(); reset_xml_special_text();
reset_xml_preserve_cdata(); reset_xml_preserve_cdata();
@ -298,7 +414,7 @@ void move_xml_acq(const TFilename &xml_name, int anno)
{ {
dest.ext("ini"); dest.ext("ini");
if (dest.exist()) if (dest.exist())
remove(dest); dest.fremove();
fmove(src, dest, false, true); fmove(src, dest, false, true);
} }
} }
@ -317,7 +433,7 @@ void restore_xml_acq(const TFilename &xml_name, int anno)
if (src.exist()) if (src.exist())
{ {
if (dest.exist()) if (dest.exist())
remove(dest); dest.fremove();
fmove(src, dest); fmove(src, dest);
} }
src.ext("ini"); src.ext("ini");
@ -325,7 +441,7 @@ void restore_xml_acq(const TFilename &xml_name, int anno)
{ {
dest.ext("ini"); dest.ext("ini");
if (dest.exist()) if (dest.exist())
remove(dest); dest.fremove();
fmove(src, dest); fmove(src, dest);
} }
} }
@ -344,7 +460,7 @@ void archive_xml_acq(const TFilename &xml_name, int anno)
if (src.exist()) if (src.exist())
{ {
if (dest.exist()) if (dest.exist())
remove(dest); dest.fremove();
fmove(src, dest, false, true); fmove(src, dest, false, true);
} }
src.ext("ini"); src.ext("ini");
@ -352,7 +468,7 @@ void archive_xml_acq(const TFilename &xml_name, int anno)
{ {
dest.ext("ini"); dest.ext("ini");
if (dest.exist()) if (dest.exist())
remove(dest); dest.fremove();
fmove(src, dest, false, true); fmove(src, dest, false, true);
} }
} }
@ -371,7 +487,7 @@ void retrieve_xml_acq(const TFilename &xml_name, int anno)
if (src.exist()) if (src.exist())
{ {
if (dest.exist()) if (dest.exist())
remove(dest); dest.fremove();
fmove(src, dest); fmove(src, dest);
} }
src.ext("ini"); src.ext("ini");
@ -379,7 +495,7 @@ void retrieve_xml_acq(const TFilename &xml_name, int anno)
{ {
dest.ext("ini"); dest.ext("ini");
if (dest.exist()) if (dest.exist())
remove(dest); dest.fremove();
fmove(src, dest); fmove(src, dest);
} }
} }
@ -510,6 +626,20 @@ const TString & get_ext_acq_src()
return get_tmp_string() = dir; return get_tmp_string() = dir;
} }
bool fp_has_check()
{
bool ok = false;
const TString& tipo = get_fp_string_var(FP_TIPO_CHECK);
if (tipo == "F")
{
const TString& api_key = get_fp_string_var(FP_SESSION_ID);
ok = api_key.full();
}
return ok;
}
TString& complete_num_fp(const TCodice_numerazione& codnum, const int numdoc) TString& complete_num_fp(const TCodice_numerazione& codnum, const int numdoc)
{ {
static const int len_num_doc = TRectype(LF_DOC).length(DOC_NDOC); static const int len_num_doc = TRectype(LF_DOC).length(DOC_NDOC);

View File

@ -7,7 +7,7 @@ Item_01 = "Manutenzione modulo", [FPMENUF_002]
Item_02 = "Invio fatture", "fp010 -2", "" Item_02 = "Invio fatture", "fp010 -2", ""
Item_03 = "Invio Integrazioni", "fp010 -6", "" Item_03 = "Invio Integrazioni", "fp010 -6", ""
Item_04 = "Monitor Fatture Passive", "fp010 -3", "" Item_04 = "Monitor Fatture Passive", "fp010 -3", ""
Item_04 = "Ducumenti interattivi (FEPA)", "ve010 -0", "" Item_04 = "Documenti interattivi (FEPA)", "ve010 -0", ""
Item_04 = "Prima nota (FEPA)", "cg012 -0", "" Item_04 = "Prima nota (FEPA)", "cg012 -0", ""
Item_05 = "FEPA", "fepa\fepa.exe", "" Item_05 = "FEPA", "fepa\fepa.exe", ""
Item_06 = "Stampe", [FPMENUF_003] Item_06 = "Stampe", [FPMENUF_003]