From 45b73d97feee8c75f28ee527d7cfdf2a8e862d19 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 27 Aug 2008 12:33:16 +0000 Subject: [PATCH] Patch level : 10.0 109 Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.2 1208 git-svn-id: svn://10.65.10.50/trunk@17106 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- vd/turni.h | 1 + vd/vd0300a.uml | 24 +++-- vd/vd0700.cpp | 266 +++++++++++++++++++++++++++++++++++++++++++++++-- vd/vd0700a.h | 1 + vd/vd0700a.uml | 8 +- vd/vdconf.h | 5 +- vd/vdlib.cpp | 30 ++++++ vd/vdmenu.men | 4 +- vd/vdstfld.uml | 2 +- vd/vdtbfld.uml | 6 +- 10 files changed, 318 insertions(+), 29 deletions(-) diff --git a/vd/turni.h b/vd/turni.h index c07b7bd33..fc2952adb 100755 --- a/vd/turni.h +++ b/vd/turni.h @@ -22,3 +22,4 @@ #define TRN_LNDOC "LNDOC" #define TRN_NUMSCONTR "NUMSCONTR" #define TRN_CHIUSO "CHIUSO" + diff --git a/vd/vd0300a.uml b/vd/vd0300a.uml index 03b27a052..d3559d528 100755 --- a/vd/vd0300a.uml +++ b/vd/vd0300a.uml @@ -27,28 +27,28 @@ ENDPAGE PAGE "Parametri ditta" 0 0 0 0 -STRING FD_FILIALE 2 +STRING FD_NEGOZIO 2 BEGIN - PROMPT 2 2 "Filiale " - FIELD FILIALE + PROMPT 2 2 "Negozio " + FIELD NEGOZIO USE FLD - INPUT CODTAB FD_FILIALE + INPUT CODTAB FD_NEGOZIO DISPLAY "Codice" CODTAB DISPLAY "Descrizione@50" S0 - OUTPUT FD_FILIALE CODTAB - OUTPUT FD_DESFIL S0 + OUTPUT FD_NEGOZIO CODTAB + OUTPUT FD_DESNEG S0 CHECKTYPE REQUIRED FLAG "UZ" END -STRING FD_DESFIL 50 40 +STRING FD_DESNEG 50 40 BEGIN PROMPT 30 2 "" USE FLD KEY 2 - INPUT S0 FD_DESFIL + INPUT S0 FD_DESNEG DISPLAY "Descrizione@50" S0 DISPLAY "Codice" CODTAB - COPY OUTPUT FD_FILIALE + COPY OUTPUT FD_NEGOZIO END STRING FD_CODNUM 4 @@ -183,6 +183,12 @@ BEGIN FIELD CODPVAR END +STRING FD_QTACHAR 1 +BEGIN + PROMPT 2 18 "Carattere sep.qta " + FIELD QTACHAR +END + ENDPAGE PAGE "Pagamenti" 1 1 60 14 diff --git a/vd/vd0700.cpp b/vd/vd0700.cpp index 4fa5ce020..344b5cbfa 100755 --- a/vd/vd0700.cpp +++ b/vd/vd0700.cpp @@ -12,6 +12,7 @@ #include "../mg/anamag.h" #include +#include "../ve/vepriv.h" #include "../ve/ve0100.h" #include "../ve/veini.h" #include "../ve/veuml.h" @@ -109,7 +110,7 @@ class TScontrino_application : public TMotore_application TTurno_vendita *_turno; TOperatore * _cassiere; TOperatore * _responsabile; - TString8 _filiale; + TString8 _negozio; TString8 _numdoc; TString8 _tipodoc; TString8 _codlist; @@ -126,6 +127,7 @@ class TScontrino_application : public TMotore_application bool _chk_doc; bool _barcode_peso_var; bool _peso_var; + char _qta_char; int _npag; int _ncassa; int _cassetto; @@ -160,12 +162,14 @@ public: virtual void print(); int ncassa() const { return _ncassa;} int def_qta() const { return _def_qta;} + char qta_char() const { return _qta_char ;} const TString & numdoc() const { return _numdoc;} const TString & codlist() const { return _codlist;} const TString & numdocf() const { return _numdocf;} const TString & tipodocf() const { return _tipodocf;} const TString & codmag() const { return _codmag;} const TString & codmagc() const { return _codmagc;} + const TString & negozio() const { return _negozio;} const TString_array & tv_cmds() const {return _tv_cmds;} const TString_array & tv_labels() const {return _tv_labels;} const TOperatore & curr_user() const { return _responsabile != NULL ? *_responsabile : *_cassiere;} @@ -183,7 +187,13 @@ inline TScontrino_application& sapp() { return (TScontrino_application &) main_a class TScontrino_mask : public TDocumento_mask { + int _row_to_remove; + TToken_string _deleted_rows; + protected: + static bool scodart_handler( TMask_field& f, KEY key ); + static bool sqta_handler( TMask_field& f, KEY key ); + static bool sprezzo_handler( TMask_field& f, KEY key ); static bool turno_handler( TMask_field& f, KEY key ); static bool chiudi_handler( TMask_field& f, KEY key ); static bool sospendi_handler( TMask_field& f, KEY key ); @@ -193,16 +203,25 @@ protected: static bool perms_handler( TMask_field& f, KEY key ); static bool ss_notify(TSheet_field& ss, int r, KEY key); static bool check_perms(TDocumento & doc, TSheet_field & s, TDocumento_mask & m, int nrow); + static bool search_art_handler( TMask_field& f, KEY key ); public: + void set_row_to_remove(int r) { _row_to_remove = r;} + virtual void on_idle(); + void show_giacenza(); + + virtual TVariable_mask * riga_mask(int numriga); virtual bool is_omaggio_enabled() { return sapp().curr_user().can_change_omaggi();} + TToken_string & deleted_rows() { return _deleted_rows;} + TScontrino_mask(const char* tipodoc); virtual ~TScontrino_mask() {} }; TScontrino_mask::TScontrino_mask(const char* tipodoc) - :TDocumento_mask(tipodoc) + :TDocumento_mask(tipodoc), _row_to_remove(0), + _deleted_rows("", '£') { set_handler(DLG_TURNO, turno_handler); set_handler(DLG_CHIUDI, chiudi_handler); @@ -210,6 +229,7 @@ TScontrino_mask::TScontrino_mask(const char* tipodoc) set_handler(DLG_RICSOSP, search_sospesi_handler); set_handler(DLG_RICCHIUSI, search_chiusi_handler); set_handler(DLG_PERMS, perms_handler); + set_handler(F_CODSEARCH, search_art_handler); if (id2pos(F_CODLIST) < 0) add_string(F_CODLIST, 0, "Listino", 60, 60, 4, "HP"); for (short id = F_FUNC1; id <= F_FUNC8; id++) @@ -231,6 +251,7 @@ TScontrino_mask::TScontrino_mask(const char* tipodoc) hide(id); } sfield(F_SHEET).set_notify( ss_notify ); + sfield(F_SHEET).set_auto_append(); } bool TScontrino_mask::check_perms(TDocumento & doc, TSheet_field & s, TDocumento_mask & m, int nrow) @@ -283,9 +304,26 @@ bool TScontrino_mask::check_perms(TDocumento & doc, TSheet_field & s, TDocumento return ok; } +void TScontrino_mask::show_giacenza() +{ + TString codart = get(F_CODSEARCH); + real giac, disp; + + if (codart.full()) + { + const TString& annoes = get(F_ANNO); + TArticolo_giacenza art(codart); + + giac = art.disponibilita(annoes, sapp().codmag(), "", true); + disp = art.disponibilita(annoes, sapp().codmag(), "", false); + } + set(F_CURGIAC, giac.string()); + set(F_CURDISP, disp.string()); +} + bool TScontrino_mask::ss_notify( TSheet_field& ss, int r, KEY key ) { - TDocumento_mask& m = (TDocumento_mask&)ss.mask(); + TScontrino_mask& m = (TScontrino_mask&)ss.mask(); CHECK(&m == &app().curr_mask(), "Cast dal cas"); TDocumento& doc = m.doc(); @@ -298,6 +336,12 @@ bool TScontrino_mask::ss_notify( TSheet_field& ss, int r, KEY key ) if (riga.is_omaggio() && !sapp().curr_user().can_change_omaggi()) return false; + + TString row = ss.row(r); + + row.replace('|', '!'), + m.deleted_rows().add(row); + } break; case K_CTRL + K_DEL: @@ -337,11 +381,49 @@ bool TScontrino_mask::ss_notify( TSheet_field& ss, int r, KEY key ) } } break; + case K_CTRL + K_TAB: + if (r > 0) + { + TRiga_documento& riga_prec = doc[r]; + TRiga_documento& riga = doc[r + 1]; + + if (riga.get(RDOC_CODART).full()) + { + if (riga_prec.get(RDOC_CODART) == riga.get(RDOC_CODART) && + riga_prec.get(RDOC_LIVELLO) == riga.get(RDOC_LIVELLO) && + riga_prec.get(RDOC_UMQTA) == riga.get(RDOC_UMQTA) && + riga_prec.get_real(RDOC_PREZZO) == riga.get_real(RDOC_PREZZO) && + riga_prec.get(RDOC_SCONTO) == riga.get(RDOC_SCONTO)) + { + m.set_row_to_remove(r); + } + else + if (r < ss.items() - 1) + { + TRiga_documento& riga_succ = doc[r + 2]; + + if (riga_succ.get(RDOC_CODART) == riga.get(RDOC_CODART) && + riga_prec.get(RDOC_LIVELLO) == riga.get(RDOC_LIVELLO) && + riga_succ.get(RDOC_UMQTA) == riga.get(RDOC_UMQTA) && + riga_succ.get_real(RDOC_PREZZO) == riga.get_real(RDOC_PREZZO) && + riga_succ.get(RDOC_SCONTO) == riga.get(RDOC_SCONTO)) + m.set_row_to_remove(r + 1); + } + } + } + break; case K_ENTER: case K_INS: { if (!check_perms(doc, ss, m, r + 1)) return false; + if (ss.items() == 0) + { + const long ora = daytime(); + + doc.put(TRN_INIZIO, ora); + m.deleted_rows().cut(0); + } } break; default: @@ -358,6 +440,165 @@ bool TScontrino_mask::turno_handler( TMask_field& f, KEY key ) return true; } +void TScontrino_mask::on_idle() +{ + if (_row_to_remove > 0) + { + TSheet_field & ss = sfield(F_SHEET); + int selected = ss.selected(); + TDocumento& d = doc(); + TRiga_documento& riga_prec = d[_row_to_remove]; + TRiga_documento& riga = d[_row_to_remove + 1]; + + real qta = riga_prec.get_real(RDOC_QTA); + + qta += riga.get_real(RDOC_QTA); + riga_prec.put(RDOC_QTA, qta); + riga_prec.autoload(ss); + ss.update_mask(_row_to_remove - 1); + ss.destroy(_row_to_remove); + d.destroy_row(_row_to_remove + 1, true); + ss.force_update(); + if (selected >= _row_to_remove) + selected--; + if (selected >= ss.items()) + selected = ss.items() -1 ; + ss.select(selected); + _row_to_remove = 0; + } + TDocumento_mask::on_idle(); +} + +TVariable_mask * TScontrino_mask::riga_mask(int numriga) +{ + const TRiga_documento& riga = doc()[numriga + 1]; + const TTipo_riga_documento& tiporiga = riga.tipo(); + TString16 name; tiporiga.mask_name(name); + + TVariable_mask* m = (TVariable_mask *) maskrighe().objptr(name); + + if (m == NULL) + { + m = TDocumento_mask::riga_mask(numriga); + + if ( m != NULL) + { + const int pos = m->id2pos(FR_CODART); + if (pos >= 0) + { + const TMask_field & f = m->field(FR_CODART); + if (f.is_edit()) + { + TBrowse * browse = ((TEdit_field &) f).browse(); + const char tipo_r = tiporiga.tipo(); + + if (browse ) + { + const TCursor* cur = browse->cursor(); + + if (cur) + { + const int num = cur->file().num(); + + if (num == LF_ANAMAG || num == LF_CODCORR) + m->set_handler( FR_CODART, scodart_handler ); + } + } + } + } + if ( int pos = m->id2pos(FR_QTA) >= 0) + m->set_handler(FR_QTA, sqta_handler); + if ( int pos = m->id2pos(FR_PREZZO) >= 0) + m->set_handler(FR_PREZZO, sprezzo_handler); + } + } + return m; + +} + +bool TScontrino_mask::search_art_handler( TMask_field& f, KEY key ) +{ + if (f.to_check(key)) + { + TScontrino_mask & mask = (TScontrino_mask &) f.mask(); + + mask.show_giacenza(); + } + return true; +} + +bool TScontrino_mask::scodart_handler(TMask_field& f, KEY key ) +{ + if (f.to_check(key)) + { + const TString & val = f.get(); + const int pos = val.find(sapp().qta_char()); + + if (pos >= 0) + { + TMask& row_mask = f.mask(); + const TString80 qta = val.left(pos); + const TString80 cod = val.mid(pos + 1); + + row_mask.set(FR_CODART, cod, 0x3); + row_mask.set(FR_QTA, qta, 0x3); + return true; + } + } + + const bool ok = ::codart_handler(f, key); + + if (ok && f.to_check(key, false)) + { + TMask& row_mask = f.mask(); + TSheet_field& s = *row_mask.get_sheet(); + TDocumento_mask & mask = (TDocumento_mask &) s.mask(); + const int srow = s.selected(); + const int drow = srow + 1; + + s.update_row(srow); + mask.doc()[drow].autosave(s); + mask.update_progs(); + } + return ok; +} + +bool TScontrino_mask::sqta_handler(TMask_field& f, KEY key ) +{ + if (f.to_check(key, false)) + { + TMask& row_mask = f.mask(); + TSheet_field& s = *row_mask.get_sheet(); + TDocumento_mask & mask = (TDocumento_mask &) s.mask(); + const int srow = s.selected(); + const int drow = srow + 1; + + s.update_row(srow); + mask.doc()[drow].autosave(s); + mask.update_progs(); + } + return ::qta_handler(f, key); + +} + +bool TScontrino_mask::sprezzo_handler(TMask_field& f, KEY key ) +{ + if (f.to_check(key, false)) + { + TMask& row_mask = f.mask(); + TSheet_field& s = *row_mask.get_sheet(); + TDocumento_mask & mask = (TDocumento_mask &) s.mask(); + const int srow = s.selected(); + const int drow = srow + 1; + + s.update_row(srow); + mask.doc()[drow].autosave(s); + mask.update_progs(); + } + return true; + +} + bool TScontrino_mask::chiudi_handler( TMask_field& f, KEY key ) { if (key == K_SPACE) @@ -489,7 +730,7 @@ bool TScontrino_mask::search_chiusi_handler(TMask_field& f, KEY key) rel.lfile().set_curr(new TDocumento); - TCursor cur(&rel, "", 1, &filtrec, &filtrec); + TSorted_cursor cur(&rel, "NDOC-", "", 1, &filtrec, &filtrec); TString80 filt; filt.format("(STATO>=\"%c\")&&(TIPODOC==\"%s\")&&(CODCF==\"\")", m.doc().tipo().stato_chiuso(), (const char *) m.get(F_TIPODOC)); cur.setfilter(filt); @@ -661,8 +902,14 @@ void TChiusura_scontrino_mask::update_doc(TScontrino_mask & m, const TTurno_vend doc.put(TRN_PROGR, t.nturno()); doc.put(TRN_USERNAME, t.user()); doc.put("TEMPUSERNAME", t.superuser()); + TToken_string del(doc.get("DELETED_ROWS"), '£'); + + del.add(m.deleted_rows()); + doc.put("DELETED_ROWS", del); if (chiudi) { + const long ora = daytime(); + doc.stato(stato); m.set(F_STATO, doc.get(DOC_STATO)); doc.put(TRN_INC01, get(F_INC01)); @@ -674,6 +921,8 @@ void TChiusura_scontrino_mask::update_doc(TScontrino_mask & m, const TTurno_vend doc.put(TRN_INC07, get(F_INC07)); doc.put(TRN_INC08, get(F_INC08)); doc.put(TRN_RESTI, get(F_RESTO)); + doc.put(TRN_FINE, ora); + doc.put("NEGOZIO", sapp().negozio()); const long codcf = get_long(F_CODCFC); if (codcf > 0L) @@ -820,7 +1069,7 @@ bool TScontrino_application::user_create( ) _turno = new TTurno_vendita; _chiusura = new TChiusura_scontrino_mask; - _filiale = d.get("FILIALE"); + _negozio = d.get("NEGOZIO"); _numdoc = d.get("CODNUM"); _tipodoc = d.get("TIPODOC"); _codlist = d.get("CODLIST"); @@ -829,7 +1078,8 @@ bool TScontrino_application::user_create( ) _chk_doc = d.get_bool("CHECKDOC"); _barcode_peso_var = d.get_bool("BARPVAR"); _peso_var = d.get_bool("CODPVAR"); - + _qta_char = d.get_char("QTACHAR", NULL, -1, ')'); + _chiusura->init(d); @@ -860,7 +1110,7 @@ bool TScontrino_application::user_create( ) _tv_cmds.add(w.get("TVCMD", "", i)); } _bye_bye = w.get("BYEBYE"); - _doppio_zero = w.get_bool("DoppioZero", NULL, -1, true); + _doppio_zero = w.get_bool("DoppioZero", NULL, -1, false); _sc_mask = new TScontrino_mask(_tipodoc); @@ -1046,7 +1296,7 @@ void TScontrino_application::print_wincor() TParagraph_string para("", text_len); const int rows = doc.physical_rows(); - for (int r = 1; r < rows; r++) + for (int r = 1; r <= rows; r++) { const TRiga_documento& riga = doc[r]; diff --git a/vd/vd0700a.h b/vd/vd0700a.h index 573880620..5afa9629c 100755 --- a/vd/vd0700a.h +++ b/vd/vd0700a.h @@ -17,5 +17,6 @@ #define F_CODCFC 122 #define F_RAGSOCC 123 #define F_DAFATT 124 +#define F_CODSEARCH 205 #define DLG_FATT 200 diff --git a/vd/vd0700a.uml b/vd/vd0700a.uml index 44af30554..6809a7a38 100755 --- a/vd/vd0700a.uml +++ b/vd/vd0700a.uml @@ -16,13 +16,13 @@ END CURRENCY F_TOTDOC 18 BEGIN - PROMPT 2 3 "Totale scontrino " + PROMPT 2 3 "@bTotale scontrino " FLAGS "D" END CURRENCY F_CASSAINI 18 BEGIN - PROMPT 42 3 "Cassa " + PROMPT 46 3 "Cassa " FLAGS "D" END @@ -76,13 +76,13 @@ END CURRENCY F_RESTO 18 BEGIN - PROMPT 2 13 "Resto " + PROMPT 2 13 "@bResto " FLAGS "D" END CURRENCY F_SALDO 18 BEGIN - PROMPT 42 13 "Saldo " + PROMPT 46 13 "Saldo " FLAGS "D" GROUP 1 END diff --git a/vd/vdconf.h b/vd/vdconf.h index dffa4c17a..e79a7ecc0 100755 --- a/vd/vdconf.h +++ b/vd/vdconf.h @@ -1,11 +1,12 @@ -#define FD_FILIALE 101 +#define FD_NEGOZIO 101 #define FD_CODNUM 102 #define FD_TIPODOC 103 #define FD_CODLIST 106 #define FD_CHECKDOC 107 #define FD_BARPVAR 108 #define FD_CODPVAR 109 +#define FD_QTACHAR 110 #define ROW_INC 10 #define FD_CODPAG01 111 @@ -36,7 +37,7 @@ #define FD_DESLIST 202 #define FD_DESNUM 204 #define FD_DESTIPODOC 205 -#define FD_DESFIL 206 +#define FD_DESNEG 206 #define FD_CODNUMF 207 #define FD_DESNUMF 208 diff --git a/vd/vdlib.cpp b/vd/vdlib.cpp index 2c1fc3d59..07aaea53d 100755 --- a/vd/vdlib.cpp +++ b/vd/vdlib.cpp @@ -470,5 +470,35 @@ TTurno_vendita::TTurno_vendita() : _rec(LF_TURNI) TOperatore::TOperatore(const char * user) : _rec(LF_TAB) { _rec = cache().get("OPD", user); + const TString & gruppo = cache().get(LF_USER, user, USR_GROUPNAME); + + if (gruppo.full()) + { + const TRectype & recgr = cache().get("OPD", gruppo); + + if(!recgr.empty()) + { + if (max_scontrino() <= ZERO) + _rec.put("R0", recgr.get_real("R0")); + if (max_abbuono() <= ZERO) + _rec.put("R1", recgr.get_real("R1")); + if (!can_change_price()) + _rec.put("B0", recgr.get_bool("B0")); + if (!can_sotto_costo()) + _rec.put("B1", recgr.get_bool("B1")); + if (!can_change_omaggi()) + _rec.put("B2", recgr.get_bool("B2")); + if (!can_change_sconti()) + _rec.put("B3", recgr.get_bool("B3")); + if (!can_resi()) + _rec.put("B4", recgr.get_bool("B4")); + if (!can_invoice()) + _rec.put("B5", recgr.get_bool("B5")); + if (max_sconto() <= ZERO) + _rec.put("R2", recgr.get_real("R2")); + if (provvigione() <= ZERO) + _rec.put("R3", recgr.get_real("R3")); + } + } } diff --git a/vd/vdmenu.men b/vd/vdmenu.men index d5f1d802a..97fe35a35 100755 --- a/vd/vdmenu.men +++ b/vd/vdmenu.men @@ -22,7 +22,7 @@ Item_01 = "Statistiche personalizzate", "vd0 -0 %TDT" Item_02 = "Stagioni", "vd0 -0 %STG" Item_03 = "Reparti", "vd0 -0 RPD", "F" Item_04 = "Operatori", "vd0 -0 OPD", "F" -Item_05 = "Filiali", "vd0 -0 FLD", "F" +Item_05 = "Negozi", "vd0 -0 FLD", "F" Item_06 = "Casse", "vd0 -0 CAS", "F" [VDMENU_020] @@ -34,7 +34,7 @@ Item_01 = "Statistiche personalizzate", "vd0 -1 %TDT" Item_02 = "Stagioni", "vd0 -1 %STG" Item_03 = "Reparti", "vd0 -1 RPD", "F" Item_04 = "Operatori", "vd0 -1 OPD", "F" -Item_05 = "Filiali", "vd0 -1 FLD", "F" +Item_05 = "Negozi", "vd0 -1 FLD", "F" Item_06 = "Casse", "vd0 -1 CAS", "F" [VDMENU_030] diff --git a/vd/vdstfld.uml b/vd/vdstfld.uml index 97bc19468..f16212a70 100755 --- a/vd/vdstfld.uml +++ b/vd/vdstfld.uml @@ -1,6 +1,6 @@ #include "../ba/ba3200.h" -PAGE "Stampa filiali" -1 -1 50 8 +PAGE "Stampa Negozi" -1 -1 50 8 STRING F_INIZIO1 2 BEGIN diff --git a/vd/vdtbfld.uml b/vd/vdtbfld.uml index bd8d7bf09..2ffd50a03 100755 --- a/vd/vdtbfld.uml +++ b/vd/vdtbfld.uml @@ -6,7 +6,7 @@ TOOLBAR "Toolbar" 0 0 0 2 ENDPAGE -PAGE "Filiali" -1 -1 78 8 +PAGE "Negozio" -1 -1 78 8 GROUPBOX DLG_NULL 75 5 BEGIN @@ -17,7 +17,7 @@ END STRING F_CODICE 2 BEGIN PROMPT 4 2 "Codice " -HELP "Codice filiale" +HELP "Codice negozio" FIELD CODTAB FLAGS "UZ" KEY 1 @@ -33,7 +33,7 @@ END STRING F_DESCR 70 50 BEGIN PROMPT 4 4 "Descrizione " -HELP "Descrizione filiale" +HELP "Descrizione negozio" FIELD S0 KEY 2 USE FLD KEY 2