diff --git a/src/li/li0400.cpp b/src/li/li0400.cpp index 186cf954a..a651ff110 100755 --- a/src/li/li0400.cpp +++ b/src/li/li0400.cpp @@ -17,6 +17,9 @@ class TLetint_mask : public TAutomask protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_key(KEY k); + bool hasLiOpen(); + + bool block; public: TDate ultima_stampa(int anno); @@ -83,15 +86,29 @@ bool TLetint_mask::on_field_event(TOperable_field& o, TField_event e, long jolly { } break; + case F_CODCLI: + // Controllo se il cliente non ha già una dichiarazione aperta + if(hasLiOpen() && insert_mode()) + { + warning_box("Il cliente %d ha già una dichiarazione aperta! Chiudere prima la precedente!", get_int(F_CODCLI)); + + disable(DLG_SAVEREC); + block = true; + } + else + { + enable(DLG_SAVEREC); + enable(F_TIPOOP); + } case F_TIPOOP: switch(get_int(F_TIPOOP)) { case 1: - enable(DLG_SAVEREC); + if(!block) enable(DLG_SAVEREC); disable(F_DAL); break; case 2: - enable(DLG_SAVEREC); + if(!block) enable(DLG_SAVEREC); enable(F_DAL); break; case 3: @@ -101,28 +118,27 @@ bool TLetint_mask::on_field_event(TOperable_field& o, TField_event e, long jolly default: break; } - case DLG_SAVEREC: - { - // Salvo le informazioni nel cliente: - TRectype cli = cache().get(LF_CFVEN, TString("C|")<< get_int(F_CODCLI)); - if(!cli.get("VSNRPROT").empty() && TDate(get(F_DAL)) <= TDate(TODAY)) - { - cli.put("VSNRPROT", get_int(F_VSPROT)); - cli.put("VSDATAREG", get_date(F_VSDATA)); - cli.put("NSNPROT", get_int(F_NUMPROT)); - cli.put("NSDATAREG", get_date(F_DATAREG)); - cli.rewrite(TLocalisamfile(LF_CFVEN)); - break; - } - // Abilito l'utilizzo delle dichiarazioni di intento - ini_set_bool(CONFIG_DITTA, "ve", "USELETTERE", true); - } default: break; } return true; } +bool TLetint_mask::hasLiOpen() +{ + TRelation relLi(LF_LETINT); + TRectype r_li(relLi.curr()); + r_li.put("CODCLI", get(F_CODCLI)); + r_li.put("ANNO", 2017); // É da quest'anno che abbiamo messo il campo chiusa + + TCursor c_li(&relLi, "", 2, &r_li, &r_li); + for(c_li = 0; c_li.pos() < c_li.items(); ++c_li) + { + if(!c_li.curr().get_bool("CHIUSA")) return true; // Alla prima trovata esco + } + return false; +} + TDate TLetint_mask::ultima_stampa(int anno) { TTable reg("REG"); @@ -146,7 +162,7 @@ TDate TLetint_mask::ultima_stampa(int anno) } -TLetint_mask::TLetint_mask() : TAutomask("li0400a") +TLetint_mask::TLetint_mask() : TAutomask("li0400a"), block(false) { first_focus(F_ANNO); } diff --git a/src/li/lilib01.cpp b/src/li/lilib01.cpp index 4a3453c35..bb1ba23ce 100644 --- a/src/li/lilib01.cpp +++ b/src/li/lilib01.cpp @@ -28,7 +28,8 @@ void TLi_manager::elabPlafond() TDate today(TODAY); if(!iniDicInt.ok()) filtro.add("ANNO", today.year()); - filtro.add("ANNO", iniDicInt.year()); + else + filtro.add("ANNO", iniDicInt.year()); // Creo un cursore ordinato e prelevo la prima riga non chiusa TCursor c_dicint(&letint, "", 2, &filtro, &filtro); @@ -43,22 +44,14 @@ void TLi_manager::elabPlafond() TRectype row = c_dicint.curr(); if(!row.get_bool("CHIUSA")) { - if(iniDicInt.ok() && row.get_date("DAL") > iniDicInt) continue; + if(iniDicInt.ok() && row.get_date("DAL") > iniDicInt) break; done = true; - if(row.get_int("TIPOOP") != FINO_A_PLAFOND && row.get_int("TIPOOP") != SOLUZIONE_UNICA) continue; + if(row.get_int("TIPOOP") != FINO_A_PLAFOND && row.get_int("TIPOOP") != SOLUZIONE_UNICA) break; if(row.get_int("TIPOOP") == SOLUZIONE_UNICA) soluzione = true; iniDicInt = row.get_date("DAL"); plafond = row.get_real("IMPORTO"); validPlafond = true; - - // Salvo le informazioni nel cliente: - TRectype cli = cache().get(LF_CFVEN, TString("C|")<