diff --git a/mg/mg1100.cpp b/mg/mg1100.cpp index f781a18c6..63eede996 100755 --- a/mg/mg1100.cpp +++ b/mg/mg1100.cpp @@ -4,10 +4,13 @@ #include "../db/dblib.h" #include "../ve/veconf.h" -#include +#include +#include #include #include "anamag.h" +#include "rmovmag.h" + #include "mg1100.h" #include @@ -23,13 +26,16 @@ class TMask_movmag : public TMask int _autorows; TArray _old_qta; bool _check_giac; - + TMagazzini _magazzini; +protected: + virtual bool on_key(KEY key); + +protected: // aggiorna la riga di magazzino aggiungendo righe automatiche o esplosioni bool update_rigamov(int r, const char * old_codcaus, const char * old_codart, const real & old_quant); bool add_autorows(int r, const char * old_codcaus, const char * old_codart, const real & old_quant); bool add_explrows(int r); - TMagazzini _magazzini; void qta_inventory(real & qta); @@ -46,18 +52,18 @@ class TMask_movmag : public TMask static bool codgrp_handler(TMask_field &fld, KEY k); // handler del codice gruppo static void sheetrighe_put(TSheet_field &fld_righe, int item); static void sheetrighe_get(TSheet_field &fld_righe, int item); + public: TArticolo_giacenza& curr_art(); - TArray & old_qta() { return _old_qta; } - void update_tot(); + TArray& old_qta() { return _old_qta; } const TMagazzini& magazzini() const { return _magazzini; } int autorows() const { return _autorows;} + void update_tot(); TMask_movmag(TMov_mag* m_m); virtual ~TMask_movmag(); }; - // HANDLER DEL CODICE LIVELLO anagrafica bool TMask_movmag::codgrp_handler(TMask_field& f, KEY k) { @@ -66,7 +72,7 @@ bool TMask_movmag::codgrp_handler(TMask_field& f, KEY k) if (!livelli_giacenza().enabled()) { f.error_box(TR("Livelli del codice non abilitati")); - return FALSE; + return false; } const int levnum=1+f.dlg()-F_LIV1; return livelli_giacenza().autoinsert(levnum,f); @@ -74,11 +80,33 @@ bool TMask_movmag::codgrp_handler(TMask_field& f, KEY k) return true; } +bool TMask_movmag::on_key(KEY key) +{ + if (key == K_SHIFT+K_F12 && edit_mode()) + { + if (!field(DLG_SAVEREC).active()) // Riabilita bottoni spenti dalla protected_mode + { + enable(DLG_SAVEREC); + enable(DLG_DELREC); + } + + TSheet_field& ss = sfield(F_RIGHE); + FOR_EACH_SHEET_ROW(ss, i, row) + { + const char tipo = row->get_char(0); + if (tipo > ' ') + ss.enable_row(i); + } + ss.force_update(); + + return true; + } + return TMask::on_key(key); +} // costruttore della maschera anagrafica di magazzino //TMask_movmag::TMask_movmag() : -TMask_movmag::TMask_movmag(TMov_mag * m_m) - : TMask("mg1100") +TMask_movmag::TMask_movmag(TMov_mag * m_m) : TMask("mg1100") { _mov_mag = m_m; // setta handler e notify @@ -124,7 +152,6 @@ TMask_movmag::TMask_movmag(TMov_mag * m_m) ss.enable_column(ss.cid2index(F_CODDEP),gd); _autorows = prassid.get_int("AUTOROWS", "mg"); _check_giac = prassid.get_bool("CHECK_GIAC", "mg"); - } @@ -136,8 +163,9 @@ TMask_movmag::~TMask_movmag() void TMask_movmag::sheetrighe_get(TSheet_field &fld_righe, int item) { // 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); + TRectype& rec = fld_righe.record()->row(item, true); + TToken_string& row = fld_righe.row(item-1); + // codici di livello row.add( livelli_giacenza().unpack_grpcode(rec.get("LIVGIAC") ,1),fld_righe.cid2index(F_LIV1) ); row.add( livelli_giacenza().unpack_grpcode(rec.get("LIVGIAC") ,2),fld_righe.cid2index(F_LIV2) ); @@ -150,7 +178,7 @@ void TMask_movmag::sheetrighe_put(TSheet_field &fld_righe, int item) { TToken_string &row= fld_righe.row(item-1); - TRectype &recrighe= fld_righe.record()->row(item, TRUE); + TRectype &recrighe= fld_righe.record()->row(item, true); // codici livello if (livelli_giacenza().enabled()) { @@ -186,7 +214,7 @@ bool TMask_movmag::handle_righe(TMask_field &f, KEY k) } } } - return TRUE; + return true; } void TMask_movmag::update_tot() @@ -233,7 +261,7 @@ bool TMask_movmag::notify_righe(TSheet_field& ss, int r, KEY key) if ( key == K_DEL ) // Cancellazione { if (*ss.cell(r,ss.cid2index( F_AUTOMATICA))==riga_automatica) - return FALSE; // can't remove auto lines directly + return false; // can't remove auto lines directly while (r < ss.items()-1 && *ss.cell(r+1,ss.cid2index( F_AUTOMATICA))==riga_automatica) { // autoremove automatic lines along with the original one @@ -247,7 +275,7 @@ bool TMask_movmag::notify_righe(TSheet_field& ss, int r, KEY key) m.update_tot(); } else if (key == K_INS) { // Inserimento if (r < ss.items() && *ss.cell(r,ss.cid2index( F_AUTOMATICA))==riga_automatica) - return FALSE; // cannot insert between a row and its generated one + return false; // cannot insert between a row and its generated one } else if (key == K_CTRL + K_INS) { // Inserimento accordato @@ -374,7 +402,7 @@ bool TMask_movmag::handle_righeprezzo1(TMask_field &f, KEY k) { if (f.mask().get(F_PREZZO).blank()) return handle_righeprezzo2(f, k); - return TRUE; + return true; } // proposta hard: propone il prezzo in ogni caso @@ -396,7 +424,7 @@ bool TMask_movmag::handle_righeprezzo2(TMask_field &f, KEY k) } mmm._price_codart = codart; } - return TRUE; + return true; } bool TMask_movmag::handle_checksosp(TMask_field &f, KEY k) @@ -421,7 +449,7 @@ bool TMask_movmag::handle_checksosp(TMask_field &f, KEY k) return error_box(FR("Articolo %s sospeso, quindi non movimentabile"), (const char *)f.get()); } } - return TRUE; + return true; } bool TMask_movmag::handle_codarticolo(TMask_field &f, KEY k) @@ -475,11 +503,11 @@ bool TMask_movmag::handle_causrig(TMask_field &f, KEY k) if (k==K_TAB && f.focusdirty()) { if (!handle_checksosp(f, k)) - return FALSE; + return false; handle_righeprezzo1(f, k); } - return TRUE; + return true; } // proposta hard: propone il prezzo in ogni caso @@ -504,13 +532,13 @@ bool TMask_movmag::handle_giacattuale(TMask_field &f, KEY k) if (um.not_empty()) { TArticolo_giacenza & art = cached_article_balances(maskrighe.get(F_CODART)); - real disp = art.disponibilita(maskmov.get(F_ANNOES),codmag,codliv,TRUE); + real disp = art.disponibilita(maskmov.get(F_ANNOES),codmag,codliv,true); disp = art.convert_to_um(disp, um, NULL, false); f.set(disp.string()); } } - return TRUE; + return true; } @@ -525,8 +553,8 @@ bool TMask_movmag::update_rigamov (int r, const char * old_codcaus, const char * bool TMask_movmag::add_autorows (int r, const char * old_codcaus, const char * old_codart, const real & old_quant) { - bool added_some=FALSE; - TSheet_field & ss=(TSheet_field & )field(F_RIGHE); + bool added_some=false; + TSheet_field & ss= sfield(F_RIGHE); real new_factor(ss.cell(r,ss.cid2index(F_QUANT))); new_factor = old_quant.is_zero() ? ZERO : new_factor / old_quant; TString8 new_codcaus(ss.cell(r,ss.cid2index(F_CAUSRIG))); @@ -535,7 +563,7 @@ bool TMask_movmag::add_autorows (int r, const char * old_codcaus, const char * o const TCausale_magazzino oldcau(old_codcaus); const TCausale_magazzino cau(new_codcaus); - bool rimuovi_righe_coll=FALSE; + bool rimuovi_righe_coll=false; bool inserisci_righe_coll= *cau.caus_collegata()!='\0' && *ss.cell(r,ss.cid2index(F_ESPLOSA)) == ' '; if (inserisci_righe_coll) { @@ -545,7 +573,7 @@ bool TMask_movmag::add_autorows (int r, const char * old_codcaus, const char * o if (old_codcaus != new_codcaus) { - rimuovi_righe_coll = TRUE; + rimuovi_righe_coll = true; } else if ((r < ss.items()-1 && *ss.cell(r+1,ss.cid2index( F_AUTOMATICA)) == riga_automatica) @@ -553,14 +581,14 @@ bool TMask_movmag::add_autorows (int r, const char * old_codcaus, const char * o { if (strcmp(old_codart,ss.cell(r,ss.cid2index( F_CODART)))!=0 ) // ho cambiato il codice articolo del finito: rimuovo le righe automatiche esplose - rimuovi_righe_coll = TRUE; + rimuovi_righe_coll = true; else - inserisci_righe_coll=FALSE; + inserisci_righe_coll=false; } } else if (*oldcau.caus_collegata()!='\0') // ho cambiato causale, passando ad una che non ha collegamenti - rimuovi_righe_coll=TRUE; + rimuovi_righe_coll=true; // ****************** if (rimuovi_righe_coll) { @@ -591,7 +619,7 @@ bool TMask_movmag::add_autorows (int r, const char * old_codcaus, const char * o if (cau_coll.has_default_dep()) newrow.add(dep,ss.cid2index(F_CODDEP)); COPIA_SU_AUTO(F_PREZZO); - added_some= TRUE; + added_some= true; } while (r+offset < ss.items() && *ss.cell(r+offset,ss.cid2index( F_AUTOMATICA))==riga_automatica) { @@ -632,7 +660,7 @@ bool TMask_movmag::add_explrows(int r) if (new_codcaus.blank()) new_codcaus=get(F_CODCAUS); - bool added_some=FALSE; + bool added_some=false; const TCausale_magazzino cau(new_codcaus); TArticolo articolo; @@ -646,7 +674,7 @@ bool TMask_movmag::add_explrows(int r) // c'e' una riga di movimento esplodente non ancora esplosa: // va sostituita con n righe esplose real prezzo,quant; - const char tipo_costo = cau.get("S11")[0]; + const char tipo_costo = cau.get_char("S11"); const int livello = cau.get_int("I0"); const TString codart = sheet.cell(r,sheet.cid2index(F_CODART)); bool ok = distinta.set_root(codart); @@ -654,7 +682,7 @@ bool TMask_movmag::add_explrows(int r) const bool is_coll = rigaprec >= 0 && *sheet.cell(r, sheet.cid2index(F_AUTOMATICA)) == riga_automatica; if (ok) { - distinta.explode(boom, TRUE, RAGGR_EXP_NONE, livello, "A"); + distinta.explode(boom, true, RAGGR_EXP_NONE, livello, "A"); for (int newrow=0; newrow < boom.items() ; newrow++) { TRiga_esplosione & riga_esp=(TRiga_esplosione & )(boom[newrow]); @@ -707,7 +735,7 @@ bool TMask_movmag::add_explrows(int r) sheet.check_row(r+1+newrow); sheet.force_update(r+1+newrow); - added_some=TRUE; + added_some=true; } // elimino la riga "padre" if (boom.items() > 0) @@ -725,8 +753,7 @@ bool TMask_movmag::add_explrows(int r) return added_some; } -real TMask_movmag::proposed_price(const char *codart, - real quant, const char *causrig) +real TMask_movmag::proposed_price(const char *codart, real quant, const char *causrig) { real rv; @@ -776,7 +803,7 @@ bool TMask_movmag::handle_codcaus(TMask_field &fld, KEY k) // aggiorna le righe di sheet TMask_movmag &m=(TMask_movmag &)fld.mask(); TSheet_field & ss=(TSheet_field & )m.field(F_RIGHE); - bool added_some = FALSE; + bool added_some = false; // aggiorna le righe che dipendono dalla causale movimento for (int i=0; i< ss.items(); i++) @@ -792,7 +819,7 @@ bool TMask_movmag::handle_codcaus(TMask_field &fld, KEY k) } if (k == K_TAB) old_codcaus=fld.get(); - return TRUE; + return true; } bool TMask_movmag::handle_datacomp(TMask_field &fld, KEY k) @@ -809,7 +836,7 @@ bool TMask_movmag::handle_datacomp(TMask_field &fld, KEY k) else return fld.error_box(TR("La data indicata non appartiene a nessuno degli esercizi contabili inseriti ")) ; } - return TRUE; + return true; } class TApp_movmag: public TRelation_application @@ -817,31 +844,27 @@ class TApp_movmag: public TRelation_application TMask_movmag *_msk; // maschera principale TRelation * _rel; // relazione contenente il file movimenti +protected: virtual bool user_create(); virtual bool user_destroy(); virtual TMask *get_mask(int) { return _msk; } virtual void init_query_mode(TMask&) ; virtual void init_insert_mode(TMask&) ; virtual void init_modify_mode(TMask&) ; - virtual bool changing_mask(int) { return FALSE; } + virtual bool changing_mask(int) { return false; } virtual TRelation *get_relation() const { return _rel; } - virtual const char *get_next_key(); + virtual bool get_next_key(TToken_string& key); virtual int read(TMask& m); - TString16 _nextcod; - -public: - TApp_movmag() {}; - virtual ~TApp_movmag() {}; + virtual bool protected_record(TRectype& rec); }; - inline TApp_movmag& app() { return (TApp_movmag&) main_app(); } int TApp_movmag::read(TMask& m) { const int err = TRelation_application::read(m); if (err == NOERR) - ((TMask_movmag &)m).update_tot(); + ((TMask_movmag&)m).update_tot(); return err; } @@ -855,9 +878,15 @@ void TApp_movmag::init_modify_mode(TMask& m) { m.disable(F_INVENTORYMODE); const bool inventory = m.get_bool(F_INVENTORYMODE); - TSheet_field & ss = m.sfield(F_RIGHE); + TSheet_field& ss = m.sfield(F_RIGHE); ss.sheet_mask().field(F_QUANT).check_type(inventory ? CHECK_NONE : CHECK_REQUIRED); TRelation_application::init_modify_mode(m); + + FOR_EACH_SHEET_ROW(ss, i, row) + { + if (*row > ' ') // Tipo riga automatico + ss.disable_row(i); + } } void TApp_movmag::init_insert_mode(TMask& m) @@ -866,9 +895,9 @@ void TApp_movmag::init_insert_mode(TMask& m) const bool inventory = m.get_bool(F_INVENTORYMODE); TSheet_field& ss = m.sfield(F_RIGHE); ss.sheet_mask().field(F_QUANT).check_type(inventory ? CHECK_NONE : CHECK_REQUIRED); -((TMask_movmag &)m).old_qta().destroy(); + ((TMask_movmag&)m).old_qta().destroy(); - for (int i = 0; i < ((TMask_movmag &)m).autorows(); i++) + for (int i = ((TMask_movmag&)m).autorows(); i > 0; i--) ss.insert(-1, false, true); TRelation_application::init_insert_mode(m); @@ -876,9 +905,9 @@ void TApp_movmag::init_insert_mode(TMask& m) bool TApp_movmag::user_create() { - open_files(LF_ANAMAG, LF_UMART, LF_CODCORR, LF_DESLIN, LF_MOVMAG,LF_RMOVMAG, LF_MAG, LF_STOMAG, LF_TABCOM,0); + open_files(LF_ANAMAG, LF_UMART, LF_CODCORR, LF_DESLIN, LF_MOVMAG,LF_RMOVMAG, LF_MAG, LF_STOMAG, LF_TABCOM, 0); - TMov_mag * m_m= new TMov_mag(); // record del movimento di magazzino + TMov_mag* m_m = new TMov_mag(); // record del movimento di magazzino m_m->enable_autoload(LF_RMOVMAG); // maschera specifica con gli handler dei movimenti @@ -887,29 +916,39 @@ bool TApp_movmag::user_create() _rel= new TRelation(LF_MOVMAG); _rel->lfile().set_curr(m_m); - return TRUE; + return true; } bool TApp_movmag::user_destroy() { delete _rel; delete _msk; - - return TRUE; + return true; } // autonumerazione -const char *TApp_movmag::get_next_key() +bool TApp_movmag::get_next_key(TToken_string& nextcod) { const char* nk = ((TMov_mag &)_rel->curr()).get_next_key(); - return _nextcod.format("%d|%s",F_NUMREG, nk); + nextcod.format("%d|%s", F_NUMREG, nk); + return true; +} + +bool TApp_movmag::protected_record(TRectype& rec) +{ + bool prot = false; + TLocalisamfile rmov(LF_RMOVMAG); + rmov.put(RMOVMAG_NUMREG, rec.get(RMOVMAG_NUMREG)); + rmov.put(RMOVMAG_NRIG, 1); + if (rmov.read() == NOERR) + prot = rmov.get_char(RMOVMAG_TIPORIGA) == riga_dadocumento; + return prot; } int mg1100(int argc, char* argv[]) { TApp_movmag a; a.run(argc, argv, TR("Movimenti di magazzino")); - exit(0); return 0; } diff --git a/mg/mg1100a.h b/mg/mg1100a.h index 7cdf3ca20..f644ddff0 100755 --- a/mg/mg1100a.h +++ b/mg/mg1100a.h @@ -28,5 +28,4 @@ // #define F_VALORE 156 #define F_DESCAUSRIG 157 -#define G_NOAUTO 1 #define ALIAS_FCG 500 diff --git a/mg/mg1100a.uml b/mg/mg1100a.uml index 06fa10d2a..21180b84f 100755 --- a/mg/mg1100a.uml +++ b/mg/mg1100a.uml @@ -23,9 +23,7 @@ STRING F_AUTOMATICA 1 BEGIN PROMPT 2 1 "Tipo riga " FIELD AUTOMATICA - FLAGS "DG" - MESSAGE EMPTY ENABLE,G_NOAUTO@ - MESSAGE DISABLE,G_NOAUTO@ + FLAGS "D" END STRING F_CODART 20 @@ -42,7 +40,6 @@ BEGIN OUTPUT F_DESART DESCR OUTPUT F_UM LF_UMART->UM CHECKTYPE SEARCH - GROUP G_NOAUTO ADD RUN ve2 -3 MESSAGE CHECK,F_GIAC END @@ -58,7 +55,6 @@ BEGIN DISPLAY "Codice@20" CODART COPY OUTPUT F_CODART CHECKTYPE NORMAL - GROUP G_NOAUTO ADD RUN ve2 -3 END @@ -161,7 +157,6 @@ BEGIN OUTPUT F_LIV1 CODTAB[2,16] CHECKTYPE NORMAL MESSAGE EMPTY CHECK,F_GIAC|CLEAR,F_LIV2|CHECK,F_LIV2 - GROUP G_NOAUTO MESSAGE CHECK,F_GIAC|ENABLE,F_LIV2 END @@ -176,7 +171,6 @@ BEGIN COPY DISPLAY F_LIV1 OUTPUT F_LIV2 CODTAB[2,16] CHECKTYPE NORMAL - GROUP G_NOAUTO MESSAGE EMPTY CHECK,F_GIAC|CLEAR,F_LIV3|CHECK,F_LIV3 MESSAGE CHECK,F_GIAC|ENABLE,F_LIV3 END @@ -191,7 +185,6 @@ BEGIN COPY DISPLAY F_LIV1 OUTPUT F_LIV3 CODTAB[2,16] CHECKTYPE NORMAL - GROUP G_NOAUTO MESSAGE EMPTY CHECK,F_GIAC|CLEAR,F_LIV4|CHECK,F_LIV4 MESSAGE CHECK,F_GIAC|ENABLE,F_LIV4 END @@ -206,7 +199,6 @@ BEGIN COPY DISPLAY F_LIV1 OUTPUT F_LIV4 CODTAB[2,16] CHECKTYPE NORMAL - GROUP G_NOAUTO MESSAGE CHECK,F_GIAC END @@ -225,7 +217,6 @@ BEGIN OUTPUT F_UM UM OUTPUT F_UMFC FC CHECKTYPE REQUIRED - GROUP G_NOAUTO END NUMBER F_QUANT 15 5 @@ -234,7 +225,6 @@ BEGIN FIELD QUANT CHECKTYPE REQUIRED WARNING "Indicare la quantità" - GROUP G_NOAUTO MESSAGE CHECK,F_VALORE END @@ -266,7 +256,6 @@ BEGIN OUTPUT F_DESCAUSRIG S0 MESSAGE EMPTY RESET,F_DESCAUSRIG ADD RUN MG0 -0 %CAU - GROUP G_NOAUTO END STRING F_DESCAUSRIG 50 30 diff --git a/mg/mglib.h b/mg/mglib.h index 55e7c00db..a20207690 100755 --- a/mg/mglib.h +++ b/mg/mglib.h @@ -49,12 +49,11 @@ #endif // campi comuni alla maschere di magazzino - - -typedef enum { - riga_dadocumento='D', // derivata da documento - riga_automatica='A', // generata da causale collegata - riga_nongenerata=' ' // immissione direttta del mov. +typedef enum +{ + riga_dadocumento = 'D', // derivata da documento + riga_automatica = 'A', // generata da causale collegata + riga_nongenerata = ' ' // immissione diretta del mov. } TTipo_rigamovmag; typedef enum { diff --git a/mg/mglib02a.cpp b/mg/mglib02a.cpp index 5fd5044aa..f8428ce02 100755 --- a/mg/mglib02a.cpp +++ b/mg/mglib02a.cpp @@ -1,6 +1,6 @@ // oggetto TCausale_magazzino // oggetto TMov_Mag , multirecord del movimento di magazzino -// funzione di ricostruzione saldi +// funzione di ricostruzione saldi #include #include @@ -10,7 +10,6 @@ #include "clifogiac.h" #include "mglib.h" #include "movmag.h" -#include "rmovmag.h" #include #ifndef __CGLIB01_H @@ -20,7 +19,6 @@ #include "../db/dblib.h" #endif - class TSaldo_mag : public TObject { int _codes;