diff --git a/lv/lv0400.cpp b/lv/lv0400.cpp index bd39fe1d6..29315ddf9 100755 --- a/lv/lv0400.cpp +++ b/lv/lv0400.cpp @@ -3,6 +3,9 @@ #include #include +#include "lvcondv.h" +#include "lvrcondv.h" + #include "lvlib.h" #include "../cg/cglib01.h" #include "../mg/clifogiac.h" @@ -346,18 +349,6 @@ bool TContratti_msk::on_field_event(TOperable_field& o,TField_event e,long jolly } } break; -/* - case F_CALCCONS: - //Abilito/disabilito il conguaglio sulle righe nel caso opportuno - if (e == fe_modify || e == fe_init) - { - TSheet_field& ss = sfield(F_RIGHE); - const bool on = atoi(o.get()) == 1; - ss.enable_cell(ss.selected(), ss.cid2index(S_CONG), on); - ss.force_update(ss.selected()); - } - break; -*/ case S_CODART: if (!o.empty()) //se il campo risulta pieno { @@ -501,7 +492,7 @@ bool TContratti_msk::on_field_event(TOperable_field& o,TField_event e,long jolly } } } - break; + break; default: //se sto modificando un campo con indice > 500 e diverso da F_CAUSLAVDESCRIG //allora forzo l'update dello sheet sulla riga selezionata @@ -844,9 +835,16 @@ bool TContratti_app::protected_record(TRectype & rec) return !cont.can_be_deleted(); } -//REMOVE: ridefinizione del metodo remove() delle TRelartion_application +//REMOVE: ridefinizione del metodo remove() delle TRelation_application bool TContratti_app::remove() { + //recupero i dati dalla testata del contratto prima di cancellarla + const TRectype& tcont = get_relation()->curr(); + const int daanno = tcont.get_date(LVCONDV_DATAIN).year(); + const int aanno = TDate(TODAY).year(); + const long clifo = tcont.get_long(LVCONDV_CODCF); + const long indsp = tcont.get_long(LVCONDV_CODINDSP); + //eseguo la remove standard bool ok = TRelation_application::remove(); @@ -854,11 +852,30 @@ bool TContratti_app::remove() if(ok) { TISAM_recordset righeset(build_query(*_msk)); - TLocalisamfile& file=righeset.cursor()->file(); - - for (bool ok = righeset.move_first(); ok; ok = righeset.move_next()) + TLocalisamfile& rcont = righeset.cursor()->file(); + + //elimino le giacenze per cliente SOLO se le quantità sono modificabili + if (ini_get_bool(CONFIG_DITTA, "lv", "Qtamodi")) { - file.remove(); + TLocalisamfile magcli(LF_CLIFOGIAC); + + for (bool ok = righeset.move_first(); ok; ok = righeset.move_next()) + { + //con questo ciclo elimino tutte le giacenze per cliente dall'anno di inizio validità + //del contratto all'anno attuale (essendo nel ciclo che scorre le righe contratto + //elimino tutti gli articoli presenti per quel contratto) + for (int y = daanno; y <= aanno; y++) + { + magcli.put(CLIFOGIAC_ANNOES, y); + magcli.put(CLIFOGIAC_TIPOCF, 'C'); + magcli.put(CLIFOGIAC_CODCF, clifo); + magcli.put(CLIFOGIAC_INDSPED, indsp); + magcli.put(CLIFOGIAC_CODART, righeset.get(LVRCONDV_CODART).as_string()); + magcli.put(CLIFOGIAC_NRIGA, 1); + magcli.remove(); + } + } + rcont.remove(); } //elimino i planning esistenti per quel cliente - contratto elimina_planning(_msk->get_long(F_CODCONT),_msk->get_long(F_CODCF));