Patch level : 12.0 844

Files correlati     : fp0.exe, fp0400a.msk
Commento            :
- Corretto calcolo ritenute fiscali se piu di una
- Aggiunta colonna ritenute fiscali nel monitor passive
This commit is contained in:
Simone Palacino 2019-06-26 10:52:08 +02:00
parent f25fbff4d2
commit 8266f805c9
5 changed files with 130 additions and 74 deletions

View File

@ -5,10 +5,10 @@
#include "cg2102.h" #include "cg2102.h"
#include "execp.h" #include "execp.h"
#include "cfven.h" #include "cfven.h"
#include "../fp/fp0400a.h"
#include "reputils.h" #include "reputils.h"
#include "../fp/fplib.h"
#include "causali.h" #include "causali.h"
#include "clifo.h"
#include "../fp/fplib.h"
////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////
// TFppro // TFppro
@ -18,9 +18,7 @@ TFppro& fppro_db()
{ {
static TFppro* fppro = nullptr; static TFppro* fppro = nullptr;
if (fppro == nullptr) if (fppro == nullptr)
{
fppro = new TFppro(); fppro = new TFppro();
}
return *fppro; return *fppro;
} }
@ -37,14 +35,14 @@ bool TFppro::guess_the_doc(const TLocalisamfile& mov)
"\tP7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" << "\tP7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, 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 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 PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n";
fp_db().sq_set_exec(query); _db->sq_set_exec(query);
const keys_s keys = { fp_db().sq_get("KEYPRGINVIO"), fp_db().sq_get("KEYHEADERFATT"), fp_db().sq_get("KEYBODYFATT") }; const keys_s keys = { _db->sq_get("KEYPRGINVIO"), _db->sq_get("KEYHEADERFATT"), _db->sq_get("KEYBODYFATT") };
const TDate data = fp_db().sq_get_date("DATA"); const TDate data = _db->sq_get_date("DATA");
const TString numdoc = fp_db().sq_get("NUMDOC"); const TString numdoc = _db->sq_get("NUMDOC");
const real imptotdoc(fp_db().sq_get("IMPTOTDOC")); const real imptotdoc(_db->sq_get("IMPTOTDOC"));
const TString4 statopiva = fp_db().sq_get("STATOPIVA"); const TString4 statopiva = _db->sq_get("STATOPIVA");
const TString piva = fp_db().sq_get("PIVA"); const TString piva = _db->sq_get("PIVA");
// Prendo il fornitore del mov per controllare la p.iva // Prendo il fornitore del mov per controllare la p.iva
TLocalisamfile clifo(LF_CLIFO); TLocalisamfile clifo(LF_CLIFO);
@ -78,10 +76,10 @@ int TFppro::get_numreg()
if (!_is_set) if (!_is_set)
{ {
if (set_query()) if (set_query())
return fp_db().sq_get_int("PZ_NUMREGCONT"); return _db->sq_get_int("PZ_NUMREGCONT");
return -1; return -1;
} }
return fp_db().sq_get_int("PZ_NUMREGCONT"); return _db->sq_get_int("PZ_NUMREGCONT");
} }
int TFppro::get_numreg(TToken_string& keys) int TFppro::get_numreg(TToken_string& keys)
@ -95,31 +93,33 @@ TDate TFppro::get_datareg()
if (!_is_set) if (!_is_set)
{ {
if (set_query()) if (set_query())
return fp_db().sq_get_date("PZ_DATAREGCONT"); return _db->sq_get_date("PZ_DATAREGCONT");
return TDate(); return TDate();
} }
return fp_db().sq_get_date("PZ_DATAREGCONT"); return _db->sq_get_date("PZ_DATAREGCONT");
} }
TDate TFppro::get_datareg(TToken_string& keys) TDate TFppro::get_datareg(TToken_string& keys)
{ {
if (set_keys(keys)) set_keys(keys);
if (_is_set)
return get_datareg(); return get_datareg();
return TDate(); return TDate();
} }
real TFppro::get_ritenute() const real TFppro::get_ritenute() const
{ {
real imp = ZERO;
TString query; TString query;
query << "SELECT P7_IMPORTORIT AS IMPORTO FROM PAA0700F\n" << query << "SELECT P7_IMPORTORIT AS IMPORTO FROM PAA0700F\n" <<
"WHERE P7_KEYPRGINVIO = '" << _keys.prginvio << "' AND P7_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P7_KEYBODYFATT = '" << _keys.bodyfatt << "'"; "WHERE P7_KEYPRGINVIO = '" << _keys.prginvio << "' AND P7_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P7_KEYBODYFATT = '" << _keys.bodyfatt << "'";
fp_db().sq_set_exec(query); _db->sq_set_exec(query, false);
if(fp_db().sq_items() >= 1) for(bool ok = _db->sq_next(); ok; ok = _db->sq_next())
return fp_db().sq_get_real("IMPORTO"); imp += _db->sq_get_real("IMPORTO");
return ZERO; return imp;
} }
bool TFppro::set_keys(TToken_string& keys) TFppro& TFppro::set_keys(TToken_string& keys)
{ {
if(keys.items() == 3) if(keys.items() == 3)
{ {
@ -127,30 +127,32 @@ bool TFppro::set_keys(TToken_string& keys)
_keys.headerfatt = keys.get(1); _keys.headerfatt = keys.get(1);
_keys.bodyfatt = keys.get(2); _keys.bodyfatt = keys.get(2);
_is_set = false; _is_set = false;
return _keys_setted = true; _keys_setted = true;
} }
return _keys_setted = false; _keys_setted = false;
return *this;
} }
bool TFppro::set_keys(keys_s keys) TFppro& TFppro::set_keys(keys_s keys)
{ {
if(*keys.prginvio != 0 && *keys.headerfatt != 0 && *keys.bodyfatt != 0) if(*keys.prginvio != 0 && *keys.headerfatt != 0 && *keys.bodyfatt != 0)
{ {
_keys = keys; _keys = keys;
_is_set = false; _is_set = false;
return _keys_setted = true; _keys_setted = true;
} }
_is_set = false; _is_set = false;
return _keys_setted = false; _keys_setted = false;
return *this;
} }
TDate TFppro::get_data_first_doc() TDate TFppro::get_data_first_doc() const
{ {
TString query; TString query;
query << "SELECT min(a.DATA) AS DATA \nFROM( \n\tSELECT P7_DATA as DATA \n" << query << "SELECT min(a.DATA) AS DATA \nFROM( \n\tSELECT P7_DATA as DATA \n" <<
"\tFROM PAA0700F \n\tUNION \n\tSELECT P7_DATA as DATA \n\tFROM PAF0700F \n) a"; "\tFROM PAA0700F \n\tUNION \n\tSELECT P7_DATA as DATA \n\tFROM PAF0700F \n) a";
fp_db().sq_set_exec(query); _db->sq_set_exec(query);
return fp_db().sq_get_date("DATA"); return _db->sq_get_date("DATA");
} }
bool TFppro::set_query() bool TFppro::set_query()
@ -158,7 +160,7 @@ bool TFppro::set_query()
if (_keys_setted) if (_keys_setted)
{ {
_fppro_query.cut(0) << "SELECT * FROM FPPRO00F " << where_str(); _fppro_query.cut(0) << "SELECT * FROM FPPRO00F " << where_str();
return _is_set = fp_db().sq_set_exec(_fppro_query); return _is_set = _db->sq_set_exec(_fppro_query);
} }
return _is_set = false; return _is_set = false;
} }
@ -170,6 +172,14 @@ const char* TFppro::where_str() const
return str; return str;
} }
TFppro::TFppro() : _keys({ "\0", "\0", "\0" }), _guess(false), _keys_setted(false), _is_set(false)
{
_db = new SSimple_query();
const bool ok = set_connection(*_db);
// Non utilizzo l'autocommit, viene gestito manualmente
if (ok) _db->sq_set_autocommit(false);
}
////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////
// TProtocollo // TProtocollo
////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////
@ -367,3 +377,37 @@ bool TF1_log::show_log()
} }
return true; return true;
} }
bool TFppro::set_connection(SSimple_query& s)
{
bool ok = true;
#ifdef DBG
TString ip = fp_settings().get_db_indirizzo();
if (ip.upper() != "TESTCAMPO2012")
{
if (s.sq_connect("TESTCAMPO2012@campo_fp",
"fp",
"fp",
TSDB_MSSQL) != NOERR)
{
warning_box("Impossibile connettersi al DB esterno");
ok = false;
}
}
else
{
#endif
if (s.sq_connect(
fp_settings().get_db_str_con(),
fp_settings().get_db_user(),
fp_settings().get_db_password(),
TSDB_MSSQL) != NOERR)
{
warning_box("Impossibile connettersi al DB esterno");
ok = false;
}
#ifdef DBG
}
#endif
return ok;
}

