1997-02-28 11:56:16 +00:00
|
|
|
|
// gestione tabelle di magazzino
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
2007-07-06 10:15:38 +00:00
|
|
|
|
#include "mglib.h"
|
|
|
|
|
#include "../ve/vetbmag.h"
|
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
#include <modaut.h>
|
1997-02-28 11:56:16 +00:00
|
|
|
|
#include <tabapp.h>
|
|
|
|
|
#include <tabutil.h>
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
2009-02-14 19:36:12 +00:00
|
|
|
|
#include "mgtbcau.h"
|
|
|
|
|
#include "mgtbfca.h"
|
1997-02-28 11:56:16 +00:00
|
|
|
|
|
|
|
|
|
|
2007-06-25 15:39:02 +00:00
|
|
|
|
// applicazione per la gestione delle tabelle di magazzino
|
2007-07-06 10:15:38 +00:00
|
|
|
|
class Tab_app_mag : public TTable_application
|
2007-06-25 15:39:02 +00:00
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
protected: // TRelation_application
|
|
|
|
|
virtual bool user_destroy() ;
|
|
|
|
|
virtual bool user_create() ;
|
|
|
|
|
virtual bool protected_record(TRectype& rec) ;
|
|
|
|
|
virtual int rewrite(const TMask& m);
|
|
|
|
|
|
|
|
|
|
virtual TMask * set_mask(TMask * _m=NULL);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
Tab_app_mag();
|
|
|
|
|
virtual ~Tab_app_mag() {}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
HIDDEN inline Tab_app_mag& app() { return (Tab_app_mag&)main_app(); }
|
|
|
|
|
|
|
|
|
|
|
1997-02-28 11:56:16 +00:00
|
|
|
|
#define MAXMETACH 20
|
|
|
|
|
// maschere delle tabelle di magazzino
|
|
|
|
|
class TMask_tabmag : public TMask
|
|
|
|
|
{
|
1997-07-07 10:52:17 +00:00
|
|
|
|
TCodice_livelli * cod_liv;
|
1997-02-28 11:56:16 +00:00
|
|
|
|
TFile_cache *tab_cache;
|
1997-07-07 10:52:17 +00:00
|
|
|
|
TMetachar * metach;
|
1997-02-28 11:56:16 +00:00
|
|
|
|
|
1997-10-29 11:42:37 +00:00
|
|
|
|
static bool stdmag_handler(TMask_field &, KEY); // handler
|
1997-08-21 08:03:10 +00:00
|
|
|
|
static bool singlemag_handler(TMask_field &, KEY); // handler
|
1997-06-19 06:59:32 +00:00
|
|
|
|
static bool sumsign_handler(TMask_field &, KEY); // handler
|
|
|
|
|
static bool format_handler(TMask_field &, KEY); // handler dei metacaratteri
|
1998-08-25 18:07:30 +00:00
|
|
|
|
static bool formatgiac_handler(TMask_field &, KEY); // handler dei metacaratteri
|
|
|
|
|
static bool codlivart_handler(TMask_field &, KEY); // handler del numero formato articoli
|
|
|
|
|
static bool codlivgiac_handler(TMask_field &, KEY); // handler del numero formato giacenze
|
1997-07-07 10:52:17 +00:00
|
|
|
|
static bool codgrp_handler(TMask_field &, KEY); // handler del numero formato
|
2007-06-25 15:39:02 +00:00
|
|
|
|
static bool adv_codgrp_handler(TMask_field& f, KEY k); // handler codice gruppo avanzato
|
1997-02-28 11:56:16 +00:00
|
|
|
|
|
|
|
|
|
public:
|
1998-01-23 09:57:34 +00:00
|
|
|
|
// @cmember Disabilita la verifica del modulo in chiave
|
|
|
|
|
virtual bool check_autorization() const
|
|
|
|
|
{return FALSE;}
|
2007-06-25 15:39:02 +00:00
|
|
|
|
TMask_tabmag(const char*, const TString&);
|
1997-06-19 06:59:32 +00:00
|
|
|
|
virtual ~TMask_tabmag();
|
1997-02-28 11:56:16 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// costruttore della maschera
|
2007-06-25 15:39:02 +00:00
|
|
|
|
TMask_tabmag::TMask_tabmag(const char * _maskname, const TString &tabname)
|
|
|
|
|
: TMask(_maskname)
|
1997-02-28 11:56:16 +00:00
|
|
|
|
{
|
2007-06-25 15:39:02 +00:00
|
|
|
|
cod_liv = NULL;
|
|
|
|
|
|
|
|
|
|
if (tabname == "MAG") // Magazzini
|
|
|
|
|
{
|
|
|
|
|
TMagazzini magazzini;
|
|
|
|
|
if (!magazzini.gestmultimag())
|
1997-02-28 11:56:16 +00:00
|
|
|
|
{
|
2007-06-25 15:39:02 +00:00
|
|
|
|
set_handler(F_CODICE, singlemag_handler);
|
|
|
|
|
set_handler(F_MAGSTD, stdmag_handler);
|
|
|
|
|
//disable(F_MAGSTD);
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
2007-06-25 15:39:02 +00:00
|
|
|
|
if (!magazzini.gestdep())
|
1997-02-28 11:56:16 +00:00
|
|
|
|
{
|
2007-06-25 15:39:02 +00:00
|
|
|
|
field(F_GESTGIA).reset();
|
|
|
|
|
field(F_GESTGIA).disable();
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
2007-06-25 15:39:02 +00:00
|
|
|
|
} else
|
|
|
|
|
if (tabname == "%CAU")
|
|
|
|
|
{
|
|
|
|
|
if (!main_app().has_module(DBAUT))
|
|
|
|
|
hide(F_DIBAEXPLOSION);
|
|
|
|
|
set_handler(F_SGNGIAC, sumsign_handler);
|
2008-10-28 20:02:49 +00:00
|
|
|
|
if (!main_app().has_module(LVAUT))
|
|
|
|
|
hide(-LVAUT);
|
2007-06-25 15:39:02 +00:00
|
|
|
|
} else
|
|
|
|
|
if (tabname == "FCA") // FORMATO CODICE ARTICOLI
|
|
|
|
|
{
|
|
|
|
|
cod_liv=new TCodart_livelli;
|
|
|
|
|
metach= new TMetachar("");
|
|
|
|
|
set_handler(F_FORMLIV, format_handler);
|
|
|
|
|
set_handler(F_CODLIV, codlivart_handler);
|
|
|
|
|
} else
|
|
|
|
|
if (tabname == "GCA") // GRUPPI CODICE ARTICOLI
|
|
|
|
|
{
|
|
|
|
|
cod_liv=new TCodart_livelli;
|
|
|
|
|
set_handler(F_CODGROUP, codgrp_handler);
|
|
|
|
|
} else
|
|
|
|
|
if (tabname == "FCG") // FORMATO CODICE GIACENZE
|
|
|
|
|
{
|
|
|
|
|
cod_liv = new TCodgiac_livelli;
|
|
|
|
|
metach = new TMetachar("") ;
|
|
|
|
|
set_handler(F_FORMLIV, formatgiac_handler);
|
|
|
|
|
set_handler(F_CODLIV, codlivgiac_handler);
|
|
|
|
|
} else
|
|
|
|
|
if (tabname == "GCG") // GRUPPI CODICE GIACENZE
|
|
|
|
|
{
|
|
|
|
|
cod_liv = new TCodgiac_livelli;
|
|
|
|
|
set_handler(F_CODGROUP, codgrp_handler);
|
|
|
|
|
} else
|
|
|
|
|
if (tabname == "GSA") // GRUPPI CODICE AVANZATI
|
|
|
|
|
{
|
|
|
|
|
set_handler(F_CODGROUP, adv_codgrp_handler);
|
|
|
|
|
}
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TMask_tabmag::~TMask_tabmag()
|
|
|
|
|
{
|
2007-06-25 15:39:02 +00:00
|
|
|
|
if (cod_liv!=NULL)
|
|
|
|
|
delete cod_liv;
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
1997-08-21 08:03:10 +00:00
|
|
|
|
// tabella magazzini: controllo codice
|
|
|
|
|
bool TMask_tabmag::singlemag_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
if (k == K_TAB && f.get().not_empty())
|
|
|
|
|
{
|
|
|
|
|
TTable mag("MAG");
|
|
|
|
|
mag.first();
|
|
|
|
|
if (!mag.eof() && mag.get("CODTAB")!=f.get())
|
|
|
|
|
{
|
2004-05-18 10:44:57 +00:00
|
|
|
|
f.error_box(TR("E' abilitata la gestione di un solo magazzino"));
|
1997-08-21 08:03:10 +00:00
|
|
|
|
f.set(mag.get("CODTAB"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1997-10-29 11:42:37 +00:00
|
|
|
|
// tabella magazzini: controllo mag std
|
|
|
|
|
bool TMask_tabmag::stdmag_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
if (k == K_ENTER)
|
|
|
|
|
f.set("X");
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-28 11:56:16 +00:00
|
|
|
|
// tabella causali: handler della somma segni
|
|
|
|
|
bool TMask_tabmag::sumsign_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
2009-04-14 15:47:57 +00:00
|
|
|
|
bool ok = true;
|
1997-02-28 11:56:16 +00:00
|
|
|
|
if (k == K_ENTER)
|
|
|
|
|
{
|
1997-07-07 10:52:17 +00:00
|
|
|
|
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);
|
1997-07-22 07:46:23 +00:00
|
|
|
|
ss+=f.mask().get_int(F_SGNPRODF)-f.mask().get_int(F_SGNPRODC);
|
1997-07-07 10:52:17 +00:00
|
|
|
|
ss+=f.mask().get_int(F_SGNSCAR);
|
|
|
|
|
f.mask().set(F_SUMSIGN,long(ss));
|
|
|
|
|
if (ss!=0)
|
1997-02-28 11:56:16 +00:00
|
|
|
|
{
|
2004-05-18 10:44:57 +00:00
|
|
|
|
f.error_box(TR("La somma dei segni \n((GIAC-RIM)-(ACQ+ENTR)+(VEN+USC)+(ACL-INCL)+(PRODF-PRODC) + SCARTI) \ndeve essere uguale a zero"));
|
1997-06-19 06:59:32 +00:00
|
|
|
|
return FALSE;
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
1999-04-06 15:34:39 +00:00
|
|
|
|
#define ABSSALDO(fld) abs(f.mask().get_int(fld))
|
|
|
|
|
if (f.mask().edit_mode() || f.mask().insert_mode())
|
|
|
|
|
{
|
|
|
|
|
int ps=ABSSALDO(F_SGNGIAC)+ABSSALDO(F_SGNRIM);
|
|
|
|
|
ps+=ABSSALDO(F_SGNACQ)+ABSSALDO(F_SGNENTR);
|
|
|
|
|
ps+=ABSSALDO(F_SGNVEN)+ABSSALDO(F_SGNUSC);
|
|
|
|
|
ps+=ABSSALDO(F_SGNACL)+ABSSALDO(F_SGNINCL);
|
|
|
|
|
ps+=ABSSALDO(F_SGNPRODF)+ABSSALDO(F_SGNPRODC);
|
|
|
|
|
ps+=ABSSALDO(F_SGNORDC)+ABSSALDO(F_SGNORDF);
|
|
|
|
|
ps+=ABSSALDO(F_SGNLABEL)+ABSSALDO(F_SGNSCAR);
|
|
|
|
|
if (ps==0)
|
2009-04-14 15:47:57 +00:00
|
|
|
|
ok = f.yesno_box(TR("Attenzione: la causale non movimenta nessun saldo. Confermare?"));
|
1999-04-06 15:34:39 +00:00
|
|
|
|
const char tipomov=*f.mask().get(F_TIPOMOV);
|
|
|
|
|
if ((f.mask().get_int(F_SGNGIAC) >=0 && tipomov=='S') )
|
2009-04-14 15:47:57 +00:00
|
|
|
|
ok = f.yesno_box(TR("Attenzione: la causale e' impostata come scarico ma la giacenza non e' movimentata in negativo. Confermare?"));
|
1999-04-06 15:34:39 +00:00
|
|
|
|
if ((f.mask().get_int(F_SGNGIAC) <=0 && tipomov=='C'))
|
2009-04-14 15:47:57 +00:00
|
|
|
|
ok = f.yesno_box(TR("Attenzione: la causale e' impostata come carico ma la giacenza non e' movimentata in positivo. Confermare?"));
|
1999-04-06 15:34:39 +00:00
|
|
|
|
}
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
1999-04-06 15:34:39 +00:00
|
|
|
|
return ok;
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// HANDLER DEL FORMATO DEL LIVELLO
|
|
|
|
|
bool TMask_tabmag::format_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
if (k == K_TAB && f.focusdirty())
|
|
|
|
|
{
|
|
|
|
|
TString s(f.get());
|
1998-08-25 18:07:30 +00:00
|
|
|
|
TMask_tabmag & mask=((TMask_tabmag &)f.mask());
|
2007-06-25 15:39:02 +00:00
|
|
|
|
TTable aux_tabf(app().get_tabname());
|
1997-02-28 11:56:16 +00:00
|
|
|
|
|
|
|
|
|
s.strip_spaces();
|
|
|
|
|
f.set(s);
|
|
|
|
|
|
2007-06-25 15:39:02 +00:00
|
|
|
|
aux_tabf.put("CODTAB",mask.get_int(F_CODLIV)+1);
|
|
|
|
|
if (aux_tabf.read()==NOERR)
|
1997-02-28 11:56:16 +00:00
|
|
|
|
{
|
1997-07-07 10:52:17 +00:00
|
|
|
|
// non <20> l'ultimo livello: solo caratteri obbligatori
|
1998-08-25 18:07:30 +00:00
|
|
|
|
if (mask.metach->has_opzchars(s))
|
1997-06-19 06:59:32 +00:00
|
|
|
|
{
|
2004-05-18 10:44:57 +00:00
|
|
|
|
f.error_box(FR("I caratteri di formato opzionali ('%s') sono consentiti solo per l'ultimo livello"),
|
1998-08-25 18:07:30 +00:00
|
|
|
|
mask.metach->opz_chars());
|
1997-06-19 06:59:32 +00:00
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
1997-07-07 10:52:17 +00:00
|
|
|
|
}
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
|
// HANDLER DEL FORMATO DEL LIVELLO
|
|
|
|
|
bool TMask_tabmag::formatgiac_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
if (k == K_TAB && f.focusdirty())
|
|
|
|
|
{
|
|
|
|
|
const int maxlen=15;
|
|
|
|
|
int total_len=0;
|
|
|
|
|
TString s(f.get());
|
|
|
|
|
TMask_tabmag & mask=((TMask_tabmag &)f.mask());
|
2007-06-25 15:39:02 +00:00
|
|
|
|
TTable aux_tabf(app().get_tabname());
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
|
|
|
|
s.strip_spaces();
|
|
|
|
|
f.set(s);
|
|
|
|
|
mask.set(F_LENFORM,mask.metach->maxstrlen(s));
|
|
|
|
|
|
2007-06-25 15:39:02 +00:00
|
|
|
|
aux_tabf.put("CODTAB",1);
|
|
|
|
|
if (aux_tabf.read()==NOERR)
|
1998-08-25 18:07:30 +00:00
|
|
|
|
{
|
|
|
|
|
do {
|
2007-06-25 15:39:02 +00:00
|
|
|
|
if (aux_tabf.get_int("CODTAB") != mask.get_int(F_CODLIV))
|
|
|
|
|
total_len+=aux_tabf.get_int("I0");
|
|
|
|
|
} while (aux_tabf.next()==NOERR);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
}
|
|
|
|
|
total_len+=mask.get_int(F_LENFORM);
|
|
|
|
|
if (total_len > maxlen)
|
|
|
|
|
{
|
2004-05-18 10:44:57 +00:00
|
|
|
|
f.error_box(FR("La somma delle lunghezze dei codici \n dei livelli di giacenza eccede \nil massimo consentito di %d caratteri"),maxlen);
|
2009-04-14 15:47:57 +00:00
|
|
|
|
return false;
|
1998-08-25 18:07:30 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2009-04-14 15:47:57 +00:00
|
|
|
|
return true;
|
1998-08-25 18:07:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
1997-02-28 11:56:16 +00:00
|
|
|
|
// HANDLER DEL CODICE LIVELLO
|
1998-08-25 18:07:30 +00:00
|
|
|
|
bool TMask_tabmag::codlivart_handler(TMask_field& f, KEY k)
|
1997-02-28 11:56:16 +00:00
|
|
|
|
{
|
|
|
|
|
if (k == K_TAB && f.focusdirty())
|
|
|
|
|
{
|
2007-06-25 15:39:02 +00:00
|
|
|
|
const int codliv=atoi(f.get());
|
|
|
|
|
if (codliv>1)
|
1997-02-28 11:56:16 +00:00
|
|
|
|
// Non <20> il primo codice
|
|
|
|
|
{
|
2007-06-25 15:39:02 +00:00
|
|
|
|
TMask_tabmag & mask=((TMask_tabmag &)f.mask());
|
|
|
|
|
TTable aux_tabf(app().get_tabname());
|
|
|
|
|
aux_tabf.put("CODTAB",codliv-1);
|
|
|
|
|
if (aux_tabf.read()==NOERR)
|
1997-06-19 06:59:32 +00:00
|
|
|
|
// esiste un precedente
|
|
|
|
|
{
|
2007-06-25 15:39:02 +00:00
|
|
|
|
TString prevformat(aux_tabf.get("S1"));
|
|
|
|
|
aux_tabf.put("CODTAB",codliv+1);
|
|
|
|
|
if (aux_tabf.read()!=NOERR && mask.metach->has_opzchars(prevformat))
|
|
|
|
|
return f.error_box(TR("Il livello precedente include caratteri opzionali nel formato\ne non puo' divenire un livello intermedio"));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
return f.error_box(TR("Non si possono inserire salti nel livello del codice"));
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
2007-06-25 15:39:02 +00:00
|
|
|
|
// HANDLER DEL CODICE GRUPPO AVANZATO
|
|
|
|
|
bool TMask_tabmag::adv_codgrp_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
if (k == K_TAB && f.focusdirty())
|
|
|
|
|
{
|
|
|
|
|
TMask& m = f.mask();
|
|
|
|
|
if (m.query_mode())
|
|
|
|
|
{
|
|
|
|
|
const int desc_pos = m.id2pos(f.dlg()) + 1;
|
|
|
|
|
TMask_field& desc = m.fld(desc_pos);
|
|
|
|
|
if (desc.empty()) // Copia il codice nella descrizione se necessario
|
|
|
|
|
desc.set(f.get());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
1997-02-28 11:56:16 +00:00
|
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
|
// HANDLER DEL CODICE LIVELLO
|
|
|
|
|
bool TMask_tabmag::codlivgiac_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
if (k == K_TAB && f.focusdirty())
|
|
|
|
|
{
|
2007-06-25 15:39:02 +00:00
|
|
|
|
const int codliv = atoi(f.get());
|
2009-04-14 15:47:57 +00:00
|
|
|
|
if (codliv>1) // Non <20> il primo codice
|
1998-08-25 18:07:30 +00:00
|
|
|
|
{
|
2007-06-25 15:39:02 +00:00
|
|
|
|
TTable aux_tabf(app().get_tabname());
|
|
|
|
|
aux_tabf.put("CODTAB",codliv-1);
|
2009-04-14 15:47:57 +00:00
|
|
|
|
if (aux_tabf.read()!=NOERR) // non esiste un precedente
|
2007-06-25 15:39:02 +00:00
|
|
|
|
return f.error_box(TR("Non si possono inserire salti nel livello del codice"));
|
1998-08-25 18:07:30 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-28 11:56:16 +00:00
|
|
|
|
// HANDLER DEL CODICE LIVELLO giacenza
|
|
|
|
|
// HANDLER DEL CODICE LIVELLO anagrafica
|
1997-07-07 10:52:17 +00:00
|
|
|
|
bool TMask_tabmag::codgrp_handler(TMask_field& f, KEY k)
|
1997-02-28 11:56:16 +00:00
|
|
|
|
{
|
1998-01-09 16:33:25 +00:00
|
|
|
|
if ((k == K_TAB && f.focusdirty() )||k == K_ENTER )
|
1997-02-28 11:56:16 +00:00
|
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
|
TMask_tabmag & mask=((TMask_tabmag &)f.mask());
|
|
|
|
|
if (!mask.cod_liv->enabled())
|
2007-06-25 15:39:02 +00:00
|
|
|
|
return f.error_box(TR("Livelli del codice non abilitati"));
|
1998-01-09 16:33:25 +00:00
|
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
|
if (!f.empty() && !(mask.cod_liv->fit_to_format(f.get(),mask.get_int(F_CODLIV))))
|
2007-06-25 15:39:02 +00:00
|
|
|
|
return f.error_box(TR("Codice non corrispondente al formato previsto"));
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// costruttore
|
|
|
|
|
Tab_app_mag::Tab_app_mag() {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool Tab_app_mag::protected_record(TRectype& rec)
|
|
|
|
|
{
|
|
|
|
|
bool prot = rec.get_bool(FPC);
|
|
|
|
|
if (!prot)
|
|
|
|
|
{
|
2009-04-14 15:47:57 +00:00
|
|
|
|
const TString4 tn = get_tabname();
|
|
|
|
|
if (tn=="FCA" || tn=="FCG" )
|
1997-06-19 06:59:32 +00:00
|
|
|
|
{
|
|
|
|
|
// non si possono cancellare i livelli intermedi:se non <20> l'ultimo livello, proteggilo
|
2009-04-14 15:47:57 +00:00
|
|
|
|
TTable aux_tabf(tn);
|
1997-06-19 06:59:32 +00:00
|
|
|
|
aux_tabf.put("CODTAB",rec.get_int("CODTAB")+1);
|
|
|
|
|
if (aux_tabf.read()==NOERR)
|
2009-04-14 15:47:57 +00:00
|
|
|
|
prot = true;
|
1997-06-19 06:59:32 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
1997-02-28 11:56:16 +00:00
|
|
|
|
return prot;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// alloca/cambia la maschera dell'applicazione
|
|
|
|
|
TMask * Tab_app_mag::set_mask(TMask * _m)
|
|
|
|
|
{
|
1997-06-19 06:59:32 +00:00
|
|
|
|
if (_m != NULL)
|
|
|
|
|
return Tab_application::set_mask(_m);
|
2007-06-25 15:39:02 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
const TString& tabname = get_tabname();
|
|
|
|
|
TString maskname; get_mask_name(maskname);
|
|
|
|
|
return Tab_application::set_mask(new TMask_tabmag(maskname, tabname));
|
1997-08-29 12:50:50 +00:00
|
|
|
|
}
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool Tab_app_mag::user_create()
|
|
|
|
|
{
|
|
|
|
|
/*
|
1997-06-19 06:59:32 +00:00
|
|
|
|
la Tab_application::user_create() apre la maschera TMask in modo automatico
|
|
|
|
|
basandosi sul parametro passato sulla linea di comando e sulla convenzione
|
|
|
|
|
nome = "BATB"+parametro;
|
|
|
|
|
ORA:
|
|
|
|
|
- questa convenzione cambier<EFBFBD> per separare i programmi (e le maschere)
|
|
|
|
|
dei vari pacchetti
|
|
|
|
|
In tal caso ridefinire il metodo virtual mask_name()
|
|
|
|
|
- secondo il nuovo stile, gli handler vanno posti in maschere derivate
|
|
|
|
|
dalla TMask (TMask_tabmag, TMask_tabcau, ecc), pertanto occorre che
|
|
|
|
|
la maschera aperta sia del tipo corretto
|
|
|
|
|
per questo motivo la maschera viene creata dalla user_create()
|
1997-02-28 11:56:16 +00:00
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
bool ok = Tab_application::user_create();
|
1997-06-19 06:59:32 +00:00
|
|
|
|
|
1997-02-28 11:56:16 +00:00
|
|
|
|
if (ok)
|
|
|
|
|
{
|
|
|
|
|
//TMask& mask = *set_mask();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ok;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool Tab_app_mag::user_destroy()
|
|
|
|
|
{
|
|
|
|
|
return Tab_application::user_destroy();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int Tab_app_mag::rewrite(const TMask& m)
|
|
|
|
|
{
|
|
|
|
|
return Tab_application::rewrite(m);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int mg0100(int argc, char* argv[])
|
|
|
|
|
{
|
|
|
|
|
Tab_app_mag a;
|
2004-05-18 10:44:57 +00:00
|
|
|
|
a.run(argc, argv, TR("Tabella"));
|
1997-02-28 11:56:16 +00:00
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|