Tabella pagamenti ok

git-svn-id: svn://10.65.10.50/trunk@323 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1994-10-06 11:06:26 +00:00
parent c2d3477970
commit aa67d81204
6 changed files with 685 additions and 663 deletions

View File

@ -114,13 +114,17 @@ int BA3700_application::read(TMask& m)
shuttle._pag = _pag = new Pagamento(code); shuttle._pag = _pag = new Pagamento(code);
_pag->set_sheet(*_cs, ir); _pag->set_sheet(*_cs, ir);
if (_pag->n_rate() > 1) if (_pag->n_rate() > 1)
_interv_rate = _pag->scad_rata(1) - _pag->scad_rata(0); _interv_rate = _pag->scad_rata(_pag->n_rate() - 1);
TArray* arr = new TArray; TArray* arr = new TArray;
if (shuttle._rws != NULL) delete shuttle._rws; if (shuttle._rws != NULL) delete shuttle._rws;
(*arr) = _cs->rows_array(); (*arr) = _cs->rows_array();
shuttle._rws = arr; shuttle._rws = arr;
// shuttle._msk->field(F_INT_RATE).set(format("%d",_interv_rate));
shuttle._msk->field(F_NUM_RATE).set(format("%d",_pag->n_rate()));
shuttle._msk->field(F_RATE_DIFF).set(_pag->rate_differenziate() ? "1" : "2");
return NOERR; return NOERR;
} }
@ -135,6 +139,8 @@ void BA3700_application::init_insert_mode(TMask& m)
shuttle._rws = arr; shuttle._rws = arr;
shuttle._msk->field(F_INT_RATE).set("30"); shuttle._msk->field(F_INT_RATE).set("30");
shuttle._msk->field(F_INIZIOSCAD).set("F"); shuttle._msk->field(F_INIZIOSCAD).set("F");
shuttle._msk->field(F_NUM_RATE).set("1");
shuttle._msk->field(F_RATE_DIFF).set("2");
} }
void BA3700_application::init_query_mode(TMask& m) void BA3700_application::init_query_mode(TMask& m)
@ -174,7 +180,7 @@ bool BA3700_application::rate_differenziate(TMask_field& f, KEY k)
// se erano differenziate e non lo sono piu' occorre riaggiustare // se erano differenziate e non lo sono piu' occorre riaggiustare
// il riaggiustabile; altrimenti si lascia cosi' // il riaggiustabile; altrimenti si lascia cosi'
// pag->set_rate_differenziate() // pag->set_rate_differenziate()
// if (k != K_ENTER) return FALSE; if (k != K_TAB) return TRUE;
sht* s = (sht*)get_app_data(); sht* s = (sht*)get_app_data();
Pagamento* pag = s->_pag; Pagamento* pag = s->_pag;
@ -229,8 +235,8 @@ bool BA3700_application::numero_rate(TMask_field& f, KEY k)
TSheet_field* shf = s->_sht; TSheet_field* shf = s->_sht;
TMask* msk = s->_msk; TMask* msk = s->_msk;
TArray* rws = s->_rws; TArray* rws = s->_rws;
int nr = msk->get_int(F_NUM_RATE);
if (!pag || msk->get(F_NUM_RATE).empty()) return TRUE; if (!pag || nr == pag->n_rate() || msk->get(F_NUM_RATE).empty()) return TRUE;
int ir = msk->get_int(F_INT_RATE); int ir = msk->get_int(F_INT_RATE);
if (ir == 0) ir = -1; if (ir == 0) ir = -1;
@ -240,6 +246,8 @@ bool BA3700_application::numero_rate(TMask_field& f, KEY k)
pag->set_sheet(*shf); pag->set_sheet(*shf);
(*rws) = shf->rows_array(); (*rws) = shf->rows_array();
} }
msk->field(F_NUM_RATE).set(format("%d",pag->n_rate()));
return TRUE; return TRUE;
} }
@ -288,8 +296,6 @@ bool BA3700_application::sheet_action(int r, KEY k)
TToken_string ts(36), ns(36); TToken_string ts(36), ns(36);
bool recalc = TRUE; bool recalc = TRUE;
// TBI sistemare per valori da 1 a 4
int rdiff = msk->get_int(F_RATE_DIFF);
switch (k) switch (k)
{ {
@ -304,11 +310,11 @@ bool BA3700_application::sheet_action(int r, KEY k)
newt = ns.get(2); newt = ns.get(2);
// qui viene il bello, si fa per dire // qui viene il bello, si fa per dire
if (strcmp(ts.get(0),news) != 0) // modificata scadenza if (ts.get_int(0) != atoi(news)) // modificata scadenza
{ {
mod = m_scad = TRUE; mod = m_scad = TRUE;
} }
if (strcmp(ts.get(1),newp) != 0) // modificata percentuale if (real(ts.get(1)) != real(newp)) // modificata percentuale
{ {
mod = m_perc = TRUE; mod = m_perc = TRUE;
} }
@ -335,6 +341,7 @@ bool BA3700_application::sheet_action(int r, KEY k)
if (mod && recalc) if (mod && recalc)
{ {
// ricalcola sheet come sai fare tu // ricalcola sheet come sai fare tu
int rdiff = atoi(msk->get(F_RATE_DIFF));
ahiahi = pag->recalc_rate(r, m_perc, ahiahi = pag->recalc_rate(r, m_perc,
(m_perc ? (const char*)newp : NULL), (m_perc ? (const char*)newp : NULL),
(m_scad ? (const char*)news : NULL), (m_scad ? (const char*)news : NULL),
@ -342,8 +349,9 @@ bool BA3700_application::sheet_action(int r, KEY k)
rdiff, rdiff,
pag->mese_commerciale(), pag->mese_commerciale(),
need_recalc); need_recalc);
// see if rdiff changed // see if parameters changed
// msk->field(F_RDIFFER).set(pag->rate_differenziate() ? "1" : "2"); msk->field(F_RATE_DIFF).set(pag->rate_differenziate() ? "1" : "2");
msk->field(F_MESECOMM).set(pag->mese_commerciale() ? "X" : "");
} }
if (!recalc) if (!recalc)
{ {
@ -383,6 +391,8 @@ else if (recalc && mod && need_recalc)
rws->destroy(); rws->destroy();
(*rws) = shf->rows_array(); (*rws) = shf->rows_array();
} }
msk->field(F_NUM_RATE).set(format("%d", pag->n_rate()));
} }
return doit; return doit;
@ -392,20 +402,25 @@ return doit;
int BA3700_application::rewrite(const TMask& m) int BA3700_application::rewrite(const TMask& m)
{ {
TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS); TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS);
return _pag->rewrite(tab_rpg); const int err = _pag->rewrite(tab_rpg);
if (err != NOERR) return err;
m.autosave(_rel);
return _rel->lfile().rewrite();
} }
int BA3700_application::write(const TMask& m) int BA3700_application::write(const TMask& m)
{ {
TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS); TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS);
return _pag->write(tab_rpg); const int err = _pag->write(tab_rpg);
if (err != NOERR) return err;
m.autosave(_rel);
return _rel->lfile().write();
} }
bool BA3700_application::remove() bool BA3700_application::remove()
{ {
TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS); TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS);
_pag->remove(tab_rpg); return _pag->remove(tab_rpg) == NOERR && _rel->lfile().remove() == NOERR;
return TRUE;
} }
int ba3700(int argc, char* argv[]) int ba3700(int argc, char* argv[])

