diff --git a/ha/ha0100.cpp b/ha/ha0100.cpp index 1d5519369..959d2b7ca 100755 --- a/ha/ha0100.cpp +++ b/ha/ha0100.cpp @@ -50,7 +50,7 @@ bool THA_table_app::protected_record(TRectype& record) { //controlla che l'attrezzatura non abbia record nella tabella della storia attrezzature TString query; - query << "USE &HAHIS"; + query << "USE &HIS"; query << "\nFROM CODTAB=#CODATTR"; query << "\nTO CODTAB=#CODATTR"; diff --git a/ha/ha3800.cpp b/ha/ha3800.cpp index fdc0a884a..41090bcb5 100755 --- a/ha/ha3800.cpp +++ b/ha/ha3800.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -93,6 +94,13 @@ void TInserimento_storico::elabora(const TMask& mask) ofstream numerazioni("c:/temp/numerazioni.txt", ios::app); #endif + //vogliono pure il log! che rompicazzo + TLog_report log("Righe storico aggiunte"); + log.kill_duplicates(); + log.log(0, ""); + log.log(0, "Anno-Num.-Ndoc--Codart Matricola --Cliente"); + log.log(0, ""); + //3) giro su ogni numerazione per trovare le righe che servono for (int n = 0; n < num_del_tipo; n++) { @@ -237,12 +245,21 @@ void TInserimento_storico::elabora(const TMask& mask) const real importo = qta * prezzo; tab_his.put("R1", importo); - tab_his.write_rewrite(); + const int written = tab_his.write_rewrite(); + //segna sul log la riga aggiunta alla tabella storico &HIS + if (written == NOERR) + { + TString msg; + msg.format("%4d%1s%4s%1s%7d%2s%30s%2s%6d", doc_anno, "-", (const char*)doc_codnum, "-", doc_ndoc, "--", (const char*)codtab, "--", doc_clifo); + //msg << doc_anno << "-" << doc_codnum << "-" << doc_ndoc << "--" << codtab << "--" << doc_clifo; + log.log(0, msg); + } } //if (caus==caus_open || .. } //for (bool ok = rdoc_recset.move_first()... } //for (int n = 0; n < num_del_tipo... + log.preview(); } void TInserimento_storico::main_loop() diff --git a/ha/ha3900.cpp b/ha/ha3900.cpp index a6e7ed87f..c1515128b 100755 --- a/ha/ha3900.cpp +++ b/ha/ha3900.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -178,6 +179,22 @@ bool TCoffee_tree::select_attr(const TString& codart, const TString& matricola) return found; } +////////////////////////////////////////////// +// Metodi static di ordinamento dello sheet +////////////////////////////////////////////// +static int sort_by_data(TSheet_field& s, int r1, int r2) +{ + TToken_string& s1 = s.row(r1); + TToken_string& s2 = s.row(r2); + + const int datacomp_pos = s.cid2index(S_DATA); + const TDate d1 = s1.get(datacomp_pos); + const TDate d2 = s2.get(datacomp_pos); + int cmp = int(d2 - d1); + + return cmp; +} + ////////////////////////////////////////////// // Maschera ////////////////////////////////////////////// @@ -237,7 +254,8 @@ void TGestione_attrezzature_mask::fill_sheet_storico(const TString& codattr) } } - //mostra e aggiorna lo sheet + //mostra e aggiorna lo sheet ordinato per data (in alto le date maggiori) + sf_righe.sort(sort_by_data); sf_righe.show(); sf_righe.force_update(); @@ -276,7 +294,7 @@ bool TGestione_attrezzature_mask::write() //per prima cosa mette la chiave del record che è così fatta: // codart=codtab[1,5] - matricola=codtab[16,30] - nriga=codtab[31,35] TString80 curr_codtab; - curr_codtab.format("%05d", r + 1); + curr_codtab.format("%05d", sf_righe.items() - r); curr_codtab.insert(codtab); //azzera il record senno' nei campi vuoti ci metterebbe quelli del record precedente //deve azzerare la tabella, senno' perde il codice modulo HA ed il codice tabella HIS @@ -327,6 +345,7 @@ bool TGestione_attrezzature_mask::on_field_event(TOperable_field& o, TField_even { switch (o.dlg()) { + //campi case F_CODCF: if (e == fe_modify) @@ -385,8 +404,85 @@ bool TGestione_attrezzature_mask::on_field_event(TOperable_field& o, TField_even { _sheet_dirty = true; } + if (e == se_notify_add) + { + //quando si aggiunge una riga si deve fare il sorting in modo che venga come prima riga in alto + TSheet_field& sf = sfield(o.dlg()); + TToken_string& row = sf.row(jolly); //riga corrente appena aggiunta + row.add(TDate(TODAY), sf.cid2index(S_DATA)); + row.add(get(F_CODCF), sf.cid2index(S_CODCF)); + sf.sort(sort_by_data); + sf.force_update(); + sf.post_select(0); //evidenzia la prima riga + } break; + //bottoni + case DLG_ADD_NEW: + if (e == fe_button) + { + //per prima cosa deve controllare che siano pieni i campi chiave della tabella ttrezzature, senno' non puo'.. + //..aggiungere una cippa + if (get(F_COD_ART).empty() || get(F_COD_MATR).empty()) + return warning_box(TR("E' necessario compilare articolo e matricola per aggiungere una nuova attrezzatura!")); + + TString80 codtab; + const TString& codart = get(F_COD_ART); + const TString& matricola = get(F_COD_MATR); + codtab.format("%-15s%-15s", (const char*)codart, (const char*)matricola); + //se l'utonto tentasse di inserire come nuova un'attrezzatura già esistente va cazziato! + TModule_table tab_att("&ATT"); + tab_att.put("CODTAB", codtab); + const int err = tab_att.read(); + if (err == NOERR) + return warning_box(TR("L'attrezzatura con questa matricola esiste gia'!")); + + TFilename trans_ini; + trans_ini.temp(NULL, "ini"); + TString4 filenumber; + filenumber << LF_TABMOD; + //i config vanno chiusi senno' non si riescono ad usare + { + TConfig ini(trans_ini, "Transaction"); + ini.set("Action", "INSERT"); + + ini.set_paragraph(filenumber); + ini.set("CODTAB", codtab); + ini.set("I0", get(F_CODCF)); + ini.set("D0", TDate(TODAY)); + } + //invio del config al gestore della tabella &ATT + TString80 cmd; + cmd << "ha0 -0 &ATT /i" << trans_ini; + TExternal_app app(cmd); + + //lettura dell'ini di ritorno compilato + if (app.run() == NOERR) + { + //setta sulla maschera i valori di ritorno del .ini (riempiti dal gestore di &ATT) + TConfig ini(trans_ini, "Transaction"); + if (ini.get("Result") == "OK") + { + ini.set_paragraph(filenumber); + TString80 codtab = ini.get("CODTAB"); + codtab.strip("\""); //elimina eventuali " che vengono dall'ini + set(F_COD_ART, codtab.left(5)); + set(F_COD_MATR, codtab.mid(15,15)); + const long codcf = ini.get_long("I0"); + set(F_CODCF, codcf); + + const TDate data_storico = ini.get("D0"); + TSheet_field& sf = sfield(F_STORICO); + TToken_string& row = sf.row(-1); + row.add("C", sf.cid2index(S_TIPO)); + row.add(data_storico, sf.cid2index(S_DATA)); + row.add(codcf, sf.cid2index(S_CODCF)); + + sf.force_update(); + } + } + } + break; case DLG_SAVEREC: if (e == fe_button && check_fields()) { @@ -433,6 +529,9 @@ TGestione_attrezzature_mask::TGestione_attrezzature_mask() : TAutomask("ha3900a" TCoffee_tree* ct = new TCoffee_tree; tf.set_tree(ct); + TSheet_field& sf_storico = sfield(F_STORICO); + sf_storico.set_append(false); + //inizializza lo "sporcatore" dello sheet _sheet_dirty = false; } diff --git a/ha/ha3900a.h b/ha/ha3900a.h index 33eea8936..4fb5c00b5 100755 --- a/ha/ha3900a.h +++ b/ha/ha3900a.h @@ -3,6 +3,7 @@ #define F_COD_ART 303 #define F_DESCR_ART 304 #define F_COD_MATR 305 +#define DLG_ADD_NEW 306 //tree #define F_ATTREZZATURE 350 diff --git a/ha/ha3900a.uml b/ha/ha3900a.uml index 27bc50455..e7124ec4d 100755 --- a/ha/ha3900a.uml +++ b/ha/ha3900a.uml @@ -16,12 +16,12 @@ PAGE "Gestione attrezzature" 0 2 0 0 GROUPBOX DLG_NULL 79 5 BEGIN - PROMPT 0 0 "@bParametri" + PROMPT 1 0 "@bParametri" END NUMBER F_CODCF 6 BEGIN - PROMPT 1 1 "Cliente " + PROMPT 2 1 "Cliente " FLAGS "R" USE LF_CLIFO INPUT TIPOCF "C" @@ -37,7 +37,7 @@ END STRING F_DESCF 50 BEGIN - PROMPT 22 1 "" + PROMPT 23 1 "" USE LF_CLIFO KEY 2 INPUT TIPOCF "C" INPUT RAGSOC F_DESCF @@ -51,7 +51,7 @@ END STRING F_COD_ART 5 BEGIN - PROMPT 1 2 "Articolo " + PROMPT 2 2 "Articolo " FLAGS "U" USE LF_ANAMAG SELECT GRMERC="50" INPUT CODART F_COD_ART @@ -65,7 +65,7 @@ END STRING F_DESCR_ART 50 BEGIN - PROMPT 22 2 "" + PROMPT 23 2 "" USE LF_ANAMAG KEY 2 SELECT GRMERC="50" INPUT DESCR F_DESCR_ART DISPLAY "Descrizione@50" DESCR @@ -76,7 +76,7 @@ END STRING F_COD_MATR 15 BEGIN - PROMPT 1 3 "Matricola " + PROMPT 2 3 "Matricola " FLAGS "U" USE &ATT JOIN LF_ANAMAG INTO CODART=CODTAB[1,5] @@ -89,9 +89,15 @@ BEGIN OUTPUT F_COD_ART CODTAB[1,5] OUTPUT F_COD_MATR CODTAB[16,30] OUTPUT F_CODCF I0 - CHECKTYPE REQUIRED + CHECKTYPE SEARCH END +BUTTON DLG_ADD_NEW 20 1 +BEGIN + PROMPT 53 3 "Nuova attrezzatura" +END + + TEXT DLG_NULL BEGIN PROMPT 1 5 "@bAttrezzature" @@ -99,7 +105,7 @@ END TLIST F_ATTREZZATURE 78 5 BEGIN - PROMPT 0 6 "Attrezzatura" + PROMPT 1 6 "Attrezzatura" DISPLAY "Codice@20" CODTAB DISPLAY "Descrizione@35" S0 DISPLAY "Cliente" I0 @@ -156,7 +162,6 @@ DATE S_DATA BEGIN PROMPT 58 1 "Data " CHECKTYPE REQUIRED - FLAGS "A" FIELD D0 END diff --git a/ha/hasthis.uml b/ha/hasthis.uml new file mode 100755 index 000000000..5a80bf665 --- /dev/null +++ b/ha/hasthis.uml @@ -0,0 +1,39 @@ +#include "hatbatt.h" + +PAGE "Attrezzature" -1 -1 78 3 + +NUMBER F_CODCF 6 +BEGIN + PROMPT 1 1 "Cliente " + FLAGS "U" + USE LF_CLIFO + INPUT TIPOCF "C" + INPUT CODCF F_CODCF + DISPLAY "Codice" CODCF + DISPLAY "Descrizione@50" RAGSOC + OUTPUT F_CODCF CODCF + OUTPUT F_RAGSOC RAGSOC + CHECKTYPE NORMAL + FIELD #CODCF +END + +STRING F_RAGSOC 50 +BEGIN + PROMPT 20 1 "" + USE LF_CLIFO KEY 2 + INPUT TIPOCF "C" + INPUT RAGSOC F_RAGSOC + DISPLAY "Descrizione@50" RAGSOC + DISPLAY "Codice" CODCF + COPY OUTPUT F_CODCF + CHECKTYPE NORMAL +END + +ENDPAGE + + +TOOLBAR "" 0 0 0 2 +#include "printbar.h" +ENDPAGE + +ENDMAK \ No newline at end of file