Patch level : 12.0 1038
Files correlati : cg2.exe Commento : Corretta registrazione saldaconto note di accredito in split payment
This commit is contained in:
parent
a4a750edf3
commit
e85b8880ad
@ -999,7 +999,7 @@ void TPrimanota_application::init_insert_mode(TMask& m)
|
|||||||
|
|
||||||
void TPrimanota_application::f1_init_modify(TMask& m, const TRectype& mov)
|
void TPrimanota_application::f1_init_modify(TMask& m, const TRectype& mov)
|
||||||
{
|
{
|
||||||
const bool after_data_inizio_fe = mov.get_date(MOV_DATADOC) >= fp_settings().get_data_start_fatt();
|
const bool after_data_inizio_fe = mov.get_date(MOV_DATADOC) >= get_data_start_fatt();
|
||||||
|
|
||||||
if (m.find_by_id(F_COLFPPRO) != nullptr && after_data_inizio_fe)
|
if (m.find_by_id(F_COLFPPRO) != nullptr && after_data_inizio_fe)
|
||||||
m.set(F_COLFPPRO, mov.get(MOV_KEYFPPRO).empty() ? " " : "X");
|
m.set(F_COLFPPRO, mov.get(MOV_KEYFPPRO).empty() ? " " : "X");
|
||||||
|
@ -500,6 +500,27 @@ bool TPrimanota_application::ci_sono_importi(const TSheet_field& s) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TImporto TPrimanota_application::imposte_split_pay() const
|
||||||
|
{
|
||||||
|
TImporto imposte;
|
||||||
|
TSheet_field& cg = app().cgs();
|
||||||
|
|
||||||
|
for (int i = 0; i < cg.items(); i++)
|
||||||
|
{
|
||||||
|
TToken_string& r = cg.row(i);
|
||||||
|
const char tipo = app().row_type(r);
|
||||||
|
|
||||||
|
if (tipo == cgrowtype_IVAsplit)
|
||||||
|
{
|
||||||
|
TImporto imposta; imposta = r;
|
||||||
|
|
||||||
|
if (!imposta.is_zero())
|
||||||
|
imposte += imposta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return imposte;
|
||||||
|
}
|
||||||
|
|
||||||
real TPrimanota_application::calcola_saldo() const
|
real TPrimanota_application::calcola_saldo() const
|
||||||
{
|
{
|
||||||
const bool pag = is_pagamento() && !_as400;
|
const bool pag = is_pagamento() && !_as400;
|
||||||
@ -621,9 +642,10 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
|
|||||||
|
|
||||||
const bool in_valuta = is_true_value(m.get(SK_VALUTA));
|
const bool in_valuta = is_true_value(m.get(SK_VALUTA));
|
||||||
TImporto saldaconto, saldaconto_val;
|
TImporto saldaconto, saldaconto_val;
|
||||||
|
TImporto imposte;
|
||||||
TSheet_field& cg = a.cgs();
|
TSheet_field& cg = a.cgs();
|
||||||
bool empty = true;
|
bool empty = true;
|
||||||
|
|
||||||
for (int i = 0; i < cg.items(); i++)
|
for (int i = 0; i < cg.items(); i++)
|
||||||
{
|
{
|
||||||
TToken_string& r = cg.row(i);
|
TToken_string& r = cg.row(i);
|
||||||
@ -653,8 +675,7 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
|
|||||||
if (!co.empty() && !co.find())
|
if (!co.empty() && !co.find())
|
||||||
return f.error_box("Il conto di contropartita della riga %d non esiste", i+1);
|
return f.error_box("Il conto di contropartita della riga %d non esiste", i+1);
|
||||||
}
|
}
|
||||||
|
empty = false;
|
||||||
empty = false;
|
|
||||||
if (paga || nota)
|
if (paga || nota)
|
||||||
{
|
{
|
||||||
if (tipo == cgrowtype_cliforsc || tipo == cgrowtype_totale || a._as400)
|
if (tipo == cgrowtype_cliforsc || tipo == cgrowtype_totale || a._as400)
|
||||||
@ -662,6 +683,11 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
|
|||||||
const int currig = i+1;
|
const int currig = i+1;
|
||||||
const TImporto speso = a.partite().importo_speso(numreg, currig);
|
const TImporto speso = a.partite().importo_speso(numreg, currig);
|
||||||
|
|
||||||
|
if (nota && m.get_bool(F_SPLITPAY))
|
||||||
|
{
|
||||||
|
imposte = a.imposte_split_pay();
|
||||||
|
importo -= imposte;
|
||||||
|
}
|
||||||
bool errato = importo != speso;
|
bool errato = importo != speso;
|
||||||
if (errato && a._as400 && speso.is_zero())
|
if (errato && a._as400 && speso.is_zero())
|
||||||
errato = false;
|
errato = false;
|
||||||
@ -743,10 +769,10 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
|
|||||||
if ((paga || nota) && !a._as400)
|
if ((paga || nota) && !a._as400)
|
||||||
{
|
{
|
||||||
const char sez(a.causale().sezione(2));
|
const char sez(a.causale().sezione(2));
|
||||||
const TImporto totdoc(sez, m.get_real(F_TOTALE));
|
TImporto totdoc(sez, m.get_real(F_TOTALE)); totdoc += imposte;
|
||||||
bool ok = imptot_error(totdoc, saldaconto, false);
|
bool ok = imptot_error(totdoc, saldaconto, false);
|
||||||
|
|
||||||
if (ok && in_valuta && !saldaconto.is_zero())
|
if (ok && in_valuta && !saldaconto.is_zero()) // non tolgo le imposte perchè penso che lo split payment in valuta non esista
|
||||||
{
|
{
|
||||||
const TImporto totdoc_val(sez, m.get_real(SK_TOTDOCVAL));
|
const TImporto totdoc_val(sez, m.get_real(SK_TOTDOCVAL));
|
||||||
ok = imptot_error(totdoc_val, saldaconto_val, true);
|
ok = imptot_error(totdoc_val, saldaconto_val, true);
|
||||||
@ -2226,7 +2252,7 @@ bool TPrimanota_application::caus_query_handler(TMask_field& f, KEY key)
|
|||||||
|
|
||||||
void TPrimanota_application::check_fppro_fields(TMask& m)
|
void TPrimanota_application::check_fppro_fields(TMask& m)
|
||||||
{
|
{
|
||||||
const bool after_data = m.get_date(F_DATAREG) >= fp_settings().get_data_start_fatt();
|
const bool after_data = m.get_date(F_DATAREG) >= get_data_start_fatt();
|
||||||
|
|
||||||
if (!check_causale(m.get(F_CODCAUS)) || !app().has_module(FPAUT) || !after_data)
|
if (!check_causale(m.get(F_CODCAUS)) || !app().has_module(FPAUT) || !after_data)
|
||||||
{
|
{
|
||||||
|
163
src/cg/cg2102.h
163
src/cg/cg2102.h
@ -31,11 +31,88 @@
|
|||||||
|
|
||||||
#define K_ELIMMAS 0 // Key per eliminazione massima
|
#define K_ELIMMAS 0 // Key per eliminazione massima
|
||||||
|
|
||||||
class TPro_msk;
|
|
||||||
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
|
||||||
|
{
|
||||||
|
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 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; }
|
||||||
|
const TProtocollo& get_protocollo() const { return _protfppro; }
|
||||||
|
const vector<scadenza_s>& 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 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();
|
||||||
|
|
||||||
|
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
|
||||||
@ -400,92 +477,12 @@ public:
|
|||||||
TImporto get_cgs_imp(int n) const;
|
TImporto get_cgs_imp(int n) const;
|
||||||
|
|
||||||
|
|
||||||
|
TImporto imposte_split_pay() const;
|
||||||
|
|
||||||
TPrimanota_application();
|
TPrimanota_application();
|
||||||
virtual ~TPrimanota_application() { }
|
virtual ~TPrimanota_application() { }
|
||||||
};
|
};
|
||||||
|
|
||||||
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();
|
TString& num_doc_rif();
|
||||||
|
|
||||||
|
@ -1154,7 +1154,7 @@ bool TPrimanota_application::showpartite_handler(TMask_field& f, KEY k)
|
|||||||
if (k == K_ENTER)
|
if (k == K_ENTER)
|
||||||
{
|
{
|
||||||
const long curreg = cm.insert_mode() ? NUMREG_PROVVISORIO : cm.get_long(F_NUMREG);
|
const long curreg = cm.insert_mode() ? NUMREG_PROVVISORIO : cm.get_long(F_NUMREG);
|
||||||
const TImporto importo(a.get_cgs_imp(riga));
|
TImporto importo(a.get_cgs_imp(riga));
|
||||||
const TImporto speso(a.partite().importo_speso(curreg, riga+1));
|
const TImporto speso(a.partite().importo_speso(curreg, riga+1));
|
||||||
|
|
||||||
if (tipo == cgrowtype_cliforsc && !speso.is_zero())
|
if (tipo == cgrowtype_cliforsc && !speso.is_zero())
|
||||||
@ -1162,7 +1162,12 @@ bool TPrimanota_application::showpartite_handler(TMask_field& f, KEY k)
|
|||||||
a.disable_cgs_cells(riga, cgrowtype_cliforsc);
|
a.disable_cgs_cells(riga, cgrowtype_cliforsc);
|
||||||
a.cgs().force_update(riga);
|
a.cgs().force_update(riga);
|
||||||
}
|
}
|
||||||
|
if ((tipo == cgrowtype_totale) && is_nota && cm.get_bool(F_SPLITPAY))
|
||||||
|
{
|
||||||
|
const TImporto imposte = a.imposte_split_pay();
|
||||||
|
|
||||||
|
importo -= imposte;
|
||||||
|
}
|
||||||
if (importo != speso)
|
if (importo != speso)
|
||||||
{
|
{
|
||||||
TString msg(128);
|
TString msg(128);
|
||||||
|
@ -788,10 +788,21 @@ void TGame_mask::aggiorna_residuo()
|
|||||||
{
|
{
|
||||||
#ifndef __EXTRA__
|
#ifndef __EXTRA__
|
||||||
_importo = app().get_cgs_imp(_numrig-1); // Importo sulla riga contabile
|
_importo = app().get_cgs_imp(_numrig-1); // Importo sulla riga contabile
|
||||||
|
const TMask & cm = app().curr_mask();
|
||||||
|
|
||||||
|
const bool is_nota = app().causale().tipomov() == 2 && cm.field(F_NUMRIF).active();
|
||||||
|
|
||||||
|
if (is_nota && cm.get_bool(F_SPLITPAY))
|
||||||
|
{
|
||||||
|
const TImporto imposte = app().imposte_split_pay();
|
||||||
|
|
||||||
|
_importo -= imposte;
|
||||||
|
}
|
||||||
_residuo = _importo;
|
_residuo = _importo;
|
||||||
|
|
||||||
TPartite_array& giochi = app().partite();
|
TPartite_array& giochi = app().partite();
|
||||||
const TImporto speso = giochi.importo_speso(_numreg, _numrig);
|
const TImporto speso = giochi.importo_speso(_numreg, _numrig);
|
||||||
|
|
||||||
_residuo -= speso; // Residuo della riga
|
_residuo -= speso; // Residuo della riga
|
||||||
|
|
||||||
const char sez = calcola_sezione(); // Sezione di riferimento
|
const char sez = calcola_sezione(); // Sezione di riferimento
|
||||||
|
@ -1789,6 +1789,7 @@ void TMovimentoPN::update_rev_charge()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int TMovimentoPN::read_mov_rows()
|
int TMovimentoPN::read_mov_rows()
|
||||||
{
|
{
|
||||||
const TRectype& mov = curr();
|
const TRectype& mov = curr();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user