//Gestione acconti: questo assurdo prg viene usato solo se ho un acconto da versare //(cosa stabilita dal prg di calcolo acconti) e serve per versare meno, cioe' //per frodare il fisco. #include #include #include #include #ifndef __CGLIB03_H #include "cglib03.h" #endif #include "cg4700.h" class GesAcc_app : public TRelation_application { TRelation* _rel; TMask* _mask; TTable* _lim; private: static bool msk_credito(TMask_field&, KEY); static bool msk_acconto(TMask_field&, KEY); protected: virtual bool user_create(); virtual bool user_destroy(); virtual TRelation* get_relation() const { return _rel; } virtual TMask* get_mask(int mode); virtual bool changing_mask(int mode) {return FALSE; } //virtual int rewrite(const TMask&); //virtual void init_query_mode (TMask&); //virtual void init_query_insert_mode (TMask&); }; inline GesAcc_app& app() { return (GesAcc_app&) main_app(); } bool GesAcc_app::user_create() { _lim = new TTable("LIM"); _rel = new TRelation("%LIA"); _mask = new TMask("cg4700a"); _mask->set_handler(F_ACCONTO, msk_acconto); _mask->set_handler(F_CREDITO, msk_credito); set_search_field(F_CODDITTA); return TRUE; } bool GesAcc_app::user_destroy() { delete _mask; delete _lim; delete _rel; return TRUE; } bool GesAcc_app::msk_credito(TMask_field& f, KEY k) { if (k == K_ENTER) { real credito (f.get()); real acconto (f.mask().get(F_ACCONTO)); if (credito.sign() < 0) return f.error_box("Introdurre un valore non negativo"); if (credito > acconto) return f.error_box("Il credito non puo' essere superiore all'acconto"); if (acconto.is_zero()) if (!credito.is_zero()) return f.error_box("Non e' possibile indicare il credito se l'acconto e' nullo"); } return TRUE; } bool GesAcc_app::msk_acconto(TMask_field& f, KEY k) { if (k == K_ENTER) { real credito (f.mask().get(F_CREDITO)); real acconto (f.get()); TInteressi_IVA_table ver; if (ver.read(f.mask().get_int(F_ANNO),12)!=NOERR) warning_box("Errore %d in lettura tabella versamenti ed interessi.",ver.status()); real acconto_minimo = ver.get(I_ACCONTOIVA); if (!acconto.is_zero()) { if (acconto.sign() < 0) return f.error_box("Introdurre un valore non negativo"); if (acconto < acconto_minimo) return f.error_box("L'importo dell'acconto inserito deve essere superiore a lire %s", acconto_minimo.string(".")); } } return TRUE; } /*** Deve farlo il programma di stampa versamenti! int GesAcc_app::rewrite(const TMask& m) { TString16 chiave; int anno = m.get_int(F_ANNO); chiave << anno << 12; TTable lim ("LIM"); lim.put("CODTAB", chiave); if (lim.read() == NOERR) { real new_acc (m.get(F_ACCONTO)); real new_cred = lim.get_real("R12") - lim.get_real("R11") + new_acc; lim.put("R11", new_acc); lim.put("R12", new_cred); lim.put("R0", lim.get_real("R13")- new_cred); lim.rewrite(); } m.autosave(_rel); return _rel->rewrite(); } ***/ TMask* GesAcc_app::get_mask(int mode) { return _mask; } int cg4700(int argc, char* argv[]) { GesAcc_app app; app.run(argc, argv, "Gestione acconti"); return 0; }