#include #include #include #include "fplib.h" #include #include #include #include "../ve/velib05.h" #include "../fe/felib.h" #include "fp0.h" #include "fp0700a.h" #include "fp0100a.h" ///////////////////////////////////////////////////////////////////////////////////// // TPAR_mask ///////////////////////////////////////////////////////////////////////////////////// class TPAR_mask : public TAutomask { TAssoc_array _causali; protected: enum { _codnum, _tipodoc, _dastato, _astato, _tiposdi }; void set_filter_changed(); void set_pronto(); void connect_keys(); void export_paf(); bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; void next_page(int p) override; bool on_key(KEY key) override; bool check_not_empty(); bool check_full_fields() const; void set_err_paf(); void fill(); void init(); void force_reload_sheet(); void load_all_fields(); bool _filter_changed; bool _enable_chiave_fixer; public: const TAssoc_array & causali() const { return _causali; } void save_all_fields(); TPAR_mask(); virtual ~TPAR_mask() {} }; TPAR_mask *__mask = nullptr; void TPAR_mask::save_all_fields() { TSheet_field & scaus = sfield(F_CAUSALI_TIPO); // Salvo le impostazioni ini_set_string(CONFIG_DITTA, "fp", "dataini", get(F_DATAINI)); ini_set_string(CONFIG_DITTA, "fp", "dataend", get(F_DATAEND)); ini_set_string(CONFIG_DITTA, "fp", "TIPO_SDI", get(F_TIPO_SDI)); // Salvo lo sheet _causali.destroy(); FOR_EACH_SHEET_ROW_LOOP(scaus, r) { const TString & codcaus = scaus.get_str_row_cell(r, S_COD_CAUS); ini_set_string(CONFIG_DITTA, "fp", "CAUSALE", codcaus, r); _causali.add(codcaus); } for (int i = scaus.items(); ; i++) { if (!ini_remove(CONFIG_DITTA, "fp", "CAUSALE", i)) break; } } void TPAR_mask::force_reload_sheet() { // Mi sposto nella prima pagina, setto il flag di dirty sul filtro e mi risposto // Lo faccio perché eliminando la riga direttamente e chiamando la force_update() si crea un bug che cliccando sulla prima riga viene mostrata quella che c'era prima della eliminazione TAutomask::next_page(0); set_focus_field(F_DATAINI); _filter_changed = true; next_page(1); } void TPAR_mask::load_all_fields() { set(F_DATAINI, ini_get_string(CONFIG_DITTA, "fp", "dataini")); set(F_DATAEND, ini_get_string(CONFIG_DITTA, "fp", "dataend")); const TToken_string s_accepted_docs(ini_get_string(CONFIG_DITTA, "fp", "accepted_docs"), ';'); TSheet_field& scaus = sfield(F_CAUSALI_TIPO); for (int i = 0;; i++) { TString16 caus = ini_get_string(CONFIG_DITTA, "fp", "CAUSALE", "", i); if (caus.full()) { int r = scaus.set_row_cell(S_COD_CAUS, caus); scaus.set_row_cell(S_DESCR, cache().get(LF_CAUSALI, caus, CAU_DESCR), r); } else break; } scaus.force_update(); set(F_TIPO_SDI, ini_get_string(CONFIG_DITTA, "fp", "TIPO_SDI")); } bool caus_filter(const TRelation* r) { return __mask->causali().is_key(r->lfile().get(MOV_CODCAUS)); } void TPAR_mask::fill() { const TDate dal = get(F_DATAINI); const TDate al = get(F_DATAEND); TString filter_selected = get(F_REGSEL); // Record di controllo per eventuali elaborazioni precedenti TString hfatt, bfatt; TPaf_record paf0100f("PAF0100F"); TSheet_field& regs = sfield(F_REGS); TString query; enable(DLG_OK, filter_selected.empty() || filter_selected == "E"); enable(DLG_SAVEREC, (is_f8() && filter_selected == "X") || filter_selected == "D"); enable(DLG_FINDREC, filter_selected == "D"); enable(DLG_PRINT, _enable_chiave_fixer && filter_selected.empty()); /* VECCHIA QUERY query << "USE " << LF_MOV << " KEY 3 SELECT (BETWEEN(" << MOV_DATAREG << "," << dal.date2ansi() << ',' << al.date2ansi() << "))&&(REG!=\"\")" << "\nFROM " << MOV_TIPO << "=C\nTO " << MOV_TIPO "=C"; */ //MY QUERY query << "USE " << LF_MOV << " KEY 2\n"; if (dal.ok()) query << "FROM " << MOV_DATAREG << "=" << dal << "\n"; if (al.ok()) query << "TO " << MOV_DATAREG << "=" << al << "\n"; //query << "USE " << LF_MOV << " WHERE CODCAUS IN ('A01') AND DATADOC BETWEEN " << dal.date2ansi() << " AND " << al.date2ansi(); TISAM_recordset rec(query); rec.set_filterfunction(caus_filter); TProgress_monitor pi(rec.items(), nullptr); bool first, show, ask = !((show = (first = true))); int fat_no_cod = 0; const TString16 tipodocsdi = get(F_TIPO_SDI); const TDate data_inizio = get_date_start_new_fatt(); // Disabilito la colonna del codice ufficio regs.enable_column(cid2index(S_UFFICIO), false); regs.reset(); for (bool okc = rec.move_first(); okc; okc = rec.move_next()) { if (!pi.add_status()) break; const TRectype& mov = rec.cursor()->curr(); const TCli_for & cli = cached_clifor(mov.get_char(MOV_TIPO), mov.get_long(MOV_CODCF)); bool sent = false; if (chiave_paf_mov(mov, tipodocsdi, hfatt, bfatt)) { if (paf0100f.search(nullptr, hfatt, bfatt) && paf0100f.sq_get("P1_GESTIONE") != " " && paf0100f.sq_get("P1_ERRINT") != "*") { if (paf0100f.sq_get("P1_GESTIONE") != filter_selected) continue; sent = true; } else if (filter_selected.not_empty()) continue; } int r = regs.set_row_cell(S_SELECTED, sent); regs.set_row_cell(S_ANNO, rec.get_int(MOV_ANNOES), r); regs.set_row_cell(S_NUMREG, rec.get_string(MOV_NUMREG), r); regs.set_row_cell(S_DATAREG, rec.get(MOV_DATAREG).as_date(), r); regs.set_row_cell(S_CLIENTE, rec.get_long(MOV_CODCF), r); regs.set_row_cell(S_RAGSOC, cli.get(CLI_RAGSOC), r); regs.set_row_cell(S_TIPODOC, rec.get_string(MOV_TIPODOC), r); // non c'è ? TString cod_ind_sped = rec.get(DOC_CODINDSP).as_string(); TString rif = get_dest_sdi(rec.get_string(CFV_TIPOCF)[0], rec.get_long(CFV_CODCF), EMPTY_STRING); // Se è ancora vuoto potrebbe essere estero if (rif.empty()) { // Segno la riga errata if (first) { first = false; // Abilito la colonna del codice ufficio per segnalare l'errore regs.enable_column(regs.cid2index(S_UFFICIO)); } regs.set_back_and_fore_color(COLOR_RED, COLOR_WHITE, rec.current_row(), regs.cid2index(S_UFFICIO)); fat_no_cod++; } regs.set_row_cell(S_UFFICIO, rif, r); regs.set_row_cell(S_RIFAMM, cli.vendite().get(CFV_PARIFAMM), r); regs.set_row_cell(S_COFI, cli.get(CLI_COFI), r); bool split = cli.get_bool("20." CLI_SPLITPAY); if (split) { const long numreg = rec.get(DOC_NUMREG).as_int(); if (numreg > 0) { const TRectype& mov = cache().get(LF_MOV, numreg); split = is_split_payment(mov); } } regs.set_row_cell(S_SPLITPAY, split, r); regs.set_row_cell(S_ATTACH, false, r); // verificare regs.set_row_cell(S_ONLYGEN, get_bool(F_PROVVISORIO), r); // verificare } regs.force_update(); regs.show(); if (fat_no_cod > 0) warning_box("Sono state trovate una o più fatture senza codice destinatario né pec"); } void TPAR_mask::set_filter_changed() { _filter_changed = true; } void TPAR_mask::set_pronto() { TString_array& sht = sfield(F_REGS).rows_array(); TProgress_monitor pi(sht.items(), "Esportazione Fatture"); FOR_EACH_ARRAY_ROW(sht, r, riga) { if (!pi.add_status()) break; if (!riga->starts_with("X")) continue; static TString campo_hfatt, campo_bfatt, query; TDocumento doc('D', riga->get_int(xvtil_cid2index(S_ANNO)), EMPTY_STRING, riga->get_long(xvtil_cid2index(S_NUMREG))); if (chiave_paf_doc(doc, campo_hfatt, campo_bfatt)) { // Come prima cosa controllo che effettivamente la chiave di questo doc sia in giro per il mondo query.cut(0) << "UPDATE PAF0100F SET P1_GESTIONE = 'P' WHERE P1_KEYHEADERFATT = '" << campo_hfatt << "' AND P1_KEYBODYFATT = '" << campo_bfatt << "'"; fp_db().sq_set_exec(query); } } // Committo tutto fp_db().sq_commit(); force_reload_sheet(); } void TPAR_mask::connect_keys() { TString_array& sht = sfield(F_REGS).rows_array(); TLog_report legno("Allineamento chiavi documento"); // Non sto a fare 8000 variabili, oggi mi sento a corto di Byte static TString msg_log; int updated = 0; if (sht.empty()) { warning_box("Impossibile allineare le chiavi di uno sheet vuoto!"); return; } TProgress_monitor pi(sht.items(), "Esportazione Fatture"); FOR_EACH_ARRAY_ROW(sht, r, riga) { if (!pi.add_status()) break; if (!riga->starts_with("X")) continue; TDocumento doc('D', riga->get_int(xvtil_cid2index(S_ANNO)), EMPTY_STRING, riga->get_long(xvtil_cid2index(S_NUMREG))); static TString campo_hfatt, campo_bfatt, query; if (chiave_paf_doc(doc, campo_hfatt, campo_bfatt)) { // Come prima cosa controllo che effettivamente la chiave di questo doc sia in giro per il mondo query.cut(0) << "SELECT * FROM PAF0100F WHERE P1_KEYHEADERFATT = '" << campo_hfatt << "' AND P1_KEYBODYFATT = '" << campo_bfatt << "'"; if (fp_db().sq_set_exec(query)) { msg_log.cut(0) << "Il documento " << campo_bfatt << " è già presente nel DB, verrà saltato"; legno.log(9000, msg_log); continue; } // Provo a cercare il documento nel paf07 come un vero uomo query.cut(0) << "SELECT P7_KEYPRGINVIO, P7_KEYHEADERFATT, P7_KEYBODYFATT FROM PAF0700F WHERE P7_KEYHEADERFATT = '" << campo_hfatt << "' AND P7_TIPODOC = '" << tipo_doc_sdi(doc) << "' AND P7_DATA = '" << doc.data().date2ansi() << "' AND P7_NUMERO LIKE '%" << doc.numero() << "%'"; if (fp_db().sq_set_exec(query, false)) { bool found = false; // Valori nel db static TString db_prginv, db_hfatt, db_bfatt; // Posso avere più di un risulatato, per esempio se effettuo la fatturazione di gennaio potrei avere la fattura 1, 10 e 11 del cliente 100. for (bool ok = fp_db().sq_set_exec(query); ok && !found; ok = fp_db().sq_next()) { db_prginv.cut(0) << fp_db().sq_get("P7_KEYPRGINVIO"); db_hfatt.cut(0) << fp_db().sq_get("P7_KEYHEADERFATT"); db_bfatt.cut(0) << fp_db().sq_get("P7_KEYBODYFATT"); // Adesso che ho trovato il documento vado a verificare per scrupolo anche le righe documento query.cut(0) << "SELECT * FROM PAF1800F WHERE PI_KEYPRGINVIO = '" << db_prginv << "' AND PI_KEYHEADERFATT = '" << db_hfatt << "' AND PI_KEYBODYFATT = '" << db_bfatt << "'"; // Setto momentaneamente a true per ciclare sotto found = true; for (bool move_ok = fp_db().sq_set_exec(query); move_ok && found; move_ok = fp_db().sq_next()) { const TRiga_documento& rigadoc = doc[fp_db().sq_get_int("PI_NUMEROLINEA")]; // Testo solo la qta, il prezzo è troppo complicato const real& qta = rigadoc.quantita(); found &= !qta.is_zero() ? qta == fp_db().sq_get_real("PI_QUANTITA") : fp_db().sq_get_real("PI_QUANTITA") <= UNO; } } if (!found) { msg_log.cut(0) << "Il documento " << campo_bfatt << " non è presente nel DB PAF, verrà saltato"; legno.log(9000, msg_log); continue; } else { query.cut(0) << "UPDATE PAF0100F SET P1_KEYHEADERFATT = '" << campo_hfatt << "', P1_KEYBODYFATT = '" << campo_bfatt << "' WHERE P1_KEYPRGINVIO = '" << db_prginv << "' AND P1_KEYHEADERFATT = '" << db_hfatt << "' AND P1_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF0200F SET P2_KEYHEADERFATT = '" << campo_hfatt << "', P2_KEYBODYFATT = '" << campo_bfatt << "' WHERE P2_KEYPRGINVIO = '" << db_prginv << "' AND P2_KEYHEADERFATT = '" << db_hfatt << "' AND P2_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF0400F SET P4_KEYHEADERFATT = '" << campo_hfatt << "', P4_KEYBODYFATT = '" << campo_bfatt << "' WHERE P4_KEYPRGINVIO = '" << db_prginv << "' AND P4_KEYHEADERFATT = '" << db_hfatt << "' AND P4_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF0700F SET P7_KEYHEADERFATT = '" << campo_hfatt << "', P7_KEYBODYFATT = '" << campo_bfatt << "' WHERE P7_KEYPRGINVIO = '" << db_prginv << "' AND P7_KEYHEADERFATT = '" << db_hfatt << "' AND P7_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF0800F SET P8_KEYHEADERFATT = '" << campo_hfatt << "', P8_KEYBODYFATT = '" << campo_bfatt << "' WHERE P8_KEYPRGINVIO = '" << db_prginv << "' AND P8_KEYHEADERFATT = '" << db_hfatt << "' AND P8_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF1000F SET P0_KEYHEADERFATT = '" << campo_hfatt << "', P0_KEYBODYFATT = '" << campo_bfatt << "' WHERE P0_KEYPRGINVIO = '" << db_prginv << "' AND P0_KEYHEADERFATT = '" << db_hfatt << "' AND P0_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF1100F SET PA_KEYHEADERFATT = '" << campo_hfatt << "', PA_KEYBODYFATT = '" << campo_bfatt << "' WHERE PA_KEYPRGINVIO = '" << db_prginv << "' AND PA_KEYHEADERFATT = '" << db_hfatt << "' AND PA_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF1200F SET PB_KEYHEADERFATT = '" << campo_hfatt << "', PB_KEYBODYFATT = '" << campo_bfatt << "' WHERE PB_KEYPRGINVIO = '" << db_prginv << "' AND PB_KEYHEADERFATT = '" << db_hfatt << "' AND PB_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF1600F SET PF_KEYHEADERFATT = '" << campo_hfatt << "', PF_KEYBODYFATT = '" << campo_bfatt << "' WHERE PF_KEYPRGINVIO = '" << db_prginv << "' AND PF_KEYHEADERFATT = '" << db_hfatt << "' AND PF_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF1700F SET PG_KEYHEADERFATT = '" << campo_hfatt << "', PG_KEYBODYFATT = '" << campo_bfatt << "' WHERE PG_KEYPRGINVIO = '" << db_prginv << "' AND PG_KEYHEADERFATT = '" << db_hfatt << "' AND PG_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF1800F SET PI_KEYHEADERFATT = '" << campo_hfatt << "', PI_KEYBODYFATT = '" << campo_bfatt << "' WHERE PI_KEYPRGINVIO = '" << db_prginv << "' AND PI_KEYHEADERFATT = '" << db_hfatt << "' AND PI_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF1900F SET PY_KEYHEADERFATT = '" << campo_hfatt << "', PY_KEYBODYFATT = '" << campo_bfatt << "' WHERE PY_KEYPRGINVIO = '" << db_prginv << "' AND PY_KEYHEADERFATT = '" << db_hfatt << "' AND PY_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF2000F SET PJ_KEYHEADERFATT = '" << campo_hfatt << "', PJ_KEYBODYFATT = '" << campo_bfatt << "' WHERE PJ_KEYPRGINVIO = '" << db_prginv << "' AND PJ_KEYHEADERFATT = '" << db_hfatt << "' AND PJ_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF2100F SET PK_KEYHEADERFATT = '" << campo_hfatt << "', PK_KEYBODYFATT = '" << campo_bfatt << "' WHERE PK_KEYPRGINVIO = '" << db_prginv << "' AND PK_KEYHEADERFATT = '" << db_hfatt << "' AND PK_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF2200F SET PL_KEYHEADERFATT = '" << campo_hfatt << "', PL_KEYBODYFATT = '" << campo_bfatt << "' WHERE PL_KEYPRGINVIO = '" << db_prginv << "' AND PL_KEYHEADERFATT = '" << db_hfatt << "' AND PL_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF2400F SET PN_KEYHEADERFATT = '" << campo_hfatt << "', PN_KEYBODYFATT = '" << campo_bfatt << "' WHERE PN_KEYPRGINVIO = '" << db_prginv << "' AND PN_KEYHEADERFATT = '" << db_hfatt << "' AND PN_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF2500F SET PO_KEYHEADERFATT = '" << campo_hfatt << "', PO_KEYBODYFATT = '" << campo_bfatt << "' WHERE PO_KEYPRGINVIO = '" << db_prginv << "' AND PO_KEYHEADERFATT = '" << db_hfatt << "' AND PO_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF2600F SET PP_KEYHEADERFATT = '" << campo_hfatt << "', PP_KEYBODYFATT = '" << campo_bfatt << "' WHERE PP_KEYPRGINVIO = '" << db_prginv << "' AND PP_KEYHEADERFATT = '" << db_hfatt << "' AND PP_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF2700F SET PQ_KEYHEADERFATT = '" << campo_hfatt << "', PQ_KEYBODYFATT = '" << campo_bfatt << "' WHERE PQ_KEYPRGINVIO = '" << db_prginv << "' AND PQ_KEYHEADERFATT = '" << db_hfatt << "' AND PQ_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF3000F SET PT_KEYHEADERFATT = '" << campo_hfatt << "', PT_KEYBODYFATT = '" << campo_bfatt << "' WHERE PT_KEYPRGINVIO = '" << db_prginv << "' AND PT_KEYHEADERFATT = '" << db_hfatt << "' AND PT_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAF3200F SET PU_KEYHEADERFATT = '" << campo_hfatt << "', PU_KEYBODYFATT = '" << campo_bfatt << "' WHERE PU_KEYPRGINVIO = '" << db_prginv << "' AND PU_KEYHEADERFATT = '" << db_hfatt << "' AND PU_KEYBODYFATT = '" << db_bfatt << "'\n" << "UPDATE PAFW300F SET PW_KEYHEADERFATT = '" << campo_hfatt << "', PW_KEYBODYFATT = '" << campo_bfatt << "' WHERE PW_KEYPRGINVIO = '" << db_prginv << "' AND PW_KEYHEADERFATT = '" << db_hfatt << "' AND PW_KEYBODYFATT = '" << db_bfatt << "'\n"; if (fp_db().sq_set_exec(query)) { msg_log.cut(0) << "Il documento " << campo_bfatt << " e' stato aggiornato correttamente\nChiave precedente: " << db_bfatt << " chiave nuova: " << campo_bfatt; legno.log(0, msg_log); updated++; } } } } } if (fp_db().sq_commit()) { msg_log.cut(0) << "Aggiornati " << updated << " documenti"; legno.log(0, msg_log); } legno.preview(); force_reload_sheet(); } void TPAR_mask::export_paf() { int ndocs = 0; TSheet_field& sht = sfield(F_REGS); const TString &tipo_doc_sdi = get(F_TIPO_SDI); TReg_fp elab(tipo_doc_sdi); //elab.set_cache_insert(true); if (!sht.empty()) { { TProgress_monitor pi(sht.items(), "Esportazione Regolarizzazioni"); FOR_EACH_SHEET_ROW_LOOP(sht, r) { if (!pi.add_status()) break; if (sht.get_bool_row_cell(r, S_SELECTED)) { const long nreg = sht.get_long_row_cell(r, S_NUMREG); // Verifico che il codice sdi nello sheet sia lo stesso sulla testata del documento in caso contrario lo aggiorno TMovimento_contabile mov(nreg); if (elab.reg_to_paf(mov)) ndocs++; else { TString msg; msg.format("La registrazione numero %ld non è stata esportata, continuare?", nreg); elab.log().log(2, msg); if (!yesno_box(msg)) break; } } } if (elab.force_commit() <= 0) { TString msg; msg.format("Errore durante il cambiamento di stato finale, potrebbero esser rimaste delle fatture in Pronto"); elab.log().log(2, msg); error_box(msg); } } elab.show_log(); } } bool TPAR_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case DLG_RECALC: if (e == fe_button) next_page(1); break; case F_DATAINI: if (e == fe_init) o.set(ini_get_string(CONFIG_DITTA, "fp", "LastXML", "01-01-2019")); else if (e == fe_close) ini_set_string(CONFIG_DITTA, "fp", "LastXML", o.get()); break; case F_DATAEND: if (e == fe_init) o.set(TDate(TODAY)); case F_REGS: if (e == se_query_add || e == se_query_del) return false; break; case DLG_OK: if (e == fe_button) export_paf(); break; case DLG_USER: if (e == fe_button && jolly > 0) { TSheet_field& regs = sfield(F_REGS); TToken_string& row = regs.row(regs.selected()); TMovimento_contabile mov(regs.get_long_row_cell(regs.selected(), S_NUMREG)); if (mov.edit()) // Perchè prima andava senza dovergli mettere nulla? fill(); } break; case DLG_ALL: { if (e == fe_button) { TSheet_field& regs = sfield(F_REGS); TString_array& sht = regs.rows_array(); const int items = sht.items(); if (items > 0) { const TString4 select = *(sht.row(0).get(0)) == 'X' ? "" : "X"; for (int i = 0; i < items; i++) sht.row(i).add(select, 0); regs.force_update(); } } } break; case DLG_SAVEREC: { if (e == fe_button) set_err_paf(); } break; case DLG_FINDREC: { if (e == fe_button) set_pronto(); } break; case DLG_PRINT: { if (e == fe_button) connect_keys(); } break; default: break; } if ((e == fe_modify || e >= se_enter) && jolly == 0) { if (o.dlg() >= START_MASK && o.dlg() <= END_MASK) { set_filter_changed(); } } return true; } void TPAR_mask::next_page(int p) { bool ok = true; if (_filter_changed && p != 1000) { if ((ok = _filter_changed = check_full_fields())) { save_all_fields(); fill(); _filter_changed = false; } } if (ok) TAutomask::next_page(p); } bool TPAR_mask::on_key(const KEY key) { if (key == K_SHIFT + K_F12) { if (run_fp_psw_mask()) { _enable_chiave_fixer = true; if (curr_page() > 0) force_reload_sheet(); } } return true; } bool TPAR_mask::check_not_empty() { TSheet_field& sheet = sfield(F_REGS); TString msg; if (sheet.empty()) msg = "La tabella dei movimenti è vuota, vuoi caricarla con i filtri selezionati?"; else if (_filter_changed) msg = "I filtri sono stati cambiati, vuoi ricaricare la tabella con i nuovi filtri selezionati?"; if (msg.full() && yesno_box(msg)) { next_page(1); } return sheet.full(); } bool TPAR_mask::check_full_fields() const { // Controllo ogni campo che sia valorizzato FOR_EACH_MASK_FIELD(*this, i, f) { if (!f->on_key(K_ENTER)) return false; } return true; } void TPAR_mask::set_err_paf() { // Vado a riportare sui paf l'errore TSheet_field& sfld = sfield(F_REGS); TProgress_monitor pi(sfld.items(), "Cambio stato fatture"); const TString tipodocsdi = get(F_TIPO_SDI); FOR_EACH_SHEET_ROW_LOOP(sfld, r) { if (!pi.add_status()) break; if (sfld.get_bool_row_cell(r, S_SELECTED)) { // Ricontrollo che la fattura sia presente in Campo prima di cambiare stato long nreg = sfld.get_long_row_cell(r, S_NUMREG); const TRectype & mov = cache().get(LF_MOV, nreg); TString hfatt, bfatt; TPaf_record paf0100f("PAF0100F"); if (chiave_paf_mov(mov, tipodocsdi, hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt)) { TString query; query << "UPDATE PAF0100F SET P1_GESTIONE = 'E', P1_KEYPRGINVIO = 'DELETED' WHERE P1_KEYHEADERFATT = '" << hfatt << "' AND P1_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF0200F SET P2_GESTIONE = 'E', P2_KEYPRGINVIO = 'DELETED' WHERE P2_KEYHEADERFATT = '" << hfatt << "' AND P2_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF0400F SET P4_GESTIONE = 'E', P4_KEYPRGINVIO = 'DELETED' WHERE P4_KEYHEADERFATT = '" << hfatt << "' AND P4_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF0700F SET P7_GESTIONE = 'E', P7_KEYPRGINVIO = 'DELETED' WHERE P7_KEYHEADERFATT = '" << hfatt << "' AND P7_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF0800F SET P8_GESTIONE = 'E', P8_KEYPRGINVIO = 'DELETED' WHERE P8_KEYHEADERFATT = '" << hfatt << "' AND P8_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF1000F SET P0_GESTIONE = 'E', P0_KEYPRGINVIO = 'DELETED' WHERE P0_KEYHEADERFATT = '" << hfatt << "' AND P0_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF1100F SET PA_GESTIONE = 'E', PA_KEYPRGINVIO = 'DELETED' WHERE PA_KEYHEADERFATT = '" << hfatt << "' AND PA_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF1200F SET PB_GESTIONE = 'E', PB_KEYPRGINVIO = 'DELETED' WHERE PB_KEYHEADERFATT = '" << hfatt << "' AND PB_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF1600F SET PF_GESTIONE = 'E', PF_KEYPRGINVIO = 'DELETED' WHERE PF_KEYHEADERFATT = '" << hfatt << "' AND PF_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF1700F SET PG_GESTIONE = 'E', PG_KEYPRGINVIO = 'DELETED' WHERE PG_KEYHEADERFATT = '" << hfatt << "' AND PG_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF1800F SET PI_GESTIONE = 'E', PI_KEYPRGINVIO = 'DELETED' WHERE PI_KEYHEADERFATT = '" << hfatt << "' AND PI_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF1900F SET PY_GESTIONE = 'E', PY_KEYPRGINVIO = 'DELETED' WHERE PY_KEYHEADERFATT = '" << hfatt << "' AND PY_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF2000F SET PJ_GESTIONE = 'E', PJ_KEYPRGINVIO = 'DELETED' WHERE PJ_KEYHEADERFATT = '" << hfatt << "' AND PJ_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF2100F SET PK_GESTIONE = 'E', PK_KEYPRGINVIO = 'DELETED' WHERE PK_KEYHEADERFATT = '" << hfatt << "' AND PK_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF2200F SET PL_GESTIONE = 'E', PL_KEYPRGINVIO = 'DELETED' WHERE PL_KEYHEADERFATT = '" << hfatt << "' AND PL_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF2400F SET PN_GESTIONE = 'E', PN_KEYPRGINVIO = 'DELETED' WHERE PN_KEYHEADERFATT = '" << hfatt << "' AND PN_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF2500F SET PO_GESTIONE = 'E', PO_KEYPRGINVIO = 'DELETED' WHERE PO_KEYHEADERFATT = '" << hfatt << "' AND PO_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF2600F SET PP_GESTIONE = 'E', PP_KEYPRGINVIO = 'DELETED' WHERE PP_KEYHEADERFATT = '" << hfatt << "' AND PP_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF2700F SET PQ_GESTIONE = 'E', PQ_KEYPRGINVIO = 'DELETED' WHERE PQ_KEYHEADERFATT = '" << hfatt << "' AND PQ_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF3000F SET PT_GESTIONE = 'E', PT_KEYPRGINVIO = 'DELETED' WHERE PT_KEYHEADERFATT = '" << hfatt << "' AND PT_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF3200F SET PU_GESTIONE = 'E', PU_KEYPRGINVIO = 'DELETED' WHERE PU_KEYHEADERFATT = '" << hfatt << "' AND PU_KEYBODYFATT = '" << bfatt << "';\n" << // PAFW3 non ha il flag di gestione "UPDATE PAFW300F SET PW_KEYPRGINVIO = 'DELETED' WHERE PW_KEYHEADERFATT = '" << hfatt << "' AND PW_KEYBODYFATT = '" << bfatt << "';\n"; if (!fp_db().sq_set_exec(query)) { TString err = "Impossibile salvare la regolarizzazione "; err << nreg << "\nVerrà saltata."; error_box(err); } } else { TString err = "Impossibile trovare la fattura "; err << nreg << "\nVerrà saltata."; error_box(err); } } } fp_db().sq_commit(); force_reload_sheet(); } TPAR_mask::TPAR_mask() : TAutomask("fp0700a"), _filter_changed(true), _enable_chiave_fixer(false) { disable(DLG_OK); disable(DLG_SAVEREC); disable(DLG_FINDREC); load_all_fields(); const TDate data_inizio = get_date_start_new_fatt(); __mask = this; } ///////////////////////////////////////////////////////////////////////////////////// // TReg2Paf ///////////////////////////////////////////////////////////////////////////////////// class Treg2Paf : public TSkeleton_application { public: virtual bool create(); virtual bool destroy(); virtual void main_loop(); Treg2Paf() {} }; void Treg2Paf::main_loop() { while (TPAR_mask().run() == K_ENTER) {} } bool Treg2Paf::create() { open_files(LF_TAB, LF_TABCOM, LF_TABMOD, LF_ANAG, LF_CLIFO, LF_CFVEN, LF_CFBAN, LF_NDITTE, LF_DOC, LF_RIGHEDOC, LF_CODCORR, LF_ANAMAG, 0); const TRectype cfven(LF_CFVEN); if (cfven.length(CFV_PADESTIN) != 7) // Nuova lunghezza per privati return error_box(TR("Database non convertito per fatturazione F.P.")); return check_tables() && TSkeleton_application::create(); } bool Treg2Paf::destroy() { fp_db().sq_disconnect(); return TSkeleton_application::destroy(); } int fp0700(int argc, char* argv[]) { Treg2Paf d2p; d2p.run(argc, argv, TR("Invio Regolarizzazioni")); return 0; }