View File

@ -2,9 +2,8 @@
#define _F1LIBH_ #define _F1LIBH_
#include "strings.h" #include "strings.h"
#include "config.h"
#include "report.h"
#include "reputils.h" #include "reputils.h"
#include "tsdb.h"
#define FILE_CONFIG CONFIG_DITTA #define FILE_CONFIG CONFIG_DITTA
#define FILE_SECTION "f1" #define FILE_SECTION "f1"
@ -34,6 +33,7 @@ class TFppro : public TObject
const char* bodyfatt; const char* bodyfatt;
}; };
private: private:
SSimple_query* _db;
keys_s _keys; keys_s _keys;
bool _guess; bool _guess;
bool _keys_setted; bool _keys_setted;
@ -46,20 +46,23 @@ public:
bool check_reg(TToken_string& keys, int numreg); bool check_reg(TToken_string& keys, int numreg);
// Se un mov. registrato non e' collegato all'FPPRO cerco di capire qual'e` // Se un mov. registrato non e' collegato all'FPPRO cerco di capire qual'e`
bool guess_the_doc(const TLocalisamfile& mov); bool guess_the_doc(const TLocalisamfile& mov);
// Getters
void get_keys_fppro(); void get_keys_fppro();
int get_numreg(); int get_numreg();
int get_numreg(TToken_string& keys); int get_numreg(TToken_string& keys);
TDate get_datareg(); TDate get_datareg();
TDate get_datareg(TToken_string& keys); TDate get_datareg(TToken_string& keys);
real get_ritenute() const; real get_ritenute() const;
TDate get_data_first_doc() const;
// Setters
bool set_query(); bool set_query();
bool set_keys(TToken_string& keys); TFppro& set_keys(TToken_string& keys);
bool set_keys(keys_s keys); TFppro& set_keys(keys_s keys);
static TDate get_data_first_doc(); static bool set_connection(SSimple_query& s);
TFppro() : _keys({"\0", "\0", "\0" }), _guess(false), _keys_setted(false), _is_set(false) { } TFppro();
TFppro::TFppro(TToken_string& keys) : TFppro() { set_keys(keys); } TFppro(TToken_string& keys) : TFppro() { set_keys(keys); }
}; };
class TProtocollo : TObject class TProtocollo : TObject

