//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 #include #include #include "cglib03.h" #include "cg4700.h" class GesAcc_app : public TRelation_application { TRelation* _rel; TMask* _mask; private: static bool msk_ditta(TMask_field& f, KEY k); 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; } }; inline GesAcc_app& app() { return (GesAcc_app&) main_app(); } bool GesAcc_app::user_create() { _rel = new TRelation("%LIA"); _mask = new TMask("cg4700a"); _mask->set_handler(F_ACCONTO, msk_acconto); _mask->set_handler(F_CREDITO, msk_credito); _mask->set_handler(F_CODDITTA, msk_ditta); set_search_field(F_CODDITTA); return TRUE; } bool GesAcc_app::user_destroy() { delete _rel; delete _mask; return TRUE; } bool GesAcc_app::msk_ditta(TMask_field& f, KEY k) { if (f.to_check(k)) { TFirm fr(atol(f.get())); TMask& m = f.mask(); m.set(F_CODVAL, fr.codice_valuta()); } return TRUE; } bool GesAcc_app::msk_credito(TMask_field& f, KEY k) { if (f.to_check(k)) { const TMask& m = f.mask(); const int anno = m.get_int(F_ANNO); TIva_round ir; ir.set_default_iva_mode(anno); real n = f.get(); ir.round(n); f.set(n.string()); } if (k == K_ENTER) { real credito (f.get()); real acconto (f.mask().get(F_ACCONTO)); if (credito.sign() < 0) return f.error_box(TR("Introdurre un valore non negativo")); if (credito > acconto) return f.error_box(TR("Il credito non puo' essere superiore all'acconto")); } return TRUE; } bool GesAcc_app::msk_acconto(TMask_field& f, KEY k) { if (f.to_check(k)) { const TMask& m = f.mask(); const int anno = m.get_int(F_ANNO); TIva_round ir; ir.set_default_iva_mode(anno); real n = f.get(); ir.round(n); f.set(n.string()); } if (k == K_ENTER) { const TMask& m = f.mask(); TInteressi_IVA_table ver; if (ver.read(m.get_int(F_ANNO),12)!=NOERR) warning_box(FR("Errore %d in lettura tabella versamenti ed interessi."),ver.status()); const TCurrency acconto_minimo = ver.get(I_ACCONTOIVA); const TCurrency acconto = real(f.get()); if (!acconto.is_zero()) { if (acconto.sign() < 0) return f.error_box(TR("Introdurre un valore non negativo")); if (acconto < acconto_minimo) return f.error_box(FR("L'importo dell'acconto inserito deve essere superiore a %s"), acconto_minimo.string(TRUE)); } } return TRUE; } TMask* GesAcc_app::get_mask(int /* mode */) { return _mask; } int cg4700(int argc, char* argv[]) { GesAcc_app app; app.run(argc, argv, TR("Gestione acconti")); return 0; }