From 3f45b1d37789ccb3c0b090bc306d071c60f634f3 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 7 Oct 2005 13:41:20 +0000 Subject: [PATCH] Patch level : 2.2 186 Files correlati : ci0.exe Ricompilazione Demo : [ ] Commento : Bug 0000461 Aggiungere eliminazione documenti per le commesse chiuse. I piu' bisogna provare la cancellazione di un documento in stato normale e bloccato. nel secondo caso non deve cancellare il magazzino, agenti statistice etc... git-svn-id: svn://10.65.10.50/trunk@13397 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ci/ci0300.cpp | 2 + ci/ci0300a.h | 1 + ci/ci0300a.uml | 6 +++ ci/ci0400.cpp | 133 +++++++++++++++++++++++++++++++++++++++++-------- ci/ci0400.h | 9 +++- ci/ci0400a.uml | 21 +++++--- ci/ci0400b.h | 2 + ci/ci0400b.uml | 32 ++++++++++++ ci/cilib.cpp | 16 ++++++ ve/velib03.cpp | 57 +++++++++++++-------- 10 files changed, 228 insertions(+), 51 deletions(-) create mode 100755 ci/ci0400b.h create mode 100755 ci/ci0400b.uml diff --git a/ci/ci0300.cpp b/ci/ci0300.cpp index 9dc8d65ef..3faf0173c 100755 --- a/ci/ci0300.cpp +++ b/ci/ci0300.cpp @@ -161,6 +161,7 @@ void TConfigurazioneIndustriale_app::file_to_sheet() t.add(configfile.get("StatoColl", NULL, item, "")); t.add(configfile.get("ModColl", NULL, item, "")); t.add(configfile.get("Var", NULL, item, "")); + t.add(configfile.get("DeleteClosed", NULL, item, "")); mask().sheet().check_row(item); item++; } @@ -195,6 +196,7 @@ void TConfigurazioneIndustriale_app::sheet_to_file() configfile.set("StatoColl", mask().row(i).get(7), NULL, true, i); configfile.set("ModColl", mask().row(i).get(8), NULL, true, i); configfile.set("Var", mask().row(i).get(9), NULL, true, i); + configfile.set("DeleteClosed", mask().row(i).get(10), NULL, true, i); totlen+=currdesc.len(); } diff --git a/ci/ci0300a.h b/ci/ci0300a.h index 662422905..dbc5c7438 100755 --- a/ci/ci0300a.h +++ b/ci/ci0300a.h @@ -16,6 +16,7 @@ #define FR_STATO 108 #define FR_MODCOLL 109 #define FR_VAR 110 +#define FR_DELCLOSE 111 #define FR_DESNUM 201 #define FR_DESTIPODOC 202 diff --git a/ci/ci0300a.uml b/ci/ci0300a.uml index 5f7f9f021..8db6da10b 100755 --- a/ci/ci0300a.uml +++ b/ci/ci0300a.uml @@ -31,6 +31,7 @@ BEGIN ITEM "Stato" ITEM "Modifica documento\ncollegato@18" ITEM "Campi modificati@50" + ITEM "Cancella le\nCommesse chiuse@20" END BUTTON F_MOVEUP 2 2 @@ -178,6 +179,11 @@ BEGIN GROUP 1 END +BOOLEAN FR_DELCLOSE +BEGIN + PROMPT 1 10 "Cancella i documenti di Commesse chiuse" +END + BUTTON DLG_CANCEL 10 2 BEGIN PROMPT -13 -1 "" diff --git a/ci/ci0400.cpp b/ci/ci0400.cpp index e9a5357f9..33bd73679 100755 --- a/ci/ci0400.cpp +++ b/ci/ci0400.cpp @@ -11,7 +11,9 @@ #include "cilib.h" #include "ci0400.h" #include "ci0400a.h" +#include "ci0400b.h" #include "..\ve\velib.h" +#include /////////////////////////////////////////////////////////// @@ -43,6 +45,7 @@ void TImmissioneDocumenti_app::init_tabs() m.stato_coll().add(configfile.get("StatoColl", NULL, items), items); m.var_coll().add(configfile.get("Var", NULL, items), items); m.mod_coll().set(items, configfile.get_bool("ModColl", NULL, items)); + m.del_closed().set(items, configfile.get_bool("DeleteClosed", NULL, items)); m.activate_almanac(F_AL01 + items, items, TDate(TODAY)); items++; @@ -146,6 +149,14 @@ bool TImmissioneDocumenti_app::has_documents(int currpage, TDate& day) // Routines Proprietarie +void TImmissioneDocumenti_mask::next_page(int p) +{ + TMask::next_page(p); + + const int k = (p < 1000) ? curr_page() : p-1000; + enable(DLG_DELREC, del_closed()[k]); +} + void TImmissioneDocumenti_mask::open_day_mask(TDate date) { if (!date.ok()) @@ -190,35 +201,46 @@ void TImmissioneDocumenti_mask::open_day_mask(TDate date) fl.replace_items(codes, values); fl.enable(items > 1); - KEY exitval = sheet.run(); + KEY exitval; - switch(exitval) - { - case K_ENTER: - call_ve0(exitval, relation, date, codnum, EMPTY_STRING, currpage); - break; - case K_DEL: - call_ve0(exitval, relation, date, codnum); - break; - case K_INS: + while ((exitval = sheet.run()) != K_ESC) + { + switch(exitval) { - const TString16 tipo(sheet.get(101)); + case K_ENTER: + call_ve0(exitval, relation, date, codnum, EMPTY_STRING, currpage); + break; + case K_DEL: + call_ve0(exitval, relation, date, codnum); + break; + case K_INS: + { + const TString16 tipo(sheet.get(101)); - call_ve0(exitval, relation, date, codnum, tipo, currpage); + call_ve0(exitval, relation, date, codnum, tipo, currpage); + } + break; + default: + break; } - break; - case K_ESC: - break; - default: - break; - } - TDate caput_anni(1, 1, date.year()); + } + update_current_calendar(date.year()); +} + +void TImmissioneDocumenti_mask::update_current_calendar(int year) +{ + TDate caput_anni(1, 1, year); + const int currpage = curr_page(); TBit_array & dayfl = (TBit_array&) flags()[currpage]; + TString filter; + dayfl.reset(); - filter.cut(0); - filter << "(ANNO==\"" << date.year() << "\")" << "&&" << "(CODNUM==\"" << filters().row(currpage) << "\")"; + filter << "(ANNO==\"" << year << "\")" << "&&" << "(CODNUM==\"" << filters().row(currpage) << "\")"; + TRelation relation(LF_DOC); + + TCursor cursor(&relation, filter); cursor.setfilter(filter); const int doc_items = cursor.items(); @@ -390,6 +412,75 @@ bool TImmissioneDocumenti_mask::is_date_void(int currpage, TDate& cdate) return !(immissione_documenti_app().has_documents(currpage, cdate)); } +bool delete_closed(const TRelation& rel, void* pJolly) +{ + TDocumento & doc = (TDocumento &) rel.lfile().curr(); + const int rows = doc.physical_rows(); + bool closed = true; + + for (int i = 1; closed && i <= rows; i++) + { + const TString & codcms = doc[i].codice_commessa(); + const TRectype & cms = cache().get(LF_COMMESSE, codcms); + + closed &= cms.get_bool("CHIUSA"); + } + if (closed) + { + doc.stato('9'); + doc.remove(); + } + + return true; +} + +bool TImmissioneDocumenti_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case DLG_DELREC: + if (e == fe_button) + { + TString descr; + TMask selection("ci0400b"); + const int pos = id2pos(31000 + 100 * curr_page()); + if (pos >= 0) + descr = fld(pos).prompt(); + if (selection.run() == K_ENTER && + yesno_box("Attenzione !! vuoi cancellare i documenti %s\n delle commesse chiuse", (const char *) descr) && + yesno_box("Attenzione !! vuoi veramente cancellare i documenti %s\n delle commesse chiuse", (const char *) descr)) + { + TRectype from(LF_DOC); + const TDate fromdate = selection.get_date(F_DA_DATA); + + if (fromdate.ok()) + from.put(DOC_DATADOC, fromdate); + + TRectype to(LF_DOC); + const TDate todate = selection.get_date(F_A_DATA); + + if (todate.ok()) + to.put(DOC_DATADOC, todate); + + TString filter; + + filter.format("CODNUM==\"%s\"", (const char *) filters().row(curr_page())); + + TCursor d(new TRelation(LF_DOC), filter, 3, &from, &to); + + d.relation()->lfile().set_curr(new TDocumento()); + d.scan(delete_closed, NULL, "Cancellazione documenti commesse chiuse"); + update_current_calendar(selected_day().year()); + } + } + break; + default: + TAlmanac_mask::on_field_event(o, e, jolly); + break; + } + return true; +} + /////////////////////////////////////////////////////////// // Main /////////////////////////////////////////////////////////// diff --git a/ci/ci0400.h b/ci/ci0400.h index 1f922f8a1..3d819567e 100755 --- a/ci/ci0400.h +++ b/ci/ci0400.h @@ -14,13 +14,16 @@ class TImmissioneDocumenti_mask : public TAlmanac_mask TBit_array _modify; TBit_array _doccoll; TBit_array _modcoll; + TBit_array _delclosed; TString_array _numcoll; TString_array _tipocoll; TString_array _statocoll; TString_array _varcoll; protected: - + virtual void next_page(int p); + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + public: // ereditato da TAlmanac_mask virtual bool is_date_void(int currpage, TDate& cdate); @@ -33,6 +36,7 @@ public: const TBit_array & ordered() const { return _ordered;} const TBit_array & doc_coll() const { return _doccoll;} const TBit_array & mod_coll() const { return _modcoll;} + const TBit_array & del_closed() const { return _delclosed;} const TString_array & num_coll() const { return _numcoll;} const TString_array & tipo_coll() const { return _tipocoll;} const TString_array & stato_coll() const { return _statocoll;} @@ -44,10 +48,13 @@ public: TBit_array & modify() { return _modify;} TBit_array & doc_coll() { return _doccoll;} TBit_array & mod_coll() { return _modcoll;} + TBit_array & del_closed() { return _delclosed;} TString_array & num_coll() { return _numcoll;} TString_array & tipo_coll() { return _tipocoll;} TString_array & stato_coll() { return _statocoll;} TString_array & var_coll() { return _varcoll;} + void update_current_calendar(int year); + public: // apertura del foglio interno di gestione dei documenti diff --git a/ci/ci0400a.uml b/ci/ci0400a.uml index 1c71ad96b..78c8d44fc 100755 --- a/ci/ci0400a.uml +++ b/ci/ci0400a.uml @@ -4,43 +4,50 @@ TOOLBAR "" 0 -2 0 2 BUTTON DLG_SELECT 10 2 BEGIN - PROMPT -16 -11 "~Selezione" + PROMPT -17 -11 "~Selezione" MESSAGE EXIT,K_ENTER PICTURE BMP_SELECT END BUTTON F_PREVMONTH 10 2 BEGIN - PROMPT -26 -11 "~Precedente" + PROMPT -27 -11 "~Precedente" PICTURE BMP_PREVREC END LIST F_CHANGEMONTH 10 BEGIN - PROMPT 18 -11 " " + PROMPT -37 -11 "" FLAGS "M" END NUMBER F_CHANGEYEAR 10 BEGIN - PROMPT 44 -11 "" + PROMPT -47 -11 "" FLAGS "A" END BUTTON F_NEXTMONTH 10 2 BEGIN - PROMPT -56 -11 "S~uccessivo" + PROMPT -57 -11 "S~uccessivo" PICTURE BMP_NEXTREC END +BUTTON DLG_DELREC 10 2 +BEGIN + PROMPT -67 -11 "~Elimina" + MESSAGE EXIT,K_DEL + PICTURE BMP_DELREC + PICTURE BMP_DELRECDN +END + BUTTON DLG_QUIT 10 2 BEGIN - PROMPT -66 -11 "~Fine" + PROMPT -77 -11 "~Fine" MESSAGE EXIT,K_QUIT PICTURE BMP_QUIT PICTURE BMP_QUITDN END - ENDPAGE PAGE "Pagina 1" -1 -1 80 20 diff --git a/ci/ci0400b.h b/ci/ci0400b.h new file mode 100755 index 000000000..5af05125f --- /dev/null +++ b/ci/ci0400b.h @@ -0,0 +1,2 @@ +#define F_DA_DATA 101 +#define F_A_DATA 102 diff --git a/ci/ci0400b.uml b/ci/ci0400b.uml new file mode 100755 index 000000000..b7f1a792a --- /dev/null +++ b/ci/ci0400b.uml @@ -0,0 +1,32 @@ +#include "ci0400b.h" + +PAGE "Eliminazione Documenti di Commesse chiuse" -1 -1 40 7 + +GROUPBOX DLG_NULL 20 4 +BEGIN + PROMPT 10 1 "@bData" +END + +DATA F_DA_DATA +BEGIN + PROMPT 11 2 "Dal " +END + +DATA F_A_DATA +BEGIN + PROMPT 11 3 "Al " +END + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_CANCEL 10 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + +ENDMASK diff --git a/ci/cilib.cpp b/ci/cilib.cpp index 046cfcb39..587583297 100755 --- a/ci/cilib.cpp +++ b/ci/cilib.cpp @@ -314,6 +314,22 @@ bool TAlmanac_window::on_key(KEY key) break; case K_ENTER: ((TAlmanac_mask&)o.mask()).open_day_mask(); + break; + case K_PREV: + case K_NEXT: + case K_CTRL+K_F1: + case K_CTRL+K_F2: + case K_CTRL+K_F3: + case K_CTRL+K_F4: + case K_CTRL+K_F5: + case K_CTRL+K_F6: + case K_CTRL+K_F7: + case K_CTRL+K_F8: + case K_CTRL+K_F9: + case K_CTRL+K_F10: + case K_CTRL+K_F11: + case K_CTRL+K_F12: + o.mask().on_key(key); break; default: return TField_window::on_key(key); diff --git a/ve/velib03.cpp b/ve/velib03.cpp index 25a0da498..2d388fe95 100755 --- a/ve/velib03.cpp +++ b/ve/velib03.cpp @@ -1127,6 +1127,7 @@ int TDocumento::remove(TBaseisamfile& f) const if (!cancellabile() && !yesno_box("Documento non cancellabile,\nContinuare ugualmente")) return NOERR; const bool check_movmag = dongle().active(MGAUT) && tipo().mov_mag(); + const bool doc_bloccato = bloccato(); if (check_movmag) { @@ -1139,32 +1140,44 @@ int TDocumento::remove(TBaseisamfile& f) const mov.put(MOVMAG_NUMREG, num); while (mov.read(m, _isequal, _testandlock) == _islocked) message_box("Movimento di magazzino in uso da parte di un'altro utente"); - mov.remove(m); + if (doc_bloccato) + { + const int rows = mov.rows(); + + for (int i= 1; i <= rows; i++) + mov.body()[i].zero(RMOVMAG_TIPORIGA); + mov.rewrite(m); + } + else + mov.remove(m); } } - if (tipo().statistiche() && _has_stat_ven) - { - TString80 key(get(DOC_PROVV)); key << get(DOC_ANNO); key << get(DOC_CODNUM); key << get(DOC_NDOC); - TStats_agg * st_agg = (TStats_agg *) _docs_to_agg.objptr(key); + if (!doc_bloccato) + { + if (tipo().statistiche() && _has_stat_ven) + { + TString80 key(get(DOC_PROVV)); key << get(DOC_ANNO); key << get(DOC_CODNUM); key << get(DOC_NDOC); + TStats_agg * st_agg = (TStats_agg *) _docs_to_agg.objptr(key); - if (st_agg != NULL) - { - st_agg->update(); - _docs_to_agg.remove(key); - } - } - if (_has_provv && tipo().provvigioni()) - { - const TString8 agente(get(DOC_CODAG)); - const int anno = TDocumento::anno(); - const TString4 codnum(numerazione()); - const long ndoc = numero(); + if (st_agg != NULL) + { + st_agg->update(); + _docs_to_agg.remove(key); + } + } + if (_has_provv && tipo().provvigioni()) + { + const TString8 agente(get(DOC_CODAG)); + const int anno = TDocumento::anno(); + const TString4 codnum(numerazione()); + const long ndoc = numero(); - // Legge le provvigioni per questo documento - _provv_agente->read(agente, anno,codnum,ndoc); - // Le rimuove - _provv_agente->remove(); - } + // Legge le provvigioni per questo documento + _provv_agente->read(agente, anno,codnum,ndoc); + // Le rimuove + _provv_agente->remove(); + } + } return TMultiple_rectype::remove(f); }