From 8ca204bc3f5c6357d3562f575f893eae65b72fcc Mon Sep 17 00:00:00 2001 From: augusto Date: Fri, 23 May 1997 14:52:38 +0000 Subject: [PATCH] Modificati tutti gli sheet con autoload/autosave automatico git-svn-id: svn://10.65.10.50/trunk@4396 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ve/ve2400.cpp | 324 ++++++++++++++++++++------------------------------ 1 file changed, 130 insertions(+), 194 deletions(-) diff --git a/ve/ve2400.cpp b/ve/ve2400.cpp index a6668bdd2..15b9f5021 100755 --- a/ve/ve2400.cpp +++ b/ve/ve2400.cpp @@ -13,10 +13,10 @@ // maschera dell'anagrafica di magazzino class TMask_anamag: public TMask { - TLocalisamfile *_codcorr; // file di accesso ai codici corrispondenti - TLocalisamfile *_deslin; // file di accesso alle descrizioni in lingua - TLocalisamfile *_umart; // file di accesso alle unità di misura - TLocalisamfile *_giacenze; // file di accesso alle giacenze +// TLocalisamfile *_codcorr; // file di accesso ai codici corrispondenti +// TLocalisamfile *_deslin; // file di accesso alle descrizioni in lingua +// TLocalisamfile *_umart; // file di accesso alle unità di misura +// TLocalisamfile *_giacenze; // file di accesso alle giacenze TRelation * _rel; // relazione principale TRecord_array *_linee_rec_giac; // record array di accoppiamento delle giacenze con lo sheet @@ -28,6 +28,7 @@ class TMask_anamag: public TMask { int last_annosto; static bool handle_codice(TMask_field &, KEY); // handler del campo codice articolo + static bool handle_livart(TMask_field &, KEY); // handler dei campi codice articolo (livelli) static bool handle_anno(TMask_field &, KEY); // handler del campo anno delle giacenze static bool handle_stoanno(TMask_field &, KEY); // handler del campo anno delle giacenze static bool handle_sheet_um(TMask_field &, KEY); // handler dello sheet delle unità di misura @@ -40,25 +41,24 @@ class TMask_anamag: public TMask { static bool handle_sheet_um_price(TMask_field &, KEY); // handler del campo PREZZO e PREZZO_LORDO dello sheet delle unità di misura public: - TMask_anamag(TRelation * rel, bool enable_mag); + TMask_anamag(TRelation * rel, bool enable_mag, bool enable_artliv); virtual ~TMask_anamag(); - int sheetgiac_read(); - int sheetgiac_write(const int re); - int sheetgiac_remove(); + static void sheetgiac_get(TSheet_field &fld_righe, int item); + static void sheetgiac_put(TSheet_field &fld_righe, int item); }; // costruttore della maschera anagrafica di magazzino -TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag) : TMask("ve2400") +TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag, bool enable_artliv) : TMask("ve2400") { _rel=rel; - _umart= new TLocalisamfile(LF_UMART); // apre i file per disporre dei tracciati record +/* _umart= new TLocalisamfile(LF_UMART); // apre i file per disporre dei tracciati record _deslin= new TLocalisamfile(LF_DESLIN); _codcorr= new TLocalisamfile(LF_CODCORR); _giacenze= new TLocalisamfile(LF_MAG); _linee_rec_giac= new TRecord_array(LF_MAG, "NRIGA");// alloca i record - +*/ // imposta il riconoscimento dei caratteri del formato dell'ultima parte dell'articolo TString80 format(""); TTable _tabfca("FCA"); @@ -73,7 +73,6 @@ TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag) : TMask("ve2400") last_annogiac=-1; last_annosto=-1; - set_handler(F_CODART, handle_codice); set_handler(F_ANNO, handle_anno); set_handler(F_STOANNO, handle_stoanno); set_handler(F_SHEETUM, handle_sheet_um); @@ -81,6 +80,8 @@ TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag) : TMask("ve2400") set_handler(F_SHEETDESLIN, handle_sheet_deslin); set_handler(F_SHEETCOD, handle_sheet_cod); set_handler(F_SHEETGIAC, handle_sheetgiac); + ((TSheet_field &)field(F_SHEETGIAC)).set_userget(sheetgiac_get); + ((TSheet_field &)field(F_SHEETGIAC)).set_userput(sheetgiac_put); set_handler(F_SHEETSTOMAG, handle_sheetstomag); @@ -91,8 +92,6 @@ TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag) : TMask("ve2400") fm.set_handler(FS_PREZZO_LORDO, handle_sheet_um_price); // Abilita la pagina delle giacenze - // TConfig conf_mg(CONFIG_DITTA, "mg"); - // if (conf_mg.get_bool(".....")) if (enable_mag) { enable_page(4,TRUE); @@ -100,44 +99,23 @@ TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag) : TMask("ve2400") // per la pagina giacenze TSheet_field &fld_giac= (TSheet_field &)field(F_SHEETGIAC); // disabilita le colonne quando non sono utilizzati i livelli di giacenza - if (livelli_giac->enabled(1)) { - fld_giac.sheet_mask().field(F_LIV1).show(); - fld_giac.set_column_header(fld_giac.cid2index(F_LIV1),livelli_giac->name(1)); - fld_giac.sheet_mask().field(F_LIV1).set_prompt(livelli_giac->name(1)); - } else { - fld_giac.sheet_mask().field(F_LIV1).hide(); - fld_giac.delete_column(fld_giac.cid2index(F_LIV1)); - } - if (livelli_giac->enabled(2)) { - fld_giac.sheet_mask().field(F_LIV2).show(); - fld_giac.set_column_header(fld_giac.cid2index(F_LIV2),livelli_giac->name(2)); - fld_giac.sheet_mask().field(F_LIV2).set_prompt(livelli_giac->name(2)); - } else { - fld_giac.sheet_mask().field(F_LIV2).hide(); - fld_giac.delete_column(fld_giac.cid2index(F_LIV2)); - } - if (livelli_giac->enabled(3)) { - fld_giac.sheet_mask().field(F_LIV3).show(); - fld_giac.set_column_header(fld_giac.cid2index(F_LIV3),livelli_giac->name(3)); - fld_giac.sheet_mask().field(F_LIV3).set_prompt(livelli_giac->name(3)); - } else { - fld_giac.sheet_mask().field(F_LIV3).hide(); - fld_giac.delete_column(fld_giac.cid2index(F_LIV3)); - } - if (livelli_giac->enabled(4)) { - fld_giac.sheet_mask().field(F_LIV4).show(); - fld_giac.set_column_header(fld_giac.cid2index(F_LIV4),livelli_giac->name(4)); - fld_giac.sheet_mask().field(F_LIV4).set_prompt(livelli_giac->name(4)); - } else { - fld_giac.sheet_mask().field(F_LIV4).hide(); - fld_giac.delete_column(fld_giac.cid2index(F_LIV4)); + for (int i=0; i<4; i++) + { + if (livelli_giac->enabled(1+i)) { + fld_giac.sheet_mask().field(F_LIV1+i).show(); + fld_giac.set_column_header(fld_giac.cid2index(F_LIV1+i),livelli_giac->name(1+i)); + fld_giac.sheet_mask().field(F_LIV1+i).set_prompt(livelli_giac->name(1+i)); + } else { + fld_giac.sheet_mask().field(F_LIV1+i).hide(); + fld_giac.delete_column(fld_giac.cid2index(F_LIV1+i)); + } } // disabilita la colonna numero distinte - if (1) { + if (0) { fld_giac.delete_column(fld_giac.cid2index(F_NDIST)); fld_giac.sheet_mask().field(F_NDIST).enable(FALSE); } - // abilita la gestione delle ubicazioni + // abilita la gestione delle ubicazioni (manuale/su tabella) if (1) { fld_giac.sheet_mask().field(F_UBICAZ).show(FALSE); fld_giac.sheet_mask().field(F_UBICAZD).show(FALSE); @@ -150,23 +128,54 @@ TMask_anamag::TMask_anamag(TRelation * rel, bool enable_mag) : TMask("ve2400") } else { enable_page(4,FALSE); } + // abilita la visualizzazione dei campi distinti per i livelli articolo + if (enable_artliv) + { + field(F_CODART).hide(); + field(F_GCA).hide(); + + + for (int i=0; i<3; i++) + { + // versione con campi predefiniti sulla maschera + if (livelli_art->enabled(1+i)) { + field(F_LIVART1+i).show(); + field(F_LIVART1+livelli_giac->last_level()-1).check_type(1+i==livelli_art->last_level() ? CHECK_NONE : CHECK_REQUIRED); + ((TEdit_field&)field(F_LIVART1+livelli_giac->last_level()-1)).set_width(livelli_art->code_lenght(1+i)); + set_handler(F_LIVART1+i, handle_livart); + } else { + field(F_LIVART1+i).hide(); + field(F_LIVART1+livelli_giac->last_level()-1).check_type(CHECK_NONE); + } + } + } else { + if (livelli_art->enabled()) + { + set_handler(F_CODART, handle_codice); + for (int i=0; i<9; i++) + field(F_LIVART1+i).hide(); + } else + if (!livelli_art->enabled(2)) + // .. nasconde il pulsante dei livelli + field(F_GCA).hide(); + } } TMask_anamag::~TMask_anamag() { - delete _linee_rec_giac; +/* delete _linee_rec_giac; delete _giacenze; delete _codcorr; delete _deslin; delete _umart; - +*/ delete livelli_art; delete livelli_giac; } -// +// HANDLER DEL CODICE: controlla la corrispondenza al formato previsto bool TMask_anamag::handle_codice(TMask_field &fld, KEY k) { TMask_anamag &mask=(TMask_anamag &)fld.mask(); @@ -182,18 +191,40 @@ bool TMask_anamag::handle_codice(TMask_field &fld, KEY k) _tabgrp.zero(); _tabgrp.put("CODTAB", codepart); if (_tabgrp.read()!=NOERR) { - fld.error_box("'%s' non è un codice del gruppo '%s'",(const char *)codepart.mid(1),(const char *)mask.livelli_art->name(l)); + fld.error_box("'%s' non appartiene a '%s'",(const char *)codepart.mid(1),(const char *)mask.livelli_art->name(l)); return(FALSE); } } - codepart=mask.livelli_art->unpack_grpcode(fld.get(),l); + codepart=mask.livelli_art->unpack_grpcode(fld.get(),mask.livelli_art->last_level()); + if (codepart.blank()) { + fld.error_box("Il codice articolo non può essere vuoto"); + return(FALSE); + } if (!mask.metac->recognized(codepart)) { - fld.error_box("Il codice articolo non corrisponde al formato previsto ('%s' ?? '%s')",(const char *)codepart,(const char *)mask.metac->language()); + fld.error_box("Il codice articolo non corrisponde al formato previsto \n('%s' ?? '%s')",(const char *)codepart,(const char *)mask.metac->language()); return(FALSE); } } return(TRUE); } + +// HANDLER DEL CODICE: controlla la corrispondenza al formato previsto +bool TMask_anamag::handle_livart(TMask_field &fld, KEY k) +{ + if (k == K_TAB && fld.focusdirty()) + { + TMask_anamag & m=(TMask_anamag & )fld.mask(); + TString s(m.field(F_CODART).get()); + m.livelli_art->pack_grpcode(s,fld.get(),fld.dlg()-F_LIVART1+1); + m.field(F_CODART).set(s); + if (fld.dlg()-F_LIVART1+1==m.livelli_art->last_level() && fld.get().blank()) { + + fld.error_box("Il codice articolo non può essere lasciato in bianco"); + return FALSE; + } + } + return TRUE; +} bool TMask_anamag::handle_anno(TMask_field &fld, KEY k) { @@ -202,17 +233,19 @@ bool TMask_anamag::handle_anno(TMask_field &fld, KEY k) if (k == K_TAB) { - TSheet_field &fld_giac= (TSheet_field &)fld.mask().field(F_SHEETGIAC); + TSheet_field &fld_giac= (TSheet_field &)mask.field(F_SHEETGIAC); if (mask.last_annogiac>0 && mask.last_annogiac!=fld.mask().get_int(F_ANNO)) { - if (fld.mask().field(F_SHEETGIAC).dirty() && handle_sheetgiac(fld_giac,K_ENTER)) { + if (fld_giac.dirty() && handle_sheetgiac(fld_giac,K_ENTER)) { if (fld.yesno_box("Vuoi salvare le righe di giacenza per l'anno %d",mask.last_annogiac )) { - mask.sheetgiac_write(TRUE); + fld_giac.autosave(*mask._rel); + fld_giac.record()->rewrite(); } } mask.field(F_ANNORIF).set(fld.get()); // rilegge le giacenze relative a quell'anno ed aggiorna il layout - mask.sheetgiac_read(); + fld_giac.record()->read(*fld_giac.putkey(*mask._rel)); + fld_giac.autoload(*mask._rel); fld_giac.force_update(); } mask.last_annogiac=mask.get_int(F_ANNO); @@ -360,7 +393,10 @@ bool TMask_anamag::handle_sheetgiac(TMask_field &fld, KEY k) // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già if (v.add(codgiac)) return error_box("Esistono due righe con lo stesso codice di giacenza"); + // ordina le righe per livello+codmag } + // ordina le righe per livello+codmag + // f.rows_array().sort(); } } return TRUE; @@ -488,139 +524,39 @@ bool TMask_anamag::handle_sheet_um_price(TMask_field &f, KEY k) - - - - - - -int TMask_anamag::sheetgiac_read() +void TMask_anamag::sheetgiac_get(TSheet_field &fld_righe, int item) { - TRectype rgiac(LF_MAG); // prende il record corrente dal file giacenze - TSheet_field &fld_giac= (TSheet_field &)field(F_SHEETGIAC); // prende lo sheet giacenze - - rgiac.put("CODART", get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera) - rgiac.put("ANNOES", get(F_ANNO)); // - _linee_rec_giac->read(rgiac); // legge il record array - fld_giac.destroy(); // cancella lo sheet - const int lastgiac = _linee_rec_giac->last_row(); - for (int i= 1; i <= lastgiac; i++) - { - TRectype &rec= _linee_rec_giac->row(i, TRUE); // prende il record della riga corrente dal record array - TToken_string &row= fld_giac.row(i-1); - - row = ""; - row.add(rec.get("CODMAG").mid(0,3)); // imposta la riga dello sheet con i campi del record della riga corrente - row.add(rec.get("CODMAG").mid(3,2)); - - // !?!?! codici di livello - row.add( livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,1) ); - row.add( livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,2) ); - row.add( livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,3) ); - row.add( livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,4) ); - - row.add(rec.get("UBICAZ")); - row.add(rec.get("GIAC")); - row.add(rec.get("RIM")); - row.add(rec.get("VALRIM")); - row.add(rec.get("ACQ")); - row.add(rec.get("VALACQ")); - row.add(rec.get("ENT")); - row.add(rec.get("VALENT")); - row.add(rec.get("VEN")); - row.add(rec.get("VALVEN")); - row.add(rec.get("USC")); - row.add(rec.get("VALUSC")); - row.add(rec.get("ORDF")); - row.add(rec.get("VALORDF")); - row.add(rec.get("ORDC")); - row.add(rec.get("VALORDC")); - row.add(rec.get("SCARTI")); - row.add(rec.get("VALSCARTI")); - row.add(rec.get("PRODCOMP")); - row.add(rec.get("PRODFIN")); - row.add(rec.get("ACL")); - row.add(rec.get("INCL")); - row.add(rec.get("NLABEL")); - row.add(rec.get("SCORTAMIN")); - row.add(rec.get("LIVRIOR")); - row.add(rec.get("LOTTORIOR")); - row.add(rec.get("GIORNIRIOR")); - row.add(rec.get("NDIST")); - - fld_giac.check_row(i-1); - } - return(0); + TMask_anamag &m=(TMask_anamag &)fld_righe.mask(); + // prende il record della riga corrente dal record array + TRectype &rec= fld_righe.record()->row(item, TRUE); + TToken_string &row= fld_righe.row(item-1); + // codici di livello + row.add( m.livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,1),fld_righe.cid2index(F_LIV1) ); + row.add( m.livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,2),fld_righe.cid2index(F_LIV2) ); + row.add( m.livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,3),fld_righe.cid2index(F_LIV3) ); + row.add( m.livelli_giac->unpack_grpcode(rec.get("LIVELLO") ,4),fld_righe.cid2index(F_LIV4) ); } -int TMask_anamag::sheetgiac_write(const int re) + +// item varies from 1 to items() +void TMask_anamag::sheetgiac_put(TSheet_field &fld_righe, int item) { - TSheet_field &fld_giac= (TSheet_field &)field(F_SHEETGIAC); - - _linee_rec_giac->destroy_rows(); - if (insert_mode()) _linee_rec_giac->renum_key("CODART", get(F_CODART)); - - for (int i= 0; i < fld_giac.items(); i++) - { - TToken_string &row= fld_giac.row(i); + TMask_anamag &m=(TMask_anamag &)fld_righe.mask(); + TToken_string &row= fld_righe.row(item-1); - TString16 codmag(row.get(F_CODMAG-FIRST_FIELD)); - codmag << row.get(); - - if (codmag.not_empty()) - { - TRectype &recgiac= _linee_rec_giac->row(i+1, TRUE); - recgiac.put("CODMAG", codmag); - recgiac.put("ANNOES", last_annogiac); - // !?!?! codici livello - if (livelli_giac->enabled()) { - - TString16 packedcode; - livelli_giac->pack_grpcode(packedcode,row.get(fld_giac.cid2index(F_LIV1)),1); - livelli_giac->pack_grpcode(packedcode,row.get(fld_giac.cid2index(F_LIV2)),2); - livelli_giac->pack_grpcode(packedcode,row.get(fld_giac.cid2index(F_LIV3)),3); - livelli_giac->pack_grpcode(packedcode,row.get(fld_giac.cid2index(F_LIV4)),4); - recgiac.put("LIVELLO", packedcode); - } - recgiac.put("UBICAZ" ,row.get()); - recgiac.put("GIAC" ,row.get()); - recgiac.put("RIM" ,row.get()); - recgiac.put("VALRIM" ,row.get()); - recgiac.put("ACQ" ,row.get()); - recgiac.put("VALACQ" ,row.get()); - recgiac.put("ENT" ,row.get()); - recgiac.put("VALENT" ,row.get()); - recgiac.put("VEN" ,row.get()); - recgiac.put("VALVEN" ,row.get()); - recgiac.put("USC" ,row.get()); - recgiac.put("VALUSC" ,row.get()); - recgiac.put("ORDF" ,row.get()); - recgiac.put("VALORDF" ,row.get()); - recgiac.put("ORDC" ,row.get()); - recgiac.put("VALORDC" ,row.get()); - recgiac.put("SCARTI" ,row.get()); - recgiac.put("VALSCARTI" ,row.get()); - recgiac.put("PRODCOMP" ,row.get()); - recgiac.put("PRODFIN" ,row.get()); - recgiac.put("ACL" ,row.get()); - recgiac.put("INCL" ,row.get()); - recgiac.put("NLABEL" ,row.get()); - recgiac.put("SCORTAMIN" ,row.get()); - recgiac.put("LIVRIOR" ,row.get()); - recgiac.put("LOTTORIOR" ,row.get()); - recgiac.put("GIORNIRIOR" ,row.get()); - // campo distinte - if (0) - recgiac.put("NDIST" ,row.get()); - } - } - return (_linee_rec_giac->write(re)); + TRectype &recrighe= fld_righe.record()->row(item, TRUE); + // codici livello + if (m.livelli_giac->enabled()) { + TString16 packedcode; + m.livelli_giac->pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV1)),1); + m.livelli_giac->pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV2)),2); + m.livelli_giac->pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV3)),3); + m.livelli_giac->pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV4)),4); + recrighe.put("LIVELLO", packedcode); + } } - -inline int TMask_anamag::sheetgiac_remove() { - return(_linee_rec_giac->remove()); -} + // ****************************** // applicazione class TAnagrafica_magazzino : public TRelation_application { @@ -659,7 +595,7 @@ bool TAnagrafica_magazzino::user_create() _linee_rec_deslin= new TRecord_array(LF_DESLIN, "NRIGA"); _linee_rec_cod= new TRecord_array(LF_CODCORR, "NRIGA"); - _msk= new TMask_anamag(_rel,has_module(MGAUT)); + _msk= new TMask_anamag(_rel,has_module(MGAUT),FALSE); @@ -687,7 +623,7 @@ int TAnagrafica_magazzino::read(TMask& m) TSheet_field &fld_stomag= (TSheet_field &)m.field(F_SHEETSTOMAG); // prende il sheet delle unità di misura fld_stomag.sheet_mask().field(F_STOCODART).set(m.field(F_CODART).get()); - int i; + //int i; // ***************************** // LETTURA SHEET UNITA' DI MISURA @@ -770,7 +706,7 @@ int TAnagrafica_magazzino::read(TMask& m) */ // ***************************** // LETTURA SHEET GIACENZE - ((TMask_anamag &)m).sheetgiac_read(); + //((TMask_anamag &)m).sheetgiac_read(); } // no errors in TRelation_application::read(m); return err; @@ -782,7 +718,7 @@ bool TAnagrafica_magazzino::remove() return //_linee_rec_um->remove() == NOERR && // _linee_rec_deslin->remove() == NOERR && // _linee_rec_cod->remove() == NOERR && - _msk->sheetgiac_remove() == NOERR && + // _msk->sheetgiac_remove() == NOERR && TRelation_application::remove(); } @@ -790,9 +726,9 @@ int TAnagrafica_magazzino::write(const TMask& m) { int err= TRelation_application::write(m); - if (err != NOERR) - return err; - int i; + //if (err != NOERR) + // return err; + //int i; // *********************** // write dello sheet unita' di misura /* @@ -877,14 +813,14 @@ int TAnagrafica_magazzino::write(const TMask& m) // *********************** // write dello sheet giacenze - err = ((TMask_anamag &)m).sheetgiac_write(FALSE); + //err = ((TMask_anamag &)m).sheetgiac_write(FALSE); return err; } int TAnagrafica_magazzino::rewrite(const TMask& m) { - int i,err; + int err; // rewrite dello sheet Unita' di misura /* TSheet_field &fld_um= (TSheet_field &)m.field(F_SHEETUM); @@ -966,9 +902,9 @@ int TAnagrafica_magazzino::rewrite(const TMask& m) */ // rewrite dello sheet giacenze // - err = ((TMask_anamag &)m).sheetgiac_write(TRUE); + //err = ((TMask_anamag &)m).sheetgiac_write(TRUE); - if (err == NOERR) + //if (err == NOERR) err= TRelation_application::rewrite(m); return err;