diff --git a/ci/ci2.cpp b/ci/ci2.cpp index 13cf79cf0..6820ae7ba 100755 --- a/ci/ci2.cpp +++ b/ci/ci2.cpp @@ -7,6 +7,7 @@ int main(int argc, char** argv) switch (op) { case 0 : ci2100(argc,argv); break; // Rilevamento preventivi + case 1 : ci2200(argc,argv); break; // Rilevamento consuntivo default: ci2100(argc,argv); break; // Rilevamento preventivi } return 0; diff --git a/ci/ci2.h b/ci/ci2.h index 7d84d75b7..cdfa32597 100755 --- a/ci/ci2.h +++ b/ci/ci2.h @@ -2,5 +2,6 @@ #define __CI0_H int ci2100(int argc, char* argv[]); // Rilevamento preventivi +int ci2200(int argc, char* argv[]); // Rilevamento consuntivi #endif // __CI0_H diff --git a/ci/ci2200.cpp b/ci/ci2200.cpp new file mode 100755 index 000000000..3e53b3ad6 --- /dev/null +++ b/ci/ci2200.cpp @@ -0,0 +1,518 @@ +#include +#include +#include +#include +#include +#include + +#include + +#include "ci2.h" +#include "cilib.h" +#include "ci2200a.h" +#include "../ve/velib.h" + + //////////////////////////////////////////// + //// CLASSE TRilevamento_cons_msk //// + //////////////////////////////////////////// + +//Classe TRilevamento_cons_msk +class TRilevamento_cons_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_cons_msk(); +}; + +const real TRilevamento_cons_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_cons_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_cons_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_cons_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_cons_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_cons_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_cons_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_cons_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('C', tipora, codice, adata.year(), mese, tpora); + if(!rilroa.empty() && qtaore == 0) + rilroa.remove(file); + else + { + TRilevamento_ore rilroa; + rilroa.set_tipo('C'); + 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_cons_msk::on_field_event(TOperable_field& f, TField_event e, long jolly) +{ + switch (f.dlg()) + { + default: break; + } + return true; +} + +void TRilevamento_cons_msk::esegui() const +{ +} + +TRilevamento_cons_msk::TRilevamento_cons_msk() + : TAutomask("ci2200a") +{ + _qtaore = 0; +} + + //////////////////////////////////////////// + //// CLASSE TRilevamento_cons_app //// + //////////////////////////////////////////// + +//classe TRilevamento_cons_app +class TRilevamento_cons_app : public TSkeleton_application +{ +public: + virtual void main_loop(); +}; + +void TRilevamento_cons_app::main_loop() +{ + TRilevamento_cons_msk msk; + while (msk.run() != K_QUIT) + msk.esegui(); +} + +int ci2200(int argc, char *argv[]) +{ + TRilevamento_cons_app a; + a.run (argc, argv, TR("Rilevamento Ore Consuntivo")); + return TRUE; +} \ No newline at end of file diff --git a/ci/ci2200a.h b/ci/ci2200a.h new file mode 100755 index 000000000..607ef3696 --- /dev/null +++ b/ci/ci2200a.h @@ -0,0 +1,64 @@ +//Campi maschera ci0600a +#define F_ANNO 301 +#define F_MESE 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_CALENDARIO 313 +#define F_SHEET 314 + +#define DLG_RESET 900 +#define DLG_CERCA 901 +#define DLG_DEFAULT 902 + +#define C_CODCOSTO 101 +#define C_CODCMS 102 +#define C_CODFASE 103 +#define C_1 104 +#define C_2 105 +#define C_3 106 +#define C_4 107 +#define C_5 108 +#define C_6 109 +#define C_7 110 +#define C_8 111 +#define C_9 112 +#define C_10 113 +#define C_11 114 +#define C_12 115 +#define C_13 116 +#define C_14 117 +#define C_15 118 +#define C_16 119 +#define C_17 120 +#define C_18 121 +#define C_19 122 +#define C_20 123 +#define C_21 124 +#define C_22 125 +#define C_23 126 +#define C_24 127 +#define C_25 128 +#define C_26 129 +#define C_27 130 +#define C_28 131 +#define C_29 132 +#define C_30 133 +#define C_31 134 + +#define S_RISOATT 205 +#define S_CODRIS 206 +#define S_DESRIS 899 +#define S_CODATT 306 +#define S_DESATT 999 +#define S_TPORA 207 +#define S_QTAORE 208 +#define S_COSTO 209 +#define S_OREDIS 210 \ No newline at end of file diff --git a/ci/ci2200a.uml b/ci/ci2200a.uml new file mode 100755 index 000000000..99719def9 --- /dev/null +++ b/ci/ci2200a.uml @@ -0,0 +1,489 @@ +#include "ci2200a.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 7 +BEGIN + PROMPT 1 0 "@bDati Risorsa - Attrezzatura" +END + +NUMBER F_ANNO 4 +BEGIN + PROMPT 2 1 "Anno " + FLAGS "A" + CHECKTYPE REQUIRED +END + +LISTBOX F_MESE 10 +BEGIN + PROMPT 23 1 "Mese" + ITEM "|" + FLAGS "M" +END + +STRING F_TPORA 2 +BEGIN + PROMPT 41 1 "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 76 +BEGIN + PROMPT 3 2 "@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 5 "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 5 "Codice: " + USE RSS + INPUT CODTAB F_CODRIS + DISPLAY "Codice@16" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODRIS CODTAB + GROUP 2 + CHECKTYPE NORMAL +END + +STRING F_CODATT 16 +BEGIN + PROMPT 3 5 "Codice: " + FIELD CODTAB[1,16] + USE ATR + INPUT CODTAB F_CODATT + DISPLAY "Codice@16" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODATT CODTAB + GROUP 3 + CHECKTYPE NORMAL +END + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 1 7 "@bDati Analitici" +END + +STRING F_CODCOSTO 20 15 +BEGIN + PROMPT 2 8 "C.d.C. " +END + +STRING F_CODCMS 20 15 +BEGIN + PROMPT 31 8 "Cms. " +END + +STRING F_CODFASE 10 8 +BEGIN + PROMPT 60 8 "Fase " +END + +SPREADSHEET F_CALENDARIO -16 4 +BEGIN + PROMPT 1 10 "" + ITEM "Centro di\nCosto@8F" + ITEM "Codice\nCommessa@8F" + ITEM "Codice\nFase@5F" + 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" +END + +SPREADSHEET F_SHEET -10 0 +BEGIN + PROMPT 1 15 "" + ITEM "Tipo" + ITEM "Codice@16" + ITEM "Tipo\nOra@5" + ITEM "Qta\nOre@5" + ITEM "Costo@6" + ITEM "Ore\ndisponibilitą" +END + +ENDPAGE +ENDMASK + +PAGE "Calendario" -1 -1 78 13 + +GROUPBOX DLG_NULL 76 3 +BEGIN + PROMPT 1 1 "@bDati Analitici" +END + +STRING C_CODCOSTO 20 15 +BEGIN + PROMPT 2 2 "C.d.C. " +END + +STRING C_CODCMS 20 15 +BEGIN + PROMPT 30 2 "Cms. " +END + +STRING C_CODFASE 10 8 +BEGIN + PROMPT 59 2 "Fase " +END + +STRING C_1 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_2 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_3 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_4 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_5 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_6 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_7 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_8 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_9 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_10 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_11 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_12 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_13 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_14 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_15 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_16 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_17 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_18 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_19 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_20 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_21 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_22 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_23 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_24 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_25 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_26 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_27 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_28 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_29 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_30 1 +BEGIN + PROMPT 2 4 "1" +END + +STRING C_31 1 +BEGIN + PROMPT 2 4 "1" +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 + +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 + +NUMBER S_QTAORE 6 +BEGIN + PROMPT 2 11 "Quantitą ore " +END + +NUMBER S_COSTO 6 2 +BEGIN + PROMPT 30 11 "Prezzo " +END + +NUMBER S_OREDIS 6 +BEGIN + PROMPT 50 11 "Quantitą ore " +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 \ No newline at end of file