campo-sirio/mr/mr0500.cpp

143 lines
3.1 KiB
C++
Raw Normal View History

#include <automask.h>
#include <relapp.h>
#include <utility.h>
#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;
}