diff --git a/lv/lv3100.cpp b/lv/lv3100.cpp index dfe5a9ab7..22a497ae0 100755 --- a/lv/lv3100.cpp +++ b/lv/lv3100.cpp @@ -168,14 +168,14 @@ real TGiac_per_cli::giac_att(TRiga_documento& rdoc, bool odierna) //movimento o meno la dotazione temporanea/odierna a seconda di cosa prevede la causale if (cau.get_bool("B0")) { - const TCausale_magazzino & rit = cached_causale_magazzino(cau.get("S1")); + const TCausale_magazzino& rit = cached_causale_magazzino(cau.get("S1")); const int s = rit.sgn(odierna ? s_dotod : s_dottm); saldo += real(s) * rdoc.get_real(RDOC_QTAGG1); } if (cau.get_bool("B1")) { - const TCausale_magazzino & con = cached_causale_magazzino(cau.get("S2")); + const TCausale_magazzino& con = cached_causale_magazzino(cau.get("S2")); const int s = con.sgn(odierna ? s_dotod : s_dottm); saldo += real(s) * rdoc.get_real(RDOC_QTA); @@ -229,7 +229,7 @@ class TGestione_bolle_msk : public TDocumento_mask long _stcodcont; protected: - static void arrotonda(const TMask& msk, real& quantita); + static void arrotonda(const TMask& msk, real& quantita); //hanlder di documento: static bool lv_bolla_handler(TMask_field& f, KEY k); //handler di riga: @@ -237,7 +237,6 @@ protected: static bool lv_consegnato_handler(TMask_field& f, KEY k); static bool lv_codart_handler(TMask_field& f, KEY k); static bool lv_causale_handler(TMask_field& f, KEY k); - static bool lv_dotmp_handler(TMask_field& f, KEY k); static bool ss_notify(TSheet_field& ss, int r, KEY key); @@ -420,26 +419,6 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k) rdoc.put(RDOC_CODAGG1,causale); rdoc.put(RDOC_CODIVA,anamag.get(ANAMAG_CODIVA)); - //setto le date di inizio e fine della dotazione temporanea - TDate dadata = rcont.get(LVRCONDV_INDTTMP).as_date(); - TDate adata = rcont.get(LVRCONDV_FIDTTMP).as_date(); - if (dadata.ok() && adata.ok()) - { - rdoc.put("DADATATMP", dadata); - if (adata < datadoc) - rdoc.put("ADATATMP", adata); - else - { - //instanzio in TRecordset sui giri - TISAM_recordset giri("USE LVRCONSPLAN KEY 3\nSELECT DTCONS>#DATADOC\nFROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT"); - giri.set_var("#DATADOC", datadoc); - giri.set_var("#CODCF", codcf); - giri.set_var("#CODCONT", codcont); - if (giri.move_first()) - rdoc.put("ADATATMP", giri.get(LVRCONSPLAN_DTCONS).as_date()); - } - } - //elaborazione per il prezzo: o lo prendo dalle righe contratto, o dall'anagrafica magazzino const TString& sconto = rcont.get(LVRCONDV_SCONTPERC).as_string(); rdoc.put(RDOC_SCONTO, sconto); @@ -653,8 +632,70 @@ bool TGestione_bolle_msk::lv_causale_handler(TMask_field& f, KEY k) //trovo il contratto utlizzato e la riga contratto specifica che mi serve const TLaundry_contract cont(codcf, indsped, datadoc); const TRectype& rcont = cont.row(codart); - //instanzio una cache sulla tabella delle causali + + //instanzio una cache sulle causali const TRectype& cau = cache().get("&CAU", causale); + //movimento o meno la dotazione temporanea/odierna a seconda di cosa prevede la causale + int sgn_rit = 0; + int sgn_con = 0; + if (cau.get_bool("B0")) + { + const TCausale_magazzino& rit = cached_causale_magazzino(cau.get("S1")); + sgn_rit = rit.sgn(s_dottm); + } + if (cau.get_bool("B1")) + { + const TCausale_magazzino& con = cached_causale_magazzino(cau.get("S2")); + sgn_con = con.sgn(s_dottm); + } + + //scrivo le date di dotazione temporanea solo se lo prevede la causale + if (sgn_rit == ZERO && sgn_con == ZERO) + { + rdoc.put("DADATATMP", ""); + msk.field(FR_JOLLY3).set(""); + rdoc.put("ADATATMP", ""); + msk.field(FR_JOLLY4).set(""); + } + else + { + //setto le date di inizio e fine della dotazione temporanea + TDate dadata = rcont.get_date(LVRCONDV_INDTTMP); + TDate adata = rcont.get_date(LVRCONDV_FIDTTMP); + if (dadata.ok() && adata.ok()) + { + rdoc.put("DADATATMP", dadata); + msk.field(FR_JOLLY3).set(dadata); + if (adata <= datadoc) + { + rdoc.put("ADATATMP", adata); + msk.field(FR_JOLLY4).set(adata); + } + else + { + //instanzio in TRecordset sui giri + TISAM_recordset giri("USE LVRCONSPLAN KEY 3\nSELECT DTCONS>#DATADOC\nFROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT"); + giri.set_var("#DATADOC", datadoc); + giri.set_var("#CODCF", codcf); + giri.set_var("#CODCONT", cont.get_long(LVCONDV_CODCONT)); + if (giri.move_first()) + { + rdoc.put("ADATATMP", giri.get(LVRCONSPLAN_DTCONS).as_date()); + msk.field(FR_JOLLY4).set(giri.get(LVRCONSPLAN_DTCONS).as_date()); + + TLocalisamfile rcondv(LF_LVRCONDV); + rcondv.put(LVRCONDV_CODCF,codcf); + rcondv.put(LVRCONDV_CODCONT,cont.get_int(LVCONDV_CODCONT)); + rcondv.put(LVRCONDV_CODART,msk.get(FR_CODART)); + if (rcondv.read() == NOERR) + { + rcondv.put(LVRCONDV_FIDTTMP, giri.get(LVRCONSPLAN_DTCONS).as_date()); + rcondv.rewrite(); + } + } + } + } + } //abilito o disabilito azzerandolo il campo "Ritirato" a seconda di cosa prevede la causale if (cau.get_bool("B0")) @@ -679,40 +720,6 @@ bool TGestione_bolle_msk::lv_causale_handler(TMask_field& f, KEY k) return true; } -//LV_DOTMP_HANDLER: handler che aggiorna la data di fine dotazione temporanea sul contratto se l'utente lo richiede -bool TGestione_bolle_msk::lv_dotmp_handler(TMask_field& f, KEY k) -{ - if (f.to_check(k, true)) - { - TDate finetmp = f.get(); - TMask& msk = f.mask(); - TSheet_field* sheet = msk.get_sheet(); - TGestione_bolle_msk& dmsk = (TGestione_bolle_msk&)sheet->mask(); - - if (!finetmp.empty() && finetmp > msk.get_date(F_DATADOC) && - yesno_box(TR("La data di fine dotazione temporanea è diversa da quella presente sul contratto." - "Si desidera aggiornarla con quella attuale?"))) - { - //ricerco la riga contratto che mi interessa - const long codcf = dmsk.get_long(F_CODCF); - const int indsped = dmsk.get_int(F_CODINDSP); - const TDate datadoc = dmsk.get_date(F_DATADOC); - - TLaundry_contract cont(codcf,indsped,datadoc); - TLocalisamfile rcondv(LF_LVRCONDV); - rcondv.put(LVRCONDV_CODCF,codcf); - rcondv.put(LVRCONDV_CODCONT,cont.get_int(LVCONDV_CODCONT)); - rcondv.put(LVRCONDV_CODART,msk.get(FR_CODART)); - if (rcondv.read() == NOERR) - { - rcondv.put(LVRCONDV_FIDTTMP, finetmp); - rcondv.rewrite(); - } - } - } - return true; -} - //metodo che setta gli handler sui campi di riga void TGestione_bolle_msk::user_set_row_handler(TMask& rm, short field, int index) { @@ -722,7 +729,6 @@ void TGestione_bolle_msk::user_set_row_handler(TMask& rm, short field, int index case 4102: rm.set_handler(field, lv_consegnato_handler); break; case 4103: rm.set_handler(field, lv_codart_handler); break; case 4104: rm.set_handler(field, lv_causale_handler); break; - case 4105: rm.set_handler(field, lv_dotmp_handler); break; default : TDocumento_mask::user_set_row_handler(rm, field, index); break; } } diff --git a/lv/verig21.ini b/lv/verig21.ini index 01cb70cdd..346ebc086 100755 --- a/lv/verig21.ini +++ b/lv/verig21.ini @@ -9,5 +9,4 @@ NHANDLER = 4 1 = 133|4101 2 = 112|4102 3 = 105|4103 -4 = 152|4104 -5 = 158|4105 +4 = 152|4104 \ No newline at end of file