#include #include #include #include #include #include "ba2.h" /////////////////////////////////////////////////////////// // Form basato su una tabella /////////////////////////////////////////////////////////// class TTab_form : public TForm { TString256 _result; protected: virtual bool validate(TForm_item& f, TToken_string& s); virtual word set_body(word p, bool u); public: TTab_form(const char* name); }; TTab_form::TTab_form(const char* name) : TForm(name) { TCursor* c = cursor(); if (c == NULL) fatal_box("Il profilo %s non ha un cursore", name); TFilename t("tmp");t << LF_TABCOM; TIsamtempfile* tmp = new TIsamtempfile(LF_TABCOM, t, FALSE); relation()->replace(tmp); c->setfilter("B0!=\"X\""); // Esclude le deleghe gia' stampate } word TTab_form::set_body(word p, bool u) { const word l = TForm::set_body(p, u); if (u && l > 0) { TLocalisamfile& f = cursor()->file(); f.put("B0", "X"); // Alza la bandiera di stampato f.rewrite(); } return l; } bool TTab_form::validate(TForm_item& fld, TToken_string& s) { const TString16 code(s.get(0)); if (code == "_CENSERoUFFIMP") { const int a_comres = s.get_int(); // Alias del comune di residenza (fiscale) const int a_anagr = s.get_int(); // Alias dell'anagrafica della persona TString i_cod(s.get()); // Eventuale Id del campo codice (solo se != 0) TString16 cod_us_uid; // Codice del Centro servizio o ufficio imposte dirette (NON E' IL CODICE DEL COMUNE) TString80 desc; // Denominzazione centro servizi o ufficio imposte const TLocalisamfile& com = relation()->lfile(-a_comres); TString16 cod = com.get("UFFCSERV"); if (cod.not_empty()) // Se specificato ... { cod_us_uid = cod; TTable ucc("%UCS"); // ... usa il centro servizi del comune ucc.put("CODTAB", cod); if (ucc.read() == NOERR) { desc = ucc.get("S0"); cod = ucc.get("S6"); } else cod.cut(0); } else { // ... se no usa l'ufficio imposte in anagrafica const TLocalisamfile& anag = relation()->lfile(-a_anagr); cod = anag.get("UFFIVA"); if (cod.empty()) // ... se no usa il primo ufficio imposte del comune { TString16 uff("UFFIIDD1"); for (char u = '1'; cod.empty() && u < '4'; u++) { uff[7] = u; cod = com.get(uff); } } cod_us_uid = cod; TTable uffiva("%UID"); uffiva.put("CODTAB", cod); if (uffiva.read() == NOERR) { desc = uffiva.get("S0"); cod = uffiva.get("S6"); } else cod.cut(0); } TLocalisamfile comiva(LF_COMUNI); // Determina la provincia dell'ufficio comiva.zero("STATO"); comiva.put("COM", cod); if (comiva.read() == NOERR) _result = comiva.get("PROVCOM"); else _result = " "; _result << " " << desc; if (i_cod.not_empty()) { TForm_item& fi = fld.find_field(i_cod); fi.set(cod_us_uid); } fld.set(_result); return TRUE; } return TForm::validate(fld, s); } /////////////////////////////////////////////////////////// // Stampa di un form generico da una tabella /////////////////////////////////////////////////////////// class TForm_printer : public TApplication { TLocalisamfile* _tabcom; protected: virtual bool create(); virtual bool destroy(); public: TForm_printer() {} virtual ~TForm_printer() {} }; bool TForm_printer::create() { TApplication::create(); if (argc() < 3) return error_box("Specificare il nome del profilo di stampa"); TFilename form(argv(2)); form.ext("frm"); if (!fexist(form)) return error_box("Il profilo %s non esiste", (const char*)form); _tabcom = new TLocalisamfile(LF_TABCOM); TTab_form f(form); f.print(); stop_run(); return TRUE; } bool TForm_printer::destroy() { delete _tabcom; return TApplication::destroy(); } int ba2400(int argc, char* argv[]) { TForm_printer a; a.run(argc, argv, "Stampa versamenti"); return 0; }