From a02c0ccfb11592422db44461ce6d9da40d50bbe6 Mon Sep 17 00:00:00 2001 From: smen Date: Tue, 28 Mar 2023 17:58:43 +0200 Subject: [PATCH] Mi ero dimenticato un po di maschere. lel --- src/f9/f90600.cpp | 1187 ++++++++++++++++++++++++++++++++++++++++++++ src/f9/f90600.h | 188 +++++++ src/f9/f90600a.h | 69 +++ src/f9/f90600a.uml | 155 ++++++ src/f9/f90600b.h | 61 +++ src/f9/f90600b.uml | 316 ++++++++++++ src/f9/f90600c.h | 17 + src/f9/f90600d.h | 48 ++ src/f9/f90600d.uml | 399 +++++++++++++++ 9 files changed, 2440 insertions(+) create mode 100644 src/f9/f90600.cpp create mode 100644 src/f9/f90600.h create mode 100644 src/f9/f90600a.h create mode 100644 src/f9/f90600a.uml create mode 100644 src/f9/f90600b.h create mode 100644 src/f9/f90600b.uml create mode 100644 src/f9/f90600c.h create mode 100644 src/f9/f90600d.h create mode 100644 src/f9/f90600d.uml diff --git a/src/f9/f90600.cpp b/src/f9/f90600.cpp new file mode 100644 index 000000000..af69ffee2 --- /dev/null +++ b/src/f9/f90600.cpp @@ -0,0 +1,1187 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "../ve/velib05.h" +#include "../fe/felib.h" +#include "../f1/f1lib.h" +#include "../fp/fplib.h" + +#include "f901tab.h" +#include "f90600.h" +#include "f90600a.h" +#include "f90600b.h" +#include "f90600c.h" +#include "f90600d.h" + + +#define TABMOD_TABVER "S0" // Campo per la memorizzazione della versione attuale delle tabelle +#define TAB_BASE_VERSION 100 // Versione base delle tabelle +#define SQL_VERSION 104 // Utilizzo questo per controllare la versione attuale delle tabelle e nel caso aggiornarle + +//TConfig_f9_mask + +bool TConfigIntf9_mask::on_key(const KEY key) +{ + if (key == K_SHIFT + K_F12) + { + if (run_fp_psw_mask()) + { + enable(CF_LVLNEW); + } + } + return true; +} + +bool TConfigIntf9_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case CF_LVLNEW: + if (e == fe_close) + { + TMask& config_mask = o.mask(); + TString new_lvl = config_mask.get(CF_LVLNEW); + TString old_lvl = config_mask.get(CF_LVLOLD); + + if (new_lvl.empty()) + return o.error_box("Livello Patch non conforme. Impossibile aggiornare"); + + if (new_lvl > old_lvl) + return o.error_box("Per impostare un livello patch superiore dell'attuale\nč sufficente riavviare il programma."); + } + + break; + default: break; + } + return true; +} + +//TArchInt_mask + +bool TArchInt_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case DLG_ELABORA: + if (e == fe_button) + open_win_estr(); + fill(); + break; + case DLG_CONFIG: + if (e == fe_button) + open_win_conf(); + break; + case DLG_DELREC: + if (e == fe_button) + delete_pack(); + break; + case B_SHOWESTR: + open_apri_estr_win(); + break; + case DLG_FINDREC: + if (e == fe_button) + controllo_errori(); + break; + + default: break; + } + + return true; +} + +void TArchInt_mask::open_apri_estr_win() +{ + static TString last_fill_id = 0; + TString id; + TToken_string* row_estrazione = nullptr; + FOR_EACH_SHEET_ROW(sfield(S_ELAB), nr, row) + { + if (row->get(0)[0] == 'X') + { + if (TString(row->get(cid2index(F_STATESTR))).starts_with("02")) + { + message_box("Impossibile controllare un pacchetto in stato di errore '02'.\n" + "Usare il 'Controllo Estrazioni' per vedere i movimenti in errore."); + return; + } + row_estrazione = row; + id = row->get(cid2index(F_IDESTR)); + break; + } + } + if (row_estrazione == nullptr) + { + message_box("Selezionare un pacchetto."); + return; + } + + if (last_fill_id != id) + { + _inclusi_msk.set_from_estrazione(*row_estrazione); + + _inclusi_msk.fill_estr(); + _inclusi_msk.fill_res(); + last_fill_id = id; + } + _inclusi_msk.run(); +} + +void TArchInt_mask::fill() const +{ + TString query; + query << "SELECT * FROM " F9_DRD " WHERE " DRD_CODSOC " = '" << F9CONF.get_ambiente() << "' AND " DRD_ID_EST " like 'R%' ORDER BY " << DRD_TIME << " DESC;"; + fp_db().sq_set_exec(query, false); + + TSheet_field& sf = sfield(S_ELAB); + + sf.reset(); + int i = 0; + for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next()) + { + TString tipo; + const int row = sf.set_row_cell(F_ARCH_B, fp_db().sq_get(DRD_STATO) == "09"); + + sf.set_row_cell(F_IDESTR, fp_db().sq_get(DRD_ID_EST), row); + sf.set_row_cell(F_DATAESTR, fp_db().sq_get_date(DRD_TIME), row); + sf.set_row_cell(F_PROV_B, fp_db().sq_get(DRD_FLAG_PD) == "P", row); + sf.set_row_cell(F_TIPODOC, fp_db().sq_get(DRD_TIPODOC), row); + sf.set_row_cell(F_DATADAL, fp_db().sq_get_date(DRD_DATADA), row); + sf.set_row_cell(F_DATAAL, fp_db().sq_get_date(DRD_DATAA), row); + sf.set_row_cell(F_USER, fp_db().sq_get(DRD_UTENTE), row); + + TString s = fp_db().sq_get(DRD_STATO); + s << " - " << TArchiviazioneIntegrazioni::traduci_stato(fp_db().sq_get(DRD_STATO)); + sf.set_row_cell(F_STATESTR, s, row); + sf.set_row_cell(F_DESCR_E, fp_db().sq_get(DRD_DESC), row); + } + sf.force_update(); + +} + +void TArchInt_mask::delete_estr_fld(const TString& idestr) +{ + TFilename dir(F9CONF.get_addr_doc_loc()); + + if (dexist(dir)) + { + dir << SLASH << F9CONF.get_ambiente() << SLASH << idestr << SLASH << "*"; + remove_files(dir, true); + } +} + +void TArchInt_mask::delete_pack(const bool all) +{ + // Se nello sheet non c'e' selezionata alcuna riga viene richiamata col flag all = true + bool flag = false; + TSheet_field& sf = sfield(S_ELAB); + FOR_EACH_SHEET_ROW(sf, nr, row) + { + if (row->get(0)[0] == 'X' || all) + { + flag = true; + const TString id_estr(row->get(cid2index(F_IDESTR))); + TString query; + const TString& codsoc(F9CONF.get_ambiente()); + query << "BEGIN\n" + " DECLARE @flag_prov CHAR(1), @stato CHAR(2);\n\n" + " SELECT @flag_prov = " DRD_FLAG_PD ", @stato = " DRD_STATO "\n" + " FROM " F9_DRD "\n" + " WHERE " DRD_ID_EST " = '" << id_estr << "';\n\n" + " IF (@flag_prov = 'P' OR @stato = '" D_GEST_ERR "' OR @stato = '" IN_DIAGN "' OR @stato = '" D_WA_ERR "' OR @stato = '" D_ERR_SOS "') BEGIN\n" + " DELETE FROM " F9_ERR " WHERE " ERR_CODSOC " = '" << codsoc << "' AND " ERR_IDESTR " = '" << id_estr << "';\n" + " END\n" + " ELSE BEGIN\n" + " SELECT @flag_prov AS FLAG, @stato AS STATO;\n" + " END\n" + "END"; + fp_db().sq_set_exec(query); + // Elimino testata in DRD, solo se provvis. + query.cut(0) << "BEGIN\n" + " DECLARE @flag_prov CHAR(1), @stato CHAR(2);\n\n" + " SELECT @flag_prov = " DRD_FLAG_PD ", @stato = " DRD_STATO "\n" + " FROM " F9_DRD "\n" + " WHERE " DRD_ID_EST " = '" << id_estr << "';\n\n" + " IF (@flag_prov = 'P' OR @stato = '" D_GEST_ERR "' OR @stato = '" IN_DIAGN "' OR @stato = '" D_WA_ERR "' OR @stato = '" D_ERR_SOS "') BEGIN\n" + " DELETE FROM " F9_DRD " WHERE " DRD_CODSOC " = '" << codsoc << "' AND " DRD_ID_EST " = '" << id_estr << "';\n" + " DELETE FROM " F9_IVA " WHERE " IVA_CODSOC " = '" << codsoc << "' AND " IVA_IDLAN " = '" << id_estr << "';\n" + " DELETE FROM " F9_MOVESTR " WHERE " MES_CODSOC " = '" << codsoc << "' AND " MES_IDESTR " = '" << id_estr << "';\n" + " END\n" + " SELECT @flag_prov AS FLAG, @stato AS STATO;\n" + "END"; + fp_db().sq_set_exec(query); + TString stato = fp_db().sq_get("STATO"); + if (fp_db().sq_get("FLAG") != "P" && stato != D_GEST_ERR && stato != IN_DIAGN && stato != D_WA_ERR && stato != D_ERR_SOS && !all) + { + warning_box("E' possibile eliminare solo un'estrazione provvisoria\no in uno degli stati di errore se definitiva (02 - 05 - 08)."); + return; + } + fp_db().sq_commit(); + + // DA VEDERE + delete_estr_fld(id_estr); + + if (!all) + break; + } + } + if (!flag) + { + if (noyes_box("Eliminare tutti i pacchetti provvisori o in stato di errore gestionale?")) + delete_pack(true); + } + fill(); +} + +void TArchInt_mask::controllo_errori() +{ + TString id_estr, stato; + TSheet_field& sf = sfield(S_ELAB); + bool flag = false; + FOR_EACH_SHEET_ROW(sf, nr, row) + { + if (row->get(0)[0] == 'X') + { + id_estr << row->get(cid2index(F_IDESTR)); + stato << row->get(cid2index(F_STATESTR)); + flag = true; + break; + } + } + if (flag) + { + if (stato.cut(2) == D_GEST_ERR) + { + TControlloIntegrazioni_mask controllo(F9CONF.get_ambiente(), id_estr); + controllo.run(); + } + else + warning_box("Impossibile controllare un'estrazione che non e'\nin stato di %s ('" D_GEST_ERR "').", TArchiviazioneIntegrazioni::traduci_stato(D_GEST_ERR)); + } + else + warning_box("Selezionare un'estrazione."); +} + +void TArchInt_mask::open_win_estr() +{ + if (!F9CONF.get_ambiente().full()) + warning_box("Inserire codice ambiente societa' in configurazione"); + else f9Int_app().run_estr_msk(); +} + +void TArchInt_mask::open_win_conf() +{ + TConfigIntf9_mask m("Configurazione Archiviazione Sostitutiva", 1, 70, 30, 55, 5); + + TLocalisamfile tabmod(LF_TABMOD); + tabmod.put("MOD", "F9"); + tabmod.put("COD", "SQL"); + tabmod.put("CODTAB", "VERSION"); + const bool exists = tabmod.read() == NOERR; + int version = exists ? real(tabmod.get(TABMOD_TABVER)).integer() : TAB_BASE_VERSION - 2; + + m.add_button_tool(DLG_OK, "Conferma", TOOL_OK); + m.add_button_tool(DLG_NULL, "", 0); + m.add_button_tool(DLG_QUIT, "Esci", TOOL_QUIT); + + m.add_groupbox(CF_CODGROUP, 0, "Codice Ambiente Societa' (WEBAPP):", 1, 0, 69, 3, ""); + m.add_string(CF_CODSOC, 0, "Codice ambiente ", 4, 1, 10, "", 10); + m.add_groupbox(CF_ADDRGROUP, 0, "Indicare percorso documenti cartacei:", 1, 3, 69, 4, ""); + m.add_string(CF_ADDRDOC, 0, "Server ", 2, 4, 256, "", 40); + m.add_string(CF_ADDRDOCLOC, 0, "Locale ", 2, 5, 256, "", 40); + m.add_groupbox(CF_ESTRGROUP, 0, "Opzioni estrazione", 1, 7, 69, 4, ""); + m.add_boolean(CF_CARTEXP, 0, "Estrai anche documenti cartacei", 2, 8); + m.add_groupbox(CF_LVLGROUP, 0, "Livello Patch Tabelle F9", 1, 11, 69, 4, ""); + m.add_string(CF_LVLOLD, 0, "Livello Attuale", 35, 12, 10, "D", 10); + m.add_string(CF_LVLNEW, 0, "Nuovo Livello ", 2, 12, 10, "D", 10); + m.set_handlers(); + + m.set(CF_CODSOC, F9CONF.get_ambiente()); + m.set(CF_ADDRDOC, F9CONF.get_addr_doc()); + m.set(CF_ADDRDOCLOC, F9CONF.get_addr_doc_loc()); + m.set(CF_CARTEXP, F9CONF.get_has_cartexp()); + m.set(CF_LVLOLD, version); + + + m.disable(CF_LVLOLD); + if (m.run() == K_ENTER) + save_conf(m); + +} + +bool TArchInt_mask::save_conf(TMask& config_mask) +{ + TString old_codsoc = F9CONF.get_ambiente(); + + TString new_lvl = config_mask.get(CF_LVLNEW); + TString old_lvl = config_mask.get(CF_LVLOLD); + + if (config_mask.get(CF_CODSOC).empty()) + warning_box("Codice Ambiente vuoto. Impossibile salvare i dati."); + F9CONF.set_ambiente(config_mask.get(CF_CODSOC)); + F9CONF.set_addr_doc(config_mask.get(CF_ADDRDOC)); + F9CONF.set_addr_doc_loc(config_mask.get(CF_ADDRDOCLOC)); + F9CONF.set_has_cartexp(config_mask.get_bool(CF_CARTEXP)); + + config_mask.close(); + //f9Int_app().edit_wa(old_codsoc); + if (new_lvl.full() && (new_lvl != old_lvl)) + { + TLocalisamfile tabmod(LF_TABMOD); + tabmod.put("MOD", "F9"); + tabmod.put("COD", "SQL"); + tabmod.put("CODTAB", "VERSION"); + tabmod.put("S0", real(new_lvl)); + + if (tabmod.write_rewrite() == NOERR) + { + config_mask.set(CF_LVLOLD, new_lvl); + config_mask.set(CF_LVLNEW, ""); + message_box("Versione impostata!"); + } + else + return error_box("Impossibile aggiornare il livello degli archivi"); + } + return true; +} + +TArchInt_mask::TArchInt_mask() : TAutomask("f90600a") +{ + int i = 0; + // Controllo che esistano delle categorie documentali. + fill(); +} + + +///////////////////////////////////////////////////////// +// Tf9IntEstrai_mask +//////////////////////////////////////////////////////// + +int Tf9IntEstrai_mask::estrai() +{ + const TDate dataini = get_dataini(); + const TDate dataend = get_dataend(); + const char tipodoc = get_tipodoc(); + const bool flagpro = is_provviso(); + TFilename path; + TLog_report log("Log estrazione"); + + //f9_app().get_spotlite_path(path); + + + + // Vero e proprio oggetto estrazione + _estrazione = new TEstrazione( + F9CONF.get_ambiente(), // Codice ambiente + flagpro, // Flag prov. + tipodoc, // Tipo doc. + get_descr(), // Descrizione estrazione + F9CONF.get_addr_doc(), // Cartella documenti + false, // Estrazione di un escluso + path, // Spotlight path + &log, // Log + &dataini, // Data estr. mov dal + &dataend, // Data estr. mov al + F9CONF.get_has_cartexp() // Flag per estrarre anche i doc. cartacei + ); + + const TString& doc_sdi = get(ES_DOCSDI); + + // Leggo i movimenti e li carico nell'estrazione. ///////////// + TString query; + + query = "USE MOV KEY 2"; + query << "\nFROM DATAREG=" << dataini.date2ansi() << "\nTO DATAREG=" << dataend.date2ansi(); + + TISAM_recordset mov(query); + TProgress_monitor* progr = new TProgress_monitor(mov.items(), "Acquisizione movimenti", false); + TLocalisamfile clifo(LF_CLIFO); + const TipoIVA tipo = tipodoc == 'A' ? iva_acquisti : iva_vendite; + int count = 0; + // Prendo tutti i movimenti a partire da una data e li carico tutti fino alla data finale + + TToken_string caus_list = select_causali(doc_sdi, tipodoc); + + for (bool ok = mov.move_first(); progr->add_status() && ok; ok = mov.move_next()) + { + const TString& cod_cau = mov.get_string(MOV_CODCAUS); + if (causale_in_lista(cod_cau, caus_list)) + { + TToken_string elab_f9(mov.get_string(MOV_ELABF9), ';'); // Stringa del campo elaborazione f9 nel file mov + bool escluso = (elab_f9.items() == 3 && elab_f9.get_bool(2)); + const TCausale & caus = cached_causale(mov.get_string(MOV_CODCAUS), mov.get_date(MOV_DATAREG).year()); + const bool stampato = mov.get_bool(MOV_REGST); + const TRegistro& reg = caus.reg(); + const TipoIVA& iva = reg.iva(); + TString numdoc = mov.get_string(MOV_NUMDOCEXT); + long nreg = mov.get_long(MOV_NUMREG); + + if (numdoc.blank()) + numdoc = mov.get_string(MOV_NUMDOC); + // Se definitivo controllo il flag di stampato REGST + if ((flagpro || stampato) && numdoc.full()) + { + // Creo il movimento da inserire e lo inserisco + _estrazione->add_mov(new TMovimento_estr(mov, tipo, escluso)); + ++count; + } + } + } + delete progr; + + _stats = { 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0,0 }; + // Effettiva estrazione. Faccio partire diagnostica e scrittura db. + const result_estr result = _estrazione->estrai_integrazioni(); + + //LAVORO SULLE STAT + int tot; + + tot = (int)_stats.int_match + (int)_stats.int_nomatch + (int)_stats.int_err; + + TString msg; + msg << "Tot. Docs : " << tot << "\n"; + + + msg << "Mov. Integrazione estratti : " << (int)_stats.int_match << "\n"; + msg << "Mov. Integrazione XML non trovato: " << (int)_stats.int_nomatch << "\n"; + msg << "Mov. Integrazione in errore : " << (int)_stats.int_err; + message_box(msg); + + return result; +} + +bool Tf9IntEstrai_mask::causale_in_lista(const TString& cod_cau, TToken_string cau_list) +{ + bool in_list = false; + int a = cau_list.items(); //da rimuovere + for (int i = 0; i < cau_list.items(); i++) + { + TString prov = cau_list.get(i); //dr + if (cod_cau == cau_list.get(i)) + { + in_list = true; + break; + } + } + return in_list; +} + +TToken_string Tf9IntEstrai_mask::select_causali(const TString& tipo_sdi, const char reg) +{ + TCursor cur(new TRelation(LF_CAUSALI)); + TToken_string caus_list; + + const int items = cur.items(); + + for (cur.first_item(); cur.pos() < items; cur.succ_item()) + { + const TRectype& rec = cur.curr(); + + if (reg == 'V') + { + const TString& tipodocsdi = rec.get(CAU_TIPODOCSDI); + if ((tipo_sdi == "T" && tipodocsdi.full()) || tipodocsdi == tipo_sdi) + caus_list.add(rec.get(CAU_CODCAUS)); + } + else if (reg == 'A') + { + if (rec.get(CAU_CODCAUREG).full()) + { + const TCausale & caus_coll = cached_causale(rec.get(CAU_CODCAUREG), get_date(ES_DATAEND).year()); + const TString& tipodocsdi = caus_coll.tipodocsdi(); + if ((tipo_sdi == "T" && tipodocsdi.full()) || tipodocsdi == tipo_sdi) + caus_list.add(rec.get(CAU_CODCAUS)); + } + } + + } + return caus_list; +} + +bool Tf9IntEstrai_mask::estrai_handler(TMask_field& f, KEY key) +{ + Tf9IntEstrai_mask& msk = (Tf9IntEstrai_mask&)f.mask(); + TArchiviazioneIntegrazioni& app = f9Int_app(); + + // Estraggo + const int stato = msk.estrai(); // Main function + + // Gestione risultato estrazione + if (stato == 1) + { + message_box("Estrazione avvenuta con successo!"); + //app.segna_estratti(); + } + if (stato == 0 || stato == -3) + { + warning_box("L'estrazione non e' stata completata. Controllare il log degli errori."); + //if (stato == 0) // Errore scrittura F9IVA, non segno in errore in testata... + //msk.segna_in_errore(); // ... se l'errore e' dovuto alla scrittura sul db. + } + msk.field(ES_DESCR).set(""); + msk.stop_run(K_FORCE_CLOSE); + return true; +} + +Tf9IntEstrai_mask::Tf9IntEstrai_mask() : TMask("Estrazione", 1, 60, 18), _estrazione(nullptr) +{ + add_button_tool(DLG_ELABORA, "Estrai", TOOL_ELABORA); + add_button_tool(DLG_NULL, "", 0); + add_button_tool(DLG_QUIT, "Esci", TOOL_QUIT); + + add_groupbox(ES_DATEGROUP, 0, "Inserire periodo per estrazione:", 1, 0, 59, 3, ""); + add_date(ES_DATAINI, 0, "dal", 4, 1, ""); + add_date(ES_DATAEND, 0, " al", 33, 1, ""); + add_groupbox(ES_FLAGGROUP, 0, "Selezionare tipo di estrazione:", 1, 3, 28, 3, ""); + add_list(ES_FLAGPROV, 0, "Flag provvisorio", 2, 4, 1, "", "P|D", "Provvisorio|Definitivo"); + add_groupbox(ES_TIPOGROUP, 0, "Selezionare documenti da estrarre:", 32, 3, 28, 4, ""); + add_list(ES_TIPODOC, 0, "Tipi documento", 33, 4, 1, "", "A|V", "Acquisti|Vendite"); + add_list(ES_DOCSDI, 0, "Tipi doc SDI", 33, 5, 5, "", "T|TD16|TD17|TD18|TD19|TD28", + "TUTTI|TD16 Integ. rev. chrg|TD17 Integ. servizi estero|TD18 Integ. beni intracom.|TD19 Integ. beni ex art. 17|TD28 Fatt. cartacea S.Marino"); + add_groupbox(ES_DESCGROUP, 0, "Inserire descrizione estrazione:", 1, 7, 59, 3, ""); + add_string(ES_DESCR, 0, "Descrizione", 2, 8, 250, "", 40); + + + set_handler(DLG_ELABORA, estrai_handler); + //set_handler(ES_DATAINI, dataini_handler); + //set_handler(ES_DATAEND, dataend_handler); + + TDate dt(TODAY); dt.set_day(1); dt.set_month(1); + + set(ES_DATAINI, dt); + set(ES_DATAEND, today); +} + + +//////////////////////////////////////////////////////// +// TControlloIntegrazioni_mask +//////////////////////////////////////////////////////// + +void TControlloIntegrazioni_mask::associa() // todo: levare gli ultimi residui del vecchio funzionamento del controllo errori +{ + TToken_string* mov_sel = selected_mov(); + TToken_string* fat_sel = selected_fat(); + if (mov_sel == nullptr || fat_sel == nullptr) + { + warning_box("Selezionare prima un movimento e una fattura elettronica."); + return; + } + TToken_string keys(fat_sel->get(cid2index(F_FPROKEYS)), ';'); + const bool ok = associa_int_ven(mov_sel->get_int(cid2index(F_CNUMREG)), keys); + if (ok) + { + // Tolgo il flag di in errore sul vettore in modo da rifare la fill e non venir piu' contato come da controllare + int count = -1; + + FOR_EACH_ARRAY_ROW(_controllo_mov, r, row) + if (count < _selected_mov && row->get_bool(0)) // Devo saltare tutti quelli che non hanno il flag e contare solo quelli che ce l'hanno + count++; + dberr_del_err(_cod_soc, _id_estr, mov_sel->get_int(cid2index(F_CNUMREG))); + } +} + +bool TControlloIntegrazioni_mask::associa_int_ven(const long numreg, TToken_string key_paf) +{ + TRectype & mov = (TRectype &)cache().get(LF_MOV, numreg); + bool ok = mov.full(); + ok &= key_paf.full(); + + if (ok) // Scrivo sul movimento il riferimento al fppro + { + //mov.put(MOV_IDDOCSDI, fppro_db().get_numdoc()); + //mov.put(MOV_DATADOCSDI, fppro_db().get_datadoc()); + mov.put(MOV_KEYPAF, key_paf); + ok = mov.rewrite() == NOERR; + } + else // Se la scrittura sul db fallisce levo sul movimento il riferimento all'fppro + { + //mov.zero(MOV_IDDOCSDI); + //mov.zero(MOV_DATADOCSDI); + mov.zero(MOV_KEYPAF); + mov.rewrite(); + } + return ok; +} + +TToken_string* TControlloIntegrazioni_mask::selected_mov() +{ + TSheet_field& movs = sfield(S_CONTROLLO); + FOR_EACH_SHEET_ROW(movs, nr, row) + { + if (row->get(0)[0] == 'X') + { + _selected_mov = nr; + return row; + } + } + return nullptr; +} + +TToken_string* TControlloIntegrazioni_mask::selected_fat() const +{ + TSheet_field& fppro = sfield(S_FPPRO); + FOR_EACH_SHEET_ROW(fppro, nr, row) + { + if (row->get(0)[0] == 'X') + return row; + } + return nullptr; +} + +TArray& TControlloIntegrazioni_mask::import_error_list() +{ + _tipo_doc_err = dberr_get_err(_cod_soc, _id_estr, _controllo_mov); + return _controllo_mov; +} + +void TControlloIntegrazioni_mask::fill_sheets() +{ + TSheet_field& sf = sfield(S_CONTROLLO); + + sf.reset(); + if (!_is_escluso) + import_error_list(); + else + _controllo_mov = f9Int_app().esclusi(); + FOR_EACH_ARRAY_ROW(_controllo_mov, r, row) + { + TToken_string& sfrow = sf.row(-1); + if (row->get_bool(0)) + { + sfrow = *row; + sf.set_row_cell(101, false, r); + } + } + sf.force_update(); + // Fill fppro sheet + + fill_pafw300_sheet(); +} + +void TControlloIntegrazioni_mask::fill_pafw300_sheet(bool filter) +{ + TSheet_field& sf = sfield(S_FPPRO); + + sf.reset(); + const char* order; + switch (_ordin) + { + default: + case 'D': order = "P7_DATA"; break; + case 'N': order = "P7_NUMERO"; break; + case 'F': order = "FORNITORE"; break; + case 'R': order = "P2_ANADENOMIN"; break; + case 'P': order = "P2_FISCIVACOD"; break; + } + TString query; + query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT,\n" << + "PW_TIPODOC AS TIPODOC, P7_DATA AS DATA, P7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC,\n" << + "PW_RAGSOC AS CLIENTE, " << + "P2_ANADENOMIN AS RAGSOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAF2700F\n" << + "JOIN PAF0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" << + "JOIN PAF0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" << + "JOIN PAFW300F ON PQ_KEYPRGINVIO = PW_KEYPRGINVIO AND PQ_KEYHEADERFATT = PW_KEYHEADERFATT AND PQ_KEYBODYFATT = PW_KEYBODYFATT\n" << + "WHERE PW_DATA > '20211201'" << "\n"; + + if (filter) + { + if (!_flt_da_data.empty()) + query << "AND PW_DATA >= '" << _flt_da_data.date2ansi() << "'"; + else + query << "AND PW_DATA >= '20010101'"; + + if (!_flt_a_data.empty()) + query << "AND PW_DATA <= '" << _flt_a_data.date2ansi() << "'\n"; + else + query << "AND PW_DATA <= '" << today.date2ansi() << "'\n"; + + if (!_flt_tipodoc.empty()) + query << "AND PW_TIPODOC = '" << _flt_tipodoc << "'\n"; + if (!_flt_numdoc.empty()) + query << "AND P7_NUMERO like '%" << _flt_numdoc << "%'\n"; + if (!_flt_tot_doc_da.is_zero()) + query << "AND PQ_IMPTOTDOC >= '" << _flt_tot_doc_da << "'\n"; + if (!_flt_tot_doc_a.is_zero()) + query << "AND PQ_IMPTOTDOC <= '" << _flt_tot_doc_a << "'\n"; + if (!_flt_ragsoc.empty()) + query << "AND P2_ANADENOMIN like '%" << _flt_ragsoc << "%'\n"; + if (!_flt_codforn.empty()) + query << "AND PW_RAGSOC = '" << _flt_codforn << "'\n"; + if (!_flt_piva.empty()) + query << "AND P2_FISCIVACOD = '" << _flt_piva << "'\n"; + } + + query << "ORDER BY " << order << " " << (_verso == 'A' ? "ASC" : "DESC") << "\n"; + fp_db().sq_set_exec(query, false); + + for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next()) + { + const int row = sf.set_row_cell(F_FTIPODOC, fp_db().sq_get("TIPODOC")); + + sf.set_row_cell(F_FDATA, fp_db().sq_get_date("DATA"), row); + sf.set_row_cell(F_FNUMDOC, fp_db().sq_get("NUMDOC"), row); + sf.set_row_cell(F_FIMPTOTDOC, fp_db().sq_get("IMPTOTDOC"), row); + sf.set_row_cell(F_FFORNITORE, fp_db().sq_get("CLIENTE"), row); + sf.set_row_cell(F_FRAGSOC, fp_db().sq_get("RAGSOC"), row); + sf.set_row_cell(F_FSTATOPIVA, fp_db().sq_get("STATOPIVA"), row); + sf.set_row_cell(F_FPIVA, fp_db().sq_get("PIVA"), row); + TString s = fp_db().sq_get("KEYPRGINVIO"); + s << ";" << fp_db().sq_get("KEYHEADERFATT") << ";" << fp_db().sq_get("KEYBODYFATT"); + sf.set_row_cell(F_FPROKEYS, s, row); + + } + sf.force_update(); +} + +void TControlloIntegrazioni_mask::open_win_filter() +{ + TMask& m = get_win_filter(); + m.set(F_FLTDATADA, _flt_da_data); + m.set(F_FLTDATAA, _flt_a_data); + + m.run(); + + _flt_da_data = m.get_date(F_FLTDATADA); + _flt_a_data = m.get_date(F_FLTDATAA); + + _flt_tipodoc = m.get(F_FLTTIPODOC); + _flt_numdoc = m.get(F_FLTNUMDOC); + _flt_tot_doc_da = m.get_real(F_FLTTOTDOCDA); + _flt_tot_doc_a = m.get_real(F_FLTTOTDOCA); + + _flt_codforn = m.get(F_FLTCODFORN); + _flt_ragsoc = m.get(F_FLTRAGSOC); + _flt_piva = m.get(F_FLTPIVA); + + //Ordinamento + _ordin = m.get(F_ORDER)[0]; + _verso = m.get(F_VERSO)[0]; + ini_set_string(CONFIG_DITTA, INI_PAR_MOD, "ORDINAM", &_ordin); + ini_set_string(CONFIG_DITTA, INI_PAR_MOD, "VERSO", &_verso); +} + +TMask& TControlloIntegrazioni_mask::get_win_filter() +{ + TMask* m = nullptr; + + if (m == nullptr) + { + m = new TMask("Filtro griglia FPPRO", 1, 65, 36, 60, 2); + + // TOOLBAR + m->add_button_tool(DLG_OK, "Conferma", TOOL_OK); + m->add_button_tool(DLG_NULL, "", 0); + //m->add_button_tool(DLG_QUIT, "Esci", TOOL_QUIT); + + // Filtro Documenti + m->add_groupbox(F_FLTDOCGRP, 0, "@BFiltra sui parametri del documento", 1, 1, 59, 5); + m->add_list(F_FLTTIPODOC, 0, "TIPO DOC. ", 2, 2, 8, "", + "|TD01|TD02|TD03|TD04|TD05|TD06|TD07|TD08|TD10|TD11|TD16|TD17|TD18|TD19|TD20|TD21|TD22|TD23|TD24|TD25|TD26|TD27|TD28", + "|TD01|TD02|TD03|TD04|TD05|TD06|TD07|TD08|TD10|TD11|TD16|TD17|TD18|TD19|TD20|TD21|TD22|TD23|TD24|TD25|TD26|TD27|TD28"); + m->add_string(F_FLTNUMDOC, 0, "NUM.DOC.", 30, 2, 8); + m->add_string(F_FLTTOTDOCDA, 0, "TOT.DOC. DA", 2, 3, 8); + m->add_string(F_FLTTOTDOCA, 0, "A ", 10, 4, 8); + + // Filtro date + m->add_groupbox(F_FLTDATAGRP, 0, "@BFiltra per data documento", 1, 6, 59, 3); + m->add_date(F_FLTDATADA, 0, "DATA DOC. DAL", 2, 7); + m->add_date(F_FLTDATAA, 0, " AL", 30, 7); + + // Filtro per fornitore + m->add_groupbox(F_FLTFORNGRP, 0, "@BFiltra per parametri fornitore", 1, 9, 59, 4); + //m->add_string(F_FLTCODFORN, 0, "CODICE ", 2, 10, 8); + m->add_string(F_FLTPIVA, 0, "P.IVA", 30, 10, 15); + m->add_string(F_FLTRAGSOC, 0, "RAG.SOC.", 2, 11, 48); + + // Ordinatori + m->add_radio(F_ORDER, 0, "@BOrdina per:", 1, 13, 59, "D|N|F|R|P", "DATA|NUMDOC|FORNITORE|RAGSOC|PIVA", "Z"); + m->add_radio(F_VERSO, 0, "@BVerso:", 1, 16, 59, "A|D", "Crescente|Decrescente", "Z"); + + //m->set_handler(DLG_OK, save_conf_handler); + _ordin = ini_get_string(CONFIG_DITTA, INI_PAR_MOD, "ORDINAM", "D")[0]; + _verso = ini_get_string(CONFIG_DITTA, INI_PAR_MOD, "VERSO", "A")[0]; + + m->set(F_FLTDATADA, _flt_da_data); + m->set(F_FLTDATAA, _flt_a_data); + m->set(F_FLTDATAA, _flt_tipodoc); + m->set(F_FLTNUMDOC, _flt_numdoc); + m->set(F_FLTTOTDOCDA, _flt_tot_doc_da); + m->set(F_FLTTOTDOCA, _flt_tot_doc_a); + //m->set(F_FLTCODFORN, _flt_codforn); + m->set(F_FLTPIVA, _flt_piva); + m->set(F_FLTRAGSOC, _flt_ragsoc); + m->set(F_ORDER, &_ordin); + m->set(F_VERSO, &_verso); + + } + return *m; +} + +bool TControlloIntegrazioni_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case DLG_USER: + if (e == fe_button && jolly > 0) + { + TSheet_field& sf = sfield(S_CONTROLLO); + TToken_string& row = sf.row(sf.selected()); + TRectype mov(LF_MOV); + mov.put(MOV_NUMREG, row.get(sf.cid2index(F_CNUMREG))); + //if (open_mov(mov)) + //fill(); + } + break; + case B_FILTER_CONF: + if (e == fe_button) + { + open_win_filter(); + fill_pafw300_sheet(true); + field(B_FILTER_OFF).enable(); + field(B_FILTER_ON).disable(); + } + break; + case B_FILTER_ON: + if (e == fe_button) + { + fill_pafw300_sheet(true); + field(B_FILTER_OFF).enable(); + field(B_FILTER_ON).disable(); + } + break; + case B_FILTER_OFF: + if (e == fe_button) + { + fill_pafw300_sheet(false); + field(B_FILTER_ON).enable(); + field(B_FILTER_OFF).disable(); + } + break; + case B_ASSOC: + if (e == fe_button) + { + associa(); + fill_sheets(); // Ricarico gli sheet + } + break; + case B_ESCL: + if (e == fe_button) + { + //conferma_esclusi(); + //fill(); + } + break; + case B_SELESCL: + if (e == fe_button) + { + _sel_esclusi = !_sel_esclusi; + field(B_ASSOC).enable(!_sel_esclusi); + field(B_ESCL).enable(_sel_esclusi); + field(B_ALLESCL).enable(_sel_esclusi); + sfield(S_CONTROLLO).enable_column(cid2index(F_CESCLUDI), _sel_esclusi); + sfield(S_CONTROLLO).force_update(); + } + break; + case B_ALLESCL: + if (e == fe_button) + { + TSheet_field& sf = sfield(S_CONTROLLO); + sf.hide(); + const bool active = *sf.row(0).get(cid2index(F_CESCLUDI)) == 'X'; + FOR_EACH_SHEET_ROW(sf, nr, row) + row->add(active ? " " : "X", cid2index(F_CESCLUDI)); + sf.force_update(); + sf.show(); + } + break; + case S_CONTROLLO: + if (e == fe_init) + sfield(S_CONTROLLO).enable_column(cid2index(F_CESCLUDI), false); + break; + case F_CSEL: + if (e == fe_modify) + //selfatt(o, jolly); + break; + default: break; + } + return true; +} + +TControlloIntegrazioni_mask::TControlloIntegrazioni_mask(const char* codsoc, const char* id_estr, const bool esclusi) + : TAutomask("f90600b"), _ordin('D'), _verso('A'), _selected_mov(0), _sel_esclusi(false) +{ + _cod_soc = codsoc; + _id_estr = id_estr; + field(B_ESCL).disable(); + field(B_ALLESCL).disable(); + _is_escluso = esclusi; + + field(B_FILTER_ON).disable(); + field(B_FILTER_OFF).disable(); + + // Fill controllo sheet + if (!_is_escluso) + import_error_list(); + else + _controllo_mov = f9Int_app().esclusi(); + + _datada = EOTIME; + _dataa = 0L; + FOR_EACH_ARRAY_ROW(_controllo_mov, r, row) + { + if (row->get_bool(0)) + { + const TDate& d = row->get_date(3); + + if (d < _datada) + _datada = d; + if (d > _dataa) + _dataa = d; + } + } + fill_sheets(); +} + + +//////////////////////////////////////////////////////// +// TApri_pacchetto_msk +//////////////////////////////////////////////////////// + +bool TApri_pacchetto_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case DLG_USER: + if (e == fe_button) + { + TSheet_field& sf = sfield(S_INCL); + TToken_string& row = sf.row(sf.selected()); + TRectype mov(LF_MOV); + mov.put(MOV_NUMREG, row.get(sf.cid2index(FI_NUMREG))); + //open_mov(mov); + } + break; + case B_ISELESCL: + if (e == fe_button) + //inselect_handler(); + break; + case B_IESCL: + if (e == fe_button) + //inescludi_handler(); + break; + case B_IALLESCL: + if (e == fe_button) + //inall_handler(); + default: break; + } + return true; +} + +void TApri_pacchetto_msk::fill_estr() const +{ + TString query; + query << "SELECT " IVA_SEZIVA ", " IVA_DATADOC ", " IVA_NUMDOC ", " IVA_NPROT "\n" + "FROM " F9_IVA "\n" + "WHERE " IVA_CODSOC " = '" << F9CONF.get_ambiente() << "' AND " IVA_IDLAN " = '" << _idestr << "'"; + // REG + DATAREG + PROTIVA + DATAINC + DATA74TER + NUMREG + + TSQL_recordset rec(""); + fp_db().sq_set_exec(query, false); + TSheet_field& sf = sfield(S_ESCL); + + sf.reset(); + + TProgress_monitor prog(fp_db().sq_items(), "Caricamento dati estrazione..."); + + for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next()) + { + if (!prog.add_status()) + break; + + TString sql; + + sql << "SELECT NUMREG, DATAREG, DATADOC, CODCAUS, TIPODOC, MESELIQ, NUMDOC, TOTDOC, CODCF, REG, PROTIVA, DESCR, ELABF9\n" + "FROM MOV\n" + "WHERE REG = '" << fp_db().sq_get(IVA_SEZIVA) << "' AND DATADOC='" << TDate(fp_db().sq_get_date(IVA_DATADOC)).date2ansi() << "'" + " AND PROTIVA = '" << fp_db().sq_get(IVA_NPROT) << "'"; + rec.set(sql); + rec.move_first(); + + const int row = sf.set_row_cell(FI_NUMREG, rec.get(0).as_string()); // Numreg + + sf.set_row_cell(FI_DATAREG, rec.get(1).as_date(), row); // Data reg + sf.set_row_cell(FI_DATADOC, rec.get(2).as_string(), row); // Data doc + TString codcaus; + + codcaus << rec.get(3).as_string(); + codcaus.lpad(3, '0'); + sf.set_row_cell(FI_CODCAUS, codcaus, row); // Cod caus + sf.set_row_cell(FI_TIPOMOV, rec.get(4).as_string(), row); // Tipo doc + sf.set_row_cell(FI_MESELIQ, rec.get(5).as_string(), row); // Mese liq + sf.set_row_cell(FI_NUMDOC, rec.get(6).as_string(), row); // Num doc + sf.set_row_cell(FI_IMPTOTDOC, rec.get(7).as_string(), row); // Tot doc + sf.set_row_cell(FI_FORN, rec.get(8).as_string(), row); // Clifo + + TToken_string key(_tipodoc == 'A' ? "F" : "C"); + + key.add(rec.get(8).as_string()); + + const TRectype& clifo = cache().get(LF_CLIFO, key); + + sf.set_row_cell(FI_RAGSOC, clifo.get(CLI_RAGSOC), row); // Rag soc + + TString protiva(rec.get(9).as_string()); + + protiva << "/" << rec.get(10).as_string(); + sf.set_row_cell(FI_PROTIVA, protiva, row); // Prot iva + sf.set_row_cell(FI_DESCR, rec.get(11).as_string(), row); // Descr + sf.set_row_cell(FI_IESCLUSO, TToken_string(rec.get(12).as_string(), ';').get_bool(2), row); // Escluso + } + sf.force_update(); +} + +void TApri_pacchetto_msk::fill_res() const +{ + TString query; + query << "SELECT * FROM " F9_MOVESTR "\n" + "INNER JOIN " F9_IVA " ON " IVA_IDLAN " = " MES_IDESTR " AND " IVA_NUMOR " = " MES_NUMREG "\n" + "WHERE " MES_CODSOC " = '" << F9CONF.get_ambiente() << "' AND " MES_IDESTR " = '" << _idestr << "'"; + + fp_db().sq_set_exec(query, false); + TSheet_field& sf = sfield(S_RES); + TProgress_monitor prog(fp_db().sq_items(), "Caricamento dati estrazione..."); + + sf.reset(); + for (bool ok = fp_db().sq_next(); prog.add_status() && ok; ok = fp_db().sq_next()) + { + + TString td = fp_db().sq_get(IVA_CAUSSOS); + const TRectype & mov = cache().get(LF_MOV, fp_db().sq_get(MES_NUMREG)); + const int row = sf.set_row_cell(F_RSEL, fp_db().sq_get_int(MES_ESTR) ? "X" : " "); // Estratto + + sf.set_row_cell(F_RNUMREG, mov.get(MOV_NUMREG), row); // Numreg + sf.set_row_cell(F_RDATAREG, mov.get_date(MOV_DATAREG), row); // Data reg + sf.set_row_cell(F_RDATADOC, mov.get_date(MOV_DATADOC), row); // Data doc + sf.set_row_cell(F_RTIPODOCSDI, td, row); // Tipo Doc SDI + sf.set_row_cell(F_RCODCAUS, mov.get(MOV_CODCAUS), row); // Cod caus + sf.set_row_cell(F_RTIPOMOV, mov.get(MOV_TIPODOC), row); // Tipo doc + sf.set_row_cell(F_RMESELIQ, mov.get_int(MOV_MESELIQ), row); // Mese liq + sf.set_row_cell(F_RNUMDOC, mov.get(MOV_NUMDOC), row); // Num doc + sf.set_row_cell(F_RIMPTOTDOC, mov.get_real(MOV_TOTDOC), row); // Tot doc + sf.set_row_cell(F_RFORN, mov.get_int(MOV_CODCF), row); // Clifo + + TToken_string key(mov.get(MOV_TIPO)); + + key.add(mov.get(MOV_CODCF)); + + const TRectype & clifo = cache().get(LF_CLIFO, key); + + sf.set_row_cell(F_RRAGSOC, clifo.get(CLI_RAGSOC), row); // Rag soc + + TString protiva(mov.get(MOV_REG)); + + protiva << "/" << mov.get(MOV_PROTIVA); + + sf.set_row_cell(F_RPROTIVA, protiva, row); // Prot iva + sf.set_row_cell(F_RDESCR, mov.get(MOV_DESCR), row); // Descr + sf.set_row_cell(F_RDESCRERR, fp_db().sq_get(MES_ERR), row); // Descrizione errore + } + sf.force_update(); +} + +void TApri_pacchetto_msk::set_from_estrazione(TToken_string& row_estrazione) +{ + set(F_IIDESTR, _idestr.cut(0) << row_estrazione.get(cid2index(F_IDESTR))); + set(F_IDATA, _dataestr = row_estrazione.get(cid2index(F_DATAESTR))); + set(F_IPROV, _provv = *row_estrazione.get(cid2index(F_PROV_B)) == 'X'); + set(F_ITIPOD, (_tipodoc = *row_estrazione.get(cid2index(F_TIPODOC))) == 'V' ? "Vendite" : "Acquisti"); + (_statoestr.cut(0) << row_estrazione.get(cid2index(F_STATESTR))).cut(2); + set(F_ISTATOESTR, TString(_statoestr) << " - " << TArchiviazioneIntegrazioni::traduci_stato(_statoestr)); + set(F_IDAL, _datadal = row_estrazione.get(cid2index(F_DATADAL))); + set(F_IAL, _dataal = row_estrazione.get(cid2index(F_DATAAL))); +} + +TApri_pacchetto_msk::TApri_pacchetto_msk() : TAutomask("f90600d.msk"), _provv(true), _tipodoc('A') +{ + field(B_IESCL).disable(); + field(B_IALLESCL).disable(); +} + +//////////////////////////////////////////////////////// +// TArchiviazioneIntegrazioni +//////////////////////////////////////////////////////// + +const char* TArchiviazioneIntegrazioni::traduci_stato(const TString& cod) +{ + static TString stato; + static TString last_cod; + if (last_cod != cod) + { + last_cod = cod; + stato.cut(0); + if (cod == "01") + stato << "in diagnostica"; + else if (cod == "02") + stato << "errore diagnostica gestionale"; + else if (cod == "03") + stato << "diagnostica gestionale passata"; + else if (cod == "04") + stato << "controllo WebApp"; + else if (cod == "05") + stato << "errore diagnostica WebApp"; + else if (cod == "06") + stato << "diagnostica WebApp passata"; + else if (cod == "07") + stato << "in elaborazione da sostitutiva"; + else if (cod == "08") + stato << "errore diagnostica da sostitutiva"; + else if (cod == "09") + stato << "Archiviato"; + } + return (const char*)stato; +} + +void TArchiviazioneIntegrazioni::main_loop() +{ + _msk = new TArchInt_mask; + _estr_msk = new Tf9IntEstrai_mask; + //m.set(1, true); + while (_msk->run() != K_QUIT) {} +} + +bool TArchiviazioneIntegrazioni::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.")); + + //nel caso checkare qui le tabelle dell f9 + return TSkeleton_application::create(); +} + +bool TArchiviazioneIntegrazioni::destroy() +{ + return TSkeleton_application::destroy(); +} + +int f90600(int argc, char* argv[]) +{ + TArchiviazioneIntegrazioni archInt; + archInt.run(argc, argv, TR("Archiviazione Integrazioni")); + return 0; +} \ No newline at end of file diff --git a/src/f9/f90600.h b/src/f9/f90600.h new file mode 100644 index 000000000..c894922f7 --- /dev/null +++ b/src/f9/f90600.h @@ -0,0 +1,188 @@ +#ifndef _F90600_H_ +#define _F90600_H_ + +#include "mask.h" +#include "execp.h" +#include "f90600a.h" +#include "mov.h" +#include "automask.h" +#include "applicat.h" + +#include "f9lib.h" + +class TConfigIntf9_mask : public TAutomask +{ +protected: + bool on_key(const KEY key); + bool on_field_event(TOperable_field& o, TField_event e, long jolly); + +public: + // @cmember Costruttore (crea la maschera leggendo la descrizione dal file .msk) + TConfigIntf9_mask(const char* filename, int num = 0) : TAutomask(filename, num) {}; + // @cmember Costruttore (crea una maschera vuota con i parametri dati) + TConfigIntf9_mask(const char* title, int pages, int cols, int rows, int xpos = -1, int ypos = -1) : TAutomask(title, pages, cols, rows, xpos, ypos) {}; +}; + +class TApri_pacchetto_msk : public TAutomask +{ + TString _idestr; + TDate _dataestr; + bool _provv; + char _tipodoc; + TString _statoestr; + TDate _datadal; + TDate _dataal; + + bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; + + //bool inall_handler() const; + //bool inescludi_handler() const; + //bool inselect_handler() const; + //void conferma_esclusi() const; +public: + void fill_estr() const; + void fill_res() const; + void set_from_estrazione(TToken_string& row_estrazione); + + TApri_pacchetto_msk(); + ~TApri_pacchetto_msk() {} +}; + +class TArchInt_mask : public TAutomask +{ + + TApri_pacchetto_msk _inclusi_msk; + + bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; + + void load_sheet_causali(const TString& tipo_sel); + + void open_apri_estr_win(); + void fill() const; + void delete_pack(bool all = false); + void delete_estr_fld(const TString& idestr); + void controllo_errori(); + void open_win_estr(); + void open_win_conf(); + bool save_conf(TMask& config_mask); + +public: + + TArchInt_mask(); + ~TArchInt_mask() {} +}; + +class Tf9IntEstrai_mask : public TMask +{ + TEstrazione * _estrazione; // Oggetto estrazione in corso di elaborazione + + void enable_fields(bool en = true); + + TDate get_dataini() const { return get_date(ES_DATAINI); } + TDate get_dataend() const { return get_date(ES_DATAEND); } + char get_tipodoc() const { return get(ES_TIPODOC)[0]; } + TipoIVA get_tipoiva() const { return get_tipodoc() == 'A' ? iva_acquisti : iva_vendite; } + TString get_descr() const { return get(ES_DESCR); } + bool is_provviso() const { return get(ES_FLAGPROV)[0] == 'P'; } + + /* Prepara l'estrazione caricando tutti i movimenti dato un periodo (data registrazione), + * e avvia la procedura di estrazione. + * [See TEstrazione::estrai()]. + */ + int estrai(); + /** Segna su DRD che l'estrazione e' in errore diag. gestionale. */ + //void segna_in_errore() const; + bool causale_in_lista(const TString& cod_cau, TToken_string cau_list); + TToken_string select_causali(const TString& tipo_sdi, const char reg); + + static bool estrai_handler(TMask_field& f, KEY key); + + //static bool enable_handler(TMask_field& f, KEY key); + //static bool dataini_handler(TMask_field& f, KEY key); + //static bool dataend_handler(TMask_field& f, KEY key); + +public: + Tf9IntEstrai_mask(); + ~Tf9IntEstrai_mask() { safe_delete(_estrazione); }; +}; + +class TControlloIntegrazioni_mask : public TAutomask +{ + TArray _controllo_mov; // Usare import_error_list(). + char _ordin; + char _verso; + int _selected_mov; + bool _sel_esclusi; + bool _is_escluso; + TString _cod_soc; + TString _id_estr; + char _tipo_doc_err{}; + TDate _datada; + TDate _dataa; + + //Filter variables + TDate _flt_da_data; + TDate _flt_a_data; + TString4 _flt_tipodoc; + TString16 _flt_numdoc; + real _flt_tot_doc_da; + real _flt_tot_doc_a; + TString16 _flt_codforn; + TString _flt_ragsoc; + TString16 _flt_piva; + + void associa(); + bool associa_int_ven(const long numreg, TToken_string key_paf); + //void conferma_esclusi() const; + + TArray& import_error_list(); + void fill_sheets(); + void fill_pafw300_sheet(bool filter = false); + TMask& get_win_filter(); + void open_win_filter(); + + TToken_string* selected_mov(); + TToken_string* selected_fat() const; + + /** Gestisce la selezione multipla negli sheet di controllo movimenti */ + //void selfatt(TOperable_field& o, long jolly) const; + + bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; +public: + TControlloIntegrazioni_mask(const char* codsoc, const char* id_estr, bool esclusi = false); +}; + +class TArchiviazioneIntegrazioni : public TSkeleton_application +{ + + TArchInt_mask * _msk; + Tf9IntEstrai_mask * _estr_msk; + + TArray _esclusi; // Vettore con i movimenti esclusi + +public: + virtual bool create(); + virtual bool destroy(); + virtual void main_loop(); + + TArray & esclusi() { return _esclusi; } + static const char* traduci_stato(const TString& cod); + + void run_estr_msk() { _estr_msk->run(); } + + TArchiviazioneIntegrazioni() {} +}; + +inline TArchiviazioneIntegrazioni& f9Int_app() +{ + static TArchiviazioneIntegrazioni* app = nullptr; + if (app == nullptr) + app = (TArchiviazioneIntegrazioni*)&main_app(); + return *app; +} + + + + +#endif //_F90600_H_ + diff --git a/src/f9/f90600a.h b/src/f9/f90600a.h new file mode 100644 index 000000000..957679dd2 --- /dev/null +++ b/src/f9/f90600a.h @@ -0,0 +1,69 @@ +// Sheet Pacchetti gia' elaborati +#define S_ELAB 201 +#define F_TEXT 202 +#define B_SHOWESTR 203 +#define B_SHOWESCL 204 + +#define F_SEL 101 +#define F_ARCH_B 102 +#define F_IDESTR 103 +#define F_DATAESTR 104 +#define F_PROV_B 105 +#define F_TIPODOC 106 +#define F_DATADAL 107 +#define F_DATAAL 108 +#define F_USER 109 +#define F_STATESTR 110 +#define F_DESCR_E 111 + +// Campi del vettore _movs per promemoria +// F_SEL 101 +// F_NUMREG 102 +// F_DATAREG 103 +// F_DATADOC 104 +// F_CODCAUS 105 +// F_MESELIQ 106 +// F_NUMDOC 107 +// F_IMPTOTDOC 108 +// F_FORN 109 +// F_RAGSOC 110 +// F_PROTIVA 111 +// F_DESCR 112 +// F_ESCLUDI 113 +// F_ESCLUSO 114 +// F_DESCRERR 115 + +// Campi maschera finestra runtime estrazione +#define ES_DATAINI 501 +#define ES_DATAEND 502 +#define ES_FLAGPROV 503 +#define ES_TIPODOC 504 +#define ES_DATEGROUP 505 +#define ES_FLAGGROUP 506 +#define ES_TIPOGROUP 507 +#define ES_DESCGROUP 508 +#define ES_DESCR 509 +#define ES_DOCSDI 510 + +// Campi maschera configurazione +#define CF_CODGROUP 501 +#define CF_CODSOC 502 +#define CF_ADDRGROUP 503 +#define CF_ADDRDOC 504 +#define CF_ADDRDOCLOC 505 +#define CF_ESTRGROUP 506 +#define CF_CARTEXP 507 +#define CF_LVLGROUP 508 +#define CF_LVLOLD 509 +#define CF_LVLNEW 510 +#define CF_TABLEVEL 511 + + +// Campi maschera descrizione estrazione +#define DES_TEXT 501 +#define DES_GROUP 502 + +// Campi maschera esclusi +#define ESC_BESTR 501 +#define ESC_BEXIT 502 +#define ESC_SSHEE 503 diff --git a/src/f9/f90600a.uml b/src/f9/f90600a.uml new file mode 100644 index 000000000..84dcb50db --- /dev/null +++ b/src/f9/f90600a.uml @@ -0,0 +1,155 @@ +#include "f90600a.h" + +TOOLBAR "topbar" 0 0 0 2 + +BUTTON DLG_ELABORA 2 2 +BEGIN + PROMPT 1 2 "Estrazione" + PICTURE TOOL_ELABORA + FLAGS "" +END + +BUTTON DLG_DELREC 2 2 +BEGIN + PROMPT 1 1 "~Elimina" + PICTURE TOOL_DELREC +END + +BUTTON DLG_CONFIG 2 2 +BEGIN + PROMPT 1 3 "Configurazione" + PICTURE TOOL_CONFIG + FLAGS "" +END + +BUTTON DLG_FINDREC 2 2 +BEGIN + PROMPT 1 4 "Controllo Estr." + PICTURE TOOL_PERMISSIONS + FLAGS "" +END + +BUTTON B_SHOWESTR 2 2 +BEGIN + PROMPT 1 5 "Apri Estr." + PICTURE BMP_EXPORT + FLAGS "" +END + +BUTTON DLG_RECALC +BEGIN + PROMPT 1 6 "Ricarica" + PICTURE TOOL_CONVERT + FLAS "" +END + +BUTTON DLG_NULL 2 2 +BEGIN + PROMPT 1 7 "" + PICTURE 0 +END + +BUTTON B_SHOWESCL 2 2 +BEGIN + PROMPT 1 8 "Mostra esclusi" + PICTURE TOOL_PERMISSIONS +END + +#include +ENDPAGE + +PAGE "Monitor Estrazioni" 0 2 0 0 + +TEXT F_TEXT +BEGIN + PROMPT 0 0 "@BElenco Pacchetti" +END + +SPREADSHEET S_ELAB -1 -1 +BEGIN + PROMPT 0 1 "Elenco pacchetti elaborati" + ITEM "" + ITEM "Archiviato@8" + ITEM "ID Estrazione@14" + ITEM "Data@8" + ITEM "Provv.@4" + ITEM "Tipo@8" + ITEM "dal@8" + ITEM "al@8" + ITEM "Utente@8" + ITEM "Stato estrazione@22" + ITEM "Descrizione@50" +END +ENDPAGE +ENDMASK + + +PAGE "Pacchetti" -1 -1 78 13 + +BOOLEAN F_SEL +BEGIN + PROMPT 1 1 "" +END + +BOOLEAN F_ARCH_B +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +STRING F_IDESTR 18 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +BOOLEAN F_PROV_B +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +STRING F_DESCR_E 50 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +STRING F_TIPODOC 13 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +DATE F_DATADAL +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +DATE F_DATAAL +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +STRING F_USER 20 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +STRING F_DATAESTR 19 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +STRING F_STATESTR 38 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +ENDPAGE +ENDMASK \ No newline at end of file diff --git a/src/f9/f90600b.h b/src/f9/f90600b.h new file mode 100644 index 000000000..eda8b0dfd --- /dev/null +++ b/src/f9/f90600b.h @@ -0,0 +1,61 @@ +// Maschera controllo errori in comune con monitor e esclusi +// Sheet Pacchetti gia' elaborati +#define B_ASSOC 202 +#define B_SELESCL 203 +#define B_ESCL 204 +#define B_ALLESCL 205 +#define B_FILTER_CONF 208 +#define B_FILTER_ON 209 +#define B_FILTER_OFF 210 + +// Sheet movimenti da controllare +#define S_CONTROLLO 206 +#define S_FPPRO 207 + +// Cambi maschera ordinamento sheet FPPRO +#define F_ORDER 301 +#define F_VERSO 302 + +//Filtro FPPRO +#define F_FLTDATAGRP 310 +#define F_FLTDATADA 311 +#define F_FLTDATAA 312 +#define F_FLTDOCGRP 313 +#define F_FLTTIPODOC 314 +#define F_FLTNUMDOC 315 +#define F_FLTTOTDOCDA 316 +#define F_FLTTOTDOCA 317 +#define F_FLTFORNGRP 318 +#define F_FLTCODFORN 319 +#define F_FLTRAGSOC 320 +#define F_FLTPIVA 321 + + + +#define F_CSEL 101 +#define F_CNUMREG 102 +#define F_CDATAREG 103 +#define F_CDATADOC 104 +#define F_CCODCAUS 105 +#define F_CMESELIQ 106 +#define F_CNUMDOC 107 +#define F_CIMPTOTDOC 108 +#define F_CFORN 109 +#define F_CRAGSOC 110 +#define F_CPROTIVA 111 +#define F_CDESCR 112 +#define F_CESCLUDI 113 +#define F_CESCLUSO 114 +#define F_CDESCRERR 115 + +// Sheet fatture FPPRO da associare +#define F_FSEL 101 +#define F_FTIPODOC 102 +#define F_FDATA 103 +#define F_FNUMDOC 104 +#define F_FIMPTOTDOC 105 +#define F_FFORNITORE 106 +#define F_FRAGSOC 107 +#define F_FSTATOPIVA 108 +#define F_FPIVA 109 +#define F_FPROKEYS 110 \ No newline at end of file diff --git a/src/f9/f90600b.uml b/src/f9/f90600b.uml new file mode 100644 index 000000000..27b2bdf51 --- /dev/null +++ b/src/f9/f90600b.uml @@ -0,0 +1,316 @@ +#include "f90600b.h" + +TOOLBAR "topbar" 0 0 0 2 + +BUTTON B_ASSOC 2 2 +BEGIN + PROMPT 1 6 "Associa mov." + PICTURE TOOL_SAVEREC + FLAGS "" +END + +BUTTON DLG_NULL 2 2 +BEGIN + PROMPT -1 1 "" + PICTURE 0 +END + +BUTTON B_SELESCL 2 2 +BEGIN + PROMPT 1 8 "Sel. esclusi" + PICTURE TOOL_MULTISEL + FLAGS "" +END + +BUTTON B_ESCL 2 2 +BEGIN + PROMPT 1 7 "Conf. esclusi" + PICTURE TOOL_WARNING + FLAGS "" +END + +BUTTON B_ALLESCL 2 2 +BEGIN + PROMPT 1 7 "Sel. tutti" + PICTURE TOOL_MULTISEL + FLAGS "" +END + +BUTTON DLG_NULL 2 2 +BEGIN + PROMPT -1 1 "" + PICTURE 0 +END + +BUTTON B_FILTER_CONF 2 2 +BEGIN + PROMPT 1 5 "Impostaz. Filtro" + PICTURE TOOL_ELABORA + FLAGS "" +END + +BUTTON B_FILTER_ON 2 2 +BEGIN + PROMPT 1 5 "Filtro ON" + PICTURE TOOL_CHECK + FLAGS "" +END + +BUTTON B_FILTER_OFF 2 2 +BEGIN + PROMPT 1 5 "Filtro OFF" + PICTURE TOOL_CHECK + FLAGS "" +END + +#include +ENDPAGE + +PAGE "Elenco di controllo" -1 -1 78 13 + +TEXT DLG_NULL +BEGIN + PROMPT 0 0 "Movimenti da controllare" +END + +SPREADSHEET S_CONTROLLO -1 10 +BEGIN + PROMPT 0 1 "Movimenti da controllare" + ITEM " " + ITEM "Numero\nReg.@8" + ITEM "Data\nReg.@8" + ITEM "Data\nDoc.@8" + ITEM "Codice\nCaus.@8" + ITEM "Mese\nliquidazione@8" + ITEM "Numero\nDocumento@8" + ITEM "Totale\nDocumento@8" + ITEM "Cliente/\nFornitore@8" + ITEM "Ragione\nSociale@8" + ITEM "Cod. regis./\nprot.IVA@8" + ITEM "Descrizione@8" + ITEM "ESCLUDI@5" + ITEM "ESCLUSO@6" + ITEM "Descrizione\nErrore" +END + +TEXT DLG_NULL +BEGIN + PROMPT 0 12 "Fatture el. in ingresso" +END + +SPREADSHEET S_FPPRO -1 -1 +BEGIN + PROMPT 0 13 "Movimenti da controllare" + ITEM " " + ITEM "Tipo Doc." + ITEM "Data@8" + ITEM "Num. Doc.@12" + ITEM "Tot. Doc.@9" + ITEM "Cliente@20" + ITEM "Fornitore@20" + ITEM "Stato P.IVA" + ITEM "P.IVA@8" + ITEM "Chiavi PAF@60" +END + +ENDPAGE +ENDMASK + + + + +PAGE "Controllo" -1 -1 78 13 + +BOOLEAN F_CSEL +BEGIN + PROMPT 1 1 "" +END + +NUMERIC F_CNUMREG 7 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +DATA F_CDATAREG +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +DATA F_CDATADOC +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +STRING F_CCODCAUS 3 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +NUMERIC F_CMESELIQ 2 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +STRING F_CNUMDOC 50 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +NUMERIC F_CIMPTOTDOC 15 2 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +NUMERIC F_CFORN 6 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +STRING F_CRAGSOC 80 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +STRING F_CPROTIVA 10 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +STRING F_CDESCR 50 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +BOOLEAN F_CESCLUDI +BEGIN + PROMPT 1 1 "Escludi" + FLAGS "D" +END + +STRING F_CESCLUSO 2 +BEGIN + PROMPT 1 1 "ESCLUSO" + FLAG "D" +END + +STRING F_CDESCRERR 110 +BEGIN + PROMPT 1 1 "DESCRIZIONE ERRORE" + FLAG "D" +END +ENDPAGE + +TOOLBAR "topbar" 0 0 0 2 + +BUTTON DLG_USER 2 2 +BEGIN + PROMPT 1 1 "Collega" + PICTURE TOOL_LINK +END + +BUTTON DLG_NULL 2 2 +BEGIN + PROMPT -1 0 "" + PICTURE 0 +END + +BUTTON DLG_QUIT 2 2 +BEGIN + PROMPT 3 1 "Fine" + MESSAGE EXIT,K_QUIT + PICTURE TOOL_QUIT +END +ENPAGE +ENDMASK + +PAGE "Passive" -1 -1 78 13 + +BOOLEAN F_FSEL +BEGIN + PROMPT 1 1 "" +END + +STRING F_FTIPODOC 4 +BEGIN + PROMPT 1 1 " " + FLAGS "D" +END + +DATA F_FDATA +BEGIN + PROMPT 1 1 " " + FLAGS "D" +END + +STRING F_FNUMDOC 20 +BEGIN + PROMPT 1 1 " " + FLAGS "D" +END + +NUMERIC F_FIMPTOTDOC 15 2 +BEGIN + PROMPT 1 1 " " + FLAGS "D" +END + +STRING F_FFORNITORE 80 +BEGIN + PROMPT 1 1 " " + FLAGS "D" +END + +STRING F_FRAGSOC 80 +BEGIN + PROMPT 1 1 " " + FLAGS "D" +END + +STRING F_FSTATOPIVA 2 +BEGIN + PROMPT 1 1 " " + FLAGS "D" +END + +STRING F_FPIVA 15 +BEGIN + PROMPT 1 1 " " + FLAGS "D" +END + +STRING F_FPROKEYS 80 +BEGIN + PROMPT 1 1 " " + FLAGS "D" +END + +ENDPAGE + +TOOLBAR "topbar" 0 0 0 2 + +BUTTON DLG_NULL 2 2 +BEGIN + PROMPT -1 0 "" + PICTURE 0 +END + +BUTTON DLG_QUIT 2 2 +BEGIN + PROMPT 3 1 "Fine" + MESSAGE EXIT,K_QUIT + PICTURE TOOL_QUIT +END + +ENPAGE +ENDMASK \ No newline at end of file diff --git a/src/f9/f90600c.h b/src/f9/f90600c.h new file mode 100644 index 000000000..6e6486825 --- /dev/null +++ b/src/f9/f90600c.h @@ -0,0 +1,17 @@ +#define S_ESCL 201 +#define F_ETEXT 202 +#define B_ESTRAI 203 + +// Elenco movimenti esclusi +#define FE_SEL 101 +#define FE_NUMREG 102 +#define FE_DATAREG 103 +#define FE_DATADOC 104 +#define FE_CODCAUS 105 +#define FE_MESELIQ 106 +#define FE_NUMDOC 107 +#define FE_IMPTOTDOC 108 +#define FE_FORN 109 +#define FE_RAGSOC 110 +#define FE_PROTIVA 111 +#define FE_DESCR 112 \ No newline at end of file diff --git a/src/f9/f90600d.h b/src/f9/f90600d.h new file mode 100644 index 000000000..fdc217ae6 --- /dev/null +++ b/src/f9/f90600d.h @@ -0,0 +1,48 @@ +#define S_INCL 201 +#define F_ETEXT 202 +#define B_ISELESCL 203 +#define B_IESCL 204 +#define B_IALLESCL 205 +#define F_IIDESTR 206 +#define F_IDATA 207 +#define F_IPROV 208 +#define F_ITIPOD 209 +#define F_ISTATOESTR 210 +#define F_IDAL 211 +#define F_IAL 212 + +#define S_RES 301 + +// Elenco movimenti inclusi +#define FI_SEL 101 +#define FI_NUMREG 102 +#define FI_DATAREG 103 +#define FI_DATADOC 104 +#define FI_CODCAUS 105 +#define FI_TIPOMOV 106 +#define FI_MESELIQ 107 +#define FI_NUMDOC 108 +#define FI_IMPTOTDOC 109 +#define FI_FORN 110 +#define FI_RAGSOC 111 +#define FI_PROTIVA 112 +#define FI_DESCR 113 +#define FI_IESCLUDI 114 +#define FI_IESCLUSO 115 + +// Elenco risultato movimenti (S_RES) +#define F_RSEL 101 +#define F_RNUMREG 102 +#define F_RDATAREG 103 +#define F_RDATADOC 104 +#define F_RTIPODOCSDI 105 +#define F_RCODCAUS 106 +#define F_RTIPOMOV 107 +#define F_RMESELIQ 108 +#define F_RNUMDOC 109 +#define F_RIMPTOTDOC 110 +#define F_RFORN 111 +#define F_RRAGSOC 112 +#define F_RPROTIVA 113 +#define F_RDESCR 114 +#define F_RDESCRERR 115 diff --git a/src/f9/f90600d.uml b/src/f9/f90600d.uml new file mode 100644 index 000000000..75d9455bb --- /dev/null +++ b/src/f9/f90600d.uml @@ -0,0 +1,399 @@ +#include "f90600d.h" + +TOOLBAR "topbar" 0 0 0 2 + +BUTTON DLG_INFO 2 2 +BEGIN + PROMPT 1 1 "Info" + MESSAGE EXIT,K_F2 + PICTURE TOOL_INFO +END + +BUTTON DLG_HELP 2 2 +BEGIN + PROMPT 2 1 "Help" + MESSAGE EXIT,K_F1 + PICTURE TOOL_HELP +END + +BUTTON DLG_NULL 2 2 +BEGIN + PROMPT -1 0 "" + PICTURE 0 +END + +BUTTON B_ISELESCL 2 2 +BEGIN + PROMPT 1 8 "Sel. esclusi" + PICTURE TOOL_MULTISEL + FLAGS "" +END + +BUTTON B_IESCL 2 2 +BEGIN + PROMPT 1 7 "Conf. esclusi" + PICTURE TOOL_WARNING + FLAGS "" +END + +BUTTON B_IALLESCL 2 2 +BEGIN + PROMPT 1 7 "Sel. tutti" + PICTURE TOOL_MULTISEL + FLAGS "" +END + +BUTTON DLG_NULL 2 2 +BEGIN + PROMPT -1 0 "" + PICTURE 0 +END + +BUTTON DLG_QUIT 2 2 +BEGIN + PROMPT 3 1 "Fine" + MESSAGE EXIT,K_QUIT + PICTURE TOOL_QUIT +END +ENDPAGE + +PAGE "Movimenti" 0 2 0 0 + +STRING F_IIDESTR 18 +BEGIN + PROMPT 0 0 "Id estrazione" + FLAGS "D" +END + +DATA F_IDATA +BEGIN + PROMPT 45 0 "Data estrazione " + FLAGS "D" +END + +BOOLEAN F_IPROV +BEGIN + PROMPT 0 1 "Provvisorio" + FLAGS "D" +END + +STRING F_ITIPOD 9 +BEGIN + PROMPT 15 1 "Tipo Documenti" + FLAGS "D" +END + +STRING F_ISTATOESTR 38 +BEGIN + PROMPT 45 1 "Stato estrazione" + FLAGS "D" +END + +DATA F_IDAL +BEGIN + PROMPT 0 2 "Dal" + FLAGS "D" +END + +DATA F_IAL +BEGIN + PROMPT 15 2 "Al" + FLAGS "D" +END + +TEXT F_ETEXT +BEGIN + PROMPT 0 3 "@BMovimenti estratti nel pacchetto:" +END + +SPREADSHEET S_INCL -1 -1 +BEGIN + PROMPT 0 4 "Movimenti estratti" + ITEM " " + ITEM "Numero\nReg.@8" + ITEM "Data\nReg.@8" + ITEM "Data\nDoc.@8" + ITEM "Codice\nCaus.@8" + ITEM "Tipo Doc.@5" + ITEM "Mese\nliquidazione@8" + ITEM "Numero\nDocumento@8" + ITEM "Totale\nDocumento@8" + ITEM "Cliente/\nFornitore@8" + ITEM "Ragione\nSociale@8" + ITEM "Cod. regis./\nprot.IVA@8" + ITEM "Descrizione@8" + ITEM "ESCLUDI@5" + ITEM "ESCLUSO@6" +END + +ENDPAGE + + +PAGE "Risultato estrazione" 0 0 0 0 + +SPREADSHEET S_RES -1 -1 +BEGIN + PROMPT 0 0 "Movimenti" + ITEM "Estratto" + ITEM "Numero\nReg.@8" + ITEM "Data\nReg.@8" + ITEM "Data\nDoc.@8" + ITEM "Tipo Doc\nSDI@9" + ITEM "Codice\nCaus.@8" + ITEM "Tipo Mov.@5" + ITEM "Mese\nliquidazione@8" + ITEM "Numero\nDocumento@8" + ITEM "Totale\nDocumento@8" + ITEM "Cliente/\nFornitore@8" + ITEM "Ragione\nSociale@8" + ITEM "Cod. regis./\nprot.IVA@8" + ITEM "Descrizione@8" + ITEM "Descrizione Estrazione@30" +END + +ENDPAGE +ENDMASK + + + + +PAGE "Mov Inclusi" -1 -1 78 13 + +BOOLEAN FI_SEL +BEGIN + PROMPT 1 1 "" +END + +NUMERIC FI_NUMREG 7 +BEGIN + PROMPT 1 2 "" + FLAGS "D" +END + +DATA FI_DATAREG +BEGIN + PROMPT 1 3 "" + FLAGS "D" +END + +DATA FI_DATADOC +BEGIN + PROMPT 1 4 "" + FLAGS "D" +END + +STRING FI_CODCAUS 3 +BEGIN + PROMPT 1 5 "" + FLAGS "D" +END + +STRING FI_TIPOMOV 3 +BEGIN + PROMPT 1 6 "" + FLAGS "D" +END + +NUMERIC FI_MESELIQ 2 +BEGIN + PROMPT 1 7 "" + FLAGS "D" +END + +STRING FI_NUMDOC 50 +BEGIN + PROMPT 1 8 "" + FLAGS "D" +END + +NUMERIC FI_IMPTOTDOC 15 2 +BEGIN + PROMPT 1 9 "" + FLAGS "D" +END + +NUMERIC FI_FORN 6 +BEGIN + PROMPT 1 10 "" + FLAGS "D" +END + +STRING FI_RAGSOC 80 +BEGIN + PROMPT 1 11 "" + FLAGS "D" +END + +STRING FI_PROTIVA 10 +BEGIN + PROMPT 1 12 "" + FLAGS "D" +END + +STRING FI_DESCR 50 +BEGIN + PROMPT 1 13 "" + FLAGS "D" +END + +LIST FI_IESCLUDI 2 +BEGIN + PROMPT 1 1 "Escludi" + ITEM "|" + ITEM "S|SI" + ITEM "N|NO" + FLAGS "D" +END + +BOOLEAN FI_IESCLUSO +BEGIN + PROMPT 1 1 "ESCLUSO" + FLAG "D" +END + +ENDPAGE + +TOOLBAR "topbar" 0 0 0 2 + +BUTTON DLG_USER 2 2 +BEGIN + PROMPT 1 1 "Collega" + PICTURE TOOL_LINK +END + +BUTTON DLG_NULL 2 2 +BEGIN + PROMPT -1 0 "" + PICTURE 0 +END + +BUTTON DLG_QUIT 2 2 +BEGIN + PROMPT 3 1 "Fine" + MESSAGE EXIT,K_QUIT + PICTURE TOOL_QUIT +END + +ENPAGE +ENDMASK + + + + +PAGE "Risultato estratti" -1 -1 78 13 + +BOOLEAN F_RSEL +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +NUMERIC F_RNUMREG 7 +BEGIN + PROMPT 1 2 "" + FLAGS "D" +END + +DATA F_RDATAREG +BEGIN + PROMPT 1 3 "" + FLAGS "D" +END + +DATA F_RDATADOC +BEGIN + PROMPT 1 4 "" + FLAGS "D" +END + +STRING F_RTIPODOCSDI 4 +BEGIN + PROMPT 1 5 "" + FLAGS "D" +END + +STRING F_RCODCAUS 3 +BEGIN + PROMPT 1 6 "" + FLAGS "D" +END + +STRING F_RTIPOMOV 3 +BEGIN + PROMPT 1 7 "" + FLAGS "D" +END + +NUMERIC F_RMESELIQ 2 +BEGIN + PROMPT 1 8 "" + FLAGS "D" +END + +STRING F_RNUMDOC 50 +BEGIN + PROMPT 1 9 "" + FLAGS "D" +END + +NUMERIC F_RIMPTOTDOC 15 2 +BEGIN + PROMPT 1 10 "" + FLAGS "D" +END + +NUMERIC F_RFORN 6 +BEGIN + PROMPT 1 11 "" + FLAGS "D" +END + +STRING F_RRAGSOC 80 +BEGIN + PROMPT 1 12 "" + FLAGS "D" +END + +STRING F_RPROTIVA 10 +BEGIN + PROMPT 1 13 "" + FLAGS "D" +END + +STRING F_RDESCR 50 +BEGIN + PROMPT 1 14 "" + FLAGS "D" +END + +STRING F_RDESCRERR 92 +BEGIN + PROMPT 1 15 "" + FLAGS "D" +END + +ENDPAGE + +TOOLBAR "topbar" 0 0 0 2 + +BUTTON DLG_USER 2 2 +BEGIN + PROMPT 1 1 "Collega" + PICTURE TOOL_LINK +END + +BUTTON DLG_NULL 2 2 +BEGIN + PROMPT -1 0 "" + PICTURE 0 +END + +BUTTON DLG_QUIT 2 2 +BEGIN + PROMPT 3 1 "Fine" + MESSAGE EXIT,K_QUIT + PICTURE TOOL_QUIT +END + +ENPAGE +ENDMASK \ No newline at end of file