diff --git a/ci/ci0200.cpp b/ci/ci0200.cpp index 110f706ba..b9d58b267 100755 --- a/ci/ci0200.cpp +++ b/ci/ci0200.cpp @@ -23,8 +23,8 @@ class TRisoatt_msk : public TAutomask protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); - const TString & add_field_to_tab_filter(TString & filtro, short id, int len = 0, const char * empty_value = ""); - const TString & add_field_to_tab_key(TString & filtro, TToken_string & row, short id, bool number, int len = 0, const char * empty_value = ""); + const TString& add_field_to_tab_filter(const short id, int len = 0, const char* empty_value = ""); + const TString& add_field_to_tab_key(TToken_string& row, const short id, int len = 0); void riempi_sheet(); void nuova_riga(); void azzera_riga(TSheet_field& sheet); @@ -38,39 +38,35 @@ public: TRisoatt_msk(); }; -const TString & TRisoatt_msk::add_field_to_tab_filter(TString & filtro, short id, int len, const char * empty_value) +//ADD_FIELD_TO_TAB_FILTER: aggiunge un campo al filtro +const TString& TRisoatt_msk::add_field_to_tab_filter(const short id, int len, const char* empty_value) { if (len <= 0) len = field(id).size(); - TString & val = get_tmp_string(80); + + TString& val = get_tmp_string(); val = get(id); if (val == empty_value) val.fill('?', len); else val.left_just(len); - filtro << val; - - return val; + + return val; } -const TString & TRisoatt_msk::add_field_to_tab_key(TString & filtro, TToken_string & row, short id, bool number, int len, const char * empty_value) +const TString& TRisoatt_msk::add_field_to_tab_key(TToken_string& row, const short id, int len) { - TSheet_field & sh = sfield(F_SHEET); + TSheet_field& sh = sfield(F_SHEET); if (len <= 0) len = sh.sheet_mask().field(id).size(); - TString & val = get_tmp_string(80); + TString& val = get_tmp_string(); val = row.get(sh.cid2index(id)); - if (val == empty_value) - val.fill(number ? '0' : ' ', len); - else - val.left_just(len); - filtro << val; - - return val; + val.left_just(len); + return val; } //RIEMPI_SHEET: metodo che riempie lo sheet in base ai campi chiave @@ -80,35 +76,19 @@ void TRisoatt_msk::riempi_sheet() TString filtro; char risoatt = get(F_RISOATT)[0]; - //guardo il tipo risorsa / attrezzatura che sto ricercando (se Tutti setto a '?') - add_field_to_tab_filter(filtro, F_RISOATT, 1, "T"); + //guardo il tipo risorsa / attrezzatura che sto ricercando (se setto a '?') + filtro << add_field_to_tab_filter(F_RISOATT, 1, "T"); //leggo il codice corretto a seconda del tipo selezionato (se vuoto setto a 16 caratteri '?') switch(risoatt) { - case 'T': - add_field_to_tab_filter(filtro, F_CODICE); - break; - case 'R': - add_field_to_tab_filter(filtro, F_CODRIS); - break; - case 'A': - add_field_to_tab_filter(filtro, F_CODATT); - break; + case 'T': filtro << add_field_to_tab_filter(F_CODICE); break; + case 'R': filtro << add_field_to_tab_filter(F_CODRIS); break; + case 'A': filtro << add_field_to_tab_filter(F_CODATT); break; default: break; } - - add_field_to_tab_filter(filtro, F_ANNO); - //leggo il mese (se vuoto setto a '??') - add_field_to_tab_filter(filtro, F_MESE, 2); - - //leggo il tipo ora (se vuoto setto a '??') - add_field_to_tab_filter(filtro, F_TPORA); - - int i ; - for (i = filtro.len() - 1; i >= 0 && filtro[i] == '?'; i--); - filtro.cut(++i); - if (i > 0) - filtro << '*'; + filtro << add_field_to_tab_filter(F_ANNO); + filtro << add_field_to_tab_filter(F_MESE, 2); + filtro << add_field_to_tab_filter(F_TPORA); TString query("USE &ROA\n"); @@ -116,9 +96,8 @@ void TRisoatt_msk::riempi_sheet() query << "SELECT CODTAB?=\"" << filtro << "\""; if(risoatt != 'T') { - query << "\n" - << "FROM CODTAB=" << risoatt << "\n" - << "TO CODTAB=" << risoatt << "\n"; + query << "\nFROM CODTAB=" << risoatt + << "\nTO CODTAB=" << risoatt; } TISAM_recordset roa(query); @@ -137,16 +116,24 @@ void TRisoatt_msk::riempi_sheet() cod.trim(); switch(roakey.tipo()) { - case 'A': riga.add(cod, sheet.cid2index(S_CODATT)); break; - case 'R': riga.add(cod, sheet.cid2index(S_CODRIS)); break; + case 'A': + { + riga.add(cod, sheet.cid2index(S_CODATT)); + riga.add(roa.descr(), sheet.cid2index(S_DESATT)); + } + break; + case 'R': + { + riga.add(cod, sheet.cid2index(S_CODRIS)); + riga.add(roa.descr(), sheet.cid2index(S_DESRIS)); + } + break; default : break; } riga.add(roakey.mese(), sheet.cid2index(S_MESE)); riga.add(roakey.tpora(), sheet.cid2index(S_TPORA)); riga.add(roa.valuni().string(), sheet.cid2index(S_VALUNI)); riga.add(roakey.anno(), sheet.cid2index(S_ANNO)); - - sheet.check_row(sheet.items() - 1); } sheet.set_column_justify(sheet.cid2index(S_VALUNI), true); @@ -158,32 +145,33 @@ void TRisoatt_msk::riempi_sheet() void TRisoatt_msk::nuova_riga() { TSheet_field& sheet = sfield(F_SHEET); - TToken_string & riga = sheet.row(-1); + TToken_string& riga = sheet.row(-1); const int r = sheet.items() - 1; sheet.select(r); TMask& msk = sheet.sheet_mask(); const bool tutti = get(F_RISOATT)[0] == 'T'; - const TString4 tipo = tutti ? "R" : get(F_RISOATT); + const TString4 tipo = tutti ? "R" : get(F_RISOATT); int mese = get_int(F_MESE); int anno = get_int(F_ANNO); TString tpora = get(F_TPORA); riga.add(tipo, sheet.cid2index(S_RISOATT)); - if (!tutti) - { - if (tipo == "R") - riga.add(get(F_CODRIS), sheet.cid2index(S_CODRIS)); - else - riga.add(get(F_CODATT), sheet.cid2index(S_CODATT)); - } + + switch(tipo[0]) + { + case 'R': riga.add(get(F_CODRIS), sheet.cid2index(S_CODRIS)); + case 'A': riga.add(get(F_CODATT), sheet.cid2index(S_CODATT)); + default : break; + } + riga.add(anno, sheet.cid2index(S_ANNO)); riga.add(mese, sheet.cid2index(S_MESE)); riga.add(tpora, sheet.cid2index(S_TPORA)); sheet.update_mask(r); msk.enable(S_RISOATT, tutti); - if (tutti || tipo == "R") + if (tutti || tipo == "R") msk.enable(S_CODRIS); - if (tutti || tipo == "A") + if (tutti || tipo == "A") msk.enable(S_CODATT); msk.enable(S_ANNO, anno == 0); msk.enable(S_MESE, mese == 0); @@ -194,16 +182,38 @@ void TRisoatt_msk::nuova_riga() const real& valuni = msk.get_real(S_VALUNI); if(valuni > ZERO) - sheet.update_row(r); + { + riga.add(msk.get(S_RISOATT)[0], sheet.cid2index(S_RISOATT)); + const char tipo = msk.get(S_RISOATT)[0]; + + switch(tipo) + { + case 'R': + { + riga.add(msk.get(S_CODRIS), sheet.cid2index(S_CODRIS)); + riga.add(msk.get(S_DESRIS), sheet.cid2index(S_DESRIS)); + } + break; + case 'A': + { + riga.add(msk.get(S_CODATT), sheet.cid2index(S_CODATT)); + riga.add(msk.get(S_DESATT), sheet.cid2index(S_DESATT)); + } + break; + default : break; + } + riga.add(msk.get(S_ANNO), sheet.cid2index(S_ANNO)); + riga.add(msk.get(S_MESE), sheet.cid2index(S_MESE)); + riga.add(msk.get(S_TPORA), sheet.cid2index(S_TPORA)); + riga.add(msk.get(S_VALUNI), sheet.cid2index(S_VALUNI)); + } else { - sheet.destroy(sheet.items() - 1); + sheet.destroy(r); sheet.force_update(); } } msk.enable_default(); - - sheet.check_row(sheet.items() - 1); sheet.force_update(); } @@ -211,11 +221,6 @@ void TRisoatt_msk::nuova_riga() //(N.B.: le righe con valore unitario nullo verranno eliminate in fase di registrazione) void TRisoatt_msk::azzera_riga(TSheet_field& sheet) { - const int nriga = sheet.selected(); - TToken_string& row = sheet.row(nriga); - - row.add(0, sheet.cid2index(S_VALUNI)); - TMask& msk = sheet.sheet_mask(); _valore = msk.get_real(S_VALUNI); msk.set(S_VALUNI, ZERO); @@ -230,6 +235,7 @@ void TRisoatt_msk::azzera_tutto(TSheet_field& sheet) TToken_string& row = sheet.row(r); row.add(0, sheet.cid2index(S_VALUNI)); } + sheet.force_update(); } //REGISTRA: metodo che salva nella tabella di modulo le @@ -247,16 +253,16 @@ void TRisoatt_msk::registra() { chiave.cut(0); TToken_string& riga = *(TToken_string*)row; - const TString4 tipo = add_field_to_tab_key(chiave, riga, S_RISOATT, false, 1, "T"); - const bool risorsa = tipo[0] == 'R'; - const TString16 codice = add_field_to_tab_key(chiave, riga, risorsa ? S_CODRIS : S_CODATT, false); - const TString4 stranno = add_field_to_tab_key(chiave, riga, S_ANNO, true); - const TString4 mese = add_field_to_tab_key(chiave, riga, S_MESE, true, 2); - const TString4 tpora = add_field_to_tab_key(chiave, riga, S_TPORA, true); - const TString80 descr = risorsa ? riga.get(sheet.cid2index(S_DESRIS)) : riga.get(sheet.cid2index(S_DESATT)); - const real valuni(riga.get(sheet.cid2index(S_VALUNI))); - TString8 anme; anme << anno << mese; + const TString4 tipo = add_field_to_tab_key(riga, S_RISOATT, 1); + chiave << tipo; + chiave << add_field_to_tab_key(riga, tipo[0] == 'R' ? S_CODRIS : S_CODATT); + + TString8 anme; anme << add_field_to_tab_key(riga, S_ANNO) << add_field_to_tab_key(riga, S_MESE, 2); + chiave << anme; + chiave << add_field_to_tab_key(riga, S_TPORA); + const TString80 descr = tipo[0] == 'R' ? riga.get(sheet.cid2index(S_DESRIS)) : riga.get(sheet.cid2index(S_DESATT)); + const real valuni(riga.get(sheet.cid2index(S_VALUNI))); tab.put("CODTAB", chiave); int err = tab.read(); @@ -268,9 +274,14 @@ void TRisoatt_msk::registra() else { tab.put("R1", valuni); - tab.put("I0", anme); - tab.rewrite(); + tab.put("I0", anme); } + err = tab.rewrite(); + int cazzone; + if (err == NOERR) + cazzone = 1; + else + cazzone = err; } else { @@ -286,7 +297,6 @@ void TRisoatt_msk::registra() void TRisoatt_msk::copia_tutto() { - TLocalisamfile tabmod(LF_TABMOD); TModule_table tab("&ROA"); //instanzio la maschera di richiesta parametri (che è una maschera di riga), e la lancio @@ -315,8 +325,8 @@ void TRisoatt_msk::copia_tutto() { msk.disable(S_RISOATT); - msk.set(S_CODRIS, ""); - msk.set(S_CODATT, ""); + msk.reset(S_CODRIS); + msk.reset(S_CODATT); switch(tipo) { @@ -326,33 +336,24 @@ void TRisoatt_msk::copia_tutto() } } - if(mese.full()) - msk.enable(S_MESE); - else - msk.disable(S_MESE); - - if(tpora.full()) - msk.enable(S_TPORA); - else - msk.disable(S_TPORA); - + msk.reset(S_MESE); msk.enable(S_MESE); + msk.reset(S_TPORA); msk.enable(S_TPORA, !tpora.full()); msk.enable(S_ANNO); TString4 tmp; tmp << tipo; msk.set(S_RISOATT, tmp); - msk.reset(S_MESE); - msk.reset(S_CODRIS); - msk.reset(S_CODATT); - msk.reset(S_TPORA); + msk.reset(S_CODRIS); msk.enable(S_CODRIS, !codice.full()); + msk.reset(S_CODATT); msk.enable(S_CODATT, !codice.full()); if (msk.run() == K_ENTER) { const char tipodest = msk.get(S_RISOATT)[0]; TString16 codicedest; + TString80 descrdest; switch(tipodest) { - case 'R': codicedest = msk.get(S_CODRIS); - case 'A': codicedest = msk.get(S_CODATT); + case 'R': codicedest = msk.get(S_CODRIS); descrdest = msk.get(S_DESRIS); break; + case 'A': codicedest = msk.get(S_CODATT); descrdest = msk.get(S_DESATT); break; default : break; } codicedest.left_just(16); @@ -360,10 +361,11 @@ void TRisoatt_msk::copia_tutto() TString4 mesedest = msk.get(S_MESE); TString4 tporadest = msk.get(S_TPORA); - const int anno = get_int(F_ANNO); FOR_EACH_SHEET_ROW_BACK(sheet, r, riga) { + if(r == sheet.items() - 1) + continue; TToken_string& row = *(TToken_string*)riga; TString8 tmp = row.get(sheet.cid2index(S_VALUNI)); @@ -374,12 +376,13 @@ void TRisoatt_msk::copia_tutto() } TString80 chiave; - const TString4 tipo = add_field_to_tab_key(chiave, row, S_RISOATT, false, 1, "T"); - const bool risorsa = tipo[0] == 'R'; - const TString16 codice = add_field_to_tab_key(chiave, row, risorsa ? S_CODRIS : S_CODATT, false); - const TString4 stranno = add_field_to_tab_key(chiave, row, S_ANNO, true); - const TString4 mese = add_field_to_tab_key(chiave, row, S_MESE, true, 2); - const TString4 tpora = add_field_to_tab_key(chiave, row, S_TPORA, true); + const TString4 tipo = add_field_to_tab_key(row, S_RISOATT, 1); + const TString16 codice = add_field_to_tab_key(row, tipo[0] == 'R' ? S_CODRIS : S_CODATT); + const TString4 stranno = add_field_to_tab_key(row, S_ANNO); + const TString4 mese = add_field_to_tab_key(row, S_MESE, 2); + const TString4 tpora = add_field_to_tab_key(row, S_TPORA); + + chiave << tipo[0] << codice << stranno << mese << tpora; const real valuni(row.get(sheet.cid2index(S_VALUNI))); TString80 chiavedest; @@ -425,6 +428,7 @@ void TRisoatt_msk::copia_tutto() { tab.put("CODTAB", chiavedest); tab.put("R1", valuni); + tab.put("S0", descrdest); tab.write(); } } @@ -470,7 +474,6 @@ bool TRisoatt_msk::on_field_event(TOperable_field& f, TField_event e, long jolly case 1: azzera_riga(sheet); break; default: break; } - sheet.force_update(); return false; } break; diff --git a/ci/ci0200a.uml b/ci/ci0200a.uml index e873d54e0..93c549c1d 100755 --- a/ci/ci0200a.uml +++ b/ci/ci0200a.uml @@ -71,11 +71,11 @@ LISTBOX F_RISOATT 1 12 BEGIN PROMPT 2 2 "@bTipo " ITEM "T|Tutti" - MESSAGE SHOW,1@|HIDE,2@|HIDE,3@ + MESSAGE SHOW,1@|HIDE,2@|HIDE,3@|DISABLE,DLG_COPY ITEM "R|Risorsa" - MESSAGE HIDE,1@|SHOW,2@|HIDE,3@ + MESSAGE HIDE,1@|SHOW,2@|HIDE,3@|ENABLE,DLG_COPY ITEM "A|Attrezzatura" - MESSAGE HIDE,1@|HIDE,2@|SHOW,3@ + MESSAGE HIDE,1@|HIDE,2@|SHOW,3@|ENABLE,DLG_COPY FLAGS "Z" END @@ -202,6 +202,7 @@ BEGIN OUTPUT S_CODATT CODTAB OUTPUT S_DESATT S0 CHECKTYPE REQUIRED + MESSAGE COPY,S_CODRIS FLAGS "GD" GROUP 2 END @@ -224,7 +225,6 @@ END LISTBOX S_MESE 10 BEGIN PROMPT 22 7 "Mese" - FILED CODTAB[21,2] FLAGS "MD" END