#include #include #include #include "mr0500a.h" /////////////////////////////////////////////////////////// // TRilprod_mask /////////////////////////////////////////////////////////// class TRilprod_mask : public TAutomask { protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_key(KEY key); public: TRilprod_mask() : TAutomask("mr0500a") { } }; bool TRilprod_mask::on_key(KEY key) { //shift+f12 per abilitare il riquadro della bolla di protezione if (key == K_SHIFT + K_F12) { enable(-GR_BOLPROD); return true; } return TAutomask::on_key(key); } bool TRilprod_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { bool ok = true; switch (o.dlg()) { case F_ORAINI : case F_MININI : case F_SECINI : case F_ORAFIN : case F_MINFIN : case F_SECFIN : if (e == fe_modify || e == fe_close) { //i campi ore/min/sec vanno zero filled TString8 stringa; int numero = atoi(o.get()); stringa.format("%02d", numero); o.set(stringa); } break; case F_DATAFIN : if (e == fe_close) { if (o.get().not_empty() && get_real(F_QTA) <= 0.0) return error_box(FR("La quantita' deve essere >0 avendo\n indicato una data di fine produzione")); } break; default: break; } return ok; } /////////////////////////////////////////////////////////// // TRilprod_app /////////////////////////////////////////////////////////// class TRilprod_app : public TRelation_application { TRelation* _rel; TRilprod_mask* _msk; protected: virtual TMask* get_mask(int) { return _msk; } virtual TRelation* get_relation() const { return _rel; } virtual bool user_create(); virtual bool user_destroy(); virtual void init_insert_mode(TMask& m); virtual void init_modify_mode(TMask& m); virtual bool changing_mask (int) {return false; } virtual bool get_next_key(TToken_string& key); }; void TRilprod_app::init_insert_mode(TMask& m) { m.disable(-GR_BOLPROD); } void TRilprod_app::init_modify_mode(TMask& m) { m.disable(-GR_BOLPROD); } bool TRilprod_app::user_create() { _rel = new TRelation(LF_RILPROD); _msk = new TRilprod_mask(); return true; } bool TRilprod_app::user_destroy() { if (_msk != NULL) delete _msk; if (_rel != NULL) delete _rel; return true; } bool TRilprod_app::get_next_key(TToken_string& key) { TMask& m = curr_mask( ); if (m.get(F_CODART).empty() || m.get(F_DATAPROD).empty()) return false; TLocalisamfile rilprod(LF_RILPROD); rilprod.put("CODART", m.get(F_CODART)); rilprod.put("DATAPROD", m.get(F_DATAPROD)); TRectype cmp_rec(rilprod.curr()); // record campione rilprod.put( "PROG", 999 ); if (rilprod.read(_isgreat) == NOERR) rilprod.prev(); else rilprod.last(); const int num = ((rilprod.curr() == cmp_rec) ? rilprod.get_int("PROG") : 0) + 1; key.format("%d|%d", F_PROG, num); return true; } int mr0500(int argc, char* argv[]) { TRilprod_app app; app.run(argc, argv, TR("Rilevazione Produzione")); return 0; }