Patch level : 10.0 no patch

Files correlati     : ci0.exe CI2.EXE
Ricompilazione Demo : [ ]
Commento            :


Modulo rilevazione ore step 2


git-svn-id: svn://10.65.10.50/branches/R_10_00@21137 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2010-11-16 00:17:10 +00:00
parent f7ddf31bce
commit 1da14e1f10
9 changed files with 326 additions and 374 deletions

View File

@ -173,12 +173,11 @@ void TDef_risoatt_msk::riempi_sheet()
case 'A': codice = get(F_CODATT); break; case 'A': codice = get(F_CODATT); break;
default: break; default: break;
} }
get_anal_fields(codcosto, codcms, codfase); get_anal_fields(codcosto, codcms, codfase);
TString query; TString query;
query << "USE " << LF_RILORE << "\n" ; query << "USE " << LF_RILORE << " KEY 2\n" ;
TString select; TString select;
if (risoatt.full()) if (risoatt.full())
@ -361,6 +360,7 @@ void TDef_risoatt_msk::registra()
{ {
TRilevamento_ore rilroa; TRilevamento_ore rilroa;
TSheet_field& sheet = sfield(F_SHEET); TSheet_field& sheet = sfield(F_SHEET);
int err = NOERR;
FOR_EACH_SHEET_ROW(sheet, r, row) FOR_EACH_SHEET_ROW(sheet, r, row)
{ {
@ -384,9 +384,11 @@ void TDef_risoatt_msk::registra()
rilroa.read('D', id); rilroa.read('D', id);
if (qtaore == 0) if (qtaore == 0)
rilroa.remove(); err = rilroa.remove();
else else
{ {
rilroa.put(RILORE_TIPO, "D");
rilroa.put(RILORE_ID, id);
rilroa.put(RILORE_ANNO, anno); rilroa.put(RILORE_ANNO, anno);
rilroa.put(RILORE_MESE, mese); rilroa.put(RILORE_MESE, mese);
rilroa.put(RILORE_GIORNO, giorno); rilroa.put(RILORE_GIORNO, giorno);
@ -398,13 +400,19 @@ void TDef_risoatt_msk::registra()
rilroa.put(RILORE_CODFASE, codfase); rilroa.put(RILORE_CODFASE, codfase);
rilroa.put(RILORE_QTAORE, qtaore); rilroa.put(RILORE_QTAORE, qtaore);
rilroa.put(RILORE_COSTO, costo); rilroa.put(RILORE_COSTO, costo);
rilroa.put(RILORE_ID, id); err = rilroa.rewrite_write();
rilroa.rewrite_write();
} }
if (err != NOERR)
break;
} }
if (err == NOERR)
{
sheet.destroy(); sheet.destroy();
riempi_sheet(); riempi_sheet();
} }
else
error_box(FR("Errore %d in scrittura"), err);
}
//ON_FIELD_EVENT: metodo che gestisce gli eventi sui vari campi della maschera //ON_FIELD_EVENT: metodo che gestisce gli eventi sui vari campi della maschera
bool TDef_risoatt_msk::on_field_event(TOperable_field& f, TField_event e, long jolly) bool TDef_risoatt_msk::on_field_event(TOperable_field& f, TField_event e, long jolly)
@ -674,7 +682,6 @@ TDef_risoatt_msk::TDef_risoatt_msk()
if (_dett == "A") if (_dett == "A")
{ {
field(F_ANNO).update_flags("A", true);
reset(F_ANNO); reset(F_ANNO);
disable(F_ANNO); disable(F_ANNO);
reset(F_MESE); reset(F_MESE);
@ -683,9 +690,12 @@ TDef_risoatt_msk::TDef_risoatt_msk()
else else
if (_dett == "M") if (_dett == "M")
{ {
field(F_ANNO).update_flags("A", true);
reset(F_MESE); reset(F_MESE);
disable(F_MESE); disable(F_MESE);
} }
else
field(F_ANNO).update_flags("A", true);
} }
//////////////////////////////////////// ////////////////////////////////////////

View File

@ -40,7 +40,6 @@ END
NUMBER F_ANNO 4 NUMBER F_ANNO 4
BEGIN BEGIN
PROMPT 2 1 "Anno " PROMPT 2 1 "Anno "
FLAGS "A"
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END

View File

