#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; } int numreg = mov_sel->get_int(cid2index(F_CNUMREG)); TRectype & mov = (TRectype &)cache().get(LF_MOV, numreg); TToken_string keys(fat_sel->get(cid2index(F_FPROKEYS)), ';'); bool ok = true; char c = _tipo_doc_err; //DAT CAPIRE COME TIRARE FUORI TIPO IVA ESTR if (_tipo_doc_err == 'A') { ok &= associa_int_acq(mov_sel->get_int(cid2index(F_CNUMREG)), keys); } else { 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; } bool TControlloIntegrazioni_mask::associa_int_acq(const long numreg, TToken_string key_fppro) { TRectype & mov = (TRectype &)cache().get(LF_MOV, numreg); bool ok = mov.full(); ok &= key_fppro.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_KEYFPPRO, key_fppro); 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_KEYFPPRO); mov.rewrite(); } return ok; } void TControlloIntegrazioni_mask::conferma_esclusi() const { const TMask& mask = *this; TSheet_field& sf = mask.sfield(S_CONTROLLO); FOR_EACH_SHEET_ROW_LOOP(sf, row) { const long nreg = sf.get_long_row_cell(row, F_CNUMREG); TRectype & movs = (TRectype&)cache().get(LF_MOV, nreg); if (sf.get_bool_row_cell(row, F_CESCLUDI)) { TToken_string stato("", ';'); stato.add("", 0); stato.add(today.date2ansi()); stato.add("X"); movs.put(MOV_ELABF9, stato); movs.rewrite(); sf.set_row_cell(F_CESCLUSO, "Si", row); TString query; query << "UPDATE " F9_ERR " SET ESCLUSO = 'Si' WHERE " ERR_CODSOC " = '" << _cod_soc << "' AND IDESTR = '" << _id_estr << "' AND NUMREG = '" << nreg << "';"; fp_db().sq_set_exec(query); fp_db().sq_commit(); } else { if (movs.get(MOV_ELABF9).full()) { movs.put(MOV_ELABF9, ""); sf.set_row_cell(F_CESCLUSO, "", row); movs.rewrite(); TString query; query << "UPDATE " F9_ERR " SET ESCLUSO = NULL WHERE " ERR_CODSOC " = '" << _cod_soc << "' AND IDESTR = '" << _id_estr << "' AND NUMREG = '" << nreg << "';"; fp_db().sq_set_exec(query); fp_db().sq_commit(); } } } sf.force_update(); sf.show(); } 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 if (_tipo_doc_err == 'A') fill_fppro_sheet(); else 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::fill_fppro_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" << "PZ_TIPODOC AS TIPODOC, P7_DATA AS DATA, P7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC,\n" << "PZ_CLIFOR AS FORNITORE, " << "P2_ANADENOMIN AS RAGSOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" << "JOIN PAA0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" << "JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" << "JOIN FPPRO00F ON PQ_KEYPRGINVIO = PZ_KEYPRGINVIO AND PQ_KEYHEADERFATT = PZ_KEYHEADERFATT AND PQ_KEYBODYFATT = PZ_KEYBODYFATT\n" << "WHERE PZ_DATA > '20211201'" << "\n"; if (filter) { if (!_flt_da_data.empty()) query << "AND P7_DATA >= '" << _flt_da_data.date2ansi() << "'"; else query << "AND P7_DATA >= '20010101'"; if (!_flt_a_data.empty()) query << "AND P7_DATA <= '" << _flt_a_data.date2ansi() << "'\n"; else query << "AND P7_DATA <= '" << today.date2ansi() << "'\n"; if (!_flt_tipodoc.empty()) query << "AND PZ_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 PZ_CLIFOR = '" << _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(); if (_tipo_doc_err == 'V') fill_pafw300_sheet(true); else fill_fppro_sheet(true); field(B_FILTER_OFF).enable(); field(B_FILTER_ON).disable(); } break; case B_FILTER_ON: if (e == fe_button) { if (_tipo_doc_err == 'V') fill_pafw300_sheet(true); else fill_fppro_sheet(true); field(B_FILTER_OFF).enable(); field(B_FILTER_ON).disable(); } break; case B_FILTER_OFF: if (e == fe_button) { if (_tipo_doc_err == 'V') fill_pafw300_sheet(false); else fill_fppro_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_sheets(); } 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 //////////////////////////////////////////////////////// void TApri_pacchetto_msk::conferma_esclusi() const { TSheet_field& sf = sfield(S_INCL); FOR_EACH_SHEET_ROW_LOOP(sf, row) { const long nreg = sf.get_long_row_cell(row, FI_NUMREG); TRectype & movs = (TRectype&)cache().get(LF_MOV, nreg); const TString & da_escludere = sf.get_str_row_cell(row, FI_IESCLUDI); if (da_escludere == "S") { TToken_string stato("", ';'); stato.add("", 0); stato.add(today.date2ansi()); stato.add("X"); movs.put(MOV_ELABF9, stato); movs.rewrite(); sf.set_row_cell(FI_IESCLUSO, true, row); } else { if (movs.get(MOV_ELABF9).full()) { movs.zero(MOV_ELABF9); sf.set_row_cell(FI_IESCLUSO, false, row); movs.rewrite(); } } } sf.force_update(); } 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) { static bool sel_esclusi = false; if (_provv || TArchiviazioneIntegrazioni::is_stato_errore(_statoestr)) { sel_esclusi = !sel_esclusi; field(B_IESCL).enable(sel_esclusi); field(B_IALLESCL).enable(sel_esclusi); sfield(S_INCL).enable_column(cid2index(FI_IESCLUDI), sel_esclusi); sfield(S_INCL).force_update(); return true; } warning_box("E' possibile escludere i movimenti solo per pacchetti bloccati\nin stato di errore '" D_WA_ERR " - %s'", TArchiviazioneIntegrazioni::traduci_stato(D_WA_ERR)); } break; case B_IESCL: if (e == fe_button) conferma_esclusi(); break; case B_IALLESCL: if (e == fe_button) { TSheet_field& sf = sfield(S_INCL); const bool active = *sf.row(0).get(cid2index(FI_IESCLUDI)) == 'S'; FOR_EACH_SHEET_ROW_LOOP(sf, row) sf.set_row_cell(FI_IESCLUDI, active ? "N" : "S", row); sf.force_update(); return true; } break; 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; }