Registrazione partite/scadenze saldaconto
git-svn-id: svn://10.65.10.50/trunk@673 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
85c3d2d34e
commit
291320b3bf
184
cg/cg2104.cpp
184
cg/cg2104.cpp
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user