// gestione tabelle lavanderie #include #include #include #include "lvtbcau.h" /////////////////////////////////////////////////////////// // Maschera generica di gestione tabelle lavanderie /////////////////////////////////////////////////////////// class TLV_table_mask : public TAutomask { protected: virtual bool on_field_event(TOperable_field &o, TField_event e, long jolly); public: TLV_table_mask(const char* name) : TAutomask(name) {} }; bool TLV_table_mask::on_field_event(TOperable_field &o, TField_event e, long jolly) { return true; } /////////////////////////////////////////////////////////// // Applicazione generica di gestione tabelle lavanderie /////////////////////////////////////////////////////////// // applicazione per la gestione delle tabelle di lavanderia class TLV_table_app : public TTable_module_application { protected: // TRelation_application virtual TMask* user_create_mask(); virtual int write(const TMask& m); virtual int rewrite(const TMask& m); virtual bool get_next_key(TToken_string& key); void cambia_segni(const TMask& m, const bool ritirato); public: }; // Ridefinire questo metodo per le eventuali maschere speciali // che abbiano controlli speciali da effettuare nella on_field_evebt TMask* TLV_table_app::user_create_mask() { const TString4 name = get_relation()->file(0).name(); if (name == "???") return new TLV_table_mask("???"); // Le maschere normali sono gia' gestite dalla TTable_module_application return TTable_module_application::user_create_mask(); } void TLV_table_app::cambia_segni(const TMask& m, const bool ritirato) { //instanzio una TTable sulla ytabella delle causali di magazzino TTable cau("%CAU"); const TString16 causale = m.get(ritirato ? F_CAUSALE_RITIRO : F_CAUSALE_CONSEGNA); cau.put("CODTAB", causale); //se trovo la causale if (cau.read(_isequal, _lock) == NOERR) { TString s2 = cau.get("S2"); TString16 sgn = ""; int min = ritirato ? F_SGNDOTIN_R : F_SGNDOTIN_C; int max = ritirato ? F_SGNCONMN_R : F_SGNCONMN_C; //mi costruisco la stringa dei segni delle movimentazioni riportata in maschera for (short i = min; i <= max; i++) { TString4 tmp; switch (m.get_int(i)) { case 0: tmp << "0 "; break; case 1: tmp << "+1"; break; case -1: tmp << "-1"; break; default: break; } sgn << tmp; } //estraggo la sottostringa che mi interessa dalla tabella delle causali e la porto a lunghezza 10 TString16 str = s2.mid(28,10); if(str.len() < 10) str << " "; //chiedo se volglio proprio modificare i segni della movimentazione di magazzino if (str != sgn && yesno_box(TR("Si desidera veramente modificare i segni delle causali?"))) { s2.overwrite(sgn,28,10); cau.put("S2", s2); cau.rewrite(); } } else cau.unlock(); } // Ridefinizione del metodo write int TLV_table_app::write(const TMask& m) { const TString4 name = get_relation()->file(0).name(); if (name == "CAU") { if(m.get_bool(F_RITIRATO)) cambia_segni(m, true); if(m.get_bool(F_CONSEGNATO)) cambia_segni(m, false); } return TTable_module_application::write(m); } // Ridefinizione del metodo rewrite int TLV_table_app::rewrite(const TMask& m) { const TString4 name = get_relation()->file(0).name(); if (name == "CAU") { if(m.get_bool(F_RITIRATO)) cambia_segni(m, true); if(m.get_bool(F_CONSEGNATO)) cambia_segni(m, false); } return TTable_module_application::rewrite(m); } // Cerca di generare automaticamente la prossima chiave numerica di una tabella bool TLV_table_app::get_next_key(TToken_string& key) { // Controlla se il campo COTDAB e' numerico TMask& msk = curr_mask(); TMask_field* keyfield = msk.find_by_fieldname("CODTAB"); if (keyfield != NULL && keyfield->is_kind_of(CLASS_REAL_FIELD)) { long num = 1; TLocalisamfile& tab = get_relation()->lfile(); if (tab.last() == NOERR) // Cerca l'eventuale ultimo record della tabella num += tab.get_long("CODTAB"); // Costrusci la chiave formattata alla giusta lunghezza del campo, es: "101|0003" key.format("%d|%0*ld", keyfield->dlg(), keyfield->size(), num); } return key.full(); // Ritorna true se la procedura e' riuscita } int lv0100(int argc, char* argv[]) { TLV_table_app a; a.run(argc, argv, TR("Tabella Lavanderie")); return 0; }