View File

@ -247,6 +247,8 @@ void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TShee
const TDate& dataregcont = fp_db().sq_get_date("DATAREGCONT"); const TDate& dataregcont = fp_db().sq_get_date("DATAREGCONT");
const TString& filter_elab = get_fattsel(); const TString& filter_elab = get_fattsel();
const bool is_contab = dataregcont != TDate("20010101"); const bool is_contab = dataregcont != TDate("20010101");
TToken_string keys("", ';');
keys.add(fp_db().sq_get("KEYPROG")); keys.add(fp_db().sq_get("KEYHEAD")); keys.add(fp_db().sq_get("KEYFATT"));
clifo.zero(); clifo.zero();
clifo.put(CLI_TIPOCF, 'F'); clifo.put(CLI_TIPOCF, 'F');
@ -271,6 +273,7 @@ void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TShee
row.add(fp_db().sq_get_date("DATA_RIC")); row.add(fp_db().sq_get_date("DATA_RIC"));
row.add(fp_db().sq_get_date("DATA_DOC")); row.add(fp_db().sq_get_date("DATA_DOC"));
row.add(fp_db().sq_get("TOT_DOC")); row.add(fp_db().sq_get("TOT_DOC"));
row.add(fppro_db().set_keys(keys).get_ritenute());
// Decido se mettere o meno il flag // Decido se mettere o meno il flag
if (forn_code == 0) if (forn_code == 0)
@ -301,12 +304,10 @@ void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TShee
row.add(paa_codpaese, sf.cid2index(S_STATOPAIV)); row.add(paa_codpaese, sf.cid2index(S_STATOPAIV));
row.add(paa_piva); row.add(paa_piva);
row.add(paa_codfisc); row.add(paa_codfisc);
row.add(fp_db().sq_get("ATTACHMENT") != "0" ? "" : "X"); row.add(fp_db().sq_get("ATTACHMENT") != "0" ? "" : "X");
row.add(denom); row.add(denom);
row.add(TProtocollo(fp_db().sq_get_int("ANNO_PROT"), fp_db().sq_get("TIPO_PROT"), fp_db().sq_get("NUM_PROT"))); row.add(TProtocollo(fp_db().sq_get_int("ANNO_PROT"), fp_db().sq_get("TIPO_PROT"), fp_db().sq_get("NUM_PROT")));
TString key_prot; key_prot << fp_db().sq_get("KEYPROG") << ";" << fp_db().sq_get("KEYHEAD") << ";" << fp_db().sq_get("KEYFATT"); row.add(keys);
row.add(key_prot);
} }
} }
@ -599,7 +600,7 @@ int TPassive_mask::prepara_contab() const
real imp = calcola_importo(riva); real imp = calcola_importo(riva);
totdoc.cut(0) << imp; totdoc.cut(0) << imp;
} }
real rit = TFppro(keys).get_ritenute(); real rit = fppro_db().set_keys(keys).get_ritenute();
if(rit != ZERO) if(rit != ZERO)
{ {
contab_ini.set("TOTDOC", (abs(real(totdoc)) - rit).string()); contab_ini.set("TOTDOC", (abs(real(totdoc)) - rit).string());

View File

@ -30,18 +30,19 @@
#define S_DATARIC 105 #define S_DATARIC 105
#define S_DATADOC 106 #define S_DATADOC 106
#define S_TOTDOC 107 #define S_TOTDOC 107
#define S_FPPRO 108 #define S_TOTRIT 108
#define S_NUMREGCONT 109 #define S_FPPRO 109
#define S_DATAREGCONT 110 #define S_NUMREGCONT 110
#define S_FORNITORE 111 #define S_DATAREGCONT 111
#define S_RAGSOC 112 #define S_FORNITORE 112
#define S_STATOPAIV 113 #define S_RAGSOC 113
#define S_PARIVA 114 #define S_STATOPAIV 114
#define S_CODFISC 115 #define S_PARIVA 115
#define S_ATTACH 116 #define S_CODFISC 116
#define S_RAGXML 117 #define S_ATTACH 117
#define S_NPROT 118 #define S_RAGXML 118
#define S_PROKEY 119 #define S_NPROT 119
#define S_PROKEY 120
#define F_ERR 301 #define F_ERR 301

View File

@ -184,23 +184,24 @@ BEGIN
PROMPT 0 4 "" PROMPT 0 4 ""
ITEM "" ITEM ""
ITEM "Anno" ITEM "Anno"
ITEM "Tipo Doc.\nSDI@6" ITEM "Tipo Doc.\nSDI@5"
ITEM "Numero\nDocumento@18" ITEM "Numero\nDocumento@14"
ITEM "Data\nRicezione@8" ITEM "Data\nRicezione@8"
ITEM "Data\nDoc.@8" ITEM "Data\nDoc.@8"
ITEM "Totale\nDocumento@12" ITEM "Totale\nDocumento@7"
ITEM "Fornitore\nassociato@7" ITEM "Totale\nritenute@6"
ITEM "Num. Registrazione\ncontabile@12" ITEM "Fornitore\nassociato@6"
ITEM "Data Registrazione\ncontabile@12" ITEM "Num. Regis.\ncontabile@8"
ITEM "Fornitore@7" ITEM "Data Regis.\ncontabile@8"
ITEM "Ragione Sociale@50" ITEM "Fornitore@5"
ITEM "Ragione Sociale@40"
ITEM "Stato\nP.IVA@4" ITEM "Stato\nP.IVA@4"
ITEM "Partita IVA@10" ITEM "Partita IVA@10"
ITEM "Cod. Fiscale@16" ITEM "Cod. Fiscale@12"
ITEM "Allegati@7" ITEM "Allegati@6"
ITEM "Ragione Sociale (XML)@50" ITEM "Ragione Sociale (XML)@40"
ITEM "Numero Protocollo (in entrata)\n[anno-tipo prot/progressivo]@22" ITEM "Numero Protocollo (in entrata)\n[anno-tipo prot/progressivo]@20"
ITEM "Chiave Prot.@80" ITEM "Chiave Prot.@40"
END END
ENDPAGE ENDPAGE
@ -311,6 +312,12 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
NUMBER S_TOTRIT 10 2
BEGIN
PROMPT 1 2 "Totale Ritenute"
FLAGS "D"
END
BOOLEAN S_FPPRO BOOLEAN S_FPPRO
BEGIN BEGIN
PROMPT 15 2 "Salvato in FP-PRO" PROMPT 15 2 "Salvato in FP-PRO"