Corretta gestione saldaconto in prima nota

git-svn-id: svn://10.65.10.50/trunk@2611 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1996-02-19 14:04:36 +00:00
parent b41f83ac9d
commit 054348d896
5 changed files with 77 additions and 62 deletions

View File

@ -622,7 +622,8 @@ bool TPrimanota_application::test_swap(bool ritsoc)
int TPrimanota_application::read(TMask& m)
{
{
m.reset(); // Azzera campi e relativi dirty = 3
m.autoload(_rel); // Carica testata
const long numreg = _rel->curr().get_long(MOV_NUMREG);

View File

@ -371,7 +371,7 @@ STRING F_CODPAG 4
BEGIN
PROMPT 1 12 "Codice Pagamento "
FIELD CODPAG
FLAGS "UZ"
FLAGS "U#"
USE %CPG
INPUT CODTAB F_CODPAG
DISPLAY "Codice" CODTAB

View File

@ -180,7 +180,6 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k)
ps.row(r).add(p.string(), 3);
}
ps.force_update(r);
}
if (m_impv)
{
@ -278,7 +277,7 @@ bool TPrimanota_application::pag_sheet_handler(TMask_field& f, KEY key)
ok = yesno_box("Il totale in lire delle rate e' %s mentre\n"
"il totale del documento e' %s.\n"
"Si desidera registrare ugualmente?",
(const char *)is, (const char *)ts);
(const char*)is, (const char*)ts);
}
}
}
@ -858,7 +857,7 @@ void TPrimanota_application::write_scadenze(const TMask& m)
int nuova_riga = 0;
if (m.page_enabled(2))
if (anno > 0 && !numpart.blank() && m.page_enabled(2))
{
const int tmov = causale().tipomov();
const TString desc(m.get(F_DESCR));
@ -989,9 +988,10 @@ bool TPrimanota_application::showpartite_handler(TMask_field& f, KEY k)
bool ok = TRUE;
TMask& m = f.mask();
TPrimanota_application& a = app();
TMask& cm = a.curr_mask();
const char tipo = m.get(CG_ROWTYPE)[0];
const bool is_nota = tipo == 'T' && a.causale().tipomov() == 2 && m.field(F_NUMRIF).active();
const bool is_nota = tipo == 'T' && a.causale().tipomov() == 2 && cm.field(F_NUMRIF).active();
if (tipo == 'K' || is_nota)
{
TSheet_field& s = *m.get_sheet();
@ -1006,7 +1006,7 @@ bool TPrimanota_application::showpartite_handler(TMask_field& f, KEY k)
if (k == K_ENTER)
{
const long curreg = a.curr_mask().get_long(F_NUMREG);
const long curreg = cm.get_long(F_NUMREG);
const TImporto importo(a.get_cgs_imp(riga));
const TImporto speso(a.partite().importo_speso(curreg, riga+1));

View File

@ -784,7 +784,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
const int lastrow = game->last();
if (lastrow > 0 && prima_valuta.in_lire())
if (lastrow > 0)
prima_valuta.get(game->riga(lastrow));
const bool in_valuta = prima_valuta.in_valuta();
@ -843,7 +843,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
row.add(sum.get(PART_DATADOC));
row.add(sum.get(PART_DATAPAG));
gm.add_descrizione(row, sum);
TImporto imp(sez, pag.get_real(PAGSCA_IMPORTO));
const TImporto imp(sez, pag.get_real(PAGSCA_IMPORTO));
if (in_valuta)
{
gm.add_importo(row, imp);
@ -860,46 +860,57 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
row.add("");
row.add(sum.get(PART_TIPOMOV));
row.add(pa);
}
const TImporto rit(scad.importo_pagato(FALSE, 0x8));
if (!rit.is_zero())
{
TToken_string& rrit = scadenze.row(scadenze.add(""));
rrit.add("Ritenute professionali", 4);
gm.add_importo(rrit, rit, FALSE);
}
TImporto abb(scad.importo_pagato(TRUE, 0x2));
if (!abb.is_zero())
{
TToken_string& rabb = scadenze.row(scadenze.add(""));
rabb.add("Abbuoni ", 4);
abb.normalize();
rabb << (abb.sezione() == 'D' ? "attivi" : "passivi");
if (in_valuta)
// Le ritenute non possono esistere in valuta
if (!in_valuta)
{
gm.add_importo(rabb, scad.importo_pagato(FALSE, 0x2), FALSE);
gm.add_importo(rabb, abb, TRUE);
const TImporto rit(sez, pag.get_real(PAGSCA_RITENUTE));
if (!rit.is_zero())
{
TToken_string& rrit = scadenze.row(scadenze.add(""));
rrit.add("Ritenute professionali", 4);
gm.add_importo(rrit, rit, FALSE);
}
}
else
// Gli abbuoni e le differenze cambio esistono solo se e' a saldo
if (pag.get_char(PAGSCA_ACCSAL) == 'S')
{
gm.add_importo(rabb, abb, FALSE);
rabb.add("");
}
}
const TImporto abb(sez, pag.get_real(PAGSCA_ABBUONI));
if (!abb.is_zero())
{
TToken_string& rabb = scadenze.row(scadenze.add(""));
const char tipo_abb = pag.get_char(PAGSCA_PASSATT);
rabb.add("Abbuoni ", 4);
rabb << (tipo_abb == 'A' ? "attivi" : "passivi");
if (in_valuta)
{
TImporto abb_lit = abb;
prima_valuta.val2lit(abb_lit);
gm.add_importo(rabb, abb_lit, FALSE);
gm.add_importo(rabb, abb, TRUE);
}
else
{
gm.add_importo(rabb, abb, FALSE);
rabb.add("");
}
}
// Le differenze cambio possono esistere solo in valuta
if (in_valuta)
{
const TImporto diff(sez, pag.get_real(PAGSCA_DIFFCAM));
if (!diff.is_zero())
{
TToken_string& rdiff = scadenze.row(scadenze.add(""));
rdiff.add("Differenza cambio", 4);
gm.add_importo(rdiff, diff);
}
}
if (in_valuta)
{
TImporto diff(scad.importo_pagato(FALSE, 0x4));
if (!diff.is_zero())
{
TToken_string& rdiff = scadenze.row(scadenze.add(""));
rdiff.add("Differenza cambio", 4);
gm.add_importo(rdiff, diff);
}
}
} // Il pagamento era a saldo
} // Fine ciclo sui pagamenti della rata
TToken_string& rsal = scadenze.row(scadenze.add(""));
rsal.add("Saldo rata ", 4); rsal << ra;
@ -925,7 +936,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
{
const TRectype& pag = unas.row(pa);
const TRiga_partite& sum = game->riga(pa);
TImporto imp(sum.sezione(), ZERO);
const char sez = sum.sezione();
TToken_string& row = scadenze.row(scadenze.add(""));
row.add(pag.get(PAGSCA_NRIGA));
@ -933,19 +944,18 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
row.add(sum.get(PART_DATADOC));
row.add(sum.get(PART_DATAPAG));
gm.add_descrizione(row, sum);
TImporto i(sum.sezione(), pag.get_real(PAGSCA_IMPORTO));
i.valore() += pag.get_real(PAGSCA_RITENUTE);
i.normalize();
gm.add_importo(row, i);
tot_lit += i;
TImporto imp(sez, pag.get_real(PAGSCA_IMPORTO));
gm.add_importo(row, imp);
tot_lit += imp;
const real& impval = pag.get_real(PAGSCA_IMPORTOVAL);
if (!impval.is_zero())
{
i.set(sum.sezione(), impval);
i.normalize();
gm.add_importo(row, i, TRUE);
tot_val += i;
imp.set(sum.sezione(), impval);
imp.normalize();
gm.add_importo(row, imp, TRUE);
tot_val += imp;
}
else
row.add("");
@ -955,6 +965,14 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
row.add("");
row.add(sum.get(PART_TIPOMOV));
row.add(pa);
const TImporto rit(sez, pag.get_real(PAGSCA_RITENUTE));
if (!rit.is_zero())
{
TToken_string& row = scadenze.row(scadenze.add(""));
row.add("Ritenute professionali", 4);
tot_lit += rit;
}
}
if (lastrow > 0)

View File

@ -1500,15 +1500,11 @@ bool TPartita::chiusa(bool update)
if (update)
{
const TImporto saldo = calcola_saldo(TRUE); // Saldo in valuta
const bool ora_chiusa = saldo.is_zero();
if (chiusa != ora_chiusa)
chiusa = saldo.is_zero();
for (int p = last(); p > 0; p = pred(p))
{
chiusa = ora_chiusa;
for (int p = last(); p > 0; p = pred(p))
{
TRiga_partite& part = riga(p);
part.put(PART_CHIUSA, chiusa);
}
TRiga_partite& part = riga(p);
part.put(PART_CHIUSA, chiusa);
}
}