View File

@ -79,8 +79,8 @@ BEGIN
PROMPT 35 6 " Rate " PROMPT 35 6 " Rate "
ITEM "1|Differenziate" ITEM "1|Differenziate"
ITEM "2|Uguali" ITEM "2|Uguali"
ITEM "1|Uguali dall'ultima modificata" ITEM "3|Uguali dall'ultima modificata"
ITEM "1|Uguali finche' possibile" ITEM "4|Uguali finche' possibile"
/* FIELD %CPG->B1 */ /* FIELD %CPG->B1 */
END END
@ -114,7 +114,6 @@ NUMBER 101 4
BEGIN BEGIN
PROMPT 4 1 "Numero giorni " PROMPT 4 1 "Numero giorni "
/* FIELD %RPG->I0 */ /* FIELD %RPG->I0 */
VALIDATE NOT_EMPTY_FUNC
END END
NUMBER 102 8 0 NUMBER 102 8 0

View File

@ -300,11 +300,6 @@ void TPrimanota_application::init_mask(TMask& m)
void TPrimanota_application::init_query_mode(TMask& m) void TPrimanota_application::init_query_mode(TMask& m)
{ {
<<<<<<< cg2100.cpp
read_firm_params();
enable_menu_item(M_FILE_PRINT);
=======
>>>>>>> 1.22
m.enable(DLG_NEWREC); m.enable(DLG_NEWREC);
} }

View File