@ -61,11 +61,10 @@ const real TRilevamento_prev_msk::proponi_costo(const TMask& msk)
case 'A': codice = msk.get(S_CODATT); break; case 'A': codice = msk.get(S_CODATT); break;
default : break; default : break;
} }
const int anno = msk.get_date(S_DADATA).year(); const TDate dal = msk.get_date(S_DADATA);
TString4 mese; mese.format("%02d", msk.get_date(S_DADATA).month());
const TString4 tpora = msk.get(S_TPORA); const TString4 tpora = msk.get(S_TPORA);
const TRisoatt_key chiave(tipo, codice, anno, mese, tpora); const TRisoatt_key chiave(tipo, codice, dal, tpora);
TModule_table roa("&ROA"); TModule_table roa("&ROA");
roa.put("CODTAB", chiave); roa.put("CODTAB", chiave);
int err = roa.read(); int err = roa.read();
@ -74,6 +73,8 @@ const real TRilevamento_prev_msk::proponi_costo(const TMask& msk)
costo = roa.get_real("R1"); costo = roa.get_real("R1");
else else
{ {
const int anno = dal.year();
TString4 mese; mese.format("%02d", dal.month());
TString8 tmp; tmp << anno << mese; TString8 tmp; tmp << anno << mese;
const long anme = atol(tmp); const long anme = atol(tmp);
TString query; TString query;
@ -105,11 +106,9 @@ const real TRilevamento_prev_msk::proponi_costo(TToken_string& riga)
TString cazzone = riga.get(sheet.cid2index(S_DADATA)); TString cazzone = riga.get(sheet.cid2index(S_DADATA));
const TDate dadata(riga.get(sheet.cid2index(S_DADATA))); const TDate dadata(riga.get(sheet.cid2index(S_DADATA)));
const int anno = dadata.year();
TString4 mese; mese.format("%02d", dadata.month());
const TString4 tpora = riga.get(sheet.cid2index(S_TPORA)); const TString4 tpora = riga.get(sheet.cid2index(S_TPORA));
const TRisoatt_key chiave(tipo, codice, anno, mese, tpora); const TRisoatt_key chiave(tipo, codice, dadata, tpora);
TModule_table roa("&ROA"); TModule_table roa("&ROA");
roa.put("CODTAB", chiave); roa.put("CODTAB", chiave);
int err = roa.read(); int err = roa.read();
@ -118,6 +117,8 @@ const real TRilevamento_prev_msk::proponi_costo(TToken_string& riga)
costo = roa.get_real("R1"); costo = roa.get_real("R1");
else else
{ {
const int anno = dadata.year();
TString4 mese; mese.format("%02d", dadata.month());
TString8 tmp; tmp << anno << mese; TString8 tmp; tmp << anno << mese;
const long anme = atol(tmp); const long anme = atol(tmp);
TString query; TString query;
@ -256,7 +257,7 @@ void TRilevamento_prev_msk::carica_default()
get_anal_fields(codcosto, codcms, codfase); get_anal_fields(codcosto, codcms, codfase);
TString query; TString query;
query << "USE " << LF_RILORE << "\n"; query << "USE " << LF_RILORE << " KEY 2\n";
TString select; TString select;
if (risoatt.full()) if (risoatt.full())
@ -324,25 +325,25 @@ void TRilevamento_prev_msk::carica_default()
{ {
TRilevamento_ore rilore(def.cursor()->curr()); TRilevamento_ore rilore(def.cursor()->curr());
TToken_string& riga = sheet.row(-1); TToken_string& riga = sheet.row(-1);
riga.add(rilore.tipora(), sheet.cid2index(S_RISOATT)); const char tipo = rilore.get(RILORE_TIPORA)[0];
switch(rilore.tipora()) TString16 cod = rilore.get(RILORE_CODICE);
riga.add(tipo), sheet.cid2index(S_RISOATT);
switch (tipo)
{ {
case 'R': riga.add(rilore.codice(), sheet.cid2index(S_CODRIS)); break; case 'R': riga.add(cod, sheet.cid2index(S_CODRIS)); break;
case 'A': riga.add(rilore.codice(), sheet.cid2index(S_CODATT)); break; case 'A': riga.add(cod, sheet.cid2index(S_CODATT)); break;
default : break; default : break;
} }
riga.add(rilore.dadata(), sheet.cid2index(S_DADATA)); riga.add(rilore.get(RILORE_TPORA), sheet.cid2index(S_TPORA));
riga.add(rilore.adata(), sheet.cid2index(S_ADATA));
riga.add(rilore.tpora(), sheet.cid2index(S_TPORA));
riga.add(da.string(), sheet.cid2index(S_DADATA)); riga.add(da.string(), sheet.cid2index(S_DADATA));
riga.add(a.string(), sheet.cid2index(S_ADATA)); riga.add(a.string(), sheet.cid2index(S_ADATA));
put_row_anal_fields(riga, rilore.codcosto(), rilore.codcms(), rilore.codfase()); put_row_anal_fields(riga, rilore.get(RILORE_CODCOSTO), rilore.get(RILORE_CODCMS), rilore.get(RILORE_CODFASE));
riga.add(rilore.qtaore(), sheet.cid2index(S_QTAORE)); riga.add(rilore.get(RILORE_QTAORE), sheet.cid2index(S_QTAORE));
riga.add(proponi_costo(riga).string(), sheet.cid2index(S_COSTO)); riga.add(proponi_costo(riga).string(), sheet.cid2index(S_COSTO));
sheet.check_row(sheet.items() - 1); sheet.check_row(sheet.items() - 1);
} }
sheet.force_update(); sheet.force_update();
} }
//RIEMPI_SHEET: metodo che riempie lo sheet in base ai campi chiave //RIEMPI_SHEET: metodo che riempie lo sheet in base ai campi chiave
@ -379,7 +380,7 @@ void TRilevamento_prev_msk::riempi_sheet()
get_anal_fields(codcosto, codcms, codfase); get_anal_fields(codcosto, codcms, codfase);
TString query; TString query;
query << "USE " << LF_RILORE << "\n" ; query << "USE " << LF_RILORE << " KEY 2\n" ;
TString select; TString select;
if (risoatt.full()) if (risoatt.full())
@ -431,21 +432,23 @@ void TRilevamento_prev_msk::riempi_sheet()
{ {
TRilevamento_ore rilore(def.cursor()->curr()); TRilevamento_ore rilore(def.cursor()->curr());
TToken_string& riga = sheet.row(-1); TToken_string& riga = sheet.row(-1);
riga.add(rilore.tipora(), sheet.cid2index(S_RISOATT)); const char tipo = rilore.get(RILORE_TIPORA)[0];
switch(rilore.tipora()) TString16 cod = rilore.get(RILORE_CODICE);
riga.add(tipo, sheet.cid2index(S_RISOATT));
switch(tipo)
{ {
case 'R': riga.add(rilore.codice(), sheet.cid2index(S_CODRIS)); break; case 'R': riga.add(cod, sheet.cid2index(S_CODRIS)); break;
case 'A': riga.add(rilore.codice(), sheet.cid2index(S_CODATT)); break; case 'A': riga.add(cod, sheet.cid2index(S_CODATT)); break;
default : break; default : break;
} }
riga.add(rilore.dadata(), sheet.cid2index(S_DADATA)); riga.add(rilore.get(RILORE_DADATA), sheet.cid2index(S_DADATA));
riga.add(rilore.adata(), sheet.cid2index(S_ADATA)); riga.add(rilore.get(RILORE_ADATA), sheet.cid2index(S_ADATA));
riga.add(rilore.tpora(), sheet.cid2index(S_TPORA)); riga.add(rilore.get(RILORE_TPORA), sheet.cid2index(S_TPORA));
put_row_anal_fields(riga, rilore.codcosto(), rilore.codcms(), rilore.codfase()); put_row_anal_fields(riga, rilore.get(RILORE_CODCOSTO), rilore.get(RILORE_CODCMS), rilore.get(RILORE_CODFASE));
riga.add(rilore.dadata(), sheet.cid2index(S_DADATA)); riga.add(rilore.get(RILORE_QTAORE), sheet.cid2index(S_QTAORE));
riga.add(rilore.adata(), sheet.cid2index(S_ADATA)); riga.add(rilore.get(RILORE_COSTO), sheet.cid2index(S_COSTO));
riga.add(rilore.qtaore(), sheet.cid2index(S_QTAORE)); riga.add(rilore.get(RILORE_ID), sheet.cid2index(S_ID));
riga.add(rilore.costo().string(), sheet.cid2index(S_COSTO));
sheet.check_row(sheet.items() - 1); sheet.check_row(sheet.items() - 1);
} }
sheet.force_update(); sheet.force_update();
@ -493,8 +496,8 @@ void TRilevamento_prev_msk::nuova_riga()
msk.enable(S_CODRIS); msk.enable(S_CODRIS);
if (tutti || tipo == "A") if (tutti || tipo == "A")
msk.enable(S_CODATT); msk.enable(S_CODATT);
msk.enable(S_DADATA, dadata.empty()); // msk.enable(S_DADATA, dadata.empty());
msk.enable(S_ADATA, adata.empty()); // msk.enable(S_ADATA, adata.empty());
msk.enable(S_TPORA, tpora.empty()); msk.enable(S_TPORA, tpora.empty());
if (_scdc_sid >= 0) if (_scdc_sid >= 0)
for ( short id = _scdc_sid; id <= _scdc_lid; id++) for ( short id = _scdc_sid; id <= _scdc_lid; id++)
@ -552,6 +555,7 @@ void TRilevamento_prev_msk::registra()
{ {
TRilevamento_ore rilroa; TRilevamento_ore rilroa;
TSheet_field& sheet = sfield(F_SHEET); TSheet_field& sheet = sfield(F_SHEET);
int err = NOERR;
FOR_EACH_SHEET_ROW(sheet, r, row) FOR_EACH_SHEET_ROW(sheet, r, row)
{ {
@ -561,6 +565,7 @@ void TRilevamento_prev_msk::registra()
const TDate& dadata = riga.get(sheet.cid2index(S_DADATA)); const TDate& dadata = riga.get(sheet.cid2index(S_DADATA));
const TDate& adata = riga.get(sheet.cid2index(S_ADATA)); const TDate& adata = riga.get(sheet.cid2index(S_ADATA));
const TString4 tpora = riga.get(sheet.cid2index(S_TPORA)); const TString4 tpora = riga.get(sheet.cid2index(S_TPORA));
const long id = riga.get_long(sheet.cid2index(S_ID));
TString80 codcosto; TString80 codcosto;
TString80 codcms; TString80 codcms;
TString80 codfase; TString80 codfase;
@ -569,21 +574,39 @@ void TRilevamento_prev_msk::registra()
const real costo(tmp); const real costo(tmp);
get_row_anal_fields(riga, codcosto, codcms, codfase); get_row_anal_fields(riga, codcosto, codcms, codfase);
rilroa.read('P', id);
rilroa.read('P', dadata.year(), dadata.month(), dadata.day(), tipora, codice, tpora, codcosto, codcms, codfase);
if(qtaore == 0) if(qtaore == 0)
rilroa.remove(); err = rilroa.remove();
else else
{
rilroa.set_dadata(dadata);
rilroa.set_adata(adata);
rilroa.set_qtaore(qtaore);
rilroa.set_costo(costo);
int err = rilroa.rewrite_write(); {
rilroa.put(RILORE_TIPO, "P");
rilroa.put(RILORE_ID, id);
rilroa.put(RILORE_ANNO, dadata.year());
rilroa.put(RILORE_MESE, dadata.month());
rilroa.put(RILORE_GIORNO, dadata.day());
rilroa.put(RILORE_TIPORA, tipora);
rilroa.put(RILORE_CODICE, codice);
rilroa.put(RILORE_TPORA, tpora);
rilroa.put(RILORE_CODCOSTO, codcosto);
rilroa.put(RILORE_CODCMS, codcms);
rilroa.put(RILORE_CODFASE, codfase);
rilroa.put(RILORE_DADATA, dadata);
rilroa.put(RILORE_ADATA, adata);
rilroa.put(RILORE_QTAORE, qtaore);
rilroa.put(RILORE_COSTO, costo);
err = rilroa.rewrite_write();
} }
if (err != NOERR)
break;
} }
if (err == NOERR)
{
sheet.destroy();
riempi_sheet();
}
else
error_box(FR("Errore %d in scrittura"), err);
} }
//ON_FIELD_EVENT: metodo che gestisce gli eventi sui vari campi della maschera //ON_FIELD_EVENT: metodo che gestisce gli eventi sui vari campi della maschera

View File

@ -38,3 +38,4 @@
#define S_CDC12 117 #define S_CDC12 117
#define S_QTAORE 118 #define S_QTAORE 118
#define S_COSTO 119 #define S_COSTO 119
#define S_ID 121

View File

@ -138,14 +138,15 @@ BEGIN
ITEM "Qta\nOre@5" ITEM "Qta\nOre@5"
ITEM "Costo@10" ITEM "Costo@10"
ITEM "Descrizione@50" ITEM "Descrizione@50"
ITEM "ID@8"
END END
ENDPAGE ENDPAGE
ENDMASK ENDMASK
PAGE "Riga preventivo" -1 -1 78 13 PAGE "Riga preventivo" -1 -1 78 14
GROUPBOX DLG_NULL 76 12 GROUPBOX DLG_NULL 76 1
BEGIN BEGIN
PROMPT 1 1 "@bRisorsa - Attrezzatura" PROMPT 1 1 "@bRisorsa - Attrezzatura"
END END
@ -308,6 +309,12 @@ BEGIN
PROMPT 30 11 "Prezzo " PROMPT 30 11 "Prezzo "
END END
NUMBER S_ID 8
BEGIN
PROMPT 2 12 "ID "
FLAGS "D"
END
ENDPAGE ENDPAGE
TOOLBAR "" 0 0 0 2 TOOLBAR "" 0 0 0 2

View File

@ -31,7 +31,14 @@ class TRilevamento_cons_msk : public TAutomask
short _sfase_sid, _sfase_lid; short _sfase_sid, _sfase_lid;
char _edit_mode; char _edit_mode;
TDate _datasel; TDate _datasel;
TString _dett;
int _anno;
int _mese;
int _giorno; int _giorno;
int _first_ex;
int _n_ex;
int _es_array[32];
TEsercizi_contabili _es;
protected: protected:
const real proponi_costo(TToken_string& riga); const real proponi_costo(TToken_string& riga);
@ -39,13 +46,13 @@ protected:
void get_row_anal_fields(TToken_string & row, TString & cdc, TString & cms, TString & fase); void get_row_anal_fields(TToken_string & row, TString & cdc, TString & cms, TString & fase);
void put_row_anal_fields(TToken_string & row, const TString & cdc, const TString & cms, const TString & fase); void put_row_anal_fields(TToken_string & row, const TString & cdc, const TString & cms, const TString & fase);
void carica_default(); void carica_default();
void update_day();
void riempi_sheet(); void riempi_sheet();
void riempi_calendario(const TString & query, const int anno, const int mese); void riempi_calendario(const TString & query);
void riempi_risoatt(int giorno); void riempi_risoatt();
void azzera_tutto(); void azzera_tutto();
void registra(); void registra();
virtual void notify_focus_field(short id);
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public: public:
@ -65,18 +72,17 @@ const real TRilevamento_cons_msk::proponi_costo(TToken_string& riga)
default : break; default : break;
} }
const int anno = get_int(F_ANNO); const TDate dal(1, _mese, _anno);
const TString4 mese = get(F_MESE);
const TString4 tpora = riga.get(sheet.cid2index(S_TPORA)); const TString4 tpora = riga.get(sheet.cid2index(S_TPORA));
const TRisoatt_key chiave(tipo, codice, anno, mese, tpora); const TRisoatt_key chiave(tipo, codice, dal, tpora);
const TRectype & roa = cache().get("&ROA", chiave); const TRectype & roa = cache().get("&ROA", chiave);
if(!roa.empty()) if(!roa.empty())
costo = roa.get_real("R1"); costo = roa.get_real("R1");
else else
{ {
TString8 tmp; tmp << anno << mese; TString8 tmp; tmp << _anno << _mese;
const long anme = atol(tmp); const long anme = atol(tmp);
TString query; TString query;
query << "USE &ROA\n" query << "USE &ROA\n"
@ -193,9 +199,7 @@ void TRilevamento_cons_msk::put_row_anal_fields(TToken_string & row, const TStri
void TRilevamento_cons_msk::carica_default() void TRilevamento_cons_msk::carica_default()
{ {
//leggo dalla maschera i campi chiave di ricerca //leggo dalla maschera i campi chiave di ricerca
const int anno = get_int(F_ANNO);
const TString4 risoatt = get(F_RISOATT) == "T" ? "" : get(F_RISOATT); const TString4 risoatt = get(F_RISOATT) == "T" ? "" : get(F_RISOATT);
const int mese = get_int(F_MESE);
const TString4 tpora = get(F_TPORA); const TString4 tpora = get(F_TPORA);
TString80 codcosto; TString80 codcosto;
TString80 codcms; TString80 codcms;
@ -212,7 +216,7 @@ void TRilevamento_cons_msk::carica_default()
} }
get_anal_fields(codcosto, codcms, codfase); get_anal_fields(codcosto, codcms, codfase);
query << "USE " << LF_RILORE << "\n" ; query << "USE " << LF_RILORE << " KEY 2\n" ;
if (risoatt.full()) if (risoatt.full())
select << "(" << RILORE_TIPORA << "==\"" << risoatt << "\")"; select << "(" << RILORE_TIPORA << "==\"" << risoatt << "\")";
if (codice.full()) if (codice.full())
@ -245,33 +249,75 @@ void TRilevamento_cons_msk::carica_default()
TString fromto = RILORE_TIPO "=\"D\" "; TString fromto = RILORE_TIPO "=\"D\" ";
if (anno > 0) if (_anno > 0)
{ {
fromto << " " << RILORE_ANNO << "=" << anno << " "; fromto << " " << RILORE_ANNO << "=" << _anno << " ";
if (mese > 0) if (_mese > 0)
fromto << RILORE_MESE << "=" << mese << " "; fromto << RILORE_MESE << "=" << _mese << " ";
} }
riempi_calendario(query, anno, mese); riempi_calendario(query);
} }
//RIEMPI_CALENDARIO: coloro le celle dello sheet calendario secondo le festività e i giorni occupati //RIEMPI_CALENDARIO: coloro le celle dello sheet calendario secondo le festività e i giorni occupati
void TRilevamento_cons_msk::riempi_calendario(const TString & query, const int anno, const int mese) void TRilevamento_cons_msk::riempi_calendario(const TString & query)
{ {
TSheet_field& calendario = sfield(F_CALENDARIO); TSheet_field& calendario = sfield(F_CALENDARIO);
calendario.destroy(); if (_dett == "A")
sfield(F_SHEET).destroy(); {
TBit_array full_years;
TToken_string & row = calendario.row(-1);
TDate d(1, mese, anno); d.set_end_month();
const int end_month = d.day();
const short last_id = DAY2ID(end_month);
TBit_array fulldays;
TISAM_recordset recset(query); TISAM_recordset recset(query);
//abilito per default tutte le colonne del calendario for (bool ok = recset.move_first(); ok; ok = recset.move_next())
for(short id = C_1; id <= C_31; id++) {
calendario.enable_column(calendario.cid2index(id), id <= last_id ? true : false); const int anno = recset.get(RILORE_ANNO).as_int();
full_years.set(anno);
}
for (int i = 0; i < _n_ex; i++)
{
TToken_string & row = calendario.row(i);
if (full_years[_es_array[i]])
{
if (_edit_mode)
calendario.set_back_and_fore_color(COLOR_DKBLUE, COLOR_DKBLUE, i, 0); // coloro di blu le date con registrazioni
}
row.add(_es_array[i]);
}
}
else
if (_dett == "M")
{
TBit_array full_months;
TISAM_recordset recset(query);
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
const int mese = recset.get(RILORE_MESE).as_int();
full_months.set(mese);
}
for (int i = 0; i < 12; i++)
{
TToken_string & row = calendario.row(i);
if (full_months[i])
{
if (_edit_mode)
calendario.set_back_and_fore_color(COLOR_DKBLUE, COLOR_DKBLUE, i, 0); // coloro di blu le date con registrazioni
}
row.add(itom(i + 1));
}
}
else
if (_dett == "G")
{
TDate d(1, _mese, _anno); d.set_end_month();
const int end_month = d.day();
TBit_array fulldays;
TISAM_recordset recset(query);
//scorro il recordset, aggiungo una riga allo sheet per ogni chiave analitica che trovo e coloro di blu //scorro il recordset, aggiungo una riga allo sheet per ogni chiave analitica che trovo e coloro di blu
//tutte le celle che corrispondono a una data interessata da qualcosa //tutte le celle che corrispondono a una data interessata da qualcosa
@ -282,24 +328,25 @@ void TRilevamento_cons_msk::riempi_calendario(const TString & query, const int a
fulldays.set(day); fulldays.set(day);
} }
for(short id = C_1; id <= last_id; id++) for(int i = 0; i < end_month; i++)
{ {
const int column = calendario.cid2index(id); TToken_string & row = calendario.row(i);
if (fulldays[ID2DAY(id)]) if (fulldays[i])
{ {
if (_edit_mode) if (_edit_mode)
calendario.set_back_and_fore_color(COLOR_DKBLUE, COLOR_DKBLUE, 0, column); // coloro di blu le date con registrazioni calendario.set_back_and_fore_color(COLOR_DKBLUE, COLOR_DKBLUE, i, 0); // coloro di blu le date con registrazioni
} }
else else
if (TDate(ID2DAY(id), mese, anno).is_holiday()) if (TDate(i, _mese, _anno).is_holiday())
calendario.set_back_and_fore_color(COLOR_DKRED, COLOR_DKRED, 0, column); // coloro di rosso le festività calendario.set_back_and_fore_color(COLOR_DKRED, COLOR_DKRED, i, 0); // coloro di rosso le festività
row.add(' ', column); row.add(i + 1);
}
} }
calendario.force_update(); calendario.force_update();
} }
void TRilevamento_cons_msk::riempi_risoatt(int giorno) void TRilevamento_cons_msk::riempi_risoatt()
{ {
TSheet_field& sheet = sfield(F_SHEET); TSheet_field& sheet = sfield(F_SHEET);
@ -308,9 +355,7 @@ void TRilevamento_cons_msk::riempi_risoatt(int giorno)
sheet.destroy(); sheet.destroy();
//leggo dalla maschera i campi chiave di ricerca //leggo dalla maschera i campi chiave di ricerca
const int anno = get_int(F_ANNO);
const TString4 risoatt = get(F_RISOATT) == "T" ? "" : get(F_RISOATT); const TString4 risoatt = get(F_RISOATT) == "T" ? "" : get(F_RISOATT);
const int mese = get_int(F_MESE);
const TString4 tpora = get(F_TPORA); const TString4 tpora = get(F_TPORA);
TString80 codcosto; TString80 codcosto;
TString80 codcms; TString80 codcms;
@ -328,7 +373,7 @@ void TRilevamento_cons_msk::riempi_risoatt(int giorno)
get_anal_fields(codcosto, codcms, codfase); get_anal_fields(codcosto, codcms, codfase);
//preparo la query //preparo la query
query << "USE " << LF_RILORE << "\n" ; query << "USE " << LF_RILORE << " KEY 2\n" ;
if (risoatt.full()) if (risoatt.full())
select << "(" << RILORE_TIPORA << "==\"" << risoatt << "\")"; select << "(" << RILORE_TIPORA << "==\"" << risoatt << "\")";
if (codice.full()) if (codice.full())
@ -365,14 +410,14 @@ void TRilevamento_cons_msk::riempi_risoatt(int giorno)
fromto << "=\"C\""; fromto << "=\"C\"";
else else
fromto << "=\"D\""; fromto << "=\"D\"";
if (anno > 0) if (_anno > 0)
{ {
fromto << " " << RILORE_ANNO << "=" << anno << " "; fromto << " " << RILORE_ANNO << "=" << _anno << " ";
if (mese > 0) if (_mese > 0)
{ {
fromto << RILORE_MESE << "=" << mese << " "; fromto << RILORE_MESE << "=" << _mese << " ";
if (_edit_mode && giorno > 0) if (_edit_mode && _giorno > 0)
fromto << RILORE_GIORNO << "=" << giorno << " "; fromto << RILORE_GIORNO << "=" << _giorno << " ";
} }
} }
query << "FROM " << fromto << "\n" query << "FROM " << fromto << "\n"
@ -386,17 +431,22 @@ void TRilevamento_cons_msk::riempi_risoatt(int giorno)
TRilevamento_ore rilore(def.cursor()->curr()); TRilevamento_ore rilore(def.cursor()->curr());
TToken_string& riga = sheet.row(-1); TToken_string& riga = sheet.row(-1);
riga.add(rilore.tipora(), sheet.cid2index(S_RISOATT)); const char tipo = rilore.get(RILORE_TIPORA)[0];
switch(rilore.tipora()) TString16 cod = rilore.get(RILORE_CODICE);
riga.add(tipo, sheet.cid2index(S_RISOATT));
switch(tipo)
{ {
case 'R': riga.add(rilore.codice(), sheet.cid2index(S_CODRIS)); break; case 'R': riga.add(cod, sheet.cid2index(S_CODRIS)); break;
case 'A': riga.add(rilore.codice(), sheet.cid2index(S_CODATT)); break; case 'A': riga.add(cod, sheet.cid2index(S_CODATT)); break;
default : break; default : break;
} }
put_row_anal_fields(riga, rilore.codcosto(), rilore.codcms(), rilore.codfase()); riga.add(rilore.get(RILORE_TPORA), sheet.cid2index(S_TPORA));
riga.add(rilore.tpora(), sheet.cid2index(S_TPORA)); put_row_anal_fields(riga, rilore.get(RILORE_CODCOSTO), rilore.get(RILORE_CODCMS), rilore.get(RILORE_CODFASE));
riga.add(rilore.qtaore(), sheet.cid2index(S_QTAORE)); riga.add(rilore.get(RILORE_QTAORE), sheet.cid2index(S_QTAORE));
riga.add(rilore.costo().string(), sheet.cid2index(S_COSTO)); riga.add(rilore.get(RILORE_COSTO), sheet.cid2index(S_COSTO));
riga.add(rilore.get(RILORE_ID), sheet.cid2index(S_ID));
sheet.check_row(sheet.items() - 1); sheet.check_row(sheet.items() - 1);
} }
sheet.force_update(); sheet.force_update();
@ -407,9 +457,7 @@ void TRilevamento_cons_msk::riempi_risoatt(int giorno)
void TRilevamento_cons_msk::riempi_sheet() void TRilevamento_cons_msk::riempi_sheet()
{ {
//leggo dalla maschera i campi chiave di ricerca //leggo dalla maschera i campi chiave di ricerca
const int anno = get_int(F_ANNO);
const TString4 risoatt = get(F_RISOATT) == "T" ? "" : get(F_RISOATT); const TString4 risoatt = get(F_RISOATT) == "T" ? "" : get(F_RISOATT);
const int mese = get_int(F_MESE);
const TString4 tpora = get(F_TPORA); const TString4 tpora = get(F_TPORA);
TString80 codcosto; TString80 codcosto;
TString80 codcms; TString80 codcms;
@ -428,7 +476,7 @@ void TRilevamento_cons_msk::riempi_sheet()
get_anal_fields(codcosto, codcms, codfase); get_anal_fields(codcosto, codcms, codfase);
//preparo la query //preparo la query
query << "USE " << LF_RILORE << "\n" ; query << "USE " << LF_RILORE << " KEY 2\n" ;
if (risoatt.full()) if (risoatt.full())
select << "(" << RILORE_TIPORA << "==\"" << risoatt << "\")"; select << "(" << RILORE_TIPORA << "==\"" << risoatt << "\")";
if (codice.full()) if (codice.full())
@ -461,15 +509,16 @@ void TRilevamento_cons_msk::riempi_sheet()
TString fromto = RILORE_TIPO "=\"C\""; TString fromto = RILORE_TIPO "=\"C\"";
if (anno > 0) if (_anno > 0)
{ {
fromto << " " << RILORE_ANNO << "=" << anno << " "; fromto << " " << RILORE_ANNO << "=" << _anno << " ";
if (mese > 0) if (_mese > 0)
fromto << RILORE_MESE << "=" << mese << " "; fromto << RILORE_MESE << "=" << _mese << " ";
} }
query << "FROM " << fromto << "\n" query << "FROM " << fromto << "\n"
<< "TO " << fromto; << "TO " << fromto;
riempi_calendario(query, anno, mese); riempi_calendario(query);
riempi_risoatt();
} }
//AZZERA_TUTTO: metodo che azzera il valore unitario di tutte le righe visualizzate sullo sheet //AZZERA_TUTTO: metodo che azzera il valore unitario di tutte le righe visualizzate sullo sheet
@ -497,6 +546,7 @@ void TRilevamento_cons_msk::registra()
TString80 codcosto; TString80 codcosto;
TString80 codcms; TString80 codcms;
TString16 codfase; TString16 codfase;
int err = NOERR;
FOR_EACH_SHEET_ROW(sheet, r, row) FOR_EACH_SHEET_ROW(sheet, r, row)
{ {
@ -505,31 +555,65 @@ void TRilevamento_cons_msk::registra()
const TString16 codice = tipora == 'R' ? riga.get(sheet.cid2index(S_CODRIS)) : riga.get(sheet.cid2index(S_CODATT)); const TString16 codice = tipora == 'R' ? riga.get(sheet.cid2index(S_CODRIS)) : riga.get(sheet.cid2index(S_CODATT));
const TString4 tpora = riga.get(sheet.cid2index(S_TPORA)); const TString4 tpora = riga.get(sheet.cid2index(S_TPORA));
const int qtaore = riga.get_int(sheet.cid2index(S_QTAORE)); const int qtaore = riga.get_int(sheet.cid2index(S_QTAORE));
const long id = riga.get_long(sheet.cid2index(S_ID));
const real costo(riga.get(sheet.cid2index(S_COSTO))); const real costo(riga.get(sheet.cid2index(S_COSTO)));
get_row_anal_fields(riga, codcosto, codcms, codfase); get_row_anal_fields(riga, codcosto, codcms, codfase);
rilroa.read('C', anno, mese, _giorno, tipora, codice, tpora, codcosto, codcms, codfase); rilroa.read('C', id);
if(qtaore == 0) if(qtaore == 0)
rilroa.remove(); err = rilroa.remove();
else else
{ {
rilroa.set_qtaore(qtaore); rilroa.put(RILORE_TIPO, "C");
rilroa.set_costo(costo); rilroa.put(RILORE_ID, id);
rilroa.put(RILORE_ANNO, anno);
int err = rilroa.rewrite_write(); rilroa.put(RILORE_MESE, mese);
rilroa.put(RILORE_GIORNO, _giorno);
rilroa.put(RILORE_TIPORA, tipora);
rilroa.put(RILORE_CODICE, codice);
rilroa.put(RILORE_TPORA, tpora);
rilroa.put(RILORE_CODCOSTO, codcosto);
rilroa.put(RILORE_CODCMS, codcms);
rilroa.put(RILORE_CODFASE, codfase);
rilroa.put(RILORE_QTAORE, qtaore);
rilroa.put(RILORE_COSTO, costo);
err = rilroa.rewrite_write();
} }
if (err != NOERR)
break;
} }
if (err == NOERR)
{
sheet.destroy();
riempi_sheet(); riempi_sheet();
riempi_risoatt(_giorno); }
else
error_box(FR("Errore %d in scrittura"), err);
} }
void TRilevamento_cons_msk::notify_focus_field(short id) void TRilevamento_cons_msk::update_day()
{ {
TMask::notify_focus_field(id); const int row = sfield(F_CALENDARIO).selected();
if(id == F_CALENDARIO)
if (_dett == "G")
{ {
_giorno = sfield(id).current_column(); _anno = get_int(F_ANNO);
riempi_risoatt(_giorno); _mese = get_int(F_MESE);
_giorno = row +1;
}
else
if (_dett == "M")
{
_anno = get_int(F_ANNO);
_mese = row + 1;
_giorno = 1;
}
else
if (_dett == "A")
{
_anno = _es_array[row];
_mese = 1;
_giorno = 1;
} }
} }
@ -567,7 +651,17 @@ bool TRilevamento_cons_msk::on_field_event(TOperable_field& f, TField_event e, l
case F_CODATT: case F_CODATT:
case F_TPORA: case F_TPORA:
if (e == fe_modify) if (e == fe_modify)
{
update_day();
riempi_sheet(); riempi_sheet();
}
break;
case F_CALENDARIO:
if (e == se_enter)
{
update_day();
riempi_risoatt();
}
break; break;
case S_RISOATT: case S_RISOATT:
case S_CODRIS: case S_CODRIS:
@ -714,6 +808,25 @@ TRilevamento_cons_msk::TRilevamento_cons_msk()
s.delete_column(id); s.delete_column(id);
} }
_qtaore = 0; _qtaore = 0;
_dett = ini_get_string(CONFIG_DITTA, "ci", "DETTCONS");
TSheet_field & sc = sfield(F_CALENDARIO);
_n_ex = 0;
for (int codes = _es.first(); codes != 0; codes = _es.next(codes))
_es_array[_n_ex++] = codes;
if (_dett == "A")
{
reset(F_ANNO);
disable(F_ANNO);
reset(F_MESE);
disable(F_MESE);
}
else
if (_dett == "M")
{
reset(F_MESE);
disable(F_MESE);
}
} }
//////////////////////////////////////////// ////////////////////////////////////////////

