Registrazione partite/scadenze saldaconto

git-svn-id: svn://10.65.10.50/trunk@673 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1994-11-21 11:47:08 +00:00
parent 85c3d2d34e
commit 291320b3bf
3 changed files with 169 additions and 83 deletions

View File

@ -188,7 +188,6 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
// se c'e' una rateazione gia' registrata // se c'e' una rateazione gia' registrata
// zappettare e settare le rate a mano // zappettare e settare le rate a mano
bool new_part = FALSE; bool new_part = FALSE;
// should never happen but it doesn't hurt // should never happen but it doesn't hurt
@ -217,7 +216,7 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
_rel->cg(0).get_char("GRUPPO"); _rel->cg(0).get_char("GRUPPO");
int conto = (tipocf == 'C' || tipocf == 'F') ? 0 : int conto = (tipocf == 'C' || tipocf == 'F') ? 0 :
_rel->cg(0).get_char("fCONTO"); _rel->cg(0).get_char("fCONTO");
int sottoconto = _rel->cg(0).get_char("SOTTOCONTO"); long sottoconto = _rel->cg(0).get_long("SOTTOCONTO");
int nriga = 1; int nriga = 1;
int numrig = 1; int numrig = 1;
@ -229,15 +228,26 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
partita.put("NUMPART", numpart); partita.put("NUMPART", numpart);
partita.put("NRIGA", nriga); partita.put("NRIGA", nriga);
bool fromscratch = FALSE;
if (partita.read() == NOERR) if (partita.read() == NOERR)
{ {
// se la maschera contiene importi diversi da quelli // se si e' specificato un codice pagamento diverso si rifa' da capo
// registrati, o se il codice pagamento e' diverso, if (pag.code() != partita.get("CODPAG"))
// si riparte da zero usando la modalita' indicata fromscratch = TRUE;
if (imponibile != partita.get_real("IMPORTO") || // se invece la maschera contiene importi diversi da quelli
// registrati si passa la palla al culano
else if (imponibile != partita.get_real("IMPORTO") ||
imposta != partita.get_real("IMPOSTA") || imposta != partita.get_real("IMPOSTA") ||
spese != partita.get_real("SPESE") || spese != partita.get_real("SPESE"))
pag.code() != partita.get("CODPAG")) {
fromscratch = !yesno_box("Gli importi totali sono stati modificati rispetto"
" all'ultima registrazione. Si desidera mantenere"
" comunque la rateazione precedente");
// nel caso, of course, si disabilitano gli automatismi
if(!fromscratch) ms.field(F_RECALC).set("");
}
if (fromscratch)
pag.set_rate_auto(); pag.set_rate_auto();
else else
{ {
@ -253,7 +263,6 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
scadenza.put("SOTTOCONTO", sottoconto); scadenza.put("SOTTOCONTO", sottoconto);
scadenza.put("ANNO", anno); scadenza.put("ANNO", anno);
scadenza.put("NUMPART", numpart); scadenza.put("NUMPART", numpart);
scadenza.put("NRIGA", nriga);
scadenza.put("NRATA", i+1); scadenza.put("NRATA", i+1);
if (scadenza.read() == NOERR) if (scadenza.read() == NOERR)
@ -263,14 +272,13 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
TDate scad = scadenza.get("DATASCAD"); TDate scad = scadenza.get("DATASCAD");
int tipop = scadenza.get_int("TIPOPAG"); int tipop = scadenza.get_int("TIPOPAG");
bool paid = scadenza.get_bool("PAGATA"); bool paid = scadenza.get_bool("PAGATA");
TString ucl(scadenza.get("ULTCLASS")); TString ulc(scadenza.get("ULTCLASS"));
// disable rows if paid pag.set_rata(i, importo, scad, tipop, ulc, paid);
// pag.set_rata(i, importo, scad, tipop, ucl, paid);
} }
else break; else break;
} } // for
} } //else
} }
else else
{ {
@ -300,11 +308,10 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
sh._rows = &rows; sh._rows = &rows;
set_app_data(&sh); set_app_data(&sh);
ms.run();
// TBI se modificato riaggiustare i files if (ms.run() == K_ENTER)
// partite e scadenze {
// ---------------------------------------- // se modificato riaggiusta partite e scadenze
if (pag.dirty() || new_part) if (pag.dirty() || new_part)
{ {
if (new_part) if (new_part)
@ -318,7 +325,22 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
partita.put("NUMPART", numpart); partita.put("NUMPART", numpart);
partita.put("NRIGA", nriga); partita.put("NRIGA", nriga);
} }
// TBI put data on partita // put data on partita
partita.put("TIPOMOV",tmov);
partita.put("NREG", nreg);
partita.put("DATAREG",dreg);
partita.put("DATADOC",ddoc);
partita.put("REG", reg);
partita.put("PROTIVA",protiva);
partita.put("CODCAUS",codcaus);
partita.put("SEZ", sezione);
partita.put("CODPAG", pag.code());
partita.put("CODVAL", codval);
partita.put("CAMBIO", cambio);
partita.put("IMPORTO",pag.imponibile());
partita.put("IMPOSTA",pag.imposta());
partita.put("SPESE", pag.spese());
partita.put("NUMRIG", numrig);
if (new_part) partita.write(); if (new_part) partita.write();
else partita.rewrite(); else partita.rewrite();
@ -335,7 +357,6 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
scadenza.put("SOTTOCONTO", sottoconto); scadenza.put("SOTTOCONTO", sottoconto);
scadenza.put("ANNO", anno); scadenza.put("ANNO", anno);
scadenza.put("NUMPART", numpart); scadenza.put("NUMPART", numpart);
scadenza.put("NRIGA", nriga);
scadenza.put("NRATA", i+1); scadenza.put("NRATA", i+1);
if (scadenza.read() != NOERR) if (scadenza.read() != NOERR)
@ -348,17 +369,20 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
scadenza.put("SOTTOCONTO", sottoconto); scadenza.put("SOTTOCONTO", sottoconto);
scadenza.put("ANNO", anno); scadenza.put("ANNO", anno);
scadenza.put("NUMPART", numpart); scadenza.put("NUMPART", numpart);
scadenza.put("NRIGA", nriga);
scadenza.put("NRATA", i+1); scadenza.put("NRATA", i+1);
} }
// TBI set everything // set everything
scadenza.put("CODPAG", pag.code());
scadenza.put("TIPOPAG", pag.tipo_rata(i));
scadenza.put("ULTCLASS", pag.ulc_rata(i));
scadenza.put("IMPORTOVAL",pag.tpay_rata(i));
scadenza.put("DATASCAD", pag.data_rata(i));
scadenza.put("PAGATA", pag.ratapagata(i));
if (new_scad) scadenza.write(); if (new_scad) scadenza.write();
else scadenza.rewrite(); else scadenza.rewrite();
} }
// elimina eventuali altre scadenze // elimina eventuali altre scadenze oltre l'ultima registrata
// oltre l'ultima registrata
for (; !new_scad ; i++) for (; !new_scad ; i++)
{ {
scadenza.zero(); scadenza.zero();
@ -368,7 +392,6 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
scadenza.put("SOTTOCONTO", sottoconto); scadenza.put("SOTTOCONTO", sottoconto);
scadenza.put("ANNO", anno); scadenza.put("ANNO", anno);
scadenza.put("NUMPART", numpart); scadenza.put("NUMPART", numpart);
scadenza.put("NRIGA", nriga);
scadenza.put("NRATA", i+1); scadenza.put("NRATA", i+1);
if (scadenza.read() == NOERR) if (scadenza.read() == NOERR)
@ -377,3 +400,4 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
} }
} }
} }
}

