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 if (unicont) //se la numerazione è per ditta, cerco in tutto LVCONDV il codcont più grande
{ {
TISAM_recordset recset ("USE LVCONDV"); 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(); const long codice=recset.get("CODCONT").as_int();
if (codice>codcont) if (codice>codcont)
@ -83,13 +83,12 @@ bool TContratti_msk::on_art_select()
TDate datasc(TODAY); TDate datasc(TODAY);
const int annoes = esercizi().date2esc(datasc); const int annoes = esercizi().date2esc(datasc);
//estraggo l'indice dal record corrispondente su LF_CLIFOGIAC //estraggo il record corrispondente su LF_CLIFOGIAC
int index = artrec.find_clifomag(annoes); const TRecmag_lavanderie& reclav = artrec.find_rec(annoes);
//recupero la maschera di riga //recupero la maschera di riga
TMask& rowmask = ss.sheet_mask(); 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(); field(F_DOTTMP).disable();
rowmask.field(S_DOTIN).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 //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 //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 const TString4 umcont(row.get(ss.cid2index(S_UM))); //unità di misura
if (rowmask.get(S_DOTIN).blank()) if (rowmask.get(S_DOTIN).blank())
{ {
//calcolo dotazione iniziale, scritta sia sulla maschera che sullo sheet //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); rowmask.set(S_DOTIN, dotin);
row.add(dotin.stringa(), ss.cid2index(S_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 //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); const real consyear = artrec.convert_to_um(reclav.get_real("CONSANNO"),umcont);
rowmask.set(S_CONSANNO, consyear); rowmask.set(S_CONSANNO, consyear);
row.add(consyear.stringa(), ss.cid2index(S_CONSANNO)); row.add(consyear.stringa(), ss.cid2index(S_CONSANNO));
//calcolo consegnato mese, scritto sia sulla maschera che sullo sheet //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); rowmask.set(S_CONSMESE, consmonth);
row.add(consmonth.stringa(), ss.cid2index(S_CONSMESE)); 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()); fr->write(row->get(pos), file.curr());
} }
} }
//leggo il codart //leggo il codart
const TString80 codart=row->get(0); const TString80 codart = row->get(righe.cid2index(S_CODART));
//se il codart è pieno //se il codart è pieno e le quantità sono modificabili (da configurazione)
if (codart.full()) if (codart.full() && ini_get_string(CONFIG_DITTA, "lv", "Qtamodi") != "X")
{ {
//scrivo o aggiorno il record sul file //scrivo o aggiorno il record sul file
file.rewrite_write(); file.rewrite_write();
//gestione LF_CLIFOGIAC TArticolo_lavanderie& artrec = cached_article_laundry(codart, 'C', clifo, indsp);
bool found = false; TRecmag_lavanderie& reclav = (TRecmag_lavanderie&)artrec.find_rec(year);
magcli.zero();
//se sono in dicembre, allora leggo i dati dell'anno successivo //gestione LF_CLIFOGIAC
if (oggi.month() == 12) if(!reclav.empty())
{ {
magcli.put(CLIFOGIAC_ANNOES, year+1); //riscrivo la dotazione iniziale convertita nell'unità di misura principale
magcli.put(CLIFOGIAC_TIPOCF, 'C'); const real dotin = artrec.convert_to_um(row->get(righe.cid2index(S_DOTIN)), NULL);
magcli.put(CLIFOGIAC_CODCF, clifo); reclav.put(CLIFOGIAC_DOTIN, dotin);
magcli.put(CLIFOGIAC_INDSPED, indsp);
magcli.put(CLIFOGIAC_CODART, codart); //riscrivo la dotazione odierna convertita nell'unità di misura principale
magcli.put(CLIFOGIAC_NRIGA, 1); const real dotod = artrec.convert_to_um(row->get(righe.cid2index(S_DOTOD)), NULL);
found = magcli.read() == NOERR; 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 //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 //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 //eseguo la read() standard
int err = TRelation_application::read(m); int err = TRelation_application::read(m);
@ -614,7 +594,7 @@ int TContratti_app:: read(TMask& m)
TISAM_recordset righeset(build_query(m)); TISAM_recordset righeset(build_query(m));
const TRectype& rec = righeset.cursor()->curr(); const TRectype& rec = righeset.cursor()->curr();
//instanzio un TLcalisamfile su LF:CLIFOGIAC //instanzio un TLcalisamfile su LF_CLIFOGIAC
TLocalisamfile magcli(LF_CLIFOGIAC); TLocalisamfile magcli(LF_CLIFOGIAC);
//setto alcune variabili di interesse //setto alcune variabili di interesse
const TDate oggi(TODAY); const TDate oggi(TODAY);
@ -639,44 +619,33 @@ int TContratti_app:: read(TMask& m)
row.add(fr->read(rec),righe.cid2index(f->dlg())); 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 //lettura dei dati da LF_CLIFOGIAC
bool found = false; //se esiste il record su LF_CLIFOGIAC, recupero l'unità di misura dalla riga dello sheet selezionata
magcli.zero(); //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); if (msk.get(S_DOTIN).blank())
//se sono in dicembre, allora leggo i dati dell'anno successivo {
if (oggi.month() == 12) //calcolo dotazione iniziale, scritta sia sulla maschera che sullo sheet
{ const real dotin = artrec.convert_to_um(reclav.get_real(CLIFOGIAC_DOTIN), umcont);
magcli.put(CLIFOGIAC_ANNOES, year+1); //rowmask.set(S_DOTIN, dotin);
magcli.put(CLIFOGIAC_TIPOCF, 'C'); row.add(dotin.stringa(), righe.cid2index(S_DOTIN));
magcli.put(CLIFOGIAC_CODCF, clifo); }
magcli.put(CLIFOGIAC_INDSPED, indsp); //calcolo dotazione odierna, scritta sia sulla maschera che sullo sheet
magcli.put(CLIFOGIAC_CODART, codart); const real dotod = artrec.convert_to_um(reclav.get_real(CLIFOGIAC_DOTOD),umcont);
magcli.put(CLIFOGIAC_NRIGA, 1); //rowmask.set(S_DOTOD, dotod);
found = magcli.read() == NOERR; row.add(dotod.stringa(), righe.cid2index(S_DOTOD));
} //calcolo dotazione temporanea, scritta sia sulla maschera che sullo sheet
//se fallisce la read o non sono in dicembre, allora cerco nell'anno attuale (record svuotato dalla read) const real dottmp = artrec.convert_to_um(reclav.get_real(CLIFOGIAC_DOTTM),umcont);
if (!found) //rowmask.set(S_DOTTMP, dottmp);
{ row.add(dottmp.stringa(), righe.cid2index(S_DOTTMP));
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));
} }
//forzo una check_row //forzo una check_row
righe.check_row(righe.items()-1, 3); righe.check_row(righe.items()-1, 3);