Funzione aggiornamento storico e giac al cambio di um principale

Corretto bug autosettaggio dell'anno di storico


git-svn-id: svn://10.65.10.50/trunk@5067 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
augusto 1997-08-18 15:19:39 +00:00
parent 3fbe6a84b6
commit a3737ab83a

View File

@ -40,12 +40,12 @@ class TMask_anamag: public TMask {
void clear_info_sto();
bool info_sto_dirty();
void ricalcola_giacenze(TString newum,real fc);
int add_totali_storico(TString &codmag);
bool remove_totali_storico(TString & codmag);
void update_totali_storico(TString & codmag);
bool check_totali_storico();
public:
void ricalcola_giacenze();
TString16 um_principale;
TEsercizi_contabili esercizi_contabili;
@ -312,9 +312,14 @@ bool TMask_anamag::handle_stoanno(TMask_field &fld, KEY k)
{
TSheet_field &fld_stomag= (TSheet_field &)fld.mask().field(F_SHEETSTOMAG);
if (mask.get_int(F_STOANNO) >=mask.esercizi_contabili.last())
{
fld.error_box("Impossibile dare la composizione delle rimanenze per l'ultimo anno");
mask.reset(F_STOANNO);
}
if (mask.get(F_STOANNO).empty() )
{
mask.set(F_STOANNORIF, mask.esercizi_contabili.pred(mask.get_int(F_ANNORIF)) );
mask.set(F_STOANNORIF, max(mask.esercizi_contabili.first(),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))
@ -349,6 +354,8 @@ bool TMask_anamag::handle_sheet_um(TMask_field &fld, KEY k)
TMask_anamag & m= (TMask_anamag &)(fld.mask());
if (k == K_ENTER)
{
if (*f.cell(0,f.cid2index(FS_CODUM))==' ')
return error_box("La prima unità di misura deve essere specificata");
const int items = f.items();
if (items > 0)
{
@ -363,18 +370,15 @@ bool TMask_anamag::handle_sheet_um(TMask_field &fld, KEY k)
if (v.add(um))
return error_box("Le unità di misura devono essere diverse tra loro");
}
if (!m.um_principale.blank() && m.um_principale!=f.cell(0,f.cid2index(FS_CODUM))) {
for (int i= 0; i<f.items(); i++)
{
if (m.um_principale==f.cell(i,f.cid2index(FS_CODUM)))
break;
}
if (i>=f.items()) {
return error_box("L'unità di misura %s deve essere presente in tabella",(const char *)m.um_principale);
} else {
m.um_principale=f.cell(0,f.cid2index(FS_CODUM));
}
m.ricalcola_giacenze(f.cell(0,f.cid2index(FS_CODUM)),f.cell(i,f.cid2index(FS_FCUM)));
}
if (!m.um_principale.blank() && m.um_principale!=f.cell(0,f.cid2index(FS_CODUM))) {
for (int i= 0; i<f.items(); i++)
{
if (m.um_principale==f.cell(i,f.cid2index(FS_CODUM)))
break;
}
if (i>=f.items()) {
return error_box("L'unità di misura '%s' deve essere presente in tabella",(const char *)m.um_principale);
}
}
} else if (k==K_TAB) {
@ -828,9 +832,12 @@ bool TMask_anamag::handle_sheet_um_um(TMask_field &fld, KEY k)
x = 1.00;
m.set(FS_FCUM, x); // il risultato viene scritto nel campo del fattore di conversione
} else {
// prima unità di misura
f->mask().set(F_UMPRINCIPALE,curr_um);
f->mask().set(F_UMPRINCIPALE2,curr_um);
TString & um_p=((TMask_anamag &)f->mask()).um_principale;
if (um_p.blank()) {
f->mask().set(F_UMPRINCIPALE,curr_um);
f->mask().set(F_UMPRINCIPALE2,curr_um);
um_p=curr_um;
}
}
}
}
@ -903,10 +910,74 @@ void TMask_anamag::sheetgiac_put(TSheet_field &fld_righe, int item)
}
}
// aggiorna il valore delle giacenze del fattore indicato
void TMask_anamag:: ricalcola_giacenze(TString newum, real fc)
// Aggiorna il valore delle giacenze in base al cambiamento dell'unità di misura principale
void TMask_anamag::ricalcola_giacenze()
{
real fc(1.0);
TSheet_field & f=(TSheet_field &)field(F_SHEETUM);
if (!um_principale.blank() && um_principale!=f.cell(0,f.cid2index(FS_CODUM))) {
for (int i= 0; i<f.items(); i++)
{
if (um_principale==f.cell(i,f.cid2index(FS_CODUM)))
break;
}
fc=f.cell(i,f.cid2index(FS_FCUM));
}
if (fc != 1.0)
{
TLocalisamfile mag(LF_MAG),stomag(LF_STOMAG);
int annoes=esercizi_contabili.first();
do {
mag.zero();
mag.put(MAG_ANNOES,annoes);
mag.put(MAG_CODART,get(F_CODART));
mag.read();
while (!mag.eof() && get(F_CODART)==mag.get(MAG_CODART) && annoes==mag.get_int(MAG_ANNOES))
{
mag.put(MAG_LIVRIOR,mag.get_real(MAG_LIVRIOR)*fc); // update ..
mag.put(MAG_LOTTORIOR,mag.get_real(MAG_LOTTORIOR)*fc);
// saldi
mag.put(MAG_GIAC,mag.get_real(MAG_GIAC)*fc); // update ..
mag.put(MAG_ACQ,mag.get_real(MAG_ACQ)*fc);
mag.put(MAG_ENT,mag.get_real(MAG_ENT)*fc);
mag.put(MAG_VEN,mag.get_real(MAG_VEN)*fc);
mag.put(MAG_USC,mag.get_real(MAG_USC)*fc);
mag.put(MAG_ORDC,mag.get_real(MAG_ORDC)*fc);
mag.put(MAG_ORDF,mag.get_real(MAG_ORDF)*fc);
mag.put(MAG_RIM,mag.get_real(MAG_RIM)*fc);
mag.put(MAG_SCARTI,mag.get_real(MAG_SCARTI)*fc);
mag.put(MAG_INCL,mag.get_real(MAG_INCL)*fc);
mag.put(MAG_ACL,mag.get_real(MAG_ACL)*fc);
mag.put(MAG_PRODCOMP,mag.get_real(MAG_PRODCOMP)*fc);
mag.put(MAG_PRODFIN,mag.get_real(MAG_PRODFIN)*fc);
mag.put(MAG_SCORTAMIN,mag.get_real(MAG_SCORTAMIN)*fc);
// valori
mag.put(MAG_VALACQ,mag.get_real(MAG_VALACQ)*fc);
mag.put(MAG_VALENT,mag.get_real(MAG_VALENT)*fc);
mag.put(MAG_VALVEN,mag.get_real(MAG_VALVEN)*fc);
mag.put(MAG_VALUSC,mag.get_real(MAG_VALUSC)*fc);
mag.put(MAG_VALORDC,mag.get_real(MAG_VALORDC)*fc);
mag.put(MAG_VALORDF,mag.get_real(MAG_VALORDF)*fc);
mag.put(MAG_VALRIM,mag.get_real(MAG_VALRIM)*fc);
mag.put(MAG_VALSCARTI,mag.get_real(MAG_VALSCARTI)*fc);
mag.rewrite();
mag.next();
}
stomag.zero();
stomag.put(MAG_ANNOES,annoes);
stomag.put(MAG_CODART,get(F_CODART));
stomag.read();
while (!stomag.eof() && get(F_CODART)==stomag.get(MAG_CODART) && annoes==mag.get_int(MAG_ANNOES))
{
stomag.put(STOMAG_QUANT,mag.get_real(STOMAG_QUANT)*fc); // update ..
stomag.put(STOMAG_VALORE,mag.get_real(STOMAG_VALORE)*fc);
stomag.rewrite();
stomag.next();
}
} while (annoes=esercizi_contabili.next(annoes));
}
return;
}
@ -999,7 +1070,9 @@ int TAnagrafica_magazzino::write(const TMask& m)
int TAnagrafica_magazzino::rewrite(const TMask& m)
{
return TRelation_application::rewrite(m);
const int err =TRelation_application::rewrite(m);
((TMask_anamag &)m).ricalcola_giacenze();
return err;
}
void TAnagrafica_magazzino::init_insert_mode(TMask &m)