From 97416deba521ce05751e8f56294418424999dd18 Mon Sep 17 00:00:00 2001 From: luca83 Date: Sat, 24 Jul 2010 07:19:41 +0000 Subject: [PATCH] Patch level : 10.0 Files correlati : ci2 Ricompilazione Demo : [ ] Commento : Aggiunto il programma di rilevamento ore preventivo (da creare il nuovo progetto) Aggiunto il programma di salvataggio dei default git-svn-id: svn://10.65.10.50/branches/R_10_00@20696 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ci/ci0600.cpp | 273 +++++++++++++++++++++---------------------------- ci/ci0600a.h | 2 +- ci/ci0600a.uml | 73 ++++++++----- ci/ci2.cpp | 13 +++ ci/ci2.h | 6 ++ 5 files changed, 185 insertions(+), 182 deletions(-) create mode 100755 ci/ci2.cpp create mode 100755 ci/ci2.h diff --git a/ci/ci0600.cpp b/ci/ci0600.cpp index daf8394c4..588ebbec4 100755 --- a/ci/ci0600.cpp +++ b/ci/ci0600.cpp @@ -19,8 +19,7 @@ //Classe TDef_risoatt_msk class TDef_risoatt_msk : public TAutomask { - int _preventivo; - int _consuntivo; + int _qtaore; protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); @@ -39,105 +38,82 @@ public: //compilati sulla maschera void TDef_risoatt_msk::riempi_sheet() { - //l'anno è l'unico campo obbligatorio - const TString4 anno = get(F_ANNO); - - //guardo il tipo risorsa / attrezzatura che sto ricercando (se Tutti setto a '?') - char risoatt; - if(get(F_RISOATT)[0] == 'T') - risoatt = '?'; - else - risoatt = get(F_RISOATT)[0]; - - //leggo il codice corretto a seconda del tipo selezionato (se vuoto setto a 16 caratteri '?') + //leggo dalla maschera i campi chiave di ricerca + const TString4 anno = get(F_ANNO); + const TString4 risoatt = get(F_RISOATT) == "T" ? "" : get(F_RISOATT); + const TString4 mese = get(F_MESE); + const TString4 tpora = get(F_TPORA); + const TString80 codcosto = get(F_CODCOSTO); + const TString80 codcms = get(F_CODCMS); + const TString16 codfase = get(F_CODFASE); TString16 codice; switch(get(F_RISOATT)[0]) { - case 'T': - if (get(F_CODICE).empty()) - codice.fill('?', 16); - else - { - codice = get(F_CODICE); - codice.left_just(16); - } - break; - case 'R': - if (get(F_CODRIS).empty()) - codice.fill('?', 16); - else - { - codice = get(F_CODRIS); - codice.left_just(16); - } - break; - case 'A': - if (get(F_CODATT).empty()) - codice.fill('?', 16); - else - { - codice = get(F_CODATT); - codice.left_just(16); - } - break; + case 'T': codice = get(F_CODICE); break; + case 'R': codice = get(F_CODRIS); break; + case 'A': codice = get(F_CODATT); break; default: break; } - //leggo il mese (se vuoto setto a '??') - TString4 mese; - if (get(F_MESE).empty()) - mese.fill('?', 2); - else - mese = get(F_MESE); - - //leggo il tipo ora (se vuoto setto a '??') - TString4 tpora; - if (get(F_TPORA).empty()) - tpora.fill('?', 2); - else - tpora = get(F_TPORA); - - //preparo il filtro della query - TString filtro; - filtro << risoatt << codice << anno << mese << tpora; - TString query; - query << "USE &DRA\n" - << "SELECT CODTAB?=\"" << filtro << "\""; - if(risoatt != '?') + query << "USE CIRILROA\n" + << "SELECT (BETWEEN(TIPORA,\"" << risoatt << "\",\"" << risoatt << "\"))&&" + << "(BETWEEN(CODICE,\"" << codice << "\",\"" << codice << "\"))&&" + << "(BETWEEN(ANNO,\"" << anno << "\",\"" << anno << "\"))&&" + << "(BETWEEN(MESE,\"" << mese << "\",\"" << mese << "\"))&&" + << "(BETWEEN(TPORA,\"" << tpora << "\",\"" << tpora << "\"))&&" + << "(BETWEEN(CODCOSTO,\"" << codcosto << "\",\"" << codcosto << "\"))&&" + << "(BETWEEN(CODCMS,\"" << codcms << "\",\"" << codcms << "\"))&&" + << "(BETWEEN(CODFASE,\"" << codcms << "\",\"" << codfase << "\"))\n"; + + TString fromto = "TIPO=\"D\""; + if(risoatt != 'T') { - query << "\n" - << "FROM CODTAB=" << risoatt << "\n" - << "TO CODTAB=" << risoatt << "\n"; + fromto << " TIPORA=\"" << risoatt << "\""; + if(codice.full()) + { + fromto << " CODICE=\"" << codice << "\""; + if(anno.full()) + { + fromto << " ANNO=\"" << anno << "\""; + if(mese.full()) + { + fromto << " MESE=\"" << mese << "\""; + if(tpora.full()) + fromto << " TPORA=\"" << tpora << "\""; + } + } + } } - TISAM_recordset dra(query); + query << "FROM " << fromto << "\n" + << "TO " << fromto; + + TISAM_recordset def(query); TSheet_field& sheet = sfield(F_SHEET); sheet.destroy(); //riempio lo sheet con i dati che soddisfano il filtro preparato prima - for(bool ok = dra.move_first(); ok; ok = dra.move_next()) + for(bool ok = def.move_first(); ok; ok = def.move_next()) { - TDisp_risoatt disp(dra.cursor()->curr()); - TRisoatt_key drakey(disp.chiave()); + TRilevamento_ore rilore(def.cursor()->curr()); TToken_string& riga = sheet.row(-1); - riga.add(drakey.tipo(), sheet.cid2index(S_RISOATT)); - TString16 cod = drakey.cod(); - cod.trim(); - switch(drakey.tipo()) + riga.add(rilore.tipora(), sheet.cid2index(S_RISOATT)); + switch(rilore.tipora()) { - case 'A': riga.add(cod, sheet.cid2index(S_CODATT)); break; - case 'R': riga.add(cod, sheet.cid2index(S_CODRIS)); break; + case 'R': riga.add(rilore.codice(), sheet.cid2index(S_CODRIS)); break; + case 'A': riga.add(rilore.codice(), sheet.cid2index(S_CODATT)); break; default : break; } - riga.add(drakey.anno(), sheet.cid2index(S_ANNO)); - riga.add(drakey.mese(), sheet.cid2index(S_MESE)); - riga.add(drakey.tpora(), sheet.cid2index(S_TPORA)); - //riga.add(disp.ore_prev(), sheet.cid2index(S_OREPREV)); - //riga.add(disp.ore_cons(), sheet.cid2index(S_ORECONS)); - - sheet.check_row(sheet.items() - 1); + riga.add(rilore.anno(), sheet.cid2index(S_ANNO)); + riga.add(rilore.mese(), sheet.cid2index(S_MESE)); + riga.add(rilore.tpora(), sheet.cid2index(S_TPORA)); + riga.add(rilore.codcosto(), sheet.cid2index(S_CODCOSTO)); + riga.add(rilore.codcms(), sheet.cid2index(S_CODCMS)); + riga.add(rilore.codfase(), sheet.cid2index(S_CODFASE)); + riga.add(rilore.qtaore(), sheet.cid2index(S_QTAORE)); + riga.add(rilore.costo().string(), sheet.cid2index(S_COSTO)); } sheet.force_update(); @@ -183,21 +159,23 @@ void TDef_risoatt_msk::nuova_riga() msk.enable(S_TPORA, get(F_TPORA).empty()); msk.set(S_TPORA, get(F_TPORA)); - //msk.set(S_OREPREV, 0L); - //msk.set(S_ORECONS, 0L); + msk.set(S_QTAORE, 0L); //lancio la maschera di riga da compilare if(msk.run() == K_ENTER) { - const int oreprev = 0/*msk.get_int(S_OREPREV)*/; - const int orecons = 0/*msk.get_int(S_ORECONS)*/; + const int qtaore = msk.get_int(S_QTAORE); + const real prezzo = msk.get_real(S_COSTO); - if(oreprev > 0 && orecons > 0) + if(qtaore > 0) { - 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); + 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); + const TString& codcosto = msk.get(S_CODCOSTO); + const TString& codcms = msk.get(S_CODCMS); + const TString& codfase = msk.get(S_CODFASE); TToken_string& riga = sheet.row(sheet.items() - 1); riga.add(tipo, sheet.cid2index(S_RISOATT)); @@ -210,8 +188,11 @@ void TDef_risoatt_msk::nuova_riga() riga.add(get_int(F_ANNO), sheet.cid2index(S_ANNO)); riga.add(mese, sheet.cid2index(S_MESE)); riga.add(tpora, sheet.cid2index(S_TPORA)); - //riga.add(oreprev, sheet.cid2index(S_OREPREV)); - //riga.add(orecons, sheet.cid2index(S_ORECONS)); + riga.add(codcosto, sheet.cid2index(S_CODCOSTO)); + riga.add(codcms, sheet.cid2index(S_CODCMS)); + riga.add(codfase, sheet.cid2index(S_CODFASE)); + riga.add(qtaore, sheet.cid2index(S_QTAORE)); + riga.add(prezzo.string(), sheet.cid2index(S_COSTO)); } else { @@ -232,14 +213,11 @@ void TDef_risoatt_msk::azzera_riga(TSheet_field& sheet) const int nriga = sheet.selected(); TToken_string& row = sheet.row(nriga); - //row.add(0, sheet.cid2index(S_OREPREV)); - //row.add(0, sheet.cid2index(S_ORECONS)); + row.add(0, sheet.cid2index(S_QTAORE)); TMask& msk = sheet.sheet_mask(); - //_preventivo = msk.get_int(S_OREPREV); - //_consuntivo = msk.get_int(S_ORECONS); - //msk.set(S_OREPREV, 0L); - //msk.set(S_ORECONS, 0L); + _qtaore = msk.get_int(S_QTAORE); + msk.set(S_QTAORE, 0L); } //AZZERA_TUTTO: metodo che azzera il valore unitario di tutte le righe visualizzate sullo sheet @@ -249,8 +227,7 @@ void TDef_risoatt_msk::azzera_tutto(TSheet_field& sheet) FOR_EACH_SHEET_ROW(sheet, r, row) { TToken_string& row = sheet.row(r); - //row.add(0, sheet.cid2index(S_OREPREV)); - //row.add(0, sheet.cid2index(S_ORECONS)); + row.add(0, sheet.cid2index(S_QTAORE)); } } @@ -259,54 +236,46 @@ void TDef_risoatt_msk::azzera_tutto(TSheet_field& sheet) //vaoler pari a zero, e poi ricarica lo sheet void TDef_risoatt_msk::registra() { - TLocalisamfile tabmod(LF_TABMOD); - TModule_table tab("&DRA"); - const int anno = get_int(F_ANNO); + TLocalisamfile file(LF_CIRILROA); TSheet_field& sheet = sfield(F_SHEET); FOR_EACH_SHEET_ROW(sheet, r, row) { - TToken_string& riga = *(TToken_string*)row; - const char tipo = riga.get_char(sheet.cid2index(S_RISOATT)); - const TString16 codice = tipo == 'R' ? riga.get(sheet.cid2index(S_CODRIS)) : riga.get(sheet.cid2index(S_CODATT)); + TToken_string& riga = *(TToken_string*)row; + const char tipora = riga.get_char(sheet.cid2index(S_RISOATT)); + const TString16 codice = tipora == 'R' ? riga.get(sheet.cid2index(S_CODRIS)) : riga.get(sheet.cid2index(S_CODATT)); + const int anno = riga.get_int(sheet.cid2index(S_ANNO)); const TString4 mese = riga.get(sheet.cid2index(S_MESE)); const TString4 tpora = riga.get(sheet.cid2index(S_TPORA)); + const TString80 codcosto = riga.get(sheet.cid2index(S_CODCOSTO)); + const TString80 codcms = riga.get(sheet.cid2index(S_CODCMS)); + const TString80 codfase = riga.get(sheet.cid2index(S_CODFASE)); - const int oreprev = 0/*riga.get_int(sheet.cid2index(S_OREPREV))*/; - const int orecons = 0/*riga.get_int(sheet.cid2index(S_ORECONS))*/; - - const TString80 descr = tipo == 'R' ? riga.get(sheet.cid2index(S_DESRIS)) : riga.get(sheet.cid2index(S_DESATT)); + const int qtaore = riga.get_int(sheet.cid2index(S_QTAORE)); + const TString& tmp = riga.get(sheet.cid2index(S_COSTO)); + const real costo(tmp); - TString16 cod = codice; - cod.left_just(16); - - TString80 chiave; - chiave << tipo << cod << anno << mese << tpora; - - tab.put("CODTAB", chiave); - int err = tab.read(); - - if(err == NOERR) - { - if(oreprev == 0 && orecons == 0) - tab.remove(); - else - { - tab.put("I0", oreprev); - tab.put("I1", orecons); - tab.rewrite(); - } - } + TRilevamento_ore rilroa('D', tipora, codice, anno, mese, tpora); + if(!rilroa.empty() && qtaore == 0) + rilroa.remove(file); else { - tab.put("CODTAB", chiave); - tab.put("S0", descr); - tab.put("I0", oreprev); - tab.put("I1", orecons); - tab.write(); + TRilevamento_ore rilroa; + rilroa.set_tipo('D'); + rilroa.set_tipora(tipora); + rilroa.set_codice(codice); + rilroa.set_anno(anno); + rilroa.set_mese(mese); + rilroa.set_tpora(tpora); + rilroa.set_codcosto(codcosto); + rilroa.set_codcms(codcms); + rilroa.set_codfase(codfase); + rilroa.set_qtaore(qtaore); + rilroa.set_costo(costo); + + int err = rilroa.rewrite_write(file); } } - tab.rewrite_write(); riempi_sheet(); } @@ -315,6 +284,12 @@ bool TDef_risoatt_msk::on_field_event(TOperable_field& f, TField_event e, long j { switch (f.dlg()) { + case DLG_CERCA: + if (e == fe_button) + { + riempi_sheet(); + return false; + } case DLG_NEWREC: if (e == fe_button) { @@ -347,34 +322,21 @@ bool TDef_risoatt_msk::on_field_event(TOperable_field& f, TField_event e, long j { TSheet_field& sheet = sfield(F_SHEET); TMask& msk = sheet.sheet_mask(); - //const int oreprev = msk.get_int(S_OREPREV); - //const int orecons = msk.get_int(S_ORECONS); + const int qtaore = msk.get_int(S_QTAORE); if(sheet.selected() == sheet.items() - 1) { sheet.destroy(sheet.items() - 1); sheet.force_update(); } - else if(_preventivo > 0 && _consuntivo > 0) + else if(_qtaore > 0) { TToken_string& row = sheet.row(sheet.selected()); - //row.add(_preventivo, sheet.cid2index(S_OREPREV)); - //row.add(_consuntivo, sheet.cid2index(S_ORECONS)); - _preventivo = 0; - _consuntivo = 0; + row.add(_qtaore, sheet.cid2index(S_QTAORE)); + _qtaore = 0; } } break; - case F_ANNO: - case F_MESE: - case F_RISOATT: - case F_CODICE: - case F_CODRIS: - case F_CODATT: - case F_TPORA: - if (e == fe_init || e == fe_modify) - riempi_sheet(); - break; case F_SHEET: if (e == se_query_add) { @@ -391,10 +353,9 @@ void TDef_risoatt_msk::esegui() const } TDef_risoatt_msk::TDef_risoatt_msk() - : TAutomask("ci0600a") + : TAutomask("ci0600a") { - _preventivo = 0; - _consuntivo = 0; + _qtaore = 0; } //////////////////////////////////////// diff --git a/ci/ci0600a.h b/ci/ci0600a.h index 293aed3a7..f698c0967 100755 --- a/ci/ci0600a.h +++ b/ci/ci0600a.h @@ -14,7 +14,7 @@ #define F_SHEET 313 #define DLG_RESET 400 -#define DLG_SEARCH 401 +#define DLG_CERCA 401 #define S_RISOATT 101 #define S_CODRIS 102 diff --git a/ci/ci0600a.uml b/ci/ci0600a.uml index 23376a026..9f433d9c7 100755 --- a/ci/ci0600a.uml +++ b/ci/ci0600a.uml @@ -2,6 +2,12 @@ TOOLBAR "topbar" 0 0 0 2 +BUTTON DLG_CERCA +BEGIN + PROMP 1 1 "Cerca" + PICTURE TOOL_FINDREC +END + BUTTON DLG_NEWREC 2 2 BEGIN PROMPT 1 1 "Nuovo" @@ -26,7 +32,7 @@ ENDPAGE PAGE "Risorse e Attrezzature" 0 2 0 0 -GROUPBOX DLG_NULL 78 12 +GROUPBOX DLG_NULL 78 15 BEGIN PROMPT 1 0 "@bFiltro" END @@ -39,7 +45,6 @@ END NUMBER F_ANNO 4 BEGIN PROMPT 3 2 "Anno " - CHECTYPE REQUIRED FLAGS "A" END @@ -60,7 +65,7 @@ BEGIN OUTPUT F_TPORA CODTAB END -RADIOBUTTON F_RISOATT 1 76 +RADIOBUTTON F_RISOATT 1 74 BEGIN PROMPT 3 3 "@bTipo: " ITEM "T|Tutti" @@ -75,14 +80,15 @@ END STRING F_CODICE 16 BEGIN PROMPT 3 6 "Codice: " - USE &DRA - DISPLAY "Tipo@5" CODTAB[1,1] - DISPALY "Codice@16" CODTAB[2,17] - 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] + USE CIRILROA + SELECT TIPO='D' + DISPLAY "Tipo@5" TIPORA + DISPALY "Codice@16" CODICE + DISPLAY "Anno@5" ANNO + DISPLAY "Mese@5" MESE + DISPLAY "Tipo\nora@5" TPORA + OUTPUT F_RISOATT TIPORA + OUTPUT F_CODICE CODICE GROUP 1 CHECKTYPE NORMAL END @@ -130,35 +136,37 @@ END GROUPBOX DLG_NULL 76 5 BEGIN - PROMPT 13 1 "@bDati Risorsa - Attrezzatura" + PROMPT 2 9 "@bDati Analitici" END STRING F_CODCOSTO 20 BEGIN - PROMPT 14 2 "Centro di costo" + PROMPT 3 10 "Centro di costo" END STRING F_CODCMS 20 BEGIN - PROMPT 15 2 "Commessa" + PROMPT 3 11 "Commessa " END STRING F_CODFASE 20 BEGIN - PROMPT 16 2 "Fase" + PROMPT 3 12 "Fase " END -SPREADSHEET F_SHEET -15 0 +SPREADSHEET F_SHEET -10 0 BEGIN - PROMPT 1 8 "" + PROMPT 1 15 "" ITEM "Tipo" ITEM "Codice@16" ITEM "Anno" ITEM "Mese" ITEM "Tipo\nOra@5" - ITEM "Ore\npreventivo@12" - ITEM "Ore\nconsuntivo@12" - ITEM "Descrizione@50" + ITEM "Centro di\nCosto@20" + ITEM "Codice\nCommessa@20" + ITEM "Codice\nFase@10" + ITEM "Qta\nOre@5" + ITEM "Costo@6" END ENDPAGE @@ -166,7 +174,7 @@ ENDMASK PAGE "Dettaglio Risorsa - Attrezzatura" -1 -1 78 13 -GROUPBOX DLG_NULL 76 9 +GROUPBOX DLG_NULL 76 12 BEGIN PROMPT 1 1 "@bDati Risorsa - Attrezzatura" END @@ -253,14 +261,29 @@ BEGIN FLAGS "D" END -NUMBER S_OREPREV 6 +STRING S_CODCOSTO 20 BEGIN - PROMPT 2 8 "Ore a Preventivo: " + PROMPT 2 8 "Centro di Costo " END -NUMBER S_ORECONS 6 +STRING S_CODCMS 20 BEGIN - PROMPT 30 8 "Ore a Consuntivo: " + PROMPT 2 9 "Codice Commessa " +END + +STRING S_CODFASE 20 +BEGIN + PROMPT 2 10 "Codice Fase " +END + +NUMBER S_QTAORE 6 +BEGIN + PROMPT 2 11 "Quantità ore " +END + +NUMBER S_COSTO 6 2 +BEGIN + PROMPT 30 11 "Prezzo " END ENDPAGE diff --git a/ci/ci2.cpp b/ci/ci2.cpp new file mode 100755 index 000000000..13cf79cf0 --- /dev/null +++ b/ci/ci2.cpp @@ -0,0 +1,13 @@ +#include +#include "ci2.h" + +int main(int argc, char** argv) +{ + const int op = (argc > 1) ? argv[1][1] - '0' : 0; + switch (op) + { + case 0 : ci2100(argc,argv); break; // Rilevamento preventivi + default: ci2100(argc,argv); break; // Rilevamento preventivi + } + return 0; +} diff --git a/ci/ci2.h b/ci/ci2.h new file mode 100755 index 000000000..7d84d75b7 --- /dev/null +++ b/ci/ci2.h @@ -0,0 +1,6 @@ +#ifndef __CI0_H +#define __CI0_H + +int ci2100(int argc, char* argv[]); // Rilevamento preventivi + +#endif // __CI0_H