View File

@ -19,40 +19,7 @@
#define DLG_CERCA 901 #define DLG_CERCA 901
#define DLG_DEFAULT 902 #define DLG_DEFAULT 902
#define C_0 100 #define F_CONT 101
#define C_1 101
#define C_2 102
#define C_3 103
#define C_4 104
#define C_5 105
#define C_6 106
#define C_7 107
#define C_8 108
#define C_9 109
#define C_10 110
#define C_11 111
#define C_12 112
#define C_13 113
#define C_14 114
#define C_15 115
#define C_16 116
#define C_17 117
#define C_18 118
#define C_19 119
#define C_20 120
#define C_21 121
#define C_22 122
#define C_23 123
#define C_24 124
#define C_25 125
#define C_26 126
#define C_27 127
#define C_28 128
#define C_29 129
#define C_30 130
#define C_31 131
#define ID2DAY(ID) (ID - C_0)
#define DAY2ID(DAY) (C_0 + DAY)
#define S_RISOATT 101 #define S_RISOATT 101
#define S_CODRIS 102 #define S_CODRIS 102
@ -75,3 +42,4 @@
#define S_QTAORE 116 #define S_QTAORE 116
#define S_COSTO 117 #define S_COSTO 117
#define S_OREDIS 118 #define S_OREDIS 118
#define S_ID 120

