Patch level : xx.282
Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 01.05 patch 282 git-svn-id: svn://10.65.10.50/trunk@8080 c028cbd2-c16b-5b4b-a496-9718f37d4682
BIN
mr/check.bmp
Executable file
After Width: | Height: | Size: 694 B |
BIN
mr/darrowd.bmp
Executable file
After Width: | Height: | Size: 246 B |
BIN
mr/darrowd2.bmp
Executable file
After Width: | Height: | Size: 246 B |
BIN
mr/darrowdl.bmp
Executable file
After Width: | Height: | Size: 246 B |
BIN
mr/darrowdr.bmp
Executable file
After Width: | Height: | Size: 246 B |
BIN
mr/darrowl.bmp
Executable file
After Width: | Height: | Size: 246 B |
BIN
mr/darrowl2.bmp
Executable file
After Width: | Height: | Size: 246 B |
BIN
mr/darrowr.bmp
Executable file
After Width: | Height: | Size: 246 B |
BIN
mr/darrowr2.bmp
Executable file
After Width: | Height: | Size: 246 B |
BIN
mr/darrowu.bmp
Executable file
After Width: | Height: | Size: 246 B |
BIN
mr/darrowu2.bmp
Executable file
After Width: | Height: | Size: 246 B |
BIN
mr/darrowul.bmp
Executable file
After Width: | Height: | Size: 246 B |
BIN
mr/darrowur.bmp
Executable file
After Width: | Height: | Size: 246 B |
@ -1,3 +1,5 @@
|
||||
#define APPNAME eurocamp
|
||||
#define QAPPNAME "eurocampo"
|
||||
#include <default.url>
|
||||
|
||||
/* mr0 -0 Gestione tabelle */
|
||||
|
BIN
mr/mr01.bmp
Executable file
After Width: | Height: | Size: 94 KiB |
178
mr/mr0100.cpp
@ -17,15 +17,13 @@ TTable_application& app() { return (TTable_application&)main_app(); }
|
||||
|
||||
class TMRP_mask : public TCalendar_mask
|
||||
{
|
||||
TMRP_calendar* _calendar;
|
||||
|
||||
protected:
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
public:
|
||||
bool init_calendar();
|
||||
bool save_calendar() const;
|
||||
bool remove_calendar() const;
|
||||
bool remove_calendar();
|
||||
|
||||
TMRP_mask(const char* name, int num = 0);
|
||||
virtual ~TMRP_mask();
|
||||
@ -52,36 +50,28 @@ bool TMRP_mask::init_calendar()
|
||||
|
||||
TCalendar_field& cf = (TCalendar_field&)field(F_CALENDAR);
|
||||
|
||||
if (_calendar == NULL)
|
||||
if (calendar().linea() != lin || calendar().impianto() != imp)
|
||||
{
|
||||
_calendar = new TMRP_calendar(lin, imp);
|
||||
if (cf.dirty())
|
||||
{
|
||||
TString str(80);
|
||||
str = "Il calendario ";
|
||||
switch (calendar().tipo())
|
||||
{
|
||||
case 'L': str << "della linea " << calendar().linea(); break;
|
||||
case 'I': str << "del impianto " << calendar().impianto(); break;
|
||||
default : str << "standard"; break;
|
||||
}
|
||||
str << " e' stato modificato:\nsi desidera salvare le modifiche effettuate?";
|
||||
if (yesno_box(str))
|
||||
calendar().rewrite();
|
||||
}
|
||||
|
||||
calendar().set(lin, imp);
|
||||
cf.set_dirty(FALSE);
|
||||
changed = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_calendar->linea() != lin || _calendar->impianto() != imp)
|
||||
{
|
||||
if (cf.dirty())
|
||||
{
|
||||
TString str(80);
|
||||
str = "Il calendario ";
|
||||
switch (_calendar->tipo())
|
||||
{
|
||||
case 'L': str << "della linea " << _calendar->linea(); break;
|
||||
case 'I': str << "del impianto " << _calendar->impianto(); break;
|
||||
default : str << "standard"; break;
|
||||
}
|
||||
str << " e' stato modificato:\nsi desidera salvare le modifiche effettuate?";
|
||||
if (yesno_box(str))
|
||||
_calendar->rewrite();
|
||||
}
|
||||
|
||||
_calendar->set(lin, imp);
|
||||
cf.set_dirty(FALSE);
|
||||
changed = TRUE;
|
||||
}
|
||||
}
|
||||
cf.set_calendar(_calendar, get_int(F_YEAR));
|
||||
cf.set_calendar(&calendar(), get_int(F_YEAR));
|
||||
return changed;
|
||||
}
|
||||
|
||||
@ -93,31 +83,16 @@ bool TMRP_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
switch (o.dlg())
|
||||
{
|
||||
case F_IMPIANTO:
|
||||
if (e == fe_close && o.empty())
|
||||
{
|
||||
TConfig ini(CONFIG_DITTA, "mr");
|
||||
bool gestione_impianti = ini.get_bool("GESTIMPIANTI");
|
||||
if (gestione_impianti)
|
||||
return error_box("E' necessario specificare un impianto");
|
||||
}
|
||||
break;
|
||||
case F_CODICE:
|
||||
case F_TYPE:
|
||||
if (e == fe_modify)
|
||||
{
|
||||
if (init_calendar())
|
||||
{
|
||||
TCalendar_field& cf = (TCalendar_field&)field(F_CALENDAR);
|
||||
cf.win().force_update();
|
||||
}
|
||||
}
|
||||
init_calendar();
|
||||
break;
|
||||
case F_YEAR:
|
||||
if (e == fe_init || e == fe_modify)
|
||||
{
|
||||
TCalendar_field& cf = (TCalendar_field&)field(F_CALENDAR);
|
||||
cf.set_calendar(_calendar, get_int(F_YEAR));
|
||||
if (is_running())
|
||||
cf.win().force_update();
|
||||
update_calendar(F_CALENDAR, F_YEAR);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -129,43 +104,46 @@ bool TMRP_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
|
||||
bool TMRP_mask::save_calendar() const
|
||||
{
|
||||
if (_calendar != NULL)
|
||||
{
|
||||
TCalendar_field& cf = (TCalendar_field&)field(F_CALENDAR);
|
||||
if (cf.dirty())
|
||||
_calendar->rewrite();
|
||||
}
|
||||
TCalendar_field& cf = (TCalendar_field&)field(F_CALENDAR);
|
||||
if (cf.dirty())
|
||||
calendar().rewrite();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TMRP_mask::remove_calendar() const
|
||||
bool TMRP_mask::remove_calendar()
|
||||
{
|
||||
if (_calendar != NULL)
|
||||
const TString& tn = app().get_tabname();
|
||||
const char tipo = tn[0];
|
||||
if (calendar().tipo() != tipo)
|
||||
{
|
||||
const TString& tn = app().get_tabname();
|
||||
const char tipo = tn[0];
|
||||
if (_calendar->tipo() != tipo)
|
||||
{
|
||||
if (tipo == 'L')
|
||||
_calendar->set(get(F_CODICE), get(F_IMPIANTO));
|
||||
else
|
||||
_calendar->set(NULL, get(F_CODICE));
|
||||
CHECK(_calendar->tipo() == tipo, "Tipo calendario incongruente");
|
||||
}
|
||||
_calendar->remove();
|
||||
if (tipo == 'L')
|
||||
calendar().set(get(F_CODICE), get(F_IMPIANTO));
|
||||
else
|
||||
calendar().set(NULL, get(F_CODICE));
|
||||
CHECK(calendar().tipo() == tipo, "Tipo calendario incongruente");
|
||||
}
|
||||
calendar().remove();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
TMRP_mask::TMRP_mask(const char* name, int num)
|
||||
: TCalendar_mask(name, num), _calendar(NULL)
|
||||
: TCalendar_mask(name, num)
|
||||
{
|
||||
const TString& tn = app().get_tabname();
|
||||
if (tn == "LNP")
|
||||
{
|
||||
TConfig ini(CONFIG_DITTA, "mr");
|
||||
bool gestione_impianti = ini.get_bool("GESTIMPIANTI");
|
||||
if (!gestione_impianti)
|
||||
{
|
||||
disable(F_IMPIANTO);
|
||||
disable(F_DESCIMPIANTO);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TMRP_mask::~TMRP_mask()
|
||||
{
|
||||
if (_calendar)
|
||||
delete _calendar;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -174,10 +152,13 @@ TMRP_mask::~TMRP_mask()
|
||||
|
||||
class TMRPtables : public TTable_application
|
||||
{
|
||||
void read_turni(TMask& m);
|
||||
void write_turni(const TMask& m);
|
||||
protected:
|
||||
virtual TString& get_mask_name(TString& name) const;
|
||||
virtual TMask* set_mask(TMask* m);
|
||||
|
||||
virtual int read(TMask& m);
|
||||
virtual int write(const TMask& m);
|
||||
virtual int rewrite(const TMask& m);
|
||||
virtual bool remove();
|
||||
@ -198,8 +179,12 @@ TMask* TMRPtables::set_mask(TMask* m)
|
||||
{
|
||||
if (m == NULL)
|
||||
{
|
||||
const TString& tn = get_tabname();
|
||||
TString name; get_mask_name(name);
|
||||
m = new TMRP_mask(name);
|
||||
if (tn == "IMP" || tn == "LNP")
|
||||
m = new TMRP_mask(name);
|
||||
else
|
||||
m = new TMask(name);
|
||||
}
|
||||
return TTable_application::set_mask(m);
|
||||
}
|
||||
@ -219,14 +204,58 @@ void TMRPtables::remove_calendar(const TMask& m)
|
||||
const TString& tn = get_tabname();
|
||||
if (tn == "IMP" || tn == "LNP")
|
||||
{
|
||||
const TMRP_mask& cm = (const TMRP_mask&)m;
|
||||
TMRP_mask& cm = (TMRP_mask&)m;
|
||||
cm.remove_calendar();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void TMRPtables::read_turni(TMask& m)
|
||||
{
|
||||
TUnita_produttiva up(file().curr());
|
||||
for (int t=7; t >=0; t--)
|
||||
{
|
||||
const id= F_T1HINIZIO+t*5;
|
||||
m.set(id,up.ora_inizio_turno(t));
|
||||
m.set(id+1,up.min_inizio_turno(t));
|
||||
m.set(id+2,up.ore_durata_turno(t));
|
||||
m.set(id+3,up.min_durata_turno(t));
|
||||
m.set(id+4,up.raw_numpers_turno(t));
|
||||
}
|
||||
}
|
||||
void TMRPtables::write_turni(const TMask& m)
|
||||
{
|
||||
TUnita_produttiva & up=(TUnita_produttiva &)file().curr();
|
||||
for (int t=0; t < 8; t++)
|
||||
{
|
||||
const id= F_T1HINIZIO+t*5;
|
||||
up.set_inizio_turno(t, m.get_int(id), m.get_int(id+1));
|
||||
up.set_durata_turno(t, m.get_int(id+2), m.get_int(id+3));
|
||||
up.set_numpers_turno(t, m.get_int(id+4));
|
||||
}
|
||||
}
|
||||
|
||||
int TMRPtables::read(TMask& m)
|
||||
{
|
||||
const int err = TTable_application::read(m);
|
||||
if (err == NOERR)
|
||||
{
|
||||
const TString& tn = get_tabname();
|
||||
if (tn == "IMP"||tn == "LNP" )
|
||||
{
|
||||
read_turni(m);
|
||||
}
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
int TMRPtables::write(const TMask& m)
|
||||
{
|
||||
const TString& tn = get_tabname();
|
||||
if (tn == "IMP"||tn == "LNP" )
|
||||
{
|
||||
write_turni(m);
|
||||
}
|
||||
const int err = TTable_application::write(m);
|
||||
if (err == NOERR)
|
||||
save_calendar(m);
|
||||
@ -235,6 +264,11 @@ int TMRPtables::write(const TMask& m)
|
||||
|
||||
int TMRPtables::rewrite(const TMask& m)
|
||||
{
|
||||
const TString& tn = get_tabname();
|
||||
if (tn == "IMP"||tn == "LNP" )
|
||||
{
|
||||
write_turni(m);
|
||||
}
|
||||
const int err = TTable_application::rewrite(m);
|
||||
if (err == NOERR)
|
||||
save_calendar(m);
|
||||
|
@ -21,6 +21,15 @@ public:
|
||||
|
||||
bool TConf_MRP_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
switch (o.dlg())
|
||||
{
|
||||
case F_YEAR:
|
||||
if (e == fe_init || e == fe_modify)
|
||||
update_calendar(F_CALENDAR, F_YEAR);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -39,7 +48,6 @@ TConf_MRP_mask::~TConf_MRP_mask()
|
||||
//////////////////////////////////////////////////
|
||||
class TConf_MRP_application : public TConfig_application
|
||||
{
|
||||
TMRP_calendar* _calendar;
|
||||
TConf_MRP_mask *_mask;
|
||||
|
||||
protected:
|
||||
@ -53,71 +61,62 @@ public:
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
|
||||
TConf_MRP_application() : TConfig_application(CONFIG_DITTA) { _mask = NULL; _calendar = NULL;}
|
||||
TConf_MRP_application() : TConfig_application(CONFIG_DITTA) { _mask = NULL;}
|
||||
virtual ~TConf_MRP_application() {}
|
||||
};
|
||||
|
||||
bool TConf_MRP_application::preprocess_config (TMask& mask, TConfig& config)
|
||||
bool TConf_MRP_application::preprocess_config (TMask& mask, TConfig& c)
|
||||
{
|
||||
TToken_string ora_inizio("",':');
|
||||
|
||||
TMRP_config& config=(TMRP_config&)c;
|
||||
for (int i = 0; i < NTURNI; i++)
|
||||
{
|
||||
// Traduce le ore ed i minuti
|
||||
const short h = F_T1HINIZIO+(i*4);
|
||||
ora_inizio = config.get("TINIZIO","mr", i);
|
||||
mask.set(h,ora_inizio.get(0)); // Hour...
|
||||
mask.set(h+1,ora_inizio.get(1)); // Minutes...
|
||||
const long tdurata = config.get_long("TDURATA", "mr", i);
|
||||
const int hours = (int)tdurata / 60; // numero di ore
|
||||
const int minutes = (int)tdurata % 60; // numero di minuti
|
||||
mask.set(h+2, hours);
|
||||
mask.set(h+3, minutes);
|
||||
// inizio turno
|
||||
mask.set(h , config.ora_inizio_turno(i)); // Hour...
|
||||
mask.set(h+1, config.min_inizio_turno(i)); // Minutes...
|
||||
// durata turno
|
||||
mask.set(h+2, config.ore_durata_turno(i));
|
||||
mask.set(h+3, config.min_durata_turno(i));
|
||||
mask.set(F_T1NUMPERS+i,config.numpers_turno(i));
|
||||
}
|
||||
// Carica il calendario
|
||||
TCalendar_field& cf = (TCalendar_field&)mask.field(F_CALENDAR);
|
||||
cf.set_calendar(_calendar, mask.get_int(F_YEAR));
|
||||
cf.win().force_update();
|
||||
((TCalendar_mask&)mask).update_calendar(F_CALENDAR, F_YEAR);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TConf_MRP_application::postprocess_config (TMask& mask, TConfig& config)
|
||||
bool TConf_MRP_application::postprocess_config (TMask& mask, TConfig& c)
|
||||
{
|
||||
TToken_string ora_inizio("",':');
|
||||
TMRP_config& config=(TMRP_config&)c;
|
||||
for (int i = 0; i < NTURNI; i++)
|
||||
{
|
||||
// Traduce le ore ed i minuti
|
||||
const short h = F_T1HINIZIO+(i*4);
|
||||
ora_inizio.add(mask.get(h),0); // Hour...
|
||||
ora_inizio.add(mask.get(h+1),1); // Minutes
|
||||
config.set("TINIZIO",ora_inizio,"mr", TRUE, i);
|
||||
const int durata_h = mask.get_int(h+2);
|
||||
const int durata_m = mask.get_int(h+3);
|
||||
const long minutes = durata_h * 60 + durata_m;
|
||||
config.set("TDURATA", minutes, "mr", TRUE, i);
|
||||
config.set_inizio_turno(i,mask.get_int(h) ,mask.get_int(h+1));
|
||||
config.set_durata_turno(i,mask.get_int(h+2),mask.get_int(h+3));
|
||||
// numero di persone
|
||||
config.set_numpers_turno(i,mask.get_int(F_T1NUMPERS+i));
|
||||
}
|
||||
config.set("GESTIMPIANTI", mask.get_bool(F_GESTIMPIANTI) ? "X" : "", "mr", TRUE);
|
||||
config.set("NTURNI", mask.get(F_NTURNI), "mr", TRUE);
|
||||
config.set_gestimpianti(mask.get_bool(F_GESTIMPIANTI));
|
||||
config.set_turni(mask.get_int(F_NTURNI));
|
||||
|
||||
TString paragraph(config.get_paragraph());
|
||||
config.set_paragraph(""); // Akkrokkio per salvare il calendario...
|
||||
_calendar->write();
|
||||
((const TCalendar_mask&)mask).calendar().write();
|
||||
config.set_paragraph(paragraph); // re-read
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
bool TConf_MRP_application::user_create()
|
||||
{
|
||||
TConfig conf(CONFIG_DITTA);
|
||||
conf.set( "EdMask", "mr0400a", "mr");
|
||||
_calendar = new TMRP_calendar(); // Calendario standard
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TConf_MRP_application::user_destroy()
|
||||
{
|
||||
if (_calendar)
|
||||
delete _calendar;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
11
mr/mr0400.h
@ -35,10 +35,19 @@
|
||||
#define F_T8MINIZIO 132
|
||||
#define F_T8HDURATA 133
|
||||
#define F_T8MDURATA 134
|
||||
#define F_T1NUMPERS 135
|
||||
#define F_T2NUMPERS 136
|
||||
#define F_T3NUMPERS 137
|
||||
#define F_T4NUMPERS 138
|
||||
#define F_T5NUMPERS 139
|
||||
#define F_T6NUMPERS 140
|
||||
#define F_T7NUMPERS 141
|
||||
#define F_T8NUMPERS 142
|
||||
|
||||
#define F_YEAR 201
|
||||
#define F_CALENDAR 202
|
||||
|
||||
#define F_DEFAULT_IMP 203
|
||||
#define F_DEFAULT_LNP 204
|
||||
#endif
|
||||
|
||||
|
||||
|
114
mr/mr0400a.uml
@ -18,10 +18,37 @@ PAGE "Parametri ditta" -1 -1 65 15
|
||||
|
||||
BOOLEAN F_GESTIMPIANTI
|
||||
BEGIN
|
||||
PROMPT 2 2 "Gestione impianti "
|
||||
FIELD GESTIMPIANTI
|
||||
PROMPT 2 1 "Gestione impianti "
|
||||
FIELD GESTIMPIANTI
|
||||
MESSAGE TRUE SHOW,F_DEFAULT_IMP
|
||||
MESSAGE FALSE HIDE,F_DEFAULT_IMP
|
||||
END
|
||||
|
||||
STRING F_DEFAULT_LNP 5
|
||||
BEGIN
|
||||
PROMPT 2 2 "Linea di default "
|
||||
FIELD DEFAULT_CODLIN
|
||||
USE LNP
|
||||
INPUT CODTAB F_DEFAULT_LNP
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_DEFAULT_LNP CODTAB
|
||||
OUTPUT F_DEFAULT_IMP S6
|
||||
END
|
||||
|
||||
STRING F_DEFAULT_IMP 5
|
||||
BEGIN
|
||||
PROMPT 42 2 "Impianto di default "
|
||||
FIELD DEFAULT_CODIMP
|
||||
USE IMP
|
||||
INPUT CODTAB F_DEFAULT_IMP
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_DEFAULT_IMP CODTAB
|
||||
END
|
||||
|
||||
|
||||
|
||||
LISTBOX F_NTURNI 3
|
||||
BEGIN
|
||||
PROMPT 2 4 "Numero turni "
|
||||
@ -50,11 +77,12 @@ BEGIN
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_T1MINIZIO 2
|
||||
BEGIN
|
||||
PROMPT 30 5 ""
|
||||
PROMPT 30 5 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
@ -66,16 +94,22 @@ BEGIN
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_T1MDURATA 2
|
||||
BEGIN
|
||||
PROMPT 47 5 ""
|
||||
PROMPT 47 5 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T1NUMPERS 3
|
||||
BEGIN
|
||||
PROMPT 52 5 "Persone impiegate "
|
||||
END
|
||||
|
||||
NUMBER F_T2HINIZIO 2
|
||||
BEGIN
|
||||
PROMPT 2 6 "Ora inizio secondo turno "
|
||||
@ -87,7 +121,7 @@ END
|
||||
|
||||
NUMBER F_T2MINIZIO 2
|
||||
BEGIN
|
||||
PROMPT 30 6 ""
|
||||
PROMPT 30 6 ":"
|
||||
GROUP 2 12 13 14 15 16 17 18 28
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
@ -105,13 +139,19 @@ END
|
||||
|
||||
NUMBER F_T2MDURATA 2
|
||||
BEGIN
|
||||
PROMPT 47 6 ""
|
||||
PROMPT 47 6 ":"
|
||||
GROUP 2 12 13 14 15 16 17 18 28
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T2NUMPERS 3
|
||||
BEGIN
|
||||
PROMPT 52 6 "Persone impiegate "
|
||||
GROUP 2 12 13 14 15 16 17 18 28
|
||||
END
|
||||
|
||||
NUMBER F_T3HINIZIO 2
|
||||
BEGIN
|
||||
PROMPT 2 7 "Ora inizio terzo turno "
|
||||
@ -123,7 +163,7 @@ END
|
||||
|
||||
NUMBER F_T3MINIZIO 2
|
||||
BEGIN
|
||||
PROMPT 30 7 ""
|
||||
PROMPT 30 7 ":"
|
||||
GROUP 3 13 14 15 16 17 18 28 38
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
@ -141,13 +181,19 @@ END
|
||||
|
||||
NUMBER F_T3MDURATA 2
|
||||
BEGIN
|
||||
PROMPT 47 7 ""
|
||||
PROMPT 47 7 ":"
|
||||
GROUP 3 13 14 15 16 17 18 28 38
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T3NUMPERS 3
|
||||
BEGIN
|
||||
PROMPT 52 7 "Persone impiegate "
|
||||
GROUP 3 13 14 15 16 17 18 28 38
|
||||
END
|
||||
|
||||
|
||||
NUMBER F_T4HINIZIO 2
|
||||
BEGIN
|
||||
@ -160,7 +206,7 @@ END
|
||||
|
||||
NUMBER F_T4MINIZIO 2
|
||||
BEGIN
|
||||
PROMPT 30 8 ""
|
||||
PROMPT 30 8 ":"
|
||||
GROUP 4 14 15 16 17 18 28 38 48
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
@ -178,13 +224,19 @@ END
|
||||
|
||||
NUMBER F_T4MDURATA 2
|
||||
BEGIN
|
||||
PROMPT 47 8 ""
|
||||
PROMPT 47 8 ":"
|
||||
GROUP 4 14 15 16 17 18 28 38 48
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T4NUMPERS 3
|
||||
BEGIN
|
||||
PROMPT 52 8 "Persone impiegate "
|
||||
GROUP 4 14 15 16 17 18 28 38 48
|
||||
END
|
||||
|
||||
NUMBER F_T5HINIZIO 2
|
||||
BEGIN
|
||||
PROMPT 2 9 "Ora inizio quinto turno "
|
||||
@ -196,7 +248,7 @@ END
|
||||
|
||||
NUMBER F_T5MINIZIO 2
|
||||
BEGIN
|
||||
PROMPT 30 9 ""
|
||||
PROMPT 30 9 ":"
|
||||
GROUP 5 15 16 17 18 28 38 48 58
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
@ -214,13 +266,19 @@ END
|
||||
|
||||
NUMBER F_T5MDURATA 2
|
||||
BEGIN
|
||||
PROMPT 47 9 ""
|
||||
PROMPT 47 9 ":"
|
||||
GROUP 5 15 16 17 18 28 38 48 58
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T5NUMPERS 3
|
||||
BEGIN
|
||||
PROMPT 52 9 "Persone impiegate "
|
||||
GROUP 5 15 16 17 18 28 38 48 58
|
||||
END
|
||||
|
||||
NUMBER F_T6HINIZIO 2
|
||||
BEGIN
|
||||
PROMPT 2 10 "Ora inizio sesto turno "
|
||||
@ -232,7 +290,7 @@ END
|
||||
|
||||
NUMBER F_T6MINIZIO 2
|
||||
BEGIN
|
||||
PROMPT 30 10 ""
|
||||
PROMPT 30 10 ":"
|
||||
GROUP 6 16 17 18 28 38 48 58 68
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
@ -250,13 +308,19 @@ END
|
||||
|
||||
NUMBER F_T6MDURATA 2
|
||||
BEGIN
|
||||
PROMPT 47 10 ""
|
||||
PROMPT 47 10 ":"
|
||||
GROUP 6 16 17 18 28 38 48 58 68
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T6NUMPERS 3
|
||||
BEGIN
|
||||
PROMPT 52 10 "Persone impiegate "
|
||||
GROUP 6 16 17 18 28 38 48 58 68
|
||||
END
|
||||
|
||||
NUMBER F_T7HINIZIO 2
|
||||
BEGIN
|
||||
PROMPT 2 11 "Ora inizio settimo turno "
|
||||
@ -268,7 +332,7 @@ END
|
||||
|
||||
NUMBER F_T7MINIZIO 2
|
||||
BEGIN
|
||||
PROMPT 30 11 ""
|
||||
PROMPT 30 11 ":"
|
||||
GROUP 7 17 18 28 38 48 58 68 78
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
@ -286,13 +350,18 @@ END
|
||||
|
||||
NUMBER F_T7MDURATA 2
|
||||
BEGIN
|
||||
PROMPT 47 11 ""
|
||||
PROMPT 47 11 ":"
|
||||
GROUP 7 17 18 28 38 48 58 68 78
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T7NUMPERS 3
|
||||
BEGIN
|
||||
PROMPT 52 11 "Persone impiegate "
|
||||
GROUP 7 17 18 28 38 48 58 68 78
|
||||
END
|
||||
|
||||
NUMBER F_T8HINIZIO 2
|
||||
BEGIN
|
||||
@ -305,7 +374,7 @@ END
|
||||
|
||||
NUMBER F_T8MINIZIO 2
|
||||
BEGIN
|
||||
PROMPT 30 12 ""
|
||||
PROMPT 30 12 ":"
|
||||
GROUP 8 18 28 38 48 58 68 78
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
@ -323,13 +392,20 @@ END
|
||||
|
||||
NUMBER F_T8MDURATA 2
|
||||
BEGIN
|
||||
PROMPT 47 12 ""
|
||||
PROMPT 47 12 ":"
|
||||
GROUP 8 18 28 38 48 58 68 78
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T8NUMPERS 3
|
||||
BEGIN
|
||||
PROMPT 52 12 "Persone impiegate "
|
||||
GROUP 8 18 28 38 48 58 68 78
|
||||
END
|
||||
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Calendario" -1 -1 65 15
|
||||
@ -337,7 +413,7 @@ PAGE "Calendario" -1 -1 65 15
|
||||
NUMBER F_YEAR 4
|
||||
BEGIN
|
||||
PROMPT 1 1 "Anno "
|
||||
FLAGS "AD"
|
||||
FLAGS "A"
|
||||
END
|
||||
|
||||
CALENDAR F_CALENDAR -3 -1
|
||||
|
@ -1,5 +1,5 @@
|
||||
#define APPNAME EURO_MR
|
||||
#define QAPPNAME "EURO_MR"
|
||||
#define APPNAME eurocamp
|
||||
#define QAPPNAME "eurocampo"
|
||||
#include <default.url>
|
||||
|
||||
/* mr1 -0 Generazione MRP Reports */
|
||||
|
@ -1,5 +1,5 @@
|
||||
#define APPNAME EURO_MR
|
||||
#define QAPPNAME "EURO_MR"
|
||||
#define APPNAME eurocamp
|
||||
#define QAPPNAME "eurocamp"
|
||||
#include <default.url>
|
||||
#include "mr2url.h"
|
||||
|
||||
|
701
mr/mr2200.cpp
@ -94,6 +94,7 @@
|
||||
// sheet articoli
|
||||
#define LAST_BUCKET 13
|
||||
|
||||
#define F_CHECKLINE 100
|
||||
#define F_TIPOCF_SHEET 101
|
||||
#define F_CLIENTE 102
|
||||
#define F_ARTICOLO 103
|
||||
|
@ -364,7 +364,7 @@ END
|
||||
|
||||
BOOL F_MSP_SORT_ORDER
|
||||
BEGIN
|
||||
PROMPT 2 3 "Inverti l'ordine"
|
||||
PROMPT 2 3 "Ordine inverso"
|
||||
MESSAGE TRUE PUSH, F_MSP_SORT
|
||||
MESSAGE FALSE PUSH, F_MSP_SORT
|
||||
END
|
||||
@ -395,13 +395,13 @@ BEGIN
|
||||
PROMPT 42 1 "Logica di proposta:"
|
||||
END
|
||||
|
||||
LIST F_RECALC_TYPE2 35
|
||||
LIST F_RECALC_TYPE2 34
|
||||
BEGIN
|
||||
FLAGS "D"
|
||||
PROMPT 42 2 ""
|
||||
ITEM "1|FirstFit "
|
||||
ITEM "1_INF|FirstFit (capacita' infinite) "
|
||||
ITEM "1_INFH|FirstFit (capacita' umane infinite)"
|
||||
ITEM "1|FirstFit "
|
||||
ITEM "1_INF|FirstFit (capacita' infinite) "
|
||||
ITEM "1_INFH|FirstFit (capacita' umane infin.) "
|
||||
ITEM "JIT|JustInTime "
|
||||
ITEM "JIT_INF|JustInTime (capacita' infinite)"
|
||||
ITEM "JIT_INFH|JustInTime (capacita umane infin.)"
|
||||
@ -990,6 +990,7 @@ ENDMASK
|
||||
|
||||
PAGE "Articoli" -1 -1 80 18
|
||||
|
||||
|
||||
LIST F_TIPOCF_SHEET 9
|
||||
BEGIN
|
||||
PROMPT 1 0 ""
|
||||
@ -1405,7 +1406,7 @@ END
|
||||
|
||||
STRING F_MASTERCODE 1
|
||||
BEGIN
|
||||
PROMPT 22 15 ""
|
||||
PROMPT 42 15 "MasterCode"
|
||||
FLAGS "H"
|
||||
END
|
||||
|
||||
@ -1424,12 +1425,19 @@ END*/
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 ""
|
||||
PROMPT -13 -1 ""
|
||||
END
|
||||
|
||||
BUTTON F_CHECKLINE 10 2
|
||||
BEGIN
|
||||
PROMPT -23 -1 ""
|
||||
PICTURE USER_BMP_CHECK
|
||||
PICTURE BMP_LENTE
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 10 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
PROMPT -33 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
@ -1,3 +1,7 @@
|
||||
#define G_ARTICOLI 10
|
||||
#define G_VINCOLI 20
|
||||
#define G_MOVIMENTO 30
|
||||
|
||||
#define FC_RIGA 101
|
||||
#define FC_BUCKET 102
|
||||
#define FC_CODART 103
|
||||
@ -17,6 +21,7 @@
|
||||
#define FC_MOVEFILTER 116
|
||||
#define FC_FINDFILTER 117
|
||||
#define FC_MAXBUCK2CHECK 118
|
||||
#define FC_ARTICLE2FIND 119
|
||||
|
||||
// MSP check mask
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
#include "mr2200b.h"
|
||||
#include "mr2url.h"
|
||||
#define G_ARTICOLI 10
|
||||
#define G_VINCOLI 20
|
||||
PAGE "Controllo planning" -1 -1 76 20
|
||||
|
||||
|
||||
@ -214,14 +212,25 @@ LIST FC_FINDFILTER 28
|
||||
BEGIN
|
||||
PROMPT 30 13 ""
|
||||
ITEM "8|Sotto stock"
|
||||
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
|
||||
ITEM "12|Anomalie"
|
||||
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
|
||||
ITEM "4|Eccessiva permanenza"
|
||||
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
|
||||
ITEM "14|Anomalie e nuove proposte"
|
||||
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
|
||||
ITEM "15|Anomalie e modifiche"
|
||||
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
|
||||
ITEM "13|Anomalie e modifiche manuali"
|
||||
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
|
||||
ITEM "2|Nuove proposte"
|
||||
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
|
||||
ITEM "3|Modifiche"
|
||||
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
|
||||
ITEM "1|Modifiche manuali"
|
||||
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
|
||||
ITEM "-1|Codice articolo"
|
||||
MESSAGE SHOW,FC_ARTICLE2FIND|HIDE,FC_MAXBUCK2CHECK
|
||||
END
|
||||
|
||||
NUMBER FC_MAXBUCK2CHECK 2
|
||||
@ -229,44 +238,62 @@ BEGIN
|
||||
PROMPT 62 13 "fino a "
|
||||
END
|
||||
|
||||
STRING FC_ARTICLE2FIND 20
|
||||
BEGIN
|
||||
PROMPT 30 14 "Codice "
|
||||
FLAGS "U"
|
||||
USE LF_ANAMAG
|
||||
INPUT CODART FC_ARTICLE2FIND
|
||||
DISPLAY "Codice@20" CODART
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT FC_ARTICLE2FIND CODART
|
||||
END
|
||||
|
||||
|
||||
BUTTON FC_RIGHT_BAD 4 2
|
||||
BEGIN
|
||||
PROMPT 46 16 ""
|
||||
PROMPT 46 17 ""
|
||||
PICTURE USER_BMP_ARROWRIGHT_RED
|
||||
GROUP G_MOVIMENTO
|
||||
END
|
||||
BUTTON FC_DOWN_BAD 4 2
|
||||
BEGIN
|
||||
PROMPT 40 18 ""
|
||||
PICTURE USER_BMP_ARROWDOWN_RED
|
||||
GROUP G_MOVIMENTO
|
||||
END
|
||||
BUTTON FC_LEFT_BAD 4 2
|
||||
BEGIN
|
||||
PROMPT 34 16 ""
|
||||
PROMPT 34 17 ""
|
||||
PICTURE USER_BMP_ARROWLEFT_RED
|
||||
GROUP G_MOVIMENTO
|
||||
END
|
||||
BUTTON FC_UP_BAD 4 2
|
||||
BEGIN
|
||||
PROMPT 40 14 ""
|
||||
PROMPT 40 16 ""
|
||||
PICTURE USER_BMP_ARROWUP_RED
|
||||
GROUP G_MOVIMENTO
|
||||
END
|
||||
|
||||
BUTTON FC_UPLEFT 4 2
|
||||
BEGIN
|
||||
PROMPT 4 14 "<"
|
||||
PICTURE USER_BMP_ARROWUPLEFT
|
||||
GROUP G_MOVIMENTO
|
||||
END
|
||||
|
||||
BUTTON FC_UP 4 2
|
||||
BEGIN
|
||||
PROMPT 10 14 "Su'"
|
||||
PICTURE USER_BMP_ARROWUP
|
||||
GROUP G_MOVIMENTO
|
||||
END
|
||||
|
||||
BUTTON FC_UPRIGHT 4 2
|
||||
BEGIN
|
||||
PROMPT 16 14 ">"
|
||||
PICTURE USER_BMP_ARROWUPRIGHT
|
||||
GROUP G_MOVIMENTO
|
||||
END
|
||||
|
||||
BUTTON FC_RIGHT 4 2
|
||||
@ -279,18 +306,21 @@ BUTTON FC_DOWNRIGHT 4 2
|
||||
BEGIN
|
||||
PROMPT 16 18 ">"
|
||||
PICTURE USER_BMP_ARROWDOWNRIGHT
|
||||
GROUP G_MOVIMENTO
|
||||
END
|
||||
|
||||
BUTTON FC_DOWN 4 2
|
||||
BEGIN
|
||||
PROMPT 10 18 "Giu'"
|
||||
PICTURE USER_BMP_ARROWDOWN
|
||||
GROUP G_MOVIMENTO
|
||||
END
|
||||
|
||||
BUTTON FC_DOWNLEFT 4 2
|
||||
BEGIN
|
||||
PROMPT 4 18 "<"
|
||||
PICTURE USER_BMP_ARROWDOWNLEFT
|
||||
GROUP G_MOVIMENTO
|
||||
END
|
||||
|
||||
BUTTON FC_LEFT 4 2
|
||||
|
867
mr/mrplib.cpp
@ -1,14 +1,207 @@
|
||||
#include <config.h>
|
||||
#include <prefix.h>
|
||||
#include <progind.h>
|
||||
#include <tabutil.h>
|
||||
#include <xvtility.h>
|
||||
#include <defmask.h>
|
||||
#include <utility.h> // file functions
|
||||
|
||||
#include "mrplib.h"
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TMRP_time
|
||||
//////////////////////////////////////////////////////////
|
||||
TAssoc_array TMRP_time::_frate_indovino;
|
||||
|
||||
TMRP_calendar& TMRP_time::get_calendar(const char* codimp,const char* codlin)
|
||||
{
|
||||
TToken_string k;
|
||||
k.add(codimp);
|
||||
k.add(codlin);
|
||||
TMRP_calendar* cal = (TMRP_calendar*)_frate_indovino.objptr(k);
|
||||
if (cal == NULL)
|
||||
{
|
||||
if (_frate_indovino.items() > 16)
|
||||
_frate_indovino.destroy(); // troppi calendari fanno male alla salute...
|
||||
|
||||
cal = new TMRP_calendar(codlin, codimp);
|
||||
_frate_indovino.add(k, cal);
|
||||
}
|
||||
return *cal;
|
||||
}
|
||||
|
||||
TMRP_calendar& TMRP_time::calendario()
|
||||
{
|
||||
return TMRP_time::get_calendar(_imp, _lin);
|
||||
}
|
||||
|
||||
int TMRP_time::compare(const TSortable& s) const
|
||||
{
|
||||
const TMRP_time& t = (const TMRP_time&)s;
|
||||
int res;
|
||||
if (_date == t._date)
|
||||
res = _hour - t._hour;
|
||||
else
|
||||
res = _date > t._date ? +1 : -1;
|
||||
return res;
|
||||
}
|
||||
|
||||
TMRP_time& TMRP_time::add_time(int days, long hours,bool macchina)
|
||||
{
|
||||
TMRP_calendar& cal = calendario();
|
||||
if (days != 0)
|
||||
{
|
||||
cal.next_working_day(_date, days);
|
||||
_hour = 0;
|
||||
}
|
||||
while (hours != 0)
|
||||
{
|
||||
real junk;
|
||||
const int ore = macchina ? cal.add_oremacchina(junk, _date):cal.add_oreuomo(junk, _date);
|
||||
const long tot = _hour + hours;
|
||||
if (tot < 0 || tot > ore)
|
||||
{
|
||||
if (hours >= 0)
|
||||
{
|
||||
cal.next_working_day(_date);
|
||||
hours -= ore - _hour;
|
||||
_hour = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
cal.prev_working_day(_date);
|
||||
hours += _hour;
|
||||
_hour = (macchina ? cal.add_oremacchina(junk, _date) : cal.add_oreuomo(junk,_date));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_hour = int(tot);
|
||||
hours = 0;
|
||||
}
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
void TMRP_time::set(const TDate& d, int h, const char* imp, const char* lin)
|
||||
{
|
||||
_date = d;
|
||||
_hour = h;
|
||||
_imp = imp;
|
||||
_lin = lin;
|
||||
}
|
||||
|
||||
TMRP_time::TMRP_time() : _hour(0)
|
||||
{ }
|
||||
|
||||
TMRP_time::TMRP_time(const TDate& d, int h, const char* imp, const char* lin)
|
||||
: _date(d), _hour(h), _imp(imp), _lin(lin)
|
||||
{ }
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TMRP_array
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
TSortable* TMRP_array::add_obj(const TToken_string& key)
|
||||
{
|
||||
TSortable* obj = (TSortable*)_by_key.objptr(key);
|
||||
if (obj == NULL)
|
||||
{
|
||||
obj = new_obj(key);
|
||||
_by_key.add(key, obj);
|
||||
_by_idx.add(obj);
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
void TMRP_array::add(TMRP_array &a, bool force)
|
||||
{
|
||||
TString_array keys;
|
||||
a._by_key.get_keys(keys);
|
||||
for (int o=keys.items()-1; o >= 0; o--)
|
||||
{
|
||||
TString & key = keys.row(o);
|
||||
TSortable* obj = (TSortable*)a._by_key.objptr(key)->dup();
|
||||
TSortable* oldobj = (TSortable*)_by_key.objptr(key);
|
||||
if (oldobj == NULL || force)
|
||||
{
|
||||
_by_key.add(key, obj);
|
||||
_by_idx.add(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TMRP_array & TMRP_array::operator=(const TMRP_array& a)
|
||||
{
|
||||
_by_key=a._by_key;
|
||||
_by_idx=a._by_idx;
|
||||
return *this;
|
||||
}
|
||||
|
||||
TMRP_array::TMRP_array(const TMRP_array& a)
|
||||
{
|
||||
*this = TMRP_array::operator=(a);
|
||||
}
|
||||
|
||||
// Ordina gli articoli secondo il noto algoritmo Fantini-Truffelli
|
||||
// per array di oggetti su cui non e' definito un ordinamento completo
|
||||
long TMRP_array::sort()
|
||||
{
|
||||
const long last = items()-1;
|
||||
|
||||
TProgind* pi = NULL;
|
||||
if (last >= 16)
|
||||
pi = new TProgind(last, "Ordinamento", FALSE, TRUE);
|
||||
else
|
||||
begin_wait();
|
||||
|
||||
for (long i = 0; i < last; i++)
|
||||
{
|
||||
if (pi) pi->addstatus(1);
|
||||
TSortable* best = &find_obj(i);
|
||||
bool swapped = TRUE;
|
||||
while (swapped)
|
||||
{
|
||||
swapped = FALSE;
|
||||
for (long j = i+1; j <= last; j++)
|
||||
{
|
||||
TSortable& other = find_obj(j);
|
||||
if (other.compare(*best) > 0)
|
||||
{
|
||||
// swap(i, j);
|
||||
// best = &other;
|
||||
best = (TSortable*)_by_idx.remove(int(j), TRUE);
|
||||
_by_idx.TArray::insert(best, int(i));
|
||||
swapped = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (pi)
|
||||
delete pi;
|
||||
else
|
||||
end_wait();
|
||||
|
||||
return last+1;
|
||||
}
|
||||
|
||||
void TMRP_array::destroy()
|
||||
{
|
||||
_by_key.destroy();
|
||||
_by_idx.destroy();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TMRP_calendar
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
TString16 TMRP_calendar::_days;
|
||||
TToken_string TMRP_calendar::_holidays;
|
||||
|
||||
void TMRP_calendar::init_default()
|
||||
{
|
||||
TConfig cfg(CONFIG_DITTA, "mr");
|
||||
TMRP_config cfg;
|
||||
// Inizializza i turni dei 5 giorni feriali a 1
|
||||
// Inizializza i turni di sabato e domenica a 0
|
||||
// Inizializza i turni dei giorni festivi a 0
|
||||
@ -16,6 +209,29 @@ void TMRP_calendar::init_default()
|
||||
// Inizializza la lista delle feste comandate tranne la Pasqua
|
||||
_holidays = cfg.get("Feste", NULL, -1,
|
||||
"01-01|06-01|25-04|01-05|15-08|01-11|08-12|25-12|26-12");
|
||||
TUnita_produttiva * up=NULL;
|
||||
if (_codlin.not_empty())
|
||||
up=new TLinea_prod(_codlin);
|
||||
else if (_codimp.not_empty())
|
||||
up=new TImpianto(_codimp);
|
||||
|
||||
for (int t = 0; t < 8; t++)
|
||||
{
|
||||
if (up)
|
||||
{
|
||||
// turni di linea
|
||||
_lungturno[t] = up->durata_turno(t);
|
||||
_inizturno[t] = up->inizio_turno(t);
|
||||
_persturno[t] = up->numpers_turno(t);
|
||||
}
|
||||
else
|
||||
{
|
||||
// turni di ditta
|
||||
_lungturno[t] = cfg.durata_turno(t);
|
||||
_inizturno[t] = cfg.inizio_turno(t);
|
||||
_persturno[t] = cfg.numpers_turno(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool TMRP_calendar::is_holiday(int g, int m) const
|
||||
@ -287,6 +503,61 @@ int TMRP_calendar::set_turni(const TDate& data, int mini, int maxi)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int TMRP_calendar::add_oreuomo(real & var,const TDate& date, bool max)
|
||||
{
|
||||
int minuti = 0L;
|
||||
const int tm = max ? turni_max(date) : turni_min(date);
|
||||
for (int t = tm-1; t >= 0; t--)
|
||||
minuti += _lungturno[t] * _persturno[t] ;
|
||||
var +=(minuti / 60 );
|
||||
return minuti / 60 ;
|
||||
}
|
||||
|
||||
int TMRP_calendar::add_oreuomo_max(real & var,const TDate& date)
|
||||
{
|
||||
return add_oreuomo(var, date,TRUE);
|
||||
}
|
||||
|
||||
int TMRP_calendar::add_oremacchina(real & var,const TDate& date, bool max)
|
||||
{
|
||||
const int tm = max ? turni_max(date) : turni_min(date);
|
||||
int minuti = 0L;
|
||||
for (int t = tm-1; t >= 0; t--)
|
||||
{
|
||||
minuti += _lungturno[t];
|
||||
const int start=_inizturno[t];
|
||||
const int end=_inizturno[t]+_lungturno[t]-1;
|
||||
for (int pt = t-1; pt >= 0; pt--)
|
||||
{
|
||||
int overlap ;
|
||||
if (_inizturno[pt]<start)
|
||||
{
|
||||
// OK 100%
|
||||
if (_inizturno[pt] + _lungturno[pt] > end)
|
||||
overlap = end + 1 - start ;
|
||||
else
|
||||
overlap = _inizturno[pt] + _lungturno[pt] -1 - start;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (end > _inizturno[pt]+_lungturno[pt])
|
||||
overlap = _lungturno[pt];
|
||||
else
|
||||
overlap = end + 1 - _inizturno[pt] ;
|
||||
}
|
||||
if (overlap >= 0)
|
||||
minuti -= overlap;
|
||||
}
|
||||
}
|
||||
var +=(minuti / 60 );
|
||||
return (minuti / 60 );
|
||||
}
|
||||
|
||||
int TMRP_calendar::add_oremacchina_max(real & var,const TDate& date)
|
||||
{
|
||||
return add_oremacchina(var, date,TRUE);
|
||||
}
|
||||
|
||||
int TMRP_calendar::write() const
|
||||
{
|
||||
if (!_codlin.blank())
|
||||
@ -295,9 +566,13 @@ int TMRP_calendar::write() const
|
||||
if (!_codimp.blank())
|
||||
return write_cal('I');
|
||||
|
||||
TConfig cfg(CONFIG_DITTA, "mr");
|
||||
cfg.set("Turni", _days);
|
||||
cfg.set("Feste", _holidays);
|
||||
if (_days.not_empty())
|
||||
{
|
||||
TConfig cfg(CONFIG_DITTA, "mr");
|
||||
cfg.set("Turni", _days);
|
||||
cfg.set("Feste", _holidays);
|
||||
}
|
||||
|
||||
return NOERR;
|
||||
}
|
||||
|
||||
@ -315,8 +590,8 @@ void TMRP_calendar::set(const char* linea, const char* impianto)
|
||||
_exc_lin.destroy();
|
||||
_exc_imp.destroy();
|
||||
|
||||
_codlin = linea;
|
||||
_codimp = impianto;
|
||||
_codlin = linea; _codlin.rpad(5);
|
||||
_codimp = impianto; _codimp.rpad(5);
|
||||
|
||||
if (_codlin.not_empty())
|
||||
{
|
||||
@ -348,9 +623,22 @@ char TMRP_calendar::tipo() const
|
||||
return 'S';
|
||||
}
|
||||
|
||||
TDate& TMRP_calendar::next_working_day(TDate& work, int gap)
|
||||
{
|
||||
const int delta = gap >= 0 ? +1 : -1;
|
||||
const int steps = gap >= 0 ? gap : -gap;
|
||||
for (int i = 0; i < steps; i++)
|
||||
{
|
||||
do work += delta;
|
||||
while (turni_min(work) <= 0);
|
||||
}
|
||||
return work;
|
||||
}
|
||||
|
||||
TMRP_calendar::TMRP_calendar(const char* linea, const char* impianto)
|
||||
{
|
||||
set(linea, impianto);
|
||||
init_default();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -391,17 +679,40 @@ void TCalendar_win::handler(WINDOW win, EVENT* ep)
|
||||
const int last = TDate::last_day(month, _anno);
|
||||
if (day >= 1 && day <= last)
|
||||
{
|
||||
TMask m("Turni del giorno", 1, 40, 7);
|
||||
m.add_date(101, 0, "Data ", 1, 1, "D");
|
||||
m.add_string(102, 0, "", 19, 1, 9, "D");
|
||||
m.add_boolean(103, 0, "Festa", 31, 1);
|
||||
m.add_list(104, 0, "Turni minimi ", 1, 3, 8, "", " |0|1|2|3|4|5|6", "Standard|Nessuno|1 turno|2 turni|3 turni|4 turni|5 turni|6 turni");
|
||||
m.add_list(105, 0, "Turni massimi ", 1, 4, 8, "", " |0|1|2|3|4|5|6", "Standard|Nessuno|1 turno|2 turni|3 turni|4 turni|5 turni|6 turni");
|
||||
m.add_number(106, 0, "= ", 31, 3, 1, "D");
|
||||
m.add_number(107, 0, "= ", 31, 4, 1, "D");
|
||||
|
||||
const bool is_std=_calendario->tipo()=='S' ;
|
||||
TString calname;
|
||||
switch (_calendario->tipo())
|
||||
{
|
||||
case 'S':
|
||||
calname="Calendario standard";
|
||||
break;
|
||||
case 'I':
|
||||
calname="Calendario impianto ";
|
||||
calname << '"'<< _calendario->impianto() << '"';
|
||||
break;
|
||||
case 'L':
|
||||
calname="Calendario linea ";
|
||||
calname << '"'<< _calendario->linea() << '"';
|
||||
break;
|
||||
}
|
||||
TMask m(calname, 1, 40, 8);
|
||||
m.add_static(DLG_NULL, 0, "Turni del giorno ", 1, 1);
|
||||
m.add_date(101, 0, "", 1, 2, "D");
|
||||
m.add_string(102, 0, "", 19, 2, 9, "D");
|
||||
m.add_boolean(103, 0, "Festa", 31, 2, is_std ? "":"D");
|
||||
if (is_std)
|
||||
{
|
||||
m.add_list(104, 0, "Turni minimi ", 1, 4, 8, "", "0|1|2|3|4|5|6|7|8", "Nessuno|1 turno|2 turni|3 turni|4 turni|5 turni|6 turni|7 turni|8 turni");
|
||||
m.add_list(105, 0, "Turni massimi ", 1, 5, 8, "", "0|1|2|3|4|5|6|7|8", "Nessuno|1 turno|2 turni|3 turni|4 turni|5 turni|6 turni|7 turni|8 turni");
|
||||
} else {
|
||||
m.add_list(104, 0, "Turni minimi ", 1, 4, 8, "", " |0|1|2|3|4|5|6|7|8", "Standard|Nessuno|1 turno|2 turni|3 turni|4 turni|5 turni|6 turni|7 turni|8 turni");
|
||||
m.add_list(105, 0, "Turni massimi ", 1, 5, 8, "", " |0|1|2|3|4|5|6|7|8", "Standard|Nessuno|1 turno|2 turni|3 turni|4 turni|5 turni|6 turni|7 turni|8 turni");
|
||||
}
|
||||
m.add_number(106, 0, "= ", 31, 4, 1, "D");
|
||||
m.add_number(107, 0, "= ", 31, 5, 1, "D");
|
||||
m.add_button(DLG_OK, 0, "", -12, -1, 10, 2);
|
||||
m.add_button(DLG_CANCEL, 0, "", -22, -1, 10, 2);
|
||||
|
||||
const TDate d(day, month, _anno);
|
||||
const bool festa = _calendario->is_holiday(d);
|
||||
m.set(101, d.string());
|
||||
@ -448,12 +759,22 @@ void TCalendar_win::update()
|
||||
{
|
||||
TField_window::update();
|
||||
|
||||
const TDate today(TODAY);
|
||||
const int this_year = today.year();
|
||||
const int this_month = today.month();
|
||||
const int this_day = today.day();
|
||||
|
||||
_pixmap = TRUE;
|
||||
|
||||
TString16 str;
|
||||
str << _anno;
|
||||
set_color(COLOR_BLACK, COLOR_WHITE);
|
||||
printat(1, 1, str);
|
||||
|
||||
if (_anno == this_year)
|
||||
set_font(XVT_FFN_FIXED, XVT_FS_BOLD);
|
||||
stringat(1, 1, str);
|
||||
if (_anno == this_year)
|
||||
set_font();
|
||||
|
||||
RCT rct; xvt_vobj_get_client_rect(win(), &rct);
|
||||
|
||||
@ -463,14 +784,24 @@ void TCalendar_win::update()
|
||||
const int x = rct.right * (i+1) / 33;
|
||||
line(x, 0, x, rct.bottom);
|
||||
str.format("%2d", i);
|
||||
printat(x+2, 0, str);
|
||||
|
||||
if (i == this_day)
|
||||
set_font(XVT_FFN_FIXED, XVT_FS_BOLD);
|
||||
stringat(x+2, 0, str);
|
||||
if (i == this_day)
|
||||
set_font();
|
||||
}
|
||||
for (j = 1; j <= 12; j++)
|
||||
{
|
||||
const int y = rct.bottom * j / 13;
|
||||
line(0, y, rct.right, y);
|
||||
str = itom(j); str.cut(3);
|
||||
printat(1, y, str);
|
||||
|
||||
if (j == this_month)
|
||||
set_font(XVT_FFN_FIXED, XVT_FS_BOLD);
|
||||
stringat(1, y, str);
|
||||
if (j == this_month)
|
||||
set_font();
|
||||
}
|
||||
|
||||
TMRP_calendar* defcal = NULL;
|
||||
@ -489,13 +820,39 @@ void TCalendar_win::update()
|
||||
{
|
||||
const int x = rct.right * (i+1) / 33;
|
||||
const TDate data(i, j, _anno);
|
||||
set_color(cal->is_red(data) ? COLOR_RED : COLOR_BLACK, COLOR_WHITE);
|
||||
int tmin, tmax;
|
||||
cal->turni(data, tmin, tmax);
|
||||
|
||||
COLOR colore = COLOR_BLACK;
|
||||
if (cal->is_red(data))
|
||||
colore = COLOR_RED;
|
||||
else
|
||||
{
|
||||
if (tmin != 0)
|
||||
{
|
||||
const TDate ieri = data-1L;
|
||||
if (cal->turni_min(ieri) == 0)
|
||||
{
|
||||
const TDate domani = data+1L;
|
||||
if (cal->turni_min(domani) == 0)
|
||||
colore = COLOR_MAGENTA;
|
||||
}
|
||||
}
|
||||
else
|
||||
colore = COLOR_BLUE;
|
||||
}
|
||||
set_color(colore, COLOR_WHITE);
|
||||
|
||||
if (j == this_month && i == this_day)
|
||||
set_font(XVT_FFN_FIXED, XVT_FS_BOLD);
|
||||
|
||||
str.format("%d", tmin);
|
||||
printat(x+2, y, str);
|
||||
stringat(x+2, y, str);
|
||||
str.format("%2d", tmax);
|
||||
printat(x+2, y+CHARY-3, str);
|
||||
stringat(x+2, y+BASEY/2, str);
|
||||
|
||||
if (j == this_month && i == this_day)
|
||||
set_font();
|
||||
}
|
||||
}
|
||||
|
||||
@ -536,12 +893,84 @@ void TCalendar_field::set_calendar(TMRP_calendar* cal, int year)
|
||||
{
|
||||
TCalendar_win& cw = (TCalendar_win&)win();
|
||||
cw.set_calendar(cal, year);
|
||||
cw.force_update();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TCalendar_mask
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
/*
|
||||
void TCalendar_mask::make_profile_name(TFilename& f) const
|
||||
{
|
||||
f =::firm2dir(-1); // Directory dati
|
||||
f.add("config"); // Directory config
|
||||
f.add(user()); // Directory config
|
||||
if (!f.exist())
|
||||
make_dir(f);
|
||||
f.add(source_file()); // Nome Maschera
|
||||
f.ext("ini"); // Estensione
|
||||
}
|
||||
|
||||
void TCalendar_mask::save_profile()
|
||||
{
|
||||
TFilename prof;
|
||||
make_profile_name(prof);
|
||||
|
||||
ofstream ini(prof);
|
||||
for (int i = 0; i < fields(); i++)
|
||||
{
|
||||
TMask_field& f = fld(i);
|
||||
if (f.is_loadable())
|
||||
{
|
||||
if (f.is_sheet())
|
||||
{
|
||||
TSheet_field& s = (TSheet_field&)f;
|
||||
FOR_EACH_SHEET_ROW(s, r, row)
|
||||
ini << f.dlg() << '[' << r << "] = " << *row << endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
ini << f.dlg() << " = " << f.get() << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TCalendar_mask::load_profile()
|
||||
{
|
||||
TFilename prof;
|
||||
make_profile_name(prof);
|
||||
if (prof.exist())
|
||||
{
|
||||
TScanner ini(prof);
|
||||
while (ini.good())
|
||||
{
|
||||
TString& line = ini.line();
|
||||
int id, idx;
|
||||
const int num = sscanf(line, "%d[%d] = ", &id, &idx);
|
||||
if (num > 0 && id2pos(id) >= 0) // Riga valida
|
||||
{
|
||||
TMask_field& f = field(id);
|
||||
if (f.is_loadable())
|
||||
{
|
||||
const int eq = line.find('=');
|
||||
line.ltrim(eq+2); // Considera solo il valore del campo
|
||||
if (num == 1)
|
||||
f.set(line); else
|
||||
if (num == 2 && f.is_sheet())
|
||||
{
|
||||
TSheet_field& sf = (TSheet_field&)f;
|
||||
if (idx == 0) sf.destroy(); // Cancella tutto se inserisci la prima riga
|
||||
sf.row(idx) = line;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
TMask_field* TCalendar_mask::parse_field(TScanner& scanner)
|
||||
{
|
||||
const TString& k = scanner.key();
|
||||
@ -550,9 +979,405 @@ TMask_field* TCalendar_mask::parse_field(TScanner& scanner)
|
||||
return TAutomask::parse_field(scanner);
|
||||
}
|
||||
|
||||
void TCalendar_mask::update_calendar(short calendar, short year, short plant, short line)
|
||||
{
|
||||
TCalendar_field& cf = (TCalendar_field&)field(calendar);
|
||||
TString16 linea = line > 0 ? get(line) : EMPTY_STRING;
|
||||
TString16 impianto = plant > 0 ? get(plant) : EMPTY_STRING;
|
||||
int anno = year >= 0 ? get_int(year) : 0;
|
||||
_calendar.set(linea, impianto);
|
||||
cf.set_calendar(&_calendar, anno);
|
||||
}
|
||||
|
||||
TCalendar_mask::TCalendar_mask(const char* name, int num)
|
||||
{
|
||||
read_mask(name, num, 0);
|
||||
set_handlers();
|
||||
}
|
||||
|
||||
|
||||
//***********************************
|
||||
//
|
||||
//***********************************
|
||||
static TMRP_config *_confditta=NULL;
|
||||
|
||||
TMRP_config & mrp_config()
|
||||
{
|
||||
if (_confditta==NULL)
|
||||
_confditta= new TMRP_config();
|
||||
return *_confditta;
|
||||
}
|
||||
|
||||
|
||||
//***********************************
|
||||
int TMRP_config::ora_inizio_turno(int i)
|
||||
{
|
||||
return (int)inizio_turno(i) / 60; // numero di minuti
|
||||
}
|
||||
|
||||
int TMRP_config::min_inizio_turno(int i)
|
||||
{
|
||||
return (int)inizio_turno(i) % 60; // numero di minuti
|
||||
}
|
||||
|
||||
int TMRP_config::inizio_turno(int i)
|
||||
{
|
||||
return get_int("TINIZIO","mr", i);
|
||||
}
|
||||
|
||||
int TMRP_config::ore_durata_turno(int i)
|
||||
{
|
||||
return (int)durata_turno(i) / 60;
|
||||
}
|
||||
|
||||
int TMRP_config::min_durata_turno(int i)
|
||||
{
|
||||
return (int)durata_turno(i) % 60;
|
||||
}
|
||||
|
||||
int TMRP_config::durata_turno(int i)
|
||||
{
|
||||
return get_int("TDURATA", "mr", i);
|
||||
}
|
||||
|
||||
int TMRP_config::numpers_turno(int t)
|
||||
{
|
||||
return get_int("NUMPERS", "mr", t);
|
||||
}
|
||||
|
||||
void TMRP_config::set_inizio_turno(int i,int ore, int minuti)
|
||||
{
|
||||
const int time = ore * 60 + minuti;
|
||||
set_inizio_turno(i,time);
|
||||
}
|
||||
|
||||
void TMRP_config::set_durata_turno(int i,int ore, int minuti)
|
||||
{
|
||||
const int time = ore * 60 + minuti;
|
||||
set_durata_turno(i,time);
|
||||
}
|
||||
|
||||
void TMRP_config::set_inizio_turno(int i,int time)
|
||||
{
|
||||
set("TINIZIO", time, "mr", TRUE, i);
|
||||
}
|
||||
|
||||
void TMRP_config::set_durata_turno(int i,int time)
|
||||
{
|
||||
set("TDURATA", time, "mr", TRUE, i);
|
||||
}
|
||||
|
||||
//********
|
||||
TImpianto * get_impianto(const char * codice)
|
||||
{
|
||||
static TImpianto *buffer=NULL;
|
||||
if (!buffer)
|
||||
buffer= new TImpianto();
|
||||
*buffer=cache().get("IMP",codice);
|
||||
return buffer;
|
||||
}
|
||||
TLinea_prod* get_linea(const char * codice)
|
||||
{
|
||||
static TLinea_prod *buffer=NULL;
|
||||
if (!buffer)
|
||||
buffer= new TLinea_prod();
|
||||
*buffer=cache().get("LNP",codice);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
const char *TUnita_produttiva::erre1(int t)
|
||||
{
|
||||
static char _erre[4] = "R0";
|
||||
_erre[1]='0'+char(t);
|
||||
CHECK(t>=0 && t<8, "Errore nel numero di turno");
|
||||
return _erre;
|
||||
}
|
||||
const char *TUnita_produttiva::erre2(int t)
|
||||
{
|
||||
static char _erre[4] = "R10";
|
||||
_erre[2]='0'+char(t);
|
||||
CHECK(t>=0 && t<8, "Errore nel numero di turno");
|
||||
return _erre;
|
||||
}
|
||||
#define M_INIZIO 10000L
|
||||
#define M_DURATA 1L
|
||||
//#define M_PERSON 0.05
|
||||
// inizio turno
|
||||
int TUnita_produttiva::inizio_turno(int t)
|
||||
{
|
||||
real r=get_real(erre1(t));
|
||||
r=r/M_INIZIO;
|
||||
const int i=(int)r.round().integer();
|
||||
return i;
|
||||
}
|
||||
void TUnita_produttiva::set_inizio_turno(int t,int time)
|
||||
{
|
||||
real r(time);
|
||||
r = r * M_INIZIO;
|
||||
r = r + long(TUnita_produttiva::durata_turno(t))*M_DURATA;
|
||||
put(erre1(t), r);
|
||||
}
|
||||
// durata turno
|
||||
int TUnita_produttiva::durata_turno(int t)
|
||||
{
|
||||
real r=get_real(erre1(t));
|
||||
r=r-real(long(TUnita_produttiva::inizio_turno(t))*M_INIZIO);
|
||||
r=r/M_DURATA;
|
||||
const int i=(int)r.round().integer();
|
||||
return i;
|
||||
}
|
||||
void TUnita_produttiva::set_durata_turno(int t,int time)
|
||||
{
|
||||
real r(TUnita_produttiva::inizio_turno(t));
|
||||
r = r * M_INIZIO;
|
||||
r = r + long(time)*M_DURATA;
|
||||
put(erre1(t), r);
|
||||
}
|
||||
// persone per turno
|
||||
int TUnita_produttiva::raw_numpers_turno(int t)
|
||||
{
|
||||
real r(get_real(erre2(t)));
|
||||
return (int)r.round().integer();
|
||||
}
|
||||
|
||||
int TUnita_produttiva::numpers_turno(int t)
|
||||
{
|
||||
int val;
|
||||
if (!TUnita_produttiva::personale_dedicato())
|
||||
val=raw_numpers_turno(t);
|
||||
if (val==0)
|
||||
val=get_int("I1");
|
||||
else
|
||||
val= mrp_config().numpers_turno(t);
|
||||
return val;
|
||||
/*int r=raw_numpers_turno(t);
|
||||
if (r==0)
|
||||
return numpers_turno();
|
||||
else
|
||||
return r;*/
|
||||
}
|
||||
void TUnita_produttiva::set_numpers_turno(int t, int pers)
|
||||
{
|
||||
real r(pers);
|
||||
put(erre2(t), r);
|
||||
}
|
||||
|
||||
|
||||
void TUnita_produttiva::set_inizio_turno(int t,int ore, int minuti)
|
||||
{
|
||||
const int time=ore*60+minuti;
|
||||
set_inizio_turno(t,time);
|
||||
}
|
||||
void TUnita_produttiva::set_durata_turno(int t,int ore, int minuti)
|
||||
{
|
||||
const int time=ore*60+minuti;
|
||||
set_durata_turno(t,time);
|
||||
}
|
||||
|
||||
int TUnita_produttiva::ora_inizio_turno(int t)
|
||||
{
|
||||
return inizio_turno(t)/60;
|
||||
}
|
||||
int TUnita_produttiva::min_inizio_turno(int t)
|
||||
{
|
||||
return inizio_turno(t)%60;
|
||||
}
|
||||
int TUnita_produttiva::ore_durata_turno(int t)
|
||||
{
|
||||
return durata_turno(t)/60;
|
||||
}
|
||||
int TUnita_produttiva::min_durata_turno(int t)
|
||||
{
|
||||
return durata_turno(t)%60;
|
||||
}
|
||||
|
||||
const char * TUnita_produttiva::codmag() const
|
||||
{
|
||||
TString16 s(codmagdep());
|
||||
return s.sub(0,3);
|
||||
}
|
||||
|
||||
const char * TUnita_produttiva::coddep() const
|
||||
{
|
||||
TString16 s(codmagdep());
|
||||
return s.sub(3,5);
|
||||
}
|
||||
|
||||
// ***************************
|
||||
// ****** TImpianto
|
||||
TImpianto::TImpianto(const char* cod)
|
||||
: TUnita_produttiva()
|
||||
{
|
||||
settab("IMP");
|
||||
if (cod && *cod)
|
||||
{
|
||||
TTable t("IMP");
|
||||
t.put("CODTAB",cod);
|
||||
t.read();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ***************************
|
||||
// ****** TLinea_prod
|
||||
TRectype & TUnita_produttiva::operator=(const TRectype & rec)
|
||||
{
|
||||
TRectype ::operator=(rec);
|
||||
return *this ;
|
||||
}
|
||||
TRectype & TImpianto::operator=(const TRectype & rec)
|
||||
{
|
||||
TUnita_produttiva::operator=(rec);
|
||||
return *this ;
|
||||
}
|
||||
TRectype & TLinea_prod::operator=(const TRectype & rec)
|
||||
{
|
||||
TUnita_produttiva::operator=(rec);
|
||||
return *this ;
|
||||
}
|
||||
|
||||
const char * TLinea_prod::codimp() const
|
||||
{
|
||||
static char _codimp[5];
|
||||
return strcpy(_codimp, get("S6"));
|
||||
}
|
||||
|
||||
TLinea_prod::TLinea_prod(const char* cod )
|
||||
: TUnita_produttiva()
|
||||
{
|
||||
settab("LNP");
|
||||
if (cod && *cod)
|
||||
{
|
||||
TTable t("LNP");
|
||||
put("CODTAB",cod);
|
||||
read(t);
|
||||
}
|
||||
}
|
||||
|
||||
const char * TLinea_prod::codmagdep() const
|
||||
{
|
||||
const char * cod=TUnita_produttiva::codmagdep() ;
|
||||
if (*cod==0)
|
||||
{
|
||||
TImpianto* imp=((TLinea_prod *)this)->get_impianto();
|
||||
if (imp)
|
||||
return imp->codmagdep();
|
||||
}
|
||||
return cod;
|
||||
}
|
||||
|
||||
|
||||
int TLinea_prod::inizio_turno(int t)
|
||||
{
|
||||
int val;
|
||||
if (TUnita_produttiva::num_turni()!=0)
|
||||
val=TUnita_produttiva::inizio_turno(t);
|
||||
else
|
||||
{
|
||||
TImpianto* imp=get_impianto();
|
||||
if (imp && imp->num_turni()!=0)
|
||||
val=imp->inizio_turno(t);
|
||||
else
|
||||
val=mrp_config().inizio_turno(t);
|
||||
}
|
||||
return val;
|
||||
}
|
||||
int TLinea_prod::durata_turno(int t)
|
||||
{
|
||||
int val;
|
||||
if (TUnita_produttiva::num_turni()!=0)
|
||||
val=TUnita_produttiva::durata_turno(t);
|
||||
else
|
||||
{
|
||||
TImpianto* imp=get_impianto();
|
||||
if (imp && imp->num_turni()!=0)
|
||||
val=imp->durata_turno(t);
|
||||
else
|
||||
val=mrp_config().durata_turno(t);
|
||||
}
|
||||
return val;
|
||||
}
|
||||
int TLinea_prod::numpers_turno(int t)
|
||||
{
|
||||
int val;
|
||||
if (TUnita_produttiva::num_turni()!=0)
|
||||
val=TUnita_produttiva::numpers_turno(t);
|
||||
else
|
||||
{
|
||||
TImpianto* imp=get_impianto();
|
||||
if (imp)
|
||||
val=imp->numpers_turno(t);
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
int TLinea_prod::num_turni()
|
||||
{
|
||||
int val=TUnita_produttiva::num_turni();
|
||||
if (val==0)
|
||||
{
|
||||
TImpianto* imp=get_impianto();
|
||||
if (imp)
|
||||
val=imp->num_turni();
|
||||
if (val==0)
|
||||
val=mrp_config().num_turni();
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
TImpianto * TLinea_prod::get_impianto() const
|
||||
{
|
||||
const char * imp = codimp();
|
||||
if (imp && *imp)
|
||||
return ::get_impianto(imp);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static TCodgiac_livelli *_livelli=NULL;
|
||||
|
||||
TCodgiac_livelli &livelli_giac()
|
||||
{
|
||||
if (_livelli==NULL)
|
||||
_livelli=new TCodgiac_livelli();
|
||||
return *_livelli;
|
||||
}
|
||||
|
||||
|
||||
void find_price(const TString &tipocv, const TString &codcv, const TString &codcatven,
|
||||
const char *tipocf, long codcf,
|
||||
const char * codice, const real & qta, real & price)
|
||||
{
|
||||
static TCondizione_vendita *_condv =NULL;
|
||||
|
||||
bool retry=TRUE;
|
||||
if (_condv == NULL)
|
||||
_condv = new TCondizione_vendita(new TConfig (CONFIG_DITTA));
|
||||
|
||||
switch (tipocv[0])
|
||||
{
|
||||
case 'C':
|
||||
if (codcf == 0L && _condv->config_ditta().get_bool("GESCONCC", "ve"))
|
||||
break; // necessario il codice del cli/for
|
||||
case 'O':
|
||||
case 'L':
|
||||
_condv -> put_condv(tipocv,codcv,codcatven,
|
||||
tipocf, codcf ? format("%ld",codcf) : "");
|
||||
if (_condv->ricerca(codice, qta))
|
||||
{
|
||||
price = _condv->get_prezzo();
|
||||
retry=FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (retry)
|
||||
{
|
||||
TToken_string key(codice);
|
||||
key.add(1);
|
||||
price = cache().get(LF_UMART,key).get_real(UMART_PREZZO);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
228
mr/mrplib.h
@ -5,10 +5,64 @@
|
||||
#include <automask.h>
|
||||
#endif
|
||||
|
||||
#ifndef __ASSOC_H
|
||||
#include <assoc.h>
|
||||
#endif
|
||||
|
||||
#ifndef __DBLIB_H
|
||||
#include "../db/dblib.h"
|
||||
#endif
|
||||
#ifndef __MGLIB_H
|
||||
#include "../mg/mglib.h"
|
||||
#endif
|
||||
|
||||
|
||||
class TMRP_array : public TObject
|
||||
{
|
||||
TAssoc_array _by_key;
|
||||
TPointer_array _by_idx;
|
||||
|
||||
void swap(long i, long j) { _by_idx.swap(int(i), int(j)); }
|
||||
|
||||
protected:
|
||||
TToken_string _key; // Token string di lavoro
|
||||
|
||||
virtual TSortable* new_obj(const TToken_string& key) const pure;
|
||||
TSortable* add_obj(const TToken_string& key);
|
||||
TSortable* find_obj(const TToken_string& key) const
|
||||
{ return (TSortable*)_by_key.objptr(key); }
|
||||
TSortable& find_obj(long n) const
|
||||
{ return (TSortable&)_by_idx[int(n)]; }
|
||||
|
||||
public:
|
||||
long items() const { return _by_key.items(); }
|
||||
void destroy();
|
||||
long sort();
|
||||
void add(TMRP_array &a, bool force=FALSE);
|
||||
|
||||
// I metodi add(), find() e operator[] devono essere dichiarati
|
||||
// dalle classi derivate e ritornare i tipi giusti tramite cast
|
||||
// TSortable* add(const char* key, bool create)
|
||||
// { return (TSortable*)add_obj(key); }
|
||||
// TSortable* find(const char* key) const
|
||||
// { return (TSortable*)find_obj(key); }
|
||||
// TSortable& operator[](long index) const
|
||||
// { return (TSortable&)*find_obj(index); }
|
||||
TMRP_array & operator=(const TMRP_array& a);
|
||||
|
||||
TMRP_array() { }
|
||||
TMRP_array(const TMRP_array& a);
|
||||
virtual ~TMRP_array() { }
|
||||
};
|
||||
|
||||
class TMRP_calendar : public TObject
|
||||
{
|
||||
static TString16 _days;
|
||||
static TToken_string _holidays;
|
||||
int _inizturno[8];
|
||||
int _lungturno[8];
|
||||
int _persturno[8];
|
||||
|
||||
TAssoc_array _exc_imp, _exc_lin;
|
||||
TString16 _codimp, _codlin;
|
||||
|
||||
@ -26,6 +80,17 @@ public:
|
||||
|
||||
int turni_max(const TDate& date)
|
||||
{ int mini, maxi; turni(date, mini, maxi); return maxi; }
|
||||
|
||||
// ore minime e massime ad una certa data
|
||||
int add_oremacchina(real & var,const TDate& date, bool max=FALSE);
|
||||
int add_oremacchina_max(real & var,const TDate& date);
|
||||
|
||||
int add_oreuomo(real & var,const TDate& date, bool max=FALSE);
|
||||
int add_oreuomo_max(real & var,const TDate& date);
|
||||
|
||||
TDate& next_working_day(TDate& from, int gap = 1);
|
||||
TDate& prev_working_day(TDate& from, int gap = 1)
|
||||
{ return next_working_day(from, -gap); }
|
||||
|
||||
int set_turni(const TDate& date, int mini, int maxi);
|
||||
|
||||
@ -53,7 +118,7 @@ class TCalendar_field : public TWindowed_field
|
||||
protected: // TWindowed_field
|
||||
virtual TField_window* create_window(int x, int y, int dx, int dy,
|
||||
WINDOW parent);
|
||||
public:
|
||||
public:
|
||||
void set_calendar(TMRP_calendar* cal, int year = 0);
|
||||
|
||||
TCalendar_field(TMask* m) : TWindowed_field(m) { }
|
||||
@ -62,12 +127,173 @@ public:
|
||||
|
||||
class TCalendar_mask : public TAutomask
|
||||
{
|
||||
TMRP_calendar _calendar;
|
||||
|
||||
protected:
|
||||
virtual TMask_field* parse_field(TScanner& scanner);
|
||||
// void make_profile_name(TFilename& f) const;
|
||||
|
||||
public:
|
||||
TMRP_calendar& calendar() { return _calendar; }
|
||||
// void save_profile();
|
||||
// void load_profile();
|
||||
|
||||
const TMRP_calendar& calendar() const { return _calendar; }
|
||||
void update_calendar(short calendar, short year, short plant = 0, short line = 0);
|
||||
|
||||
TCalendar_mask(const char* name, int num = 0);
|
||||
virtual ~TCalendar_mask() {};
|
||||
};
|
||||
|
||||
|
||||
class TMRP_time : public TSortable
|
||||
{
|
||||
static TAssoc_array _frate_indovino;
|
||||
|
||||
TString16 _imp, _lin;
|
||||
TDate _date;
|
||||
int _hour;
|
||||
|
||||
TMRP_calendar& calendario();
|
||||
void copy(const TMRP_time& t) { set(t._date, t._hour, t._imp, t._lin); }
|
||||
|
||||
public:
|
||||
static TMRP_calendar& get_calendar(const char* codimp=NULL,const char* ccodlin=NULL);
|
||||
|
||||
virtual int compare(const TSortable& s) const;
|
||||
|
||||
TMRP_time& add_time(int days, long hours = 0, bool macchina=TRUE);
|
||||
TMRP_time& sub_time(int days, long hours = 0, bool macchina=TRUE) { return add_time(-days, -hours,macchina); }
|
||||
|
||||
void set(const TDate& d, int h, const char* imp, const char* lin);
|
||||
TMRP_time& operator=(const TMRP_time& t) { copy(t); return *this; }
|
||||
|
||||
const TDate& date() const { return _date; }
|
||||
|
||||
TMRP_time();
|
||||
TMRP_time(const TDate& d, int h, const char* imp, const char* lin);
|
||||
TMRP_time(const TMRP_time& t) { copy(t); }
|
||||
virtual ~TMRP_time() { }
|
||||
};
|
||||
|
||||
class TMRP_config : public TConfig
|
||||
{
|
||||
protected:
|
||||
void set_inizio_turno(int t,int time);
|
||||
void set_durata_turno(int t,int time);
|
||||
|
||||
public:
|
||||
// **
|
||||
void set_inizio_turno(int t,int ore, int minuti);
|
||||
void set_durata_turno(int t,int ore, int minuti);
|
||||
void set_numpers_turno(int t, int pers) {set("NUMPERS", pers, "mr", TRUE, t);}
|
||||
void set_turni(int n) {set("NTURNI", n, "mr", TRUE);}
|
||||
void set_gestimpianti(bool gi) {set("GESTIMPIANTI", gi ? "X" : "", "mr", TRUE); }
|
||||
|
||||
// **
|
||||
int inizio_turno(int t);
|
||||
int durata_turno(int t);
|
||||
// **
|
||||
int ora_inizio_turno(int t);
|
||||
int min_inizio_turno(int t);
|
||||
int ore_durata_turno(int t);
|
||||
int min_durata_turno(int t);
|
||||
int num_turni() {return get_int("NTURNI", "mr");}
|
||||
int numpers_turno(int t);
|
||||
bool gestimpianti() {return get_bool("GESTIMPIANTI","mr"); }
|
||||
|
||||
TMRP_config() : TConfig(CONFIG_DITTA,"mr") {}
|
||||
virtual ~TMRP_config() {}
|
||||
};
|
||||
|
||||
class TUnita_produttiva : public TRectype
|
||||
{
|
||||
const char *erre1(int t); // campo durata e inizio turno
|
||||
const char *erre2(int t); // numero persone
|
||||
protected:
|
||||
void set_inizio_turno(int t,int time);
|
||||
void set_durata_turno(int t,int time);
|
||||
|
||||
public:
|
||||
const char * codice() const {return get("CODTAB");}
|
||||
const char * descr() const {return get("S0");}
|
||||
|
||||
int raw_numpers_turno(int t) ;
|
||||
// **
|
||||
void set_inizio_turno(int t,int ore, int minuti);
|
||||
void set_durata_turno(int t,int ore, int minuti);
|
||||
void set_numpers_turno(int t, int pers);
|
||||
|
||||
virtual int num_turni() {return get_int("I0");}
|
||||
virtual int inizio_turno(int t);
|
||||
virtual int durata_turno(int t);
|
||||
// **
|
||||
int ora_inizio_turno(int t);
|
||||
int min_inizio_turno(int t);
|
||||
int ore_durata_turno(int t);
|
||||
int min_durata_turno(int t);
|
||||
// numero di persone sul turno
|
||||
virtual int numpers_turno(int t) ;
|
||||
// flag di personale dedicato
|
||||
virtual bool personale_dedicato() const { return get_bool("B0"); }
|
||||
|
||||
virtual const char * codmagdep() const { return get("S7"); }
|
||||
const char * codmag() const ;
|
||||
const char * coddep() const ;
|
||||
|
||||
virtual TRectype & operator=(const TRectype& rec);
|
||||
|
||||
TUnita_produttiva(const TUnita_produttiva& rec) : TRectype (rec){}
|
||||
TUnita_produttiva(const TRectype& rec) : TRectype (rec){}
|
||||
TUnita_produttiva() : TRectype (LF_TAB){}
|
||||
virtual ~TUnita_produttiva() { }
|
||||
};
|
||||
|
||||
class TImpianto : public TUnita_produttiva
|
||||
{
|
||||
protected:
|
||||
TObject* dup() const { return new TImpianto(*this); }
|
||||
|
||||
public:
|
||||
virtual TRectype & operator=(const TRectype& rec);
|
||||
// **
|
||||
TImpianto(const char* cod = "") ;
|
||||
TImpianto(const TRectype& rec) : TUnita_produttiva (rec) {}
|
||||
TImpianto(const TImpianto& rec) : TUnita_produttiva (rec){}
|
||||
virtual ~TImpianto() { }
|
||||
};
|
||||
|
||||
class TLinea_prod : public TUnita_produttiva
|
||||
{
|
||||
protected:
|
||||
TObject* dup() const { return new TLinea_prod(*this); }
|
||||
public:
|
||||
TImpianto * get_impianto() const;
|
||||
// **
|
||||
const char * codimp() const;
|
||||
virtual const char * codmagdep() const ;
|
||||
bool to_check() const {return !get_bool("B9");} //
|
||||
int check_level() const {return !get_bool("I2");} //
|
||||
|
||||
// **
|
||||
virtual int num_turni() ;
|
||||
virtual int inizio_turno(int t);
|
||||
virtual int durata_turno(int t);
|
||||
virtual int numpers_turno(int t) ;
|
||||
|
||||
virtual TRectype & operator=(const TRectype& rec);
|
||||
|
||||
TLinea_prod(const char* cod = "") ;
|
||||
TLinea_prod(const TRectype& rec) : TUnita_produttiva (rec) {}
|
||||
TLinea_prod(const TLinea_prod& rec) : TUnita_produttiva (rec){}
|
||||
virtual ~TLinea_prod() { }
|
||||
};
|
||||
|
||||
TImpianto * get_impianto(const char * codice);
|
||||
TLinea_prod* get_linea(const char * codice);
|
||||
TCodgiac_livelli &livelli_giac();
|
||||
|
||||
void find_price(const TString &tipocv, const TString &codcv, const TString &codcatven,
|
||||
const char * tipocf, long codcf, const char * codice, const real & qta, real & price);
|
||||
|
||||
#endif
|
||||
|
57
mr/mrtbimp.h
@ -4,4 +4,61 @@
|
||||
#define F_CODICE 101
|
||||
#define F_DESC 102
|
||||
|
||||
#define F_TURNI 103
|
||||
#define F_PERSONE 104
|
||||
#define F_PERSONESPEC 105
|
||||
#define H_PERSONESPEC 106
|
||||
|
||||
#define F_T1HINIZIO 110
|
||||
#define F_T1MINIZIO 111
|
||||
#define F_T1HDURATA 112
|
||||
#define F_T1MDURATA 113
|
||||
#define F_T1NUMPERS 114
|
||||
#define F_T2HINIZIO 115
|
||||
#define F_T2MINIZIO 116
|
||||
#define F_T2HDURATA 117
|
||||
#define F_T2MDURATA 118
|
||||
#define F_T2NUMPERS 119
|
||||
#define F_T3HINIZIO 120
|
||||
#define F_T3MINIZIO 121
|
||||
#define F_T3HDURATA 122
|
||||
#define F_T3MDURATA 123
|
||||
#define F_T3NUMPERS 124
|
||||
#define F_T4HINIZIO 125
|
||||
#define F_T4MINIZIO 126
|
||||
#define F_T4HDURATA 127
|
||||
#define F_T4MDURATA 128
|
||||
#define F_T4NUMPERS 129
|
||||
#define F_T5HINIZIO 130
|
||||
#define F_T5MINIZIO 131
|
||||
#define F_T5HDURATA 132
|
||||
#define F_T5MDURATA 133
|
||||
#define F_T5NUMPERS 134
|
||||
#define F_T6HINIZIO 135
|
||||
#define F_T6MINIZIO 136
|
||||
#define F_T6HDURATA 137
|
||||
#define F_T6MDURATA 138
|
||||
#define F_T6NUMPERS 139
|
||||
#define F_T7HINIZIO 140
|
||||
#define F_T7MINIZIO 141
|
||||
#define F_T7HDURATA 142
|
||||
#define F_T7MDURATA 143
|
||||
#define F_T7NUMPERS 144
|
||||
#define F_T8HINIZIO 145
|
||||
#define F_T8MINIZIO 146
|
||||
#define F_T8HDURATA 147
|
||||
#define F_T8MDURATA 148
|
||||
#define F_T8NUMPERS 149
|
||||
#define F_CODMAG 160
|
||||
#define F_DESMAG 161
|
||||
#define F_CODDEP 162
|
||||
#define F_DESDEP 163
|
||||
|
||||
|
||||
|
||||
#define F_YEAR 201
|
||||
#define F_TYPE 202
|
||||
#define F_CALENDAR 203
|
||||
|
||||
|
||||
#endif
|
||||
|
477
mr/mrtbimp.uml
@ -1,6 +1,26 @@
|
||||
#include "mrtblnp.h"
|
||||
#include "mrtbimp.h"
|
||||
|
||||
TOOLBAR "" 0 19 80 3
|
||||
// gruppi turni "Minori o uguali a X"
|
||||
#define GL1 10
|
||||
#define GL2 11
|
||||
#define GL3 12
|
||||
#define GL4 13
|
||||
#define GL5 14
|
||||
#define GL6 15
|
||||
#define GL7 16
|
||||
#define GL8 17
|
||||
// gruppi turni "Maggiori di X"
|
||||
#define GM1 20
|
||||
#define GM2 21
|
||||
#define GM3 22
|
||||
#define GM4 23
|
||||
#define GM5 24
|
||||
#define GM6 25
|
||||
#define GM7 26
|
||||
#define GM8 27
|
||||
#define GPERS 30
|
||||
|
||||
TOOLBAR "" 0 -2 -1 -1
|
||||
#include <toolbar.h>
|
||||
ENDPAGE
|
||||
|
||||
@ -39,7 +59,458 @@ BEGIN
|
||||
OUTPUT F_CODICE CODTAB
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
|
||||
LISTBOX F_TURNI 3
|
||||
BEGIN
|
||||
PROMPT 2 7 "Numero turni "
|
||||
ITEM "0|"
|
||||
MESSAGE CLEAR,GL1@|CLEAR,GM1@
|
||||
ITEM "1|1"
|
||||
MESSAGE CLEAR,GM1@|ENABLE,GL1@
|
||||
ITEM "2|2"
|
||||
MESSAGE CLEAR,GM2@|ENABLE,GL2@
|
||||
ITEM "3|3"
|
||||
MESSAGE CLEAR,GM3@|ENABLE,GL3@
|
||||
ITEM "4|4"
|
||||
MESSAGE CLEAR,GM4@|ENABLE,GL4@
|
||||
ITEM "5|5"
|
||||
MESSAGE CLEAR,GM5@|ENABLE,GL5@
|
||||
ITEM "6|6"
|
||||
MESSAGE CLEAR,GM6@|ENABLE,GL6@
|
||||
ITEM "7|7"
|
||||
MESSAGE CLEAR,GM7@|ENABLE,GL7@
|
||||
ITEM "8|8"
|
||||
MESSAGE CLEAR,GM8@|ENABLE,GL8@
|
||||
FIELD I0
|
||||
END
|
||||
|
||||
BOOL F_PERSONESPEC
|
||||
BEGIN
|
||||
PROMPT 40 7 "Utilizza personale proprio"
|
||||
FIELD B0
|
||||
MESSAGE TRUE SHOW,GPERS@|ENABLE,F_PERSONE
|
||||
MESSAGE FALSE HIDE,GPERS@
|
||||
END
|
||||
|
||||
NUMBER F_PERSONE 3
|
||||
BEGIN
|
||||
PROMPT 26 8 "Persone su un turno "
|
||||
FIELD I1
|
||||
GROUP GPERS
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 8 "Ora inizio"
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 16 8 "Durata "
|
||||
END
|
||||
|
||||
NUMBER F_T1HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 3 9 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_T1MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 6 9 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T1HDURATA 2
|
||||
BEGIN
|
||||
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 16 9 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_T1MDURATA 2
|
||||
BEGIN
|
||||
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 19 9 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T1NUMPERS 3
|
||||
BEGIN
|
||||
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8 GPERS
|
||||
PROMPT 46 9 ""
|
||||
END
|
||||
|
||||
NUMBER F_T2HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 3 10 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_T2MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 6 10 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T2HDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 16 10 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_T2MDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 19 10 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T2NUMPERS 3
|
||||
BEGIN
|
||||
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8 GPERS
|
||||
PROMPT 46 10 ""
|
||||
END
|
||||
|
||||
NUMBER F_T3HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 3 11 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_T3MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 6 11 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T3HDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 16 11 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_T3MDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 19 11 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T3NUMPERS 3
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8 GPERS
|
||||
PROMPT 46 11 ""
|
||||
END
|
||||
|
||||
NUMBER F_T4HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 3 12 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T4MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 6 12 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T4HDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 16 12 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T4MDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 19 12 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T4NUMPERS 3
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8 GPERS
|
||||
PROMPT 46 12 ""
|
||||
END
|
||||
|
||||
NUMBER F_T5HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
|
||||
PROMPT 3 13 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T5MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
|
||||
PROMPT 6 13 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T5HDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
|
||||
PROMPT 16 13 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T5MDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
|
||||
PROMPT 19 13 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T5NUMPERS 3
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8 GPERS
|
||||
PROMPT 46 13 ""
|
||||
END
|
||||
|
||||
NUMBER F_T6HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
|
||||
PROMPT 3 14 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T6MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
|
||||
PROMPT 6 14 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T6HDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
|
||||
PROMPT 16 14 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T6MDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
|
||||
PROMPT 19 14 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T6NUMPERS 3
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8 GPERS
|
||||
PROMPT 46 14 ""
|
||||
END
|
||||
|
||||
NUMBER F_T7HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
|
||||
PROMPT 3 15 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T7MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
|
||||
PROMPT 6 15 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T7HDURATA 2
|
||||
BEGIN
|
||||
PROMPT 16 15 ""
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T7MDURATA 2
|
||||
BEGIN
|
||||
PROMPT 19 15 ":"
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T7NUMPERS 3
|
||||
BEGIN
|
||||
PROMPT 46 15 ""
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8 GPERS
|
||||
END
|
||||
|
||||
NUMBER F_T8HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
|
||||
PROMPT 3 16 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T8MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
|
||||
PROMPT 6 16 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T8HDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
|
||||
PROMPT 16 16 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T8MDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
|
||||
PROMPT 19 16 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T8NUMPERS 3
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8 GPERS
|
||||
PROMPT 46 16 ""
|
||||
END
|
||||
|
||||
|
||||
STRING F_CODMAG 3
|
||||
BEGIN
|
||||
FLAGS "U"
|
||||
PROMPT 2 18 "Magazzino "
|
||||
FIELD S7[1,3]
|
||||
USE MAG SELECT CODTAB[4,5]=""
|
||||
INPUT CODTAB F_CODMAG
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODMAG CODTAB[1,3]
|
||||
OUTPUT F_CODDEP CODTAB[4,5]
|
||||
OUTPUT F_DESMAG S0
|
||||
CHECKTYPE NORMAL
|
||||
MESSAGE EMPTY RESET,F_CODDEP|RESET,F_DESDEP
|
||||
MESSAGE ENABLE,F_CODDEP|ENABLE,F_DESDEP
|
||||
END
|
||||
|
||||
STRING F_DESMAG 50
|
||||
BEGIN
|
||||
FLAGS "U"
|
||||
PROMPT 20 18 ""
|
||||
USE MAG KEY 2
|
||||
INPUT S0 F_DESMAG
|
||||
COPY DISPLAY F_CODMAG
|
||||
COPY OUTPUT F_CODMAG
|
||||
END
|
||||
|
||||
|
||||
STRING F_CODDEP 2
|
||||
BEGIN
|
||||
FLAGS "U"
|
||||
PROMPT 2 19 "Deposito "
|
||||
FIELD S7[4,5]
|
||||
USE MAG // SELECT CODTAB[4,5]!=""
|
||||
INPUT CODTAB[1,3] F_CODMAG
|
||||
INPUT CODTAB[4,5] F_CODDEP
|
||||
DISPLAY "Cod.Mag." CODTAB[1,3]
|
||||
DISPLAY "Cod.Dep" CODTAB[4,5]
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODMAG CODTAB[1,3]
|
||||
OUTPUT F_CODDEP CODTAB[4,5]
|
||||
OUTPUT F_DESDEP S0
|
||||
CHECKTYPE NORMAL
|
||||
MESSAGE EMPTY RESET,F_DESDEP
|
||||
END
|
||||
|
||||
STRING F_DESDEP 50
|
||||
BEGIN
|
||||
FLAGS "U"
|
||||
PROMPT 20 19 ""
|
||||
USE MAG KEY 2
|
||||
INPUT S0 F_DESDEP
|
||||
COPY DISPLAY F_CODDEP
|
||||
COPY OUTPUT F_CODDEP
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Calendario" -1 -1 65 15
|
||||
|
53
mr/mrtblnp.h
@ -6,7 +6,58 @@
|
||||
|
||||
#define F_IMPIANTO 103
|
||||
#define F_DESCIMPIANTO 104
|
||||
#define F_PERSONE 105
|
||||
#define F_PERSONESPEC 105
|
||||
#define F_PERSONE 106
|
||||
|
||||
#define F_NO_CRP 107
|
||||
#define F_CRP_LEVEL 108
|
||||
|
||||
#define F_TURNI 109
|
||||
#define F_T1HINIZIO 110
|
||||
#define F_T1MINIZIO 111
|
||||
#define F_T1HDURATA 112
|
||||
#define F_T1MDURATA 113
|
||||
#define F_T1NUMPERS 114
|
||||
#define F_T2HINIZIO 115
|
||||
#define F_T2MINIZIO 116
|
||||
#define F_T2HDURATA 117
|
||||
#define F_T2MDURATA 118
|
||||
#define F_T2NUMPERS 119
|
||||
#define F_T3HINIZIO 120
|
||||
#define F_T3MINIZIO 121
|
||||
#define F_T3HDURATA 122
|
||||
#define F_T3MDURATA 123
|
||||
#define F_T3NUMPERS 124
|
||||
#define F_T4HINIZIO 125
|
||||
#define F_T4MINIZIO 126
|
||||
#define F_T4HDURATA 127
|
||||
#define F_T4MDURATA 128
|
||||
#define F_T4NUMPERS 129
|
||||
#define F_T5HINIZIO 130
|
||||
#define F_T5MINIZIO 131
|
||||
#define F_T5HDURATA 132
|
||||
#define F_T5MDURATA 133
|
||||
#define F_T5NUMPERS 134
|
||||
#define F_T6HINIZIO 135
|
||||
#define F_T6MINIZIO 136
|
||||
#define F_T6HDURATA 137
|
||||
#define F_T6MDURATA 138
|
||||
#define F_T6NUMPERS 139
|
||||
#define F_T7HINIZIO 140
|
||||
#define F_T7MINIZIO 141
|
||||
#define F_T7HDURATA 142
|
||||
#define F_T7MDURATA 143
|
||||
#define F_T7NUMPERS 144
|
||||
#define F_T8HINIZIO 145
|
||||
#define F_T8MINIZIO 146
|
||||
#define F_T8HDURATA 147
|
||||
#define F_T8MDURATA 148
|
||||
#define F_T8NUMPERS 149
|
||||
|
||||
#define F_CODMAG 160
|
||||
#define F_DESMAG 161
|
||||
#define F_CODDEP 162
|
||||
#define F_DESDEP 163
|
||||
|
||||
#define F_YEAR 201
|
||||
#define F_TYPE 202
|
||||
|
495
mr/mrtblnp.uml
@ -1,10 +1,30 @@
|
||||
#include "mrtblnp.h"
|
||||
|
||||
TOOLBAR "" 0 19 80 3
|
||||
// gruppi turni "Minori o uguali a X"
|
||||
#define GL1 10
|
||||
#define GL2 11
|
||||
#define GL3 12
|
||||
#define GL4 13
|
||||
#define GL5 14
|
||||
#define GL6 15
|
||||
#define GL7 16
|
||||
#define GL8 17
|
||||
// gruppi turni "Maggiori di X"
|
||||
#define GM1 20
|
||||
#define GM2 21
|
||||
#define GM3 22
|
||||
#define GM4 23
|
||||
#define GM5 24
|
||||
#define GM6 25
|
||||
#define GM7 26
|
||||
#define GM8 27
|
||||
#define GPERS 30
|
||||
|
||||
TOOLBAR "" 0 -2 -1 -1
|
||||
#include <toolbar.h>
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Linee di produzione" -1 -1 65 15
|
||||
PAGE "Linee di produzione" -1 -1 80 20
|
||||
|
||||
GROUPBOX DLG_NULL 78 5
|
||||
BEGIN
|
||||
@ -50,9 +70,9 @@ BEGIN
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_IMPIANTO CODTAB
|
||||
OUTPUT F_DESCIMPIANTO S0
|
||||
CHECKTYPE NORMAL
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD S6
|
||||
WARNING "Impianto assente"
|
||||
WARNING "E' necessario specificare un impianto"
|
||||
END
|
||||
|
||||
STRING F_DESCIMPIANTO 50
|
||||
@ -67,18 +87,473 @@ BEGIN
|
||||
WARNING "Impianto assente"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 78 4
|
||||
BOOL F_NO_CRP
|
||||
BEGIN
|
||||
PROMPT 1 6 ""
|
||||
END
|
||||
PROMPT 2 6 "Escludi dal Capacity Review "
|
||||
FIELD B9
|
||||
MESSAGE FALSE HIDE,F_CRP_LEVEL
|
||||
MESSAGE TRUE SHOW,F_CRP_LEVEL
|
||||
|
||||
END
|
||||
|
||||
LIST F_CRP_LEVEL 25
|
||||
BEGIN
|
||||
PROMPT 40 6 "Livello "
|
||||
ITEM "0|Master Schedule"
|
||||
FIELD I2
|
||||
END
|
||||
|
||||
LISTBOX F_TURNI 3
|
||||
BEGIN
|
||||
PROMPT 2 7 "Numero turni "
|
||||
ITEM "0|"
|
||||
MESSAGE CLEAR,GL1@|CLEAR,GM1@
|
||||
ITEM "1|1"
|
||||
MESSAGE CLEAR,GM1@|ENABLE,GL1@
|
||||
ITEM "2|2"
|
||||
MESSAGE CLEAR,GM2@|ENABLE,GL2@
|
||||
ITEM "3|3"
|
||||
MESSAGE CLEAR,GM3@|ENABLE,GL3@
|
||||
ITEM "4|4"
|
||||
MESSAGE CLEAR,GM4@|ENABLE,GL4@
|
||||
ITEM "5|5"
|
||||
MESSAGE CLEAR,GM5@|ENABLE,GL5@
|
||||
ITEM "6|6"
|
||||
MESSAGE CLEAR,GM6@|ENABLE,GL6@
|
||||
ITEM "7|7"
|
||||
MESSAGE CLEAR,GM7@|ENABLE,GL7@
|
||||
ITEM "8|8"
|
||||
MESSAGE CLEAR,GM8@|ENABLE,GL8@
|
||||
FIELD I0
|
||||
END
|
||||
|
||||
BOOL F_PERSONESPEC
|
||||
BEGIN
|
||||
PROMPT 40 7 "Utilizza personale specializzato"
|
||||
FIELD B0
|
||||
MESSAGE TRUE SHOW,GPERS@|ENABLE,F_PERSONE
|
||||
MESSAGE FALSE HIDE,GPERS@
|
||||
END
|
||||
|
||||
NUMBER F_PERSONE 3
|
||||
BEGIN
|
||||
PROMPT 2 7 "Persone "
|
||||
FLAGS "U"
|
||||
FIELD I0
|
||||
PROMPT 26 8 "Persone su un turno "
|
||||
FIELD I1
|
||||
GROUP GPERS
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 8 "Ora inizio"
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 16 8 "Durata "
|
||||
END
|
||||
|
||||
NUMBER F_T1HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 3 9 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_T1MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 6 9 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T1HDURATA 2
|
||||
BEGIN
|
||||
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 16 9 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_T1MDURATA 2
|
||||
BEGIN
|
||||
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 19 9 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T1NUMPERS 3
|
||||
BEGIN
|
||||
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8 GPERS
|
||||
PROMPT 46 9 ""
|
||||
END
|
||||
|
||||
NUMBER F_T2HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 3 10 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_T2MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 6 10 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T2HDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 16 10 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_T2MDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 19 10 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T2NUMPERS 3
|
||||
BEGIN
|
||||
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8 GPERS
|
||||
PROMPT 46 10 ""
|
||||
END
|
||||
|
||||
NUMBER F_T3HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 3 11 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_T3MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 6 11 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T3HDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 16 11 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_T3MDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 19 11 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T3NUMPERS 3
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8 GPERS
|
||||
PROMPT 46 11 ""
|
||||
END
|
||||
|
||||
NUMBER F_T4HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 3 12 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T4MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 6 12 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T4HDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 16 12 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T4MDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
|
||||
PROMPT 19 12 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T4NUMPERS 3
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8 GPERS
|
||||
PROMPT 46 12 ""
|
||||
END
|
||||
|
||||
NUMBER F_T5HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
|
||||
PROMPT 3 13 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T5MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
|
||||
PROMPT 6 13 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T5HDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
|
||||
PROMPT 16 13 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T5MDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
|
||||
PROMPT 19 13 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T5NUMPERS 3
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8 GPERS
|
||||
PROMPT 46 13 ""
|
||||
END
|
||||
|
||||
NUMBER F_T6HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
|
||||
PROMPT 3 14 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T6MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
|
||||
PROMPT 6 14 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T6HDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
|
||||
PROMPT 16 14 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T6MDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
|
||||
PROMPT 19 14 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T6NUMPERS 3
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8 GPERS
|
||||
PROMPT 46 14 ""
|
||||
END
|
||||
|
||||
NUMBER F_T7HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
|
||||
PROMPT 3 15 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T7MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
|
||||
PROMPT 6 15 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T7HDURATA 2
|
||||
BEGIN
|
||||
PROMPT 16 15 ""
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T7MDURATA 2
|
||||
BEGIN
|
||||
PROMPT 19 15 ":"
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T7NUMPERS 3
|
||||
BEGIN
|
||||
PROMPT 46 15 ""
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8 GPERS
|
||||
END
|
||||
|
||||
NUMBER F_T8HINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
|
||||
PROMPT 3 16 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T8MINIZIO 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
|
||||
PROMPT 6 16 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T8HDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
|
||||
PROMPT 16 16 ""
|
||||
NUM_EXPR {(#THIS_FIELD <= 23)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T8MDURATA 2
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
|
||||
PROMPT 19 16 ":"
|
||||
NUM_EXPR {(#THIS_FIELD <= 59)}
|
||||
WARNING "Ora non valida"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
NUMBER F_T8NUMPERS 3
|
||||
BEGIN
|
||||
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8 GPERS
|
||||
PROMPT 46 16 ""
|
||||
END
|
||||
|
||||
|
||||
|
||||
STRING F_CODMAG 3
|
||||
BEGIN
|
||||
FLAGS "U"
|
||||
PROMPT 2 18 "Magazzino "
|
||||
FIELD S7[1,3]
|
||||
USE MAG SELECT CODTAB[4,5]=""
|
||||
INPUT CODTAB F_CODMAG
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODMAG CODTAB[1,3]
|
||||
OUTPUT F_CODDEP CODTAB[4,5]
|
||||
OUTPUT F_DESMAG S0
|
||||
CHECKTYPE NORMAL
|
||||
MESSAGE EMPTY RESET,F_CODDEP|RESET,F_DESDEP
|
||||
MESSAGE ENABLE,F_CODDEP|ENABLE,F_DESDEP
|
||||
END
|
||||
|
||||
STRING F_DESMAG 50
|
||||
BEGIN
|
||||
FLAGS "U"
|
||||
PROMPT 20 18 ""
|
||||
USE MAG KEY 2
|
||||
INPUT S0 F_DESMAG
|
||||
COPY DISPLAY F_CODMAG
|
||||
COPY OUTPUT F_CODMAG
|
||||
END
|
||||
|
||||
|
||||
STRING F_CODDEP 2
|
||||
BEGIN
|
||||
FLAGS "U"
|
||||
PROMPT 2 19 "Deposito "
|
||||
FIELD S7[4,5]
|
||||
USE MAG // SELECT CODTAB[4,5]!=""
|
||||
INPUT CODTAB[1,3] F_CODMAG
|
||||
INPUT CODTAB[4,5] F_CODDEP
|
||||
DISPLAY "Cod.Mag." CODTAB[1,3]
|
||||
DISPLAY "Cod.Dep" CODTAB[4,5]
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODMAG CODTAB[1,3]
|
||||
OUTPUT F_CODDEP CODTAB[4,5]
|
||||
OUTPUT F_DESDEP S0
|
||||
CHECKTYPE NORMAL
|
||||
MESSAGE EMPTY RESET,F_DESDEP
|
||||
END
|
||||
|
||||
STRING F_DESDEP 50
|
||||
BEGIN
|
||||
FLAGS "U"
|
||||
PROMPT 20 19 ""
|
||||
USE MAG KEY 2
|
||||
INPUT S0 F_DESDEP
|
||||
COPY DISPLAY F_CODDEP
|
||||
COPY OUTPUT F_CODDEP
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Calendario" -1 -1 65 15
|
||||
|
BIN
mr/selordf.bmp
Executable file
After Width: | Height: | Size: 958 B |
BIN
mr/selordp.bmp
Executable file
After Width: | Height: | Size: 958 B |