Patch level : 12.0 1140
Files correlati : cg2.exe cg2100c.msk cg2100t.msk Commento: Nelle fatture intra l'identificativo SDI viene recuperato da FPPRO e scritto sulla fattura di acquisto e sulla regolarizzazione
This commit is contained in:
parent
45c2598cc7
commit
4d94988b54
@ -50,6 +50,8 @@ public:
|
|||||||
TString4 _causale_originale;
|
TString4 _causale_originale;
|
||||||
TipoIVA _iva_originale;
|
TipoIVA _iva_originale;
|
||||||
TString_array _iva;
|
TString_array _iva;
|
||||||
|
TString _idsdi;
|
||||||
|
TDate _datasdi;
|
||||||
};
|
};
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -59,7 +61,7 @@ public:
|
|||||||
TPrimanota_application::TPrimanota_application()
|
TPrimanota_application::TPrimanota_application()
|
||||||
: _rel(nullptr), _mode(0), _iva(nessuna_iva), _causale(nullptr), _giornale(nullptr),
|
: _rel(nullptr), _mode(0), _iva(nessuna_iva), _causale(nullptr), _giornale(nullptr),
|
||||||
_lastreg(0), _last_dreg(TODAY), _last_dcom(TODAY), _automatico(nullptr), _swap_mask(false), _is_set_fpcheck(false), _f1_ini(false), _f1_liq(false),
|
_lastreg(0), _last_dreg(TODAY), _last_dcom(TODAY), _automatico(nullptr), _swap_mask(false), _is_set_fpcheck(false), _f1_ini(false), _f1_liq(false),
|
||||||
_skip_giornale_check(false), _skip_bollato_check(false)
|
_skip_giornale_check(false), _skip_bollato_check(false), _pro_mask(nullptr)
|
||||||
{
|
{
|
||||||
memset(_msk, 0, sizeof(_msk));
|
memset(_msk, 0, sizeof(_msk));
|
||||||
}
|
}
|
||||||
@ -439,7 +441,7 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char sezione = rcaus->get_char(RCA_SEZIONE);
|
const char sezione = rcaus->get_char(RCA_SEZIONE);
|
||||||
const TImporto zero('D', ZERO);
|
TImporto zero('D', ZERO);
|
||||||
const TString80 desc(causale().desc_agg(i));
|
const TString80 desc(causale().desc_agg(i));
|
||||||
|
|
||||||
if (nriga == 1) m->set(F_DESCR, desc);
|
if (nriga == 1) m->set(F_DESCR, desc);
|
||||||
@ -697,7 +699,7 @@ void TPrimanota_application::init_mask(TMask& m)
|
|||||||
_sal_dirty = false; // Azzero il flag di modifica del saldaconto
|
_sal_dirty = false; // Azzero il flag di modifica del saldaconto
|
||||||
fill_sheet(m); // Riempe righe contabili coi conti della causale
|
fill_sheet(m); // Riempe righe contabili coi conti della causale
|
||||||
m.hide(F_LINKDOC);
|
m.hide(F_LINKDOC);
|
||||||
set_has_f1_db(&m);
|
has_f1_db(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrimanota_application::init_query_mode(TMask& m)
|
void TPrimanota_application::init_query_mode(TMask& m)
|
||||||
@ -736,7 +738,7 @@ void TPrimanota_application::init_query_mode(TMask& m)
|
|||||||
m.set(F_CODCAUS, ini.get(MOV_CODCAUS));
|
m.set(F_CODCAUS, ini.get(MOV_CODCAUS));
|
||||||
m.send_key(K_SPACE, DLG_NEWREC);
|
m.send_key(K_SPACE, DLG_NEWREC);
|
||||||
}
|
}
|
||||||
set_has_f1_db(&m);
|
has_f1_db(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -995,17 +997,19 @@ void TPrimanota_application::init_insert_mode(TMask& m)
|
|||||||
m.enable(F_BOLLACODCLI, causale().tipo_doc() == "BD");
|
m.enable(F_BOLLACODCLI, causale().tipo_doc() == "BD");
|
||||||
m.enable(F_BOLLARAGCLI, causale().tipo_doc() == "BD");
|
m.enable(F_BOLLARAGCLI, causale().tipo_doc() == "BD");
|
||||||
}
|
}
|
||||||
|
if (iva() != nessuna_iva)
|
||||||
|
f1_init(m, m.get_date(F_DATAREG) >= get_data_start_fatt());
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrimanota_application::f1_init_modify(TMask& m, const TRectype& mov)
|
void TPrimanota_application::f1_init(TMask& m, const bool fe_enabled, const bool f1_linked)
|
||||||
{
|
{
|
||||||
const bool after_data_inizio_fe = mov.get_date(MOV_DATADOC) >= get_data_start_fatt();
|
const bool reverse_charge = app().causale().reverse_charge_pubb();
|
||||||
|
|
||||||
m.field(F_IDDOCSDI).show(after_data_inizio_fe);
|
m.field(F_IDDOCSDI).show(fe_enabled && reverse_charge);
|
||||||
m.field(F_DATADOCSDI).show(after_data_inizio_fe);
|
m.field(F_DATADOCSDI).show(fe_enabled && reverse_charge);
|
||||||
m.field(F_COLFPPRO).show(after_data_inizio_fe);
|
m.field(F_COLFPPRO).show(fe_enabled);
|
||||||
m.field(DLG_LINK).enable(after_data_inizio_fe);
|
m.field(DLG_LINK).enable(fe_enabled);
|
||||||
m.set(F_COLFPPRO, !after_data_inizio_fe || mov.get(MOV_KEYFPPRO).empty() ? " " : "X");
|
m.set(F_COLFPPRO, fe_enabled && f1_linked, 0x3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrimanota_application::init_modify_mode(TMask& m)
|
void TPrimanota_application::init_modify_mode(TMask& m)
|
||||||
@ -1116,7 +1120,7 @@ void TPrimanota_application::init_modify_mode(TMask& m)
|
|||||||
m.enable(F_BOLLARAGCLI, causale().tipo_doc() == "BD");
|
m.enable(F_BOLLARAGCLI, causale().tipo_doc() == "BD");
|
||||||
}
|
}
|
||||||
if (iva() != nessuna_iva)
|
if (iva() != nessuna_iva)
|
||||||
f1_init_modify(m, mov);
|
f1_init(m, mov.get_date(MOV_DATADOC) >= get_data_start_fatt(), mov.get(MOV_KEYFPPRO).full());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Controlla sulla causale se il segno del totale documento (ritsoc=false)
|
// Controlla sulla causale se il segno del totale documento (ritsoc=false)
|
||||||
@ -1488,18 +1492,14 @@ void TPrimanota_application::check_saldi()
|
|||||||
|
|
||||||
void TPrimanota_application::write_fppro()
|
void TPrimanota_application::write_fppro()
|
||||||
{
|
{
|
||||||
#ifdef DBG
|
if (main_app().has_module(FPAUT) && !ini_get_bool(CONFIG_INSTALL, "Main", "SkipFPPRO"))
|
||||||
if (!ini_get_bool(CONFIG_INSTALL, "Main", "SkipFPPRO"))
|
|
||||||
{
|
{
|
||||||
#endif
|
|
||||||
// Controllo se la registrazione ha avuto effetto anche su FPPRO allora salvo riferimento sul mov
|
// Controllo se la registrazione ha avuto effetto anche su FPPRO allora salvo riferimento sul mov
|
||||||
if (save_fppro() > 0 && !save_dbmov())
|
if (save_fppro() > 0 && !save_dbmov())
|
||||||
message_box(
|
message_box(
|
||||||
"ATTENZIONE: non e' stato possibile salvare i riferimenti del documento in ingresso per questo movimento.\n"
|
"ATTENZIONE: non e' stato possibile salvare i riferimenti del documento in ingresso per questo movimento.\n"
|
||||||
"Movimento registrato senza collegamento ai documenti in ingresso.");
|
"Movimento registrato senza collegamento ai documenti in ingresso.");
|
||||||
#ifdef DBG
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TPrimanota_application::has_tot_doc(TToken_string& fppro_keys)
|
bool TPrimanota_application::has_tot_doc(TToken_string& fppro_keys)
|
||||||
@ -1556,7 +1556,7 @@ void TPrimanota_application::set_movcoll(const long movcoll, const long numreg)
|
|||||||
}
|
}
|
||||||
int TPrimanota_application::controlli_f1(const TMask& m)
|
int TPrimanota_application::controlli_f1(const TMask& m)
|
||||||
{
|
{
|
||||||
if (m.find_by_id(F_PROKEY) != nullptr && m.get(F_PROKEY).full() && has_f1_db((TMask*)&m) && fp_db().sq_is_connect() && check_causale(m.get(F_CODCAUS)))
|
if (iva_mask(m) && m.get(F_PROKEY).full() && has_f1_db(m) && fp_db().sq_is_connect() && check_causale(m.get(F_CODCAUS)))
|
||||||
{
|
{
|
||||||
TToken_string keys(m.get(F_PROKEY), ';');
|
TToken_string keys(m.get(F_PROKEY), ';');
|
||||||
const TDate dataoraric = fppro_db().set_keys(keys).get_dataorarioric();
|
const TDate dataoraric = fppro_db().set_keys(keys).get_dataorarioric();
|
||||||
@ -1717,10 +1717,19 @@ int TPrimanota_application::rewrite(const TMask& m)
|
|||||||
|
|
||||||
if (caus.reverse_charge_pubb())
|
if (caus.reverse_charge_pubb())
|
||||||
{
|
{
|
||||||
const long movcoll = m.get_long(F_MOVCOLL);
|
long movcoll = m.get_long(F_MOVCOLL);
|
||||||
|
|
||||||
if (movcoll == 0L)
|
if (movcoll == 0L)
|
||||||
find_movcoll(_rel->file().get_long(MOV_NUMREG));
|
find_movcoll(_rel->file().get_long(MOV_NUMREG));
|
||||||
|
movcoll = m.get_long(F_MOVCOLL);
|
||||||
|
if (movcoll > 0L)
|
||||||
|
{
|
||||||
|
TRectype & reccoll = (TRectype &) cache().get(LF_MOV, movcoll);
|
||||||
|
|
||||||
|
reccoll.put(MOV_IDDOCSDI, m.get(F_IDDOCSDI));
|
||||||
|
reccoll.put(MOV_DATADOCSDI, m.get(F_DATADOCSDI));
|
||||||
|
reccoll.rewrite();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
mask2rel(m);
|
mask2rel(m);
|
||||||
|
|
||||||
@ -1788,7 +1797,7 @@ void TPrimanota_application::clean_fppro()
|
|||||||
|
|
||||||
// Controlli: solo in mod modifica; che abbia fp-f1 (no F8); che non sono in salvataggio
|
// Controlli: solo in mod modifica; che abbia fp-f1 (no F8); che non sono in salvataggio
|
||||||
if (_mode != MODE_MOD
|
if (_mode != MODE_MOD
|
||||||
|| !has_f1_db(&msk)
|
|| !has_f1_db(msk)
|
||||||
|| last_key != K_DEL && last_key != K_SAVE && last_key != K_ELIMMAS && last_key != K_QUIT && !scollega())
|
|| last_key != K_DEL && last_key != K_SAVE && last_key != K_ELIMMAS && last_key != K_QUIT && !scollega())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1803,27 +1812,17 @@ void TPrimanota_application::clean_fppro()
|
|||||||
fp_db().sq_commit();
|
fp_db().sq_commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrimanota_application::set_has_f1_db(TMask* m)
|
bool TPrimanota_application::has_f1() const
|
||||||
{
|
{
|
||||||
if (m->find_by_id(F_DATAREG) != nullptr && !m->get(F_DATAREG).empty())
|
return has_module(F1AUT) && get_db_indirizzo().full();
|
||||||
{
|
|
||||||
if (TDate(m->get(F_DATAREG)) >= TDate(get_data_start_fatt()))
|
|
||||||
_isf1 = has_module(F1AUT) && !get_db_indirizzo().empty();
|
|
||||||
else
|
|
||||||
_isf1 = false;
|
|
||||||
_is_set_fpcheck = true;
|
|
||||||
}
|
|
||||||
else if (!_is_set_fpcheck)
|
|
||||||
{
|
|
||||||
_isf1 = false;
|
|
||||||
_is_set_fpcheck = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TPrimanota_application::has_f1_db(TMask* m)
|
bool TPrimanota_application::has_f1_db(const TMask & m)
|
||||||
{
|
{
|
||||||
set_has_f1_db(m);
|
const TDate datareg = m.get_date(F_DATAREG);
|
||||||
return _isf1;
|
|
||||||
|
_is_set_fpcheck = true;
|
||||||
|
return datareg.ok() && (datareg >= get_data_start_fatt()) && has_f1();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TPrimanota_application::remove()
|
bool TPrimanota_application::remove()
|
||||||
@ -1892,6 +1891,8 @@ void TPrimanota_application::genera_automatico(int tipo, const char* causimm)
|
|||||||
_automatico->_movcoll = m.get_long(F_NUMREG);
|
_automatico->_movcoll = m.get_long(F_NUMREG);
|
||||||
_automatico->_iva.destroy();
|
_automatico->_iva.destroy();
|
||||||
_automatico->_totale = ZERO;
|
_automatico->_totale = ZERO;
|
||||||
|
_automatico->_idsdi = m.get(F_IDDOCSDI);
|
||||||
|
_automatico->_datasdi = m.get(F_DATADOCSDI);
|
||||||
for (int i = 0; i < items; i++)
|
for (int i = 0; i < items; i++)
|
||||||
{
|
{
|
||||||
TToken_string row = iva.row(i);
|
TToken_string row = iva.row(i);
|
||||||
@ -1979,6 +1980,9 @@ void TPrimanota_application::genera_automatico(int tipo, const char* causimm)
|
|||||||
const TString& clnt = cache().get(LF_CLIFO, forn, CLI_CODCFASS);
|
const TString& clnt = cache().get(LF_CLIFO, forn, CLI_CODCFASS);
|
||||||
m.set(F_CODCLIFOR, clnt);
|
m.set(F_CODCLIFOR, clnt);
|
||||||
}
|
}
|
||||||
|
m.set(F_IDDOCSDI, _automatico->_idsdi);
|
||||||
|
m.set(F_DATADOCSDI, _automatico->_datasdi);
|
||||||
|
|
||||||
TSheet_field & iva = m.sfield(F_SHEETIVA);
|
TSheet_field & iva = m.sfield(F_SHEETIVA);
|
||||||
const int items = _automatico->_iva.items();
|
const int items = _automatico->_iva.items();
|
||||||
|
|
||||||
@ -2672,7 +2676,7 @@ int TPrimanota_application::save_fppro()
|
|||||||
TMask& msk = curr_mask();
|
TMask& msk = curr_mask();
|
||||||
|
|
||||||
// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
|
// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
|
||||||
if (!has_f1_db(&msk))
|
if (!has_f1_db(msk))
|
||||||
return pro_nofp;
|
return pro_nofp;
|
||||||
|
|
||||||
// Anzitutto guardo la modalita' in cui sono
|
// Anzitutto guardo la modalita' in cui sono
|
||||||
@ -2737,7 +2741,7 @@ int TPrimanota_application::save_fppro()
|
|||||||
items = fp_db().sq_items();
|
items = fp_db().sq_items();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(has_f1_db(&msk) && items != 1)
|
if(has_f1_db(msk) && items != 1)
|
||||||
{
|
{
|
||||||
const bool forza = noyes_box("Attenzione, al movimento non e' stato abbinato nessun documento elettronico.\n"
|
const bool forza = noyes_box("Attenzione, al movimento non e' stato abbinato nessun documento elettronico.\n"
|
||||||
"Per consentire una corretta archiviazione sostitutiva si consiglia di provvedere al controllo della registrazione e di procedere\n"
|
"Per consentire una corretta archiviazione sostitutiva si consiglia di provvedere al controllo della registrazione e di procedere\n"
|
||||||
@ -2851,6 +2855,7 @@ bool TPrimanota_application::link_intra(const TMask& m, const char* action)
|
|||||||
|
|
||||||
const BOOLEAN bModify = xvt_str_same(action, "Modify");
|
const BOOLEAN bModify = xvt_str_same(action, "Modify");
|
||||||
|
|
||||||
|
|
||||||
TFilename intrini;
|
TFilename intrini;
|
||||||
intrini.tempdir();
|
intrini.tempdir();
|
||||||
intrini.add("ActIntra.ini");
|
intrini.add("ActIntra.ini");
|
||||||
|
@ -91,11 +91,11 @@
|
|||||||
#define F_REVCHARGE 184
|
#define F_REVCHARGE 184
|
||||||
#define F_MOVCOLL 185
|
#define F_MOVCOLL 185
|
||||||
#define F_GOCOLL 186
|
#define F_GOCOLL 186
|
||||||
#define F_IDDOCSDI 187
|
#define F_IDDOCSDI 187
|
||||||
#define F_DATADOCSDI 188
|
#define F_DATADOCSDI 188
|
||||||
|
|
||||||
#define F_SHEETCG 190
|
#define F_SHEETCG 190
|
||||||
#define F_SHEETIVA 191
|
#define F_SHEETIVA 191
|
||||||
|
|
||||||
|
|
||||||
// Sheet contabile
|
// Sheet contabile
|
||||||
|
@ -569,7 +569,7 @@ END
|
|||||||
|
|
||||||
STRING F_PROKEY 80
|
STRING F_PROKEY 80
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 19 "db key"
|
PROMPT 1 26 "DB key"
|
||||||
HELP "Chiave database"
|
HELP "Chiave database"
|
||||||
FIELD KEYFPPRO
|
FIELD KEYFPPRO
|
||||||
FLAGS "H"
|
FLAGS "H"
|
||||||
|
@ -13,12 +13,14 @@ BEGIN
|
|||||||
PROMPT 2 1 "Contabilizzaz."
|
PROMPT 2 1 "Contabilizzaz."
|
||||||
PICTURE TOOL_EXPORT
|
PICTURE TOOL_EXPORT
|
||||||
MODULE F1
|
MODULE F1
|
||||||
|
MESSAGE EXIT,K_ENTER
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_LINK 2 2
|
BUTTON DLG_LINK 2 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 3 1 "Collega in Prima nota"
|
PROMPT 3 1 "Collega in Prima nota"
|
||||||
PICTURE TOOL_LINK
|
PICTURE TOOL_LINK
|
||||||
|
MESSAGE EXIT,K_ENTER
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_QUIT 2 2
|
BUTTON DLG_QUIT 2 2
|
||||||
|
@ -219,7 +219,10 @@ TSheet_field& TPrimanota_application::cgs() const
|
|||||||
void TPrimanota_application::set_cgs_imp(int n, const TImporto& imp)
|
void TPrimanota_application::set_cgs_imp(int n, const TImporto& imp)
|
||||||
{
|
{
|
||||||
TSheet_field& s = cgs();
|
TSheet_field& s = cgs();
|
||||||
imp.add_to(s.row(n), 0);
|
TImporto i(imp);
|
||||||
|
|
||||||
|
i.normalize();
|
||||||
|
i.add_to(s.row(n), 0);
|
||||||
s.force_update(n);
|
s.force_update(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,7 +374,7 @@ void TPrimanota_application::reset_sheet_row(TSheet_field& s, int n)
|
|||||||
s.destroy(n); // Remove line n
|
s.destroy(n); // Remove line n
|
||||||
}
|
}
|
||||||
|
|
||||||
int TPrimanota_application::set_cgs_row(int n, const TImporto& imp,
|
int TPrimanota_application::set_cgs_row(int n, TImporto& importo,
|
||||||
const TBill& conto, const char* desc,
|
const TBill& conto, const char* desc,
|
||||||
char tipo, const char* cms, const char* fas)
|
char tipo, const char* cms, const char* fas)
|
||||||
{
|
{
|
||||||
@ -380,7 +383,8 @@ int TPrimanota_application::set_cgs_row(int n, const TImporto& imp,
|
|||||||
TToken_string& row = cg.row(n);
|
TToken_string& row = cg.row(n);
|
||||||
|
|
||||||
row.cut(0);
|
row.cut(0);
|
||||||
imp.add_to(row, 0);
|
importo.normalize();
|
||||||
|
importo.add_to(row, 0);
|
||||||
row.add(conto.string(0x3));
|
row.add(conto.string(0x3));
|
||||||
row.add(""); // Codice decrizione
|
row.add(""); // Codice decrizione
|
||||||
row.add(desc); // Descrizione aggiuntiva
|
row.add(desc); // Descrizione aggiuntiva
|
||||||
@ -1536,7 +1540,7 @@ void TPrimanota_application::add2cg_row(TSheet_field& s, TToken_string & row, TS
|
|||||||
{
|
{
|
||||||
const TBill conto(row, cid2index(IVA_TIPO), 0x1);
|
const TBill conto(row, cid2index(IVA_TIPO), 0x1);
|
||||||
const int pos = bill2pos(conto, cgrowtype_imponibile); // Riga in cui andra' l'imponibile
|
const int pos = bill2pos(conto, cgrowtype_imponibile); // Riga in cui andra' l'imponibile
|
||||||
const TImporto imp = a.real2imp(d > 0 ? imp_det : imp_ind, tipod); // Imponibile
|
TImporto imp = a.real2imp(d > 0 ? imp_det : imp_ind, tipod); // Imponibile
|
||||||
|
|
||||||
if (pos >= 0) // Se il conto esisteva anche prima ...
|
if (pos >= 0) // Se il conto esisteva anche prima ...
|
||||||
{
|
{
|
||||||
@ -1761,7 +1765,7 @@ bool TPrimanota_application::iva_notify(TSheet_field& s, int r, KEY k)
|
|||||||
real pimponibile(pag.imponibile(inv));
|
real pimponibile(pag.imponibile(inv));
|
||||||
|
|
||||||
pimponibile.round(pag.round(inv));
|
pimponibile.round(pag.round(inv));
|
||||||
if ((pimposta != imposta || pimponibile != imponibile) && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->should_bring_back())))
|
if ((pimposta != imposta || pimponibile != imponibile) && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->da_riportare())))
|
||||||
a.set_scadenze(m); // Ricalcola rate
|
a.set_scadenze(m); // Ricalcola rate
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2842,7 +2846,7 @@ void TPrimanota_application::add_cgs_tot(TMask& m)
|
|||||||
|
|
||||||
TImporto imp = real2imp(m.get_real(F_TOTALE), cgrowtype_totale);
|
TImporto imp = real2imp(m.get_real(F_TOTALE), cgrowtype_totale);
|
||||||
|
|
||||||
set_cgs_row(riga_totale, imp.normalize(), nuovo, descr, cgrowtype_totale);
|
set_cgs_row(riga_totale, imp, nuovo, descr, cgrowtype_totale);
|
||||||
}
|
}
|
||||||
calcola_imp(); // Ricalcola totale IVA
|
calcola_imp(); // Ricalcola totale IVA
|
||||||
calcola_saldo(); // Ricalcola sbilanci
|
calcola_saldo(); // Ricalcola sbilanci
|
||||||
@ -3018,7 +3022,7 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
|
|||||||
ixc->set(ic ? "X" : "");
|
ixc->set(ic ? "X" : "");
|
||||||
}
|
}
|
||||||
if(m.get(F_PROKEY).empty() && app().has_module(F1AUT))
|
if(m.get(F_PROKEY).empty() && app().has_module(F1AUT))
|
||||||
fppro_mask(f, key);
|
a.fppro_mask(f, key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -3562,21 +3566,11 @@ HIDDEN void inventa_cambio_intra(TMask& m)
|
|||||||
{
|
{
|
||||||
const TString& codval = m.get(F_VALUTAINTRA);
|
const TString& codval = m.get(F_VALUTAINTRA);
|
||||||
|
|
||||||
if (codval.not_empty() && TCurrency::get_firm_val() != codval)
|
if (codval.full() && TCurrency::get_firm_val() != codval)
|
||||||
{
|
{
|
||||||
TTable cam("CAM");
|
const TRectype & cam =cache().get("CAM", codval);
|
||||||
|
|
||||||
cam.put("CODTAB", codval);
|
if (cam.full())
|
||||||
const int err = cam.read(_isgteq);
|
|
||||||
bool yes = err != NOERR;
|
|
||||||
if (!yes)
|
|
||||||
{
|
|
||||||
TString16 v = cam.get("CODTAB");
|
|
||||||
|
|
||||||
v.cut(3).rtrim();
|
|
||||||
yes = v != codval;
|
|
||||||
}
|
|
||||||
if (yes)
|
|
||||||
m.set(F_CAMBIOINTRA, cache().get("%VAL", codval, "S4"));
|
m.set(F_CAMBIOINTRA, cache().get("%VAL", codval, "S4"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3903,71 +3897,74 @@ bool TPrimanota_application::quadratura_handler(TMask_field& f, KEY key)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrimanota_application::write_righe_iva_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
|
||||||
|
void TPrimanota_application::write_righe_iva_f1(TMask& cg_msk, const TPro_msk & msk)
|
||||||
{
|
{
|
||||||
TSheet_field& sf = cg_msk.sfield(F_SHEETIVA);
|
TSheet_field& sf = cg_msk.sfield(F_SHEETIVA);
|
||||||
const vector<TPro_msk::riga_iva_s>& righe = msk->get_righeiva();
|
const TString_array& righe = msk.get_righeiva();
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
for (auto it = righe.begin(); it != righe.end(); ++it)
|
FOR_EACH_ARRAY_ITEM( righe, r, obj)
|
||||||
{
|
{
|
||||||
if(it->imponibile != 0 || it->imposta != 0)
|
TToken_string & riga = STRING_TOKEN(obj);
|
||||||
{
|
const real imponibile = riga.get_real(FPRI_IMPONIBILE);
|
||||||
TToken_string& row = sf.row(i);
|
const real imposta = riga.get_real(FPRI_IMPOSTA);
|
||||||
|
|
||||||
sf.notify(i, K_SPACE);
|
if (imponibile != ZERO || imposta != ZERO)
|
||||||
row.add(it->imponibile, cid2index(IVA_IMPONIBILE));
|
{
|
||||||
row.add(it->imposta, cid2index(IVA_IMPOSTA));
|
TToken_string& row = sf.row(r);
|
||||||
row.add(it->aliquota, cid2index(IVA_PERCIVA));
|
|
||||||
row.add(it->natura, cid2index(IVA_NATURIVA));
|
sf.notify(r, K_SPACE);
|
||||||
sf.notify(i, K_ENTER);
|
sf.set_row_cell(IVA_IMPONIBILE, imponibile, r);
|
||||||
i++;
|
sf.set_row_cell(IVA_IMPOSTA, imposta, r);
|
||||||
|
sf.set_row_cell(IVA_PERCIVA, riga.get(FPRI_ALIQUOTA), r);
|
||||||
|
sf.set_row_cell(IVA_NATURIVA, riga.get(FPRI_NATURA), r);
|
||||||
|
sf.notify(r, K_ENTER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bool TPrimanota_application::write_scad_f1(const TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
bool TPrimanota_application::write_scad_f1(const TMask& cg_msk, const TPro_msk & msk)
|
||||||
{
|
{
|
||||||
TSheet_field& sf = cg_msk.sfield(FS_RATESHEET);
|
TSheet_field& sf = cg_msk.sfield(FS_RATESHEET);
|
||||||
const int items = sf.items();
|
const int items = sf.items();
|
||||||
const vector<TPro_msk::scadenza_s>& righe = msk->get_scadenze();
|
const TString_array & righe = msk.get_scadenze();
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
for (auto it = righe.begin(); it != righe.end(); ++it, ++i)
|
FOR_EACH_ARRAY_ITEM(righe, r, obj)
|
||||||
{
|
{
|
||||||
TToken_string& row = app().pags().row(i);
|
TToken_string& row = app().pags().row(r);
|
||||||
|
TToken_string & riga = STRING_TOKEN(obj);
|
||||||
|
|
||||||
if(i >= items)
|
if (r >= items)
|
||||||
pag_notify(sf, i, K_CTRL+K_INS);
|
pag_notify(sf, r, K_CTRL+K_INS);
|
||||||
pag_notify(sf, i, K_SPACE);
|
pag_notify(sf, r, K_SPACE);
|
||||||
row.add(it->data, cid2index(101));
|
sf.set_row_cell(101, riga.get_date(FPSC_DATA), r);
|
||||||
row.add(it->importo, cid2index(102));
|
sf.set_row_cell(102, riga.get_real(FPSC_IMPORTO), r);
|
||||||
pag_notify(sf, i, K_ENTER);
|
pag_notify(sf, r, K_ENTER);
|
||||||
}
|
}
|
||||||
return !righe.empty();
|
return righe.items() > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
void TPrimanota_application::write_clifo(TMask& cg_msk, const TPro_msk & msk)
|
||||||
{
|
{
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
TLocalisamfile clifo(LF_CLIFO);
|
TLocalisamfile clifo(LF_CLIFO);
|
||||||
TToken_string keys(msk->get_fpprokeys(), ';');
|
TToken_string keys(msk.get_fpprokeys(), ';');
|
||||||
TString codforn = TFppro(keys).get_codforn();
|
long codforn = TFppro(keys).get_codforn();
|
||||||
|
|
||||||
if (codforn.empty())
|
if (codforn == 0L)
|
||||||
codforn = msk->get_codforn();
|
codforn = msk.get_codforn();
|
||||||
if (codforn.empty())
|
if (codforn == 0L)
|
||||||
{
|
{
|
||||||
clifo.setkey(5);
|
clifo.setkey(5);
|
||||||
clifo.put(CLI_TIPOCF, "F");
|
clifo.put(CLI_TIPOCF, "F");
|
||||||
clifo.put(CLI_PAIV, msk->get_piva());
|
clifo.put(CLI_PAIV, msk.get_piva());
|
||||||
clifo.read();
|
clifo.read();
|
||||||
ok = clifo.get(CLI_PAIV) == msk->get_piva();
|
ok = clifo.get(CLI_PAIV) == msk.get_piva();
|
||||||
if(!ok)
|
if(!ok)
|
||||||
{
|
{
|
||||||
clifo.zero();
|
clifo.zero();
|
||||||
clifo.setkey(5);
|
clifo.setkey(5);
|
||||||
clifo.put(CLI_TIPOCF, "F");
|
clifo.put(CLI_TIPOCF, "F");
|
||||||
clifo.put(CLI_PAIV, msk->get_piva());
|
clifo.put(CLI_PAIV, msk.get_piva());
|
||||||
clifo.put(CLI_STATOPAIV, "IT");
|
clifo.put(CLI_STATOPAIV, "IT");
|
||||||
clifo.read();
|
clifo.read();
|
||||||
}
|
}
|
||||||
@ -3979,8 +3976,8 @@ void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptr<TPro_ms
|
|||||||
clifo.put(CLI_CODCF, codforn);
|
clifo.put(CLI_CODCF, codforn);
|
||||||
clifo.read();
|
clifo.read();
|
||||||
}
|
}
|
||||||
ok = clifo.get(CLI_PAIV) == msk->get_piva();
|
ok = clifo.get(CLI_PAIV) == msk.get_piva();
|
||||||
if (ok && (cg_msk.get(F_CODCLIFOR).empty() || cg_msk.get(F_CODCLIFOR) != codforn))
|
if (ok && (cg_msk.get_long(F_CODCLIFOR) == 0 || cg_msk.get_long(F_CODCLIFOR) != codforn))
|
||||||
{
|
{
|
||||||
cg_msk.set(F_CODCLIFOR, clifo.get(CLI_CODCF));
|
cg_msk.set(F_CODCLIFOR, clifo.get(CLI_CODCF));
|
||||||
cg_msk.set(F_RAGSOCCF, clifo.get(CLI_RAGSOC));
|
cg_msk.set(F_RAGSOCCF, clifo.get(CLI_RAGSOC));
|
||||||
@ -3988,20 +3985,21 @@ void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptr<TPro_ms
|
|||||||
cg_msk.set(F_PIVA, clifo.get(CLI_PAIV));
|
cg_msk.set(F_PIVA, clifo.get(CLI_PAIV));
|
||||||
cg_msk.set(F_COFI, clifo.get(CLI_COFI));
|
cg_msk.set(F_COFI, clifo.get(CLI_COFI));
|
||||||
cg_msk.set(F_CODPAG, clifo.get(CLI_CODPAG));
|
cg_msk.set(F_CODPAG, clifo.get(CLI_CODPAG));
|
||||||
TTable tab("%CPG"); tab.put("CODTAB", clifo.get(CLI_CODPAG));
|
|
||||||
tab.read();
|
const TRectype & tab = cache().get("%CPG", clifo.get(CLI_CODPAG));
|
||||||
|
|
||||||
cg_msk.set(F_DESPAG, tab.get("S0"));
|
cg_msk.set(F_DESPAG, tab.get("S0"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
void TPrimanota_application::set_totale(TMask& cg_msk, TPro_msk & msk)
|
||||||
{
|
{
|
||||||
real totale = msk->get_totdoc();
|
real totale = msk.get_totdoc();
|
||||||
|
|
||||||
if(totale == ZERO)
|
if (totale == ZERO)
|
||||||
totale = app().calcola_imp();
|
totale = app().calcola_imp();
|
||||||
|
|
||||||
const real rit = msk->get_ritenute();
|
const real rit = msk.get_ritenute();
|
||||||
|
|
||||||
if (rit != ZERO)
|
if (rit != ZERO)
|
||||||
{
|
{
|
||||||
@ -4009,78 +4007,83 @@ void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptr<TPro_msk
|
|||||||
cg_msk.set(F_RITFIS, rit);
|
cg_msk.set(F_RITFIS, rit);
|
||||||
app().add_cgs_ritenute(cgrowtype_ritfis);
|
app().add_cgs_ritenute(cgrowtype_ritfis);
|
||||||
}
|
}
|
||||||
else if (msk->is_doc_split())
|
else
|
||||||
totale = msk->get_tot_imp_riva();
|
if (msk.is_doc_split())
|
||||||
|
totale = msk.get_tot_imp_riva();
|
||||||
cg_msk.set(F_TOTALE, totale);
|
cg_msk.set(F_TOTALE, totale);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, TPro_msk & msk)
|
||||||
{
|
{
|
||||||
const bool bring = msk->should_bring_back();
|
const bool bring = msk.da_riportare();
|
||||||
|
|
||||||
if (bring)
|
if (bring)
|
||||||
{
|
{
|
||||||
if (msk->get_numdoc().full() && cg_msk.get(F_CODCLIFOR).empty())
|
TPrimanota_application & a = app();
|
||||||
write_clifo(cg_msk, msk);
|
|
||||||
write_righe_iva_f1(cg_msk, msk);
|
if (msk.get_numdoc() != 0L && cg_msk.get(F_CODCLIFOR).empty())
|
||||||
set_totale(cg_msk, msk);
|
a.write_clifo(cg_msk, msk);
|
||||||
|
a.write_righe_iva_f1(cg_msk, msk);
|
||||||
|
a.set_totale(cg_msk, msk);
|
||||||
cg_msk.set(FS_RECALC, ""); cg_msk.disable(FS_RDIFFER); cg_msk.disable(FS_MCOMM); cg_msk.disable(FS_NRATE);
|
cg_msk.set(FS_RECALC, ""); cg_msk.disable(FS_RDIFFER); cg_msk.disable(FS_MCOMM); cg_msk.disable(FS_NRATE);
|
||||||
if (write_scad_f1(cg_msk, msk))
|
if (a.write_scad_f1(cg_msk, msk))
|
||||||
app().set_scad_f1(cg_msk);
|
a.set_scad_f1(cg_msk);
|
||||||
}
|
}
|
||||||
// Li riporto anche con il collega in prima nota, e in quel caso solo se i campi non sono gia valorizzati
|
// Li riporto anche con il collega in prima nota, e in quel caso solo se i campi non sono gia valorizzati
|
||||||
if (bring || cg_msk.get(F_NUMDOC).empty())
|
if (bring || cg_msk.get(F_NUMDOCEXT) != msk.get_str_numdoc())
|
||||||
{
|
{
|
||||||
cg_msk.set(F_NUMDOCEXT, msk->get_numdoc());
|
|
||||||
cg_msk.set(F_NUMDOC, msk->get_numdoc().right(7));
|
cg_msk.set(F_NUMDOCEXT, msk.get_str_numdoc());
|
||||||
|
cg_msk.set(F_NUMDOC, format("%-7ld", msk.get_numdoc()));
|
||||||
|
cg_msk.set(F_DATADOC, msk.get_datadoc());
|
||||||
|
cg_msk.set(F_IDDOCSDI, msk.get_str_numdoc());
|
||||||
|
cg_msk.set(F_DATADOCSDI, msk.get_datadoc());
|
||||||
|
cg_msk.disable(F_IDDOCSDI);
|
||||||
|
cg_msk.disable(F_DATADOCSDI);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bring || cg_msk.get(F_DATADOC).empty())
|
|
||||||
cg_msk.set(F_DATADOC, msk->get_datadoc());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrimanota_application::insert_part_scad(TConfig& ini)
|
void TPrimanota_application::insert_part_scad(TConfig& ini) // che cazzo significa la partita 73/001
|
||||||
{
|
{
|
||||||
vector<TToken_string> rif_doc;
|
TArray rif_doc;
|
||||||
int i = 0;
|
TString str = ini.get("NUMLINEA", "23", 0);
|
||||||
ini.set_paragraph("23");
|
|
||||||
|
|
||||||
// Carico nel vettore
|
// Carico nel vettore
|
||||||
while(true)
|
for (int i = 0; str.full(); str = ini.get("NUMLINEA", "23", ++i))
|
||||||
{
|
{
|
||||||
TToken_string doc("", '|');
|
TToken_string doc("", '|');
|
||||||
TString str; str << ini.get("NUMLINEA", nullptr, i, "NULL");
|
|
||||||
if (str != "NULL")
|
|
||||||
{
|
|
||||||
doc.add(str);
|
|
||||||
doc.add(ini.get("DOCRIF", nullptr, i, "NULL"));
|
|
||||||
doc.add(ini.get("DATADOCRIF", nullptr, i, "NULL"));
|
|
||||||
|
|
||||||
rif_doc.insert(rif_doc.end(), doc);
|
doc.add(str);
|
||||||
i++;
|
doc.add(ini.get("DOCRIF", "23", i));
|
||||||
|
doc.add(ini.get("DATADOCRIF", "23", i));
|
||||||
|
rif_doc.add(doc);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Agganciare alla partita del documento di riferimento
|
// Agganciare alla partita del documento di riferimento
|
||||||
if(!rif_doc.empty())
|
if(rif_doc.items() > 0)
|
||||||
{
|
{
|
||||||
is_f1() = true;
|
is_f1() = true;
|
||||||
|
|
||||||
TString query; query << "USE MOV\nSELECT (DATADOC==#DATADOC)";
|
TString query; query << "USE MOV\nSELECT (DATADOC==#DATADOC)";
|
||||||
TISAM_recordset rec(query);
|
TISAM_recordset rec(query);
|
||||||
rec.set_var("#DATADOC", TVariant(TDate(rif_doc[0].get(2))));
|
|
||||||
TString part;
|
TString part;
|
||||||
do
|
|
||||||
|
FOR_EACH_ARRAY_ITEM(rif_doc, r, _obj)
|
||||||
{
|
{
|
||||||
if (rec.get(MOV_NUMDOC).as_string() == "73/001")
|
if (part.blank())
|
||||||
{
|
{
|
||||||
part = rec.get(MOV_PROTIVA).as_string();
|
rec.set_var("#DATADOC", ((TToken_string&)rif_doc[0]).get_date(2));
|
||||||
|
|
||||||
|
for (bool ok = rec.move_first(); ok; ok = rec.move_next())
|
||||||
|
{
|
||||||
|
if (rec.get_string(MOV_NUMDOC) == "73/001")
|
||||||
|
{
|
||||||
|
part = rec.get_string(MOV_PROTIVA);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} while (rec.move_next());
|
} while (rec.move_next());
|
||||||
|
}
|
||||||
|
}
|
||||||
_num_doc_rif_partite = part;
|
_num_doc_rif_partite = part;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4092,9 +4095,10 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
|
|||||||
if (!app().has_module(FPAUT) || key != K_SPACE && key != K_TAB || !check_causale(cg_msk.get(F_CODCAUS)))
|
if (!app().has_module(FPAUT) || key != K_SPACE && key != K_TAB || !check_causale(cg_msk.get(F_CODCAUS)))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
auto msk = std::make_shared<TPro_msk>(cg_msk);
|
TPro_msk * msk = app()._pro_mask;
|
||||||
|
|
||||||
app()._pro_mask = msk;
|
if (msk == nullptr)
|
||||||
|
app()._pro_mask = msk = new TPro_msk(cg_msk);
|
||||||
|
|
||||||
const TString datadoc = cg_msk.get(F_DATADOC);
|
const TString datadoc = cg_msk.get(F_DATADOC);
|
||||||
|
|
||||||
@ -4104,16 +4108,13 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
|
|||||||
msk->field(F_DATESEARCH).show();
|
msk->field(F_DATESEARCH).show();
|
||||||
msk->set(F_DATESEARCH, datadoc);
|
msk->set(F_DATESEARCH, datadoc);
|
||||||
}
|
}
|
||||||
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)
|
||||||
riporta_dati_f1(cg_msk, msk);
|
riporta_dati_f1(cg_msk, *msk);
|
||||||
cg_msk.set(F_PROKEY, msk->get_fpprokeys());
|
cg_msk.set(F_PROKEY, msk->get_fpprokeys());
|
||||||
is_collegato(cg_msk.field(F_COLFPPRO));
|
cg_msk.set(F_COLFPPRO, cg_msk.get(F_PROKEY).full());
|
||||||
cg_msk.set(F_ANNORIF, cg_msk.get(F_ANNOIVA));
|
cg_msk.set(F_ANNORIF, cg_msk.get(F_ANNOIVA));
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4132,11 +4133,11 @@ bool TPrimanota_application::scollega(const bool set)
|
|||||||
|
|
||||||
bool TPrimanota_application::scollega_handler(TMask_field& f, KEY key)
|
bool TPrimanota_application::scollega_handler(TMask_field& f, KEY key)
|
||||||
{
|
{
|
||||||
|
if (app().has_module(FPAUT) && f.running_check(key))
|
||||||
|
{
|
||||||
TMask& cg_msk = f.mask();
|
TMask& cg_msk = f.mask();
|
||||||
|
|
||||||
if (!app().has_module(FPAUT) || key != K_SPACE && key != K_TAB || !check_causale(cg_msk.get(F_CODCAUS)))
|
if (check_causale(cg_msk.get(F_CODCAUS)) && cg_msk.get_bool(F_COLFPPRO))
|
||||||
return true;
|
|
||||||
if (cg_msk.get_bool(F_COLFPPRO))
|
|
||||||
{
|
{
|
||||||
scollega(true);
|
scollega(true);
|
||||||
app().clean_fppro();
|
app().clean_fppro();
|
||||||
@ -4150,103 +4151,81 @@ bool TPrimanota_application::scollega_handler(TMask_field& f, KEY key)
|
|||||||
}
|
}
|
||||||
message_box("Il movimento e' stato scollegato dalla fattura elettronica\nin ingresso, precedentemente associata.");
|
message_box("Il movimento e' stato scollegato dalla fattura elettronica\nin ingresso, precedentemente associata.");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TPrimanota_application::is_collegato(TMask_field& f)
|
bool TPro_msk::load_fppro_mask(TMask & msk)
|
||||||
{
|
|
||||||
TMask& cg_msk = f.mask();
|
|
||||||
const bool has_prokey = !cg_msk.get(F_PROKEY).empty();
|
|
||||||
|
|
||||||
f.set(has_prokey ? "X" : " ");
|
|
||||||
return has_prokey;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TPro_msk::load_fppro_mask(TMask* msk, KEY k)
|
|
||||||
{
|
{
|
||||||
// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
|
// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
|
||||||
if (k != 32)
|
|
||||||
return false;
|
|
||||||
if (!fp_db().sq_is_connect())
|
if (!fp_db().sq_is_connect())
|
||||||
{
|
{
|
||||||
message_box("Attenzione connessione al database non riuscita.\nImpossibile collegarsi ai documenti in entrata.");
|
message_box("Attenzione connessione al database non riuscita.\nImpossibile collegarsi ai documenti in entrata.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int forn = msk->get_int(F_CODCLIFORS);
|
const int forn = msk.get_int(F_CODCLIFORS);
|
||||||
|
|
||||||
if (forn == 0)
|
if (forn == 0)
|
||||||
{
|
{
|
||||||
msk->set(F_ENABSEARCH, "X");
|
msk.set(F_ENABSEARCH, "X");
|
||||||
abilita_piva(msk);
|
abilita_piva();
|
||||||
//message_box("Inserire prima il fornitore");
|
//message_box("Inserire prima il fornitore");
|
||||||
//return false;
|
//return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TString& codfisc = msk->get(F_COFIS);
|
const TString& codfisc = msk.get(F_COFIS);
|
||||||
const TString& stato_piva = msk->get(F_STATOPAIVS);
|
const TString& stato_piva = msk.get(F_STATOPAIVS);
|
||||||
const TString& piva = msk->get(F_PIVAS);
|
const TString& piva = msk.get(F_PIVAS);
|
||||||
TString query;
|
TString query;
|
||||||
TString date = "";
|
TDate date;
|
||||||
|
|
||||||
if (msk->get_bool(F_ENABDATE))
|
if (msk.get_bool(F_ENABDATE))
|
||||||
date = msk->get_date(F_DATESEARCH);
|
date = msk.get_date(F_DATESEARCH);
|
||||||
if(!msk->get_bool(F_ENABSEARCH))
|
if(!msk.get_bool(F_ENABSEARCH))
|
||||||
query = query_fppro(msk->get(F_CODCLIFORS), date);
|
query = query_fppro(msk.get(F_CODCLIFORS), date);
|
||||||
else
|
else
|
||||||
query = query_fppro(stato_piva, piva, date);
|
query = query_fppro(stato_piva, piva, date);
|
||||||
fp_db().sq_set_exec(query, false);
|
fp_db().sq_set_exec(query, false);
|
||||||
|
|
||||||
TSheet_field& sf = msk->sfield(F_SHEETFPPROS);
|
TSheet_field& sf = msk.sfield(F_SHEETFPPROS);
|
||||||
|
const bool show_all = msk.get_bool(F_SHOWALL);
|
||||||
|
|
||||||
sf.hide();
|
sf.reset();
|
||||||
if (sf.items() > 0)
|
|
||||||
sf.destroy();
|
|
||||||
while (fp_db().sq_next())
|
while (fp_db().sq_next())
|
||||||
{
|
{
|
||||||
TString numreg = fp_db().sq_get("PZ_NUMREGCONT");
|
const long numreg = fp_db().sq_get_long("PZ_NUMREGCONT");
|
||||||
const bool show_all = msk->get_bool(F_SHOWALL);
|
|
||||||
|
|
||||||
if (numreg != "0" && !show_all)
|
if (show_all || numreg == 0L)
|
||||||
continue;
|
{
|
||||||
|
|
||||||
TToken_string& row = sf.row(-1);
|
|
||||||
TToken_string keys(fp_db().sq_get("PZ_KEYPRGINVIO"), ';');
|
TToken_string keys(fp_db().sq_get("PZ_KEYPRGINVIO"), ';');
|
||||||
|
|
||||||
keys.add(fp_db().sq_get("PZ_KEYHEADERFATT")); keys.add(fp_db().sq_get("PZ_KEYBODYFATT"));
|
keys.add(fp_db().sq_get("PZ_KEYHEADERFATT")); keys.add(fp_db().sq_get("PZ_KEYBODYFATT"));
|
||||||
row.add("", 0);
|
|
||||||
row.add(fp_db().sq_get("P7_TIPODOC"));
|
const int r = sf.set_row_cell(F_SELFPPROS, "");
|
||||||
row.add(TDate(fp_db().sq_get_date("P1_DATAORARIC")));
|
|
||||||
row.add(TDate(fp_db().sq_get_date("PZ_DATA")));
|
sf.set_row_cell(F_TIPODOCS, fp_db().sq_get("P7_TIPODOC"), r);
|
||||||
row.add(fp_db().sq_get("PQ_IMPTOTDOC"));
|
sf.set_row_cell(F_DATAORARICS, fp_db().sq_get_date("P1_DATAORARIC"), r);
|
||||||
row.add(fppro_db().set_keys(keys).get_ritenute());
|
sf.set_row_cell(F_DATAS, fp_db().sq_get_date("PZ_DATA"), r);
|
||||||
row.add(fp_db().sq_get("PZ_NUMERO"));
|
sf.set_row_cell(F_IMPTOTDOCS, fp_db().sq_get("PQ_IMPTOTDOC"), r);
|
||||||
row.add(fp_db().sq_get("P2_ANADENOMIN"));
|
sf.set_row_cell(F_RITENUTE, fppro_db().set_keys(keys).get_ritenute(), r);
|
||||||
row.add(fp_db().sq_get("P2_FISCIVAPAESE"));
|
sf.set_row_cell(F_NUMEROS, fp_db().sq_get("PZ_NUMERO"), r);
|
||||||
row.add(fp_db().sq_get("P2_FISCIVACOD"));
|
sf.set_row_cell(F_RAGXML, fp_db().sq_get("P2_ANADENOMIN"), r);
|
||||||
row.add(fp_db().sq_get("P2_CODFISCALE"));
|
sf.set_row_cell(F_FISCIVAPAESES, fp_db().sq_get("P2_FISCIVAPAESE"), r);
|
||||||
row.add(fp_db().sq_get("PZ_TIPOPROT"));
|
sf.set_row_cell(F_FISCIVACODS, fp_db().sq_get("P2_FISCIVACOD"), r);
|
||||||
row.add(fp_db().sq_get("PZ_NUMPROT"));
|
sf.set_row_cell(F_CODFISCALES, fp_db().sq_get("P2_CODFISCALE"), r);
|
||||||
row.add(keys);
|
sf.set_row_cell(F_TIPOPROTS, fp_db().sq_get("PZ_TIPOPROT"), r);
|
||||||
|
sf.set_row_cell(F_PROGRESSS, fp_db().sq_get("PZ_NUMPROT"), r);
|
||||||
|
sf.set_row_cell(F_KEYFPPROS, keys, r);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sf.force_update();
|
sf.force_update();
|
||||||
sf.show();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TPro_msk::fppro_handler(TMask_field& f, KEY k)
|
bool TPro_msk::riporta(TMask_field& f)
|
||||||
{
|
{
|
||||||
TMask& msk = f.mask();
|
TMask& msk = f.mask();
|
||||||
|
|
||||||
const bool load = load_fppro_mask(&msk, k);
|
|
||||||
return load;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TPro_msk::riporta_handler(TMask_field& f, KEY k)
|
|
||||||
{
|
|
||||||
if (k != 32)
|
|
||||||
return true;
|
|
||||||
TMask& msk = f.mask();
|
|
||||||
//if (msk.curr_page() != 3)
|
//if (msk.curr_page() != 3)
|
||||||
//return true;
|
//return true;
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
@ -4254,16 +4233,10 @@ bool TPro_msk::riporta_handler(TMask_field& f, KEY k)
|
|||||||
|
|
||||||
FOR_EACH_SHEET_ROW(sf, nr, row)
|
FOR_EACH_SHEET_ROW(sf, nr, row)
|
||||||
{
|
{
|
||||||
if(*row->get(0) == 'X')
|
if(row->get_bool(0))
|
||||||
{
|
{
|
||||||
//TProtocollo protocollo(TDate(row->get(2)).year(), row->get(9), row->get(10));
|
app().pro_mask()->set_doc(sf, nr);
|
||||||
app()._pro_mask->set_doc(row->get(cid2index(F_NUMEROS)), row->get(cid2index(F_DATAS)),
|
_riporta = f.dlg() == DLG_OK;
|
||||||
row->get(cid2index(F_IMPTOTDOCS)), row->get(cid2index(F_RITENUTE)), "", row->get(cid2index(F_KEYFPPROS)),
|
|
||||||
msk.get(F_CODCLIFORS), row->get(cid2index(F_FISCIVACODS)));
|
|
||||||
if (f.dlg() == DLG_OK)
|
|
||||||
app()._pro_mask->_riporta = true;
|
|
||||||
else
|
|
||||||
app()._pro_mask->_riporta = false;
|
|
||||||
ok = true;
|
ok = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -4277,67 +4250,56 @@ bool TPro_msk::riporta_handler(TMask_field& f, KEY k)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TPro_msk::collega_handler(TMask_field& f, KEY k)
|
|
||||||
{
|
|
||||||
return riporta_handler(f, k);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TPro_msk::piva_handler(TMask_field& f, KEY k)
|
|
||||||
{
|
|
||||||
TMask& msk = f.mask();
|
|
||||||
bool ok = true;
|
|
||||||
|
|
||||||
if(k == K_TAB && f.active() && f.focusdirty())
|
|
||||||
{
|
|
||||||
ok = load_fppro_mask(&msk, K_SPACE);
|
|
||||||
}
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TPro_msk::date_handler(TMask_field& f, KEY k)
|
|
||||||
{
|
|
||||||
TMask& msk = f.mask();
|
|
||||||
bool ok = true;
|
|
||||||
|
|
||||||
if (k == K_TAB && f.active() && f.focusdirty())
|
|
||||||
{
|
|
||||||
ok = load_fppro_mask(&msk, K_SPACE);
|
|
||||||
}
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TPro_msk::fppro_selfatt() const
|
void TPro_msk::fppro_selfatt() const
|
||||||
{
|
{
|
||||||
const TMask& mask = *this;
|
const TMask& mask = *this;
|
||||||
TSheet_field& sf = mask.sfield(F_SHEETFPPROS);
|
TSheet_field& sf = mask.sfield(F_SHEETFPPROS);
|
||||||
|
|
||||||
sf.hide();
|
|
||||||
FOR_EACH_SHEET_ROW(sf, nr, row)
|
FOR_EACH_SHEET_ROW(sf, nr, row)
|
||||||
{
|
if (sf.get_bool_row_cell(nr, F_SELFPPROS))
|
||||||
if (*row->get(0) == 'X')
|
sf.set_row_cell(F_SELFPPROS, false, nr);
|
||||||
row->add("", 0);
|
|
||||||
}
|
|
||||||
sf.force_update();
|
sf.force_update();
|
||||||
sf.show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||||
{
|
{
|
||||||
|
TMask & m = o.mask();
|
||||||
|
|
||||||
switch (o.dlg())
|
switch (o.dlg())
|
||||||
{
|
{
|
||||||
|
case DLG_CONFIG:
|
||||||
|
if (e == fe_button)
|
||||||
|
load_fppro_mask(m);
|
||||||
|
break;
|
||||||
|
case DLG_OK:
|
||||||
|
if (e == fe_button)
|
||||||
|
riporta(o);
|
||||||
|
break;
|
||||||
|
case DLG_LINK:
|
||||||
|
if (e == fe_button)
|
||||||
|
riporta(o);
|
||||||
|
break;
|
||||||
|
case F_PIVAS:
|
||||||
|
if (e == fe_modify)
|
||||||
|
load_fppro_mask(m);
|
||||||
|
break;
|
||||||
|
case F_DATESEARCH:
|
||||||
|
if (e == fe_modify)
|
||||||
|
load_fppro_mask(m);
|
||||||
|
break;
|
||||||
case F_SELFPPROS:
|
case F_SELFPPROS:
|
||||||
if (e == fe_modify)
|
if (e == fe_modify)
|
||||||
fppro_selfatt();
|
fppro_selfatt();
|
||||||
break;
|
break;
|
||||||
case F_SHOWALL:
|
case F_SHOWALL:
|
||||||
if (e == fe_modify)
|
if (e == fe_modify)
|
||||||
load_fppro_mask(this, K_SPACE);
|
load_fppro_mask(m);
|
||||||
break;
|
break;
|
||||||
case F_ENABSEARCH:
|
case F_ENABSEARCH:
|
||||||
if (e == fe_modify)
|
if (e == fe_modify)
|
||||||
{
|
{
|
||||||
abilita_piva(this);
|
abilita_piva();
|
||||||
load_fppro_mask(this);
|
load_fppro_mask(m);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case F_ENABDATE:
|
case F_ENABDATE:
|
||||||
@ -4345,7 +4307,7 @@ bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|||||||
{
|
{
|
||||||
field(F_DATESEARCH).show(o.mask().get_bool(F_ENABDATE));
|
field(F_DATESEARCH).show(o.mask().get_bool(F_ENABDATE));
|
||||||
if (!o.mask().get_bool(F_ENABDATE))
|
if (!o.mask().get_bool(F_ENABDATE))
|
||||||
load_fppro_mask(this);
|
load_fppro_mask(m);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -4356,9 +4318,11 @@ bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|||||||
|
|
||||||
bool TPro_msk::is_doc_split()
|
bool TPro_msk::is_doc_split()
|
||||||
{
|
{
|
||||||
for(riga_iva_s const& riga : _righe_iva)
|
FOR_EACH_ARRAY_ITEM(_righe_iva, r, obj)
|
||||||
{
|
{
|
||||||
if (riga.esigibilita == 'S')
|
TToken_string & riga = STRING_TOKEN(obj);
|
||||||
|
|
||||||
|
if (riga.get(FPRI_ESIGIBILITA) == "S")
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -4395,53 +4359,71 @@ void TPro_msk::set_scadenze(const char* fpprokeys)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPro_msk::set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* ritenute, const char* protfppro, const char* fpprokeys, const char* codforn, const char* piva)
|
void TPro_msk::set_doc(TSheet_field & s, int nrow)
|
||||||
|
//long numero, TDate datadoc, real totdoc, real ritenute, const char* protfppro, const char* fpprokeys, long codforn, const char* piva)
|
||||||
{
|
{
|
||||||
_numero = numero;
|
_numero = s.get_long_row_cell(nrow, F_NUMEROS);
|
||||||
_datadoc = datadoc;
|
_str_numero = s.get_str_row_cell(nrow, F_NUMEROS);
|
||||||
_totdoc = abs(totdoc);
|
_datadoc = s.get_date_row_cell(nrow, F_DATAS);
|
||||||
_ritenute = ritenute;
|
_totdoc = abs(s.get_real_row_cell(nrow, F_IMPTOTDOCS));
|
||||||
_protfppro.sset(protfppro);
|
_ritenute = s.get_real_row_cell(nrow, F_RITENUTE);
|
||||||
|
_protfppro.sset("");
|
||||||
|
|
||||||
|
const TString & fpprokeys = s.get_str_row_cell(nrow, F_KEYFPPROS);
|
||||||
|
|
||||||
_fpprokeys = fpprokeys;
|
_fpprokeys = fpprokeys;
|
||||||
_codforn = codforn;
|
|
||||||
_piva = piva;
|
|
||||||
set_righeiva(fpprokeys);
|
set_righeiva(fpprokeys);
|
||||||
set_scadenze(fpprokeys);
|
set_scadenze(fpprokeys);
|
||||||
|
_codforn = s.get_long_row_cell(nrow, F_CODCLIFORS);
|
||||||
|
_piva = s.get_str_row_cell(nrow, F_FISCIVACODS);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
real TPro_msk::get_tot_imp_riva()
|
real TPro_msk::get_tot_imp_riva()
|
||||||
{
|
{
|
||||||
real tot = ZERO;
|
real tot;
|
||||||
|
|
||||||
for(riga_iva_s const& riga : _righe_iva)
|
FOR_EACH_ARRAY_ITEM(_righe_iva, r, obj)
|
||||||
{
|
{
|
||||||
if (riga.imposta > ZERO)
|
TToken_string & riga = STRING_TOKEN(obj);
|
||||||
tot += riga.imponibile;
|
|
||||||
|
tot += riga.get_real(FPRI_IMPONIBILE);
|
||||||
}
|
}
|
||||||
return tot;
|
return tot;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPro_msk::add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib)
|
void TPro_msk::add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib)
|
||||||
{
|
{
|
||||||
_righe_iva.insert(_righe_iva.end(), { imponibile, imposta, aliquota, natura, esigib });
|
TToken_string riga;
|
||||||
|
|
||||||
|
riga.add(imponibile, FPRI_IMPONIBILE);
|
||||||
|
riga.add(imposta, FPRI_IMPOSTA);
|
||||||
|
riga.add(aliquota, FPRI_ALIQUOTA);
|
||||||
|
riga.add(natura, FPRI_NATURA);
|
||||||
|
riga.add(esigib, FPRI_ESIGIBILITA);
|
||||||
|
_righe_iva.add(riga);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPro_msk::add_scad(const TDate& date, const real& importo)
|
void TPro_msk::add_scad(const TDate& date, const real& importo)
|
||||||
{
|
{
|
||||||
_scadenze.insert(_scadenze.end(), { date, importo });
|
TToken_string riga;
|
||||||
|
|
||||||
|
riga.add(date, FPSC_DATA);
|
||||||
|
riga.add(importo, FPSC_IMPORTO);
|
||||||
|
_scadenze.add(riga);
|
||||||
}
|
}
|
||||||
|
|
||||||
TString& TPro_msk::query_fppro(const TString& codforn, const TString& date)
|
TString& TPro_msk::query_fppro(const TString& codforn, const TDate& date)
|
||||||
{
|
{
|
||||||
return query_fppro(codforn, "", "", "", date, "", "", "", true, false);
|
return query_fppro(codforn, "", "", "", date, "", "", "", true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
TString& TPro_msk::query_fppro(const TString& stato_piva, const TString& piva, const TString& date)
|
TString& TPro_msk::query_fppro(const TString& stato_piva, const TString& piva, const TDate& date)
|
||||||
{
|
{
|
||||||
return query_fppro("", stato_piva, piva, "", date, "", "", "", true, true);
|
return query_fppro("", stato_piva, piva, "", date, "", "", "", true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TString& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order, bool piva_research)
|
TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TDate& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order, bool piva_research)
|
||||||
{
|
{
|
||||||
TString id_fornitore;
|
TString id_fornitore;
|
||||||
TString keys;
|
TString keys;
|
||||||
@ -4465,14 +4447,15 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
|
|||||||
id_fornitore << " (PZ_CLIFOR = '" << codforn << "') ";
|
id_fornitore << " (PZ_CLIFOR = '" << codforn << "') ";
|
||||||
}
|
}
|
||||||
|
|
||||||
static TString query;
|
TString & query = query_string();
|
||||||
query.cut(0) << query_string() << "WHERE ";
|
|
||||||
|
query << "WHERE ";
|
||||||
|
|
||||||
if (!id_fornitore.empty())
|
if (!id_fornitore.empty())
|
||||||
{
|
{
|
||||||
query << id_fornitore << " ";
|
query << id_fornitore << " ";
|
||||||
if (!date.empty())
|
if (date.ok())
|
||||||
query << " AND PZ_DATA = '" << TDate(date).date2ansi() << "' ";
|
query << " AND PZ_DATA = '" << date.date2ansi() << "' ";
|
||||||
if (order)
|
if (order)
|
||||||
query << "\nORDER BY P1_DATAORARIC ASC";
|
query << "\nORDER BY P1_DATAORARIC ASC";
|
||||||
query << ";";
|
query << ";";
|
||||||
@ -4484,9 +4467,9 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
|
|||||||
query << " AND " << where_str;
|
query << " AND " << where_str;
|
||||||
query << ";";
|
query << ";";
|
||||||
}
|
}
|
||||||
else if (!date.empty())
|
else if (date.ok())
|
||||||
{
|
{
|
||||||
query << " PZ_DATA = '" << TDate(date).date2ansi() << "' ";
|
query << " PZ_DATA = '" << date.date2ansi() << "' ";
|
||||||
if (order)
|
if (order)
|
||||||
query << "\nORDER BY P1_DATAORARIC ASC, PZ_TIPOPROT ASC, PZ_NUMPROT ASC";
|
query << "\nORDER BY P1_DATAORARIC ASC, PZ_TIPOPROT ASC, PZ_NUMPROT ASC";
|
||||||
query << ";";
|
query << ";";
|
||||||
@ -4501,9 +4484,9 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
|
|||||||
|
|
||||||
TString& TPro_msk::query_string()
|
TString& TPro_msk::query_string()
|
||||||
{
|
{
|
||||||
static TString query;
|
TString & query = get_tmp_string(512);
|
||||||
|
|
||||||
query.cut(0) << "SELECT PZ_CLIFOR, PZ_DATA, CAST(P1_DATAORARIC AS DATE) AS P1_DATAORARIC, P7_TIPODOC, PQ_IMPTOTDOC, PZ_NUMERO, PZ_NUMREGCONT, PZ_TIPOPROT, " <<
|
query << "SELECT PZ_CLIFOR, PZ_DATA, CAST(P1_DATAORARIC AS DATE) AS P1_DATAORARIC, P7_TIPODOC, PQ_IMPTOTDOC, PZ_NUMERO, PZ_NUMREGCONT, PZ_TIPOPROT, " <<
|
||||||
"PZ_NUMPROT, P2_ANADENOMIN, P2_FISCIVAPAESE, P2_FISCIVACOD, P2_CODFISCALE, PZ_KEYPRGINVIO, PZ_KEYHEADERFATT, PZ_KEYBODYFATT\n" <<
|
"PZ_NUMPROT, P2_ANADENOMIN, P2_FISCIVAPAESE, P2_FISCIVACOD, P2_CODFISCALE, PZ_KEYPRGINVIO, PZ_KEYHEADERFATT, PZ_KEYBODYFATT\n" <<
|
||||||
"FROM PAA0200F \nJOIN FPPRO00F\n" << " ON P2_KEYPRGINVIO = PZ_KEYPRGINVIO AND P2_KEYHEADERFATT = PZ_KEYHEADERFATT AND P2_KEYBODYFATT = PZ_KEYBODYFATT\n" <<
|
"FROM PAA0200F \nJOIN FPPRO00F\n" << " ON P2_KEYPRGINVIO = PZ_KEYPRGINVIO AND P2_KEYHEADERFATT = PZ_KEYHEADERFATT AND P2_KEYBODYFATT = PZ_KEYBODYFATT\n" <<
|
||||||
"JOIN PAA0100F \nON P2_KEYPRGINVIO = P1_KEYPRGINVIO AND P2_KEYHEADERFATT = P1_KEYHEADERFATT AND P2_KEYBODYFATT = P1_KEYBODYFATT\n" <<
|
"JOIN PAA0100F \nON P2_KEYPRGINVIO = P1_KEYPRGINVIO AND P2_KEYHEADERFATT = P1_KEYHEADERFATT AND P2_KEYBODYFATT = P1_KEYBODYFATT\n" <<
|
||||||
@ -4512,36 +4495,26 @@ TString& TPro_msk::query_string()
|
|||||||
return query;
|
return query;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPro_msk::abilita_piva(TMask* msk)
|
void TPro_msk::abilita_piva()
|
||||||
{
|
{
|
||||||
if (msk->get_bool(F_ENABSEARCH))
|
const bool on = get_bool(F_ENABSEARCH);
|
||||||
{
|
|
||||||
msk->enable(F_PIVAS);
|
enable(F_PIVAS, on);
|
||||||
msk->enable(F_STATOPAIVS);
|
enable(F_STATOPAIVS, on);
|
||||||
}
|
enable(F_COFIS, on);
|
||||||
else
|
|
||||||
{
|
|
||||||
msk->enable(F_PIVAS, false);
|
|
||||||
msk->enable(F_STATOPAIVS, false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TPro_msk::TPro_msk(TMask& cg_msk) : TAutomask("cg2100t"), _riporta(false), _codforn("")
|
TPro_msk::TPro_msk(TMask& cg_msk) : TAutomask("cg2100t"), _riporta(false), _codforn(0L), _numero(0L)
|
||||||
{
|
{
|
||||||
TMask::set_handler(DLG_CONFIG, fppro_handler);
|
enable(DLG_OK, app().has_module(F1AUT));
|
||||||
TMask::set_handler(DLG_OK, riporta_handler);
|
set(F_CODCLIFORS, cg_msk.get(F_CODCLIFOR));
|
||||||
if (!app().has_module(F1AUT))
|
set(F_COFIS, cg_msk.get(F_COFI));
|
||||||
field(DLG_OK).disable();
|
set(F_STATOPAIVS, cg_msk.get(F_STATOPAIV));
|
||||||
TMask::set_handler(DLG_LINK, collega_handler);
|
set(F_PIVAS, cg_msk.get(F_PIVA));
|
||||||
TMask::set_handler(F_PIVAS, piva_handler);
|
set(F_RAGSOCS, cg_msk.get(F_RAGSOCCF));
|
||||||
TMask::set_handler(F_DATESEARCH, date_handler);
|
|
||||||
TMask::set(F_CODCLIFORS, cg_msk.get(F_CODCLIFOR));
|
|
||||||
TMask::set(F_COFIS, cg_msk.get(F_COFI));
|
|
||||||
TMask::set(F_STATOPAIVS, cg_msk.get(F_STATOPAIV));
|
|
||||||
TMask::set(F_PIVAS, cg_msk.get(F_PIVA));
|
|
||||||
TMask::set(F_RAGSOCS, cg_msk.get(F_RAGSOCCF));
|
|
||||||
set(F_DATESEARCH, TDate(TODAY));
|
set(F_DATESEARCH, TDate(TODAY));
|
||||||
_righe_iva.clear();
|
_righe_iva.destroy();
|
||||||
|
_scadenze.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool& is_f1()
|
bool& is_f1()
|
||||||
@ -4549,3 +4522,4 @@ bool& is_f1()
|
|||||||
static bool is_f1 = false;
|
static bool is_f1 = false;
|
||||||
return is_f1;
|
return is_f1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
181
src/cg/cg2102.h
181
src/cg/cg2102.h
@ -27,15 +27,78 @@
|
|||||||
|
|
||||||
#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
|
||||||
|
|
||||||
class TPro_msk;
|
#define FPRI_IMPONIBILE 0
|
||||||
|
#define FPRI_IMPOSTA 1
|
||||||
|
#define FPRI_ALIQUOTA 2
|
||||||
|
#define FPRI_NATURA 3
|
||||||
|
#define FPRI_ESIGIBILITA 4
|
||||||
|
|
||||||
|
#define FPSC_DATA 0
|
||||||
|
#define FPSC_IMPORTO 1
|
||||||
|
|
||||||
class TDati_mov_auto;
|
class TDati_mov_auto;
|
||||||
|
|
||||||
enum CGMaskType { _query = 0, _no_iva = 1, _iva = 2, _occas = 3};
|
enum CGMaskType { _query = 0, _no_iva = 1, _iva = 2, _occas = 3};
|
||||||
|
|
||||||
|
class TPro_msk : public TAutomask
|
||||||
|
{
|
||||||
|
long _numero;
|
||||||
|
TDate _datadoc;
|
||||||
|
real _totdoc;
|
||||||
|
real _ritenute;
|
||||||
|
TProtocollo _protfppro;
|
||||||
|
TString _fpprokeys;
|
||||||
|
TString _piva;
|
||||||
|
long _codforn;
|
||||||
|
TString_array _righe_iva;
|
||||||
|
TString_array _scadenze;
|
||||||
|
bool _riporta;
|
||||||
|
TString _str_numero;
|
||||||
|
|
||||||
|
// Non permette la selezione multipla
|
||||||
|
void fppro_selfatt() const;
|
||||||
|
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
|
||||||
|
public:
|
||||||
|
bool da_riportare() const { return _riporta; }
|
||||||
|
bool is_doc_split() ;
|
||||||
|
|
||||||
|
void set_righeiva(const char* fpprokeys);
|
||||||
|
void set_scadenze(const char* fpprokeys);
|
||||||
|
void set_doc(TSheet_field & s, int nrow);
|
||||||
|
|
||||||
|
const long get_numdoc() const { return _numero; }
|
||||||
|
const TString & get_str_numdoc() const { return _str_numero; }
|
||||||
|
const TDate & get_datadoc() const { return _datadoc; }
|
||||||
|
const real & get_totdoc() const { return _totdoc; }
|
||||||
|
const real & get_ritenute() const { return _ritenute; }
|
||||||
|
const TString & get_fpprokeys() const { return _fpprokeys; }
|
||||||
|
const long get_codforn() const { return _codforn; }
|
||||||
|
const TString & get_piva() const { return _piva; }
|
||||||
|
const TString_array& get_righeiva() const { return _righe_iva; }
|
||||||
|
const TProtocollo& get_protocollo() const { return _protfppro; }
|
||||||
|
const TString_array& get_scadenze() const { return _scadenze; }
|
||||||
|
real get_tot_imp_riva() ;
|
||||||
|
|
||||||
|
void add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib);
|
||||||
|
void add_scad(const TDate& date, const real& importo);
|
||||||
|
|
||||||
|
static TString& query_fppro(const TString& codforn, const TDate& date);
|
||||||
|
static TString& query_fppro(const TString& stato_piva, const TString& piva, const TDate& date);
|
||||||
|
static TString& query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TDate& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order = true, bool piva_research = false);
|
||||||
|
static TString& query_string();
|
||||||
|
|
||||||
|
void abilita_piva();
|
||||||
|
|
||||||
|
// Carica documenti FPPRO sulla maschera
|
||||||
|
bool riporta(TMask_field& f);
|
||||||
|
bool load_fppro_mask(TMask & msk);
|
||||||
|
|
||||||
|
TPro_msk(TMask& cg_msk);
|
||||||
|
};
|
||||||
|
|
||||||
class TPrimanota_application : public TRelation_application
|
class TPrimanota_application : public TRelation_application
|
||||||
{
|
{
|
||||||
TMovimentoPN* _rel; // Relazione principale
|
TMovimentoPN* _rel; // Relazione principale
|
||||||
@ -90,7 +153,7 @@ class TPrimanota_application : public TRelation_application
|
|||||||
|
|
||||||
TAssoc_array _colori; // Colori delle righe
|
TAssoc_array _colori; // Colori delle righe
|
||||||
bool _isf1;
|
bool _isf1;
|
||||||
shared_ptr<TPro_msk> _pro_mask;
|
TPro_msk * _pro_mask;
|
||||||
bool _is_set_fpcheck;
|
bool _is_set_fpcheck;
|
||||||
int _last_date;
|
int _last_date;
|
||||||
bool _f1_ini;
|
bool _f1_ini;
|
||||||
@ -181,20 +244,19 @@ class TPrimanota_application : public TRelation_application
|
|||||||
|
|
||||||
// Gestione F1
|
// Gestione F1
|
||||||
|
|
||||||
static void write_righe_iva_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
void write_righe_iva_f1(TMask& cg_msk, const TPro_msk & msk);
|
||||||
static bool write_scad_f1(const TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
bool write_scad_f1(const TMask& cg_msk, const TPro_msk & msk);
|
||||||
static void write_clifo(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
void write_clifo(TMask& cg_msk, const TPro_msk & msk);
|
||||||
static void set_totale(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
void set_totale(TMask& cg_msk, TPro_msk & msk);
|
||||||
static void riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
static void riporta_dati_f1(TMask& cg_msk, TPro_msk & msk);
|
||||||
void insert_part_scad(TConfig& ini);
|
void insert_part_scad(TConfig& ini);
|
||||||
// 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);
|
||||||
static bool scollega_handler(TMask_field& f, KEY key);
|
static bool scollega_handler(TMask_field& f, KEY key);
|
||||||
static bool is_collegato(TMask_field& f);
|
|
||||||
static void fppromask_set_handl(TMask* msk);
|
static void fppromask_set_handl(TMask* msk);
|
||||||
static void load_list(TMask* msk, KEY k);
|
void load_list(TMask* msk, KEY k);
|
||||||
static void f1_init_modify(TMask& m, const TRectype& mov);
|
void f1_init(TMask& m, const bool fe_enabled, const bool f1_linked = false);
|
||||||
|
|
||||||
void reset_sheet_row(TSheet_field& s, int n);
|
void reset_sheet_row(TSheet_field& s, int n);
|
||||||
int crea_somma_spese(TImporto& imp);
|
int crea_somma_spese(TImporto& imp);
|
||||||
@ -223,9 +285,10 @@ protected: // TApplication
|
|||||||
static bool scollega(bool set = false);
|
static bool scollega(bool set = false);
|
||||||
// Pulisce il mov e db dai firerimenti FPPRO (in MODE_MOD per edit/delete)
|
// Pulisce il mov e db dai firerimenti FPPRO (in MODE_MOD per edit/delete)
|
||||||
void clean_fppro();
|
void clean_fppro();
|
||||||
// setta variabili prima del controllo has_f1_db
|
// Ha f1 ?
|
||||||
void set_has_f1_db(TMask* m);
|
bool has_f1() const;
|
||||||
bool has_f1_db(TMask* m);
|
// controlla il db
|
||||||
|
bool has_f1_db(const TMask & m);
|
||||||
// Controlli prima di write e rewrite
|
// Controlli prima di write e rewrite
|
||||||
int controlli_f1(const TMask& m);
|
int controlli_f1(const TMask& m);
|
||||||
|
|
||||||
@ -321,7 +384,7 @@ protected:
|
|||||||
real calcola_imp() const;
|
real calcola_imp() const;
|
||||||
|
|
||||||
void add_cgs_tot(TMask& m);
|
void add_cgs_tot(TMask& m);
|
||||||
int set_cgs_row(int n, const TImporto& importo, const TBill& conto, const char* desc, char tipo,
|
int set_cgs_row(int n, TImporto& importo, const TBill& conto, const char* desc, char tipo,
|
||||||
const char* cms = nullptr, const char* fas = nullptr);
|
const char* cms = nullptr, const char* fas = nullptr);
|
||||||
void set_cgs_imp(int n, const TImporto& importo);
|
void set_cgs_imp(int n, const TImporto& importo);
|
||||||
bool add_cgs_imp(int n, const TImporto& importo);
|
bool add_cgs_imp(int n, const TImporto& importo);
|
||||||
@ -400,98 +463,18 @@ public:
|
|||||||
TString_array& pag_rows() { return _pag_rows; }
|
TString_array& pag_rows() { return _pag_rows; }
|
||||||
TImporto get_cgs_imp(int n) const;
|
TImporto get_cgs_imp(int n) const;
|
||||||
|
|
||||||
|
TPro_msk * pro_mask() const { return _pro_mask; }
|
||||||
|
|
||||||
TImporto imposte_split_pay() const;
|
TImporto imposte_split_pay() const;
|
||||||
const TString& num_doc_rif() const { return _num_doc_rif_partite; }
|
const TString& num_doc_rif() const { return _num_doc_rif_partite; }
|
||||||
|
|
||||||
TPrimanota_application();
|
TPrimanota_application();
|
||||||
virtual ~TPrimanota_application() { }
|
virtual ~TPrimanota_application() { safe_delete(_pro_mask); }
|
||||||
};
|
|
||||||
|
|
||||||
class TPro_msk : public TAutomask
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
struct riga_iva_s;
|
|
||||||
struct scadenza_s;
|
|
||||||
private:
|
|
||||||
TString _numero;
|
|
||||||
TDate _datadoc;
|
|
||||||
real _totdoc;
|
|
||||||
real _ritenute;
|
|
||||||
TProtocollo _protfppro;
|
|
||||||
TString _fpprokeys;
|
|
||||||
TString _piva;
|
|
||||||
TString _codforn;
|
|
||||||
vector<riga_iva_s> _righe_iva;
|
|
||||||
vector<scadenza_s> _scadenze;
|
|
||||||
bool _riporta;
|
|
||||||
|
|
||||||
// Handlers per aggancio FPPRO
|
|
||||||
// Bottone carica documenti in maschera FPPRO
|
|
||||||
static bool fppro_handler(TMask_field& f, KEY k);
|
|
||||||
// Bottone riporta doc FPPRO in testata Prima Nota
|
|
||||||
static bool riporta_handler(TMask_field& f, KEY k);
|
|
||||||
static bool collega_handler(TMask_field& f, KEY k);
|
|
||||||
static bool piva_handler(TMask_field& f, KEY k);
|
|
||||||
static bool date_handler(TMask_field& f, KEY k);
|
|
||||||
// Non permette la selezione multipla
|
|
||||||
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;
|
|
||||||
char esigibilita;
|
|
||||||
};
|
|
||||||
struct scadenza_s
|
|
||||||
{
|
|
||||||
TDate data;
|
|
||||||
real importo;
|
|
||||||
};
|
|
||||||
|
|
||||||
bool should_bring_back() const { return _riporta; }
|
|
||||||
bool is_doc_split();
|
|
||||||
|
|
||||||
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* ritenute, const char* protfppro, const char* fpprokeys, const char* codforn, const char* piva);
|
|
||||||
|
|
||||||
TString get_numdoc() const { return _numero; }
|
|
||||||
TDate get_datadoc() const { return _datadoc; }
|
|
||||||
real get_totdoc() const { return _totdoc; }
|
|
||||||
real get_ritenute() const { return _ritenute; }
|
|
||||||
TString get_fpprokeys() const { return _fpprokeys; }
|
|
||||||
TString get_codforn() const { return _codforn; }
|
|
||||||
TString get_piva() const { return _piva; }
|
|
||||||
const vector<riga_iva_s>& get_righeiva() const { return _righe_iva; }
|
|
||||||
TProtocollo& get_protocollo() { return _protfppro; }
|
|
||||||
vector<scadenza_s>& get_scadenze() { return _scadenze; }
|
|
||||||
real get_tot_imp_riva();
|
|
||||||
|
|
||||||
|
|
||||||
void add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib);
|
|
||||||
void add_scad(const TDate& date, const real& importo);
|
|
||||||
|
|
||||||
|
|
||||||
static TString& query_fppro(const TString& codforn, const TString& date);
|
|
||||||
static TString& query_fppro(const TString& stato_piva, const TString& piva, const TString& date);
|
|
||||||
static TString& query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TString& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order = true, bool piva_research = false);
|
|
||||||
static TString& query_string();
|
|
||||||
|
|
||||||
static void abilita_piva(TMask* msk);
|
|
||||||
|
|
||||||
// Carica documenti FPPRO sulla maschera
|
|
||||||
static bool load_fppro_mask(TMask* msk, KEY k = 32);
|
|
||||||
|
|
||||||
TPro_msk() = delete;
|
|
||||||
TPro_msk(TMask& cg_msk);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
bool& is_f1();
|
bool& is_f1();
|
||||||
TString& num_doc_rif();
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef __EXTRA__
|
#ifndef __EXTRA__
|
||||||
inline TPrimanota_application& app()
|
inline TPrimanota_application& app()
|
||||||
|
@ -329,7 +329,7 @@ bool TPrimanota_application::codpag_handler(TMask_field& f, KEY key)
|
|||||||
TMask& m = f.mask();
|
TMask& m = f.mask();
|
||||||
TPrimanota_application& a = app();
|
TPrimanota_application& a = app();
|
||||||
const bool set_scad = a.is_fattura() && m.page_enabled(2); // E' attiva pagina 3
|
const bool set_scad = a.is_fattura() && m.page_enabled(2); // E' attiva pagina 3
|
||||||
if (key == K_ENTER && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->should_bring_back())))
|
if (key == K_ENTER && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->da_riportare())))
|
||||||
{
|
{
|
||||||
if (set_scad && f.empty())
|
if (set_scad && f.empty())
|
||||||
{
|
{
|
||||||
@ -356,7 +356,7 @@ bool TPrimanota_application::codpag_handler(TMask_field& f, KEY key)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key == K_TAB && f.focusdirty() && m.insert_mode() && set_scad && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->should_bring_back())))
|
if (key == K_TAB && f.focusdirty() && m.insert_mode() && set_scad && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->da_riportare())))
|
||||||
a.set_scadenze(m);
|
a.set_scadenze(m);
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
@ -1227,8 +1227,7 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
|
|||||||
// Aggiornamento contopartita
|
// Aggiornamento contopartita
|
||||||
const TImporto old_importo(controsez, old_pag.get_real(PAGSCA_IMPORTO));
|
const TImporto old_importo(controsez, old_pag.get_real(PAGSCA_IMPORTO));
|
||||||
TBill old_conto; old_conto.get(old_pag, true);
|
TBill old_conto; old_conto.get(old_pag, true);
|
||||||
|
TImporto new_importo(controsez, new_pag.get_real(PAGSCA_IMPORTO));
|
||||||
const TImporto new_importo(controsez, new_pag.get_real(PAGSCA_IMPORTO));
|
|
||||||
|
|
||||||
if (old_importo != new_importo || old_conto != new_conto)
|
if (old_importo != new_importo || old_conto != new_conto)
|
||||||
{
|
{
|
||||||
@ -1298,7 +1297,7 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
|
|||||||
const real new_ritenute(new_pag.get(PAGSCA_RITENUTE));
|
const real new_ritenute(new_pag.get(PAGSCA_RITENUTE));
|
||||||
if (old_ritenute != new_ritenute)
|
if (old_ritenute != new_ritenute)
|
||||||
{
|
{
|
||||||
const TImporto grow_ritenute(causale().sezione_ritfis(), new_ritenute - old_ritenute);
|
TImporto grow_ritenute(causale().sezione_ritfis(), new_ritenute - old_ritenute);
|
||||||
const int riga = type2pos(cgrowtype_ritfis);
|
const int riga = type2pos(cgrowtype_ritfis);
|
||||||
|
|
||||||
if (riga < 0)
|
if (riga < 0)
|
||||||
@ -1319,7 +1318,7 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
|
|||||||
const real new_ritsoc(new_pag.get(PAGSCA_RITSOC));
|
const real new_ritsoc(new_pag.get(PAGSCA_RITSOC));
|
||||||
if (old_ritsoc != new_ritsoc)
|
if (old_ritsoc != new_ritsoc)
|
||||||
{
|
{
|
||||||
const TImporto grow_ritenute(causale().sezione_ritsoc(), new_ritsoc-old_ritsoc);
|
TImporto grow_ritenute(causale().sezione_ritsoc(), new_ritsoc-old_ritsoc);
|
||||||
const int riga = type2pos(cgrowtype_ritsoc);
|
const int riga = type2pos(cgrowtype_ritsoc);
|
||||||
|
|
||||||
if (riga < 0)
|
if (riga < 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user