diff --git a/mg/mg0100.cpp b/mg/mg0100.cpp index 80f7181ea..dc0068416 100755 --- a/mg/mg0100.cpp +++ b/mg/mg0100.cpp @@ -11,15 +11,16 @@ // maschere delle tabelle di magazzino class TMask_tabmag : public TMask { + TCodice_livelli * cod_liv; TTable *aux_tabf; TFile_cache *tab_cache; - TMetachar * metac[MAXMETACH]; + TMetachar * metach; static bool sumsign_handler(TMask_field &, KEY); // handler static bool format_handler(TMask_field &, KEY); // handler dei metacaratteri static bool codliv_handler(TMask_field &, KEY); // handler del numero formato - static bool numform_handler(TMask_field &, KEY); // handler del numero formato - static bool codlivgca_handler(TMask_field &, KEY); // handler del numero formato + static bool codgrp_handler(TMask_field &, KEY); // handler del numero formato + static bool numlivart_handler(TMask_field &, KEY); // handler del numero formato public: @@ -32,47 +33,36 @@ TMask_tabmag::TMask_tabmag(const char * _maskname,const TString16 &tabname): TMask(_maskname) { aux_tabf=NULL; - for (int i=0;ifill(); - // crea i riconoscitori del formato - for (int i=1; ((TDecoder *)tab_cache)->decode(i)!="";i++) - { - metac[i-1]=new TMetachar(((TDecoder *)tab_cache)->decode(i)); - } - set_handler(F_CODLIV, codlivgca_handler); - set_handler(F_CODGROUP, numform_handler); + cod_liv=new TCodart_livelli; + set_handler(F_CODLIV, numlivart_handler); + set_handler(F_CODGROUP, codgrp_handler); } if (tabname == "FCG") // FORMATO CODICE GIACENZE { - metac[0]=new TMetachar; + cod_liv = new TCodgiac_livelli; + metach = new TMetachar("") ; aux_tabf = new TTable("FCG"); set_handler(F_FORMLIV, format_handler); set_handler(F_CODLIV, codliv_handler); } if (tabname == "GCG") // GRUPPI CODICE GIACENZE { - tab_cache = new TDecoder("FCG","S1"); - tab_cache->fill(); - for (int i=1; ((TDecoder *)tab_cache)->decode(i)!="";i++) - { - metac[i-1]=new TMetachar(((TDecoder *)tab_cache)->decode(i)); - } - set_handler(F_CODGROUP, numform_handler); + cod_liv = new TCodgiac_livelli; + set_handler(F_CODGROUP, codgrp_handler); } } @@ -80,10 +70,6 @@ TMask_tabmag::~TMask_tabmag() { if (aux_tabf!=NULL) delete aux_tabf; - for (int i=0;izero(); - aux_tabf->put("CODTAB",mymask.get_int(F_CODLIV)+1); + aux_tabf->put("CODTAB",myself.get_int(F_CODLIV)+1); if (aux_tabf->read()==NOERR) { - // esiste il seguente:solo caratteri obbligatori - if (mymask.metac[0]->has_opzchars(s)) + // non è l'ultimo livello: solo caratteri obbligatori + if (myself.metach->has_opzchars(s)) { - f.error_box("I caratteri di formato opzionali ('%s') sono consentiti solo per l'ultimo livello",mymask.metac[0]->opz_chars()); + f.error_box("I caratteri di formato opzionali ('%s') sono consentiti solo per l'ultimo livello", + myself.metach->opz_chars()); return FALSE; } - } /*else { - // ultimo livello: almeno un carattere obbligatorio - // ELIMINATO - if (!mymask.metac[0]->has_mandchars(s)) - { - f.error_box("Il codice dell'ultimo livello deve includere almeno un carattere obbligatorio (letterali o '%s') ",mymask.metac[0]->mand_chars()); - return FALSE; - } - }*/ + } // setta il campo con la lunghezza massima della stringa di formato - mymask.field(F_LENFORM).set(mymask.metac[0]->maxstrlen(f.get())); + //myself.field(F_LENFORM).set(myself.metach->maxstrlen(f.get())); } return TRUE; } @@ -142,8 +128,8 @@ bool TMask_tabmag::codliv_handler(TMask_field& f, KEY k) { if (k == K_TAB && f.focusdirty()) { - TMask_tabmag & mymask=((TMask_tabmag &)f.mask()); - TTable * aux_tabf=mymask.aux_tabf; + TMask_tabmag & myself=((TMask_tabmag &)f.mask()); + TTable * aux_tabf=myself.aux_tabf; int codliv=atoi((const char *)f.get()); if (codliv>1) @@ -157,7 +143,7 @@ bool TMask_tabmag::codliv_handler(TMask_field& f, KEY k) TString prevformat(aux_tabf->get("S1")); aux_tabf->zero(); aux_tabf->put("CODTAB",codliv+1); - if (aux_tabf->read()!=NOERR && mymask.metac[0]->has_opzchars(prevformat)) + if (aux_tabf->read()!=NOERR && myself.metach->has_opzchars(prevformat)) { f.error_box("Il livello precedente include caratteri opzionali nel formato\ne non puo' divenire un livello intermedio"); return FALSE; @@ -173,16 +159,16 @@ bool TMask_tabmag::codliv_handler(TMask_field& f, KEY k) // gestisce l'introduzione del codice del livello articoli -bool TMask_tabmag::codlivgca_handler(TMask_field& f, KEY k) +bool TMask_tabmag::numlivart_handler(TMask_field& f, KEY k) { if ((k == K_TAB && f.focusdirty())||k == K_ENTER ) { - TMask_tabmag & mymask=((TMask_tabmag &)f.mask()); + TMask_tabmag & myself=((TMask_tabmag &)f.mask()); - if (((TDecoder *)mymask.tab_cache)->decode(atoi((const char *)f.get())+1)=="") + if (myself.get_int(F_CODLIV)==myself.cod_liv->last_level()) // non esiste un seguente { - f.error_box("Non è possibile definire gruppi per l'ultimo livello di codice"); + f.error_box("Non è possibile definire gruppi per l'ultimo livello di codice articolo"); return FALSE; } } @@ -192,13 +178,13 @@ bool TMask_tabmag::codlivgca_handler(TMask_field& f, KEY k) // HANDLER DEL CODICE LIVELLO giacenza // HANDLER DEL CODICE LIVELLO anagrafica -bool TMask_tabmag::numform_handler(TMask_field& f, KEY k) +bool TMask_tabmag::codgrp_handler(TMask_field& f, KEY k) { if ((k == K_TAB && f.focusdirty())||k == K_ENTER ) { - TMask_tabmag & mymask=((TMask_tabmag &)f.mask()); + TMask_tabmag & myself=((TMask_tabmag &)f.mask()); - if (!(mymask.metac[mymask.get_int(F_CODLIV)-1])->recognized(f.get())) + if (!(myself.cod_liv->fit_to_format(f.get(),myself.get_int(F_CODLIV)))) { f.error_box("Codice non corrispondente al formato previsto"); return FALSE;