#include #include #include #include #include "li0.h" #include "li0400a.h" #include "letint.h" //------------------------------------------------------------------- // MASCHERA (li0400a) //------------------------------------------------------------------- class TLetint_mask : public TAutomask { protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TLetint_mask(); }; bool TLetint_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case F_NUMPROT: if (e == fe_close && query_mode()) { const long numprot = get_long(F_NUMPROT); if (numprot > 1) { const int anno = get_int(F_ANNO); TLocalisamfile letint(LF_LETINT); letint.put(LETINT_ANNO, anno); letint.put(LETINT_NUMPROT, numprot - 1); if (letint.read() != NOERR) return error_box(TR("Il numero di protocollo deve essere progressivo!")); } } break; case F_DATAREG: if (e == fe_close && insert_mode()) { const long numprot = get_long(F_NUMPROT); if (numprot > 1) { const int anno = get_int(F_ANNO); TLocalisamfile letint(LF_LETINT); letint.put(LETINT_ANNO, anno); letint.put(LETINT_NUMPROT, numprot); if (letint.read() == NOERR) { const TDate& old_data = letint.get_date(LETINT_DATAREG); if (get_date(F_DATAREG) < old_data) return error_box(TR("La data di registrazione non puo' essere antecedente a %s"), (const char*) old_data.string()); } } } break; default: break; } return true; } TLetint_mask::TLetint_mask() : TAutomask("li0400a") { first_focus(F_ANNO); } //-------------------------------------------------------------- // APPLICAZIONE //-------------------------------------------------------------- class TLetint : public TRelation_application { TLetint_mask* _mask; TRelation* _rel; protected: bool user_create(); bool user_destroy(); virtual TMask* get_mask(int mode) { return _mask; } virtual bool changing_mask(int mode) { return false; } virtual bool get_next_key(TToken_string& key); public: // @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata virtual bool check_autorization() const {return true;} virtual TRelation* get_relation() const {return (TRelation*)_rel;} }; bool TLetint::get_next_key(TToken_string& key) { TLocalisamfile& letint = _rel->lfile() ; long numprot = 1L ; const int anno(_mask->get_int(F_ANNO)) ; if (!letint.empty()) { letint.zero() ; letint.setkey(1) ; letint.put(LETINT_ANNO, anno); letint.read(_isgteq); if (letint.good()) //se e' tutto ok,si posiziona sull'ultimo record con l'anno selezionato letint.last(); if (letint.good()) { const int year(letint.get_int(LETINT_ANNO)); if (year == anno) numprot += letint.get_long(LETINT_NUMPROT); } } key.format("%d|%d|%d|%ld", F_ANNO, anno, F_NUMPROT, numprot); return true; } bool TLetint::user_create() { _rel = new TRelation(LF_LETINT); _mask = new TLetint_mask; return true; } bool TLetint::user_destroy() { delete _mask; return true; } int li0400(int argc, char* argv[]) { TLetint a; a.run(argc, argv, TR("Lettere d'intento")); return 0; }