1994-09-22 07:40:02 +00:00
|
|
|
// ba3700.cpp - Tabella condizioni di pagamento
|
|
|
|
|
|
|
|
#include <relapp.h>
|
|
|
|
#include <tabutil.h>
|
1994-10-05 11:39:21 +00:00
|
|
|
#include <msksheet.h>
|
1994-09-22 07:40:02 +00:00
|
|
|
|
|
|
|
#include "ba3700.h"
|
1994-10-05 11:39:21 +00:00
|
|
|
#include "../cg/pagament.h"
|
1994-09-22 07:40:02 +00:00
|
|
|
|
|
|
|
#define ALIAS 1
|
|
|
|
|
|
|
|
class BA3700_application : public TRelation_application
|
1994-10-05 11:39:21 +00:00
|
|
|
{
|
|
|
|
TRelation* _rel;
|
|
|
|
TMask* _msk;
|
1995-03-22 09:07:04 +00:00
|
|
|
TPagamento* _pag;
|
1994-10-05 11:39:21 +00:00
|
|
|
TSheet_field* _cs;
|
|
|
|
int _mode; // Modo maschera corrente
|
|
|
|
int _interv_rate;
|
|
|
|
int _numero_rate;
|
|
|
|
int _riga;
|
1994-09-22 07:40:02 +00:00
|
|
|
|
|
|
|
protected:
|
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
virtual bool user_create();
|
|
|
|
virtual bool user_destroy();
|
1994-09-22 07:40:02 +00:00
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
// minchia di cristo
|
|
|
|
virtual TRelation* get_relation() const { return _rel; }
|
|
|
|
virtual TMask* get_mask(int mode) { return _msk; }
|
|
|
|
virtual bool changing_mask(int mode) { return FALSE; }
|
|
|
|
|
|
|
|
// file intertface
|
1994-09-22 07:40:02 +00:00
|
|
|
virtual bool remove();
|
1994-10-05 11:39:21 +00:00
|
|
|
virtual void init_insert_mode(TMask&);
|
|
|
|
virtual void init_query_mode(TMask&);
|
|
|
|
virtual int rewrite(const TMask& m);
|
|
|
|
virtual int write(const TMask& m);
|
|
|
|
virtual int read(TMask& m);
|
|
|
|
|
|
|
|
// notifier
|
1995-08-09 09:49:19 +00:00
|
|
|
static bool sheet_action(TSheet_field&, int r, KEY k);
|
1994-10-05 11:39:21 +00:00
|
|
|
|
|
|
|
// handlers
|
|
|
|
static bool intervallo_rate (TMask_field& f, KEY k);
|
|
|
|
static bool rate_differenziate (TMask_field& f, KEY k);
|
|
|
|
static bool tipo_prima_rata (TMask_field& f, KEY k);
|
|
|
|
static bool numero_rate (TMask_field& f, KEY k);
|
|
|
|
static bool mese_commerciale (TMask_field& f, KEY k);
|
1995-08-08 10:48:54 +00:00
|
|
|
static bool fixed_scad (TMask_field& f, KEY k);
|
|
|
|
static bool tipo_rata (TMask_field& f, KEY k);
|
|
|
|
static bool ult_class (TMask_field& f, KEY k);
|
1994-10-05 11:39:21 +00:00
|
|
|
|
|
|
|
void* _app_data;
|
1994-09-22 07:40:02 +00:00
|
|
|
|
|
|
|
public:
|
1994-10-05 11:39:21 +00:00
|
|
|
|
|
|
|
void set_app_data(void* v) { _app_data = v; }
|
1994-11-29 17:49:19 +00:00
|
|
|
static void* get_app_data() { return ((BA3700_application &)main_app())._app_data; }
|
1994-10-05 11:39:21 +00:00
|
|
|
|
1994-09-22 07:40:02 +00:00
|
|
|
BA3700_application() : TRelation_application() {}
|
|
|
|
virtual ~BA3700_application() {}
|
|
|
|
};
|
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
// app-data per handlers
|
|
|
|
struct sht {
|
|
|
|
TMask* _msk;
|
1995-03-01 15:44:02 +00:00
|
|
|
TPagamento* _pag;
|
1994-10-05 11:39:21 +00:00
|
|
|
TSheet_field* _sht;
|
|
|
|
TArray* _rws;
|
|
|
|
} shuttle;
|
|
|
|
|
|
|
|
bool BA3700_application::user_create()
|
1994-09-22 07:40:02 +00:00
|
|
|
{
|
1994-10-05 11:39:21 +00:00
|
|
|
_rel = new TRelation(TAB_CPG);
|
|
|
|
_rel->add(TAB_RPG, "CODTAB[1,4]=CODTAB" ,1, 0, ALIAS);
|
|
|
|
|
|
|
|
_interv_rate = 30;
|
|
|
|
_pag = NULL;
|
|
|
|
_msk = new TMask("ba3700a");
|
|
|
|
_cs = &((TSheet_field&)_msk->field(F_SHEET_RPG));
|
|
|
|
_cs->set_notify(sheet_action);
|
1994-09-22 07:40:02 +00:00
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
_msk->set_handler (F_INT_RATE , intervallo_rate);
|
|
|
|
_msk->set_handler (F_RATE_DIFF , rate_differenziate);
|
|
|
|
_msk->set_handler (F_TIPO_PRIMA_RATA , tipo_prima_rata);
|
|
|
|
_msk->set_handler (F_NUM_RATE , numero_rate);
|
|
|
|
_msk->set_handler (F_MESECOMM , mese_commerciale);
|
1995-08-08 10:48:54 +00:00
|
|
|
_msk->set_handler (F_FIXSCAD_1 , fixed_scad);
|
|
|
|
_msk->set_handler (F_FIXSCAD_2 , fixed_scad);
|
|
|
|
_msk->set_handler (F_FIXSCAD_3 , fixed_scad);
|
|
|
|
_msk->set_handler (F_TIPO_RATA , tipo_rata);
|
|
|
|
_msk->set_handler (F_ULT_CLASS , ult_class);
|
1994-09-22 07:40:02 +00:00
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
shuttle._msk = _msk;
|
|
|
|
shuttle._sht = _cs;
|
|
|
|
|
|
|
|
set_app_data(&shuttle);
|
|
|
|
|
|
|
|
return TRUE;
|
1994-09-22 07:40:02 +00:00
|
|
|
}
|
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
bool BA3700_application::user_destroy()
|
1994-09-22 07:40:02 +00:00
|
|
|
{
|
1994-10-05 11:39:21 +00:00
|
|
|
delete _msk;
|
|
|
|
delete _rel;
|
|
|
|
if (_pag) delete _pag;
|
1994-09-22 07:40:02 +00:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
int BA3700_application::read(TMask& m)
|
1994-09-22 07:40:02 +00:00
|
|
|
{
|
1996-05-16 09:25:36 +00:00
|
|
|
m.autoload(*_rel);
|
1994-10-05 11:39:21 +00:00
|
|
|
|
|
|
|
TString code(m.get(F_CODICE));
|
|
|
|
int ir = m.get_int(F_INT_RATE); if (ir == 0) ir = -1;
|
1995-10-20 11:24:01 +00:00
|
|
|
if (_pag != NULL) delete _pag;
|
1995-03-01 15:44:02 +00:00
|
|
|
shuttle._pag = _pag = new TPagamento(code);
|
1994-10-05 11:39:21 +00:00
|
|
|
_pag->set_sheet(*_cs, ir);
|
|
|
|
if (_pag->n_rate() > 1)
|
1994-10-06 11:06:26 +00:00
|
|
|
_interv_rate = _pag->scad_rata(_pag->n_rate() - 1);
|
1995-09-12 08:33:59 +00:00
|
|
|
else _interv_rate = 30;
|
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
TArray* arr = new TArray;
|
|
|
|
if (shuttle._rws != NULL) delete shuttle._rws;
|
|
|
|
(*arr) = _cs->rows_array();
|
1994-10-06 11:06:26 +00:00
|
|
|
shuttle._rws = arr;
|
|
|
|
|
1995-11-23 14:18:44 +00:00
|
|
|
shuttle._msk->set(F_INT_RATE,_interv_rate);
|
|
|
|
shuttle._msk->set(F_NUM_RATE,_pag->n_rate());
|
1995-09-12 08:33:59 +00:00
|
|
|
shuttle._msk->set(F_RATE_DIFF, _pag->rate_differenziate() ? "1" : "2", TRUE);
|
1994-10-05 11:39:21 +00:00
|
|
|
|
|
|
|
return NOERR;
|
1994-09-22 07:40:02 +00:00
|
|
|
}
|
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
void BA3700_application::init_insert_mode(TMask& m)
|
1994-09-22 07:40:02 +00:00
|
|
|
{
|
1994-10-05 11:39:21 +00:00
|
|
|
TString code(m.get(F_CODICE));
|
1995-03-01 15:44:02 +00:00
|
|
|
shuttle._pag = _pag = new TPagamento(code);
|
1994-10-05 11:39:21 +00:00
|
|
|
_pag->set_sheet(*_cs);
|
|
|
|
TArray* arr = new TArray;
|
|
|
|
if (shuttle._rws != NULL) delete shuttle._rws;
|
|
|
|
(*arr) = _cs->rows_array();
|
|
|
|
shuttle._rws = arr;
|
|
|
|
shuttle._msk->field(F_INT_RATE).set("30");
|
|
|
|
shuttle._msk->field(F_INIZIOSCAD).set("F");
|
1994-10-06 11:06:26 +00:00
|
|
|
shuttle._msk->field(F_NUM_RATE).set("1");
|
1995-09-12 08:33:59 +00:00
|
|
|
shuttle._msk->set(F_RATE_DIFF, "2", TRUE);
|
1994-09-22 07:40:02 +00:00
|
|
|
}
|
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
void BA3700_application::init_query_mode(TMask& m)
|
1994-09-22 07:40:02 +00:00
|
|
|
{
|
1996-07-19 14:52:07 +00:00
|
|
|
// _cs->reset(); _cs->force_update();
|
1994-10-05 11:39:21 +00:00
|
|
|
if (shuttle._rws != NULL) delete shuttle._rws;
|
|
|
|
shuttle._rws = new TArray;
|
|
|
|
}
|
1994-09-22 07:40:02 +00:00
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
// handlers
|
1994-09-22 07:40:02 +00:00
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
bool BA3700_application::intervallo_rate(TMask_field& f, KEY k)
|
|
|
|
{
|
|
|
|
// ricalcola tutte le scadenze
|
|
|
|
// occorre pag->set_intervallo_rate(intervallo)
|
1995-10-20 11:24:01 +00:00
|
|
|
if (k != K_TAB || f.mask().query_mode() || !f.focusdirty()) return TRUE;
|
1994-09-22 07:40:02 +00:00
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
sht* s = (sht*)get_app_data();
|
1995-03-01 15:44:02 +00:00
|
|
|
TPagamento* pag = s->_pag;
|
1994-10-05 11:39:21 +00:00
|
|
|
TSheet_field* shf = s->_sht;
|
|
|
|
TMask* msk = s->_msk;
|
|
|
|
|
|
|
|
if (!pag || msk->get(F_INT_RATE).empty()) return TRUE;
|
1994-09-22 07:40:02 +00:00
|
|
|
|
1995-11-07 11:36:38 +00:00
|
|
|
pag->set_intervallo_rate(msk->get_int(F_INT_RATE));
|
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
if (pag->dirty())
|
|
|
|
{
|
|
|
|
pag->set_sheet(*shf);
|
|
|
|
(*(s->_rws)) = shf->rows_array();
|
1996-07-19 14:52:07 +00:00
|
|
|
shf->force_update();
|
1994-10-05 11:39:21 +00:00
|
|
|
msk->field(F_MESECOMM).set(pag->mese_commerciale() ? "X" : "");
|
1995-11-07 11:36:38 +00:00
|
|
|
}
|
1995-11-23 14:18:44 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
char r[8];
|
|
|
|
sprintf(r, "%d", pag->intervallo_rate());
|
|
|
|
f.set(r);
|
|
|
|
}
|
1995-11-07 11:36:38 +00:00
|
|
|
|
1994-09-22 07:40:02 +00:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
bool BA3700_application::rate_differenziate(TMask_field& f, KEY k)
|
1994-09-22 07:40:02 +00:00
|
|
|
{
|
1994-10-05 11:39:21 +00:00
|
|
|
// se erano differenziate e non lo sono piu' occorre riaggiustare
|
|
|
|
// il riaggiustabile; altrimenti si lascia cosi'
|
|
|
|
// pag->set_rate_differenziate()
|
1995-09-20 16:25:57 +00:00
|
|
|
if (k != K_TAB || f.mask().query_mode()) return TRUE;
|
1994-10-05 11:39:21 +00:00
|
|
|
|
|
|
|
sht* s = (sht*)get_app_data();
|
1995-03-01 15:44:02 +00:00
|
|
|
TPagamento* pag = s->_pag;
|
1994-10-05 11:39:21 +00:00
|
|
|
TSheet_field* shf = s->_sht;
|
|
|
|
TMask* msk = s->_msk;
|
|
|
|
TArray* rws = s->_rws;
|
|
|
|
|
|
|
|
if (!pag) return TRUE;
|
|
|
|
pag->set_rate_differenziate(msk->get_int(F_RATE_DIFF));
|
|
|
|
if (pag->dirty())
|
1994-09-22 07:40:02 +00:00
|
|
|
{
|
1994-10-05 11:39:21 +00:00
|
|
|
pag->set_sheet(*shf);
|
1996-07-19 14:52:07 +00:00
|
|
|
(*rws) = shf->rows_array();
|
|
|
|
shf->force_update();
|
1994-09-22 07:40:02 +00:00
|
|
|
}
|
|
|
|
return TRUE;
|
1994-10-06 11:06:26 +00:00
|
|
|
}
|
1994-09-22 07:40:02 +00:00
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
bool BA3700_application::tipo_prima_rata(TMask_field& f, KEY k)
|
|
|
|
{
|
|
|
|
// aggiunge o toglie se necessario rata 0, lasciando
|
|
|
|
// le altre e shiftando le scadenze
|
1995-09-20 16:25:57 +00:00
|
|
|
if (f.mask().query_mode())
|
|
|
|
return TRUE;
|
1994-10-05 11:39:21 +00:00
|
|
|
sht* s = (sht*)get_app_data();
|
1995-03-01 15:44:02 +00:00
|
|
|
TPagamento* pag = s->_pag;
|
1994-10-05 11:39:21 +00:00
|
|
|
TSheet_field* shf = s->_sht;
|
|
|
|
TMask* msk = s->_msk;
|
|
|
|
TArray* rws = s->_rws;
|
|
|
|
|
|
|
|
if (!pag || pag->n_rate() == 0) return TRUE;
|
1994-09-22 07:40:02 +00:00
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
int ir = msk->get_int(F_INT_RATE);
|
|
|
|
if (ir == 0) ir = -1;
|
1994-09-22 07:40:02 +00:00
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
pag->set_tipo_prima_rata(msk->get_int(F_TIPO_PRIMA_RATA),ir);
|
|
|
|
if (pag->dirty())
|
1994-09-22 07:40:02 +00:00
|
|
|
{
|
1994-10-05 11:39:21 +00:00
|
|
|
pag->set_sheet(*shf);
|
|
|
|
(*rws) = shf->rows_array();
|
1996-07-19 14:52:07 +00:00
|
|
|
shf->force_update();
|
1995-11-27 13:51:13 +00:00
|
|
|
msk->set(F_NUM_RATE, pag->n_rate());
|
1994-09-22 07:40:02 +00:00
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
bool BA3700_application::numero_rate(TMask_field& f, KEY k)
|
1994-09-22 07:40:02 +00:00
|
|
|
{
|
1994-10-05 11:39:21 +00:00
|
|
|
// azzera tutto e ricrea da capo mantenendo le scadenze che ci sono
|
1995-09-20 16:25:57 +00:00
|
|
|
if (k != K_TAB || f.mask().query_mode()) return TRUE;
|
1994-10-05 11:39:21 +00:00
|
|
|
|
|
|
|
sht* s = (sht*)get_app_data();
|
1995-03-01 15:44:02 +00:00
|
|
|
TPagamento* pag = s->_pag;
|
1994-10-05 11:39:21 +00:00
|
|
|
TSheet_field* shf = s->_sht;
|
|
|
|
TMask* msk = s->_msk;
|
|
|
|
TArray* rws = s->_rws;
|
1994-10-06 11:06:26 +00:00
|
|
|
int nr = msk->get_int(F_NUM_RATE);
|
1995-11-22 10:56:09 +00:00
|
|
|
if (!pag || nr == pag->n_rate() || msk->get(F_NUM_RATE).empty())
|
|
|
|
return TRUE;
|
1994-10-05 11:39:21 +00:00
|
|
|
int ir = msk->get_int(F_INT_RATE);
|
|
|
|
if (ir == 0) ir = -1;
|
|
|
|
|
1995-11-22 10:56:09 +00:00
|
|
|
pag->set_numero_rate(nr,ir);
|
1994-10-05 11:39:21 +00:00
|
|
|
if (pag->dirty())
|
1994-09-22 07:40:02 +00:00
|
|
|
{
|
1994-10-05 11:39:21 +00:00
|
|
|
pag->set_sheet(*shf);
|
|
|
|
(*rws) = shf->rows_array();
|
1996-07-19 14:52:07 +00:00
|
|
|
shf->force_update();
|
1994-10-06 11:06:26 +00:00
|
|
|
}
|
|
|
|
|
1995-11-23 14:18:44 +00:00
|
|
|
msk->set(F_NUM_RATE,pag->n_rate());
|
1994-09-22 07:40:02 +00:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
bool BA3700_application::mese_commerciale(TMask_field& f, KEY k)
|
1994-09-22 07:40:02 +00:00
|
|
|
{
|
1994-10-05 11:39:21 +00:00
|
|
|
// setta mcomm e ricalcola le scadenze
|
|
|
|
// pag->set_mese_commerciale()
|
|
|
|
// if (k != K_ENTER) return FALSE;
|
1995-09-20 16:25:57 +00:00
|
|
|
if (f.mask().query_mode())
|
|
|
|
return TRUE;
|
1994-10-05 11:39:21 +00:00
|
|
|
|
|
|
|
sht* s = (sht*)get_app_data();
|
1995-03-01 15:44:02 +00:00
|
|
|
TPagamento* pag = s->_pag;
|
1994-10-05 11:39:21 +00:00
|
|
|
TSheet_field* shf = s->_sht;
|
|
|
|
TMask* msk = s->_msk;
|
|
|
|
TArray* rws = s->_rws;
|
|
|
|
|
|
|
|
if (!pag) return TRUE;
|
|
|
|
int ir = msk->get_int(F_INT_RATE);
|
|
|
|
if (ir == 0) ir = -1;
|
1994-10-06 11:06:26 +00:00
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
pag->set_mese_commerciale(msk->get_bool(F_MESECOMM),ir);
|
|
|
|
if (pag->dirty())
|
1994-09-22 07:40:02 +00:00
|
|
|
{
|
1994-10-05 11:39:21 +00:00
|
|
|
pag->set_sheet(*shf);
|
|
|
|
(*rws) = shf->rows_array();
|
1996-07-19 14:52:07 +00:00
|
|
|
shf->force_update();
|
1995-11-23 14:18:44 +00:00
|
|
|
msk->set(F_INT_RATE,ir);
|
1994-09-22 07:40:02 +00:00
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1995-08-08 10:48:54 +00:00
|
|
|
bool BA3700_application::fixed_scad(TMask_field& f, KEY k)
|
|
|
|
{
|
|
|
|
// setta mcomm e ricalcola le scadenze
|
|
|
|
// pag->set_mese_commerciale()
|
1995-12-29 11:03:40 +00:00
|
|
|
if (!f.to_check(k) || f.mask().query_mode()) return TRUE;
|
1995-08-08 10:48:54 +00:00
|
|
|
sht* s = (sht*)get_app_data();
|
|
|
|
TPagamento* pag = s->_pag;
|
|
|
|
|
1995-09-20 16:25:57 +00:00
|
|
|
if (!pag) return TRUE;
|
1995-08-08 10:48:54 +00:00
|
|
|
|
1995-12-29 11:03:40 +00:00
|
|
|
const int val = atoi(f.get());
|
|
|
|
if (val < 0 || val >31 )
|
|
|
|
return f.error_box("Giorno errato");
|
|
|
|
|
|
|
|
int i = 0;
|
|
|
|
static fld_arr[3] = {F_FIXSCAD_1, F_FIXSCAD_2, F_FIXSCAD_3};
|
|
|
|
|
|
|
|
for (i = 0 ; i < 3; i++)
|
|
|
|
if (f.dlg() == fld_arr[i])
|
|
|
|
break;
|
|
|
|
CHECK( i < 3, "Unknown field");
|
|
|
|
|
|
|
|
if (i > 0)
|
|
|
|
{
|
|
|
|
const int prev_val = f.mask().get_int(fld_arr[i -1]);
|
|
|
|
|
|
|
|
if (val != 0 && (prev_val == 0 || prev_val >= val))
|
|
|
|
return f.error_box("Giorno non in sequenza");
|
|
|
|
}
|
|
|
|
if (k != K_ENTER && i < 2)
|
|
|
|
{
|
|
|
|
const int next_val = f.mask().get_int(fld_arr[i + 1]);
|
|
|
|
|
|
|
|
if (next_val != 0 && next_val < val)
|
|
|
|
return f.error_box("Giorno non in sequenza");
|
|
|
|
}
|
1995-08-08 10:48:54 +00:00
|
|
|
|
1995-12-29 11:03:40 +00:00
|
|
|
pag->set_fixed_scad(val, i);
|
1995-08-08 10:48:54 +00:00
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool BA3700_application::tipo_rata(TMask_field& f, KEY k)
|
|
|
|
{
|
1995-09-20 16:25:57 +00:00
|
|
|
if (f.mask().query_mode())
|
|
|
|
return TRUE;
|
1995-08-08 10:48:54 +00:00
|
|
|
sht* s = (sht*)get_app_data();
|
|
|
|
TPagamento* pag = s->_pag;
|
|
|
|
TSheet_field* shf = s->_sht;
|
|
|
|
|
1996-08-08 15:43:08 +00:00
|
|
|
if (k == K_TAB && pag && f.focusdirty())
|
1995-08-08 10:48:54 +00:00
|
|
|
{
|
1996-01-09 11:12:56 +00:00
|
|
|
pag->set_default_ulc("");
|
|
|
|
f.mask().set(F_ULT_CLASS,"");
|
1995-08-08 10:48:54 +00:00
|
|
|
pag->set_default_type(atoi(f.get()));
|
|
|
|
pag->set_sheet(*shf);
|
1996-07-19 14:52:07 +00:00
|
|
|
shf->force_update();
|
1995-08-08 10:48:54 +00:00
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool BA3700_application::ult_class(TMask_field& f, KEY k)
|
1995-09-20 16:25:57 +00:00
|
|
|
{
|
|
|
|
if (f.mask().query_mode())
|
|
|
|
return TRUE;
|
1995-08-08 10:48:54 +00:00
|
|
|
sht* s = (sht*)get_app_data();
|
|
|
|
TPagamento* pag = s->_pag;
|
|
|
|
TSheet_field* shf = s->_sht;
|
|
|
|
|
1995-11-14 10:25:50 +00:00
|
|
|
if (k == K_TAB && pag && f.focusdirty())
|
1995-08-08 10:48:54 +00:00
|
|
|
{
|
1996-01-09 11:12:56 +00:00
|
|
|
pag->set_default_type(atoi(f.mask().get(F_TIPO_RATA)));
|
1995-08-08 10:48:54 +00:00
|
|
|
pag->set_default_ulc(f.get());
|
|
|
|
pag->set_sheet(*shf);
|
1996-07-19 14:52:07 +00:00
|
|
|
shf->force_update();
|
1995-08-08 10:48:54 +00:00
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
// qui viene il belloccio
|
1995-08-09 09:49:19 +00:00
|
|
|
bool BA3700_application::sheet_action(TSheet_field&, int r, KEY k)
|
1994-10-05 11:39:21 +00:00
|
|
|
{
|
|
|
|
bool doit = TRUE, m_perc = FALSE, m_pag = FALSE;
|
1995-11-03 08:15:26 +00:00
|
|
|
bool m_scad = FALSE, m_tipo = FALSE, m_ulc = FALSE, mod = FALSE;
|
1994-10-05 11:39:21 +00:00
|
|
|
word ahiahi = P_OK;
|
|
|
|
|
|
|
|
sht* s = (sht*)get_app_data();
|
1995-03-01 15:44:02 +00:00
|
|
|
TPagamento* pag = s->_pag;
|
1994-10-05 11:39:21 +00:00
|
|
|
TSheet_field* shf = s->_sht;
|
|
|
|
TMask* msk = s->_msk;
|
|
|
|
TArray* rws = s->_rws;
|
|
|
|
|
|
|
|
if (!pag) return TRUE;
|
1994-09-22 07:40:02 +00:00
|
|
|
|
1995-11-03 08:15:26 +00:00
|
|
|
TString news(15), newp(15), newt(1), newu(1);
|
1994-10-05 11:39:21 +00:00
|
|
|
TToken_string ts(36), ns(36);
|
|
|
|
|
|
|
|
switch (k)
|
1994-09-22 07:40:02 +00:00
|
|
|
{
|
1994-10-05 11:39:21 +00:00
|
|
|
case K_SPACE:
|
|
|
|
break;
|
|
|
|
case K_ENTER:
|
1994-10-14 18:13:00 +00:00
|
|
|
{
|
1994-10-05 11:39:21 +00:00
|
|
|
ns = shf->row(r);
|
|
|
|
ts = (TToken_string&)(*rws)[r];
|
|
|
|
|
|
|
|
news = ns.get(0);
|
1995-11-03 13:54:55 +00:00
|
|
|
newp = ns.get();
|
|
|
|
newt = ns.get();
|
|
|
|
newu = ns.get();
|
1994-10-05 11:39:21 +00:00
|
|
|
|
|
|
|
// qui viene il bello, si fa per dire
|
1994-10-06 11:06:26 +00:00
|
|
|
if (ts.get_int(0) != atoi(news)) // modificata scadenza
|
1994-10-05 11:39:21 +00:00
|
|
|
mod = m_scad = TRUE;
|
1996-09-09 16:08:19 +00:00
|
|
|
|
|
|
|
real p0(ts.get(1));
|
|
|
|
real p1(newp);
|
|
|
|
p0.round(2);
|
|
|
|
p1.round(2);
|
1994-10-14 18:13:00 +00:00
|
|
|
|
|
|
|
if (p0 != p1) // modificata percentuale
|
1994-10-05 11:39:21 +00:00
|
|
|
mod = m_perc = TRUE;
|
1995-08-08 10:48:54 +00:00
|
|
|
|
1996-09-09 16:08:19 +00:00
|
|
|
if (newt != ts.get(2)) // modificato tipo pagamento
|
1995-11-10 13:33:42 +00:00
|
|
|
mod = m_tipo = m_ulc = TRUE;
|
1995-11-03 08:15:26 +00:00
|
|
|
|
1996-09-09 16:08:19 +00:00
|
|
|
if (newu != ts.get(3)) // modificata ulteriore classificazione
|
1996-01-29 13:49:43 +00:00
|
|
|
mod = m_ulc = TRUE;
|
|
|
|
else
|
|
|
|
if (m_tipo)
|
|
|
|
newu = "";
|
1994-10-14 18:13:00 +00:00
|
|
|
}
|
1994-10-05 11:39:21 +00:00
|
|
|
break;
|
|
|
|
case K_DEL:
|
|
|
|
case K_INS:
|
|
|
|
doit = FALSE;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
1994-09-22 07:40:02 +00:00
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
// settato da recalc_rate se occorre ridefinire lo sheet
|
|
|
|
// aggiungendo o togliendo righe
|
|
|
|
bool need_recalc = FALSE;
|
1994-09-22 07:40:02 +00:00
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
if (k == K_ENTER)
|
1994-09-22 07:40:02 +00:00
|
|
|
{
|
1996-01-09 18:38:30 +00:00
|
|
|
if (mod)
|
1994-09-22 07:40:02 +00:00
|
|
|
{
|
1994-10-05 11:39:21 +00:00
|
|
|
// ricalcola sheet come sai fare tu
|
1994-10-06 11:06:26 +00:00
|
|
|
int rdiff = atoi(msk->get(F_RATE_DIFF));
|
1994-10-05 11:39:21 +00:00
|
|
|
ahiahi = pag->recalc_rate(r, m_perc,
|
|
|
|
(m_perc ? (const char*)newp : NULL),
|
1996-02-02 11:07:53 +00:00
|
|
|
NULL,
|
1994-10-05 11:39:21 +00:00
|
|
|
(m_scad ? (const char*)news : NULL),
|
1995-11-03 08:15:26 +00:00
|
|
|
(m_tipo ? (const char*)newt : NULL),
|
|
|
|
(m_ulc ? (const char*)newu : NULL),
|
1994-10-05 11:39:21 +00:00
|
|
|
rdiff,
|
|
|
|
pag->mese_commerciale(),
|
|
|
|
need_recalc);
|
1994-10-06 11:06:26 +00:00
|
|
|
// see if parameters changed
|
1995-09-12 08:33:59 +00:00
|
|
|
msk->set(F_RATE_DIFF, pag->rate_differenziate() ? "1" : "2", TRUE);
|
1995-11-08 15:41:33 +00:00
|
|
|
msk->set(F_MESECOMM, pag->mese_commerciale() ? "X" : "");
|
1994-09-22 07:40:02 +00:00
|
|
|
}
|
1995-11-08 15:41:33 +00:00
|
|
|
if (ahiahi)
|
1994-10-05 11:39:21 +00:00
|
|
|
// rimetti le righe com'erano prima
|
|
|
|
{
|
1995-09-11 10:51:33 +00:00
|
|
|
TString s(256);
|
|
|
|
pag->strerr(ahiahi,s);
|
|
|
|
warning_box(s);
|
1994-10-05 11:39:21 +00:00
|
|
|
shf->row(r) = (TToken_string&)(*rws)[r];
|
1996-01-09 18:38:30 +00:00
|
|
|
shf->force_update(r);
|
1995-09-11 10:51:33 +00:00
|
|
|
msk->set(F_NUM_RATE, pag->n_rate());
|
1994-10-05 11:39:21 +00:00
|
|
|
}
|
|
|
|
|
1996-01-09 18:38:30 +00:00
|
|
|
else if (mod && need_recalc)
|
1995-11-07 11:36:38 +00:00
|
|
|
{
|
1996-01-10 16:50:59 +00:00
|
|
|
// ridefinisci lo sheet sulla base delle nuove rate
|
1995-11-07 11:36:38 +00:00
|
|
|
pag->set_sheet(*shf);
|
1996-01-09 18:38:30 +00:00
|
|
|
shf->force_update();
|
|
|
|
// rws->destroy();
|
1995-11-07 11:36:38 +00:00
|
|
|
(*rws) = shf->rows_array();
|
|
|
|
}
|
|
|
|
|
1995-11-23 14:18:44 +00:00
|
|
|
msk->set(F_NUM_RATE, pag->n_rate());
|
1995-11-07 11:36:38 +00:00
|
|
|
}
|
1994-09-22 07:40:02 +00:00
|
|
|
|
1995-11-07 11:36:38 +00:00
|
|
|
return doit;
|
1994-09-22 07:40:02 +00:00
|
|
|
}
|
|
|
|
|
1994-10-05 11:39:21 +00:00
|
|
|
|
1994-09-22 07:40:02 +00:00
|
|
|
int BA3700_application::rewrite(const TMask& m)
|
|
|
|
{
|
1995-09-11 10:51:33 +00:00
|
|
|
TTable& tab_cpg = (TTable&)_rel->lfile();
|
1994-09-22 07:40:02 +00:00
|
|
|
TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS);
|
1994-10-06 11:06:26 +00:00
|
|
|
const int err = _pag->rewrite(tab_rpg);
|
|
|
|
if (err != NOERR) return err;
|
1996-05-16 09:25:36 +00:00
|
|
|
m.autosave(*_rel);
|
1995-09-12 08:33:59 +00:00
|
|
|
tab_cpg.put("B1", _pag->rate_differenziate() ? "X" : "");
|
1994-10-06 11:06:26 +00:00
|
|
|
return _rel->lfile().rewrite();
|
1994-09-22 07:40:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int BA3700_application::write(const TMask& m)
|
|
|
|
{
|
1995-09-11 10:51:33 +00:00
|
|
|
TTable& tab_cpg = (TTable&)_rel->lfile();
|
1994-10-06 11:06:26 +00:00
|
|
|
TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS);
|
|
|
|
const int err = _pag->write(tab_rpg);
|
|
|
|
if (err != NOERR) return err;
|
1996-05-16 09:25:36 +00:00
|
|
|
m.autosave(*_rel);
|
1995-09-12 08:33:59 +00:00
|
|
|
tab_cpg.put("B1", _pag->rate_differenziate() ? "X" : "");
|
1994-10-06 11:06:26 +00:00
|
|
|
return _rel->lfile().write();
|
1994-09-22 07:40:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
bool BA3700_application::remove()
|
|
|
|
{
|
|
|
|
TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS);
|
1994-10-06 11:06:26 +00:00
|
|
|
return _pag->remove(tab_rpg) == NOERR && _rel->lfile().remove() == NOERR;
|
1994-09-22 07:40:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int ba3700(int argc, char* argv[])
|
|
|
|
{
|
|
|
|
BA3700_application a;
|
1994-10-07 14:58:01 +00:00
|
|
|
a.run(argc, argv, "Condizioni di pagamento");
|
1994-09-22 07:40:02 +00:00
|
|
|
return 0;
|
|
|
|
}
|