diff --git a/lv/lv0400.cpp b/lv/lv0400.cpp index 0b265233a..8fa47d9e9 100755 --- a/lv/lv0400.cpp +++ b/lv/lv0400.cpp @@ -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);