View File

@ -40,13 +40,13 @@ END
NUMBER F_ANNO 4 NUMBER F_ANNO 4
BEGIN BEGIN
PROMPT 2 1 "Anno " PROMPT 2 1 "Anno "
FLAGS "A"
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
LISTBOX F_MESE 10 LISTBOX F_MESE 10
BEGIN BEGIN
PROMPT 24 1 "Mese " PROMPT 24 1 "Mese "
ITEM "|"
FLAGS "M" FLAGS "M"
END END
@ -112,45 +112,15 @@ BEGIN
GROUP 3 GROUP 3
END END
SPREADSHEET F_CALENDARIO -16 2 SPREADSHEET F_CALENDARIO 10 0
BEGIN BEGIN
PROMPT 1 7 "" PROMPT 1 7 ""
ITEM "1@2" ITEM "@4"
ITEM "2@2"
ITEM "3@2"
ITEM "4@2"
ITEM "5@2"
ITEM "6@2"
ITEM "7@2"
ITEM "8@2"
ITEM "9@2"
ITEM "10"
ITEM "11"
ITEM "12"
ITEM "13"
ITEM "14"
ITEM "15"
ITEM "16"
ITEM "17"
ITEM "18"
ITEM "19"
ITEM "20"
ITEM "21"
ITEM "22"
ITEM "23"
ITEM "24"
ITEM "25"
ITEM "26"
ITEM "27"
ITEM "28"
ITEM "29"
ITEM "30"
ITEM "31"
END END
SPREADSHEET F_SHEET -15 0 SPREADSHEET F_SHEET 65 0
BEGIN BEGIN
PROMPT 1 10 "" PROMPT 15 7 ""
ITEM "Tipo" ITEM "Tipo"
ITEM "Codice@16" ITEM "Codice@16"
ITEM "Tipo\nOra@5" ITEM "Tipo\nOra@5"
@ -170,166 +140,17 @@ BEGIN
ITEM "Costo@6" ITEM "Costo@6"
ITEM "Ore\ndisponibilità" ITEM "Ore\ndisponibilità"
ITEM "Descrizione@50" ITEM "Descrizione@50"
ITEM "ID@8"
END END
ENDPAGE ENDPAGE
ENDMASK ENDMASK
PAGE "Calendario" -1 -1 78 13 PAGE "Calendario" -1 -1 78 6
STRING C_1 1 STRING F_CONT 20
BEGIN BEGIN
PROMPT 2 4 " 1" PROMPT 2 2 " "
END
STRING C_2 1
BEGIN
PROMPT 6 4 " 2"
END
STRING C_3 1
BEGIN
PROMPT 10 4 " 3"
END
STRING C_4 1
BEGIN
PROMPT 14 4 " 4"
END
STRING C_5 1
BEGIN
PROMPT 18 4 " 5"
END
STRING C_6 1
BEGIN
PROMPT 22 4 " 6"
END
STRING C_7 1
BEGIN
PROMPT 26 4 " 7"
END
STRING C_8 1
BEGIN
PROMPT 30 4 " 8"
END
STRING C_9 1
BEGIN
PROMPT 34 4 " 9"
END
STRING C_10 1
BEGIN
PROMPT 38 4 "10"
END
STRING C_11 1
BEGIN
PROMPT 42 4 "11"
END
STRING C_12 1
BEGIN
PROMPT 46 4 "12"
END
STRING C_13 1
BEGIN
PROMPT 50 4 "13"
END
STRING C_14 1
BEGIN
PROMPT 54 4 "14"
END
STRING C_15 1
BEGIN
PROMPT 58 4 "15"
END
STRING C_16 1
BEGIN
PROMPT 62 4 "16"
END
STRING C_17 1
BEGIN
PROMPT 66 4 "17"
END
STRING C_18 1
BEGIN
PROMPT 70 4 "18"
END
STRING C_19 1
BEGIN
PROMPT 2 5 "19"
END
STRING C_20 1
BEGIN
PROMPT 6 5 "20"
END
STRING C_21 1
BEGIN
PROMPT 10 5 "21"
END
STRING C_22 1
BEGIN
PROMPT 14 5 "22"
END
STRING C_23 1
BEGIN
PROMPT 18 5 "23"
END
STRING C_24 1
BEGIN
PROMPT 22 5 "24"
END
STRING C_25 1
BEGIN
PROMPT 26 5 "25"
END
STRING C_26 1
BEGIN
PROMPT 30 5 "26"
END
STRING C_27 1
BEGIN
PROMPT 34 5 "27"
END
STRING C_28 1
BEGIN
PROMPT 38 5 "28"
END
STRING C_29 1
BEGIN
PROMPT 42 5 "29"
END
STRING C_30 1
BEGIN
PROMPT 46 5 "30"
END
STRING C_31 1
BEGIN
PROMPT 50 5 "31"
END END
ENDPAGE ENDPAGE
@ -503,6 +324,12 @@ BEGIN
PROMPT 50 11 "Quantità ore " PROMPT 50 11 "Quantità ore "
END END
NUMBER S_ID 8
BEGIN
PROMPT 2 12 "ID "
FLAGS "D"
END
ENDPAGE ENDPAGE
TOOLBAR "" 0 0 0 2 TOOLBAR "" 0 0 0 2

View File

@ -766,10 +766,14 @@ void TRilevamento_ore::update_id()
const TString4 tipo = get(RILORE_TIPO); const TString4 tipo = get(RILORE_TIPO);
rilore.put(RILORE_TIPO, tipo); rilore.put(RILORE_TIPO, tipo);
rilore.put(RILORE_ID, 999999999L); rilore.put(RILORE_ID, 99999999L);
if (rilore.read() != _isemptyfile && rilore.get(RILORE_TIPO) == tipo) if (rilore.read() != _isemptyfile)
{
if (rilore.get(RILORE_TIPO) != tipo)
rilore.prev();
id = rilore.get_long(RILORE_ID); id = rilore.get_long(RILORE_ID);
}
put(RILORE_ID, ++id); put(RILORE_ID, ++id);
} }
} }