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 "execp.h"
#include "cfven.h"
#include "../fp/fp0400a.h"
#include "reputils.h"
#include "../fp/fplib.h"
#include "causali.h"
#include "clifo.h"
#include "../fp/fplib.h"
//////////////////////////////////////////////////////////
// TFppro
@ -18,9 +18,7 @@ TFppro& fppro_db()
{
static TFppro* fppro = nullptr;
if (fppro == nullptr)
{
fppro = new TFppro();
}
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" <<
"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";
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 TDate data = fp_db().sq_get_date("DATA");
const TString numdoc = fp_db().sq_get("NUMDOC");
const real imptotdoc(fp_db().sq_get("IMPTOTDOC"));
const TString4 statopiva = fp_db().sq_get("STATOPIVA");
const TString piva = fp_db().sq_get("PIVA");
const keys_s keys = { _db->sq_get("KEYPRGINVIO"), _db->sq_get("KEYHEADERFATT"), _db->sq_get("KEYBODYFATT") };
const TDate data = _db->sq_get_date("DATA");
const TString numdoc = _db->sq_get("NUMDOC");
const real imptotdoc(_db->sq_get("IMPTOTDOC"));
const TString4 statopiva = _db->sq_get("STATOPIVA");
const TString piva = _db->sq_get("PIVA");
// Prendo il fornitore del mov per controllare la p.iva
TLocalisamfile clifo(LF_CLIFO);
@ -78,10 +76,10 @@ int TFppro::get_numreg()
if (!_is_set)
{
if (set_query())
return fp_db().sq_get_int("PZ_NUMREGCONT");
return _db->sq_get_int("PZ_NUMREGCONT");
return -1;
}
return fp_db().sq_get_int("PZ_NUMREGCONT");
return _db->sq_get_int("PZ_NUMREGCONT");
}
int TFppro::get_numreg(TToken_string& keys)
@ -95,31 +93,33 @@ TDate TFppro::get_datareg()
if (!_is_set)
{
if (set_query())
return fp_db().sq_get_date("PZ_DATAREGCONT");
return _db->sq_get_date("PZ_DATAREGCONT");
return TDate();
}
return fp_db().sq_get_date("PZ_DATAREGCONT");
return _db->sq_get_date("PZ_DATAREGCONT");
}
TDate TFppro::get_datareg(TToken_string& keys)
{
if (set_keys(keys))
set_keys(keys);
if (_is_set)
return get_datareg();
return TDate();
}
real TFppro::get_ritenute() const
{
real imp = ZERO;
TString query;
query << "SELECT P7_IMPORTORIT AS IMPORTO FROM PAA0700F\n" <<
"WHERE P7_KEYPRGINVIO = '" << _keys.prginvio << "' AND P7_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P7_KEYBODYFATT = '" << _keys.bodyfatt << "'";
fp_db().sq_set_exec(query);
if(fp_db().sq_items() >= 1)
return fp_db().sq_get_real("IMPORTO");
return ZERO;
_db->sq_set_exec(query, false);
for(bool ok = _db->sq_next(); ok; ok = _db->sq_next())
imp += _db->sq_get_real("IMPORTO");
return imp;
}
bool TFppro::set_keys(TToken_string& keys)
TFppro& TFppro::set_keys(TToken_string& keys)
{
if(keys.items() == 3)
{
@ -127,30 +127,32 @@ bool TFppro::set_keys(TToken_string& keys)
_keys.headerfatt = keys.get(1);
_keys.bodyfatt = keys.get(2);
_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)
{
_keys = keys;
_is_set = false;
return _keys_setted = true;
_keys_setted = true;
}
_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;
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";
fp_db().sq_set_exec(query);
return fp_db().sq_get_date("DATA");
_db->sq_set_exec(query);
return _db->sq_get_date("DATA");
}
bool TFppro::set_query()
@ -158,7 +160,7 @@ bool TFppro::set_query()
if (_keys_setted)
{
_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;
}
@ -170,6 +172,14 @@ const char* TFppro::where_str() const
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
//////////////////////////////////////////////////////////
@ -366,4 +376,38 @@ bool TF1_log::show_log()
_log = NULL;
}
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_
#include "strings.h"
#include "config.h"
#include "report.h"
#include "reputils.h"
#include "tsdb.h"
#define FILE_CONFIG CONFIG_DITTA
#define FILE_SECTION "f1"
@ -34,6 +33,7 @@ class TFppro : public TObject
const char* bodyfatt;
};
private:
SSimple_query* _db;
keys_s _keys;
bool _guess;
bool _keys_setted;
@ -45,21 +45,24 @@ public:
bool check_reg(TToken_string& keys, int numreg);
// Se un mov. registrato non e' collegato all'FPPRO cerco di capire qual'e`
bool guess_the_doc(const TLocalisamfile& mov);
void get_keys_fppro();
int get_numreg();
int get_numreg(TToken_string& keys);
TDate get_datareg();
TDate get_datareg(TToken_string& keys);
real get_ritenute() const;
bool set_query();
bool set_keys(TToken_string& keys);
bool set_keys(keys_s keys);
bool guess_the_doc(const TLocalisamfile& mov);
// Getters
void get_keys_fppro();
int get_numreg();
int get_numreg(TToken_string& keys);
TDate get_datareg();
TDate get_datareg(TToken_string& keys);
real get_ritenute() const;
TDate get_data_first_doc() const;
// Setters
bool set_query();
TFppro& set_keys(TToken_string& 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(TToken_string& keys) : TFppro() { set_keys(keys); }
TFppro();
TFppro(TToken_string& keys) : TFppro() { set_keys(keys); }
};
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 TString& filter_elab = get_fattsel();
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.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_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
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_piva);
row.add(paa_codfisc);
row.add(fp_db().sq_get("ATTACHMENT") != "0" ? "" : "X");
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")));
TString key_prot; key_prot << fp_db().sq_get("KEYPROG") << ";" << fp_db().sq_get("KEYHEAD") << ";" << fp_db().sq_get("KEYFATT");
row.add(key_prot);
row.add(keys);
}
}
@ -599,7 +600,7 @@ int TPassive_mask::prepara_contab() const
real imp = calcola_importo(riva);
totdoc.cut(0) << imp;
}
real rit = TFppro(keys).get_ritenute();
real rit = fppro_db().set_keys(keys).get_ritenute();
if(rit != ZERO)
{
contab_ini.set("TOTDOC", (abs(real(totdoc)) - rit).string());

View File

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

View File

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