Corretta gestione abbuoni
git-svn-id: svn://10.65.10.50/trunk@1729 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
3efc5de8c8
commit
a7ca6ce82d
@ -113,8 +113,8 @@ bool TGame_mask::scambio_handler(TMask_field& f, KEY k)
|
|||||||
{
|
{
|
||||||
const TGame_mask& gm = (const TGame_mask&)f.mask();
|
const TGame_mask& gm = (const TGame_mask&)f.mask();
|
||||||
const TSheet_field& sheet = gm.scadenze();
|
const TSheet_field& sheet = gm.scadenze();
|
||||||
sheet.swap_columns(103, 109);
|
sheet.swap_columns(103, 110); // Scambia colonne
|
||||||
sheet.swap_columns(104, 110);
|
sheet.swap_columns(104, 111);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -494,7 +494,11 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
|
|||||||
{
|
{
|
||||||
const int old_riga = bill2pos(old_conto, 'I');
|
const int old_riga = bill2pos(old_conto, 'I');
|
||||||
if (old_riga >= 0)
|
if (old_riga >= 0)
|
||||||
sub_cgs_imp(old_riga, old_importo);
|
{
|
||||||
|
const bool empty = sub_cgs_imp(old_riga, old_importo);
|
||||||
|
if (empty && (new_importo.is_zero() || new_conto != old_conto))
|
||||||
|
reset_cgs_row(old_riga);
|
||||||
|
}
|
||||||
|
|
||||||
// Importo della contropartita
|
// Importo della contropartita
|
||||||
if (!new_importo.is_zero())
|
if (!new_importo.is_zero())
|
||||||
@ -510,9 +514,9 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
|
|||||||
// Aggiornamento ritenute
|
// Aggiornamento ritenute
|
||||||
const real old_ritenute(old_pag.get(PAGSCA_RITENUTE));
|
const real old_ritenute(old_pag.get(PAGSCA_RITENUTE));
|
||||||
const real new_ritenute(new_pag.get(PAGSCA_RITENUTE));
|
const real new_ritenute(new_pag.get(PAGSCA_RITENUTE));
|
||||||
const TImporto grow_ritenute(controsez, new_ritenute-old_ritenute);
|
if (old_ritenute != new_ritenute)
|
||||||
if (!grow_ritenute.is_zero())
|
|
||||||
{
|
{
|
||||||
|
const TImporto grow_ritenute(controsez, new_ritenute-old_ritenute);
|
||||||
const riga = type2pos('F');
|
const riga = type2pos('F');
|
||||||
if (riga < 0)
|
if (riga < 0)
|
||||||
{
|
{
|
||||||
@ -520,7 +524,10 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
|
|||||||
set_cgs_row(riga, grow_ritenute, conto_rit, "", 'F');
|
set_cgs_row(riga, grow_ritenute, conto_rit, "", 'F');
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
add_cgs_imp(riga, grow_ritenute);
|
{
|
||||||
|
const bool empty = add_cgs_imp(riga, grow_ritenute);
|
||||||
|
if (empty) reset_cgs_row(riga);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char old_ap, new_ap;
|
char old_ap, new_ap;
|
||||||
@ -537,7 +544,9 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
|
|||||||
{
|
{
|
||||||
const int riga_abb = type2pos(old_ap);
|
const int riga_abb = type2pos(old_ap);
|
||||||
CHECK(riga_abb >= 0, "Chiss'e' fregato gli abbuoni?");
|
CHECK(riga_abb >= 0, "Chiss'e' fregato gli abbuoni?");
|
||||||
sub_cgs_imp(riga_abb, old_abbuono);
|
const bool empty = sub_cgs_imp(riga_abb, old_abbuono);
|
||||||
|
if (empty && new_ap != old_ap)
|
||||||
|
reset_cgs_row(riga_abb);
|
||||||
|
|
||||||
// Sottrae l'abbuono con la sezione invertita dalla riga contabile
|
// Sottrae l'abbuono con la sezione invertita dalla riga contabile
|
||||||
add_cgs_imp(riga_contabile, old_abbuono);
|
add_cgs_imp(riga_contabile, old_abbuono);
|
||||||
@ -560,20 +569,17 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
|
|||||||
if (old_diffcam != new_diffcam)
|
if (old_diffcam != new_diffcam)
|
||||||
{
|
{
|
||||||
const int riga_diffcam = type2pos('C');
|
const int riga_diffcam = type2pos('C');
|
||||||
if (!old_diffcam.is_zero()) // Se c'era una differenza cambi
|
TImporto grow_diffcam(new_diffcam); grow_diffcam -= old_diffcam;
|
||||||
{
|
|
||||||
CHECK(riga_diffcam >= 0, "Chiss'e' fregato la differenza cambi?");
|
|
||||||
sub_cgs_imp(riga_diffcam, old_diffcam);
|
|
||||||
}
|
|
||||||
if (!new_diffcam.is_zero())
|
|
||||||
{
|
|
||||||
if (riga_diffcam < 0)
|
if (riga_diffcam < 0)
|
||||||
{
|
{
|
||||||
TBill conto_diffcam; causale().bill(12, conto_diffcam);
|
TBill conto_diffcam; causale().bill(12, conto_diffcam);
|
||||||
set_cgs_row(riga_diffcam, new_diffcam, conto_diffcam, "", 'C');
|
set_cgs_row(riga_diffcam, grow_diffcam, conto_diffcam, "", 'C');
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
add_cgs_imp(riga_diffcam, new_diffcam);
|
{
|
||||||
|
const bool empty = add_cgs_imp(riga_diffcam, grow_diffcam);
|
||||||
|
if (empty) reset_cgs_row(riga_diffcam);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -643,20 +649,28 @@ bool TPrimanota_application::notify_cgline_deletion(TPartita& partita, long nreg
|
|||||||
{
|
{
|
||||||
bool found = FALSE;
|
bool found = FALSE;
|
||||||
|
|
||||||
for (int r = partita.last(); r > 0; r = partita.pred(r))
|
for (int p = partita.last(); p > 0; p = partita.pred(p))
|
||||||
{
|
{
|
||||||
TRiga_partite& part = partita.riga(r);
|
const TRiga_partite& part = partita.riga(p);
|
||||||
const long reg = part.get_long(PART_NREG);
|
if (part.get_int(PART_TIPOMOV) == 1)
|
||||||
if (reg == nreg) // Se la registrazione corrisponde
|
|
||||||
{
|
{
|
||||||
const int num = part.get_int(PART_NUMRIG);
|
for (int r = part.rate(); r > 0; r--)
|
||||||
if (numrig > 0)
|
|
||||||
{
|
{
|
||||||
|
const TRiga_scadenze& scad = part.rata(r);
|
||||||
|
for (int s = scad.last(); s > 0; s = scad.pred(s))
|
||||||
|
{
|
||||||
|
const TRiga_partite& sum = partita.riga(s);
|
||||||
|
if (sum.get_long(PART_NREG) == nreg &&
|
||||||
|
(numrig == 0 || sum.get_int(PART_NUMRIG) == numrig))
|
||||||
|
{
|
||||||
|
TRectype pag(scad.row(s));
|
||||||
|
pag.zero(PAGSCA_IMPORTO);
|
||||||
|
pag.zero(PAGSCA_IMPORTOVAL);
|
||||||
|
pag.zero(PAGSCA_RITENUTE);
|
||||||
|
notify_edit_pagamento(partita, pag);
|
||||||
|
found = TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else // numrig == 0
|
|
||||||
{
|
|
||||||
found = TRUE; // usata solo da ::remove
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1388,27 +1388,10 @@ bool TRiga_scadenze::modifica_pagamento(const TRectype& new_pag,
|
|||||||
else
|
else
|
||||||
new_abb.valore() = ZERO;
|
new_abb.valore() = ZERO;
|
||||||
|
|
||||||
if (old_abb != new_abb)
|
sum.update(old_abb, new_abb, PART_SEZABB, PART_ABBUONI);
|
||||||
{
|
|
||||||
const TImporto old(sum.sezione(), old_pag.get_real(PART_ABBUONI));
|
|
||||||
TImporto abbuoni(sum.get_char(PART_SEZABB), sum.get_real(PART_ABBUONI));
|
|
||||||
abbuoni -= old;
|
|
||||||
abbuoni += imp;
|
|
||||||
abbuoni.normalize();
|
|
||||||
sum.put(PART_SEZABB, abbuoni.sezione());
|
|
||||||
sum.put(PART_ABBUONI, abbuoni.valore());
|
|
||||||
}
|
|
||||||
|
|
||||||
new_diffcam = calcola_differenza_cambio(TRUE);
|
new_diffcam = calcola_differenza_cambio(TRUE);
|
||||||
if (old_diffcam != new_diffcam)
|
sum.update(old_diffcam, new_diffcam, PART_SEZDIFCAM, PART_DIFFCAM);
|
||||||
{
|
|
||||||
TImporto tot_dc(sum.get_char(PART_SEZDIFCAM), sum.get_real(PART_DIFFCAM));
|
|
||||||
tot_dc -= old_diffcam;
|
|
||||||
tot_dc += new_diffcam;
|
|
||||||
tot_dc.normalize();
|
|
||||||
sum.put(PART_SEZDIFCAM, tot_dc.sezione());
|
|
||||||
sum.put(PART_DIFFCAM, tot_dc.valore());
|
|
||||||
}
|
|
||||||
|
|
||||||
sum.update(old_pag, new_pag, PART_IMPORTO);
|
sum.update(old_pag, new_pag, PART_IMPORTO);
|
||||||
sum.update(old_pag, new_pag, PART_IMPORTOVAL);
|
sum.update(old_pag, new_pag, PART_IMPORTOVAL);
|
||||||
@ -1460,13 +1443,40 @@ int TRiga_partite::ultimo_pagamento(int r) const
|
|||||||
|
|
||||||
bool TRiga_partite::update(const TRectype& vec, const TRectype& nuo, const char* field)
|
bool TRiga_partite::update(const TRectype& vec, const TRectype& nuo, const char* field)
|
||||||
{
|
{
|
||||||
real totale = get_real(field);
|
real totale(get(field));
|
||||||
totale -= vec.get_real(field);
|
totale -= vec.get_real(field);
|
||||||
totale += nuo.get_real(field);
|
totale += nuo.get_real(field);
|
||||||
put(field, totale);
|
put(field, totale);
|
||||||
return !totale.is_zero();
|
return totale.is_zero();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TRiga_partite::update(const TImporto& vec, const TImporto& nuo,
|
||||||
|
const char* sez, const char* val)
|
||||||
|
{
|
||||||
|
bool zero = FALSE;
|
||||||
|
TImporto grow(nuo); grow -= vec; // Variazione al totale
|
||||||
|
|
||||||
|
if (!grow.is_zero())
|
||||||
|
{
|
||||||
|
const char sezione = get_char(sez); // Sezione del totale
|
||||||
|
TImporto totale;
|
||||||
|
if (sezione > ' ') // Se c'era una sezione (e quindi un importo) ...
|
||||||
|
totale.set(sezione, get_real(val)); // ... inizializza il totale
|
||||||
|
else
|
||||||
|
CHECKS(vec.is_zero(), "Sezione errata per l'importo ", val);
|
||||||
|
totale += grow; // incrementa il totale
|
||||||
|
totale.normalize();
|
||||||
|
put(sez, totale.sezione()); // Aggiorna il totale sul record
|
||||||
|
put(val, totale.valore());
|
||||||
|
zero = totale.is_zero();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
zero = get_real(val).is_zero();
|
||||||
|
|
||||||
|
return zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// TPartita
|
// TPartita
|
||||||
|
@ -193,6 +193,9 @@ public:
|
|||||||
const TRectype& row(int r) const { return ((TRecord_array&)_recarr).row(r, FALSE); }
|
const TRectype& row(int r) const { return ((TRecord_array&)_recarr).row(r, FALSE); }
|
||||||
TRectype& row(int r, bool create) { return _recarr.row(r, create); }
|
TRectype& row(int r, bool create) { return _recarr.row(r, create); }
|
||||||
|
|
||||||
|
int last() const { return _recarr.last_row(); }
|
||||||
|
int pred(int r) const { return _recarr.pred_row(r); }
|
||||||
|
|
||||||
TTree_rectype(const TRectype& testata, const TRectype& riga, const char* num);
|
TTree_rectype(const TRectype& testata, const TRectype& riga, const char* num);
|
||||||
TTree_rectype(int testata, int riga, const char* num);
|
TTree_rectype(int testata, int riga, const char* num);
|
||||||
TTree_rectype(const TTree_rectype& t);
|
TTree_rectype(const TTree_rectype& t);
|
||||||
@ -244,6 +247,7 @@ class TRiga_partite : public TTree_rectype
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool update(const TRectype& vec, const TRectype& nuo, const char* field);
|
bool update(const TRectype& vec, const TRectype& nuo, const char* field);
|
||||||
|
bool update(const TImporto& vec, const TImporto& nuo, const char* sez, const char* val);
|
||||||
|
|
||||||
public: // TTree_rectype
|
public: // TTree_rectype
|
||||||
virtual TObject* dup() const { return new TRiga_partite(*this); }
|
virtual TObject* dup() const { return new TRiga_partite(*this); }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user