#include #include #include #include "batbinl.h" class TIndici_app : public TRelation_application { TRelation* _indici; TMask* _maschera; protected: virtual bool user_create(); virtual bool user_destroy(); virtual bool changing_mask(int) { return FALSE; } virtual TMask* get_mask(int) { return _maschera; } virtual TRelation* get_relation() const { return _indici; } virtual bool get_next_key(TToken_string& key); virtual bool save_and_new() const { return TRUE; } virtual int read(TMask& m); virtual void init_query_mode(TMask& m); static bool ditta_handler(TMask_field& f, KEY key); static TIndici_app& app() { return (TIndici_app&) main_app(); } public: TIndici_app() { } virtual ~TIndici_app() { } }; bool TIndici_app::ditta_handler(TMask_field& f, KEY key) { /* if (key == K_TAB && f.to_check(key, TRUE) && f.empty()) { TMask& m = f.mask(); m.reset(F_CODREG); m.reset(F_DESCREG); m.disable(F_CODREG); m.disable(F_DESCREG); return TRUE; } */ if ((key == K_TAB && f.to_check(key)/*f.focusdirty()*/) || key == K_ENTER) { const long ditta = atol(f.get()); if (ditta == 0L) return TRUE; TMask& m = f.mask(); if (prefix().exist(ditta)) { app().set_firm(ditta); m.enable(F_CODREG); m.enable(F_DESCREG); } else { m.reset(F_CODREG);m.reset(F_DESCREG); m.disable(F_CODREG); m.disable(F_DESCREG); return f.error_box(FR("La ditta %5ld non e' abilitata in contabilita'"), ditta); } } return TRUE; } void TIndici_app::init_query_mode(TMask& m) { m.enable(F_CODREG);m.enable(F_DESCREG); } int TIndici_app::read(TMask& m) { int r = TRelation_application::read(m); const long ditta = m.get_long(F_DITTA); if (ditta > 0L) if (prefix().exist(ditta)) set_firm(ditta); else { error_box(FR("Ditta %5ld non abilitata in contabilita'"),ditta); //m.reset(F_CODREG);m.reset(F_DESCREG); m.disable(F_CODREG); m.disable(F_DESCREG); } return r; } bool TIndici_app::user_create() { if (get_firm() == 0) // Se e' posizionato nel direttorio comune, setta la prima ditta abilitata in contabilita' { TLocalisamfile ditte(LF_NDITTE); bool found = FALSE; long ditta = 0L; for (ditte.first(); !found && !ditte.eof(); ditte.next()) { ditta = ditte.get_long(NDT_CODDITTA); found = prefix().exist(ditta); } if (!found) { error_box(TR("Abilitare almeno una ditta in contabilita'.")); return FALSE; } else set_firm(ditta); } _indici = new TRelation(LF_INDLIB); _maschera = new TMask("batbinl"); _maschera->set_handler(F_DITTA, ditta_handler); return TRUE; } bool TIndici_app::user_destroy() { delete _maschera; delete _indici; return TRUE; } bool TIndici_app::get_next_key(TToken_string& key) { const int anno = _maschera->get_int(F_ANNO); const TString16 libro = _maschera->get(F_CODLIB); if (anno == 0 || libro.empty()) return TRUE; TLocalisamfile index(LF_INDLIB); index.zero(); index.put("ANNO", anno); index.put("CODLIB", libro); index.put("NUMREG", 9999999L); long cod = 0; int err = index.read(_isgteq); switch (err) { case _iseof: index.last(); err = NOERR; break; case NOERR: index.prev(); break; default: break; } if (err == NOERR) { if (index.get_int("ANNO") == anno && index.get("CODLIB") == libro) cod = index.get_long("NUMREG") + 1; } if (cod > 0) key.format("%d|%d|%d|%s|%d|%ld", F_ANNO, anno, F_CODLIB, (const char*)libro, F_INDEX, cod); return TRUE; } int ba3900(int argc, char* argv[]) { TIndici_app app; app.run(argc, argv, TR("Indici libro unico")); return 0; }