View File

@ -28,6 +28,14 @@ const char* Pagamento::_rata_sfield(int n, int f) const
} }
bool Pagamento::ratapagata(int n)
{
TToken_string& t = (TToken_string&)_rate[n];
return t.items() > 6;
}
void Pagamento::set_intervallo_rate(int in) void Pagamento::set_intervallo_rate(int in)
{ {
_dirty = TRUE; _dirty = TRUE;
@ -240,6 +248,45 @@ void Pagamento::set_imprata(int i, real r)
tt.add(r.string(), 4); tt.add(r.string(), 4);
} }
TToken_string& Pagamento::set_rata(int index, real howmuch,
TDate& date, int type,const char* ulc, bool pagato)
{
// calcola percentuali e scadenze a partire dagli importi
bool nwr = FALSE;
TToken_string* tt = (TToken_string*)_rate.objptr(index);
if (nwr = (tt == NULL)) tt = new TToken_string(16);
TDate oldd = index > 0 ? data_rata(index -1) : _inizio;
int day = date - oldd;
real toshare(_tpr == 0 ? _firstr : _secndr);
real perc = _tpr > 0 ? 0.0 : howmuch/toshare;
perc.round(2);
tt->add(day,0); // scadenza
tt->add(perc.string(),1); // percentuale
tt->add(type,2); // tipo
tt->add(date.string(),3);
tt->add(howmuch.string(),4);
tt->add(ulc,5);
if (pagato) tt->add("X",6);
if (!nwr)
{
if (index > _rate.items())
{
error_box("Rate non contigue");
delete tt;
}
}
else
{
_rate.add(tt,index);
_dirty = TRUE;
}
return *tt;
}
word Pagamento::validate() const word Pagamento::validate() const
{ {
@ -858,6 +905,11 @@ void Pagamento::set_sheet(TSheet_field& sf, int sscad)
ts->add(tipo_rata(i)); ts->add(tipo_rata(i));
ts->add(desc_tipo(tipo_rata(i))); ts->add(desc_tipo(tipo_rata(i)));
sf.row(-1) = (*ts); sf.row(-1) = (*ts);
if (ratapagata(i))
{
sf.disable_cell(1,1); // percentuale
sf.disable_cell(1,2); // importo
}
} }
} }
else if (_rate.items() > 0) // not inited: set edit sheet else if (_rate.items() > 0) // not inited: set edit sheet

