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

@ -187,8 +187,7 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
pag.set_total(imponibile, imposta, spese);
// 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;
// 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");
int conto = (tipocf == 'C' || tipocf == 'F') ? 0 :
_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 numrig = 1;
@ -228,16 +227,27 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
partita.put("ANNO", anno);
partita.put("NUMPART", numpart);
partita.put("NRIGA", nriga);
bool fromscratch = FALSE;
if (partita.read() == NOERR)
{
// se la maschera contiene importi diversi da quelli
// registrati, o se il codice pagamento e' diverso,
// si riparte da zero usando la modalita' indicata
if (imponibile != partita.get_real("IMPORTO") ||
imposta != partita.get_real("IMPOSTA") ||
spese != partita.get_real("SPESE") ||
pag.code() != partita.get("CODPAG"))
{
// se si e' specificato un codice pagamento diverso si rifa' da capo
if (pag.code() != partita.get("CODPAG"))
fromscratch = TRUE;
// 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") ||
spese != partita.get_real("SPESE"))
{
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();
else
{
@ -253,7 +263,6 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
scadenza.put("SOTTOCONTO", sottoconto);
scadenza.put("ANNO", anno);
scadenza.put("NUMPART", numpart);
scadenza.put("NRIGA", nriga);
scadenza.put("NRATA", i+1);
if (scadenza.read() == NOERR)
@ -263,14 +272,13 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
TDate scad = scadenza.get("DATASCAD");
int tipop = scadenza.get_int("TIPOPAG");
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, ucl, paid);
pag.set_rata(i, importo, scad, tipop, ulc, paid);
}
else break;
}
}
} // for
} //else
}
else
{
@ -299,48 +307,84 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
sh._mask = &ms;
sh._rows = &rows;
set_app_data(&sh);
ms.run();
set_app_data(&sh);
// TBI se modificato riaggiustare i files
// partite e scadenze
// ----------------------------------------
if (pag.dirty() || new_part)
if (ms.run() == K_ENTER)
{
if (new_part)
// se modificato riaggiusta partite e scadenze
if (pag.dirty() || new_part)
{
partita.zero();
partita.put("TIPOCF", tipocf);
partita.put("GRUPPO", gruppo);
partita.put("CONTO", conto);
partita.put("SOTTOCONTO", sottoconto);
partita.put("ANNO", anno);
partita.put("NUMPART", numpart);
partita.put("NRIGA", nriga);
}
// TBI put data on partita
if (new_part) partita.write();
else partita.rewrite();
bool new_scad = FALSE;
for (int i = 0; i < pag.n_rate(); i++)
{
new_scad = FALSE;
scadenza.zero();
scadenza.put("TIPOCF", tipocf);
scadenza.put("GRUPPO", gruppo);
scadenza.put("CONTO", conto);
scadenza.put("SOTTOCONTO", sottoconto);
scadenza.put("ANNO", anno);
scadenza.put("NUMPART", numpart);
scadenza.put("NRIGA", nriga);
scadenza.put("NRATA", i+1);
if (new_part)
{
partita.zero();
partita.put("TIPOCF", tipocf);
partita.put("GRUPPO", gruppo);
partita.put("CONTO", conto);
partita.put("SOTTOCONTO", sottoconto);
partita.put("ANNO", anno);
partita.put("NUMPART", numpart);
partita.put("NRIGA", nriga);
}
// 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 (scadenza.read() != NOERR)
{
new_scad = TRUE;
if (new_part) partita.write();
else partita.rewrite();
bool new_scad = FALSE;
for (int i = 0; i < pag.n_rate(); i++)
{
new_scad = FALSE;
scadenza.zero();
scadenza.put("TIPOCF", tipocf);
scadenza.put("GRUPPO", gruppo);
scadenza.put("CONTO", conto);
scadenza.put("SOTTOCONTO", sottoconto);
scadenza.put("ANNO", anno);
scadenza.put("NUMPART", numpart);
scadenza.put("NRATA", i+1);
if (scadenza.read() != NOERR)
{
new_scad = TRUE;
scadenza.zero();
scadenza.put("TIPOCF", tipocf);
scadenza.put("GRUPPO", gruppo);
scadenza.put("CONTO", conto);
scadenza.put("SOTTOCONTO", sottoconto);
scadenza.put("ANNO", anno);
scadenza.put("NUMPART", numpart);
scadenza.put("NRATA", i+1);
}
// 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();
else scadenza.rewrite();
}
// elimina eventuali altre scadenze oltre l'ultima registrata
for (; !new_scad ; i++)
{
scadenza.zero();
scadenza.put("TIPOCF", tipocf);
scadenza.put("GRUPPO", gruppo);
@ -348,32 +392,12 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
scadenza.put("SOTTOCONTO", sottoconto);
scadenza.put("ANNO", anno);
scadenza.put("NUMPART", numpart);
scadenza.put("NRIGA", nriga);
scadenza.put("NRATA", i+1);
if (scadenza.read() == NOERR)
scadenza.remove();
else new_scad = TRUE;
}
// TBI set everything
if (new_scad) scadenza.write();
else scadenza.rewrite();
}
// elimina eventuali altre scadenze
// oltre l'ultima registrata
for (; !new_scad ; i++)
{
scadenza.zero();
scadenza.put("TIPOCF", tipocf);
scadenza.put("GRUPPO", gruppo);
scadenza.put("CONTO", conto);
scadenza.put("SOTTOCONTO", sottoconto);
scadenza.put("ANNO", anno);
scadenza.put("NUMPART", numpart);
scadenza.put("NRIGA", nriga);
scadenza.put("NRATA", i+1);
if (scadenza.read() == NOERR)
scadenza.remove();
else new_scad = TRUE;
}
}
}

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)
{
_dirty = TRUE;
@ -239,7 +247,46 @@ void Pagamento::set_imprata(int i, real r)
tt.add((const char*)d, 3);
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
{
@ -857,7 +904,12 @@ void Pagamento::set_sheet(TSheet_field& sf, int sscad)
ts->add(tpay_rata(i).string());
ts->add(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

View File

@ -58,6 +58,11 @@ public:
int n_rate() const { return _rate.items(); }
bool is_new() const { return _new; }
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);}
real perc_rata(int n) const { return _rata_rfield(n,1);}
int scad_rata(int n) const { return _rata_ifield(n,0);}
@ -68,6 +73,8 @@ public:
bool mese_commerciale() const { return _mcomm; }
bool rate_differenziate() const { return _rdiff; }
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& code() const { return _code; }
@ -103,7 +110,10 @@ public:
TToken_string& add_rata (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* 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 zap_rate () { _rate.destroy(); }
@ -127,7 +137,7 @@ public:
bool mcomm, bool& need_recalc);
// determina la prossima scadenza
void next_scad(TDate& d, int scad, bool mcomm, int rata);
void next_scad(TDate& d, int scad, bool mcomm, int rata);
// se codtab non e' NULL legge da file (e da' errore se non c'e')
// se si vuole fare un pagamento nuovo si da' il codice con set_code