Patch level : 12.0 830
Files correlati : cg2.exe Commento : - [Prima nota] Filtro data documento passato in automatico se valorizzato - Esportazione da 'Fatture SDI' delle righe IVA e scadenze - Controllo Totale documento se zero sommo da righe IVA
This commit is contained in:
parent
6c85a4d22f
commit
1868cc986d
@ -3847,6 +3847,86 @@ bool TPrimanota_application::quadratura_handler(TMask_field& f, KEY key)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TPrimanota_application::set_righe_iva_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
||||||
|
{
|
||||||
|
TSheet_field& sf = cg_msk.sfield(F_SHEETIVA);
|
||||||
|
const vector<TPro_msk::riga_iva_s>& righe = msk->get_righeiva();
|
||||||
|
int i = 0;
|
||||||
|
for (auto it = righe.begin(); it != righe.end(); ++it)
|
||||||
|
{
|
||||||
|
if(it->imponibile != 0 || it->imposta != 0)
|
||||||
|
{
|
||||||
|
TToken_string& row = sf.row(i);
|
||||||
|
row.add(it->imponibile, cid2index(IVA_IMPONIBILE));
|
||||||
|
row.add(it->imposta, cid2index(IVA_IMPOSTA));
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TPrimanota_application::set_scadenze_f1(const TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
||||||
|
{
|
||||||
|
TSheet_field& sf = cg_msk.sfield(FS_RATESHEET);
|
||||||
|
const vector<TPro_msk::scadenza_s>& righe = msk->get_scadenze();
|
||||||
|
int i = 0;
|
||||||
|
for (auto it = righe.begin(); it != righe.end(); ++it, ++i)
|
||||||
|
{
|
||||||
|
TToken_string& row = sf.row(i);
|
||||||
|
row.add(it->data, cid2index(101));
|
||||||
|
row.add(it->importo, cid2index(102));
|
||||||
|
}
|
||||||
|
return !righe.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TPrimanota_application::set_clifo(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
||||||
|
{
|
||||||
|
TLocalisamfile clifo(LF_CLIFO);
|
||||||
|
clifo.setkey(5);
|
||||||
|
clifo.put(CLI_TIPOCF, "F");
|
||||||
|
clifo.put(CLI_PAIV, msk->get_piva());
|
||||||
|
clifo.read();
|
||||||
|
if (clifo.get(CLI_PAIV) == msk->get_piva())
|
||||||
|
{
|
||||||
|
cg_msk.set(F_CODCLIFOR, clifo.get(CLI_CODCF));
|
||||||
|
cg_msk.set(F_RAGSOCCF, clifo.get(CLI_RAGSOC));
|
||||||
|
cg_msk.set(F_STATOPAIV, clifo.get(CLI_STATOPAIV));
|
||||||
|
cg_msk.set(F_PIVA, clifo.get(CLI_PAIV));
|
||||||
|
cg_msk.set(F_COFI, clifo.get(CLI_COFI));
|
||||||
|
cg_msk.set(F_CODPAG, clifo.get(CLI_CODPAG));
|
||||||
|
TTable tab("%CPG"); tab.put("CODTAB", clifo.get(CLI_CODPAG));
|
||||||
|
tab.read();
|
||||||
|
cg_msk.set(F_DESPAG, tab.get("S0"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
||||||
|
{
|
||||||
|
real totale = msk->get_totdoc();
|
||||||
|
if(totale == 0)
|
||||||
|
{
|
||||||
|
const vector<TPro_msk::riga_iva_s>& righe = msk->get_righeiva();
|
||||||
|
for(auto it = righe.begin(); it != righe.end(); ++it)
|
||||||
|
{
|
||||||
|
totale += it->imponibile;
|
||||||
|
totale += it->imposta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cg_msk.set(F_TOTALE, abs(totale));
|
||||||
|
}
|
||||||
|
|
||||||
|
void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
||||||
|
{
|
||||||
|
cg_msk.set(F_NUMDOCEXT, msk->get_numdoc());
|
||||||
|
cg_msk.set(F_NUMDOC, msk->get_numdoc().right(7));
|
||||||
|
cg_msk.set(F_DATADOC, msk->get_datadoc());
|
||||||
|
if (!cg_msk.get(F_CODCLIFOR).full())
|
||||||
|
set_clifo(cg_msk, msk);
|
||||||
|
set_righe_iva_f1(cg_msk, msk);
|
||||||
|
set_totale(cg_msk, msk);
|
||||||
|
if (set_scadenze_f1(cg_msk, msk))
|
||||||
|
cg_msk.set(FS_RECALC, "");
|
||||||
|
}
|
||||||
|
|
||||||
bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
|
bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
|
||||||
{
|
{
|
||||||
TMask& cg_msk = f.mask();
|
TMask& cg_msk = f.mask();
|
||||||
@ -3854,22 +3934,22 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
|
|||||||
return true;
|
return true;
|
||||||
auto msk = std::make_shared<TPro_msk>(cg_msk);
|
auto msk = std::make_shared<TPro_msk>(cg_msk);
|
||||||
app()._pro_mask = msk;
|
app()._pro_mask = msk;
|
||||||
|
const TString datadoc = cg_msk.get(F_DATADOC);
|
||||||
|
if(datadoc.full())
|
||||||
|
{
|
||||||
|
msk->set(F_ENABDATE, "X");
|
||||||
|
msk->field(F_DATESEARCH).show();
|
||||||
|
msk->set(F_DATESEARCH, datadoc);
|
||||||
|
}
|
||||||
if (msk->load_fppro_mask(msk.get()))
|
if (msk->load_fppro_mask(msk.get()))
|
||||||
{
|
{
|
||||||
msk->run();
|
msk->run();
|
||||||
// Riporto dati FPPRO su maschera Prima Nota (solo se hai F1)
|
// Riporto dati FPPRO su maschera Prima Nota (solo se hai F1)
|
||||||
// Se non hai F1 collego senza riportarti i dati (solo le chiavi db)
|
// Se non hai F1 collego senza riportarti i dati (solo le chiavi db)
|
||||||
if(app().has_f1_db(&cg_msk))
|
if(app().has_f1_db(&cg_msk))
|
||||||
{
|
riporta_dati_f1(cg_msk, msk);
|
||||||
cg_msk.set(F_NUMDOCEXT, msk->get_numdoc());
|
|
||||||
cg_msk.set(F_NUMDOC, msk->get_numdoc().right(7));
|
|
||||||
cg_msk.set(F_DATADOC, msk->get_datadoc());
|
|
||||||
cg_msk.set(F_TOTALE, msk->get_totdoc());
|
|
||||||
}
|
|
||||||
cg_msk.set(F_PROKEY, msk->get_fpprokeys());
|
cg_msk.set(F_PROKEY, msk->get_fpprokeys());
|
||||||
is_collegato(cg_msk.field(F_COLFPPRO));
|
is_collegato(cg_msk.field(F_COLFPPRO));
|
||||||
|
|
||||||
cg_msk.set(F_ANNORIF, cg_msk.get(F_ANNOIVA));
|
cg_msk.set(F_ANNORIF, cg_msk.get(F_ANNOIVA));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3972,7 +4052,9 @@ bool TPro_msk::fppro_ok_handler(TMask_field& f, KEY k)
|
|||||||
if(!loaded && *row->get(0) == 'X')
|
if(!loaded && *row->get(0) == 'X')
|
||||||
{
|
{
|
||||||
//TProtocollo protocollo(TDate(row->get(2)).year(), row->get(9), row->get(10));
|
//TProtocollo protocollo(TDate(row->get(2)).year(), row->get(9), row->get(10));
|
||||||
app()._pro_mask->set_doc(row->get(5), row->get(3), row->get(4), "", row->get(11));
|
app()._pro_mask->set_doc(row->get(cid2index(F_NUMEROS)), row->get(cid2index(F_DATAS)),
|
||||||
|
row->get(cid2index(F_IMPTOTDOCS)), "", row->get(cid2index(F_KEYFPPROS)),
|
||||||
|
row->get(cid2index(F_FISCIVACODS)));
|
||||||
loaded = true;
|
loaded = true;
|
||||||
ok = true;
|
ok = true;
|
||||||
break;
|
break;
|
||||||
@ -4056,13 +4138,54 @@ bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPro_msk::set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* protfppro, const char* fpprokeys)
|
void TPro_msk::set_righeiva(const char* fpprokeys)
|
||||||
|
{
|
||||||
|
TToken_string keys(fpprokeys, ';');
|
||||||
|
TString query;
|
||||||
|
query << "SELECT PL_ALIQUOTAIVA AS ALIQUOTA, PL_NATURA AS NATURA, PL_IMPONIBILE AS IMPONIBILE, PL_IMPOSTA AS IMPOSTA \nFROM PAA2200F\n" <<
|
||||||
|
"WHERE PL_KEYPRGINVIO = '" << keys.get(0) << "' AND PL_KEYHEADERFATT = '" << keys.get(1) << "' AND PL_KEYBODYFATT = '" << keys.get(2) << "';";
|
||||||
|
fp_db().sq_set_exec(query, false);
|
||||||
|
for(bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next())
|
||||||
|
{
|
||||||
|
add_rigaiva(real(fp_db().sq_get("IMPONIBILE")),
|
||||||
|
real(fp_db().sq_get("IMPOSTA")),
|
||||||
|
real(fp_db().sq_get("ALIQUOTA")),
|
||||||
|
fp_db().sq_get("NATURA"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TPro_msk::set_scadenze(const char* fpprokeys)
|
||||||
|
{
|
||||||
|
TToken_string keys(fpprokeys, ';');
|
||||||
|
TString query; query << "SELECT PO_RIGA AS RIGA, PO_DATASCADENZA AS DATA, PO_IMPORTO AS IMPORTO \nFROM PAA2500F \n" <<
|
||||||
|
"WHERE PO_KEYPRGINVIO = '" << keys.get(0) << "' AND PO_KEYHEADERFATT = '" << keys.get(1) << "' AND PO_KEYBODYFATT = '" << keys.get(2) << "';";
|
||||||
|
fp_db().sq_set_exec(query, false);
|
||||||
|
for(bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next())
|
||||||
|
{
|
||||||
|
add_scad(fp_db().sq_get_date("DATA"), real(fp_db().sq_get("IMPORTO")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TPro_msk::set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* protfppro, const char* fpprokeys, const char* piva)
|
||||||
{
|
{
|
||||||
_numero = numero;
|
_numero = numero;
|
||||||
_datadoc = datadoc;
|
_datadoc = datadoc;
|
||||||
_totdoc = totdoc;
|
_totdoc = totdoc;
|
||||||
_protfppro.sset(protfppro);
|
_protfppro.sset(protfppro);
|
||||||
_fpprokeys = fpprokeys;
|
_fpprokeys = fpprokeys;
|
||||||
|
_piva = piva;
|
||||||
|
set_righeiva(fpprokeys);
|
||||||
|
set_scadenze(fpprokeys);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TPro_msk::add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura)
|
||||||
|
{
|
||||||
|
_righe_iva.insert(_righe_iva.end(), { imponibile, imposta, aliquota, natura });
|
||||||
|
}
|
||||||
|
|
||||||
|
void TPro_msk::add_scad(const TDate& date, const real& importo)
|
||||||
|
{
|
||||||
|
_scadenze.insert(_scadenze.end(), { date, importo });
|
||||||
}
|
}
|
||||||
|
|
||||||
TString& TPro_msk::query_fppro(const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt,
|
TString& TPro_msk::query_fppro(const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt,
|
||||||
@ -4121,15 +4244,22 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
|
|||||||
query << "\nORDER BY P1_DATAORARIC ASC";
|
query << "\nORDER BY P1_DATAORARIC ASC";
|
||||||
query << ";";
|
query << ";";
|
||||||
}
|
}
|
||||||
else if(!keys.empty())
|
else if (!keys.empty())
|
||||||
{
|
{
|
||||||
query << keys;
|
query << keys;
|
||||||
if (!where_str.empty())
|
if (!where_str.empty())
|
||||||
query << " AND " << where_str;
|
query << " AND " << where_str;
|
||||||
query << ";";
|
query << ";";
|
||||||
}
|
}
|
||||||
|
else if (!date.empty())
|
||||||
|
{
|
||||||
|
query << " PZ_DATA = '" << TDate(date).date2ansi() << "' ";
|
||||||
|
if (order)
|
||||||
|
query << "\nORDER BY P1_DATAORARIC ASC";
|
||||||
|
query << ";";
|
||||||
|
}
|
||||||
else
|
else
|
||||||
query.cut(0);
|
query.cut(0) << query.left(query.len()-6);
|
||||||
|
|
||||||
return query;
|
return query;
|
||||||
}
|
}
|
||||||
@ -4160,4 +4290,5 @@ TPro_msk::TPro_msk(TMask& cg_msk) : TAutomask("cg2fppro")
|
|||||||
TMask::set(F_PIVAS, cg_msk.get(F_PIVA));
|
TMask::set(F_PIVAS, cg_msk.get(F_PIVA));
|
||||||
TMask::set(F_RAGSOCS, cg_msk.get(F_RAGSOCCF));
|
TMask::set(F_RAGSOCS, cg_msk.get(F_RAGSOCCF));
|
||||||
set(F_DATESEARCH, TDate(TODAY));
|
set(F_DATESEARCH, TDate(TODAY));
|
||||||
|
_righe_iva.clear();
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
#include <automask.h>
|
#include <automask.h>
|
||||||
#include "../f1/f1lib.h"
|
#include "../f1/f1lib.h"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#define K_ELIMMAS 0 // Key per eliminazione massima
|
#define K_ELIMMAS 0 // Key per eliminazione massima
|
||||||
|
|
||||||
@ -184,6 +185,11 @@ class TPrimanota_application : public TRelation_application
|
|||||||
|
|
||||||
static bool quadratura_handler(TMask_field& f, KEY k); // Bottone quadratura per ATS
|
static bool quadratura_handler(TMask_field& f, KEY k); // Bottone quadratura per ATS
|
||||||
|
|
||||||
|
static void set_righe_iva_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
||||||
|
static bool set_scadenze_f1(const TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
||||||
|
static void set_clifo(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
||||||
|
static void set_totale(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
||||||
|
static void riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
||||||
// Handlers per aggancio FPPRO
|
// Handlers per aggancio FPPRO
|
||||||
// Bottone per maschera FPPRO
|
// Bottone per maschera FPPRO
|
||||||
static bool fppro_mask(TMask_field& f, KEY key);
|
static bool fppro_mask(TMask_field& f, KEY key);
|
||||||
@ -394,11 +400,17 @@ public:
|
|||||||
|
|
||||||
class TPro_msk : public TAutomask
|
class TPro_msk : public TAutomask
|
||||||
{
|
{
|
||||||
|
struct riga_iva_s;
|
||||||
|
struct scadenza_s;
|
||||||
|
|
||||||
TString _numero;
|
TString _numero;
|
||||||
TDate _datadoc;
|
TDate _datadoc;
|
||||||
real _totdoc;
|
real _totdoc;
|
||||||
TProtocollo _protfppro;
|
TProtocollo _protfppro;
|
||||||
TString _fpprokeys;
|
TString _fpprokeys;
|
||||||
|
TString _piva;
|
||||||
|
vector<riga_iva_s> _righe_iva;
|
||||||
|
vector<scadenza_s> _scadenze;
|
||||||
|
|
||||||
// Handlers per aggancio FPPRO
|
// Handlers per aggancio FPPRO
|
||||||
// Bottone carica documenti in maschera FPPRO
|
// Bottone carica documenti in maschera FPPRO
|
||||||
@ -411,14 +423,35 @@ class TPro_msk : public TAutomask
|
|||||||
void fppro_selfatt() const;
|
void fppro_selfatt() const;
|
||||||
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
|
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
|
||||||
public:
|
public:
|
||||||
|
struct riga_iva_s
|
||||||
|
{
|
||||||
|
real imponibile;
|
||||||
|
real imposta;
|
||||||
|
real aliquota;
|
||||||
|
TString4 natura;
|
||||||
|
};
|
||||||
|
struct scadenza_s
|
||||||
|
{
|
||||||
|
TDate data;
|
||||||
|
real importo;
|
||||||
|
};
|
||||||
|
|
||||||
void set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* protfppro, const char* fpprokeys);
|
void set_righeiva(const char* fpprokeys);
|
||||||
|
void set_scadenze(const char* fpprokeys);
|
||||||
|
void set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* protfppro, const char* fpprokeys, const char* piva);
|
||||||
|
|
||||||
TString get_numdoc() const { return _numero; }
|
TString get_numdoc() const { return _numero; }
|
||||||
TDate get_datadoc() const { return _datadoc; }
|
TDate get_datadoc() const { return _datadoc; }
|
||||||
real get_totdoc() const { return _totdoc; }
|
real get_totdoc() const { return _totdoc; }
|
||||||
TProtocollo& get_protocollo() { return _protfppro; }
|
TProtocollo& get_protocollo() { return _protfppro; }
|
||||||
TString get_fpprokeys() const { return _fpprokeys; }
|
TString get_fpprokeys() const { return _fpprokeys; }
|
||||||
|
|
||||||
|
TString get_piva() const { return _piva; }
|
||||||
|
const vector<riga_iva_s>& get_righeiva() { return _righe_iva; }
|
||||||
|
vector<scadenza_s>& get_scadenze() { return _scadenze; }
|
||||||
|
void add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura);
|
||||||
|
void add_scad(const TDate& date, const real& importo);
|
||||||
|
|
||||||
|
|
||||||
static TString& query_fppro(const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, const TString& where_str);
|
static TString& query_fppro(const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, const TString& where_str);
|
||||||
static TString& query_fppro(const TString& codforn, const TString& date);
|
static TString& query_fppro(const TString& codforn, const TString& date);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user