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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
TMask& cg_msk = f.mask();
|
||||
@ -3854,22 +3934,22 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
|
||||
return true;
|
||||
auto msk = std::make_shared<TPro_msk>(cg_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()))
|
||||
{
|
||||
msk->run();
|
||||
// Riporto dati FPPRO su maschera Prima Nota (solo se hai F1)
|
||||
// Se non hai F1 collego senza riportarti i dati (solo le chiavi db)
|
||||
if(app().has_f1_db(&cg_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());
|
||||
}
|
||||
riporta_dati_f1(cg_msk, msk);
|
||||
cg_msk.set(F_PROKEY, msk->get_fpprokeys());
|
||||
is_collegato(cg_msk.field(F_COLFPPRO));
|
||||
|
||||
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')
|
||||
{
|
||||
//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;
|
||||
ok = true;
|
||||
break;
|
||||
@ -4056,13 +4138,54 @@ bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
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;
|
||||
_datadoc = datadoc;
|
||||
_totdoc = totdoc;
|
||||
_protfppro.sset(protfppro);
|
||||
_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,
|
||||
@ -4121,15 +4244,22 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
|
||||
query << "\nORDER BY P1_DATAORARIC ASC";
|
||||
query << ";";
|
||||
}
|
||||
else if(!keys.empty())
|
||||
else if (!keys.empty())
|
||||
{
|
||||
query << keys;
|
||||
if (!where_str.empty())
|
||||
query << " AND " << where_str;
|
||||
query << ";";
|
||||
}
|
||||
else if (!date.empty())
|
||||
{
|
||||
query << " PZ_DATA = '" << TDate(date).date2ansi() << "' ";
|
||||
if (order)
|
||||
query << "\nORDER BY P1_DATAORARIC ASC";
|
||||
query << ";";
|
||||
}
|
||||
else
|
||||
query.cut(0);
|
||||
query.cut(0) << query.left(query.len()-6);
|
||||
|
||||
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_RAGSOCS, cg_msk.get(F_RAGSOCCF));
|
||||
set(F_DATESEARCH, TDate(TODAY));
|
||||
_righe_iva.clear();
|
||||
}
|
||||
|
@ -35,6 +35,7 @@
|
||||
|
||||
#include <automask.h>
|
||||
#include "../f1/f1lib.h"
|
||||
#include <vector>
|
||||
|
||||
#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 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
|
||||
// Bottone per maschera FPPRO
|
||||
static bool fppro_mask(TMask_field& f, KEY key);
|
||||
@ -394,11 +400,17 @@ public:
|
||||
|
||||
class TPro_msk : public TAutomask
|
||||
{
|
||||
struct riga_iva_s;
|
||||
struct scadenza_s;
|
||||
|
||||
TString _numero;
|
||||
TDate _datadoc;
|
||||
real _totdoc;
|
||||
TProtocollo _protfppro;
|
||||
TString _fpprokeys;
|
||||
TString _piva;
|
||||
vector<riga_iva_s> _righe_iva;
|
||||
vector<scadenza_s> _scadenze;
|
||||
|
||||
// Handlers per aggancio FPPRO
|
||||
// Bottone carica documenti in maschera FPPRO
|
||||
@ -411,14 +423,35 @@ class TPro_msk : public TAutomask
|
||||
void fppro_selfatt() const;
|
||||
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
|
||||
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; }
|
||||
TDate get_datadoc() const { return _datadoc; }
|
||||
real get_totdoc() const { return _totdoc; }
|
||||
TProtocollo& get_protocollo() { return _protfppro; }
|
||||
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& codforn, const TString& date);
|
||||
|
Loading…
x
Reference in New Issue
Block a user