Errore aga001

git-svn-id: svn://10.65.10.50/trunk@4315 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1997-04-29 13:11:17 +00:00
parent d748a62922
commit 1c714b3c3a

View File

@ -6,7 +6,7 @@
#include <comuni.h> #include <comuni.h>
#include "ef0.h" #include "ef0.h"
#include "ef0100.h" #include "ef0100.h"
#include "ef0101.h" #include "ef0101.h"
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
// Classe per la gestione di effetti con metodi standard di: // // Classe per la gestione di effetti con metodi standard di: //
@ -17,16 +17,16 @@ class TVariazione_effetti: public TRelation_application
{ {
TMask *_msk; TMask *_msk;
TEffetto *_effetto; TEffetto *_effetto;
TRelation *_rel; TRelation *_rel;
TLocalisamfile *_reff, *_cess, *_com; TLocalisamfile *_reff, *_cess, *_com;
protected: protected:
virtual void init_query_mode(TMask&); virtual void init_query_mode(TMask&);
virtual void init_insert_mode(TMask&); virtual void init_insert_mode(TMask&);
static bool handle_sheet(TMask_field& f, KEY); static bool handle_sheet(TMask_field& f, KEY);
static bool codval_handler(TMask_field& f, KEY k); static bool codval_handler(TMask_field& f, KEY k);
static bool impeff_notify(TSheet_field& s, int r, KEY key); static bool impeff_notify(TSheet_field& s, int r, KEY key);
virtual const char* get_next_key(); virtual const char* get_next_key();
TSheet_field& cess_sheet() const; TSheet_field& cess_sheet() const;
TSheet_field& righe_sheet() const; TSheet_field& righe_sheet() const;
void common_f(const TMask& m); void common_f(const TMask& m);
static void calcola_totali(); static void calcola_totali();
@ -49,25 +49,25 @@ inline TVariazione_effetti& app() {return (TVariazione_effetti&)main_app();}
// quando si va in query mode resetta i due campi della maschera // quando si va in query mode resetta i due campi della maschera
// relativi ai totali // relativi ai totali
void TVariazione_effetti::init_query_mode(TMask&) void TVariazione_effetti::init_query_mode(TMask&)
{ {
_msk->reset(F_TOTIMP); _msk->reset(F_TOTIMP);
_msk->reset(F_TOTIMPVAL); _msk->reset(F_TOTIMPVAL);
} }
// quando si va in insert mode resetta i due campi della maschera relativi // quando si va in insert mode resetta i due campi della maschera relativi
// ai totali, inserisce una riga vuota nello sheet e setta il flag dirty // ai totali, inserisce una riga vuota nello sheet e setta il flag dirty
// dello sheet per forzare l'utente all'inserimento di una riga // dello sheet per forzare l'utente all'inserimento di una riga
void TVariazione_effetti::init_insert_mode(TMask&) void TVariazione_effetti::init_insert_mode(TMask&)
{ {
_msk->reset(F_TOTIMP); _msk->reset(F_TOTIMP);
_msk->reset(F_TOTIMPVAL); _msk->reset(F_TOTIMPVAL);
TToken_string riga("|||||||||"); TToken_string riga("|||||||||");
righe_sheet().row(0) = riga; righe_sheet().row(0) = riga;
righe_sheet().set_dirty(); righe_sheet().set_dirty();
} }
// ritorna il prossimo numero valido di chiave // ritorna il prossimo numero valido di chiave
const char* TVariazione_effetti::get_next_key() const char* TVariazione_effetti::get_next_key()
{ {
TLocalisamfile& effetti = _rel->lfile(); TLocalisamfile& effetti = _rel->lfile();
@ -90,7 +90,7 @@ TSheet_field& TVariazione_effetti::cess_sheet() const
return o_sheet; return o_sheet;
} }
// ritorna un riferimento allo sheet delle righe // ritorna un riferimento allo sheet delle righe
TSheet_field& TVariazione_effetti::righe_sheet() const TSheet_field& TVariazione_effetti::righe_sheet() const
{ {
TSheet_field& r_sheet = (TSheet_field&)_msk->field(F_SHEET_RIGHE); TSheet_field& r_sheet = (TSheet_field&)_msk->field(F_SHEET_RIGHE);
@ -98,24 +98,24 @@ TSheet_field& TVariazione_effetti::righe_sheet() const
} }
// metodo che permette di scivere su file i dati inseriti nella maschera; // metodo che permette di scivere su file i dati inseriti nella maschera;
// comune alla write e alla rewrite // comune alla write e alla rewrite
void TVariazione_effetti::common_f(const TMask& m) void TVariazione_effetti::common_f(const TMask& m)
{ {
long nprogtr = m.get_long(F_NPROGTR); long nprogtr = m.get_long(F_NPROGTR);
m.autosave(*_rel); m.autosave(*_rel);
_effetto->head() = _rel->curr(); _effetto->head() = _rel->curr();
TSheet_field& shcess = cess_sheet(); TSheet_field& shcess = cess_sheet();
TSheet_field& shrighe = righe_sheet(); TSheet_field& shrighe = righe_sheet();
int items = shcess.items(); int items = shcess.items();
_effetto->destroy_rows_c(); _effetto->destroy_rows_c();
int ii = 1; int ii = 1;
// scarico tutte le righe dei cessionari dallo sheet sul file // scarico tutte le righe dei cessionari dallo sheet sul file
for (int i = 0; i < items; i++) for (int i = 0; i < items; i++)
{ {
TToken_string& row = shcess.row(i); TToken_string& row = shcess.row(i);
if ( row.items()== 0 ) continue; // salta le righe vuote if ( row.items()== 0 ) continue; // salta le righe vuote
TRectype& rec = _effetto->row_c(ii, TRUE); TRectype& rec = _effetto->row_c(ii, TRUE);
row.restart(); row.restart();
rec.zero(); rec.zero();
rec.put(CES_NPROGTR, nprogtr); rec.put(CES_NPROGTR, nprogtr);
rec.put(CES_NRIGA, ii); rec.put(CES_NRIGA, ii);
@ -124,16 +124,16 @@ void TVariazione_effetti::common_f(const TMask& m)
rec.put(CES_STATO, row.get_int()); rec.put(CES_STATO, row.get_int());
rec.put(CES_COM, row.get()); rec.put(CES_COM, row.get());
ii++; ii++;
} }
items = shrighe.items(); items = shrighe.items();
_effetto->destroy_rows_r(); _effetto->destroy_rows_r();
ii = 1; ii = 1;
// scarico tutte le righe dell'effetto dallo sheet sul file // scarico tutte le righe dell'effetto dallo sheet sul file
for (i = 0; i < items; i++) for (i = 0; i < items; i++)
{ {
TToken_string& row = shrighe.row(i); TToken_string& row = shrighe.row(i);
real imp_eff(row.get(1)); real imp_eff(row.get(1));
if (imp_eff == 0.0) continue; // salta le righe con importo nullo if (imp_eff == 0.0) continue; // salta le righe con importo nullo
row.restart(); row.restart();
TRectype& rec = _effetto->row_r(ii, TRUE); TRectype& rec = _effetto->row_r(ii, TRUE);
rec.zero(); rec.zero();
@ -157,7 +157,7 @@ void TVariazione_effetti::common_f(const TMask& m)
_effetto->renum(_effetto->numero()); _effetto->renum(_effetto->numero());
} }
// carica nella maschera i dati dai files // carica nella maschera i dati dai files
int TVariazione_effetti::read(TMask& m) int TVariazione_effetti::read(TMask& m)
{ {
m.autoload(*_rel); m.autoload(*_rel);
@ -166,16 +166,16 @@ int TVariazione_effetti::read(TMask& m)
if (err == NOERR) if (err == NOERR)
{ {
// legge l'effetto dal record corrente della relazione // legge l'effetto dal record corrente della relazione
err = _effetto->read(f, _rel->curr()); err = _effetto->read(f, _rel->curr());
if (err == NOERR) if (err == NOERR)
{ {
TString16 codcom(3); TString16 codcom(3);
TToken_string riga(80); TToken_string riga(80);
TSheet_field& shcess = cess_sheet(); TSheet_field& shcess = cess_sheet();
shcess.reset(); shcess.reset();
TSheet_field& shrighe = righe_sheet(); TSheet_field& shrighe = righe_sheet();
shrighe.reset(); shrighe.reset();
int items = _effetto->rows_c(); int items = _effetto->rows_c();
// carica tutti i cessionari nello sheet dal file // carica tutti i cessionari nello sheet dal file
for (int i = 1; i <= items; i++) for (int i = 1; i <= items; i++)
{ {
@ -184,17 +184,17 @@ int TVariazione_effetti::read(TMask& m)
riga.add(rec.get(CES_RAGSOC)); riga.add(rec.get(CES_RAGSOC));
riga.add(rec.get(CES_LOCALITA)); riga.add(rec.get(CES_LOCALITA));
riga.add(rec.get(CES_STATO)); riga.add(rec.get(CES_STATO));
// per caricare nello sheet dei cessionari la denominazione // per caricare nello sheet dei cessionari la denominazione
// del comune di cui si conosce il codice // del comune di cui si conosce il codice
codcom = rec.get(CES_COM); codcom = rec.get(CES_COM);
riga.add(codcom); riga.add(codcom);
_com->zero(); _com->zero();
_com->put(COM_COM, codcom); _com->put(COM_COM, codcom);
if (_com->read() == NOERR) if (_com->read() == NOERR)
riga.add(_com->get(COM_DENCOM)); riga.add(_com->get(COM_DENCOM));
shcess.row(i-1)=riga; shcess.row(i-1)=riga;
} }
items = _effetto->rows_r(); items = _effetto->rows_r();
// carica tutte le righe dell'effetto nello sheet dal file // carica tutte le righe dell'effetto nello sheet dal file
for (i = 1; i <= items; i++) for (i = 1; i <= items; i++)
{ {
@ -210,9 +210,9 @@ int TVariazione_effetti::read(TMask& m)
riga.add(rec.get(REFF_NRATA)); riga.add(rec.get(REFF_NRATA));
char tipo_num = rec.get(REFF_PROVV)[0]; char tipo_num = rec.get(REFF_PROVV)[0];
if (tipo_num == 'D') if (tipo_num == 'D')
riga.add("Definitiva"); riga.add("Definitiva");
else else
riga.add("Provvisoria"); riga.add("Provvisoria");
riga.add(rec.get(REFF_CODNUM)); riga.add(rec.get(REFF_CODNUM));
riga.add(rec.get(REFF_ANNODOC)); riga.add(rec.get(REFF_ANNODOC));
riga.add(rec.get(REFF_NFATT)); riga.add(rec.get(REFF_NFATT));
@ -227,7 +227,7 @@ int TVariazione_effetti::read(TMask& m)
// riscrive effetto // riscrive effetto
int TVariazione_effetti::rewrite(const TMask& m) int TVariazione_effetti::rewrite(const TMask& m)
{ {
common_f(m);// scarica i dati dalla maschera common_f(m);// scarica i dati dalla maschera
TLocalisamfile f(LF_EFFETTI); TLocalisamfile f(LF_EFFETTI);
return _effetto->rewrite(f); return _effetto->rewrite(f);
} }
@ -235,18 +235,18 @@ int TVariazione_effetti::rewrite(const TMask& m)
// scrive i dati su file // scrive i dati su file
int TVariazione_effetti::write(const TMask& m) int TVariazione_effetti::write(const TMask& m)
{ {
common_f(m);// scarica i dati dalla maschera common_f(m);// scarica i dati dalla maschera
TLocalisamfile f(LF_EFFETTI); TLocalisamfile f(LF_EFFETTI);
int err = _effetto->write(f); int err = _effetto->write(f);
if (err == NOERR) if (err == NOERR)
_rel->read();// rilegge per posizionare correttamente la relazione _rel->read();// rilegge per posizionare correttamente la relazione
return err; return err;
} }
// rimuove l'effetto // rimuove l'effetto
bool TVariazione_effetti::remove() bool TVariazione_effetti::remove()
{ {
TLocalisamfile f(LF_EFFETTI); TLocalisamfile f(LF_EFFETTI);
return _effetto->remove(f) == NOERR; return _effetto->remove(f) == NOERR;
} }
@ -254,12 +254,12 @@ bool TVariazione_effetti::remove()
bool TVariazione_effetti::user_create() bool TVariazione_effetti::user_create()
{ {
_msk = new TMask("ef0100a") ; _msk = new TMask("ef0100a") ;
_rel = new TRelation(LF_EFFETTI); _rel = new TRelation(LF_EFFETTI);
_reff = new TLocalisamfile(LF_REFFETTI); _reff = new TLocalisamfile(LF_REFFETTI);
_cess = new TLocalisamfile(LF_CESS); _cess = new TLocalisamfile(LF_CESS);
_com = new TLocalisamfile(LF_COMUNI); _com = new TLocalisamfile(LF_COMUNI);
_effetto = new TEffetto; _effetto = new TEffetto;
_msk->set_handler(F_CODVAL, codval_handler); _msk->set_handler(F_CODVAL, codval_handler);
_msk->set_handler(F_SHEET_RIGHE, handle_sheet); _msk->set_handler(F_SHEET_RIGHE, handle_sheet);
righe_sheet().set_append(TRUE); righe_sheet().set_append(TRUE);
righe_sheet().set_notify(impeff_notify); righe_sheet().set_notify(impeff_notify);
@ -284,17 +284,17 @@ bool TVariazione_effetti::handle_sheet(TMask_field &f, KEY k)
{ {
TMask& m = f.mask(); TMask& m = f.mask();
const int mode = m.mode(); const int mode = m.mode();
// se si vuole salvare e si è in uno dei due modi di funzionamento // se si vuole salvare e si è in uno dei due modi di funzionamento
if ( k == K_ENTER && (mode == MODE_INS || mode == MODE_MOD) ) if ( k == K_ENTER && (mode == MODE_INS || mode == MODE_MOD) )
{ // si controllano le righe del effetto nello sheet { // si controllano le righe del effetto nello sheet
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET_RIGHE); TSheet_field& sf = (TSheet_field&)m.field(F_SHEET_RIGHE);
int items = sf.items(); int items = sf.items();
bool found = FALSE; bool found = FALSE;
for (int i = 0; i < items && !found; i++)// scandisco tutte le righe dello sheet for (int i = 0; i < items && !found; i++)// scandisco tutte le righe dello sheet
{ {
TToken_string& row = sf.row(i); TToken_string& row = sf.row(i);
real imp_eff(row.get(1)); real imp_eff(row.get(1));
// controlla che le righe abbiano un importo // controlla che le righe abbiano un importo
if (imp_eff != 0.0) found = TRUE; if (imp_eff != 0.0) found = TRUE;
} }
// se non ha trovato righe nello sheet oppure se quelle che ci sono non // se non ha trovato righe nello sheet oppure se quelle che ci sono non
@ -304,79 +304,79 @@ bool TVariazione_effetti::handle_sheet(TMask_field &f, KEY k)
error_box("L'effetto non può contenere righe con importo nullo!"); error_box("L'effetto non può contenere righe con importo nullo!");
return FALSE; return FALSE;
} }
} }
return TRUE; return TRUE;
} }
// handler che permette il controllo sulla abilitazione dei campi collegati // handler che permette il controllo sulla abilitazione dei campi collegati
// al codice valuta // al codice valuta
bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k) bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
{ {
TMask &m = f.mask(); TMask &m = f.mask();
TString val(f.get()); TString val(f.get());
if (f.to_check(k, TRUE)) if (f.to_check(k, TRUE))
{ {
// se non c'e valuta o se è lire disabilito i campi collegati // se non c'e valuta o se è lire disabilito i campi collegati
const bool condition = (val == "LIT" || val.empty()); const bool condition = (val == "LIT" || val.empty());
m.enable(-1,!condition); m.enable(-1,!condition);
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET_RIGHE); TSheet_field& sf = (TSheet_field&)m.field(F_SHEET_RIGHE);
if (condition) if (condition)
{ {
m.reset(-1); m.reset(-1);
m.reset(F_TOTIMPVAL); m.reset(F_TOTIMPVAL);
int items = sf.items(); int items = sf.items();
for (int i = 0; i < items; i++) for (int i = 0; i < items; i++)
{ {
TToken_string& row = sf.row(i); TToken_string& row = sf.row(i);
row.add(" ", 2); row.add(" ", 2);
row.add(" ", 3); row.add(" ", 3);
} }
} }
sf.enable_column(F_IMPFATTVAL, !condition); sf.enable_column(F_IMPFATTVAL, !condition);
sf.enable_column(F_IMPEFFVAL, !condition); sf.enable_column(F_IMPEFFVAL, !condition);
sf.force_update(); sf.force_update();
} }
return TRUE; return TRUE;
} }
// funzione chiamata dal notify dello sheet per effettuare il calcolo degli // funzione chiamata dal notify dello sheet per effettuare il calcolo degli
// importi totali (in lire ed in valuta) dell'effetto // importi totali (in lire ed in valuta) dell'effetto
void TVariazione_effetti::calcola_totali() void TVariazione_effetti::calcola_totali()
{ {
TMask* m = app()._msk; TMask* m = app()._msk;
TSheet_field& sf = (TSheet_field&)m->field(F_SHEET_RIGHE); TSheet_field& sf = (TSheet_field&)m->field(F_SHEET_RIGHE);
int items = sf.items(); int items = sf.items();
real imp, impval, impeff, impeffval; real imp, impval, impeff, impeffval;
// scandisco tutte le righe dello sheet e ne prendo gli importi // scandisco tutte le righe dello sheet e ne prendo gli importi
// (in lire ed in valuta) e li sommo al totale // (in lire ed in valuta) e li sommo al totale
for (int i = 0; i < items; i++) for (int i = 0; i < items; i++)
{ {
TToken_string& row = sf.row(i); TToken_string& row = sf.row(i);
imp = row.get(1); imp = row.get(1);
impeff += imp; impeff += imp;
impval = row.get(3); impval = row.get(3);
impeffval += impval; impeffval += impval;
} }
m->set(F_TOTIMP, impeff); m->set(F_TOTIMP, impeff);
m->set(F_TOTIMPVAL, impeffval); m->set(F_TOTIMPVAL, impeffval);
} }
// notify per il calcolo dei totali dell'effetto e per il controllo che non // notify per il calcolo dei totali dell'effetto e per il controllo che non
// vengano eliminate tutte le righe dell'effetto, almeno una deve rimanere // vengano eliminate tutte le righe dell'effetto, almeno una deve rimanere
bool TVariazione_effetti::impeff_notify(TSheet_field& s, int r, KEY key) bool TVariazione_effetti::impeff_notify(TSheet_field& s, int r, KEY key)
{ {
if (s.to_check(key, TRUE)) if (s.to_check(key, TRUE))
{ {
calcola_totali(); calcola_totali();
} }
if (key == K_ENTER) if (key == K_ENTER)
{ {
TToken_string& row = s.row(s.selected()); TToken_string& row = s.row(s.selected());
char tipo_num = row.get(8)[0]; char tipo_num = row.get(8)[0];
if (tipo_num == 'D') if (tipo_num == 'D')
row.add("Definitiva",8); row.add("Definitiva",8);
else else
row.add("Provvisoria",8); row.add("Provvisoria",8);
} }
//se rimane una sola riga nello sheet non la si può cancellare //se rimane una sola riga nello sheet non la si può cancellare
if (key == K_DEL && s.items() == 1) if (key == K_DEL && s.items() == 1)
@ -390,6 +390,6 @@ bool TVariazione_effetti::impeff_notify(TSheet_field& s, int r, KEY key)
int ef0100(int argc, char* argv[]) int ef0100(int argc, char* argv[])
{ {
TVariazione_effetti a ; TVariazione_effetti a ;
a.run(argc, argv, "Variazione Effetti"); a.run(argc, argv, "Effetti");
return 0; return 0;
} }