// quadn_t.cpp #include #include #include #include #include "774200.h" #include "77lib.h" #include "quadron.h" #include "77qn.h" #include "77qq.h" #include "77qp.h" #define CODDITTA77 181 #define ANNODIC77 182 class TQuadriNT_application : public TRelation_application { static bool codditta77_handler (TMask_field& m, KEY k); static bool nprog_handler (TMask_field& m, KEY k); static bool anno_handler (TMask_field& m, KEY k); static bool mese_handler (TMask_field& f, KEY k); static bool codreg_handler (TMask_field& f, KEY k); static bool codtrib_handler (TMask_field& f, KEY k); static bool tipo (TMask_field& f , KEY k); static bool luogo (TMask_field& f , KEY k); const char* _maskname; int _num; int _pos_quadro; // posizione nell'array dei quadri. Usato in set_comp TString16 _quadro; TRiporti _rip; TRelation* _rel; TMask* _msk; bool _registra; int _anno_dic; bool _MaskConAnnoDic, _MaskConCodditta; bool MaskConAnnoDic() const; bool MaskConCodditta() const { return _MaskConCodditta; } void LeggiMask(); bool EsisteUnRec(); bool QuadroNoR() const { return _num == LF_QUAN || _num == LF_QUAR; } bool QuadroPoS() const { return _num == LF_QUAP || _num == LF_QUAS; } bool QuadroQoT() const { return _num == LF_QUAQ || _num == LF_QUAT; } bool CheckImporti(const TMask& m); long _codditta; protected: virtual bool user_create(); virtual bool user_destroy(); virtual int rewrite(const TMask& m); virtual int write (const TMask& m); virtual bool remove(); virtual void on_config_change(); virtual TMask* get_mask(int) { return _msk; } virtual bool changing_mask(int) { return FALSE;} virtual TRelation* get_relation() const { return _rel; } virtual void init_mask(TMask&); virtual void init_query_mode(TMask&); virtual void init_insert_mode(TMask&); virtual void init_query_insert_mode(TMask&); public: TQuadriNT_application(const char* name, const int num, const char* quadro); }; TQuadriNT_application::TQuadriNT_application(const char* name, const int num, const char* quadro) : _maskname(name), _num(num), _MaskConCodditta(FALSE), _MaskConAnnoDic(FALSE), _msk(NULL), _rel(NULL), _quadro(quadro) { switch (_num) { case LF_QUAN: _pos_quadro = N; break; case LF_QUAR: _pos_quadro = R; break; case LF_QUAP: _pos_quadro = P; break; case LF_QUAQ: _pos_quadro = Q; break; case LF_QUAS: _pos_quadro = S; break; case LF_QUAT: _pos_quadro = T; break; } } TQuadriNT_application& app() { return (TQuadriNT_application&)main_app(); } void TQuadriNT_application::LeggiMask() { _MaskConAnnoDic = _msk->id2pos(ANNODIC77) > 0; _MaskConCodditta = _msk->id2pos(CODDITTA77) > 0; } bool TQuadriNT_application::MaskConAnnoDic() const { return _MaskConAnnoDic; } void TQuadriNT_application::on_config_change() { TConfig conf(CONFIG_STUDIO); _anno_dic = (int)conf.get_long(ANNO_SEL, NULL, -1, TDate(TODAY).year()); } bool TQuadriNT_application::user_create() { _msk = new TMask(_maskname); _rel = new TRelation(_num); _codditta = get_firm_770(); _msk->set_handler(CODDITTA77, codditta77_handler); _msk->set_handler(QNF_NPROG, nprog_handler); if (QuadroNoR()) { _msk->set_handler(QNF_ANNORIF, anno_handler); _msk->set_handler(QNF_MESERIF, mese_handler); } if (QuadroQoT()) { _msk->set_handler(QNF_ANNORIF, anno_handler); _msk->set_handler(QNF_MESERIF, mese_handler); _msk->set_handler(QQF_CODREG, codreg_handler); } if (QuadroPoS()) _msk->set_handler(QPF_CODTRIB, codtrib_handler); _registra = FALSE; set_search_field(QNF_NPROG); return TRUE; } bool TQuadriNT_application::EsisteUnRec() { TLocalisamfile qn(_num); qn.zero(); qn.put(QN_CODDITTA, (long)app()._codditta); TRectype dep(qn.curr()); qn.read(_isgteq); if (qn.curr() > dep || qn.eof()) return FALSE; else return TRUE; } bool TQuadriNT_application::user_destroy() { if (_quadro != "") if (_registra) _rip.set_compilato(_codditta, _pos_quadro, EsisteUnRec()); delete _msk; delete _rel; return TRUE; } // Controlla che ci siano o l'imposta o i compensi // NB che siano uguali QNF_IMPOSTA anche nei corrispondenti campi dei // quadri Q, R e T (107 e 106) bool TQuadriNT_application::CheckImporti(const TMask& m) { TString impost(m.get(QNF_IMPOSTA)); TString compen(m.get(QNF_COMPENSI)); return impost.not_empty() || compen.not_empty(); } int TQuadriNT_application::rewrite(const TMask& m) { m.autosave(_rel); const int err = _rel->rewrite(); _registra = err == NOERR; return err; } int TQuadriNT_application::write(const TMask& m) { m.autosave(_rel); const int err = _rel->write(); _registra = err == NOERR; return err; } bool TQuadriNT_application::remove() { _registra = TRUE; return TRelation_application::remove(); } void TQuadriNT_application::init_mask(TMask& m) { m.set(ANNODIC77, _anno_dic); } void TQuadriNT_application::init_query_mode(TMask& m) { init_mask(m); } void TQuadriNT_application::init_insert_mode(TMask& m) { init_mask(m); } void TQuadriNT_application::init_query_insert_mode(TMask& m) { init_mask(m); } bool TQuadriNT_application::codditta77_handler(TMask_field& f, KEY k) { TString16 codditta; codditta << app()._codditta; TMask& m = f.mask(); if (codditta != "0") { m.set(CODDITTA77, codditta); m.field(CODDITTA77).check(); } return TRUE; } /////////////////////////////////////////////////////////// // 2 modi : // RUN,773,-1,771230m,89,"Prospetto del Quadro E1","E1" [771230i.uml] // oppure // 773 -1 menu_st "Stampe dichiarazioni" [prassi.mnu] // QUADRO N: // 773,-2,77qn,72,"Quadro N","N" /////////////////////////////////////////////////////////// int quadriN_T(int argc, char* argv[]) { TFilename mask; int num = 0; if (argc > 1) mask = argv[2]; num = atoi(argv[3]); const char* title = argv[4]; const char* quadro = argv[5]; TQuadriNT_application a(mask, num, quadro); a.run(argc, argv, title ? title : "Test Relation Application"); return 0; } bool TQuadriNT_application::anno_handler(TMask_field& f, KEY k) { TMask& m = f.mask(); if (k == K_ENTER && (modifica(m) || inserimento(m)) ) { TString dep(f.get()); if (dep.empty()) return f.warning_box("Manca l'anno"); else if (!app().CheckImporti(m)) return f.warning_box("Manca almeno un importo"); } return TRUE; } bool TQuadriNT_application::mese_handler(TMask_field& f, KEY k) { TMask& m = f.mask(); if (k == K_ENTER && (modifica(m) || inserimento(m)) ) { TString dep(f.get()); if (dep.empty()) return f.warning_box("Manca il mese"); } return TRUE; } // Per i Quadri Q e T bool TQuadriNT_application::codreg_handler(TMask_field& f, KEY k) { TMask& m = f.mask(); if (k == K_ENTER && (modifica(m) || inserimento(m)) ) { TString dep(f.get()); if (dep.empty()) return f.warning_box("Manca il codice regione"); } return TRUE; } // Per i Quadri P e S. Codice tributo REQUIRED bool TQuadriNT_application::codtrib_handler(TMask_field& f, KEY k) { TMask& m = f.mask(); if (k == K_ENTER && (modifica(m) || inserimento(m)) ) { TString dep(f.get()); if (dep.empty()) return f.warning_box("Manca il codice tributo"); } return TRUE; } bool TQuadriNT_application::nprog_handler(TMask_field& f, KEY k) { if (k == K_TAB) { TMask& m = f.mask(); // Propone il primo numero disponibile quando la maschera e' ancora "off" if (!m.is_running()) { long nprog = 0L; TLocalisamfile qnr(app()._num); qnr.zero(); qnr.put(QN_CODDITTA, (long)app()._codditta); TRectype dep(qnr.curr()); for (qnr.read(_isgteq); !qnr.eof(); qnr.next()) { if (qnr.curr() > dep) break; nprog = qnr.get_long(QN_NPROG); } nprog++; TString16 nprog_str; nprog_str << nprog; f.mask().set(QNF_NPROG, nprog_str); } // Quando la maschera e' running, se c'e' NPROG la chiude else { TString nprogstr(f.get()); if (nprogstr.not_empty()) m.stop_run(K_AUTO_ENTER); } } return TRUE; } bool TQuadriNT_application::tipo(TMask_field& f , KEY k) { /* if (k == K_SPACE) { char tipo = f.mask().get(F_QLTIPOVERS)[0]; char luogo = f.mask().get(F_QLLUOVERS)[0]; if (tipo == 'D' && luogo == 'T') f.mask().hide(F_QLSERIE); else f.mask().show(F_QLSERIE); } */ return TRUE; } bool TQuadriNT_application::luogo(TMask_field& f , KEY k) { /* if (k == K_SPACE) { char tipo = f.mask().get(F_QLTIPOVERS)[0]; char luogo = f.mask().get(F_QLLUOVERS)[0]; if (tipo == 'D' && luogo == 'T') f.mask().hide(F_QLSERIE); else f.mask().show(F_QLSERIE); } */ return TRUE; }