View File

@ -58,6 +58,11 @@ public:
int n_rate() const { return _rate.items(); } int n_rate() const { return _rate.items(); }
bool is_new() const { return _new; } bool is_new() const { return _new; }
bool dirty() const { return _dirty; } bool dirty() const { return _dirty; }
real imponibile() const { return _imponibile; }
real imposta() const { return _imposta; }
real spese() const { return _spese; }
int tipo_rata(int n) const { return _rata_ifield(n,2);} int tipo_rata(int n) const { return _rata_ifield(n,2);}
real perc_rata(int n) const { return _rata_rfield(n,1);} real perc_rata(int n) const { return _rata_rfield(n,1);}
int scad_rata(int n) const { return _rata_ifield(n,0);} int scad_rata(int n) const { return _rata_ifield(n,0);}
@ -68,6 +73,8 @@ public:
bool mese_commerciale() const { return _mcomm; } bool mese_commerciale() const { return _mcomm; }
bool rate_differenziate() const { return _rdiff; } bool rate_differenziate() const { return _rdiff; }
int tipo_prima_rata() const { return _tpr; } int tipo_prima_rata() const { return _tpr; }
// mi scuso per la mancanza di underscore, ma mi piaceva cosi'
bool ratapagata(int n);
const TString& name() const { return _name; } const TString& name() const { return _name; }
const TString& code() const { return _code; } const TString& code() const { return _code; }
@ -104,6 +111,9 @@ public:
TToken_string& set_rata (int index, real perc, int day, int type, TToken_string& set_rata (int index, real perc, int day, int type,
const char* ulc = NULL, const char* imp = NULL, const char* ulc = NULL, const char* imp = NULL,
const char* data = NULL); const char* data = NULL);
// questa calcola percentuali e scadenze a partire dagli importi
TToken_string& set_rata (int index, real howmuch, TDate& date, int type,
const char* ulc, bool pagato);
void remove_rata(int r); void remove_rata(int r);
void zap_rate () { _rate.destroy(); } void zap_rate () { _rate.destroy(); }