Patch level : 10.0 patch 314

Files correlati     : lv0
Ricompilazione Demo : [ ]
Commento            :
Corretta gestione della dotazione per cliente


git-svn-id: svn://10.65.10.50/trunk@18915 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca83 2009-05-25 09:55:47 +00:00
parent 19de246317
commit 5db608b53c

View File

@ -24,7 +24,7 @@ long lv_new_contract(long cliente, int indsped)
if (unicont) //se la numerazione è per ditta, cerco in tutto LVCONDV il codcont più grande
{
TISAM_recordset recset ("USE LVCONDV");
for (bool ok=recset.move_first(); ok; ok=recset.move_next())
for (bool ok=recset.move_first(); ok; ok = recset.move_next())
{
const long codice=recset.get("CODCONT").as_int();
if (codice>codcont)
@ -83,13 +83,12 @@ bool TContratti_msk::on_art_select()
TDate datasc(TODAY);
const int annoes = esercizi().date2esc(datasc);
//estraggo l'indice dal record corrispondente su LF_CLIFOGIAC
int index = artrec.find_clifomag(annoes);
//estraggo il record corrispondente su LF_CLIFOGIAC
const TRecmag_lavanderie& reclav = artrec.find_rec(annoes);
//recupero la maschera di riga
TMask& rowmask = ss.sheet_mask();
if (ini_get_string(CONFIG_DITTA, "lv", "Qtamodi") != "X")
if (ini_get_string(CONFIG_DITTA, "lv", "Qtamodi") == "X")
{
field(F_DOTTMP).disable();
rowmask.field(S_DOTIN).disable();
@ -99,31 +98,31 @@ bool TContratti_msk::on_art_select()
//se esiste il record su LF_CLIFOGIAC, recupero l'unità di misura dalla riga dello sheet selezionata
//e setto i campi delle dotazioni e dei consegnati ai valori corretti riportati alla giusta unità di misura
if (index > 0)
if (!reclav.empty())
{
const TString4 umcont(row.get(ss.cid2index(S_UM))); //unità di misura
if (rowmask.get(S_DOTIN).blank())
{
//calcolo dotazione iniziale, scritta sia sulla maschera che sullo sheet
const real dotin = artrec.convert_to_um(artrec.clifomag(annoes)[index].get_real(CLIFOGIAC_DOTIN),umcont);
const real dotin = artrec.convert_to_um(reclav.get_real(CLIFOGIAC_DOTIN), umcont);
rowmask.set(S_DOTIN, dotin);
row.add(dotin.stringa(), ss.cid2index(S_DOTIN));
//calcolo dotazione odierna, scritta sia sulla maschera che sullo sheet
const real dotod = artrec.convert_to_um(reclav.get_real(CLIFOGIAC_DOTOD),umcont);
rowmask.set(S_DOTOD, dotod);
row.add(dotod.stringa(), ss.cid2index(S_DOTOD));
//calcolo dotazione temporanea, scritta sia sulla maschera che sullo sheet
const real dottmp = artrec.convert_to_um(reclav.get_real(CLIFOGIAC_DOTTM),umcont);
rowmask.set(S_DOTTMP, dottmp);
row.add(dottmp.stringa(), ss.cid2index(S_DOTTMP));
}
//calcolo dotazione odierna, scritta sia sulla maschera che sullo sheet
const real dotod = artrec.convert_to_um(artrec.clifomag(annoes)[index].get_real(CLIFOGIAC_DOTOD),umcont);
rowmask.set(S_DOTOD, dotod);
row.add(dotod.stringa(), ss.cid2index(S_DOTOD));
//calcolo dotazione temporanea, scritta sia sulla maschera che sullo sheet
const real dottmp = artrec.convert_to_um(artrec.clifomag(annoes)[index].get_real(CLIFOGIAC_DOTTM),umcont);
rowmask.set(S_DOTTMP, dottmp);
row.add(dottmp.stringa(), ss.cid2index(S_DOTTMP));
//calcolo consegnato anno, scritto sia sulla maschera che sullo sheet
const real consyear = artrec.convert_to_um(artrec.clifomag(annoes)[index].get_real("CONSANNO"),umcont);
rowmask.set(S_CONSANNO, consyear);
row.add(consyear.stringa(), ss.cid2index(S_CONSANNO));
const real consyear = artrec.convert_to_um(reclav.get_real("CONSANNO"),umcont);
rowmask.set(S_CONSANNO, consyear);
row.add(consyear.stringa(), ss.cid2index(S_CONSANNO));
//calcolo consegnato mese, scritto sia sulla maschera che sullo sheet
const real consmonth = artrec.convert_to_um(artrec.clifomag(annoes)[index].get_real("CONSMESE"),umcont);
const real consmonth = artrec.convert_to_um(reclav.get_real("CONSMESE"),umcont);
rowmask.set(S_CONSMESE, consmonth);
row.add(consmonth.stringa(), ss.cid2index(S_CONSMESE));
}
@ -469,61 +468,41 @@ void TContratti_app::save_rows(const TMask& m)
fr->write(row->get(pos), file.curr());
}
}
//leggo il codart
const TString80 codart=row->get(0);
//se il codart è pieno
if (codart.full())
const TString80 codart = row->get(righe.cid2index(S_CODART));
//se il codart è pieno e le quantità sono modificabili (da configurazione)
if (codart.full() && ini_get_string(CONFIG_DITTA, "lv", "Qtamodi") != "X")
{
//scrivo o aggiorno il record sul file
file.rewrite_write();
//gestione LF_CLIFOGIAC
bool found = false;
magcli.zero();
TArticolo_lavanderie& artrec = cached_article_laundry(codart, 'C', clifo, indsp);
TRecmag_lavanderie& reclav = (TRecmag_lavanderie&)artrec.find_rec(year);
//se sono in dicembre, allora leggo i dati dell'anno successivo
if (oggi.month() == 12)
//gestione LF_CLIFOGIAC
if(!reclav.empty())
{
magcli.put(CLIFOGIAC_ANNOES, year+1);
magcli.put(CLIFOGIAC_TIPOCF, 'C');
magcli.put(CLIFOGIAC_CODCF, clifo);
magcli.put(CLIFOGIAC_INDSPED, indsp);
magcli.put(CLIFOGIAC_CODART, codart);
magcli.put(CLIFOGIAC_NRIGA, 1);
found = magcli.read() == NOERR;
//riscrivo la dotazione iniziale convertita nell'unità di misura principale
const real dotin = artrec.convert_to_um(row->get(righe.cid2index(S_DOTIN)), NULL);
reclav.put(CLIFOGIAC_DOTIN, dotin);
//riscrivo la dotazione odierna convertita nell'unità di misura principale
const real dotod = artrec.convert_to_um(row->get(righe.cid2index(S_DOTOD)), NULL);
reclav.put(CLIFOGIAC_DOTOD, dotod);
//riscrivo la dotazione temporanea convertita nell'unità di misura principale
const real dottm = artrec.convert_to_um(row->get(righe.cid2index(S_DOTTMP)), NULL);
reclav.put(CLIFOGIAC_DOTTM, dottm);
//riscrivo il consegnato anno convertito nell'unità di misura principale
const real conan = artrec.convert_to_um(row->get(righe.cid2index(S_CONSANNO)), NULL);
reclav.put(CLIFOGIAC_CONSANNO, conan);
reclav.rewrite_write(magcli);
}
//se fallisce la read o non sono in dicembre, allora cerco nell'anno attuale (record svuotato dalla read)
if (!found)
{
magcli.zero();
magcli.put(CLIFOGIAC_ANNOES, year);
magcli.put(CLIFOGIAC_TIPOCF, 'C');
magcli.put(CLIFOGIAC_CODCF, clifo);
magcli.put(CLIFOGIAC_INDSPED, indsp);
magcli.put(CLIFOGIAC_CODART, codart);
magcli.put(CLIFOGIAC_NRIGA, 1);
found = magcli.read()==NOERR;
//se la read fallisce ancora, allora devo inserire tutto da capo (record svuotato dalla read)
if (!found) // FORZO LA SCRITTURA DELLA CHIAVE
{
magcli.zero();
magcli.put(CLIFOGIAC_ANNOES, year);
magcli.put(CLIFOGIAC_TIPOCF, 'C');
magcli.put(CLIFOGIAC_CODCF, clifo);
magcli.put(CLIFOGIAC_INDSPED, indsp);
magcli.put(CLIFOGIAC_CODART, codart);
magcli.put(CLIFOGIAC_NRIGA, 1);
}
}
//setto i valori delle dotazioni
magcli.put(CLIFOGIAC_DOTIN,row->get(righe.cid2index(S_DOTIN)));
magcli.put(CLIFOGIAC_DOTOD,row->get(righe.cid2index(S_DOTOD)));
magcli.put(CLIFOGIAC_DOTTM,row->get(righe.cid2index(S_DOTTMP)));
//scrivo o aggiorno il record corrispondente su LF_CLIFOGIAC
magcli.rewrite_write();
}
}
} //fine FOR_EACH_ROW
}
//BUILD_QUERY: metodo che crea la query sulle righe contratti
@ -603,7 +582,8 @@ bool TContratti_app:: get_next_key(TToken_string& key)
}
//READ: ridefinizione del metodo read() delle TRealtion_application
int TContratti_app:: read(TMask& m)
//AGGIUNGERE LA CONVERSIONE
int TContratti_app::read(TMask& m)
{
//eseguo la read() standard
int err = TRelation_application::read(m);
@ -614,7 +594,7 @@ int TContratti_app:: read(TMask& m)
TISAM_recordset righeset(build_query(m));
const TRectype& rec = righeset.cursor()->curr();
//instanzio un TLcalisamfile su LF:CLIFOGIAC
//instanzio un TLcalisamfile su LF_CLIFOGIAC
TLocalisamfile magcli(LF_CLIFOGIAC);
//setto alcune variabili di interesse
const TDate oggi(TODAY);
@ -639,44 +619,33 @@ int TContratti_app:: read(TMask& m)
row.add(fr->read(rec),righe.cid2index(f->dlg()));
}
const TString80 codart(row.get(righe.cid2index(S_CODART)));
//estraggo il record corrispondente su LF_CLIFOGIAC
TArticolo_lavanderie& artrec = cached_article_laundry(codart, 'C', clifo, indsp);
const TRecmag_lavanderie& reclav = artrec.find_rec(year);
//lettura dei dati da LF_CLIFOGIAC
bool found = false;
magcli.zero();
//se esiste il record su LF_CLIFOGIAC, recupero l'unità di misura dalla riga dello sheet selezionata
//e setto i campi delle dotazioni e dei consegnati ai valori corretti riportati alla giusta unità di misura
if (!reclav.empty())
{
const TString4 umcont(row.get(righe.cid2index(S_UM))); //unità di misura
const TString codart=row.get(0);
//se sono in dicembre, allora leggo i dati dell'anno successivo
if (oggi.month() == 12)
{
magcli.put(CLIFOGIAC_ANNOES, year+1);
magcli.put(CLIFOGIAC_TIPOCF, 'C');
magcli.put(CLIFOGIAC_CODCF, clifo);
magcli.put(CLIFOGIAC_INDSPED, indsp);
magcli.put(CLIFOGIAC_CODART, codart);
magcli.put(CLIFOGIAC_NRIGA, 1);
found = magcli.read() == NOERR;
}
//se fallisce la read o non sono in dicembre, allora cerco nell'anno attuale (record svuotato dalla read)
if (!found)
{
magcli.zero();
magcli.put(CLIFOGIAC_ANNOES, year);
magcli.put(CLIFOGIAC_TIPOCF, 'C');
magcli.put(CLIFOGIAC_CODCF, clifo);
magcli.put(CLIFOGIAC_INDSPED, indsp);
magcli.put(CLIFOGIAC_CODART, codart);
magcli.put(CLIFOGIAC_NRIGA, 1);
found = magcli.read() == NOERR;
}
//se la read riesce, leggo tutti i dati di interesse e li metto nella riga attuale dell sheet
if (found)
{
const int dotin = magcli.get_int(CLIFOGIAC_DOTIN);
const int dotod = magcli.get_int(CLIFOGIAC_DOTOD);
const int dottmp = magcli.get_int(CLIFOGIAC_DOTTM);
row.add(dotin, righe.cid2index(S_DOTIN));
row.add(dotod, righe.cid2index(S_DOTOD));
row.add(dottmp, righe.cid2index(S_DOTTMP));
if (msk.get(S_DOTIN).blank())
{
//calcolo dotazione iniziale, scritta sia sulla maschera che sullo sheet
const real dotin = artrec.convert_to_um(reclav.get_real(CLIFOGIAC_DOTIN), umcont);
//rowmask.set(S_DOTIN, dotin);
row.add(dotin.stringa(), righe.cid2index(S_DOTIN));
}
//calcolo dotazione odierna, scritta sia sulla maschera che sullo sheet
const real dotod = artrec.convert_to_um(reclav.get_real(CLIFOGIAC_DOTOD),umcont);
//rowmask.set(S_DOTOD, dotod);
row.add(dotod.stringa(), righe.cid2index(S_DOTOD));
//calcolo dotazione temporanea, scritta sia sulla maschera che sullo sheet
const real dottmp = artrec.convert_to_um(reclav.get_real(CLIFOGIAC_DOTTM),umcont);
//rowmask.set(S_DOTTMP, dottmp);
row.add(dottmp.stringa(), righe.cid2index(S_DOTTMP));
}
//forzo una check_row
righe.check_row(righe.items()-1, 3);