diff --git a/src/f1/f1lib.cpp b/src/f1/f1lib.cpp index bf389f7c6..e90638232 100644 --- a/src/f1/f1lib.cpp +++ b/src/f1/f1lib.cpp @@ -45,7 +45,7 @@ bool TFppro::guess_the_doc(const TLocalisamfile& mov) const real tot = mov.get_real(MOV_TOTDOC) + mov.get_real(MOV_RITFIS) + mov.get_real(MOV_RITSOC); TString numdoc = mov.get(MOV_NUMDOCEXT); - if (numdoc.empty()) + if (numdoc.blank()) numdoc = mov.get(MOV_NUMDOC); // Controllo datadoc - numdoc - totdoc - p.iva @@ -58,11 +58,11 @@ bool TFppro::guess_the_doc(const TLocalisamfile& mov) "WHERE P7_DATA = '" << mov.get_date(MOV_DATADOC).date2ansi() << "' AND \n" << "(P7_NUMERO = '" << numdoc << "' OR P7_NUMERO LIKE '%" << numdoc << "%') \n"; if (statopiva.full()) - query << "' AND \n" << "P2_FISCIVAPAESE = '" << statopiva; - query << "' AND \n" << "P2_FISCIVACOD = '" << forn.get(CLI_PAIV); + query << " AND \n" << "P2_FISCIVAPAESE = '" << statopiva << "'"; + query << " AND \n" << "P2_FISCIVACOD = '" << forn.get(CLI_PAIV) << "'"; if (forn.gruppo_IVA()) - query << "' AND \n" "P2_COCAZZO = '" << forn.get(CLI_COFI); // cazzo; - query << "PQ_IMPTOTDOC = " << tot; + query << " AND \n" "P2_COCAZZO = '" << forn.get(CLI_COFI) << "'"; // cazzo; + query << " AND \n" "PQ_IMPTOTDOC = " << tot; if (_db->sq_set_exec(query) && _db->sq_items() == 1) { @@ -119,6 +119,17 @@ TDate TFppro::get_datareg() return _db->sq_get_date("PZ_DATAREGCONT"); } +TDate TFppro::get_datadoc() +{ + if (!_is_set) + { + if (set_query()) + return _db->sq_get_date("PZ_DATA"); + return TDate(); + } + return _db->sq_get_date("PZ_DATA"); +} + TDate TFppro::get_datareg(TToken_string& keys) { set_keys(keys); @@ -188,7 +199,7 @@ bool TFppro::associa_mov(const long numreg) if (ok) // Scrivo sul movimento il riferimento al fppro { mov.put(MOV_IDDOCSDI, fppro_db().get_numdoc()); - mov.put(MOV_DATADOCSDI, fppro_db().get_numdoc()); + mov.put(MOV_DATADOCSDI, fppro_db().get_datadoc()); mov.put(MOV_KEYFPPRO, get_keys_fppro()); ok = mov.rewrite() == NOERR; } diff --git a/src/f1/f1lib.h b/src/f1/f1lib.h index 4b6940458..99a66a914 100644 --- a/src/f1/f1lib.h +++ b/src/f1/f1lib.h @@ -59,6 +59,7 @@ public: long get_numreg(TToken_string& keys); long get_codforn(); TDate get_datareg(); + TDate get_datadoc(); TDate get_datareg(TToken_string& keys); real get_ritenute(); TDate get_data_first_doc() const; diff --git a/src/f9/f90100.cpp b/src/f9/f90100.cpp index e9a53fa4d..32c3829e6 100644 --- a/src/f9/f90100.cpp +++ b/src/f9/f90100.cpp @@ -73,13 +73,16 @@ int TEstrai_mask::estrai() for (bool ok = mov.move_first(); progr->add_status() && ok; ok = mov.move_next()) { TToken_string elab_f9(mov.get_string(MOV_ELABF9), ';'); // Stringa del campo elaborazione f9 nel file mov - const bool escluso = !(elab_f9.items() == 3 && elab_f9.get_bool(2) || elab_f9.empty()); + const 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); + if (escluso) + int here = 0; + if (numdoc.empty()) numdoc = mov.get_string(MOV_NUMDOC); // Se definitivo controllo il flag di stampato REGST @@ -222,10 +225,13 @@ TEstrai_mask::TEstrai_mask() : TMask("Estrazione", 1, 60, 16), _estrazione(nullp // TMonitor_mask //////////////////////////////////////////////////////// -bool TMonitor_mask::save_conf_handler(TMask_field& f, KEY key) +bool TMonitor_mask::save_conf(TMask& config_mask) { - TMask& config_mask = f.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)); @@ -235,6 +241,20 @@ bool TMonitor_mask::save_conf_handler(TMask_field& f, KEY key) config_mask.close(); f9_app().edit_wa(old_codsoc); + 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; } @@ -368,6 +388,42 @@ void TMonitor_mask::fill() const } +bool TConfig_f9_mask::on_key(const KEY key) +{ + if (key == K_SHIFT + K_F12) + { + if (run_fp_psw_mask()) + { + enable(CF_LVLNEW); + } + } + return true; +} + +bool TConfig_f9_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; +} + bool TMonitor_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) @@ -452,7 +508,14 @@ void TMonitor_mask::open_win_estr() void TMonitor_mask::open_win_conf() { - TMask m("Configurazione Archiviazione Sostitutiva", 1, 70, 20); + TConfig_f9_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); @@ -465,14 +528,22 @@ void TMonitor_mask::open_win_conf() 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.set_handler(DLG_OK, save_conf_handler); + 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.run(); + m.set(CF_LVLOLD, version); + + + m.disable(CF_LVLOLD); + if(m.run()==K_ENTER) + save_conf(m); + } void TMonitor_mask::sel() const @@ -558,6 +629,7 @@ void TControllo_mask::conferma_esclusi() const 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 { @@ -571,6 +643,7 @@ void TControllo_mask::conferma_esclusi() const 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(); } } } @@ -628,10 +701,7 @@ void TControllo_mask::fill_fppro_sheet() const 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" << - "CASE\n" << - "WHEN PZ_CLIFOR <> '' THEN CAST(PZ_CLIFOR AS NUMERIC(10, 0))\n" << - "WHEN PZ_CLIFOR = '' THEN 0\n" << - "END AS FORNITORE, " << + "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" << @@ -1017,6 +1087,7 @@ void TApri_estr_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); @@ -1026,18 +1097,21 @@ void TApri_estr_msk::fill_res() const 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_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 + 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)); @@ -1462,6 +1536,9 @@ bool TF9_app::check_tab_version() const int version = exists ? real(tabmod.get(TABMOD_TABVER)).integer() : TAB_BASE_VERSION - 2; if (version < SQL_VERSION) // Controllo la versione { + if(versioncaus_sost(), 6); // + { + int anno = mov.get_int(MOV_DANNO); + + if (anno > 0) + { + const char provv = mov.get(MOV_DPROVV)[0]; + const TString& codnum = mov.get(MOV_DCODNUM); + const long ndoc = mov.get_long(MOV_DNDOC); + + TDocumento doc(provv, anno, codnum, ndoc); + iva_query.add(IVA_CAUSSOS, tipo_doc_sdi(doc) , 6); + } + else + iva_query.add(IVA_CAUSSOS, mov_i.catdoc(categorie_doc())->caus_sost(), 6); + } + // else { TToken_string key(mov.get((MOV_KEYFPPRO)), ';'); diff --git a/src/f9/sql/f90104.sql b/src/f9/sql/f90104.sql index 44914ea83..88145bb07 100644 --- a/src/f9/sql/f90104.sql +++ b/src/f9/sql/f90104.sql @@ -1,17 +1,26 @@ IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'F9DRT00K' and COLUMN_NAME = 'F9TFCEE') ALTER TABLE F9DRT00K ADD F9TFCEE CHAR(6) NOT NULL DEFAULT ''; -CREATE TABLE F9MOVESTR( - IDSOC CHAR(10) NOT NULL, - IDESTR CHAR(18) NOT NULL, - NUMREG NUMERIC(7,0) NOT NULL, - DATAREG DATE, - ESTRATTO BIT DEFAULT '0' NOT NULL, - DESCR_ERR VARCHAR(1024) -); -ALTER TABLE F9MOVESTR ADD CONSTRAINT F9MOVESTR_PK PRIMARY KEY(IDSOC, IDESTR, NUMREG); +IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'F9MOVESTR') + CREATE TABLE F9MOVESTR( + IDSOC CHAR(10) NOT NULL, + IDESTR CHAR(18) NOT NULL, + NUMREG NUMERIC(7,0) NOT NULL, + DATAREG DATE, + ESTRATTO BIT DEFAULT '0' NOT NULL, + DESCR_ERR VARCHAR(1024) + ) +ELSE + SELECT 1 AS EXIST; + + +IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE TABLE_NAME = 'F9MOVESTR' AND CONSTRAINT_NAME = 'F9MOVESTR_PK' ) + ALTER TABLE F9MOVESTR ADD CONSTRAINT F9MOVESTR_PK PRIMARY KEY(IDSOC, IDESTR, NUMREG); + +IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'F9ERROR' AND COLUMN_NAME = 'IDSOC') + ALTER TABLE F9ERROR ADD IDSOC CHAR(10) NOT NULL DEFAULT ''; + -ALTER TABLE F9ERROR ADD IDSOC CHAR(10) NOT NULL DEFAULT ''; DECLARE @name nvarchar(128), @sql NVARCHAR(MAX) SELECT @name = name FROM sys.key_constraints diff --git a/src/fp/fplib01.cpp b/src/fp/fplib01.cpp index 4129b551a..79c1fe45b 100644 --- a/src/fp/fplib01.cpp +++ b/src/fp/fplib01.cpp @@ -24,6 +24,7 @@ #include #include "../cg/cgsaldac.h" #include +#include bool set_connection(SSimple_query& s) { @@ -64,7 +65,7 @@ bool run_fp_psw_mask() m.field(101).check_type(CHECK_REQUIRED); while (m.run() == K_ENTER) { - if (m.get(101) == "sirioFATT99") // Hardcoded password are the best! + if (m.get(101) == "sirioFATT99"||(is_power_station())) // Hardcoded password are the best! return true; else return error_box("Password errata"); diff --git a/src/include/automask.h b/src/include/automask.h index 9d0f01966..5f52634e2 100755 --- a/src/include/automask.h +++ b/src/include/automask.h @@ -30,10 +30,10 @@ private: static bool universal_notifier(TSheet_field& f, int row, KEY k); protected: - void set_handlers(); TField_event key2event(TMask_field& f, KEY key) const; public: + void set_handlers(); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly) pure; bool error_box(const char* fmt, ...); // No more f.error_box void set_universal_handler(const short id) { set_handler(id, universal_handler);} diff --git a/src/include/mask.cpp b/src/include/mask.cpp index 649561696..116e6deec 100755 --- a/src/include/mask.cpp +++ b/src/include/mask.cpp @@ -1675,6 +1675,8 @@ void TMask::set( // @syntax set(short fld_id, long n, bool hit); { TMask_field& f = field(fld_id); + if (fld_id == 214) + int i = 0; f.set(s); if ((f.active() || f.ghost())) @@ -2980,12 +2982,18 @@ void set_iban_fields(const char * iban, TMask & mask, const bool italy = iso.blank() || (iso == "IT"); enable_iban_fields(mask, fldbban, fldbcin, fldabi, fldcab, fldcc, flddes, italy, pres); - mask.set(fldiso, iso); - mask.set(fldcin, cin); + if (iso.full() || mask.get(fldiso).blank()) + mask.set(fldiso, iso); + if (cin.full() || mask.get(fldcin).blank()) + mask.set(fldcin, cin); if (fldbban > 0) mask.set(fldbban, italy ? wiban.mid(4) : cc); - mask.set(fldbcin, bcin); - mask.set(fldabi, abi); - mask.set(fldcab, cab); - mask.set(fldcc, italy ? cc : EMPTY_STRING); + if(bcin.full() || mask.get(fldbban).blank()) + mask.set(fldbcin, bcin); + if(abi.full() || mask.get(fldabi).blank()) + mask.set(fldabi, abi); + if(cab.full() || mask.get(fldcab).blank()) + mask.set(fldcab, cab); + if (cc.full() || mask.get(fldcc).blank()) + mask.set(fldcc, italy ? cc : EMPTY_STRING); }