Storico suddiviso per magazzini
Aggiunte parametrizzazioni da Config_ditta,ve git-svn-id: svn://10.65.10.50/trunk@4778 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
4d246c0258
commit
26dffcf566
362
ve/ve2400.cpp
362
ve/ve2400.cpp
@ -1,8 +1,5 @@
|
||||
#include <relapp.h>
|
||||
#include <tabutil.h>
|
||||
#include <msksheet.h>
|
||||
#include <recarray.h>
|
||||
#include <assoc.h>
|
||||
#include <checks.h>
|
||||
#include <defmask.h>
|
||||
#include <modaut.h>
|
||||
@ -21,16 +18,18 @@ class TMask_anamag: public TMask {
|
||||
TMetachar * metac;
|
||||
int last_annogiac;
|
||||
int last_annosto;
|
||||
TString16 um_principale;
|
||||
|
||||
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
|
||||
static bool notify_sheet_um(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); // notify 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 notify_sheet_sto(TSheet_field & s, int r, KEY k); // notify dello storico
|
||||
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
|
||||
@ -42,15 +41,21 @@ class TMask_anamag: public TMask {
|
||||
|
||||
void clear_info_sto();
|
||||
bool info_sto_dirty();
|
||||
void converti_storico(TString newum);
|
||||
int add_totali_storico(TString &codmag);
|
||||
bool remove_totali_storico(TString & codmag);
|
||||
void update_totali_storico(TString & codmag);
|
||||
bool check_totali_storico();
|
||||
public:
|
||||
TMask_anamag(TRelation * rel, bool enable_mag, bool enable_artliv);
|
||||
virtual ~TMask_anamag();
|
||||
TEsercizi_contabili esercizi_contabili;
|
||||
|
||||
TMask_anamag(TRelation * rel,bool mg_autorized);
|
||||
virtual ~TMask_anamag();
|
||||
};
|
||||
|
||||
|
||||
// costruttore della maschera anagrafica di magazzino
|
||||
TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag, bool enable_artliv) : TMask("ve2400")
|
||||
TMask_anamag::TMask_anamag(TRelation * rel,bool mg_autorized) : TMask("ve2400")
|
||||
{
|
||||
_rel=rel;
|
||||
// imposta il riconoscimento dei caratteri del formato dell'ultima parte dell'articolo
|
||||
@ -77,6 +82,7 @@ TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag, bool enable_artliv)
|
||||
((TSheet_field &)field(F_SHEETGIAC)).set_userget(sheetgiac_get);
|
||||
((TSheet_field &)field(F_SHEETGIAC)).set_userput(sheetgiac_put);
|
||||
set_handler(F_SHEETSTOMAG, handle_sheetstomag);
|
||||
((TSheet_field &)field(F_SHEETSTOMAG)).set_notify(notify_sheet_sto);
|
||||
((TSheet_field &)field(F_SHEETSTOMAG)).set_userget(sheetsto_get);
|
||||
((TSheet_field &)field(F_SHEETSTOMAG)).set_userput(sheetsto_put);
|
||||
|
||||
@ -87,17 +93,21 @@ TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag, bool enable_artliv)
|
||||
fm.set_handler(FS_PREZZO, handle_sheet_um_price);
|
||||
fm.set_handler(FS_PREZZO_LORDO, handle_sheet_um_price);
|
||||
|
||||
// ***************************************************
|
||||
// ABILITAZIONI PARAMETRICHE
|
||||
TConfig mgconfig(CONFIG_DITTA, "mg");
|
||||
|
||||
// Abilita la pagina delle giacenze
|
||||
if (enable_mag)
|
||||
if (mg_autorized && mgconfig.get_bool("GESMAG"))
|
||||
{
|
||||
enable_page(3,TRUE);
|
||||
enable_page(4,TRUE);
|
||||
// setta i campi della maschera
|
||||
// per la pagina giacenze
|
||||
// setta i campi della maschera per la pagina giacenze
|
||||
TSheet_field &fld_giac= (TSheet_field &)field(F_SHEETGIAC);
|
||||
// disabilita le colonne quando non sono utilizzati i livelli di giacenza
|
||||
for (int i=0; i<4; i++)
|
||||
for (int i=0; i<4; i++)
|
||||
{
|
||||
if (livelli_giac->enabled(1+i)) {
|
||||
if (mgconfig.get_bool("GESLIVGIAC") && 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));
|
||||
@ -107,12 +117,12 @@ TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag, bool enable_artliv)
|
||||
}
|
||||
}
|
||||
// disabilita la colonna numero distinte
|
||||
if (0) {
|
||||
if (FALSE) {
|
||||
fld_giac.delete_column(fld_giac.cid2index(F_NDIST));
|
||||
fld_giac.sheet_mask().field(F_NDIST).enable(FALSE);
|
||||
}
|
||||
// abilita la gestione delle ubicazioni (manuale/su tabella)
|
||||
if (1) {
|
||||
if (mgconfig.get("GESUBICAZ")=="M") {
|
||||
fld_giac.sheet_mask().field(F_UBICAZ).show(FALSE);
|
||||
fld_giac.sheet_mask().field(F_UBICAZD).show(FALSE);
|
||||
fld_giac.sheet_mask().field(F_UBICAZ2).show(TRUE);
|
||||
@ -123,9 +133,10 @@ TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag, bool enable_artliv)
|
||||
}
|
||||
} else {
|
||||
enable_page(4,FALSE);
|
||||
enable_page(3,FALSE);
|
||||
}
|
||||
// abilita la visualizzazione dei campi distinti per i livelli articolo
|
||||
if (enable_artliv)
|
||||
if (FALSE)
|
||||
{
|
||||
field(F_CODART).hide();
|
||||
field(F_GCA).hide();
|
||||
@ -144,7 +155,7 @@ TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag, bool enable_artliv)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (livelli_art->enabled())
|
||||
if (mgconfig.get_bool("GESCODART") && livelli_art->enabled())
|
||||
{
|
||||
set_handler(F_CODART, handle_codice);
|
||||
for (int i=0; i<9; i++)
|
||||
@ -187,13 +198,13 @@ void TMask_anamag::sheetsto_get(TSheet_field &sheet_sto, int item)
|
||||
bool TMask_anamag::info_sto_dirty()
|
||||
{
|
||||
return
|
||||
field(F_STOULTCOS1).dirty() ||
|
||||
field(F_STOULTCOS2).dirty() ||
|
||||
field(F_STOCOSTOSTD).dirty() ||
|
||||
field(F_STOCOSTOMEDIO).dirty()||
|
||||
field(F_STOCATVEN ).dirty()||
|
||||
field(F_STOCODLIST).dirty()||
|
||||
field(F_STOPREZZOLIST).dirty();
|
||||
field(F_STOULTCOS1).focusdirty() ||
|
||||
field(F_STOULTCOS2).focusdirty() ||
|
||||
field(F_STOCOSTOSTD).focusdirty() ||
|
||||
field(F_STOCOSTOMEDIO).focusdirty()||
|
||||
field(F_STOCATVEN ).focusdirty()||
|
||||
field(F_STOCODLIST).focusdirty()||
|
||||
field(F_STOPREZZOLIST).focusdirty();
|
||||
}
|
||||
|
||||
|
||||
@ -276,6 +287,11 @@ bool TMask_anamag::handle_anno(TMask_field &fld, KEY k)
|
||||
{
|
||||
TSheet_field &fld_giac= (TSheet_field &)mask.field(F_SHEETGIAC);
|
||||
|
||||
if (mask.get(F_ANNO).empty() )
|
||||
{
|
||||
mask.set(F_ANNORIF, mask.esercizi_contabili.last()) ;
|
||||
mask.set(F_ANNO, mask.get(F_ANNORIF));
|
||||
}
|
||||
if (mask.last_annogiac>0 && mask.last_annogiac!=fld.mask().get_int(F_ANNO)) {
|
||||
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 )) {
|
||||
@ -303,25 +319,32 @@ bool TMask_anamag::handle_stoanno(TMask_field &fld, KEY k)
|
||||
{
|
||||
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 (mask.get(F_STOANNO).empty() )
|
||||
{
|
||||
mask.set(F_STOANNORIF, mask.esercizi_contabili.pred(mask.get_int(F_ANNORIF)) );
|
||||
mask.set(F_STOANNO, mask.get(F_STOANNORIF));
|
||||
}
|
||||
if ( fld.focusdirty() && mask.last_annosto>0 && mask.last_annosto!=fld.mask().get_int(F_STOANNO))
|
||||
{
|
||||
if ((mask.field(F_SHEETSTOMAG).dirty() || mask.info_sto_dirty()) &&
|
||||
handle_sheetstomag(fld_stomag,K_ENTER) &&
|
||||
fld_stomag.items()>0 )
|
||||
{
|
||||
if (fld.yesno_box("Vuoi salvare le righe di storico per l'anno %d",mask.last_annosto)) {
|
||||
if (fld.yesno_box("Vuoi salvare lo storico per l'anno %d",mask.last_annosto) &&
|
||||
handle_sheetstomag(fld_stomag,K_ENTER)) {
|
||||
fld_stomag.autosave(*mask._rel);
|
||||
fld_stomag.record()->write(TRUE);
|
||||
}
|
||||
}
|
||||
mask.field(F_STOANNORIF).set(fld.get());
|
||||
mask.last_annosto=mask.get_int(F_STOANNORIF);
|
||||
// rilegge lo storico relativo a quell'anno ed aggiorna il layout
|
||||
mask.clear_info_sto();
|
||||
fld_stomag.record()->read(*fld_stomag.putkey(*mask._rel));
|
||||
fld_stomag.autoload(*mask._rel);
|
||||
handle_sheetstomag(mask.field(F_SHEETSTOMAG),K_SPACE);
|
||||
fld_stomag.force_update();
|
||||
}
|
||||
mask.last_annosto=mask.get_int(F_STOANNO);
|
||||
} else
|
||||
mask.last_annosto=mask.get_int(F_STOANNORIF);
|
||||
}
|
||||
return(TRUE);
|
||||
}
|
||||
@ -329,9 +352,10 @@ bool TMask_anamag::handle_stoanno(TMask_field &fld, KEY k)
|
||||
|
||||
bool TMask_anamag::handle_sheet_um(TMask_field &fld, KEY k)
|
||||
{
|
||||
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
||||
TMask_anamag & m= (TMask_anamag &)(fld.mask());
|
||||
if (k == K_ENTER)
|
||||
{
|
||||
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
||||
const int items = f.items();
|
||||
if (items > 0)
|
||||
{
|
||||
@ -341,12 +365,20 @@ bool TMask_anamag::handle_sheet_um(TMask_field &fld, KEY k)
|
||||
const TString16 um(f.cell(i,0));
|
||||
|
||||
if (um.empty())
|
||||
return error_box("Le unita' di misura non possono essere vuote");
|
||||
//return error_box("Le unita' di misura non possono essere vuote");
|
||||
if (v.add(um))
|
||||
return error_box("Le unità di misura devono essere diverse tra loro"); // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
||||
}
|
||||
}
|
||||
} else if (k==K_TAB) {
|
||||
if (m.um_principale!=f.cell(0,0)) {
|
||||
m.converti_storico(f.cell(0,0));
|
||||
m.um_principale=f.cell(0,0);
|
||||
}
|
||||
} else if (k==K_SPACE) {
|
||||
m.um_principale=f.cell(0,0);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -354,11 +386,10 @@ 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;
|
||||
}
|
||||
|
||||
|
||||
bool TMask_anamag::handle_sheet_deslin(TMask_field &fld, KEY k)
|
||||
{
|
||||
if (k == K_ENTER)
|
||||
@ -446,28 +477,244 @@ bool TMask_anamag::handle_sheetgiac(TMask_field &fld, KEY k)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
int TMask_anamag::add_totali_storico(TString & codmag)
|
||||
{
|
||||
TSheet_field &s =(TSheet_field &)field(F_SHEETSTOMAG);
|
||||
bool need_rigatotali(TRUE);
|
||||
for (int r=0 ; r< s.items() && codmag>=s.cell(r,s.cid2index(F_STOCODMAG)); r++)
|
||||
{
|
||||
if (*s.cell(r,s.cid2index(F_STOTIPORIGA))==SIMBOLO_TOTALI
|
||||
&& codmag==s.cell(r,s.cid2index(F_STOCODMAG)))
|
||||
need_rigatotali=FALSE;
|
||||
}
|
||||
if (need_rigatotali )
|
||||
{
|
||||
real totq,totval;
|
||||
TLocalisamfile mag(LF_MAG);
|
||||
mag.setkey(2);
|
||||
mag.put(MAG_ANNOES,esercizi_contabili.next(get_int(F_STOANNORIF)));
|
||||
//mag.put(MAG_CODART,get(F_CODART));
|
||||
mag.put(MAG_CODMAG,codmag);
|
||||
mag.read();
|
||||
while (!mag.eof()
|
||||
&& esercizi_contabili.next(get_int(F_STOANNORIF))==mag.get_int(MAG_ANNOES)
|
||||
&& strncmp((const char *)codmag,mag.get(MAG_CODMAG),3)==0)
|
||||
{
|
||||
if (get(F_CODART)==mag.get(MAG_CODART))
|
||||
{
|
||||
totq+=mag.get_real(MAG_RIM);
|
||||
totval+=mag.get_real(MAG_VALRIM);
|
||||
}
|
||||
mag.next();
|
||||
}
|
||||
s.insert(r,FALSE);
|
||||
s.row(r ).add(SIMBOLO_TOTALI,s.cid2index(F_STOTIPORIGA));
|
||||
s.row(r ).add(codmag,s.cid2index(F_STOCODMAG));
|
||||
s.row(r ).add("----",s.cid2index(F_STOANNOES));
|
||||
s.row(r ).add(um_principale,s.cid2index(F_STOUM));
|
||||
s.disable_cell(r,-1);
|
||||
s.insert(r+1,FALSE);
|
||||
s.row(r+1).add(SIMBOLO_TOTALI,s.cid2index(F_STOTIPORIGA));
|
||||
s.row(r+1).add(codmag,s.cid2index(F_STOCODMAG));
|
||||
s.row(r+1).add("",s.cid2index(F_STOANNOES));
|
||||
s.row(r+1).add(um_principale,s.cid2index(F_STOUM));
|
||||
s.row(r+1).add(totq.string(),s.cid2index(F_STOQUANT));
|
||||
s.row(r+1).add(totval.string(),s.cid2index(F_STOVAL));
|
||||
s.disable_cell(r+1,-1);
|
||||
s.force_update(r+1);
|
||||
}
|
||||
update_totali_storico(codmag);
|
||||
return r;
|
||||
}
|
||||
|
||||
void TMask_anamag::update_totali_storico(TString & codmag)
|
||||
{
|
||||
TSheet_field &s =(TSheet_field &)field(F_SHEETSTOMAG);
|
||||
real tot1,tot2;
|
||||
// find first occourrence..
|
||||
int i=0 ;
|
||||
while (i< s.items() && codmag>s.cell(i,s.cid2index(F_STOCODMAG)))
|
||||
i++;
|
||||
// ...sum...
|
||||
for (; i< s.items() && *s.cell(i,s.cid2index(F_STOTIPORIGA))!=SIMBOLO_TOTALI ; i++)
|
||||
{
|
||||
tot1+=s.cell(i,s.cid2index(F_STOQUANT));
|
||||
tot2+=s.cell(i,s.cid2index(F_STOVAL));
|
||||
}
|
||||
//... display
|
||||
if (i< s.items())
|
||||
{
|
||||
s.row(i).add(tot1.string(),s.cid2index(F_STOQUANT));
|
||||
s.row(i).add(tot2.string(),s.cid2index(F_STOVAL));
|
||||
s.force_update(i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool TMask_anamag::remove_totali_storico(TString & codmag)
|
||||
{
|
||||
TSheet_field &s =(TSheet_field &)field(F_SHEETSTOMAG);
|
||||
|
||||
bool found_some(FALSE);
|
||||
if (codmag==" ")
|
||||
return FALSE;
|
||||
|
||||
for (int r=0 ;
|
||||
!found_some && r< s.items()-1
|
||||
&& !(*s.cell(r,s.cid2index(F_STOTIPORIGA))==SIMBOLO_TOTALI
|
||||
&& codmag==s.cell(r,s.cid2index(F_STOCODMAG)));
|
||||
r++)
|
||||
{
|
||||
if (*s.cell(r,s.cid2index(F_STOTIPORIGA))!=SIMBOLO_TOTALI
|
||||
&& codmag==s.cell(r,s.cid2index(F_STOCODMAG)))
|
||||
found_some=TRUE;
|
||||
}
|
||||
if (!found_some)
|
||||
{
|
||||
// ultima riga
|
||||
s.destroy(r,FALSE);
|
||||
s.destroy(r,FALSE);
|
||||
}
|
||||
return !found_some;
|
||||
}
|
||||
|
||||
|
||||
bool TMask_anamag::check_totali_storico()
|
||||
{
|
||||
TSheet_field &s =(TSheet_field &)field(F_SHEETSTOMAG);
|
||||
for (int r=0 ; r< s.items() ; r++)
|
||||
{
|
||||
for (; r< s.items() && *s.cell(r,s.cid2index(F_STOTIPORIGA))!=SIMBOLO_TOTALI; r++) ;
|
||||
real totq1(s.cell(r,s.cid2index(F_STOQUANT))),totq2(s.cell(r+1,s.cid2index(F_STOQUANT)));
|
||||
if (totq1!=totq2)
|
||||
return yesno_box("La somma delle composizioni dello storico non corrisponde alla rimanenza\n Proseguo ugualmente ?");
|
||||
real totval1(s.cell(r,s.cid2index(F_STOVAL))),totval2(s.cell(r+1,s.cid2index(F_STOVAL)));
|
||||
if (totval1!=totval2)
|
||||
return yesno_box("La somma del valore delle composizioni dello storico non corrisponde al valore della rimanenza\n Proseguo ugualmente ?");
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TMask_anamag::notify_sheet_sto(TSheet_field &s, int r, KEY k)
|
||||
{
|
||||
static TString16 oldcodmag,newcodmag,oldanno,newanno;
|
||||
TMask_anamag & m=(TMask_anamag &)s.mask();
|
||||
bool need_rigatotali=TRUE;
|
||||
switch (k)
|
||||
{
|
||||
case K_DEL:
|
||||
if (*s.cell(r,s.cid2index(F_STOTIPORIGA))==SIMBOLO_TOTALI)
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
case (K_CTRL+K_DEL):
|
||||
if (m.remove_totali_storico(oldcodmag))
|
||||
s.force_update();
|
||||
break;
|
||||
|
||||
case K_TAB: // posizionamento sulla riga
|
||||
oldcodmag=s.cell(r,s.cid2index(F_STOCODMAG));
|
||||
oldanno=s.cell(r,s.cid2index(F_STOANNOES));
|
||||
break;
|
||||
|
||||
case (K_ENTER): // fine modifica
|
||||
newcodmag=(s.cell(r,s.cid2index(F_STOCODMAG)));
|
||||
// modifica
|
||||
m.update_totali_storico(newcodmag);
|
||||
if (oldcodmag==s.cell(r,s.cid2index(F_STOCODMAG)))
|
||||
{
|
||||
if (oldanno==s.cell(r,s.cid2index(F_STOANNOES)) )
|
||||
break;
|
||||
} else {
|
||||
m.remove_totali_storico(oldcodmag);
|
||||
}
|
||||
case (K_CTRL + K_INS ):
|
||||
newcodmag=(s.cell(r,s.cid2index(F_STOCODMAG)));
|
||||
newanno=(s.cell(r,s.cid2index(F_STOANNOES)));
|
||||
if (newcodmag != " ")
|
||||
{
|
||||
// ordina
|
||||
while (r< s.items()-1 && (newcodmag > s.cell(r+1,s.cid2index(F_STOCODMAG)) ||
|
||||
(newcodmag == s.cell(r+1,s.cid2index(F_STOCODMAG)) &&
|
||||
(newanno > s.cell(r+1,s.cid2index(F_STOANNOES)) && *s.cell(r+1,s.cid2index(F_STOTIPORIGA))!=SIMBOLO_TOTALI)) ))
|
||||
{
|
||||
s.swap_rows(r,r+1);
|
||||
r++;
|
||||
}
|
||||
while (r>0 && (newcodmag < s.cell(r-1,s.cid2index(F_STOCODMAG)) ||
|
||||
(newcodmag == s.cell(r-1,s.cid2index(F_STOCODMAG)) &&
|
||||
(newanno < s.cell(r-1,s.cid2index(F_STOANNOES)) || *s.cell(r-1,s.cid2index(F_STOTIPORIGA))==SIMBOLO_TOTALI )) ))
|
||||
{
|
||||
s.swap_rows(r,r-1);
|
||||
r--;
|
||||
}
|
||||
m.add_totali_storico(newcodmag);
|
||||
TSheet_field & s_um=(TSheet_field & )s.mask().field(F_SHEETUM);
|
||||
s.row(r).add(m.um_principale,s.cid2index(F_STOUM));
|
||||
s.force_update();
|
||||
}
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool TMask_anamag::handle_sheetstomag(TMask_field &fld, KEY k)
|
||||
{
|
||||
TSheet_field & f=(TSheet_field &)fld;
|
||||
TMask_anamag &m=(TMask_anamag &) f.mask(); // prende la maschere d'origine del campo
|
||||
if (k==K_ENTER)
|
||||
{
|
||||
TSheet_field & f=(TSheet_field &)fld;
|
||||
const int items = f.items();
|
||||
real totrim,totvalrim;
|
||||
|
||||
if (items > 0)
|
||||
{
|
||||
TMask &m= f.mask(); // prende la maschere d'origine del campo
|
||||
if (!m.check_totali_storico())
|
||||
return FALSE;
|
||||
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");
|
||||
if (*f.cell(i,f.cid2index(F_STOTIPORIGA))!=SIMBOLO_TOTALI)
|
||||
{
|
||||
TString codeser(f.cell(i,f.cid2index(F_STOANNOES)));
|
||||
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 rimanenze deve far riferimento a esercizi tutti diversi tra loro");
|
||||
TLocalisamfile stor_aux(LF_STOMAG);
|
||||
|
||||
stor_aux.put(STOMAG_CODART,fld.mask().get(F_CODART));
|
||||
stor_aux.put(STOMAG_ANNOESRIF,fld.mask().get(F_STOANNO));
|
||||
stor_aux.put(STOMAG_ANNOES,codeser);
|
||||
|
||||
totrim=totrim+(real)f.cell(i,f.cid2index(F_STOQUANT));
|
||||
totvalrim=totvalrim+(real)f.cell(i,f.cid2index(F_STOVAL));
|
||||
}
|
||||
}
|
||||
for (i= 0; i< items;)
|
||||
{
|
||||
if (*f.cell(i,f.cid2index(F_STOTIPORIGA))==SIMBOLO_TOTALI)
|
||||
f.rows_array().remove(i,TRUE);
|
||||
else
|
||||
i++;
|
||||
}
|
||||
// ordina le righe per ANNO
|
||||
//f.rows_array().sort();
|
||||
if ( m.get(F_STOANNO)<f.cell(f.items()-1,F_STOANNOES-FIRST_FIELD))
|
||||
return error_box("La composizione delle rimanenze non puo' comprendere anni seguenti");
|
||||
}
|
||||
|
||||
} else if (k==K_SPACE) {
|
||||
for (int i=0; i< f.items();)
|
||||
{
|
||||
TString16 codmag(f.cell(i,f.cid2index(F_STOCODMAG)));
|
||||
i=m.add_totali_storico(codmag)+2;
|
||||
}
|
||||
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
@ -600,15 +847,21 @@ void TMask_anamag::sheetgiac_put(TSheet_field &fld_righe, int item)
|
||||
}
|
||||
}
|
||||
|
||||
void TMask_anamag:: converti_storico(TString newum)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
// ******************************
|
||||
// applicazione
|
||||
class TAnagrafica_magazzino : public TRelation_application {
|
||||
|
||||
TMask_anamag *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale di un solo file (anagrafiche di magazzino)
|
||||
TRecord_array *_linee_rec_um; // record array di accoppiamento delle unità di misura
|
||||
TRecord_array *_linee_rec_deslin; // record array di accoppiamento delle descrizioni in lingua con il primo sheet
|
||||
TRecord_array *_linee_rec_cod; // record array di accoppiamento delle codici corrispondenti con il secondo sheet
|
||||
//TRecord_array *_linee_rec_um; // record array di accoppiamento delle unità di misura
|
||||
//TRecord_array *_linee_rec_deslin; // record array di accoppiamento delle descrizioni in lingua con il primo sheet
|
||||
//TRecord_array *_linee_rec_cod; // record array di accoppiamento delle codici corrispondenti con il secondo sheet
|
||||
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
@ -635,22 +888,20 @@ bool TAnagrafica_magazzino::user_create()
|
||||
// crea l'oggetto per i parametri di livello giacenza
|
||||
// apre la maschera e dispone gli sheet
|
||||
_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),FALSE);
|
||||
|
||||
//_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;
|
||||
}
|
||||
|
||||
bool TAnagrafica_magazzino::user_destroy()
|
||||
{
|
||||
delete _linee_rec_cod;
|
||||
delete _linee_rec_deslin;
|
||||
delete _linee_rec_um;
|
||||
//delete _linee_rec_cod;
|
||||
//delete _linee_rec_deslin;
|
||||
//delete _linee_rec_um;
|
||||
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
@ -664,8 +915,8 @@ int TAnagrafica_magazzino::read(TMask& 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()); */
|
||||
TSheet_field &fld_stomag= (TSheet_field &)m.field(F_SHEETSTOMAG);
|
||||
fld_stomag.sheet_mask().field(F_STOCODART).set(m.field(F_CODART).get()); // necessario se lo sheet è vuoto
|
||||
|
||||
// *****************************
|
||||
// LETTURA SHEET UNITA' DI MISURA
|
||||
@ -678,7 +929,6 @@ 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
|
||||
|
||||
// preleva le info di storico (prezzi, ultcosti, ecc)
|
||||
} // no errors in TRelation_application::read(m);
|
||||
return err;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user