diff --git a/ci/ci0200.cpp b/ci/ci0200.cpp index 508aed971..e9dde049a 100755 --- a/ci/ci0200.cpp +++ b/ci/ci0200.cpp @@ -10,6 +10,7 @@ #include "ci0.h" #include "cilib.h" #include "ci0200a.h" +#include "ci0200b.h" #include "../ve/velib.h" /////////////////////////////////// @@ -19,6 +20,7 @@ //Classe TRisoatt_msk class TRisoatt_msk : public TAutomask { + real _valore; protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); @@ -27,6 +29,7 @@ class TRisoatt_msk : public TAutomask void azzera_riga(TSheet_field& sheet); void azzera_tutto(TSheet_field& sheet); void registra(); + void copia_tutto(); public: @@ -151,72 +154,69 @@ void TRisoatt_msk::nuova_riga() //guardo il tipo risorsa / attrezzatura che sto ricercando const char risoatt = get(F_RISOATT)[0] == 'T' ? 'R' : get(F_RISOATT)[0]; - - //leggo il codice corretto a seconda del tipo selezionato - TString16 codice; - switch(get(F_RISOATT)[0]) - { - case 'T': codice = ""; break; - case 'R': codice = get(F_CODRIS); break; - case 'A': codice = get(F_CODATT); break; - default: break; - } - - //leggo il mese - const TString4 mese = get(F_MESE).empty() ? "" : get(F_MESE); - - //leggo il tipo ora - const TString4 tpora = get(F_TPORA).empty() ? "" : get(F_TPORA); - - //setta e abilita i campi necessari sulla maschera di riga TString4 tmp; tmp << risoatt; msk.set(S_RISOATT, tmp); - if(get(F_RISOATT)[0] == 'T') - { - msk.enable(S_RISOATT); - msk.enable(S_CODRIS); - msk.enable(S_CODATT); - } + msk.enable(S_RISOATT, get(F_RISOATT)[0] == 'T'); - switch(risoatt) + //leggo il codice corretto a seconda del tipo selezionato + switch(get(F_RISOATT)[0]) { - case 'R': - if(codice.empty()) - { - msk.show(S_CODRIS); - msk.enable(S_CODRIS); - msk.hide(S_CODATT); - } - else - msk.set(S_CODRIS, codice); + case 'T': + msk.reset(S_CODRIS); msk.enable(S_CODRIS); + msk.reset(S_CODATT); msk.enable(S_CODATT); break; - case 'A': - if(codice.empty()) - { - msk.show(S_CODATT); - msk.enable(S_CODATT); - msk.hide(S_CODRIS); - } - else - msk.set(S_CODATT, codice); + case 'R': + msk.set(S_CODRIS, get(F_CODRIS)); msk.enable(S_CODRIS); + break; + case 'A': + msk.set(S_CODATT, get(F_CODATT)); msk.enable(S_CODATT); break; default: break; } - - if(mese.empty()) - msk.enable(S_MESE); - else - msk.set(S_MESE, mese); + + msk.enable(S_MESE, get(F_MESE).empty()); + msk.set(S_MESE, get(F_MESE)); - if(tpora.empty()) - msk.enable(S_TPORA); - else - msk.set(S_TPORA, tpora); + msk.enable(S_TPORA, get(F_TPORA).empty()); + msk.set(S_TPORA, get(F_TPORA)); + msk.set(S_VALUNI, ""); //lancio la maschera di riga da compilare - msk.run(); + if(msk.run() == K_ENTER) + { + const real& valuni = msk.get_real(S_VALUNI); + + if(valuni > ZERO) + { + const char tipo = msk.get(S_RISOATT)[0]; + const TString& codice = tipo == 'R' ? msk.get(S_CODRIS) : msk.get(S_CODATT); + const TString& mese = msk.get(S_MESE); + const TString& tpora = msk.get(S_TPORA); + + TToken_string& riga = sheet.row(sheet.items() - 1); + riga.add(tipo, sheet.cid2index(S_RISOATT)); + switch(tipo) + { + case 'R': riga.add(codice, sheet.cid2index(S_CODRIS)); break; + case 'A': riga.add(codice, sheet.cid2index(S_CODATT)); break; + default : break; + } + riga.add(mese, sheet.cid2index(S_MESE)); + riga.add(tpora, sheet.cid2index(S_TPORA)); + riga.add(valuni.string(), sheet.cid2index(S_VALUNI)); + sheet.set_column_justify(sheet.cid2index(S_VALUNI), true); + } + else + { + sheet.destroy(sheet.items() - 1); + sheet.force_update(); + } + } msk.enable_default(); + + sheet.check_row(sheet.items() - 1); + sheet.force_update(); } //AZZERA_RIGA: metodo che azzera il valore unitario della riga selezionata @@ -229,6 +229,7 @@ void TRisoatt_msk::azzera_riga(TSheet_field& sheet) row.add(0, sheet.cid2index(S_VALUNI)); TMask& msk = sheet.sheet_mask(); + _valore = msk.get_real(S_VALUNI); msk.set(S_VALUNI, ZERO); } @@ -294,10 +295,162 @@ void TRisoatt_msk::registra() riempi_sheet(); } +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 + TSheet_field& sheet = sfield(F_SHEET); + sheet.row(-1); + sheet.select(sheet.items() - 1); + TMask& msk = sheet.sheet_mask(); + + msk.disable(DLG_RESET); + msk.hide(S_VALUNI); + + const char tipo = get(F_RISOATT)[0]; + const int anno = get_int(F_ANNO); + const TString4 mese = get(F_MESE); + const TString4 tpora = get(F_TPORA); + + TString16 codice; + switch(tipo) + { + case 'R': codice = get(F_CODRIS); break; + case 'A': codice = get(F_CODATT); break; + default : break; + } + + if(codice.full()) + { + msk.disable(S_RISOATT); + + msk.set(S_CODRIS, ""); + msk.set(S_CODATT, ""); + + switch(tipo) + { + case 'R': msk.enable(S_CODRIS); msk.disable(S_CODATT); break; + case 'A': msk.enable(S_CODATT); msk.disable(S_CODRIS); break; + default : break; + } + } + + 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.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); + + if (msk.run() == K_ENTER) + { + const char tipodest = msk.get(S_RISOATT)[0]; + TString16 codicedest; + switch(tipodest) + { + case 'R': codicedest = msk.get(S_CODRIS); + case 'A': codicedest = msk.get(S_CODATT); + default : break; + } + codicedest.left_just(16); + int annodest = msk.get_int(S_ANNO); + 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) + { + TToken_string& row = *(TToken_string*)riga; + + TString8 tmp = row.get(sheet.cid2index(S_VALUNI)); + if(tmp.empty()) + { + sheet.destroy(r); + continue; + } + + const char tipo = row.get_char(sheet.cid2index(S_RISOATT)); + TString16 codice = row.get(sheet.cid2index(S_CODRIS)); + const TString4 mese = row.get(sheet.cid2index(S_MESE)); + const TString4 tpora = row.get(sheet.cid2index(S_TPORA)); + const real valuni(row.get(sheet.cid2index(S_VALUNI))); + + TString80 chiave; chiave << tipo << codice.left_just(16) << anno << mese << tpora; + + TString80 chiavedest; + if(get(F_RISOATT)[0] == 'T') + chiavedest << tipo; + else + chiavedest << tipodest; + + if(codicedest.full()) + chiavedest << codicedest; + else + chiavedest << codice.left_just(16); + + chiavedest << annodest; + + if(mesedest.empty()) + chiavedest << mese; + else + chiavedest << mesedest; + + if(tporadest.empty()) + chiavedest << tpora; + else + chiavedest << tporadest; + + if(chiavedest == chiave) + { + TString str; + str << "Impossibile copiare la riga " << r + 1 << " sulla destinazione selezionata perchè coincidono"; + warning_box(str); + } + else + { + tab.put("CODTAB", chiavedest); + int err = tab.read(); + if(err == NOERR) + { + if(yesno_box(TR("La destinazione esiste già, si desidera sovrasciverla?"))) + tab.put("R1", valuni); + tab.rewrite(); + } + else + { + tab.put("CODTAB", chiavedest); + tab.put("R1", valuni); + tab.write(); + } + } + tab.rewrite_write(); + } + } + riempi_sheet(); + msk.enable_default(); + msk.show_default(); +} + + //ON_FIELD_EVENT: metodo che gestisce gli eventi sui vari campi della maschera bool TRisoatt_msk::on_field_event(TOperable_field& f, TField_event e, long jolly) { - switch (f.dlg()) + switch (f.dlg()) { case DLG_NEWREC: if (e == fe_button) @@ -312,7 +465,7 @@ bool TRisoatt_msk::on_field_event(TOperable_field& f, TField_event e, long jolly return false; } break; - case DLG_DELREC: + case DLG_RESET: if(e == fe_button) { TSheet_field& sheet = sfield(F_SHEET); @@ -326,40 +479,12 @@ bool TRisoatt_msk::on_field_event(TOperable_field& f, TField_event e, long jolly return false; } break; - case DLG_OK: - if(e == fe_button && jolly == 1) + case DLG_COPY: { - TSheet_field& sheet = sfield(F_SHEET); - TToken_string& riga = sheet.row(sheet.items() - 1); - - TMask& msk = sheet.sheet_mask(); - const real& valuni = msk.get_real(S_VALUNI); - - if(valuni > ZERO) + if(e == fe_button) { - const char tipo = msk.get(S_RISOATT)[0]; - const TString& codice = tipo == 'R' ? msk.get(S_CODRIS) : msk.get(S_CODATT); - const TString& mese = msk.get(S_MESE); - const TString& tpora = msk.get(S_TPORA); - - riga.add(tipo, sheet.cid2index(S_RISOATT)); - switch(tipo) - { - case 'R': riga.add(codice, sheet.cid2index(S_CODRIS)); break; - case 'A': riga.add(codice, sheet.cid2index(S_CODATT)); break; - default : break; - } - riga.add(mese, sheet.cid2index(S_MESE)); - riga.add(tpora, sheet.cid2index(S_TPORA)); - riga.add(valuni.string(), sheet.cid2index(S_VALUNI)); - sheet.set_column_justify(sheet.cid2index(S_VALUNI), true); - sheet.check_row(sheet.items() - 1); - sheet.force_update(); - } - else - { - sheet.destroy(sheet.items() - 1); - sheet.force_update(); + copia_tutto(); + return false; } } break; @@ -368,8 +493,20 @@ bool TRisoatt_msk::on_field_event(TOperable_field& f, TField_event e, long jolly if(e == fe_button && jolly == 1) { TSheet_field& sheet = sfield(F_SHEET); - sheet.destroy(sheet.items() - 1); - sheet.force_update(); + TMask& msk = sheet.sheet_mask(); + const real& val = msk.get_real(S_VALUNI); + + if(sheet.selected() == sheet.items() - 1) + { + sheet.destroy(sheet.items() - 1); + sheet.force_update(); + } + else if(_valore > ZERO) + { + TToken_string& row = sheet.row(sheet.selected()); + row.add(_valore.string(), sheet.cid2index(S_VALUNI)); + _valore = ZERO; + } } } break; @@ -401,6 +538,7 @@ void TRisoatt_msk::esporta() const TRisoatt_msk::TRisoatt_msk() : TAutomask("ci0200a") { + _valore = ZERO; } /////////////////////////////////// diff --git a/ci/ci0200a.h b/ci/ci0200a.h index 1da19c455..efdf82a2b 100755 --- a/ci/ci0200a.h +++ b/ci/ci0200a.h @@ -10,6 +10,9 @@ #define F_DESATT 309 #define F_SHEET 310 +#define DLG_RESET 400 +#define DLG_COPY 401 + #define S_RISOATT 101 #define S_CODRIS 102 #define S_DESRIS 106 diff --git a/ci/ci0200a.uml b/ci/ci0200a.uml index c7ba5b0fc..135729e1e 100755 --- a/ci/ci0200a.uml +++ b/ci/ci0200a.uml @@ -14,10 +14,16 @@ BEGIN PICTURE TOOL_SAVEREC END -BUTTON DLG_DELREC 2 2 +BUTTON DLG_RESET 2 2 BEGIN - PROMPT 1 1 "Canc" - PICTURE TOOL_DELREC + PROMPT 1 1 "Azzera" + PICTURE TOOL_RESET +END + +BUTTON DLG_COPY +BEGIN + PROMPT 1 1 "Copia" + PICTURE TOOL_COPY END #include @@ -76,6 +82,7 @@ BEGIN DISPLAY "Anno@5" CODTAB[18,21] DISPLAY "Mese@5" CODTAB[22,23] DISPLAY "Tipo\nora@5" CODTAB[24,25] + OUTPUT F_RISOATT CODTAB[1,1] OUTPUT F_CODICE CODTAB[2,17] GROUP 1 CHECKTYPE NORMAL @@ -209,9 +216,9 @@ END LISTBOX S_MESE 10 BEGIN PROMPT 22 7 "Mese" - FLAGS "M" + ITEM "|" FILED CODTAB[21,2] - FLAGS "D" + FLAGS "MD" END STRING S_TPORA 2 @@ -225,10 +232,9 @@ BEGIN FLAGS "D" END -NUMBER S_VALUNI 6 3 +NUMBER S_VALUNI 6 2 BEGIN PROMPT 2 8 "Valore Unitario: " - CHEKTYPE NORMAL END ENDPAGE @@ -240,16 +246,17 @@ BEGIN PROMPT 1 1 "" END -BUTTON DLG_DELREC 2 2 +BUTTON DLG_RESET 2 2 BEGIN - PROMPT 2 1 "Elimina" + PROMPT 2 1 "Azzera" MESSAGE EXIT,K_DEL - PICTURE BMP_DELREC + PICTURE TOOL_RESET END BUTTON DLG_CANCEL 2 2 BEGIN - PROMPT 4 1 "" + PROMPT 4 1 "Annulla" + PICTURE TOOL_CANCEL END ENDPAGE