@ -59,11 +59,11 @@ bool TPrimanota_application::pag_notify(int r, KEY k)
{ {
mod = m_scad = TRUE; mod = m_scad = TRUE;
} }
if (strcmp(ts.get(1),newp) != 0) // modificata percentuale if (real(ts.get(1)) != real(newp)) // modificata percentuale
{ {
mod = m_perc = TRUE; mod = m_perc = TRUE;
} }
if (strcmp(ts.get(2),newi) != 0) // modificato importo if (real(ts.get(2)) != real(newi)) // modificato importo
{ {
if ((recalc && !m_perc) || (!recalc)) // se si modifica la percentuale l'importo non viene cagato if ((recalc && !m_perc) || (!recalc)) // se si modifica la percentuale l'importo non viene cagato
{ {

View File

@ -36,7 +36,8 @@ void Pagamento::set_intervallo_rate(int in)
for (int i = 0; i < n_rate(); i++) for (int i = 0; i < n_rate(); i++)
{ {
TToken_string& ts = rata(i); TToken_string& ts = rata(i);
ts.add(i == 0 ? "0" : format("%d",in), 0); ts.add(i == 0 ? (scad_rata(0) == 0 ? "0" : format("%d",in))
: format("%d",in), 0);
} }
} }
@ -100,12 +101,10 @@ void Pagamento::set_tipo_prima_rata(int v, int sscad)
for (int i = 0; i < (n_rate()-1); i++) for (int i = 0; i < (n_rate()-1); i++)
{ {
TToken_string& tt = rata(i); TToken_string& tt = rata(i);
{
tt.add(scad_rata(i+1),0); tt.add(scad_rata(i+1),0);
tt.add(tipo_rata(i+1),2); tt.add(tipo_rata(i+1),2);
tt.add(ulc_rata(i+1),5); tt.add(ulc_rata(i+1),5);
} }
}
} }
_tpr = v; _tpr = v;
_dirty = TRUE; _dirty = TRUE;
@ -126,10 +125,14 @@ void Pagamento::set_numero_rate(int n, int sscad)
sum += p; sum += p;
set_rata(i, real(p), set_rata(i, real(p),
i == 0 ? 0 : i == 0 ? (i < nr ? scad_rata(0) : 0):
(sscad == -1 ? (i < nr ? scad_rata(i) : scad_rata(nr-1)) : sscad), (sscad == -1 ? (i < nr ? scad_rata(i) : scad_rata(nr-1)) : sscad),
(i < nr ? tipo_rata(i) : tipo_rata(nr-1))); (i < nr ? tipo_rata(i) : tipo_rata(nr-1)));
} }
// erase remaining
for (; i < n_rate(); i++)
_rate.add(NULL,i);
_rate.pack();
_dirty = TRUE; _dirty = TRUE;
} }
@ -162,9 +165,13 @@ void Pagamento::next_scad(TDate& d, int scad, bool mcomm, int rata)
d.set_year(d.year()+ny); d.set_year(d.year()+ny);
d.set_end_month(); d.set_end_month();
if (!last && dy < d.day()) d.set_day(dy); if (!last && dy < d.day())
d.set_day(dy);
}
else
{
d += scad;
} }
else d += scad;
} }
@ -183,7 +190,9 @@ TToken_string& Pagamento::add_rata(real perc, int day, int type)
tt->add(day); // scadenza tt->add(day); // scadenza
tt->add(perc.string()); // percentuale tt->add(perc.string()); // percentuale
tt->add(type); // tipo tt->add(type); // tipo
tt->add("");
tt->add("");
tt->add("");
_rate.add(tt); _rate.add(tt);
_dirty = TRUE; _dirty = TRUE;
return *tt; return *tt;
@ -417,12 +426,15 @@ word Pagamento::recalc_rate(int row, bool is_perc_modified,
{ {
// nulla di speciale visto che si memorizza la derivata // nulla di speciale visto che si memorizza la derivata
int sc = atoi(scad); int sc = atoi(scad);
if (sc <= 0) return P_SCAD; for (int i = 0; i < row; i ++)
sc -= scad_rata(i);
if (sc < 0 || (row > 0 && sc == 0)) return P_SCAD;
if (_mcomm && (sc % 30) != 0) _mcomm = FALSE; if (_mcomm && (sc % 30) != 0) _mcomm = FALSE;
TToken_string& tt = rata(row); TToken_string& tt = rata(row);
TToken_string& ss = (TToken_string&)srate[row]; TToken_string& ss = (TToken_string&)srate[row];
tt.add(0,sc); tt.add(sc,0);
ss.add(1,sc); ss.add(sc,0);
need_recalc = TRUE;
} }
} }
@ -636,7 +648,7 @@ bool Pagamento::read(TTable* t, TTable* r)
istnew = TRUE; istnew = TRUE;
} }
t->zero(); t->put("CODTAB",_code); t->zero(); t->put("CODTAB",_code);
t->read(); if (t->eof()) return FALSE; if (t->read() != NOERR) return FALSE;
// set everything // set everything
_rdiff = t->get_bool("B1"); _rdiff = t->get_bool("B1");
@ -690,13 +702,13 @@ bool Pagamento::read(TTable* t, TTable* r)
} }
bool Pagamento::write(TTable& r) int Pagamento::write(TTable& r)
{ {
// Scrive soltanto le righe di pagamento; si assume sia stata chiamata da una // Scrive soltanto le righe di pagamento; si assume sia stata chiamata da una
// relapp, che ha scritto il file principale // relapp, che ha scritto il file principale
TString s(16); bool ok = TRUE; TString s(16); int err = NOERR;
for (int i = 0; i < n_rate(); i++) for (int i = 0; err == NOERR && i < n_rate(); i++)
{ {
r.zero(); s.format("%s%3d",(const char*)_code, i); r.zero(); s.format("%s%3d",(const char*)_code, i);
r.put("CODTAB", (const char*)s); r.put("CODTAB", (const char*)s);
@ -704,15 +716,15 @@ bool Pagamento::write(TTable& r)
r.put("R0", perc_rata(i).string()); r.put("R0", perc_rata(i).string());
r.put("I1", (long)tipo_rata(i)); r.put("I1", (long)tipo_rata(i));
r.put("S1", ulc_rata(i)); r.put("S1", ulc_rata(i));
ok &= (r.write() == NOERR); err = r.write();
} }
return ok; return err;
} }
bool Pagamento::rewrite(TTable& r) int Pagamento::rewrite(TTable& r)
{ {
TString s(16); bool ok = TRUE; TString s(16); int err = NOERR;
for (int i = 0; i < n_rate(); i++) for (int i = 0; err == NOERR && i < n_rate(); i++)
{ {
r.zero(); s.format("%s%3d",(const char*)_code, i); r.zero(); s.format("%s%3d",(const char*)_code, i);
r.put("CODTAB", (const char*)s); r.put("CODTAB", (const char*)s);
@ -723,29 +735,30 @@ bool Pagamento::rewrite(TTable& r)
r.put("R0", perc_rata(i).string()); r.put("R0", perc_rata(i).string());
r.put("I1", (long)tipo_rata(i)); r.put("I1", (long)tipo_rata(i));
r.put("S1", ulc_rata(i)); r.put("S1", ulc_rata(i));
ok &= ((was ? r.rewrite : r.write()) == NOERR); err = (was ? r.rewrite() : r.write());
} }
// erase possible rates > current n. rates // erase possible rates > current n. rates
for (;;i++) for (;err == NOERR;i++)
{ {
r.zero(); s.format("%s%3d",(const char*)_code, i); r.zero(); s.format("%s%3d",(const char*)_code, i);
r.put("CODTAB", (const char*)s); r.put("CODTAB", (const char*)s);
if (r.read() == NOERR) r.remove(); if (r.read() == NOERR) err = r.remove();
else break; else break;
} }
return ok; return err;
} }
void Pagamento::remove(TTable& r) int Pagamento::remove(TTable& r)
{ {
TString s(16); TString s(16); int err = NOERR;
for (int i = 0 ; ; i++) for (int i = 0 ; err == NOERR; i++)
{ {
r.zero(); s.format("%s%3d",(const char*)_code, i); r.zero(); s.format("%s%3d",(const char*)_code, i);
r.put("CODTAB", (const char*)s); r.put("CODTAB", (const char*)s);
if (r.read() == NOERR) r.remove(); if (r.read() == NOERR) err = r.remove();
else break; else break;
} }
return err;
} }
void Pagamento::set_rate_auto() void Pagamento::set_rate_auto()
@ -861,9 +874,9 @@ void Pagamento::set_sheet(TSheet_field& sf, int sscad)
else // new: set with 1 or 2 rates according to tpr else // new: set with 1 or 2 rates according to tpr
{ {
if (_tpr > 0) if (_tpr > 0)
set_rata(0, ZERO, sscad == -1 ? 0 : sscad, 1); add_rata(ZERO, sscad == -1 ? 0 : sscad, 1);
set_rata(_tpr == 0 ? 0 : 1, real(100.0), sscad == -1 ? (_tpr == 0 ? 0 :30) add_rata(real(100.0), sscad == -1 ? (_tpr == 0 ? 0 :30) : sscad, 1);
: sscad, 1);
_dirty = TRUE; _dirty = TRUE;
for (int i = 0, scr = 0; i < n_rate(); i++) for (int i = 0, scr = 0; i < n_rate(); i++)

View File

@ -94,9 +94,9 @@ public:
bool read(TTable* cpg = NULL, TTable* rpg = NULL); bool read(TTable* cpg = NULL, TTable* rpg = NULL);
// chiamabili solo da relapp, agiscono solo su %RPG // chiamabili solo da relapp, agiscono solo su %RPG
bool write(TTable& rpg); int write(TTable& rpg);
bool rewrite(TTable& rpg); int rewrite(TTable& rpg);
void remove(TTable& rpg); int remove(TTable& rpg);
// modifica rate manualmente o non // modifica rate manualmente o non
TToken_string& rata(int r) { return (TToken_string&)_rate[r]; } TToken_string& rata(int r) { return (TToken_string&)_rate[r]; }