Nuovi oggeti per la gestione del codice a livelli
git-svn-id: svn://10.65.10.50/trunk@4830 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
5e7b926ce5
commit
7cfb50740b
@ -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;i<MAXMETACH;i++)
|
||||
metac[i]=NULL;
|
||||
if (tabname == "CAU")
|
||||
if (tabname == "%CAU")
|
||||
{
|
||||
set_handler(F_SGNGIAC, sumsign_handler);
|
||||
}
|
||||
if (tabname == "FCA") // FORMATO CODICE ARTICOLI
|
||||
{
|
||||
metac[0]=new TMetachar;
|
||||
cod_liv=new TCodart_livelli;
|
||||
aux_tabf = new TTable("FCA");
|
||||
metach= new TMetachar("");
|
||||
set_handler(F_FORMLIV, format_handler);
|
||||
set_handler(F_CODLIV, codliv_handler);
|
||||
}
|
||||
if (tabname == "GCA") // GRUPPI CODICE ARTICOLI
|
||||
{
|
||||
tab_cache = new TDecoder("FCA","S1");
|
||||
tab_cache->fill();
|
||||
// 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;i<MAXMETACH;i++) {
|
||||
if (metac[i]!=NULL)
|
||||
delete metac[i];
|
||||
}
|
||||
}
|
||||
|
||||
// tabella causali: handler della somma segni
|
||||
@ -91,7 +77,14 @@ bool TMask_tabmag::sumsign_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (k == K_ENTER)
|
||||
{
|
||||
if (f.mask().get_int(F_SUMSIGN)!=0)
|
||||
int ss=f.mask().get_int(F_SGNGIAC)-f.mask().get_int(F_SGNRIM);
|
||||
ss-=f.mask().get_int(F_SGNACQ)+f.mask().get_int(F_SGNENTR);
|
||||
ss+=f.mask().get_int(F_SGNVEN)+f.mask().get_int(F_SGNUSC);
|
||||
ss+=f.mask().get_int(F_SGNACL)-f.mask().get_int(F_SGNINCL);
|
||||
ss+=f.mask().get_int(F_SGNPRODF)+f.mask().get_int(F_SGNPRODC);
|
||||
ss+=f.mask().get_int(F_SGNSCAR);
|
||||
f.mask().set(F_SUMSIGN,long(ss));
|
||||
if (ss!=0)
|
||||
{
|
||||
f.error_box("La somma dei segni \n((GIAC-RIM)-(ACQ+ENTR)+(VEN+USC)+(ACL-INCL)+(PRODF-PRODC) + SCARTI) \ndeve essere uguale a zero");
|
||||
return FALSE;
|
||||
@ -106,33 +99,26 @@ bool TMask_tabmag::format_handler(TMask_field& f, KEY k)
|
||||
if (k == K_TAB && f.focusdirty())
|
||||
{
|
||||
TString s(f.get());
|
||||
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;
|
||||
|
||||
s.strip_spaces();
|
||||
f.set(s);
|
||||
|
||||
aux_tabf->zero();
|
||||
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user