diff --git a/ci/ci0600.cpp b/ci/ci0600.cpp index 1adb37df3..e9b1c3dcb 100755 --- a/ci/ci0600.cpp +++ b/ci/ci0600.cpp @@ -173,12 +173,11 @@ void TDef_risoatt_msk::riempi_sheet() case 'A': codice = get(F_CODATT); break; default: break; } - get_anal_fields(codcosto, codcms, codfase); TString query; - query << "USE " << LF_RILORE << "\n" ; + query << "USE " << LF_RILORE << " KEY 2\n" ; TString select; if (risoatt.full()) @@ -361,6 +360,7 @@ void TDef_risoatt_msk::registra() { TRilevamento_ore rilroa; TSheet_field& sheet = sfield(F_SHEET); + int err = NOERR; FOR_EACH_SHEET_ROW(sheet, r, row) { @@ -384,9 +384,11 @@ void TDef_risoatt_msk::registra() rilroa.read('D', id); if (qtaore == 0) - rilroa.remove(); + err = rilroa.remove(); else { + rilroa.put(RILORE_TIPO, "D"); + rilroa.put(RILORE_ID, id); rilroa.put(RILORE_ANNO, anno); rilroa.put(RILORE_MESE, mese); rilroa.put(RILORE_GIORNO, giorno); @@ -398,12 +400,18 @@ void TDef_risoatt_msk::registra() rilroa.put(RILORE_CODFASE, codfase); rilroa.put(RILORE_QTAORE, qtaore); rilroa.put(RILORE_COSTO, costo); - rilroa.put(RILORE_ID, id); - rilroa.rewrite_write(); + err = rilroa.rewrite_write(); } + if (err != NOERR) + break; } - sheet.destroy(); - riempi_sheet(); + 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 @@ -674,7 +682,6 @@ TDef_risoatt_msk::TDef_risoatt_msk() if (_dett == "A") { - field(F_ANNO).update_flags("A", true); reset(F_ANNO); disable(F_ANNO); reset(F_MESE); @@ -683,9 +690,12 @@ TDef_risoatt_msk::TDef_risoatt_msk() else if (_dett == "M") { + field(F_ANNO).update_flags("A", true); reset(F_MESE); disable(F_MESE); } + else + field(F_ANNO).update_flags("A", true); } //////////////////////////////////////// diff --git a/ci/ci0600a.uml b/ci/ci0600a.uml index 997828872..25b27f0d1 100755 --- a/ci/ci0600a.uml +++ b/ci/ci0600a.uml @@ -40,7 +40,6 @@ END NUMBER F_ANNO 4 BEGIN PROMPT 2 1 "Anno " - FLAGS "A" CHECKTYPE REQUIRED END diff --git a/ci/ci2100.cpp b/ci/ci2100.cpp index b98cf19d3..ad3606a12 100755 --- a/ci/ci2100.cpp +++ b/ci/ci2100.cpp @@ -61,11 +61,10 @@ const real TRilevamento_prev_msk::proponi_costo(const TMask& msk) case 'A': codice = msk.get(S_CODATT); break; default : break; } - const int anno = msk.get_date(S_DADATA).year(); - TString4 mese; mese.format("%02d", msk.get_date(S_DADATA).month()); + const TDate dal = msk.get_date(S_DADATA); 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"); roa.put("CODTAB", chiave); int err = roa.read(); @@ -74,6 +73,8 @@ const real TRilevamento_prev_msk::proponi_costo(const TMask& msk) costo = roa.get_real("R1"); else { + const int anno = dal.year(); + TString4 mese; mese.format("%02d", dal.month()); TString8 tmp; tmp << anno << mese; const long anme = atol(tmp); TString query; @@ -105,11 +106,9 @@ const real TRilevamento_prev_msk::proponi_costo(TToken_string& riga) TString cazzone = 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 TRisoatt_key chiave(tipo, codice, anno, mese, tpora); + const TRisoatt_key chiave(tipo, codice, dadata, tpora); TModule_table roa("&ROA"); roa.put("CODTAB", chiave); int err = roa.read(); @@ -118,6 +117,8 @@ const real TRilevamento_prev_msk::proponi_costo(TToken_string& riga) costo = roa.get_real("R1"); else { + const int anno = dadata.year(); + TString4 mese; mese.format("%02d", dadata.month()); TString8 tmp; tmp << anno << mese; const long anme = atol(tmp); TString query; @@ -256,7 +257,7 @@ void TRilevamento_prev_msk::carica_default() get_anal_fields(codcosto, codcms, codfase); TString query; - query << "USE " << LF_RILORE << "\n"; + query << "USE " << LF_RILORE << " KEY 2\n"; TString select; if (risoatt.full()) @@ -324,25 +325,25 @@ void TRilevamento_prev_msk::carica_default() { TRilevamento_ore rilore(def.cursor()->curr()); TToken_string& riga = sheet.row(-1); - riga.add(rilore.tipora(), sheet.cid2index(S_RISOATT)); - switch(rilore.tipora()) + const char tipo = rilore.get(RILORE_TIPORA)[0]; + 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 'A': riga.add(rilore.codice(), sheet.cid2index(S_CODATT)); break; - default : break; + case 'R': riga.add(cod, sheet.cid2index(S_CODRIS)); break; + case 'A': riga.add(cod, sheet.cid2index(S_CODATT)); break; + default : break; } - riga.add(rilore.dadata(), sheet.cid2index(S_DADATA)); - 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(a.string(), sheet.cid2index(S_ADATA)); - put_row_anal_fields(riga, rilore.codcosto(), rilore.codcms(), rilore.codfase()); - riga.add(rilore.qtaore(), sheet.cid2index(S_QTAORE)); + riga.add(rilore.get(RILORE_TPORA), sheet.cid2index(S_TPORA)); + riga.add(da.string(), sheet.cid2index(S_DADATA)); + riga.add(a.string(), sheet.cid2index(S_ADATA)); + put_row_anal_fields(riga, rilore.get(RILORE_CODCOSTO), rilore.get(RILORE_CODCMS), rilore.get(RILORE_CODFASE)); + riga.add(rilore.get(RILORE_QTAORE), sheet.cid2index(S_QTAORE)); riga.add(proponi_costo(riga).string(), sheet.cid2index(S_COSTO)); sheet.check_row(sheet.items() - 1); } sheet.force_update(); - } //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); TString query; - query << "USE " << LF_RILORE << "\n" ; + query << "USE " << LF_RILORE << " KEY 2\n" ; TString select; if (risoatt.full()) @@ -431,21 +432,23 @@ void TRilevamento_prev_msk::riempi_sheet() { TRilevamento_ore rilore(def.cursor()->curr()); TToken_string& riga = sheet.row(-1); - riga.add(rilore.tipora(), sheet.cid2index(S_RISOATT)); - switch(rilore.tipora()) + const char tipo = rilore.get(RILORE_TIPORA)[0]; + 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 'A': riga.add(rilore.codice(), sheet.cid2index(S_CODATT)); break; + case 'R': riga.add(cod, sheet.cid2index(S_CODRIS)); break; + case 'A': riga.add(cod, sheet.cid2index(S_CODATT)); break; default : break; } - riga.add(rilore.dadata(), sheet.cid2index(S_DADATA)); - riga.add(rilore.adata(), sheet.cid2index(S_ADATA)); - riga.add(rilore.tpora(), sheet.cid2index(S_TPORA)); - put_row_anal_fields(riga, rilore.codcosto(), rilore.codcms(), rilore.codfase()); - riga.add(rilore.dadata(), sheet.cid2index(S_DADATA)); - riga.add(rilore.adata(), sheet.cid2index(S_ADATA)); - riga.add(rilore.qtaore(), sheet.cid2index(S_QTAORE)); - riga.add(rilore.costo().string(), sheet.cid2index(S_COSTO)); + riga.add(rilore.get(RILORE_DADATA), sheet.cid2index(S_DADATA)); + riga.add(rilore.get(RILORE_ADATA), sheet.cid2index(S_ADATA)); + riga.add(rilore.get(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.get(RILORE_QTAORE), sheet.cid2index(S_QTAORE)); + 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.force_update(); @@ -493,8 +496,8 @@ void TRilevamento_prev_msk::nuova_riga() msk.enable(S_CODRIS); if (tutti || tipo == "A") msk.enable(S_CODATT); - msk.enable(S_DADATA, dadata.empty()); - msk.enable(S_ADATA, adata.empty()); +// msk.enable(S_DADATA, dadata.empty()); +// msk.enable(S_ADATA, adata.empty()); msk.enable(S_TPORA, tpora.empty()); if (_scdc_sid >= 0) for ( short id = _scdc_sid; id <= _scdc_lid; id++) @@ -552,8 +555,9 @@ void TRilevamento_prev_msk::registra() { TRilevamento_ore rilroa; TSheet_field& sheet = sfield(F_SHEET); - - FOR_EACH_SHEET_ROW(sheet, r, row) + int err = NOERR; + + FOR_EACH_SHEET_ROW(sheet, r, row) { TToken_string& riga = *(TToken_string*)row; const char tipora = riga.get_char(sheet.cid2index(S_RISOATT)); @@ -561,6 +565,7 @@ void TRilevamento_prev_msk::registra() const TDate& dadata = riga.get(sheet.cid2index(S_DADATA)); const TDate& adata = riga.get(sheet.cid2index(S_ADATA)); const TString4 tpora = riga.get(sheet.cid2index(S_TPORA)); + const long id = riga.get_long(sheet.cid2index(S_ID)); TString80 codcosto; TString80 codcms; TString80 codfase; @@ -569,21 +574,39 @@ void TRilevamento_prev_msk::registra() const real costo(tmp); get_row_anal_fields(riga, codcosto, codcms, codfase); - - rilroa.read('P', dadata.year(), dadata.month(), dadata.day(), tipora, codice, tpora, codcosto, codcms, codfase); - + rilroa.read('P', id); if(qtaore == 0) - rilroa.remove(); + err = rilroa.remove(); 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 diff --git a/ci/ci2100a.h b/ci/ci2100a.h index 48199fe87..9e6efc872 100755 --- a/ci/ci2100a.h +++ b/ci/ci2100a.h @@ -37,4 +37,5 @@ #define S_CDC11 116 #define S_CDC12 117 #define S_QTAORE 118 -#define S_COSTO 119 \ No newline at end of file +#define S_COSTO 119 +#define S_ID 121 \ No newline at end of file diff --git a/ci/ci2100a.uml b/ci/ci2100a.uml index 5fa2c114b..e7abc7bc4 100755 --- a/ci/ci2100a.uml +++ b/ci/ci2100a.uml @@ -138,14 +138,15 @@ BEGIN ITEM "Qta\nOre@5" ITEM "Costo@10" ITEM "Descrizione@50" + ITEM "ID@8" END ENDPAGE 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 PROMPT 1 1 "@bRisorsa - Attrezzatura" END @@ -308,6 +309,12 @@ BEGIN PROMPT 30 11 "Prezzo " END +NUMBER S_ID 8 +BEGIN + PROMPT 2 12 "ID " + FLAGS "D" +END + ENDPAGE TOOLBAR "" 0 0 0 2 diff --git a/ci/ci2200.cpp b/ci/ci2200.cpp index aeb65a4e9..9b28adf40 100755 --- a/ci/ci2200.cpp +++ b/ci/ci2200.cpp @@ -31,7 +31,14 @@ class TRilevamento_cons_msk : public TAutomask short _sfase_sid, _sfase_lid; char _edit_mode; TDate _datasel; + TString _dett; + int _anno; + int _mese; int _giorno; + int _first_ex; + int _n_ex; + int _es_array[32]; + TEsercizi_contabili _es; protected: 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 put_row_anal_fields(TToken_string & row, const TString & cdc, const TString & cms, const TString & fase); void carica_default(); + void update_day(); void riempi_sheet(); - void riempi_calendario(const TString & query, const int anno, const int mese); - void riempi_risoatt(int giorno); + void riempi_calendario(const TString & query); + void riempi_risoatt(); void azzera_tutto(); void registra(); - virtual void notify_focus_field(short id); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: @@ -65,18 +72,17 @@ const real TRilevamento_cons_msk::proponi_costo(TToken_string& riga) default : break; } - const int anno = get_int(F_ANNO); - const TString4 mese = get(F_MESE); - const TString4 tpora = riga.get(sheet.cid2index(S_TPORA)); + const TDate dal(1, _mese, _anno); + 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); if(!roa.empty()) costo = roa.get_real("R1"); else { - TString8 tmp; tmp << anno << mese; + TString8 tmp; tmp << _anno << _mese; const long anme = atol(tmp); TString query; 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() { //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 int mese = get_int(F_MESE); const TString4 tpora = get(F_TPORA); TString80 codcosto; TString80 codcms; @@ -212,7 +216,7 @@ void TRilevamento_cons_msk::carica_default() } get_anal_fields(codcosto, codcms, codfase); - query << "USE " << LF_RILORE << "\n" ; + query << "USE " << LF_RILORE << " KEY 2\n" ; if (risoatt.full()) select << "(" << RILORE_TIPORA << "==\"" << risoatt << "\")"; if (codice.full()) @@ -245,61 +249,104 @@ void TRilevamento_cons_msk::carica_default() TString fromto = RILORE_TIPO "=\"D\" "; - if (anno > 0) + if (_anno > 0) { - fromto << " " << RILORE_ANNO << "=" << anno << " "; - if (mese > 0) - fromto << RILORE_MESE << "=" << mese << " "; + fromto << " " << RILORE_ANNO << "=" << _anno << " "; + if (_mese > 0) + 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 -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); - calendario.destroy(); - sfield(F_SHEET).destroy(); - - 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); - - //abilito per default tutte le colonne del calendario - for(short id = C_1; id <= C_31; id++) - calendario.enable_column(calendario.cid2index(id), id <= last_id ? true : false); - - //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 - for (bool ok = recset.move_first(); ok; ok = recset.move_next()) + if (_dett == "A") { - const int day = recset.get(RILORE_GIORNO).as_int(); - - fulldays.set(day); - } - - for(short id = C_1; id <= last_id; id++) - { - const int column = calendario.cid2index(id); - - if (fulldays[ID2DAY(id)]) + TBit_array full_years; + TISAM_recordset recset(query); + + for (bool ok = recset.move_first(); ok; ok = recset.move_next()) { - if (_edit_mode) - calendario.set_back_and_fore_color(COLOR_DKBLUE, COLOR_DKBLUE, 0, column); // coloro di blu le date con registrazioni + 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 (TDate(ID2DAY(id), mese, anno).is_holiday()) - calendario.set_back_and_fore_color(COLOR_DKRED, COLOR_DKRED, 0, column); // coloro di rosso le festivitą - row.add(' ', column); - } + 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 + //tutte le celle che corrispondono a una data interessata da qualcosa + for (bool ok = recset.move_first(); ok; ok = recset.move_next()) + { + const int day = recset.get(RILORE_GIORNO).as_int(); + + fulldays.set(day); + } + + for(int i = 0; i < end_month; i++) + { + TToken_string & row = calendario.row(i); + + if (fulldays[i]) + { + if (_edit_mode) + calendario.set_back_and_fore_color(COLOR_DKBLUE, COLOR_DKBLUE, i, 0); // coloro di blu le date con registrazioni + } + else + if (TDate(i, _mese, _anno).is_holiday()) + calendario.set_back_and_fore_color(COLOR_DKRED, COLOR_DKRED, i, 0); // coloro di rosso le festivitą + row.add(i + 1); + } + } calendario.force_update(); } -void TRilevamento_cons_msk::riempi_risoatt(int giorno) +void TRilevamento_cons_msk::riempi_risoatt() { TSheet_field& sheet = sfield(F_SHEET); @@ -308,9 +355,7 @@ void TRilevamento_cons_msk::riempi_risoatt(int giorno) sheet.destroy(); //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 int mese = get_int(F_MESE); const TString4 tpora = get(F_TPORA); TString80 codcosto; TString80 codcms; @@ -328,7 +373,7 @@ void TRilevamento_cons_msk::riempi_risoatt(int giorno) get_anal_fields(codcosto, codcms, codfase); //preparo la query - query << "USE " << LF_RILORE << "\n" ; + query << "USE " << LF_RILORE << " KEY 2\n" ; if (risoatt.full()) select << "(" << RILORE_TIPORA << "==\"" << risoatt << "\")"; if (codice.full()) @@ -365,14 +410,14 @@ void TRilevamento_cons_msk::riempi_risoatt(int giorno) fromto << "=\"C\""; else fromto << "=\"D\""; - if (anno > 0) + if (_anno > 0) { - fromto << " " << RILORE_ANNO << "=" << anno << " "; - if (mese > 0) + fromto << " " << RILORE_ANNO << "=" << _anno << " "; + if (_mese > 0) { - fromto << RILORE_MESE << "=" << mese << " "; - if (_edit_mode && giorno > 0) - fromto << RILORE_GIORNO << "=" << giorno << " "; + fromto << RILORE_MESE << "=" << _mese << " "; + if (_edit_mode && _giorno > 0) + fromto << RILORE_GIORNO << "=" << _giorno << " "; } } query << "FROM " << fromto << "\n" @@ -386,17 +431,22 @@ void TRilevamento_cons_msk::riempi_risoatt(int giorno) TRilevamento_ore rilore(def.cursor()->curr()); TToken_string& riga = sheet.row(-1); - riga.add(rilore.tipora(), sheet.cid2index(S_RISOATT)); - switch(rilore.tipora()) + const char tipo = rilore.get(RILORE_TIPORA)[0]; + 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 'A': riga.add(rilore.codice(), sheet.cid2index(S_CODATT)); break; + case 'R': riga.add(cod, sheet.cid2index(S_CODRIS)); break; + case 'A': riga.add(cod, sheet.cid2index(S_CODATT)); break; default : break; } - put_row_anal_fields(riga, rilore.codcosto(), rilore.codcms(), rilore.codfase()); - riga.add(rilore.tpora(), sheet.cid2index(S_TPORA)); - riga.add(rilore.qtaore(), sheet.cid2index(S_QTAORE)); - riga.add(rilore.costo().string(), sheet.cid2index(S_COSTO)); + riga.add(rilore.get(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.get(RILORE_QTAORE), sheet.cid2index(S_QTAORE)); + 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.force_update(); @@ -407,9 +457,7 @@ void TRilevamento_cons_msk::riempi_risoatt(int giorno) void TRilevamento_cons_msk::riempi_sheet() { //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 int mese = get_int(F_MESE); const TString4 tpora = get(F_TPORA); TString80 codcosto; TString80 codcms; @@ -428,7 +476,7 @@ void TRilevamento_cons_msk::riempi_sheet() get_anal_fields(codcosto, codcms, codfase); //preparo la query - query << "USE " << LF_RILORE << "\n" ; + query << "USE " << LF_RILORE << " KEY 2\n" ; if (risoatt.full()) select << "(" << RILORE_TIPORA << "==\"" << risoatt << "\")"; if (codice.full()) @@ -461,15 +509,16 @@ void TRilevamento_cons_msk::riempi_sheet() TString fromto = RILORE_TIPO "=\"C\""; - if (anno > 0) + if (_anno > 0) { - fromto << " " << RILORE_ANNO << "=" << anno << " "; - if (mese > 0) - fromto << RILORE_MESE << "=" << mese << " "; + fromto << " " << RILORE_ANNO << "=" << _anno << " "; + if (_mese > 0) + fromto << RILORE_MESE << "=" << _mese << " "; } query << "FROM " << fromto << "\n" << "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 @@ -497,6 +546,7 @@ void TRilevamento_cons_msk::registra() TString80 codcosto; TString80 codcms; TString16 codfase; + int err = NOERR; FOR_EACH_SHEET_ROW(sheet, r, row) { @@ -505,32 +555,66 @@ void TRilevamento_cons_msk::registra() 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 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))); 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) - rilroa.remove(); + err = rilroa.remove(); else { - rilroa.set_qtaore(qtaore); - rilroa.set_costo(costo); - - int err = rilroa.rewrite_write(); + rilroa.put(RILORE_TIPO, "C"); + rilroa.put(RILORE_ID, id); + rilroa.put(RILORE_ANNO, anno); + 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; } - riempi_sheet(); - riempi_risoatt(_giorno); + if (err == NOERR) + { + sheet.destroy(); + riempi_sheet(); + } + 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); - if(id == F_CALENDARIO) - { - _giorno = sfield(id).current_column(); - riempi_risoatt(_giorno); - } + const int row = sfield(F_CALENDARIO).selected(); + + if (_dett == "G") + { + _anno = get_int(F_ANNO); + _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; + } } //ON_FIELD_EVENT: metodo che gestisce gli eventi sui vari campi della maschera @@ -567,7 +651,17 @@ bool TRilevamento_cons_msk::on_field_event(TOperable_field& f, TField_event e, l case F_CODATT: case F_TPORA: if (e == fe_modify) + { + update_day(); riempi_sheet(); + } + break; + case F_CALENDARIO: + if (e == se_enter) + { + update_day(); + riempi_risoatt(); + } break; case S_RISOATT: case S_CODRIS: @@ -714,6 +808,25 @@ TRilevamento_cons_msk::TRilevamento_cons_msk() s.delete_column(id); } _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); + } } //////////////////////////////////////////// diff --git a/ci/ci2200a.h b/ci/ci2200a.h index cc0dabe66..4f4c072bc 100755 --- a/ci/ci2200a.h +++ b/ci/ci2200a.h @@ -19,40 +19,7 @@ #define DLG_CERCA 901 #define DLG_DEFAULT 902 -#define C_0 100 -#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 F_CONT 101 #define S_RISOATT 101 #define S_CODRIS 102 @@ -75,3 +42,4 @@ #define S_QTAORE 116 #define S_COSTO 117 #define S_OREDIS 118 +#define S_ID 120 diff --git a/ci/ci2200a.uml b/ci/ci2200a.uml index 506d63c94..b770b724e 100755 --- a/ci/ci2200a.uml +++ b/ci/ci2200a.uml @@ -40,13 +40,13 @@ END NUMBER F_ANNO 4 BEGIN PROMPT 2 1 "Anno " - FLAGS "A" CHECKTYPE REQUIRED END LISTBOX F_MESE 10 BEGIN PROMPT 24 1 "Mese " + ITEM "|" FLAGS "M" END @@ -112,45 +112,15 @@ BEGIN GROUP 3 END -SPREADSHEET F_CALENDARIO -16 2 +SPREADSHEET F_CALENDARIO 10 0 BEGIN PROMPT 1 7 "" - ITEM "1@2" - 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" + ITEM "@4" END -SPREADSHEET F_SHEET -15 0 +SPREADSHEET F_SHEET 65 0 BEGIN - PROMPT 1 10 "" + PROMPT 15 7 "" ITEM "Tipo" ITEM "Codice@16" ITEM "Tipo\nOra@5" @@ -170,166 +140,17 @@ BEGIN ITEM "Costo@6" ITEM "Ore\ndisponibilitą" ITEM "Descrizione@50" + ITEM "ID@8" END ENDPAGE ENDMASK -PAGE "Calendario" -1 -1 78 13 +PAGE "Calendario" -1 -1 78 6 -STRING C_1 1 +STRING F_CONT 20 BEGIN - PROMPT 2 4 " 1" -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" + PROMPT 2 2 " " END ENDPAGE @@ -503,6 +324,12 @@ BEGIN PROMPT 50 11 "Quantitą ore " END +NUMBER S_ID 8 +BEGIN + PROMPT 2 12 "ID " + FLAGS "D" +END + ENDPAGE TOOLBAR "" 0 0 0 2 diff --git a/ci/cilib.cpp b/ci/cilib.cpp index 19cd64d10..4e4a2fb4e 100755 --- a/ci/cilib.cpp +++ b/ci/cilib.cpp @@ -766,10 +766,14 @@ void TRilevamento_ore::update_id() const TString4 tipo = get(RILORE_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); + } put(RILORE_ID, ++id); } }