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

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

View File

@ -371,7 +371,7 @@ STRING F_CODPAG 4
BEGIN BEGIN
PROMPT 1 12 "Codice Pagamento " PROMPT 1 12 "Codice Pagamento "
FIELD CODPAG FIELD CODPAG
FLAGS "UZ" FLAGS "U#"
USE %CPG USE %CPG
INPUT CODTAB F_CODPAG INPUT CODTAB F_CODPAG
DISPLAY "Codice" CODTAB 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.row(r).add(p.string(), 3);
} }
ps.force_update(r); ps.force_update(r);
} }
if (m_impv) 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" ok = yesno_box("Il totale in lire delle rate e' %s mentre\n"
"il totale del documento e' %s.\n" "il totale del documento e' %s.\n"
"Si desidera registrare ugualmente?", "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; int nuova_riga = 0;
if (m.page_enabled(2)) if (anno > 0 && !numpart.blank() && m.page_enabled(2))
{ {
const int tmov = causale().tipomov(); const int tmov = causale().tipomov();
const TString desc(m.get(F_DESCR)); const TString desc(m.get(F_DESCR));
@ -989,9 +988,10 @@ bool TPrimanota_application::showpartite_handler(TMask_field& f, KEY k)
bool ok = TRUE; bool ok = TRUE;
TMask& m = f.mask(); TMask& m = f.mask();
TPrimanota_application& a = app(); TPrimanota_application& a = app();
TMask& cm = a.curr_mask();
const char tipo = m.get(CG_ROWTYPE)[0]; 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) if (tipo == 'K' || is_nota)
{ {
TSheet_field& s = *m.get_sheet(); TSheet_field& s = *m.get_sheet();
@ -1006,7 +1006,7 @@ bool TPrimanota_application::showpartite_handler(TMask_field& f, KEY k)
if (k == K_ENTER) 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 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));

View File

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

View File

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