Modificati tutti gli sheet con autoload/autosave automatico

git-svn-id: svn://10.65.10.50/trunk@4396 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
augusto 1997-05-23 14:52:38 +00:00
parent e8e964001b
commit 8ca204bc3f

View File

@ -13,10 +13,10 @@
// maschera dell'anagrafica di magazzino
class TMask_anamag: public TMask {
TLocalisamfile *_codcorr; // file di accesso ai codici corrispondenti
TLocalisamfile *_deslin; // file di accesso alle descrizioni in lingua
TLocalisamfile *_umart; // file di accesso alle unità di misura
TLocalisamfile *_giacenze; // file di accesso alle giacenze
// TLocalisamfile *_codcorr; // file di accesso ai codici corrispondenti
// TLocalisamfile *_deslin; // file di accesso alle descrizioni in lingua
// TLocalisamfile *_umart; // file di accesso alle unità di misura
// TLocalisamfile *_giacenze; // file di accesso alle giacenze
TRelation * _rel; // relazione principale
TRecord_array *_linee_rec_giac; // record array di accoppiamento delle giacenze con lo sheet
@ -28,6 +28,7 @@ class TMask_anamag: public TMask {
int last_annosto;
static bool handle_codice(TMask_field &, KEY); // handler del campo codice articolo
static bool handle_livart(TMask_field &, KEY); // handler dei campi codice articolo (livelli)
static bool handle_anno(TMask_field &, KEY); // handler del campo anno delle giacenze
static bool handle_stoanno(TMask_field &, KEY); // handler del campo anno delle giacenze
static bool handle_sheet_um(TMask_field &, KEY); // handler dello sheet delle unità di misura
@ -40,25 +41,24 @@ class TMask_anamag: public TMask {
static bool handle_sheet_um_price(TMask_field &, KEY); // handler del campo PREZZO e PREZZO_LORDO dello sheet delle unità di misura
public:
TMask_anamag(TRelation * rel, bool enable_mag);
TMask_anamag(TRelation * rel, bool enable_mag, bool enable_artliv);
virtual ~TMask_anamag();
int sheetgiac_read();
int sheetgiac_write(const int re);
int sheetgiac_remove();
static void sheetgiac_get(TSheet_field &fld_righe, int item);
static void sheetgiac_put(TSheet_field &fld_righe, int item);
};
// costruttore della maschera anagrafica di magazzino
TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag) : TMask("ve2400")
TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag, bool enable_artliv) : TMask("ve2400")
{
_rel=rel;
_umart= new TLocalisamfile(LF_UMART); // apre i file per disporre dei tracciati record
/* _umart= new TLocalisamfile(LF_UMART); // apre i file per disporre dei tracciati record
_deslin= new TLocalisamfile(LF_DESLIN);
_codcorr= new TLocalisamfile(LF_CODCORR);
_giacenze= new TLocalisamfile(LF_MAG);
_linee_rec_giac= new TRecord_array(LF_MAG, "NRIGA");// alloca i record
*/
// imposta il riconoscimento dei caratteri del formato dell'ultima parte dell'articolo
TString80 format("");
TTable _tabfca("FCA");
@ -73,7 +73,6 @@ TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag) : TMask("ve2400")
last_annogiac=-1;
last_annosto=-1;
set_handler(F_CODART, handle_codice);
set_handler(F_ANNO, handle_anno);
set_handler(F_STOANNO, handle_stoanno);
set_handler(F_SHEETUM, handle_sheet_um);
@ -81,6 +80,8 @@ TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag) : TMask("ve2400")
set_handler(F_SHEETDESLIN, handle_sheet_deslin);
set_handler(F_SHEETCOD, handle_sheet_cod);
set_handler(F_SHEETGIAC, handle_sheetgiac);
((TSheet_field &)field(F_SHEETGIAC)).set_userget(sheetgiac_get);
((TSheet_field &)field(F_SHEETGIAC)).set_userput(sheetgiac_put);
set_handler(F_SHEETSTOMAG, handle_sheetstomag);
@ -91,8 +92,6 @@ TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag) : TMask("ve2400")
fm.set_handler(FS_PREZZO_LORDO, handle_sheet_um_price);
// Abilita la pagina delle giacenze
// TConfig conf_mg(CONFIG_DITTA, "mg");
// if (conf_mg.get_bool("....."))
if (enable_mag)
{
enable_page(4,TRUE);
@ -100,44 +99,23 @@ TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag) : TMask("ve2400")
// per la pagina giacenze
TSheet_field &fld_giac= (TSheet_field &)field(F_SHEETGIAC);
// disabilita le colonne quando non sono utilizzati i livelli di giacenza
if (livelli_giac->enabled(1)) {
fld_giac.sheet_mask().field(F_LIV1).show();
fld_giac.set_column_header(fld_giac.cid2index(F_LIV1),livelli_giac->name(1));
fld_giac.sheet_mask().field(F_LIV1).set_prompt(livelli_giac->name(1));
for (int i=0; i<4; i++)
{
if (livelli_giac->enabled(1+i)) {
fld_giac.sheet_mask().field(F_LIV1+i).show();
fld_giac.set_column_header(fld_giac.cid2index(F_LIV1+i),livelli_giac->name(1+i));
fld_giac.sheet_mask().field(F_LIV1+i).set_prompt(livelli_giac->name(1+i));
} else {
fld_giac.sheet_mask().field(F_LIV1).hide();
fld_giac.delete_column(fld_giac.cid2index(F_LIV1));
fld_giac.sheet_mask().field(F_LIV1+i).hide();
fld_giac.delete_column(fld_giac.cid2index(F_LIV1+i));
}
if (livelli_giac->enabled(2)) {
fld_giac.sheet_mask().field(F_LIV2).show();
fld_giac.set_column_header(fld_giac.cid2index(F_LIV2),livelli_giac->name(2));
fld_giac.sheet_mask().field(F_LIV2).set_prompt(livelli_giac->name(2));
} else {
fld_giac.sheet_mask().field(F_LIV2).hide();
fld_giac.delete_column(fld_giac.cid2index(F_LIV2));
}
if (livelli_giac->enabled(3)) {
fld_giac.sheet_mask().field(F_LIV3).show();
fld_giac.set_column_header(fld_giac.cid2index(F_LIV3),livelli_giac->name(3));
fld_giac.sheet_mask().field(F_LIV3).set_prompt(livelli_giac->name(3));
} else {
fld_giac.sheet_mask().field(F_LIV3).hide();
fld_giac.delete_column(fld_giac.cid2index(F_LIV3));
}
if (livelli_giac->enabled(4)) {
fld_giac.sheet_mask().field(F_LIV4).show();
fld_giac.set_column_header(fld_giac.cid2index(F_LIV4),livelli_giac->name(4));
fld_giac.sheet_mask().field(F_LIV4).set_prompt(livelli_giac->name(4));
} else {
fld_giac.sheet_mask().field(F_LIV4).hide();
fld_giac.delete_column(fld_giac.cid2index(F_LIV4));
}
// disabilita la colonna numero distinte
if (1) {
if (0) {
fld_giac.delete_column(fld_giac.cid2index(F_NDIST));
fld_giac.sheet_mask().field(F_NDIST).enable(FALSE);
}
// abilita la gestione delle ubicazioni
// abilita la gestione delle ubicazioni (manuale/su tabella)
if (1) {
fld_giac.sheet_mask().field(F_UBICAZ).show(FALSE);
fld_giac.sheet_mask().field(F_UBICAZD).show(FALSE);
@ -150,23 +128,54 @@ TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag) : TMask("ve2400")
} else {
enable_page(4,FALSE);
}
// abilita la visualizzazione dei campi distinti per i livelli articolo
if (enable_artliv)
{
field(F_CODART).hide();
field(F_GCA).hide();
for (int i=0; i<3; i++)
{
// versione con campi predefiniti sulla maschera
if (livelli_art->enabled(1+i)) {
field(F_LIVART1+i).show();
field(F_LIVART1+livelli_giac->last_level()-1).check_type(1+i==livelli_art->last_level() ? CHECK_NONE : CHECK_REQUIRED);
((TEdit_field&)field(F_LIVART1+livelli_giac->last_level()-1)).set_width(livelli_art->code_lenght(1+i));
set_handler(F_LIVART1+i, handle_livart);
} else {
field(F_LIVART1+i).hide();
field(F_LIVART1+livelli_giac->last_level()-1).check_type(CHECK_NONE);
}
}
} else {
if (livelli_art->enabled())
{
set_handler(F_CODART, handle_codice);
for (int i=0; i<9; i++)
field(F_LIVART1+i).hide();
} else
if (!livelli_art->enabled(2))
// .. nasconde il pulsante dei livelli
field(F_GCA).hide();
}
}
TMask_anamag::~TMask_anamag()
{
delete _linee_rec_giac;
/* delete _linee_rec_giac;
delete _giacenze;
delete _codcorr;
delete _deslin;
delete _umart;
*/
delete livelli_art;
delete livelli_giac;
}
//
// HANDLER DEL CODICE: controlla la corrispondenza al formato previsto
bool TMask_anamag::handle_codice(TMask_field &fld, KEY k)
{
TMask_anamag &mask=(TMask_anamag &)fld.mask();
@ -182,19 +191,41 @@ bool TMask_anamag::handle_codice(TMask_field &fld, KEY k)
_tabgrp.zero();
_tabgrp.put("CODTAB", codepart);
if (_tabgrp.read()!=NOERR) {
fld.error_box("'%s' non è un codice del gruppo '%s'",(const char *)codepart.mid(1),(const char *)mask.livelli_art->name(l));
fld.error_box("'%s' non appartiene a '%s'",(const char *)codepart.mid(1),(const char *)mask.livelli_art->name(l));
return(FALSE);
}
}
codepart=mask.livelli_art->unpack_grpcode(fld.get(),l);
codepart=mask.livelli_art->unpack_grpcode(fld.get(),mask.livelli_art->last_level());
if (codepart.blank()) {
fld.error_box("Il codice articolo non può essere vuoto");
return(FALSE);
}
if (!mask.metac->recognized(codepart)) {
fld.error_box("Il codice articolo non corrisponde al formato previsto ('%s' ?? '%s')",(const char *)codepart,(const char *)mask.metac->language());
fld.error_box("Il codice articolo non corrisponde al formato previsto \n('%s' ?? '%s')",(const char *)codepart,(const char *)mask.metac->language());
return(FALSE);
}
}
return(TRUE);
}
// HANDLER DEL CODICE: controlla la corrispondenza al formato previsto
bool TMask_anamag::handle_livart(TMask_field &fld, KEY k)
{
if (k == K_TAB && fld.focusdirty())
{
TMask_anamag & m=(TMask_anamag & )fld.mask();
TString s(m.field(F_CODART).get());
m.livelli_art->pack_grpcode(s,fld.get(),fld.dlg()-F_LIVART1+1);
m.field(F_CODART).set(s);
if (fld.dlg()-F_LIVART1+1==m.livelli_art->last_level() && fld.get().blank()) {
fld.error_box("Il codice articolo non può essere lasciato in bianco");
return FALSE;
}
}
return TRUE;
}
bool TMask_anamag::handle_anno(TMask_field &fld, KEY k)
{
TMask_anamag &mask=(TMask_anamag &)fld.mask();
@ -202,17 +233,19 @@ bool TMask_anamag::handle_anno(TMask_field &fld, KEY k)
if (k == K_TAB)
{
TSheet_field &fld_giac= (TSheet_field &)fld.mask().field(F_SHEETGIAC);
TSheet_field &fld_giac= (TSheet_field &)mask.field(F_SHEETGIAC);
if (mask.last_annogiac>0 && mask.last_annogiac!=fld.mask().get_int(F_ANNO)) {
if (fld.mask().field(F_SHEETGIAC).dirty() && handle_sheetgiac(fld_giac,K_ENTER)) {
if (fld_giac.dirty() && handle_sheetgiac(fld_giac,K_ENTER)) {
if (fld.yesno_box("Vuoi salvare le righe di giacenza per l'anno %d",mask.last_annogiac )) {
mask.sheetgiac_write(TRUE);
fld_giac.autosave(*mask._rel);
fld_giac.record()->rewrite();
}
}
mask.field(F_ANNORIF).set(fld.get());
// rilegge le giacenze relative a quell'anno ed aggiorna il layout
mask.sheetgiac_read();
fld_giac.record()->read(*fld_giac.putkey(*mask._rel));
fld_giac.autoload(*mask._rel);
fld_giac.force_update();
}
mask.last_annogiac=mask.get_int(F_ANNO);
@ -360,7 +393,10 @@ bool TMask_anamag::handle_sheetgiac(TMask_field &fld, KEY k)
// aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
if (v.add(codgiac))
return error_box("Esistono due righe con lo stesso codice di giacenza");
// ordina le righe per livello+codmag
}
// ordina le righe per livello+codmag
// f.rows_array().sort();
}
}
return TRUE;
@ -488,138 +524,38 @@ bool TMask_anamag::handle_sheet_um_price(TMask_field &f, KEY k)
int TMask_anamag::sheetgiac_read()
void TMask_anamag::sheetgiac_get(TSheet_field &fld_righe, int item)
{
TRectype rgiac(LF_MAG); // prende il record corrente dal file giacenze
TSheet_field &fld_giac= (TSheet_field &)field(F_SHEETGIAC); // prende lo sheet giacenze
rgiac.put("CODART", get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera)
rgiac.put("ANNOES", get(F_ANNO)); //
_linee_rec_giac->read(rgiac); // legge il record array
fld_giac.destroy(); // cancella lo sheet
const int lastgiac = _linee_rec_giac->last_row();
for (int i= 1; i <= lastgiac; i++)
{
TRectype &rec= _linee_rec_giac->row(i, TRUE); // prende il record della riga corrente dal record array
TToken_string &row= fld_giac.row(i-1);
row = "";
row.add(rec.get("CODMAG").mid(0,3)); // imposta la riga dello sheet con i campi del record della riga corrente
row.add(rec.get("CODMAG").mid(3,2));
// !?!?! codici di livello
row.add( livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,1) );
row.add( livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,2) );
row.add( livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,3) );
row.add( livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,4) );
row.add(rec.get("UBICAZ"));
row.add(rec.get("GIAC"));
row.add(rec.get("RIM"));
row.add(rec.get("VALRIM"));
row.add(rec.get("ACQ"));
row.add(rec.get("VALACQ"));
row.add(rec.get("ENT"));
row.add(rec.get("VALENT"));
row.add(rec.get("VEN"));
row.add(rec.get("VALVEN"));
row.add(rec.get("USC"));
row.add(rec.get("VALUSC"));
row.add(rec.get("ORDF"));
row.add(rec.get("VALORDF"));
row.add(rec.get("ORDC"));
row.add(rec.get("VALORDC"));
row.add(rec.get("SCARTI"));
row.add(rec.get("VALSCARTI"));
row.add(rec.get("PRODCOMP"));
row.add(rec.get("PRODFIN"));
row.add(rec.get("ACL"));
row.add(rec.get("INCL"));
row.add(rec.get("NLABEL"));
row.add(rec.get("SCORTAMIN"));
row.add(rec.get("LIVRIOR"));
row.add(rec.get("LOTTORIOR"));
row.add(rec.get("GIORNIRIOR"));
row.add(rec.get("NDIST"));
fld_giac.check_row(i-1);
}
return(0);
TMask_anamag &m=(TMask_anamag &)fld_righe.mask();
// prende il record della riga corrente dal record array
TRectype &rec= fld_righe.record()->row(item, TRUE);
TToken_string &row= fld_righe.row(item-1);
// codici di livello
row.add( m.livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,1),fld_righe.cid2index(F_LIV1) );
row.add( m.livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,2),fld_righe.cid2index(F_LIV2) );
row.add( m.livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,3),fld_righe.cid2index(F_LIV3) );
row.add( m.livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,4),fld_righe.cid2index(F_LIV4) );
}
int TMask_anamag::sheetgiac_write(const int re)
// item varies from 1 to items()
void TMask_anamag::sheetgiac_put(TSheet_field &fld_righe, int item)
{
TSheet_field &fld_giac= (TSheet_field &)field(F_SHEETGIAC);
_linee_rec_giac->destroy_rows();
if (insert_mode()) _linee_rec_giac->renum_key("CODART", get(F_CODART));
for (int i= 0; i < fld_giac.items(); i++)
{
TToken_string &row= fld_giac.row(i);
TString16 codmag(row.get(F_CODMAG-FIRST_FIELD));
codmag << row.get();
if (codmag.not_empty())
{
TRectype &recgiac= _linee_rec_giac->row(i+1, TRUE);
recgiac.put("CODMAG", codmag);
recgiac.put("ANNOES", last_annogiac);
// !?!?! codici livello
if (livelli_giac->enabled()) {
TMask_anamag &m=(TMask_anamag &)fld_righe.mask();
TToken_string &row= fld_righe.row(item-1);
TRectype &recrighe= fld_righe.record()->row(item, TRUE);
// codici livello
if (m.livelli_giac->enabled()) {
TString16 packedcode;
livelli_giac->pack_grpcode(packedcode,row.get(fld_giac.cid2index(F_LIV1)),1);
livelli_giac->pack_grpcode(packedcode,row.get(fld_giac.cid2index(F_LIV2)),2);
livelli_giac->pack_grpcode(packedcode,row.get(fld_giac.cid2index(F_LIV3)),3);
livelli_giac->pack_grpcode(packedcode,row.get(fld_giac.cid2index(F_LIV4)),4);
recgiac.put("LIVELLO", packedcode);
m.livelli_giac->pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV1)),1);
m.livelli_giac->pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV2)),2);
m.livelli_giac->pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV3)),3);
m.livelli_giac->pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV4)),4);
recrighe.put("LIVELLO", packedcode);
}
recgiac.put("UBICAZ" ,row.get());
recgiac.put("GIAC" ,row.get());
recgiac.put("RIM" ,row.get());
recgiac.put("VALRIM" ,row.get());
recgiac.put("ACQ" ,row.get());
recgiac.put("VALACQ" ,row.get());
recgiac.put("ENT" ,row.get());
recgiac.put("VALENT" ,row.get());
recgiac.put("VEN" ,row.get());
recgiac.put("VALVEN" ,row.get());
recgiac.put("USC" ,row.get());
recgiac.put("VALUSC" ,row.get());
recgiac.put("ORDF" ,row.get());
recgiac.put("VALORDF" ,row.get());
recgiac.put("ORDC" ,row.get());
recgiac.put("VALORDC" ,row.get());
recgiac.put("SCARTI" ,row.get());
recgiac.put("VALSCARTI" ,row.get());
recgiac.put("PRODCOMP" ,row.get());
recgiac.put("PRODFIN" ,row.get());
recgiac.put("ACL" ,row.get());
recgiac.put("INCL" ,row.get());
recgiac.put("NLABEL" ,row.get());
recgiac.put("SCORTAMIN" ,row.get());
recgiac.put("LIVRIOR" ,row.get());
recgiac.put("LOTTORIOR" ,row.get());
recgiac.put("GIORNIRIOR" ,row.get());
// campo distinte
if (0)
recgiac.put("NDIST" ,row.get());
}
}
return (_linee_rec_giac->write(re));
}
inline int TMask_anamag::sheetgiac_remove() {
return(_linee_rec_giac->remove());
}
// ******************************
// applicazione
@ -659,7 +595,7 @@ bool TAnagrafica_magazzino::user_create()
_linee_rec_deslin= new TRecord_array(LF_DESLIN, "NRIGA");
_linee_rec_cod= new TRecord_array(LF_CODCORR, "NRIGA");
_msk= new TMask_anamag(_rel,has_module(MGAUT));
_msk= new TMask_anamag(_rel,has_module(MGAUT),FALSE);
@ -687,7 +623,7 @@ int TAnagrafica_magazzino::read(TMask& m)
TSheet_field &fld_stomag= (TSheet_field &)m.field(F_SHEETSTOMAG); // prende il sheet delle unità di misura
fld_stomag.sheet_mask().field(F_STOCODART).set(m.field(F_CODART).get());
int i;
//int i;
// *****************************
// LETTURA SHEET UNITA' DI MISURA
@ -770,7 +706,7 @@ int TAnagrafica_magazzino::read(TMask& m)
*/
// *****************************
// LETTURA SHEET GIACENZE
((TMask_anamag &)m).sheetgiac_read();
//((TMask_anamag &)m).sheetgiac_read();
} // no errors in TRelation_application::read(m);
return err;
@ -782,7 +718,7 @@ bool TAnagrafica_magazzino::remove()
return //_linee_rec_um->remove() == NOERR &&
// _linee_rec_deslin->remove() == NOERR &&
// _linee_rec_cod->remove() == NOERR &&
_msk->sheetgiac_remove() == NOERR &&
// _msk->sheetgiac_remove() == NOERR &&
TRelation_application::remove();
}
@ -790,9 +726,9 @@ int TAnagrafica_magazzino::write(const TMask& m)
{
int err= TRelation_application::write(m);
if (err != NOERR)
return err;
int i;
//if (err != NOERR)
// return err;
//int i;
// ***********************
// write dello sheet unita' di misura
/*
@ -877,14 +813,14 @@ int TAnagrafica_magazzino::write(const TMask& m)
// ***********************
// write dello sheet giacenze
err = ((TMask_anamag &)m).sheetgiac_write(FALSE);
//err = ((TMask_anamag &)m).sheetgiac_write(FALSE);
return err;
}
int TAnagrafica_magazzino::rewrite(const TMask& m)
{
int i,err;
int err;
// rewrite dello sheet Unita' di misura
/*
TSheet_field &fld_um= (TSheet_field &)m.field(F_SHEETUM);
@ -966,9 +902,9 @@ int TAnagrafica_magazzino::rewrite(const TMask& m)
*/
// rewrite dello sheet giacenze
//
err = ((TMask_anamag &)m).sheetgiac_write(TRUE);
//err = ((TMask_anamag &)m).sheetgiac_write(TRUE);
if (err == NOERR)
//if (err == NOERR)
err= TRelation_application::rewrite(m);
return err;