diff --git a/cg/cg2102.cpp b/cg/cg2102.cpp index dd9d400c1..a6544efa8 100755 --- a/cg/cg2102.cpp +++ b/cg/cg2102.cpp @@ -2215,19 +2215,66 @@ bool TPrimanota_application::data74ter_handler(TMask_field& f, KEY key) return TRUE; } - bool TPrimanota_application::numdoc_handler(TMask_field& f, KEY key) { - TMask& m = f.mask(); - if (key == K_TAB && f.to_check(key, TRUE) && m.insert_mode() && app().is_saldaconto()) + if (f.to_check(key, TRUE)) { - const TString n = f.get(); - if (n.not_empty() && !app().npart_is_prot()) // Copiare numero documento nel numero partita? - { - if (m.field(F_NUMRIF).active() && m.get(F_NUMRIF).blank()) - m.set(F_NUMRIF, n, TRUE); - } + TMask& m = f.mask(); + if (key == K_TAB && m.insert_mode() && app().is_saldaconto()) + { + if (!f.empty() && !app().npart_is_prot()) // Copiare numero documento nel numero partita? + { + if (m.field(F_NUMRIF).active() && m.get(F_NUMRIF).blank()) + m.set(F_NUMRIF, f.get(), TRUE); + } + } } + + // Controllo documenti duplicati + if (key == K_ENTER && app().iva() == iva_acquisti) + { + TMask& m = f.mask(); + + const int annodoc = m.get_date(F_DATADOC).year(); + const long fornitore = m.get_long(F_FORNITORE); + if (annodoc > 0 && fornitore > 0 && !f.empty()) + { + // SELECT NUMREG,DATAREG,DATADOC,NUMDOC FROM MOV + // WHERE TIPO='F' AND CODCF=F_FORNITORE AND + // NUMDOC=F_NUMDOC AND DATAREG>=F_DATADOC AND NUMREG<>F_NUMREG + + TString filter; + filter << MOV_NUMDOC << "=\"" << f.get() << '"'; + if (m.edit_mode()) + { + filter.insert("("); + filter << ")&&(" << MOV_NUMREG << "!=\"" << m.get(F_NUMREG) << "\")"; + } + + TRelation rel(LF_MOV); + TRectype& rec = rel.curr(); + + TRectype recfrom(rec); + recfrom.put(MOV_TIPO, "F"); + recfrom.put(MOV_CODCF, fornitore); + recfrom.put(MOV_DATAREG, m.get(F_DATADOC)); + + TRectype recto(recfrom); + recto.put(MOV_DATAREG, TDate(31, 12, annodoc+1)); + + TCursor cur(&rel, filter, 3, &recfrom, &recto); + const TRecnotype items = cur.items(); + cur.freeze(); + for (cur = 0; cur.pos() < items; ++cur) + { + const int ad = rec.get_date(MOV_DATADOC).year(); + if (ad == annodoc) + return yesno_box("Il documento %d / %s e' gia' stato inserito con la registrazione %ld\nSi desidera continuare ugualmente?", + annodoc, (const char*)f.get(), rec.get_long(MOV_NUMREG)); + } + } + } + return TRUE; }