Aggiunta la gestione dello storico rimanenze
git-svn-id: svn://10.65.10.50/trunk@4393 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
ebfc2aafba
commit
62a19c614b
172
ve/ve2400.cpp
172
ve/ve2400.cpp
@ -17,25 +17,30 @@ class TMask_anamag: public TMask {
|
||||
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
|
||||
|
||||
TMag_livelli * livelli_giac;// oggetto handler per i livelli di giacenza
|
||||
TMag_livelli * livelli_art;// oggetto handler per i livelli di anagraficca
|
||||
TMetachar * metac;
|
||||
int last_annogiac;
|
||||
int last_annosto;
|
||||
|
||||
static bool handle_codice(TMask_field &, KEY); // handler del campo codice articolo
|
||||
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
|
||||
static bool notify_sheet0(TSheet_field & s, int r, KEY k); // handler dello sheet delle unità di misura
|
||||
static bool notify_sheet_um(TSheet_field & s, int r, KEY k); // handler dello sheet delle unità di misura
|
||||
static bool handle_sheet_deslin(TMask_field &, KEY); // handler dello sheet delle descrizioni in lingua
|
||||
static bool handle_sheet_cod(TMask_field &, KEY); // handler dello sheet dei codici alternativi
|
||||
static bool handle_sheetgiac(TMask_field &, KEY); // handler dello sheet giacenze
|
||||
static bool handle_sheetstomag(TMask_field &, KEY); // handler dello sheet storico giacenze
|
||||
static bool handle_sheet_um_um(TMask_field &, KEY); // handler del campo UM dello sheet delle unità di misura
|
||||
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(bool enable_mag);
|
||||
TMask_anamag(TRelation * rel, bool enable_mag);
|
||||
virtual ~TMask_anamag();
|
||||
|
||||
int sheetgiac_read();
|
||||
@ -45,8 +50,9 @@ public:
|
||||
|
||||
|
||||
// costruttore della maschera anagrafica di magazzino
|
||||
TMask_anamag::TMask_anamag(bool enable_mag) : TMask("ve2400")
|
||||
TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag) : TMask("ve2400")
|
||||
{
|
||||
_rel=rel;
|
||||
_umart= new TLocalisamfile(LF_UMART); // apre i file per disporre dei tracciati record
|
||||
_deslin= new TLocalisamfile(LF_DESLIN);
|
||||
_codcorr= new TLocalisamfile(LF_CODCORR);
|
||||
@ -65,14 +71,17 @@ TMask_anamag::TMask_anamag(bool enable_mag) : TMask("ve2400")
|
||||
livelli_art= new TMag_livelli("FCA");
|
||||
// imposta il valore dell'anno per le giacenze
|
||||
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);
|
||||
((TSheet_field &)field(F_SHEETUM)).set_notify(notify_sheet0);
|
||||
((TSheet_field &)field(F_SHEETUM)).set_notify(notify_sheet_um);
|
||||
set_handler(F_SHEETDESLIN, handle_sheet_deslin);
|
||||
set_handler(F_SHEETCOD, handle_sheet_cod);
|
||||
set_handler(F_SHEETGIAC, handle_sheetgiac);
|
||||
set_handler(F_SHEETSTOMAG, handle_sheetstomag);
|
||||
|
||||
|
||||
TSheet_field &f= (TSheet_field &)field(F_SHEETUM);
|
||||
@ -173,13 +182,13 @@ 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 è un codice del gruppo '%s'",(const char *)codepart.mid(1),(const char *)mask.livelli_art->name(l));
|
||||
return(FALSE);
|
||||
}
|
||||
}
|
||||
codepart=mask.livelli_art->unpack_grpcode(fld.get(),l);
|
||||
if (!mask.metac->recognized(codepart)) {
|
||||
fld.error_box("Il codice articolo non corrispondente al formato previsto (%s ?? %s)",(const char *)codepart,(const char *)mask.metac->language());
|
||||
fld.error_box("Il codice articolo non corrisponde al formato previsto ('%s' ?? '%s')",(const char *)codepart,(const char *)mask.metac->language());
|
||||
return(FALSE);
|
||||
}
|
||||
}
|
||||
@ -196,7 +205,7 @@ bool TMask_anamag::handle_anno(TMask_field &fld, KEY k)
|
||||
TSheet_field &fld_giac= (TSheet_field &)fld.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()) {
|
||||
if (fld.mask().field(F_SHEETGIAC).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);
|
||||
}
|
||||
@ -206,6 +215,35 @@ bool TMask_anamag::handle_anno(TMask_field &fld, KEY k)
|
||||
mask.sheetgiac_read();
|
||||
fld_giac.force_update();
|
||||
}
|
||||
mask.last_annogiac=mask.get_int(F_ANNO);
|
||||
}
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
|
||||
bool TMask_anamag::handle_stoanno(TMask_field &fld, KEY k)
|
||||
{
|
||||
TMask_anamag &mask=(TMask_anamag &)fld.mask();
|
||||
|
||||
if (k == K_TAB)
|
||||
{
|
||||
TSheet_field &fld_stomag= (TSheet_field &)fld.mask().field(F_SHEETSTOMAG);
|
||||
|
||||
if (mask.last_annosto>0 && mask.last_annosto!=fld.mask().get_int(F_STOANNO))
|
||||
{
|
||||
if (fld.mask().field(F_SHEETSTOMAG).dirty() && handle_sheetstomag(fld_stomag,K_ENTER)) {
|
||||
if (fld.yesno_box("Vuoi salvare le righe di storico per l'anno %d",mask.last_annosto)) {
|
||||
fld_stomag.autosave(*mask._rel);
|
||||
fld_stomag.record()->write(TRUE);
|
||||
}
|
||||
}
|
||||
mask.field(F_STOANNORIF).set(fld.get());
|
||||
// rilegge le giacenze relative a quell'anno ed aggiorna il layout
|
||||
fld_stomag.record()->read(*fld_stomag.putkey(*mask._rel));
|
||||
fld_stomag.autoload(*mask._rel);
|
||||
fld_stomag.force_update();
|
||||
}
|
||||
mask.last_annosto=mask.get_int(F_STOANNO);
|
||||
}
|
||||
return(TRUE);
|
||||
}
|
||||
@ -235,10 +273,11 @@ bool TMask_anamag::handle_sheet_um(TMask_field &fld, KEY k)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TMask_anamag::notify_sheet0(TSheet_field &s, int r, KEY k)
|
||||
bool TMask_anamag::notify_sheet_um(TSheet_field &s, int r, KEY k)
|
||||
{
|
||||
if (k == K_TAB)
|
||||
s.sheet_mask().enable(DLG_DELREC, r > 0);
|
||||
TMask_field &mf=s.sheet_mask().field(DLG_DELREC);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -299,30 +338,60 @@ bool TMask_anamag::handle_sheetgiac(TMask_field &fld, KEY k)
|
||||
{
|
||||
if (k==K_ENTER)
|
||||
{
|
||||
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
||||
TSheet_field &f=(TSheet_field &)fld;
|
||||
const int items = f.items();
|
||||
|
||||
if (items > 0)
|
||||
{
|
||||
TMask &m= fld.mask(); // prende la maschere d'origine del campo
|
||||
TMask &m= f.mask(); // prende la maschere d'origine del campo
|
||||
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
|
||||
|
||||
for (int i= 0; i< items; i++)
|
||||
{
|
||||
TString codgiac(f.cell(i,F_CODMAG-101));
|
||||
codgiac << f.cell(i,F_CODDEP-101);
|
||||
TString codgiac(f.cell(i,F_CODMAG-FIRST_FIELD));
|
||||
codgiac << f.cell(i,F_CODDEP-FIRST_FIELD);
|
||||
codgiac << f.cell(i,F_LIV1-FIRST_FIELD);
|
||||
codgiac << f.cell(i,F_LIV2-FIRST_FIELD);
|
||||
codgiac << f.cell(i,F_LIV3-FIRST_FIELD);
|
||||
codgiac << f.cell(i,F_LIV4-FIRST_FIELD);
|
||||
|
||||
if (codgiac.empty())
|
||||
return error_box("I codici delle giacenze non possono essere vuoti");
|
||||
// aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
||||
if (v.add(codgiac))
|
||||
return error_box("Le giacenze devono far riferimento a magazzini/depositi diversi tra loro");
|
||||
// aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
||||
return error_box("Esistono due righe con lo stesso codice di giacenza");
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TMask_anamag::handle_sheetstomag(TMask_field &fld, KEY k)
|
||||
{
|
||||
if (k==K_ENTER)
|
||||
{
|
||||
TSheet_field & f=(TSheet_field &)fld;
|
||||
const int items = f.items();
|
||||
|
||||
if (items > 0)
|
||||
{
|
||||
TMask &m= f.mask(); // prende la maschere d'origine del campo
|
||||
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
|
||||
for (int i= 0; i< items; i++)
|
||||
{
|
||||
TString codeser(f.cell(i,F_STOANNOES-FIRST_FIELD));
|
||||
if (codeser.empty())
|
||||
return error_box("I codici degli esercizi non possono essere vuoti");
|
||||
// aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
||||
if (v.add(codeser))
|
||||
return error_box("La composizione delle rimananenze deve far riferimento a esercizi tutti diversi tra loro");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TMask_anamag::handle_sheet_um_um(TMask_field &fld, KEY k)
|
||||
{
|
||||
if (fld.focusdirty() && k == K_TAB)
|
||||
@ -418,12 +487,18 @@ bool TMask_anamag::handle_sheet_um_price(TMask_field &f, KEY k)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int TMask_anamag::sheetgiac_read()
|
||||
{
|
||||
TRectype rgiac(LF_MAG); // prende il record corrente dal file giacenze
|
||||
TSheet_field &fld_giac= (TSheet_field &)field(F_SHEETGIAC); // prende lo sheet giacenze
|
||||
|
||||
last_annogiac=get_int(F_ANNO);
|
||||
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
|
||||
@ -489,7 +564,7 @@ int TMask_anamag::sheetgiac_write(const int re)
|
||||
{
|
||||
TToken_string &row= fld_giac.row(i);
|
||||
|
||||
TString16 codmag(row.get(F_CODMAG-101));
|
||||
TString16 codmag(row.get(F_CODMAG-FIRST_FIELD));
|
||||
codmag << row.get();
|
||||
|
||||
if (codmag.not_empty())
|
||||
@ -501,10 +576,10 @@ int TMask_anamag::sheetgiac_write(const int re)
|
||||
if (livelli_giac->enabled()) {
|
||||
|
||||
TString16 packedcode;
|
||||
livelli_giac->pack_grpcode(packedcode,row.get(F_LIV1-101),1);
|
||||
livelli_giac->pack_grpcode(packedcode,row.get(),2);
|
||||
livelli_giac->pack_grpcode(packedcode,row.get(),3);
|
||||
livelli_giac->pack_grpcode(packedcode,row.get(),4);
|
||||
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);
|
||||
}
|
||||
recgiac.put("UBICAZ" ,row.get());
|
||||
@ -579,13 +654,14 @@ bool TAnagrafica_magazzino::user_create()
|
||||
|
||||
// crea l'oggetto per i parametri di livello giacenza
|
||||
// apre la maschera e dispone gli sheet
|
||||
_msk= new TMask_anamag(has_module(MGAUT));
|
||||
|
||||
|
||||
_rel= new TRelation(LF_ANAMAG);
|
||||
_linee_rec_um= new TRecord_array(LF_UMART, "NRIGA");
|
||||
_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));
|
||||
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -604,12 +680,19 @@ bool TAnagrafica_magazzino::user_destroy()
|
||||
|
||||
int TAnagrafica_magazzino::read(TMask& m)
|
||||
{
|
||||
const int err= TRelation_application::read(m);
|
||||
int err= TRelation_application::read(m);
|
||||
if (err == NOERR)
|
||||
{
|
||||
// LETTURA SHEET STORICO MAGAZZINO IN AUTOMATICO
|
||||
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;
|
||||
// *****************************
|
||||
// LETTURA SHEET UNITA' DI MISURA
|
||||
|
||||
TSheet_field &fld_um= (TSheet_field &)m.field(F_SHEETUM); // prende il sheet delle unità di misura
|
||||
/*
|
||||
TRectype rum(LF_UMART); // crea il record dal file delle unità di misura
|
||||
TString codiva(m.get(F_CODIVA));
|
||||
real netto = 0.0, lordo = 0.0;
|
||||
@ -632,6 +715,7 @@ int TAnagrafica_magazzino::read(TMask& m)
|
||||
row.add(lordo.string());
|
||||
|
||||
}
|
||||
*/
|
||||
if (fld_um.items() == 0)
|
||||
((TToken_string &)fld_um.row(0)) = "|1"; // aggiunge una riga allo sheet
|
||||
else
|
||||
@ -639,8 +723,10 @@ int TAnagrafica_magazzino::read(TMask& m)
|
||||
fld_um.disable_cell(0, 1); // mette in sola lettura il secondo campo della prima riga (il fattore di conversione della prima U.M. è fisso a 1)
|
||||
fld_um.force_update(0); // aggiorna lo stato della riga 0
|
||||
|
||||
|
||||
// *****************************
|
||||
// LETTURA SHEET DESCRIZIONI IN LINGUA
|
||||
/*
|
||||
TRectype r(LF_DESLIN); // prende il record corrente dal file delle descrizioni in lingua
|
||||
TSheet_field &fld_deslin= (TSheet_field &)m.field(F_SHEETDESLIN); // prende il sheet delle descrizioni in lingua
|
||||
|
||||
@ -659,9 +745,11 @@ int TAnagrafica_magazzino::read(TMask& m)
|
||||
row.add(rec.get("CODLIN")); // imposta la riga dello sheet con i campi del record della riga corrente
|
||||
row.add(rec.get("DESCR"));
|
||||
}
|
||||
*/
|
||||
|
||||
// ***************************
|
||||
// LETTURA SHEET CODICI CORRISPONDENTI
|
||||
/*
|
||||
TRectype rcor(LF_CODCORR); // prende il record corrente dal file dei codici corrispondenti
|
||||
TSheet_field &fld_cod= (TSheet_field &)m.field(F_SHEETCOD); // prende lo sheet dei codici corrispondenti
|
||||
|
||||
@ -676,10 +764,10 @@ int TAnagrafica_magazzino::read(TMask& m)
|
||||
TToken_string &row= fld_cod.row(i-1);
|
||||
|
||||
row = "";
|
||||
//row =(rec.get("CODARTALT")); // imposta la riga dello sheet con i campi del record della riga corrente
|
||||
row.add(rec.get("CODARTALT")); // imposta la riga dello sheet con i campi del record della riga corrente
|
||||
row.add(rec.get("TIPO"));
|
||||
}
|
||||
*/
|
||||
// *****************************
|
||||
// LETTURA SHEET GIACENZE
|
||||
((TMask_anamag &)m).sheetgiac_read();
|
||||
@ -691,9 +779,9 @@ int TAnagrafica_magazzino::read(TMask& m)
|
||||
bool TAnagrafica_magazzino::remove()
|
||||
|
||||
{
|
||||
return _linee_rec_um->remove() == NOERR &&
|
||||
_linee_rec_deslin->remove() == NOERR &&
|
||||
_linee_rec_cod->remove() == NOERR &&
|
||||
return //_linee_rec_um->remove() == NOERR &&
|
||||
// _linee_rec_deslin->remove() == NOERR &&
|
||||
// _linee_rec_cod->remove() == NOERR &&
|
||||
_msk->sheetgiac_remove() == NOERR &&
|
||||
TRelation_application::remove();
|
||||
}
|
||||
@ -704,9 +792,10 @@ int TAnagrafica_magazzino::write(const TMask& m)
|
||||
|
||||
if (err != NOERR)
|
||||
return err;
|
||||
|
||||
int i;
|
||||
// ***********************
|
||||
// write dello sheet unita' di misura
|
||||
// write dello sheet unita' di misura
|
||||
/*
|
||||
TSheet_field &fld_um= (TSheet_field &)m.field(F_SHEETUM);
|
||||
|
||||
_linee_rec_um->destroy_rows();
|
||||
@ -731,10 +820,10 @@ int TAnagrafica_magazzino::write(const TMask& m)
|
||||
|
||||
if (err != NOERR)
|
||||
return err;
|
||||
|
||||
*/
|
||||
// ***********************
|
||||
// write dello sheet descrizioni in lingua
|
||||
TSheet_field &fld_deslin= (TSheet_field &)m.field(F_SHEETDESLIN);
|
||||
/*TSheet_field &fld_deslin= (TSheet_field &)m.field(F_SHEETDESLIN);
|
||||
|
||||
_linee_rec_deslin->destroy_rows();
|
||||
if (m.insert_mode()) _linee_rec_deslin->renum_key("CODART", m.get(F_CODART));
|
||||
@ -758,9 +847,10 @@ int TAnagrafica_magazzino::write(const TMask& m)
|
||||
|
||||
if (err != NOERR)
|
||||
return err;
|
||||
|
||||
*/
|
||||
// ***********************
|
||||
// write dello sheet codici alternativi
|
||||
/*
|
||||
TSheet_field &fld_cod= (TSheet_field &)m.field(F_SHEETCOD);
|
||||
|
||||
_linee_rec_cod->destroy_rows();
|
||||
@ -783,7 +873,7 @@ int TAnagrafica_magazzino::write(const TMask& m)
|
||||
err= _linee_rec_cod->write();
|
||||
if (err != NOERR)
|
||||
return err;
|
||||
|
||||
*/
|
||||
// ***********************
|
||||
// write dello sheet giacenze
|
||||
|
||||
@ -794,7 +884,9 @@ int TAnagrafica_magazzino::write(const TMask& m)
|
||||
|
||||
int TAnagrafica_magazzino::rewrite(const TMask& m)
|
||||
{
|
||||
int i,err;
|
||||
// rewrite dello sheet Unita' di misura
|
||||
/*
|
||||
TSheet_field &fld_um= (TSheet_field &)m.field(F_SHEETUM);
|
||||
|
||||
_linee_rec_um->destroy_rows();
|
||||
@ -820,8 +912,9 @@ int TAnagrafica_magazzino::rewrite(const TMask& m)
|
||||
|
||||
if (err != NOERR)
|
||||
return err;
|
||||
|
||||
*/
|
||||
// rewrite dello sheet descrizioni in lingua
|
||||
/*
|
||||
TSheet_field &fld_deslin= (TSheet_field &)m.field(F_SHEETDESLIN);
|
||||
_linee_rec_deslin->destroy_rows();
|
||||
|
||||
@ -845,8 +938,9 @@ int TAnagrafica_magazzino::rewrite(const TMask& m)
|
||||
|
||||
if (err != NOERR)
|
||||
return err;
|
||||
|
||||
*/
|
||||
// rewrite dello sheet codici alt.
|
||||
/*
|
||||
TSheet_field &fld_cod= (TSheet_field &)m.field(F_SHEETCOD);
|
||||
|
||||
_linee_rec_cod->destroy_rows();
|
||||
@ -869,7 +963,7 @@ int TAnagrafica_magazzino::rewrite(const TMask& m)
|
||||
err = _linee_rec_cod->rewrite();
|
||||
if (err != NOERR)
|
||||
return err;
|
||||
|
||||
*/
|
||||
// rewrite dello sheet giacenze
|
||||
//
|
||||
err = ((TMask_anamag &)m).sheetgiac_write(TRUE);
|
||||
|
Loading…
x
Reference in New Issue
Block a user