Patch level : 12.0 nopatch
Files correlati : Commento : Aggiornamento Fp
This commit is contained in:
parent
f3ae3b9233
commit
3b7acc6c98
@ -13,7 +13,9 @@ int main(int argc, char** argv)
|
||||
case 3: rt = fp0400(argc, argv); break; // Monitor fatture passive
|
||||
case 4: rt = fp0500(argc, argv); break; // Customizzazioni FP per utente
|
||||
case 5: rt = fp0600(argc, argv); break; // Da fare
|
||||
case 6: rt = fp0700(argc, argv); break; //Invio regolarizzazioni INTRA
|
||||
default: rt = fp0100(argc, argv); break; // Configurazione
|
||||
|
||||
}
|
||||
return rt;
|
||||
}
|
||||
|
@ -7,5 +7,6 @@ int fp0300(int argc, char* argv[]);
|
||||
int fp0400(int argc, char* argv[]);
|
||||
int fp0500(int argc, char* argv[]);
|
||||
int fp0600(int argc, char* argv[]);
|
||||
int fp0700(int argc, char* argv[]);
|
||||
|
||||
#endif
|
||||
|
773
src/fp/fp0700.cpp
Normal file
773
src/fp/fp0700.cpp
Normal file
@ -0,0 +1,773 @@
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <config.h>
|
||||
#include "fplib.h"
|
||||
#include <progind.h>
|
||||
#include <cfven.h>
|
||||
#include <doc.h>
|
||||
|
||||
#include "../ve/velib05.h"
|
||||
#include "../fe/felib.h"
|
||||
|
||||
#include "fp0.h"
|
||||
#include "fp0700a.h"
|
||||
#include "fp0100a.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// Globals
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define LEN_HFATT 20
|
||||
#define LEN_BFATT 50
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// TPAR_mask
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class TPAR_mask : public TAutomask
|
||||
{
|
||||
protected:
|
||||
enum {_codnum, _tipodoc, _dastato, _astato, _tiposdi};
|
||||
|
||||
void set_filter_changed();
|
||||
void set_pronto();
|
||||
void connect_keys();
|
||||
void export_paf();
|
||||
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
|
||||
void next_page(int p) override;
|
||||
bool on_key(KEY key) override;
|
||||
bool check_not_empty();
|
||||
bool check_full_fields() const;
|
||||
bool check_doc_filter(const TDocumentoEsteso& td) const;
|
||||
void set_err_paf();
|
||||
void fill();
|
||||
void init();
|
||||
void force_reload_sheet();
|
||||
|
||||
void load_all_fields();
|
||||
|
||||
bool _filter_changed;
|
||||
bool _enable_chiave_fixer;
|
||||
|
||||
public:
|
||||
TPAR_mask() : TAutomask("fp0700a"), _filter_changed(true), _enable_chiave_fixer(false)
|
||||
{
|
||||
disable(DLG_OK);
|
||||
disable(DLG_SAVEREC);
|
||||
disable(DLG_FINDREC);
|
||||
load_all_fields();
|
||||
const TDate data_inizio = get_date_start_new_fatt();
|
||||
|
||||
}
|
||||
void save_all_fields() const;
|
||||
};
|
||||
|
||||
void TPAR_mask::save_all_fields() const
|
||||
{
|
||||
ini_set_string(CONFIG_DITTA, "fp", "dataini", get(F_DATAINI));
|
||||
ini_set_string(CONFIG_DITTA, "fp", "dataend", get(F_DATAEND));
|
||||
|
||||
// Salvo lo sheet
|
||||
TFP_selected_docs selected_docs;
|
||||
selected_docs.save_sheet(sfield(F_CAUSALI_TIPO));
|
||||
|
||||
// Salvo le impostazioni
|
||||
/*
|
||||
set_esp_pri_empty(get_bool(F_SETDEFCOD));
|
||||
set_send_all_rifs(get_bool(F_SENDALLRIFS));
|
||||
set_esp_est(get_bool(F_SETCODEST));
|
||||
set_esp_est_cod(get(F_VALCODEST));
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
void TPAR_mask::force_reload_sheet()
|
||||
{
|
||||
// Mi sposto nella prima pagina, setto il flag di dirty sul filtro e mi risposto
|
||||
// Lo faccio perché eliminando la riga direttamente e chiamando la force_update() si crea un bug che cliccando sulla prima riga viene mostrata quella che c'era prima della eliminazione
|
||||
TAutomask::next_page(0);
|
||||
set_focus_field(F_DATAINI);
|
||||
_filter_changed = true;
|
||||
next_page(1);
|
||||
}
|
||||
|
||||
void TPAR_mask::load_all_fields()
|
||||
{
|
||||
set(F_DATAINI, ini_get_string(CONFIG_DITTA, "fp", "dataini"));
|
||||
set(F_DATAEND, ini_get_string(CONFIG_DITTA, "fp", "dataend"));
|
||||
|
||||
const TToken_string s_accepted_docs(ini_get_string(CONFIG_DITTA, "fp", "accepted_docs"), ';');
|
||||
//
|
||||
TSheet_field& sheet = sfield(F_CAUSALI_TIPO);
|
||||
|
||||
TFP_selected_regs selected_regs;
|
||||
|
||||
if (selected_regs.has_selected_regs())
|
||||
{
|
||||
// Super nuova gestione super avanzata!
|
||||
selected_regs.fill_sheet(sheet);
|
||||
}
|
||||
else if(s_accepted_docs.full())
|
||||
{
|
||||
// Nuova gestione avanzata!
|
||||
FOR_EACH_STR_TOKEN(s_accepted_docs, tok)
|
||||
{
|
||||
TToken_string& row = sheet.row(-1);
|
||||
row.add(tok);
|
||||
row.add(TTipo_documento(TToken_string(tok).get(1)).tipo_doc_sdi());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Vecchia gestione ):
|
||||
const TString& codnum = ini_get_string(CONFIG_DITTA, "fp", "codnum");
|
||||
TToken_string tipidocs(ini_get_string(CONFIG_DITTA, "fp", "tipodocs"));
|
||||
FOR_EACH_STR_TOKEN(tipidocs, tok)
|
||||
{
|
||||
TToken_string& row = sheet.row(-1);
|
||||
row.add(codnum);
|
||||
row.add(tok);
|
||||
// Considero 1 e 9 come stati default?
|
||||
row.add(1);
|
||||
row.add(9);
|
||||
row.add(TTipo_documento(tok).tipo_doc_sdi());
|
||||
}
|
||||
}
|
||||
sheet.force_update();
|
||||
sheet.show();
|
||||
|
||||
/* DA FARE
|
||||
set(F_SETDEFCOD, get_esp_pri_empty());
|
||||
set(F_SENDALLRIFS, get_send_all_rifs());
|
||||
set(F_SETCODEST, get_esp_est());
|
||||
set(F_VALCODEST, get_esp_est_cod());
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
void TPAR_mask::fill()
|
||||
{
|
||||
// Salvo subito su file le impostazioni di esportazione, in fplib accedo ai file
|
||||
save_all_fields();
|
||||
|
||||
TSheet_field& docs = sfield(F_DOCS);
|
||||
TString_array& sht = docs.rows_array();
|
||||
docs.hide();
|
||||
|
||||
sht.destroy();
|
||||
|
||||
const TDate dal = get(F_DATAINI);
|
||||
const TDate al = get(F_DATAEND);
|
||||
TString filter_selected = get(F_DOCSEL);
|
||||
|
||||
enable(DLG_OK, filter_selected.empty() || filter_selected == "E");
|
||||
enable(DLG_SAVEREC, (is_f8() && filter_selected == "X") || filter_selected == "D");
|
||||
enable(DLG_FINDREC, filter_selected == "D");
|
||||
enable(DLG_PRINT, _enable_chiave_fixer && filter_selected.empty());
|
||||
|
||||
// Record di controllo per eventuali elaborazioni precedenti
|
||||
TString hfatt(LEN_HFATT), bfatt(LEN_BFATT);
|
||||
TPaf_record paf0100f("PAF0100F");
|
||||
|
||||
TString query;
|
||||
|
||||
query << "USE 33 KEY 3 \n" <<
|
||||
"SELECT 33.TIPOCF==\"C\" \n" <<
|
||||
"JOIN 20 INTO TIPOCF==TIPOCF CODCF==CODCF \n" <<
|
||||
"JOIN 17 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF \n" <<
|
||||
"JOIN %TIP TO 33 ALIAS 400 INTO CODTAB==TIPODOC \n" <<
|
||||
"FROM DATADOC=#DADATADOC \n" <<
|
||||
"TO DATADOC=#ADATADOC";
|
||||
|
||||
TISAM_recordset rec(query);
|
||||
|
||||
rec.set_var("#DADATADOC", dal);
|
||||
rec.set_var("#ADATADOC", al);
|
||||
|
||||
TProgress_monitor pi(rec.items(), nullptr);
|
||||
|
||||
bool first, show, ask = !((show = (first = true)));
|
||||
int fat_no_cod = 0;
|
||||
|
||||
// Disabilito la colonna del codice ufficio
|
||||
docs.enable_column(cid2index(S_UFFICIO), false);
|
||||
const TDate data_inizio = get_date_start_new_fatt();
|
||||
|
||||
for (bool okc = rec.move_first(); okc; okc = rec.move_next())
|
||||
{
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
const TRectype& doc = rec.cursor()->curr();
|
||||
const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC));
|
||||
|
||||
// Controllo che la numerazione sia tra quelle giuste
|
||||
|
||||
// Controllo che il tipo documento sia OK
|
||||
if(!check_doc_filter(doc))
|
||||
continue;
|
||||
|
||||
bool sent = false;
|
||||
if (chiave_paf(doc, hfatt, bfatt))
|
||||
{
|
||||
if (paf0100f.search(nullptr, hfatt, bfatt) && paf0100f.sq_get("P1_GESTIONE") != " " && paf0100f.sq_get("P1_ERRINT") != "*")
|
||||
{
|
||||
if (paf0100f.sq_get("P1_GESTIONE") != filter_selected)
|
||||
continue;
|
||||
sent = true;
|
||||
}
|
||||
else if (filter_selected.not_empty())
|
||||
continue;
|
||||
}
|
||||
|
||||
TToken_string& row = docs.row(-1);
|
||||
row = sent ? " " : "X";
|
||||
row.add(rec.get(DOC_ANNO).as_int(), 1);
|
||||
row.add(rec.get(DOC_CODNUM).as_string());
|
||||
row.add(rec.get(DOC_TIPODOC).as_string());
|
||||
|
||||
TString tipodoc = rec.get(DOC_TIPODOCSDI).as_string();
|
||||
|
||||
if (tipodoc.blank())
|
||||
tipodoc = td.tipo_doc_sdi();
|
||||
if (today <data_inizio && (tipodoc == "TD24" || tipodoc == "TD25" || tipodoc == "TD27"))
|
||||
tipodoc = "TD01";
|
||||
row.add(tipodoc);
|
||||
row.add(rec.get(DOC_NDOC).as_int());
|
||||
row.add(rec.get(DOC_DATADOC).as_date());
|
||||
row.add(rec.get(CFV_CODCF).as_int());
|
||||
row.add(rec.get("20." CLI_RAGSOC).as_string());
|
||||
|
||||
TString cod_ind_sped = rec.get(DOC_CODINDSP).as_string();
|
||||
TString rif = get_dest_sdi(rec.get(CFV_TIPOCF).as_string()[0], rec.get(CFV_CODCF).as_int(), cod_ind_sped);
|
||||
// Se è ancora vuoto potrebbe essere estero
|
||||
if(rif.empty())
|
||||
{
|
||||
// Segno la riga errata
|
||||
if (first)
|
||||
{
|
||||
first = false;
|
||||
// Abilito la colonna del codice ufficio per segnalare l'errore
|
||||
docs.enable_column(docs.cid2index(S_UFFICIO));
|
||||
}
|
||||
docs.set_back_and_fore_color(COLOR_RED, COLOR_WHITE, rec.current_row(), docs.cid2index(S_UFFICIO));
|
||||
fat_no_cod++;
|
||||
}
|
||||
;
|
||||
row.add(rif);
|
||||
row.add(rec.get("17." CFV_PARIFAMM).as_string());
|
||||
row.add(rec.get("20." CLI_COFI).as_string());
|
||||
|
||||
bool split = rec.get("20." CLI_SPLITPAY).as_bool();
|
||||
if (split)
|
||||
{
|
||||
const long numreg = rec.get(DOC_NUMREG).as_int();
|
||||
if (numreg > 0)
|
||||
{
|
||||
const TRectype& mov = cache().get(LF_MOV, numreg);
|
||||
split = is_split_payment(mov);
|
||||
}
|
||||
}
|
||||
row.add(split ? "X" : " ");
|
||||
|
||||
const bool attach = !rec.get("COLL_GOLEM").is_empty();
|
||||
row.add(attach ? "X" : " ");
|
||||
|
||||
row.add(!td.invio_xml() ? "X" : "");
|
||||
}
|
||||
|
||||
docs.force_update();
|
||||
docs.show();
|
||||
|
||||
if (fat_no_cod > 0)
|
||||
warning_box("Sono state trovate una o più fatture senza codice destinatario né pec");
|
||||
}
|
||||
|
||||
void TPAR_mask::set_filter_changed()
|
||||
{
|
||||
_filter_changed = true;
|
||||
}
|
||||
|
||||
void TPAR_mask::set_pronto()
|
||||
{
|
||||
TString_array& sht = sfield(F_DOCS).rows_array();
|
||||
TProgress_monitor pi(sht.items(), "Esportazione Fatture");
|
||||
FOR_EACH_ARRAY_ROW(sht, r, riga)
|
||||
{
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
|
||||
if (!riga->starts_with("X"))
|
||||
continue;
|
||||
|
||||
static TString campo_hfatt, campo_bfatt, query;
|
||||
TDocumento doc('D', riga->get_int(xvtil_cid2index(S_ANNO)), EMPTY_STRING, riga->get_long(xvtil_cid2index(S_NUMREG)));
|
||||
|
||||
if (chiave_paf(doc, campo_hfatt, campo_bfatt))
|
||||
{
|
||||
// Come prima cosa controllo che effettivamente la chiave di questo doc sia in giro per il mondo
|
||||
query.cut(0) << "UPDATE PAF0100F SET P1_GESTIONE = 'P' WHERE P1_KEYHEADERFATT = '" << campo_hfatt << "' AND P1_KEYBODYFATT = '" << campo_bfatt << "'";
|
||||
fp_db().sq_set_exec(query);
|
||||
}
|
||||
}
|
||||
|
||||
// Committo tutto
|
||||
fp_db().sq_commit();
|
||||
force_reload_sheet();
|
||||
}
|
||||
|
||||
void TPAR_mask::connect_keys()
|
||||
{
|
||||
TString_array& sht = sfield(F_DOCS).rows_array();
|
||||
TLog_report legno("Allineamento chiavi documento");
|
||||
// Non sto a fare 8000 variabili, oggi mi sento a corto di Byte
|
||||
static TString msg_log;
|
||||
int updated = 0;
|
||||
|
||||
if (sht.empty())
|
||||
{
|
||||
warning_box("Impossibile allineare le chiavi di uno sheet vuoto!");
|
||||
return;
|
||||
}
|
||||
|
||||
TProgress_monitor pi(sht.items(), "Esportazione Fatture");
|
||||
FOR_EACH_ARRAY_ROW(sht, r, riga)
|
||||
{
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
|
||||
if (!riga->starts_with("X"))
|
||||
continue;
|
||||
|
||||
TDocumento doc('D', riga->get_int(xvtil_cid2index(S_ANNO)), EMPTY_STRING, riga->get_long(xvtil_cid2index(S_NUMREG)));
|
||||
static TString campo_hfatt, campo_bfatt, query;
|
||||
if (chiave_paf(doc, campo_hfatt, campo_bfatt))
|
||||
{
|
||||
// Come prima cosa controllo che effettivamente la chiave di questo doc sia in giro per il mondo
|
||||
query.cut(0) << "SELECT * FROM PAF0100F WHERE P1_KEYHEADERFATT = '" << campo_hfatt << "' AND P1_KEYBODYFATT = '" << campo_bfatt << "'";
|
||||
if(fp_db().sq_set_exec(query))
|
||||
{
|
||||
msg_log.cut(0) << "Il documento " << campo_bfatt << " è già presente nel DB, verrà saltato";
|
||||
legno.log(9000, msg_log);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Provo a cercare il documento nel paf07 come un vero uomo
|
||||
query.cut(0) << "SELECT P7_KEYPRGINVIO, P7_KEYHEADERFATT, P7_KEYBODYFATT FROM PAF0700F WHERE P7_KEYHEADERFATT = '" << campo_hfatt
|
||||
<< "' AND P7_TIPODOC = '" << tipo_doc_sdi(doc) << "' AND P7_DATA = '" << doc.data().date2ansi() << "' AND P7_NUMERO LIKE '%" << doc.numero() << "%'";
|
||||
|
||||
if (fp_db().sq_set_exec(query, false))
|
||||
{
|
||||
bool found = false;
|
||||
// Valori nel db
|
||||
static TString db_prginv, db_hfatt, db_bfatt;
|
||||
|
||||
// Posso avere più di un risulatato, per esempio se effettuo la fatturazione di gennaio potrei avere la fattura 1, 10 e 11 del cliente 100.
|
||||
for (bool ok = fp_db().sq_set_exec(query); ok && !found; ok = fp_db().sq_next())
|
||||
{
|
||||
db_prginv.cut(0) << fp_db().sq_get("P7_KEYPRGINVIO");
|
||||
db_hfatt.cut(0) << fp_db().sq_get("P7_KEYHEADERFATT");
|
||||
db_bfatt.cut(0) << fp_db().sq_get("P7_KEYBODYFATT");
|
||||
|
||||
// Adesso che ho trovato il documento vado a verificare per scrupolo anche le righe documento
|
||||
query.cut(0) << "SELECT * FROM PAF1800F WHERE PI_KEYPRGINVIO = '" << db_prginv
|
||||
<< "' AND PI_KEYHEADERFATT = '" << db_hfatt
|
||||
<< "' AND PI_KEYBODYFATT = '" << db_bfatt << "'";
|
||||
|
||||
// Setto momentaneamente a true per ciclare sotto
|
||||
found = true;
|
||||
for (bool move_ok = fp_db().sq_set_exec(query); move_ok && found; move_ok = fp_db().sq_next())
|
||||
{
|
||||
const TRiga_documento& rigadoc = doc[fp_db().sq_get_int("PI_NUMEROLINEA")];
|
||||
// Testo solo la qta, il prezzo è troppo complicato
|
||||
const real& qta = rigadoc.quantita();
|
||||
found &= !qta.is_zero() ? qta == fp_db().sq_get_real("PI_QUANTITA") : fp_db().sq_get_real("PI_QUANTITA") <= UNO;
|
||||
}
|
||||
}
|
||||
|
||||
if(!found)
|
||||
{
|
||||
msg_log.cut(0) << "Il documento " << campo_bfatt << " non è presente nel DB PAF, verrà saltato";
|
||||
legno.log(9000, msg_log);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
query.cut(0) <<
|
||||
"UPDATE PAF0100F SET P1_KEYHEADERFATT = '" << campo_hfatt << "', P1_KEYBODYFATT = '" << campo_bfatt << "' WHERE P1_KEYPRGINVIO = '" << db_prginv << "' AND P1_KEYHEADERFATT = '" << db_hfatt << "' AND P1_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF0200F SET P2_KEYHEADERFATT = '" << campo_hfatt << "', P2_KEYBODYFATT = '" << campo_bfatt << "' WHERE P2_KEYPRGINVIO = '" << db_prginv << "' AND P2_KEYHEADERFATT = '" << db_hfatt << "' AND P2_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF0400F SET P4_KEYHEADERFATT = '" << campo_hfatt << "', P4_KEYBODYFATT = '" << campo_bfatt << "' WHERE P4_KEYPRGINVIO = '" << db_prginv << "' AND P4_KEYHEADERFATT = '" << db_hfatt << "' AND P4_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF0700F SET P7_KEYHEADERFATT = '" << campo_hfatt << "', P7_KEYBODYFATT = '" << campo_bfatt << "' WHERE P7_KEYPRGINVIO = '" << db_prginv << "' AND P7_KEYHEADERFATT = '" << db_hfatt << "' AND P7_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF0800F SET P8_KEYHEADERFATT = '" << campo_hfatt << "', P8_KEYBODYFATT = '" << campo_bfatt << "' WHERE P8_KEYPRGINVIO = '" << db_prginv << "' AND P8_KEYHEADERFATT = '" << db_hfatt << "' AND P8_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF1000F SET P0_KEYHEADERFATT = '" << campo_hfatt << "', P0_KEYBODYFATT = '" << campo_bfatt << "' WHERE P0_KEYPRGINVIO = '" << db_prginv << "' AND P0_KEYHEADERFATT = '" << db_hfatt << "' AND P0_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF1100F SET PA_KEYHEADERFATT = '" << campo_hfatt << "', PA_KEYBODYFATT = '" << campo_bfatt << "' WHERE PA_KEYPRGINVIO = '" << db_prginv << "' AND PA_KEYHEADERFATT = '" << db_hfatt << "' AND PA_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF1200F SET PB_KEYHEADERFATT = '" << campo_hfatt << "', PB_KEYBODYFATT = '" << campo_bfatt << "' WHERE PB_KEYPRGINVIO = '" << db_prginv << "' AND PB_KEYHEADERFATT = '" << db_hfatt << "' AND PB_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF1600F SET PF_KEYHEADERFATT = '" << campo_hfatt << "', PF_KEYBODYFATT = '" << campo_bfatt << "' WHERE PF_KEYPRGINVIO = '" << db_prginv << "' AND PF_KEYHEADERFATT = '" << db_hfatt << "' AND PF_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF1700F SET PG_KEYHEADERFATT = '" << campo_hfatt << "', PG_KEYBODYFATT = '" << campo_bfatt << "' WHERE PG_KEYPRGINVIO = '" << db_prginv << "' AND PG_KEYHEADERFATT = '" << db_hfatt << "' AND PG_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF1800F SET PI_KEYHEADERFATT = '" << campo_hfatt << "', PI_KEYBODYFATT = '" << campo_bfatt << "' WHERE PI_KEYPRGINVIO = '" << db_prginv << "' AND PI_KEYHEADERFATT = '" << db_hfatt << "' AND PI_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF1900F SET PY_KEYHEADERFATT = '" << campo_hfatt << "', PY_KEYBODYFATT = '" << campo_bfatt << "' WHERE PY_KEYPRGINVIO = '" << db_prginv << "' AND PY_KEYHEADERFATT = '" << db_hfatt << "' AND PY_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF2000F SET PJ_KEYHEADERFATT = '" << campo_hfatt << "', PJ_KEYBODYFATT = '" << campo_bfatt << "' WHERE PJ_KEYPRGINVIO = '" << db_prginv << "' AND PJ_KEYHEADERFATT = '" << db_hfatt << "' AND PJ_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF2100F SET PK_KEYHEADERFATT = '" << campo_hfatt << "', PK_KEYBODYFATT = '" << campo_bfatt << "' WHERE PK_KEYPRGINVIO = '" << db_prginv << "' AND PK_KEYHEADERFATT = '" << db_hfatt << "' AND PK_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF2200F SET PL_KEYHEADERFATT = '" << campo_hfatt << "', PL_KEYBODYFATT = '" << campo_bfatt << "' WHERE PL_KEYPRGINVIO = '" << db_prginv << "' AND PL_KEYHEADERFATT = '" << db_hfatt << "' AND PL_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF2400F SET PN_KEYHEADERFATT = '" << campo_hfatt << "', PN_KEYBODYFATT = '" << campo_bfatt << "' WHERE PN_KEYPRGINVIO = '" << db_prginv << "' AND PN_KEYHEADERFATT = '" << db_hfatt << "' AND PN_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF2500F SET PO_KEYHEADERFATT = '" << campo_hfatt << "', PO_KEYBODYFATT = '" << campo_bfatt << "' WHERE PO_KEYPRGINVIO = '" << db_prginv << "' AND PO_KEYHEADERFATT = '" << db_hfatt << "' AND PO_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF2600F SET PP_KEYHEADERFATT = '" << campo_hfatt << "', PP_KEYBODYFATT = '" << campo_bfatt << "' WHERE PP_KEYPRGINVIO = '" << db_prginv << "' AND PP_KEYHEADERFATT = '" << db_hfatt << "' AND PP_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF2700F SET PQ_KEYHEADERFATT = '" << campo_hfatt << "', PQ_KEYBODYFATT = '" << campo_bfatt << "' WHERE PQ_KEYPRGINVIO = '" << db_prginv << "' AND PQ_KEYHEADERFATT = '" << db_hfatt << "' AND PQ_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF3000F SET PT_KEYHEADERFATT = '" << campo_hfatt << "', PT_KEYBODYFATT = '" << campo_bfatt << "' WHERE PT_KEYPRGINVIO = '" << db_prginv << "' AND PT_KEYHEADERFATT = '" << db_hfatt << "' AND PT_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAF3200F SET PU_KEYHEADERFATT = '" << campo_hfatt << "', PU_KEYBODYFATT = '" << campo_bfatt << "' WHERE PU_KEYPRGINVIO = '" << db_prginv << "' AND PU_KEYHEADERFATT = '" << db_hfatt << "' AND PU_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAFW300F SET PW_KEYHEADERFATT = '" << campo_hfatt << "', PW_KEYBODYFATT = '" << campo_bfatt << "' WHERE PW_KEYPRGINVIO = '" << db_prginv << "' AND PW_KEYHEADERFATT = '" << db_hfatt << "' AND PW_KEYBODYFATT = '" << db_bfatt << "'\n";
|
||||
|
||||
if(fp_db().sq_set_exec(query))
|
||||
{
|
||||
msg_log.cut(0) << "Il documento " << campo_bfatt << " e' stato aggiornato correttamente\nChiave precedente: " << db_bfatt << " chiave nuova: " << campo_bfatt;
|
||||
legno.log(0, msg_log);
|
||||
updated++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fp_db().sq_commit())
|
||||
{
|
||||
msg_log.cut(0) << "Aggiornati " << updated << " documenti";
|
||||
legno.log(0, msg_log);
|
||||
}
|
||||
|
||||
legno.preview();
|
||||
force_reload_sheet();
|
||||
}
|
||||
|
||||
void TPAR_mask::export_paf()
|
||||
{
|
||||
int ndocs = 0;
|
||||
TLocalisamfile doc(LF_DOC);
|
||||
TString_array& sht = sfield(F_DOCS).rows_array();
|
||||
TDoc_fp elab;
|
||||
|
||||
//elab.set_cache_insert(true);
|
||||
if (!sht.empty())
|
||||
{
|
||||
TProgress_monitor pi(sht.items(), "Esportazione Fatture");
|
||||
FOR_EACH_ARRAY_ROW(sht, r, riga)
|
||||
{
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
|
||||
if (riga->starts_with("X"))
|
||||
{
|
||||
const int anno = riga->get_int(sfield(F_DOCS).cid2index(S_ANNO));
|
||||
const long nreg = riga->get_long(sfield(F_DOCS).cid2index(S_NUMREG));
|
||||
const TDoc_key key(anno, EMPTY_STRING, nreg); //da fare
|
||||
|
||||
// Verifico che il codice sdi nello sheet sia lo stesso sulla testata del documento in caso contrario lo aggiorno
|
||||
TRectype rec_doc = elab.key_to_doc(key);
|
||||
if (rec_doc.read(doc) == NOERR)
|
||||
{
|
||||
/*
|
||||
if (rec_doc.get(DOC_TIPODOCSDI).compare(riga->get(col_cod_sdi)) != 0)
|
||||
{
|
||||
rec_doc.put(DOC_TIPODOCSDI, riga->get(col_cod_sdi));
|
||||
rec_doc.rewrite(doc);
|
||||
}
|
||||
*/
|
||||
if (elab.doc_to_paf(key))
|
||||
ndocs++;
|
||||
else
|
||||
{
|
||||
if (!yesno_box("L'ultima fattura non è stata esportata, continuare?"))
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (elab.force_commit() <= 0)
|
||||
error_box("Errore durante il cambiamento di stato finale, potrebbero esser rimaste delle fatture in Pronto");
|
||||
elab.show_log();
|
||||
}
|
||||
|
||||
bool TPAR_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
switch (o.dlg())
|
||||
{
|
||||
case DLG_RECALC:
|
||||
if (e == fe_button)
|
||||
next_page(1);
|
||||
break;
|
||||
case F_DATAINI:
|
||||
if (e == fe_init)
|
||||
o.set(ini_get_string(CONFIG_DITTA, "fp", "LastXML", "01-01-2019"));
|
||||
else if (e == fe_close)
|
||||
ini_set_string(CONFIG_DITTA, "fp", "LastXML", o.get());
|
||||
break;
|
||||
case F_DATAEND:
|
||||
if (e == fe_init)
|
||||
o.set(TDate(TODAY));
|
||||
case F_DOCS:
|
||||
if (e == se_query_add || e == se_query_del)
|
||||
return false;
|
||||
break;
|
||||
case DLG_OK:
|
||||
if (e == fe_button)
|
||||
export_paf();
|
||||
break;
|
||||
case DLG_USER:
|
||||
if (e == fe_button && jolly > 0)
|
||||
{
|
||||
TSheet_field& docs = sfield(F_DOCS);
|
||||
TToken_string& row = docs.row(docs.selected());
|
||||
TRectype doc(LF_DOC);
|
||||
doc.put(DOC_PROVV, 'D');
|
||||
doc.put(DOC_ANNO, row.get(1));
|
||||
doc.put(DOC_CODNUM, row.get(2));
|
||||
doc.put(DOC_TIPODOC, row.get(3));
|
||||
doc.put(DOC_NDOC, row.get(5));
|
||||
if (doc.edit(LF_DOC, "", "ve0")) // Perchè prima andava senza dovergli mettere nulla?
|
||||
fill();
|
||||
}
|
||||
break;
|
||||
case DLG_ALL:
|
||||
{
|
||||
if (e == fe_button)
|
||||
{
|
||||
TSheet_field& docs = sfield(F_DOCS);
|
||||
TString_array& sht = docs.rows_array();
|
||||
const int items = sht.items();
|
||||
|
||||
if (items > 0)
|
||||
{
|
||||
const TString4 select = *(sht.row(0).get(0)) == 'X' ? "" : "X";
|
||||
for (int i = 0; i < items; i++)
|
||||
sht.row(i).add(select, 0);
|
||||
docs.force_update();
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DLG_SAVEREC:
|
||||
{
|
||||
if (e == fe_button)
|
||||
set_err_paf();
|
||||
}
|
||||
break;
|
||||
case DLG_FINDREC:
|
||||
{
|
||||
if (e == fe_button)
|
||||
set_pronto();
|
||||
}
|
||||
break;
|
||||
case DLG_PRINT:
|
||||
{
|
||||
if (e == fe_button)
|
||||
connect_keys();
|
||||
}
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
if((e == fe_modify || e >= se_enter) && jolly == 0)
|
||||
{
|
||||
if (o.dlg() >= START_MASK && o.dlg() <= END_MASK)
|
||||
{
|
||||
set_filter_changed();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void TPAR_mask::next_page(int p)
|
||||
{
|
||||
bool ok = true;
|
||||
if (_filter_changed && p != 1000)
|
||||
{
|
||||
if ((ok = _filter_changed = check_full_fields()))
|
||||
{
|
||||
TSheet_field& sf = sfield(F_DOCS);
|
||||
fill();
|
||||
_filter_changed = false;
|
||||
}
|
||||
}
|
||||
if(ok)
|
||||
TAutomask::next_page(p);
|
||||
}
|
||||
|
||||
bool TPAR_mask::on_key(const KEY key)
|
||||
{
|
||||
if (key == K_SHIFT + K_F12)
|
||||
{
|
||||
if (run_fp_psw_mask())
|
||||
{
|
||||
_enable_chiave_fixer = true;
|
||||
if (curr_page() > 0)
|
||||
force_reload_sheet();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TPAR_mask::check_not_empty()
|
||||
{
|
||||
TSheet_field& sheet = sfield(F_DOCS);
|
||||
TString msg;
|
||||
|
||||
if (sheet.empty())
|
||||
msg = "La tabella dei movimenti è vuota, vuoi caricarla con i filtri selezionati?";
|
||||
else if (_filter_changed)
|
||||
msg = "I filtri sono stati cambiati, vuoi ricaricare la tabella con i nuovi filtri selezionati?";
|
||||
|
||||
if (msg.full() && yesno_box(msg))
|
||||
{
|
||||
next_page(1);
|
||||
}
|
||||
return sheet.full();
|
||||
}
|
||||
|
||||
bool TPAR_mask::check_full_fields() const
|
||||
{
|
||||
// Controllo ogni campo che sia valorizzato
|
||||
FOR_EACH_MASK_FIELD(*this, i, f)
|
||||
{
|
||||
if (!f->on_key(K_ENTER))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TPAR_mask::check_doc_filter(const TDocumentoEsteso& d) const
|
||||
{
|
||||
const TString& codnum = d.get(DOC_CODNUM);
|
||||
const TString& tipodoc = d.get(DOC_TIPODOC);
|
||||
const char stato = d.stato();
|
||||
const TTipo_documento& td = cached_tipodoc(d.get(DOC_TIPODOC));
|
||||
// Mi precarico la tabella dei documenti scelti
|
||||
FOR_EACH_SHEET_ROW(sfield(F_CAUSALI_TIPO), nr, row)
|
||||
{
|
||||
if (codnum.compare(row->get(_codnum)) == 0 && // Codice numerazione
|
||||
tipodoc.compare(row->get(_tipodoc)) == 0 && // Tipo documento
|
||||
td.reg_fisc().full() && // Regime fiscale
|
||||
row->get_char(_dastato) <= stato && // Da stato
|
||||
row->get_char(_astato) >= stato) // A stato
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void TPAR_mask::set_err_paf()
|
||||
{
|
||||
// Vado a riportare sui paf l'errore
|
||||
TSheet_field& sfld = sfield(F_DOCS);
|
||||
TString_array& sht = sfld.rows_array();
|
||||
TLocalisamfile fdoc(LF_DOC);
|
||||
if (!sht.empty())
|
||||
{
|
||||
TProgress_monitor pi(sht.items(), "Cambio stato fatture");
|
||||
|
||||
FOR_EACH_ARRAY_ROW(sht, r, riga)
|
||||
{
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
|
||||
if (riga->starts_with("X"))
|
||||
{
|
||||
const int anno = riga->get_int(sfield(F_DOCS).cid2index(S_ANNO));
|
||||
const long nreg = riga->get_long(sfield(F_DOCS).cid2index(S_NUMREG));
|
||||
const TDoc_key key(anno, EMPTY_STRING, nreg);
|
||||
// Ricontrollo che la fattura sia presente in Campo prima di cambiare stato
|
||||
fdoc.zero();
|
||||
fdoc.put(DOC_PROVV, key.provv());
|
||||
fdoc.put(DOC_ANNO, key.anno());
|
||||
fdoc.put(DOC_CODNUM, key.codnum());
|
||||
fdoc.put(DOC_NDOC, key.ndoc());
|
||||
|
||||
TString hfatt, bfatt;
|
||||
TPaf_record paf0100f("PAF0100F");
|
||||
if (fdoc.read() == NOERR && chiave_paf(fdoc.curr(), hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt))
|
||||
{
|
||||
static TString query;
|
||||
query.cut(0) <<
|
||||
"UPDATE PAF0100F SET P1_GESTIONE = 'E', P1_KEYPRGINVIO = 'DELETED' WHERE P1_KEYHEADERFATT = '" << hfatt << "' AND P1_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF0200F SET P2_GESTIONE = 'E', P2_KEYPRGINVIO = 'DELETED' WHERE P2_KEYHEADERFATT = '" << hfatt << "' AND P2_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF0400F SET P4_GESTIONE = 'E', P4_KEYPRGINVIO = 'DELETED' WHERE P4_KEYHEADERFATT = '" << hfatt << "' AND P4_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF0700F SET P7_GESTIONE = 'E', P7_KEYPRGINVIO = 'DELETED' WHERE P7_KEYHEADERFATT = '" << hfatt << "' AND P7_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF0800F SET P8_GESTIONE = 'E', P8_KEYPRGINVIO = 'DELETED' WHERE P8_KEYHEADERFATT = '" << hfatt << "' AND P8_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF1000F SET P0_GESTIONE = 'E', P0_KEYPRGINVIO = 'DELETED' WHERE P0_KEYHEADERFATT = '" << hfatt << "' AND P0_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF1100F SET PA_GESTIONE = 'E', PA_KEYPRGINVIO = 'DELETED' WHERE PA_KEYHEADERFATT = '" << hfatt << "' AND PA_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF1200F SET PB_GESTIONE = 'E', PB_KEYPRGINVIO = 'DELETED' WHERE PB_KEYHEADERFATT = '" << hfatt << "' AND PB_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF1600F SET PF_GESTIONE = 'E', PF_KEYPRGINVIO = 'DELETED' WHERE PF_KEYHEADERFATT = '" << hfatt << "' AND PF_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF1700F SET PG_GESTIONE = 'E', PG_KEYPRGINVIO = 'DELETED' WHERE PG_KEYHEADERFATT = '" << hfatt << "' AND PG_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF1800F SET PI_GESTIONE = 'E', PI_KEYPRGINVIO = 'DELETED' WHERE PI_KEYHEADERFATT = '" << hfatt << "' AND PI_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF1900F SET PY_GESTIONE = 'E', PY_KEYPRGINVIO = 'DELETED' WHERE PY_KEYHEADERFATT = '" << hfatt << "' AND PY_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF2000F SET PJ_GESTIONE = 'E', PJ_KEYPRGINVIO = 'DELETED' WHERE PJ_KEYHEADERFATT = '" << hfatt << "' AND PJ_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF2100F SET PK_GESTIONE = 'E', PK_KEYPRGINVIO = 'DELETED' WHERE PK_KEYHEADERFATT = '" << hfatt << "' AND PK_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF2200F SET PL_GESTIONE = 'E', PL_KEYPRGINVIO = 'DELETED' WHERE PL_KEYHEADERFATT = '" << hfatt << "' AND PL_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF2400F SET PN_GESTIONE = 'E', PN_KEYPRGINVIO = 'DELETED' WHERE PN_KEYHEADERFATT = '" << hfatt << "' AND PN_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF2500F SET PO_GESTIONE = 'E', PO_KEYPRGINVIO = 'DELETED' WHERE PO_KEYHEADERFATT = '" << hfatt << "' AND PO_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF2600F SET PP_GESTIONE = 'E', PP_KEYPRGINVIO = 'DELETED' WHERE PP_KEYHEADERFATT = '" << hfatt << "' AND PP_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF2700F SET PQ_GESTIONE = 'E', PQ_KEYPRGINVIO = 'DELETED' WHERE PQ_KEYHEADERFATT = '" << hfatt << "' AND PQ_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF3000F SET PT_GESTIONE = 'E', PT_KEYPRGINVIO = 'DELETED' WHERE PT_KEYHEADERFATT = '" << hfatt << "' AND PT_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
"UPDATE PAF3200F SET PU_GESTIONE = 'E', PU_KEYPRGINVIO = 'DELETED' WHERE PU_KEYHEADERFATT = '" << hfatt << "' AND PU_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
// PAFW3 non ha il flag di gestione
|
||||
"UPDATE PAFW300F SET PW_KEYPRGINVIO = 'DELETED' WHERE PW_KEYHEADERFATT = '" << hfatt << "' AND PW_KEYBODYFATT = '" << bfatt << "';\n";
|
||||
if(!fp_db().sq_set_exec(query))
|
||||
{
|
||||
TString err = "Impossibile salvare la fattura "; err << anno << " " << " " << nreg << "\nVerrà saltata.";
|
||||
error_box(err);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
TString err = "Impossibile trovare la fattura "; err << anno << " " << " " << nreg << "\nVerrà saltata.";
|
||||
error_box(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
fp_db().sq_commit();
|
||||
}
|
||||
force_reload_sheet();
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// TReg2Paf
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class Treg2Paf : public TSkeleton_application
|
||||
{
|
||||
|
||||
public:
|
||||
virtual bool create();
|
||||
virtual bool destroy();
|
||||
virtual void main_loop();
|
||||
|
||||
Treg2Paf() {}
|
||||
};
|
||||
|
||||
void Treg2Paf::main_loop()
|
||||
{
|
||||
while (TPAR_mask().run() == K_ENTER) {}
|
||||
}
|
||||
|
||||
bool Treg2Paf::create()
|
||||
{
|
||||
open_files(LF_TAB, LF_TABCOM, LF_TABMOD, LF_ANAG,
|
||||
LF_CLIFO, LF_CFVEN, LF_CFBAN, LF_NDITTE,
|
||||
LF_DOC, LF_RIGHEDOC, LF_CODCORR, LF_ANAMAG, 0);
|
||||
|
||||
const TRectype cfven(LF_CFVEN);
|
||||
if (cfven.length(CFV_PADESTIN) != 7) // Nuova lunghezza per privati
|
||||
return error_box(TR("Database non convertito per fatturazione F.P."));
|
||||
|
||||
return check_tables() && TSkeleton_application::create();
|
||||
}
|
||||
|
||||
bool Treg2Paf::destroy()
|
||||
{
|
||||
fp_db().sq_disconnect();
|
||||
return TSkeleton_application::destroy();
|
||||
}
|
||||
|
||||
int fp0700(int argc, char* argv[])
|
||||
{
|
||||
Treg2Paf d2p;
|
||||
d2p.run(argc, argv, TR("Invio Regolarizzazioni"));
|
||||
return 0;
|
||||
}
|
28
src/fp/fp0700a.h
Normal file
28
src/fp/fp0700a.h
Normal file
@ -0,0 +1,28 @@
|
||||
#define F_DATAINI 401
|
||||
#define F_DATAEND 402
|
||||
#define F_DOCSEL 403
|
||||
#define F_CAUSALI_TIPO 404
|
||||
#define F_TIPO_SDI 405
|
||||
#define F_DOCS 406
|
||||
#define START_MASK F_DATAINI
|
||||
#define END_MASK F_DOCS
|
||||
|
||||
|
||||
#define S_COD_CAUS 101
|
||||
#define S_DESCR 102
|
||||
#define S_ANNO_REG 150
|
||||
|
||||
|
||||
|
||||
#define S_SELECTED 101
|
||||
#define S_ANNO 102
|
||||
#define S_NUMREG 103
|
||||
#define S_DATAREG 104
|
||||
#define S_CLIENTE 105
|
||||
#define S_RAGSOC 106
|
||||
#define S_UFFICIO 107
|
||||
#define S_RIFAMM 108
|
||||
#define S_COFI 109
|
||||
#define S_SPLITPAY 110
|
||||
#define S_ATTACH 111
|
||||
#define S_ONLYGEN 112
|
284
src/fp/fp0700a.uml
Normal file
284
src/fp/fp0700a.uml
Normal file
@ -0,0 +1,284 @@
|
||||
#include "fp0700a.h"
|
||||
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
|
||||
BUTTON DLG_ALL 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 "~Tutti"
|
||||
PICTURE TOOL_MULTISEL
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 "Elabora"
|
||||
PICTURE TOOL_ELABORA
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BUTTON DLG_NULL 2 2
|
||||
BEGIN
|
||||
PROMPT -1 1 ""
|
||||
PICTURE 0
|
||||
END
|
||||
|
||||
BUTTON DLG_SAVEREC 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 "Elimina"
|
||||
PICTURE TOOL_WARNING
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BUTTON DLG_FINDREC 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 "Segna pronto"
|
||||
PICTURE TOOL_PERMISSIONS
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BUTTON DLG_PRINT 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 "Correggi chiavi"
|
||||
PICTURE TOOL_SMILE
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
#include <helpbar.h>
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Invio Regolarizzazioni" 0 2 0 0
|
||||
|
||||
DATE F_DATAINI
|
||||
BEGIN
|
||||
PROMPT 1 1 "Data iniziale"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
DATE F_DATAEND
|
||||
BEGIN
|
||||
PROMPT 50 1 "Data finale "
|
||||
VALIDATE DATE_CMP_FUNC >= F_DATAINI
|
||||
WARNING "La data finale non può essere minore della data iniziale"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
RADIOBUTTON F_DOCSEL 7 80
|
||||
BEGIN
|
||||
PROMPT 1 3 "Documenti da visualizzare"
|
||||
ITEM "P|Provvisori"
|
||||
ITEM "D|Definitivi"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
|
||||
SPREADSHEET F_CAUSALI_TIPO 80 5
|
||||
BEGIN
|
||||
PROMPT 1 7 ""
|
||||
ITEM "Cod Causale"
|
||||
ITEM "Descrizione@50"
|
||||
END
|
||||
|
||||
LIST F_TIPO_SDI 40
|
||||
BEGIN
|
||||
PROMPT 1 14 "Tipo documento SDI "
|
||||
ITEM "TD16|TD16 Integraz. fatt. rev.ch. interno"
|
||||
ITEM "TD17|TD17 Integ./autof. acq. servizi estero"
|
||||
ITEM "TD18|TD18 Integ. acq. beni intracomunitari"
|
||||
ITEM "TD19|TD19 Integ./autof. acq. beni ex art. 17"
|
||||
ITEM "TD20|TD20 Autofattura"
|
||||
END
|
||||
|
||||
STRING DLG_PROFILE 50
|
||||
BEGIN
|
||||
PROMPT 1 -1 "Profilo "
|
||||
PSELECT
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
PAGE "Elenco Regolarizzazioni" 0 2 0 0
|
||||
|
||||
SPREADSHEET F_DOCS
|
||||
BEGIN
|
||||
PROMPT 0 2 ""
|
||||
ITEM "@1"
|
||||
ITEM "Anno"
|
||||
ITEM "Num.\nReg.@7"
|
||||
ITEM "Data\nReg.@10"
|
||||
ITEM "Cliente"
|
||||
ITEM "Ragione Sociale@50"
|
||||
ITEM "Codice destinatario@20"
|
||||
ITEM "Riferimento\nAmministrazione@20"
|
||||
ITEM "Codice Fiscale@16"
|
||||
ITEM "Scissione\nPagamenti@9"
|
||||
ITEM "Allegati"
|
||||
ITEM "Solo generazione"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
||||
|
||||
PAGE "Riga Causale" -1 -1 50 3
|
||||
|
||||
NUMBER S_ANNO_REG 4
|
||||
BEGIN
|
||||
PROMPT 100 100 ""
|
||||
FLAG "AH"
|
||||
END
|
||||
|
||||
STRING S_COD_CAUS 3
|
||||
BEGIN
|
||||
PROMPT 1 1 "Codice "
|
||||
FLAGS "UZ"
|
||||
// USE LF_CAUSALI SELECT ((AUTOFATT=="X")||(REGSPIVA==3)||((REGSPIVA>=13)&&(REGSPIVA<=18))||(REGSPIVA==50)||(REGSPIVA==51))&&(201@->I0=="1")
|
||||
USE LF_CAUSALI SELECT (201@->I0=="1")
|
||||
JOIN REG ALIAS 201 INTO CODTAB[1,4]=#S_ANNO_REG CODTAB[5,7]=REG
|
||||
INPUT CODCAUS S_COD_CAUS
|
||||
DISPLAY "Cod." CODCAUS
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Documento" TIPODOC
|
||||
DISPLAY "Registro" REG
|
||||
DISPLAY "Tipo movimento" TIPOMOV
|
||||
DISPLAY "Regime IVA" REGSPIVA
|
||||
OUTPUT S_COD_CAUS CODCAUS
|
||||
OUTPUT S_DESCR DESCR
|
||||
WARNING "Causale assente"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING S_DESCR 50
|
||||
BEGIN
|
||||
PROMPT 1 4 "Descriz."
|
||||
// USE LF_CAUSALI KEY 2 SELECT ((AUTOFATT=="X")||(REGSPIVA==3)||((REGSPIVA>=13)&&(REGSPIVA<=18))||(REGSPIVA==50)||(REGSPIVA==51))&&(201@->I0=="1")
|
||||
USE LF_CAUSALI KEY 2 SELECT (201@->I0=="1")
|
||||
JOIN REG ALIAS 201 INTO CODTAB[1,4]=#S_ANNO_REG CODTAB[5,7]=REG
|
||||
INPUT DESCR S_DESCR
|
||||
DISPLAY "Descrizione @50" DESCR
|
||||
DISPLAY "Cod." CODCAUS
|
||||
DISPLAY "Documento" TIPODOC
|
||||
DISPLAY "Registro" REG
|
||||
DISPLAY "Tipo movimento" TIPOMOV
|
||||
DISPLAY "Regime IVA" REGSPIVA
|
||||
COPY OUTPUT S_COD_CAUS
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
TOOLBAR "Tipo Documento" 0 0 0 2
|
||||
|
||||
BUTTON DLG_OK 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
||||
|
||||
|
||||
PAGE "Documento" -1 -1 78 9
|
||||
|
||||
BOOLEAN S_SELECTED
|
||||
BEGIN
|
||||
PROMPT 1 1 "Da elaborare"
|
||||
END
|
||||
|
||||
NUMBER S_ANNO 4
|
||||
BEGIN
|
||||
PROMPT 1 2 "Anno "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER S_NUMREG 7
|
||||
BEGIN
|
||||
PROMPT 21 2 "Numerazione "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
DATE S_DATAREG
|
||||
BEGIN
|
||||
PROMPT 21 3 "Data "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER S_CLIENTE 6
|
||||
BEGIN
|
||||
PROMPT 1 4 "Cliente "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING S_RAGSOC 50
|
||||
BEGIN
|
||||
PROMPT 21 4 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING S_UFFICIO 50 20
|
||||
BEGIN
|
||||
PROMPT 1 5 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING S_RIFAMM 20
|
||||
BEGIN
|
||||
PROMPT 21 5 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING S_COFI 20
|
||||
BEGIN
|
||||
PROMPT 1 6 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BOOLEAN S_SPLITPAY
|
||||
BEGIN
|
||||
PROMPT 1 7 "Soggetto a scissione pagamenti art.17 ter DPR 633/72"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BOOLEAN S_ATTACH
|
||||
BEGIN
|
||||
PROMPT 1 8 "Documenti in allegato"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BOOLEAN S_ONLYGEN
|
||||
BEGIN
|
||||
PROMPT 20 8 "Solo generazione"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
|
||||
ENDPAGE
|
||||
|
||||
TOOLBAR "Documento" 0 0 0 2
|
||||
|
||||
BUTTON DLG_OK 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_USER 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 "Collega"
|
||||
PICTURE TOOL_LINK
|
||||
END
|
||||
|
||||
|
||||
BUTTON DLG_CANCEL 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
@ -92,10 +92,9 @@ void TBolliinfatt_mask::fill()
|
||||
|
||||
TString query;
|
||||
|
||||
query << "USE 33 KEY 3 \n" <<
|
||||
"SELECT 33.TIPOCF==\"C\"" <<
|
||||
TISAM_recordset::add_between_filter(DOC_CODNUM, get(F_DACODNUM), get(F_ACODNUM)) <<
|
||||
" \n" <<
|
||||
query << "USE 33 KEY 3 \n" << "SELECT 33.TIPOCF==\"C\"";
|
||||
TISAM_recordset::add_between_filter(query, DOC_CODNUM, get(F_DACODNUM), get(F_ACODNUM));
|
||||
query << " \n" <<
|
||||
"JOIN 20 INTO TIPOCF==TIPOCF CODCF==CODCF \n" <<
|
||||
"JOIN 17 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF \n" <<
|
||||
"JOIN %TIP TO 33 ALIAS 400 INTO CODTAB==TIPODOC \n" <<
|
||||
|
@ -225,7 +225,7 @@ class TFP_selected_docs : public TObject
|
||||
{
|
||||
TRelation _r_tabmod;
|
||||
TRectype _flt;
|
||||
std::unique_ptr<TCursor> _cur;
|
||||
TCursor* _cur;
|
||||
TRectype fill_rectype() const;
|
||||
|
||||
enum { _codnum, _tipodoc, _dastato, _astato, _tiposdi };
|
||||
@ -238,6 +238,23 @@ public:
|
||||
TFP_selected_docs();
|
||||
};
|
||||
|
||||
class TFP_selected_regs : public TObject
|
||||
{
|
||||
TRelation _r_tabmod;
|
||||
TRectype _flt;
|
||||
TCursor * _cur;
|
||||
TRectype fill_rectype() const;
|
||||
|
||||
enum { _codnum, _tipodoc, _dastato, _astato, _tiposdi };
|
||||
|
||||
public:
|
||||
void fill_sheet(TSheet_field& sheet) const;
|
||||
inline bool has_selected_regs() const { return _cur->items() > 0; }
|
||||
void save_sheet(const TSheet_field& sheet) const;
|
||||
|
||||
TFP_selected_regs();
|
||||
};
|
||||
|
||||
class TFp_mail_sender : public TObject
|
||||
{
|
||||
int _anno;
|
||||
|
@ -358,9 +358,67 @@ void TFP_selected_docs::save_sheet(const TSheet_field& sheet) const
|
||||
|
||||
TFP_selected_docs::TFP_selected_docs() : _r_tabmod(LF_TABMOD), _flt(fill_rectype())
|
||||
{
|
||||
_cur.reset(new TCursor(&_r_tabmod, "", 1, &_flt, &_flt));
|
||||
_cur = new TCursor(&_r_tabmod, "", 1, &_flt, &_flt);
|
||||
}
|
||||
|
||||
TRectype TFP_selected_regs::fill_rectype() const
|
||||
{
|
||||
TRectype r(LF_TABMOD);
|
||||
r.put("MOD", FP_TAB_MOD);
|
||||
r.put("COD", FP_SLD_COD);
|
||||
return r;
|
||||
}
|
||||
|
||||
void TFP_selected_regs::fill_sheet(TSheet_field& sheet) const
|
||||
{
|
||||
for (*_cur = 0; _cur->pos() < _cur->items(); ++*_cur)
|
||||
{
|
||||
TRectype rec = _cur->curr();
|
||||
TToken_string& row = sheet.row(-1);
|
||||
row.add(rec.get(FP_SLD_CODNUM));
|
||||
row.add(rec.get(FP_SLD_TIPODOC));
|
||||
row.add(rec.get(FP_SLD_DASTATO));
|
||||
row.add(rec.get(FP_SLD_ASTATO));
|
||||
row.add(TTipo_documento(rec.get(FP_SLD_TIPODOC)).tipo_doc_sdi());
|
||||
}
|
||||
}
|
||||
|
||||
void TFP_selected_regs::save_sheet(const TSheet_field& sheet) const
|
||||
{
|
||||
// Svuoto il db
|
||||
TLocalisamfile tabmod(LF_TABMOD);
|
||||
TRectype rec(LF_TABMOD);
|
||||
|
||||
for (*_cur = 0; _cur->pos() != _cur->items();)
|
||||
{
|
||||
rec = _cur->curr();
|
||||
int err = rec.remove(tabmod);
|
||||
}
|
||||
|
||||
// Carico il db
|
||||
|
||||
FOR_EACH_SHEET_ROW(sheet, n, r)
|
||||
{
|
||||
// Chissene anche se copio ogni volta
|
||||
rec = fill_rectype();
|
||||
static TString num;
|
||||
num.cut(0);
|
||||
num.format("%08d", n);
|
||||
rec.put(FP_SLD_CODTAB, num);
|
||||
|
||||
// Prendo tutta la riga tranne il cod sdi
|
||||
rec.put(FP_SLD_CODNUM, r->get(_codnum));
|
||||
rec.put(FP_SLD_TIPODOC, r->get(_tipodoc));
|
||||
rec.put(FP_SLD_DASTATO, r->get(_dastato));
|
||||
rec.put(FP_SLD_ASTATO, r->get(_astato));
|
||||
rec.write(tabmod);
|
||||
}
|
||||
}
|
||||
|
||||
TFP_selected_regs::TFP_selected_regs() : _r_tabmod(LF_TABMOD), _flt(fill_rectype())
|
||||
{
|
||||
_cur = new TCursor(&_r_tabmod, "", 1, &_flt, &_flt);
|
||||
}
|
||||
|
||||
TFP_righe_custom::TCustCol& TFP_righe_custom::get_no_custom()
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user