diff --git a/ci/ci2100.cpp b/ci/ci2100.cpp new file mode 100755 index 000000000..94d009cb2 --- /dev/null +++ b/ci/ci2100.cpp @@ -0,0 +1,583 @@ +#include +#include +#include +#include +#include +#include + +#include + +#include "ci2.h" +#include "cilib.h" +#include "ci2100a.h" +#include "../ve/velib.h" + + //////////////////////////////////////////// + //// CLASSE TRilevamento_prev_msk //// + //////////////////////////////////////////// + +//Classe TRilevamento_prev_msk +class TRilevamento_prev_msk : public TAutomask +{ + int _qtaore; +protected: + const real proponi_costo(const TMask& msk); + const real proponi_costo(TToken_string& riga); + + void carica_default(); + void riempi_sheet(); + void nuova_riga(); + void azzera_riga(TSheet_field& sheet); + void azzera_tutto(TSheet_field& sheet); + void registra(); + + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + +public: + void esegui() const; + TRilevamento_prev_msk(); +}; + +const real TRilevamento_prev_msk::proponi_costo(const TMask& msk) +{ + real costo = ZERO; + const char tipo = msk.get(S_RISOATT)[0]; + TString80 codice; + switch(tipo) + { + case 'R': codice = msk.get(S_CODRIS); break; + 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 TString4 tpora = msk.get(S_TPORA); + + const TRisoatt_key chiave(tipo, codice, anno, mese, tpora); + TModule_table roa("&ROA"); + roa.put("CODTAB", chiave); + int err = roa.read(); + + if(err == NOERR) + costo = roa.get_real("R1"); + else + { + TString8 tmp; tmp << anno << mese; + const long anme = atol(tmp); + TString query; + query << "USE &ROA\n" + << "SELECT I0<" << anme << "\n" + << "FROM CODTAB=" << tipo << codice.left_just(16) << "\n" + << "TO CODTAB=" << tipo << codice.left_just(16) << "\n" + << "BY I0\n"; + TISAM_recordset rec(query); + + if(rec.move_last()) + costo = rec.cursor()->curr().get_real("R1"); + } + return costo; +} + +const real TRilevamento_prev_msk::proponi_costo(TToken_string& riga) +{ + real costo = ZERO; + TSheet_field& sheet = sfield(F_SHEET); + const char tipo = riga.get_char(sheet.cid2index(S_RISOATT)); + TString80 codice; + switch(tipo) + { + case 'R': codice = riga.get(sheet.cid2index(S_CODRIS)); break; + case 'A': codice = riga.get(sheet.cid2index(S_CODATT)); break; + default : break; + } + + 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); + TModule_table roa("&ROA"); + roa.put("CODTAB", chiave); + int err = roa.read(); + + if(err == NOERR) + costo = roa.get_real("R1"); + else + { + TString8 tmp; tmp << anno << mese; + const long anme = atol(tmp); + TString query; + query << "USE &ROA\n" + << "SELECT I0<" << anme << "\n" + << "FROM CODTAB=" << tipo << codice.left_just(16) << "\n" + << "TO CODTAB=" << tipo << codice.left_just(16) << "\n" + << "BY I0\n"; + TISAM_recordset rec(query); + + if(rec.move_last()) + costo = rec.cursor()->curr().get_real("R1"); + } + return costo; +} + + +void TRilevamento_prev_msk::carica_default() +{ + //leggo dalla maschera i campi chiave di ricerca + const int anno = get_date(F_DADATA).year(); + const TString4 risoatt = get(F_RISOATT) == "T" ? "" : get(F_RISOATT); + TString4 damese; damese.format("%02d", get_date(F_DADATA).month()); + TString4 amese; amese.format("%02d", get_date(F_ADATA).month()); + 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': codice = get(F_CODICE); break; + case 'R': codice = get(F_CODRIS); break; + case 'A': codice = get(F_CODATT); break; + default: break; + } + + TString query; + query << "USE CIRILROA\n" + << "SELECT (BETWEEN(TIPORA,\"" << risoatt << "\",\"" << risoatt << "\"))&&" + << "(BETWEEN(CODICE,\"" << codice << "\",\"" << codice << "\"))&&" + << "(BETWEEN(ANNO," << anno << "," << anno << "))&&" + << "(BETWEEN(MESE,\"" << damese << "\",\"" << amese << "\"))&&" + << "(BETWEEN(TPORA,\"" << tpora << "\",\"" << tpora << "\"))&&" + << "(BETWEEN(CODCOSTO,\"" << codcosto << "\",\"" << codcosto << "\"))&&" + << "(BETWEEN(CODCMS,\"" << codcms << "\",\"" << codcms << "\"))&&" + << "(BETWEEN(CODFASE,\"" << codfase << "\",\"" << codfase << "\"))\n"; + + TString fromto = "TIPO=\"D\""; + if(risoatt != 'T') + { + fromto << " TIPORA=\"" << risoatt << "\""; + if(codice.full()) + { + fromto << " CODICE=\"" << codice << "\""; + if(anno > 0) + { + fromto << " ANNO=\"" << anno << "\""; + if(damese.full()) + { + fromto << " MESE=\"" << damese << "\""; + if(tpora.full()) + fromto << " TPORA=\"" << tpora << "\""; + } + } + } + } + + query << "FROM " << fromto << "\n" + << "TO " << fromto; + + TISAM_recordset def(query); + + TSheet_field& sheet = sfield(F_SHEET); + sheet.destroy(); + + const TDate da(1, get_date(F_DADATA).month(), get_date(F_DADATA).year()); + TDate a = da; a.set_day(a.last_day(da.month(), a.year())); + + //riempio lo sheet con i dati che soddisfano il filtro preparato prima + for(bool ok = def.move_first(); ok; ok = def.move_next()) + { + TRilevamento_ore rilore(def.cursor()->curr()); + TToken_string& riga = sheet.row(-1); + riga.add(rilore.tipora(), sheet.cid2index(S_RISOATT)); + switch(rilore.tipora()) + { + 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(rilore.dadata(), sheet.cid2index(S_DADATA)); + riga.add(rilore.adata(), sheet.cid2index(S_ADATA)); + 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(da, sheet.cid2index(S_DADATA)); + riga.add(a, sheet.cid2index(S_ADATA)); + riga.add(rilore.qtaore(), sheet.cid2index(S_QTAORE)); + riga.add(proponi_costo(riga).string(), sheet.cid2index(S_COSTO)); + } + sheet.force_update(); + +} + +//RIEMPI_SHEET: metodo che riempie lo sheet in base ai campi chiave +//compilati sulla maschera +void TRilevamento_prev_msk::riempi_sheet() +{ + //leggo dalla maschera i campi chiave di ricerca + const int anno = get_date(F_DADATA).year(); + const TString4 risoatt = get(F_RISOATT) == "T" ? "" : get(F_RISOATT); + TString4 damese; damese.format("%02d", get_date(F_DADATA).month()); + TString4 amese; amese.format("%02d", get_date(F_ADATA).month()); + 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': codice = get(F_CODICE); break; + case 'R': codice = get(F_CODRIS); break; + case 'A': codice = get(F_CODATT); break; + default: break; + } + + TString query; + query << "USE CIRILROA\n" + << "SELECT (BETWEEN(TIPORA,\"" << risoatt << "\",\"" << risoatt << "\"))&&" + << "(BETWEEN(CODICE,\"" << codice << "\",\"" << codice << "\"))&&" + << "(BETWEEN(ANNO," << anno << "," << anno << "))&&" + << "(BETWEEN(MESE,\"" << damese << "\",\"" << amese << "\"))&&" + << "(BETWEEN(TPORA,\"" << tpora << "\",\"" << tpora << "\"))&&" + << "(BETWEEN(CODCOSTO,\"" << codcosto << "\",\"" << codcosto << "\"))&&" + << "(BETWEEN(CODCMS,\"" << codcms << "\",\"" << codcms << "\"))&&" + << "(BETWEEN(CODFASE,\"" << codfase << "\",\"" << codfase << "\"))\n"; + + TString fromto = "TIPO=\"P\""; + if(risoatt != 'T') + { + fromto << " TIPORA=\"" << risoatt << "\""; + if(codice.full()) + { + fromto << " CODICE=\"" << codice << "\""; + if(anno > 0) + { + fromto << " ANNO=\"" << anno << "\""; + if(damese.full()) + { + fromto << " MESE=\"" << damese << "\""; + if(tpora.full()) + fromto << " TPORA=\"" << tpora << "\""; + } + } + } + } + + 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 = def.move_first(); ok; ok = def.move_next()) + { + TRilevamento_ore rilore(def.cursor()->curr()); + TToken_string& riga = sheet.row(-1); + riga.add(rilore.tipora(), sheet.cid2index(S_RISOATT)); + switch(rilore.tipora()) + { + 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(rilore.dadata(), sheet.cid2index(S_DADATA)); + riga.add(rilore.adata(), sheet.cid2index(S_ADATA)); + 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.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)); + } + sheet.force_update(); +} + +//NUOVA_RIGA: metodo che aggiunge una riga allo sheet +//tenendo conto dei campi chiave compilati in testata +void TRilevamento_prev_msk::nuova_riga() +{ + TSheet_field& sheet = sfield(F_SHEET); + sheet.row(-1); + sheet.select(sheet.items() - 1); + TMask& msk = sheet.sheet_mask(); + + //guardo il tipo risorsa / attrezzatura che sto ricercando + const char risoatt = get(F_RISOATT)[0] == 'T' ? 'R' : get(F_RISOATT)[0]; + TString4 tmp; tmp << risoatt; + msk.set(S_RISOATT, tmp); + msk.enable(S_RISOATT, get(F_RISOATT)[0] == 'T'); + + //leggo il codice corretto a seconda del tipo selezionato + switch(get(F_RISOATT)[0]) + { + case 'T': + msk.reset(S_CODRIS); msk.enable(S_CODRIS); + msk.reset(S_CODATT); msk.enable(S_CODATT); + break; + 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; + } + + msk.enable(S_DADATA, get(F_DADATA).empty()); + msk.set(S_DADATA, get(F_DADATA)); + + msk.enable(S_ADATA, get(F_ADATA).empty()); + msk.set(S_ADATA, get(F_ADATA)); + + msk.enable(S_TPORA, get(F_TPORA).empty()); + msk.set(S_TPORA, get(F_TPORA)); + + msk.enable(S_CODCOSTO, get(F_CODCOSTO).empty()); + msk.enable(S_CODCMS, get(F_CODCMS).empty()); + msk.enable(S_CODFASE, get(F_CODFASE).empty()); + + msk.set(S_QTAORE, 0L); + msk.set(S_COSTO, proponi_costo(msk)); + + //lancio la maschera di riga da compilare + if(msk.run() == K_ENTER) + { + const int qtaore = msk.get_int(S_QTAORE); + const real prezzo = msk.get_real(S_COSTO); + + 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 TString& codcosto = msk.get(S_CODCOSTO); + const TString& codcms = msk.get(S_CODCMS); + const TString& codfase = msk.get(S_CODFASE); + const TDate& dadata = msk.get_date(S_DADATA); + const TDate& adata = msk.get_date(S_ADATA); + + 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(dadata, sheet.cid2index(S_DADATA)); + riga.add(adata, sheet.cid2index(S_ADATA)); + riga.add(tpora, sheet.cid2index(S_TPORA)); + riga.add(codcosto, sheet.cid2index(S_CODCOSTO)); + riga.add(codcms, sheet.cid2index(S_CODCMS)); + riga.add(codfase, sheet.cid2index(S_CODFASE)); + riga.add(dadata, sheet.cid2index(S_DADATA)); + riga.add(adata, sheet.cid2index(S_ADATA)); + riga.add(qtaore, sheet.cid2index(S_QTAORE)); + riga.add(prezzo.string(), sheet.cid2index(S_COSTO)); + } + 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 +//(N.B.: le righe con valore unitario nullo verranno eliminate in fase di registrazione) +void TRilevamento_prev_msk::azzera_riga(TSheet_field& sheet) +{ + const int nriga = sheet.selected(); + TToken_string& row = sheet.row(nriga); + + row.add(0, sheet.cid2index(S_QTAORE)); + + TMask& msk = sheet.sheet_mask(); + _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 +//(N.B.: le righe con valore unitario nullo verranno eliminate in fase di registrazione) +void TRilevamento_prev_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_QTAORE)); + } +} + +//REGISTRA: metodo che salva nella tabella di modulo le +//righe dello sheet che hanno valore > 0, ed elimina quelle che hanno +//vaoler pari a zero, e poi ricarica lo sheet +void TRilevamento_prev_msk::registra() +{ + 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 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 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 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 qtaore = riga.get_int(sheet.cid2index(S_QTAORE)); + const TString& tmp = riga.get(sheet.cid2index(S_COSTO)); + const real costo(tmp); + + TString4 mese; mese.format("%02d", adata.month()); + + TRilevamento_ore rilroa('P', tipora, codice, adata.year(), mese, tpora); + if(!rilroa.empty() && qtaore == 0) + rilroa.remove(file); + else + { + TRilevamento_ore rilroa; + rilroa.set_tipo('P'); + rilroa.set_tipora(tipora); + rilroa.set_codice(codice); + rilroa.set_anno(adata.year()); + rilroa.set_mese(mese); + rilroa.set_tpora(tpora); + rilroa.set_codcosto(codcosto); + rilroa.set_codcms(codcms); + rilroa.set_codfase(codfase); + rilroa.set_dadata(dadata); + rilroa.set_adata(adata); + rilroa.set_qtaore(qtaore); + rilroa.set_costo(costo); + + int err = rilroa.rewrite_write(file); + } + } + riempi_sheet(); +} + +//ON_FIELD_EVENT: metodo che gestisce gli eventi sui vari campi della maschera +bool TRilevamento_prev_msk::on_field_event(TOperable_field& f, TField_event e, long jolly) +{ + switch (f.dlg()) + { + case DLG_DEFAULT: + if (e == fe_button) + { + carica_default(); + return false; + } + case DLG_CERCA: + if (e == fe_button) + { + riempi_sheet(); + return false; + } + case DLG_NEWREC: + if (e == fe_button) + { + nuova_riga(); + return false; + } + case DLG_SAVEREC: + if (e == fe_button) + { + registra(); + return false; + } + break; + case DLG_RESET: + if(e == fe_button) + { + TSheet_field& sheet = sfield(F_SHEET); + switch(jolly) + { + case 0: azzera_tutto(sheet); break; + case 1: azzera_riga(sheet); break; + default: break; + } + sheet.force_update(); + return false; + } + break; + case DLG_CANCEL: + if(e == fe_button && jolly == 1) + { + TSheet_field& sheet = sfield(F_SHEET); + TMask& msk = sheet.sheet_mask(); + const int qtaore = msk.get_int(S_QTAORE); + + if(sheet.selected() == sheet.items() - 1) + { + sheet.destroy(sheet.items() - 1); + sheet.force_update(); + } + else if(_qtaore > 0) + { + TToken_string& row = sheet.row(sheet.selected()); + row.add(_qtaore, sheet.cid2index(S_QTAORE)); + _qtaore = 0; + } + } + break; + case F_SHEET: + if (e == se_query_add) + { + send_key(K_SPACE, DLG_NEWREC); + return false; + } + default: break; + } + return true; +} + +void TRilevamento_prev_msk::esegui() const +{ +} + +TRilevamento_prev_msk::TRilevamento_prev_msk() + : TAutomask("ci2100a") +{ + _qtaore = 0; +} + + //////////////////////////////////////////// + //// CLASSE TRilevamento_prev_app //// + //////////////////////////////////////////// + +//classe TRilevamento_prev_app +class TRilevamento_prev_app : public TSkeleton_application +{ +public: + virtual void main_loop(); +}; + +void TRilevamento_prev_app::main_loop() +{ + TRilevamento_prev_msk msk; + while (msk.run() != K_QUIT) + msk.esegui(); +} + +int ci2100(int argc, char *argv[]) +{ + TRilevamento_prev_app a; + a.run (argc, argv, TR("Rilevamento Ore Preventivo")); + return TRUE; +} \ No newline at end of file diff --git a/ci/ci2100a.h b/ci/ci2100a.h new file mode 100755 index 000000000..cc0f53d46 --- /dev/null +++ b/ci/ci2100a.h @@ -0,0 +1,32 @@ +//Campi maschera ci0600a +#define F_DADATA 301 +#define F_ADATA 302 +#define F_TPORA 303 +#define F_RISOATT 304 +#define F_CODICE 305 +#define F_CODRIS 306 +#define F_DESRIS 307 +#define F_CODATT 308 +#define F_DESATT 309 +#define F_CODCOSTO 310 +#define F_CODCMS 311 +#define F_CODFASE 312 +#define F_SHEET 313 + +#define DLG_RESET 400 +#define DLG_CERCA 401 +#define DLG_DEFAULT 402 + +#define S_RISOATT 101 +#define S_CODRIS 102 +#define S_DESRIS 111 +#define S_CODATT 202 +#define S_DESATT 211 +#define S_DADATA 103 +#define S_ADATA 104 +#define S_TPORA 105 +#define S_CODCOSTO 106 +#define S_CODCMS 107 +#define S_CODFASE 108 +#define S_QTAORE 109 +#define S_COSTO 110 \ No newline at end of file diff --git a/ci/ci2100a.uml b/ci/ci2100a.uml new file mode 100755 index 000000000..12bc62cc5 --- /dev/null +++ b/ci/ci2100a.uml @@ -0,0 +1,311 @@ +#include "ci2100a.h" + +TOOLBAR "topbar" 0 0 0 2 + +BUTTON DLG_DEFAULT +BEGIN + PROMPT 1 1 "Default" + PICTURE TOOL_SMILE +END + +BUTTON DLG_CERCA +BEGIN + PROMPT 1 1 "Cerca" + PICTURE TOOL_FINDREC +END + +BUTTON DLG_NEWREC 2 2 +BEGIN + PROMPT 1 1 "Nuovo" + PICTURE TOOL_NEWREC +END + +BUTTON DLG_SAVEREC 2 2 +BEGIN + PROMPT 1 1 "Salva" + PICTURE TOOL_SAVEREC +END + +BUTTON DLG_RESET 2 2 +BEGIN + PROMPT 1 1 "Azzera" + PICTURE TOOL_RESET +END + +#include + +ENDPAGE + +PAGE "Risorse e Attrezzature" 0 2 0 0 + +GROUPBOX DLG_NULL 78 15 +BEGIN + PROMPT 1 0 "@bFiltro" +END + +GROUPBOX DLG_NULL 76 8 +BEGIN + PROMPT 2 1 "@bDati Risorsa - Attrezzatura" +END + +DATE F_DADATA +BEGIN + PROMPT 3 2 "Dal" +END + +DATE F_ADATA +BEGIN + PROMPT 23 2 "Al" +END + +STRING F_TPORA 2 +BEGIN + PROMPT 41 2 "Tipo ora " + USE &ORE + INPUT CODTAB F_TPORA + DISPLAY "Codice@16" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_TPORA CODTAB +END + +RADIOBUTTON F_RISOATT 1 74 +BEGIN + PROMPT 3 3 "@bTipo: " + ITEM "T|Tutti" + MESSAGE SHOW,1@|HIDE,2@|HIDE,3@ + ITEM "R|Risorsa" + MESSAGE HIDE,1@|SHOW,2@|HIDE,3@ + ITEM "A|Attrezzatura" + MESSAGE HIDE,1@|HIDE,2@|SHOW,3@ + FLAGS "Z" +END + +STRING F_CODICE 16 +BEGIN + PROMPT 3 6 "Codice: " + 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 + +STRING F_CODRIS 16 +BEGIN + PROMPT 3 6 "Codice: " + USE RSS + INPUT CODTAB F_CODRIS + DISPLAY "Codice@16" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODRIS CODTAB + OUTPUT F_DESRIS S0 + GROUP 2 + CHECKTYPE NORMAL +END + +STRING F_DESRIS 50 +BEGIN + PROMPT 11 7 "" + FLAGS "D" + GROUP 2 +END + +STRING F_CODATT 16 +BEGIN + PROMPT 3 6 "Codice: " + FIELD CODTAB[1,16] + USE ATR + INPUT CODTAB F_CODATT + DISPLAY "Codice@16" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODATT CODTAB + OUTPUT F_DESATT S0 + GROUP 3 + CHECKTYPE NORMAL +END + +STRING F_DESATT 50 +BEGIN + PROMPT 11 7 "" + FLAGS "D" + GROUP 3 +END + +GROUPBOX DLG_NULL 76 5 +BEGIN + PROMPT 2 9 "@bDati Analitici" +END + +STRING F_CODCOSTO 20 +BEGIN + PROMPT 3 10 "Centro di costo" +END + +STRING F_CODCMS 20 +BEGIN + PROMPT 3 11 "Commessa " +END + +STRING F_CODFASE 20 +BEGIN + PROMPT 3 12 "Fase " +END + +SPREADSHEET F_SHEET -10 0 +BEGIN + PROMPT 1 15 "" + ITEM "Tipo" + ITEM "Codice@16" + ITEM "Dal@10" + ITEM "Al@10" + ITEM "Tipo\nOra@5" + ITEM "Centro di\nCosto@20" + ITEM "Codice\nCommessa@20" + ITEM "Codice\nFase@10" + ITEM "Qta\nOre@5" + ITEM "Costo@6" +END + +ENDPAGE +ENDMASK + +PAGE "Dettaglio Risorsa - Attrezzatura" -1 -1 78 13 + +GROUPBOX DLG_NULL 76 12 +BEGIN + PROMPT 1 1 "@bDati Risorsa - Attrezzatura" +END + +RADIOBUTTON S_RISOATT 1 74 +BEGIN + PROMPT 2 2 "@bTipo: " + FIELD CODTAB[0,1] + ITEM "R|Risorsa" + MESSAGE SHOW,1@|HIDE,2@|RESET,2@ + ITEM "A|Attrezzatura" + MESSAGE HIDE,1@|SHOW,2@|RESET,1@ + FLAGS "GDZ" +END + +STRING S_CODRIS 16 +BEGIN + PROMPT 2 5 "Codice Risorsa " + FIELD CODTAB[1,16] + USE RSS + INPUT CODTAB S_CODRIS + DISPLAY "Codice@16" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT S_CODRIS CODTAB + OUTPUT S_DESRIS S0 + CHECKTYPE REQUIRED + FLAGS "GD" + GROUP 1 +END + +STRING S_DESRIS 50 +BEGIN + PROMPT 2 6 "Descrizione " + CHECKTYPE NORMAL + FLAGS "D" + GROUP 1 +END + +STRING S_CODATT 16 +BEGIN + PROMPT 2 5 "Codice Attrezzatura " + FIELD CODTAB[1,16] + USE ATR + INPUT CODTAB S_CODATT + DISPLAY "Codice@16" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT S_CODATT CODTAB + OUTPUT S_DESATT S0 + CHECKTYPE REQUIRED + FLAGS "GD" + GROUP 2 +END + +STRING S_DESATT 50 +BEGIN + PROMPT 2 6 "Descrizione " + CHECKTYPE NORMAL + FLAGS "D" + GROUP 2 +END + +DATE S_DADATA +BEGIN + PROMPT 2 7 "Dal " +END + +DATE S_ADATA +BEGIN + PROMPT 22 7 "Al " +END + +STRING S_TPORA 2 +BEGIN + PROMPT 59 7 "Tipo ora " + USE &ORE + INPUT CODTAB S_TPORA + DISPLAY "Codice@16" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT S_TPORA CODTAB + FLAGS "D" +END + +STRING S_CODCOSTO 20 +BEGIN + PROMPT 2 8 "Centro di Costo " +END + +STRING S_CODCMS 20 +BEGIN + 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 + +TOOLBAR "" 0 0 0 2 + +BUTTON DLG_OK 2 2 +BEGIN + PROMPT 1 1 "" +END + +BUTTON DLG_RESET 2 2 +BEGIN + PROMPT 2 1 "Azzera" + MESSAGE EXIT,K_DEL + PICTURE TOOL_RESET +END + +BUTTON DLG_CANCEL 2 2 +BEGIN + PROMPT 4 1 "Annulla" + PICTURE TOOL_CANCEL +END + +ENDPAGE +ENDMASK