// gestione tabelle di modulo contabilità #include #include /////////////////////////////////////////////////////////// // Maschera gestione contratti FE /////////////////////////////////////////////////////////// class TFE_contract_mask : public TAutomask { TSheet_field& rate_sheet() const; protected: virtual bool on_field_event(TOperable_field &o, TField_event e, long jolly); virtual void autoload(const TRelation& rel); virtual void autosave(TRelation& rel) const; public: TFE_contract_mask() : TAutomask("fetbcon") {} }; // L'ultimo (e unico) sheet della maschera contiene la rateizzazione delle fatture TSheet_field& TFE_contract_mask::rate_sheet() const { int f; for (f = fields()-1; f > 0 && !fld(f).is_sheet(); f--); CHECK(f > 0, "Rate sheet non found"); return (TSheet_field&)fld(f); } // carica i normalmente i campi standard e la sequenza degli R* nello sheet void TFE_contract_mask::autoload(const TRelation& rel) { TAutomask::autoload(rel); TSheet_field& s = rate_sheet(); s.destroy(); const TRectype& curr = rel.curr(); char anno[] = "I0"; // I[0,1,2,3] contengono i 4 anni solari char imp[] = "R0"; // R[0,2,4,6] contengono i 4 importi annuali char iva[] = "R1"; // R[1,3,5,7] contengono le 4 imposte annuali for (int i = 0; i < 4; i++) { TToken_string& row = s.row(i); row.add(curr.get(anno)); row.add(curr.get(imp)); row.add(curr.get(iva)); anno[1]++; // I0 -> I1 imp[1]+=2; // R0 -> R2 iva[1]+=2; // R1 -> R3 } } // salva i normalmente i campi standard e la sequenza degli R* dallo sheet void TFE_contract_mask::autosave(TRelation& rel) const { TAutomask::autosave(rel); TSheet_field& s = rate_sheet(); TRectype& curr = rel.curr(); char anno[] = "I0"; // I[0,1,2,3] contengono i 4 anni solari char imp[] = "R0"; // R[0,2,4,6] contengono i 4 importi annuali char iva[] = "R1"; // R[1,3,5,7] contengono le 4 imposte annuali for (int i = 0; i < s.items(); i++) { TToken_string& row = s.row(i); curr.put(anno, row.get(0)); curr.put(imp, row.get()); curr.put(iva, row.get()); anno[1]++; // I0 -> I1 imp[1]+=2; // R0 -> R2 iva[1]+=2; // R1 -> R3 } } bool TFE_contract_mask::on_field_event(TOperable_field &o, TField_event e, long jolly) { switch (e) { case se_query_add: case se_query_del: return false; // Non permetto aggiunta/cancellazione di righe default: break; } return true; } /////////////////////////////////////////////////////////// // Applicazione generica di gestione tabelle di modulo /////////////////////////////////////////////////////////// // applicazione per la gestione delle tabelle di lavanderia class TFE_table_app : public TTable_module_application { protected: // TRelation_application virtual TMask* user_create_mask(); public: }; // Ridefinire questo metodo per le eventuali maschere speciali // che abbiano controlli speciali da effettuare nella on_field_event TMask* TFE_table_app::user_create_mask() { TMask* m = NULL; const TString4 name = get_relation()->file(0).name(); if (name == "CON") m = new TFE_contract_mask; else m = TTable_module_application::user_create_mask(); if (m != NULL) { TString str; m->get_caption(str); if (str.full()) main_app().set_title(str); } return m; } int fe0200(int argc, char* argv[]) { TFE_table_app a; a.run(argc, argv, TR("Tabella modulo dati rilevanti")); return 0; }