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);
|
pag.set_total(imponibile, imposta, spese);
|
||||||
|
|
||||||
// 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;
|
||||||
|
|
||||||
@ -228,16 +227,27 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
|
|||||||
partita.put("ANNO", anno);
|
partita.put("ANNO", anno);
|
||||||
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
|
||||||
imposta != partita.get_real("IMPOSTA") ||
|
// registrati si passa la palla al culano
|
||||||
spese != partita.get_real("SPESE") ||
|
else if (imponibile != partita.get_real("IMPORTO") ||
|
||||||
pag.code() != partita.get("CODPAG"))
|
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();
|
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
|
||||||
{
|
{
|
||||||
@ -299,48 +307,84 @@ void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
|
|||||||
sh._mask = &ms;
|
sh._mask = &ms;
|
||||||
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
|
|
||||||
// ----------------------------------------
|
|
||||||
if (pag.dirty() || new_part)
|
|
||||||
{
|
{
|
||||||
if (new_part)
|
// se modificato riaggiusta partite e scadenze
|
||||||
|
if (pag.dirty() || new_part)
|
||||||
{
|
{
|
||||||
partita.zero();
|
if (new_part)
|
||||||
partita.put("TIPOCF", tipocf);
|
{
|
||||||
partita.put("GRUPPO", gruppo);
|
partita.zero();
|
||||||
partita.put("CONTO", conto);
|
partita.put("TIPOCF", tipocf);
|
||||||
partita.put("SOTTOCONTO", sottoconto);
|
partita.put("GRUPPO", gruppo);
|
||||||
partita.put("ANNO", anno);
|
partita.put("CONTO", conto);
|
||||||
partita.put("NUMPART", numpart);
|
partita.put("SOTTOCONTO", sottoconto);
|
||||||
partita.put("NRIGA", nriga);
|
partita.put("ANNO", anno);
|
||||||
}
|
partita.put("NUMPART", numpart);
|
||||||
// TBI put data on partita
|
partita.put("NRIGA", nriga);
|
||||||
|
}
|
||||||
if (new_part) partita.write();
|
// put data on partita
|
||||||
else partita.rewrite();
|
partita.put("TIPOMOV",tmov);
|
||||||
|
partita.put("NREG", nreg);
|
||||||
bool new_scad = FALSE;
|
partita.put("DATAREG",dreg);
|
||||||
|
partita.put("DATADOC",ddoc);
|
||||||
for (int i = 0; i < pag.n_rate(); i++)
|
partita.put("REG", reg);
|
||||||
{
|
partita.put("PROTIVA",protiva);
|
||||||
new_scad = FALSE;
|
partita.put("CODCAUS",codcaus);
|
||||||
scadenza.zero();
|
partita.put("SEZ", sezione);
|
||||||
scadenza.put("TIPOCF", tipocf);
|
partita.put("CODPAG", pag.code());
|
||||||
scadenza.put("GRUPPO", gruppo);
|
partita.put("CODVAL", codval);
|
||||||
scadenza.put("CONTO", conto);
|
partita.put("CAMBIO", cambio);
|
||||||
scadenza.put("SOTTOCONTO", sottoconto);
|
partita.put("IMPORTO",pag.imponibile());
|
||||||
scadenza.put("ANNO", anno);
|
partita.put("IMPOSTA",pag.imposta());
|
||||||
scadenza.put("NUMPART", numpart);
|
partita.put("SPESE", pag.spese());
|
||||||
scadenza.put("NRIGA", nriga);
|
partita.put("NUMRIG", numrig);
|
||||||
scadenza.put("NRATA", i+1);
|
|
||||||
|
|
||||||
if (scadenza.read() != NOERR)
|
if (new_part) partita.write();
|
||||||
{
|
else partita.rewrite();
|
||||||
new_scad = TRUE;
|
|
||||||
|
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.zero();
|
||||||
scadenza.put("TIPOCF", tipocf);
|
scadenza.put("TIPOCF", tipocf);
|
||||||
scadenza.put("GRUPPO", gruppo);
|
scadenza.put("GRUPPO", gruppo);
|
||||||
@ -348,32 +392,12 @@ 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)
|
||||||
|
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)
|
void Pagamento::set_intervallo_rate(int in)
|
||||||
{
|
{
|
||||||
_dirty = TRUE;
|
_dirty = TRUE;
|
||||||
@ -239,7 +247,46 @@ void Pagamento::set_imprata(int i, real r)
|
|||||||
tt.add((const char*)d, 3);
|
tt.add((const char*)d, 3);
|
||||||
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
|
||||||
{
|
{
|
||||||
@ -857,7 +904,12 @@ void Pagamento::set_sheet(TSheet_field& sf, int sscad)
|
|||||||
ts->add(tpay_rata(i).string());
|
ts->add(tpay_rata(i).string());
|
||||||
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
|
||||||
|
@ -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; }
|
||||||
@ -103,7 +110,10 @@ public:
|
|||||||
TToken_string& add_rata (real perc, int day, int type);
|
TToken_string& add_rata (real perc, int day, int type);
|
||||||
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(); }
|
||||||
@ -127,7 +137,7 @@ public:
|
|||||||
bool mcomm, bool& need_recalc);
|
bool mcomm, bool& need_recalc);
|
||||||
|
|
||||||
// determina la prossima scadenza
|
// 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 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
|
// se si vuole fare un pagamento nuovo si da' il codice con set_code
|
||||||
|
Loading…
x
Reference in New Issue
Block a user