// gestione tabelle di modulo FE #include #include #include "fetbcon.h" /////////////////////////////////////////////////////////// // Maschera gestione contratti FE /////////////////////////////////////////////////////////// class TFE_contract_mask : public TAutomask { enum { MAX_RATE = 4 }; TSheet_field& rate_sheet() const { return sfield(F_CON_RATE); } 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") {} }; // 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 < MAX_RATE; 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 < MAX_RATE; 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) { if (o.is_sheet()) { switch (e) { case fe_init: if (o.mask().mode() == MODE_INS) { TSheet_field& s = (TSheet_field&)o; for (int i = s.items(); i < MAX_RATE; i++) s.row(i); s.force_update(); } break; case se_query_add: case se_query_del: return false; // Non permetto aggiunta/cancellazione di righe default: break; } } else { switch (o.dlg()) { case R_CON_ANNO: if (e == fe_modify && !o.empty() && jolly > 0) { const int anno_prec = atoi(rate_sheet().cell(jolly-1, o.dlg())); const int anno_corr = atoi(o.get()); if (anno_corr <= anno_prec) return error_box(TR("Inserire un anno successivo al %d"), anno_prec); } break; 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(); return m; } int fe0200(int argc, char* argv[]) { TFE_table_app a; a.run(argc, argv, TR("Tabella Spesometro")); return 0; }