Patch level : 12.0

Files correlati     : f90100.cpp f90100d.uml f90104.sql

Commento:
Aggiornamenti sostanziali al programma di Archiviazione Passiva. Il funzionamento è rimasto lo stesso della versione precedente ma il giro interno del programma è stato rivisto e migliorato (si spera)
This commit is contained in:
smen 2022-10-04 17:00:02 +02:00
parent 0093ebf240
commit 5b160f7fe1
12 changed files with 219 additions and 64 deletions

View File

@ -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;
}

View File

@ -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;

View File

@ -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,12 +1097,15 @@ 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_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
@ -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(version<TAB_BASE_VERSION)
version = TAB_BASE_VERSION;
for (; version < SQL_VERSION; version += 2) // Effettuo le modifiche per ogni avanzamento di versione
{
if (ok &= aggiorna_tab_f9(version + 2))

View File

@ -74,7 +74,10 @@ class TMonitor_mask : public TAutomask
TApri_estr_msk _inclusi_mask;
// Configurazione mask
static bool save_conf_handler(TMask_field& f, KEY key);
bool save_conf(TMask& m);
// Forza Aggiornamento LVL Patch delle tabelle F9
static bool update_table_level(TMask_field& f, KEY key);
// Metodi per la maschera 'Apri Estr.'
@ -87,7 +90,7 @@ class TMonitor_mask : public TAutomask
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
static void open_win_estr();
static void open_win_conf();
void open_win_conf();
void sel() const;
public:
@ -98,6 +101,19 @@ public:
~TMonitor_mask() {}
};
class TConfig_f9_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)
TConfig_f9_mask(const char* filename, int num = 0) : TAutomask(filename, num) {};
// @cmember Costruttore (crea una maschera vuota con i parametri dati)
TConfig_f9_mask(const char* title, int pages, int cols, int rows, int xpos = -1, int ypos = -1) : TAutomask(title, pages, cols, rows, xpos, ypos) {};
};
class TControllo_mask : public TAutomask
{
TArray _controllo_mov; // Usare import_error_list().

View File

@ -52,6 +52,11 @@
#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

View File

@ -35,13 +35,14 @@
#define F_RNUMREG 102
#define F_RDATAREG 103
#define F_RDATADOC 104
#define F_RCODCAUS 105
#define F_RTIPOMOV 106
#define F_RMESELIQ 107
#define F_RNUMDOC 108
#define F_RIMPTOTDOC 109
#define F_RFORN 110
#define F_RRAGSOC 111
#define F_RPROTIVA 112
#define F_RDESCR 113
#define F_RDESCRERR 114
#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

View File

@ -138,8 +138,9 @@ BEGIN
ITEM "Numero\nReg.@8"
ITEM "Data\nReg.@8"
ITEM "Data\nDoc.@8"
ITEM "Tipo Doc\nSDI@9"
ITEM "Codice\nCaus.@8"
ITEM "Tipo Doc.@5"
ITEM "Tipo Mov.@5"
ITEM "Mese\nliquidazione@8"
ITEM "Numero\nDocumento@8"
ITEM "Totale\nDocumento@8"
@ -305,63 +306,69 @@ BEGIN
FLAGS "D"
END
STRING F_RCODCAUS 3
STRING F_RTIPODOCSDI 4
BEGIN
PROMPT 1 5 ""
FLAGS "D"
END
STRING F_RTIPOMOV 3
STRING F_RCODCAUS 3
BEGIN
PROMPT 1 6 ""
FLAGS "D"
END
NUMERIC F_RMESELIQ 2
STRING F_RTIPOMOV 3
BEGIN
PROMPT 1 7 ""
FLAGS "D"
END
STRING F_RNUMDOC 50
NUMERIC F_RMESELIQ 2
BEGIN
PROMPT 1 8 ""
FLAGS "D"
END
NUMERIC F_RIMPTOTDOC 15 2
STRING F_RNUMDOC 50
BEGIN
PROMPT 1 9 ""
FLAGS "D"
END
NUMERIC F_RFORN 6
NUMERIC F_RIMPTOTDOC 15 2
BEGIN
PROMPT 1 10 ""
FLAGS "D"
END
STRING F_RRAGSOC 80
NUMERIC F_RFORN 6
BEGIN
PROMPT 1 11 ""
FLAGS "D"
END
STRING F_RPROTIVA 10
STRING F_RRAGSOC 80
BEGIN
PROMPT 1 12 ""
FLAGS "D"
END
STRING F_RDESCR 50
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 13 ""
PROMPT 1 15 ""
FLAGS "D"
END

View File

@ -638,6 +638,8 @@ bool TEstrazione::insert_into_f9movestr() const
TProgress_monitor prog(_movs.size(), "Salvataggio informazioni estrazione", false);
//QUI ANDRA' CONTROLLATO IL PAFW300
FOR_EACH_ARRAY_ITEM(_movs, r, obj)
{
if(prog.add_status())
@ -798,6 +800,7 @@ const char* TEstrazione::diagnostica_mov()
TMovimento_estr & mov_i = (TMovimento_estr &)*obj;
// Se gia' escluso passo avanti
if (!mov_i.estratto() && mov_i.descr_estr() == mov_escluso)
continue;
@ -1115,6 +1118,7 @@ bool TEstrazione::estrazione_iva(bool escluso)
iva_query.add(IVA_DOCXML, mov_i.cartaceo() ? 'N' : 'S');
iva_query.add(IVA_TIPOCF, mov.get_char(MOV_TIPO));
iva_query.add(IVA_CODCF, mov.get_long(MOV_CODCF));
iva_query.add(IVA_NUMOR, mov.get_long(MOV_NUMREG));
iva_query.add(IVA_RAGSOC, cli.get(CLI_RAGSOC), 60);
iva_query.add(IVA_IDFISC, idfisc, 30);
@ -1125,7 +1129,22 @@ bool TEstrazione::estrazione_iva(bool escluso)
const TRegistro& reg = cached_registro(mov.get(MOV_REG), mov.get_int(MOV_ANNOIVA));
if (reg.iva() == iva_vendite)
iva_query.add(IVA_CAUSSOS, mov_i.catdoc(categorie_doc())->caus_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)), ';');

View File

@ -1,6 +1,7 @@
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 '';
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,
@ -8,10 +9,18 @@ CREATE TABLE F9MOVESTR(
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 '';
DECLARE @name nvarchar(128), @sql NVARCHAR(MAX)
SELECT @name = name
FROM sys.key_constraints

View File

@ -24,6 +24,7 @@
#include <mov.h>
#include "../cg/cgsaldac.h"
#include <scadenze.h>
#include <utility.h>
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");

View File

@ -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);}

View File

@ -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);
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);
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);
}