diff --git a/lv/lv3100.cpp b/lv/lv3100.cpp index 69a42f1be..fbf3dbbd9 100755 --- a/lv/lv3100.cpp +++ b/lv/lv3100.cpp @@ -35,6 +35,7 @@ protected: static bool lv_consegnato_handler(TMask_field& f, KEY k); static bool lv_codart_handler(TMask_field& f, KEY k); static bool lv_causale_handler(TMask_field& f, KEY k); + static bool lv_codmag_handler(TMask_field& f, KEY k); static bool ss_notify(TSheet_field& ss, int r, KEY key); @@ -72,6 +73,7 @@ protected: long giac_in_mag(const TString& codart, bool odierna) const; //restituisce il valore salvato nel magazzino public: + bool preset(const TDocumento& doc); //precarico le variabili globali della classe bool reset(const TDocumento& doc); //svuota i TAssoc_array e carica cli e cont bool load_row(const TRiga_documento& rdoc); //popola i TAssoc_array real giac_att(TRiga_documento& rdoc, bool odierna); //restituisce le quantità attuali di dotazione @@ -124,8 +126,8 @@ long TGiac_per_cli::giac_in_mag(const TString& codart, bool odierna) const return 0; } -//RESET: metodo che distrugge i due TAssoc_array e carica la coppia cliente - contratto -bool TGiac_per_cli::reset(const TDocumento& doc) +//PRESET: metodo che carica la coppia cliente - contratto +bool TGiac_per_cli::preset(const TDocumento& doc) { //estraggo i dati di interesse dal documento _clifo = doc.get_long(DOC_CODCF); @@ -133,6 +135,14 @@ bool TGiac_per_cli::reset(const TDocumento& doc) _year = doc.get_date(DOC_DATADOC).year(); _indsped = doc.get_long(DOC_CODINDSP); + return true; +} + +//RESET: metodo che distrugge i due TAssoc_array e carica la coppia cliente - contratto +bool TGiac_per_cli::reset(const TDocumento& doc) +{ + preset(doc); + //distruggo i due TAssoc_array _odierna.destroy(); _temporanea.destroy(); @@ -254,6 +264,7 @@ int TGiac_per_cli::write_giac(const TMask& m) //costruttore TGiac_per_cli::TGiac_per_cli() { + //estraggo i dati di interesse dal documento _clifo = 0; _cont = 0; _year = 0; @@ -434,7 +445,12 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k) return true; } else + { + doc.put(DOC_CODCF, codcf); + doc.put(DOC_DATADOC, datadoc); + doc.put(DOC_CODINDSP, indsped); doc.put(DOC_CODCONT, codcont); + } if (dmsk._stcodcf == codcf && dmsk._stcodcont == codcont && nrighe > 0) return true; @@ -460,6 +476,11 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k) rcont.set_var("#CODCF",codcf); rcont.set_var("#CODCONT",codcont); + //leggo dalla configurazione i codici magazzino e deposito standard + TConfig* configlv = new TConfig(CONFIG_DITTA,"lv"); + TString8 codmag; + codmag << configlv->get("CODMAG") << configlv->get("CODMAGC"); + //per ogni riga estraggo l'articolo, il relativo prezzo e l'eventaule sconto da applicare, //...riportati in bolla solo se necessario for (bool ok = rcont.move_first(); ok; ok = rcont.move_next()) @@ -488,6 +509,21 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k) rdoc.put(RDOC_UMQTA,rcont.get(LVRCONDV_UM).as_string()); rdoc.put(RDOC_CODAGG1,causale); rdoc.put(RDOC_CODIVA,anamag.get(ANAMAG_CODIVA)); + rdoc.put(RDOC_CODMAG, codmag); + rdoc.put(RDOC_CODMAGC, codmag); + + //gestione campi dotazione odierna e dotazione temporanea + TGiac_per_cli& giac = gbapp().giacenza(); + giac.preset(doc); + real dotod = giac.giac_att(rdoc, true); + rdoc.put("DOTOD", dotod); + + //scrivo la dotazione temporanea solo se esistono le date di dotazione temporanea e questa non è scaduta + if (rdoc.get_date("DADATATMP").ok() && rdoc.get_date("ADATATMP").ok() && rdoc.get_date("ADATATMP") <= doc.get_date(DOC_DATADOC)) + { + real dotmp = giac.giac_att(rdoc, false); + rdoc.put("DOTMP", dotmp); + } //elaborazione per il prezzo: o lo prendo dalle righe contratto, o dall'anagrafica magazzino const TString& sconto = rcont.get(LVRCONDV_SCONTPERC).as_string(); @@ -690,8 +726,8 @@ bool TGestione_bolle_msk::lv_causale_handler(TMask_field& f, KEY k) if (f.to_check(k, true)) { TConfig* configlv = new TConfig(CONFIG_DITTA,"lv"); - TString4 codmagdef = configlv->get("CODMAG"); - TString4 coddepdef = configlv->get("CODMAGC"); //magazzino del circolante + TString4 codmagdef = configlv->get("CODMAG"); //magazzino + TString4 coddepdef = configlv->get("CODMAGC"); //magazzino del circolante (deposito) //leggo la causale che ho scritto nella riga corrente dello sheet TString4 causale = f.get(); @@ -805,11 +841,13 @@ bool TGestione_bolle_msk::lv_causale_handler(TMask_field& f, KEY k) if (cau.get_bool("B0")) { msk.field(FR_QTAGG1).enable(true); - if (codmagcoll.blank()) - { - codmagcoll = codmagdef; - coddepcoll = coddepdef; //magazzino del circolante - } + + if (codmagcoll.blank()) + codmagcoll = codmagdef; + + if (coddepcoll.blank()) + coddepcoll = coddepdef; //magazzino del circolante + msk.field(FR_CODMAGC).set(codmagcoll); msk.field(FR_CODDEPC).set(coddepcoll); } @@ -825,12 +863,13 @@ bool TGestione_bolle_msk::lv_causale_handler(TMask_field& f, KEY k) { msk.field(FR_QTA).enable(true); if (codmag.blank()) - { - codmag = codmagdef; + codmag = codmagdef; + + if (coddep.blank()) coddep = coddepdef; - } + msk.field(FR_CODMAG).set(codmag); - msk.field(FR_CODDEP).set( coddep); + msk.field(FR_CODDEP).set(coddep); } else { @@ -843,6 +882,27 @@ bool TGestione_bolle_msk::lv_causale_handler(TMask_field& f, KEY k) return true; } +bool TGestione_bolle_msk::lv_codmag_handler(TMask_field& f, KEY k) +{ + bool ok = true; + if (f.to_check(k,true)) + { + TMask& msk = f.mask(); + const TString& causale = msk.get(FR_CAULAV); + + if (causale.full()) + { + switch(f.dlg()) + { + case FR_CODMAG: ok = codmag_handler( f, k ); break; + default: break; + } + } + } + return ok; +} + + //metodo che setta gli handler sui campi di riga void TGestione_bolle_msk::user_set_row_handler(TMask& rm, short field, int index) { @@ -852,6 +912,7 @@ void TGestione_bolle_msk::user_set_row_handler(TMask& rm, short field, int index case 4102: rm.set_handler(field, lv_consegnato_handler); break; case 4103: rm.set_handler(field, lv_codart_handler); break; case 4104: rm.set_handler(field, lv_causale_handler); break; + case 4105: rm.set_handler(field, lv_codmag_handler); break; default : TDocumento_mask::user_set_row_handler(rm, field, index); break; } } @@ -974,6 +1035,7 @@ void TGestione_bolle_app::init_insert_mode(TMask &m) _giac.reset(d); mask.reset_var_mask(); + mask.first_focus(F_CODCF, false); return TMotore_application::init_insert_mode(m); } diff --git a/lv/verig21.ini b/lv/verig21.ini index 346ebc086..0af1f2beb 100755 --- a/lv/verig21.ini +++ b/lv/verig21.ini @@ -5,8 +5,9 @@ CAMPICALC= IMPONIBILE=IMPNS [HANDLERS] -NHANDLER = 4 +NHANDLER = 5 1 = 133|4101 2 = 112|4102 3 = 105|4103 -4 = 152|4104 \ No newline at end of file +4 = 152|4104 +5 = 103|4105 \ No newline at end of file diff --git a/lv/verig21.uml b/lv/verig21.uml index 3f5ed634f..2b172a51c 100755 --- a/lv/verig21.uml +++ b/lv/verig21.uml @@ -1,50 +1,439 @@ -#include "..\ve\verigdef.h" +#include "..\ve\verig.h" -#define FULL_SCREEN -// else -// #define MASK_WIDTH 60 -// #define MASK_HEIGHT 14 -// -#define MASK_TITLE1 "Merce Lavanderie" -#define PAGE_2 +TOOLBAR "" 0 0 0 2 -DEFINE_FIELD(CODMAG) -DEFINE_FIELD(DESMAG) -DEFINE_FIELD(CODDEP) -DEFINE_FIELD(DESDEP) -DEFINE_FIELD(CODART) -DEFINE_FIELD(DESCRART) -DEFINE_FIELD(UMQTA) -DEFINE_FIELD(QTA) -F_POS(QTA, 21, 10,"Consegnato " ) -F_DEC(QTA, 0) -DEFINE_FIELD(PREZZO) -F_POS(PREZZO, 47, 9,"Prezzo " ) -DEFINE_FIELD(SCONTO) -F_POS(SCONTO, 2, 11,"Sconto " ) -DEFINE_FIELD(PERCPROV) -F_POS(PERCPROV, 42, 11,"Provvigione" ) -DEFINE_FIELD(CODIVA) -DEFINE_FIELD(DESIVA) -DEFINE_FIELD(CAULAV) -F_POS(CAULAV, 47, 10,"Caus. Lavanderie " ) -DEFINE_FIELD(RITIRO) -F_POS(RITIRO, 21, 9,"Ritirato " ) -F_DEC(RITIRO, 0) -DEFINE_FIELD(NCOLLI) -DEFINE_FIELD(PNETTO) -DEFINE_FIELD(TARA) -DEFINE_FIELD(DESCRCAUS) -DEFINE_FIELD(CODMAGC) -F_POS(CODMAGC, 2, 15,"Mag.Coll. ") -DEFINE_FIELD(DESMAGC) -F_POS(DESMAGC, 22, 15,"") -DEFINE_FIELD(CODDEPC) -F_POS(CODDEPC, 2, 16,"Deposito ") -DEFINE_FIELD(DESDEPC) -F_POS(DESDEPC, 22, 16,"") -#define USR_PAGE_1 "..\lv\lvrig21.inc" +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -14 -1 "" +END +BUTTON DLG_CANCEL 10 2 +BEGIN + PROMPT -24 -1 "" +END -#include "..\ve\verig.uml" +BUTTON DLG_DELREC 10 2 +BEGIN + PROMPT -34 -1 "Elimina" + MESSAGE EXIT,K_DEL +END +BUTTON DLG_USER 10 2 +BEGIN + PROMPT -44 -1 "~Collega" + PICTURE BMP_LINK +END + +ENDPAGE + +PAGE "Merce Lavanderia" 0 2 0 0 + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 1 1 "" +END + +LIST FR_TIPORIGA 2 50 +BEGIN + PROMPT 2 2 "Tipo riga " + FIELD TIPORIGA +END + +GROUPBOX DLG_NULL 78 10 +BEGIN + PROMPT 1 4 "@bArticolo" +END + +STRING FR_CODART 8 +BEGIN + PROMPT 2 5 "Articolo " + USE LF_ANAMAG KEY 1 + INPUT CODART FR_CODART + DISPLAY "Codice@6" CODART + DISPLAY "Descrizione@50" DESCR + OUTPUT FR_CODART CODART + OUTPUT FR_DESCRART DESCR + FLAGS "U" + FIELD CODART + ADD RUN ve2 -3 +END + +STRING FR_DESCRART 50 +BEGIN + PROMPT 25 5 "" + USE LF_ANAMAG KEY 2 + INPUT DESCR FR_DESCRART + DISPLAY "Descrizione@50" DESCR + DISPLAY "Codice@8" CODART + COPY OUTPUT FR_CODART + ADD RUN ve2 -3 + FIELD DESCR +END + +STRING FR_HDESC 50 +BEGIN + PROMPT 100 100 "Descrizione " + USE LF_ANAMAG KEY 2 + INPUT DESCR FR_HDESC + DISPLAY "Descrizione@50" DESCR + DISPLAY "Codice@20" CODART + COPY OUTPUT FR_CODART +END + +STRING FR_CODARTMAG 20 +BEGIN + PROMPT 200 7 "" + FIELD CODARTMAG + FLAGS "G" +END + +BOOLEAN FR_CHECKED +BEGIN + PROMPT 51 50 "" + FIELD CHECKED + FLAGS "D" +END + +STRING FR_LIV1 15 +BEGIN + PROMPT 2 6 "Liv.Gia. " + FLAGS "U" + USE GCG + JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1] + INPUT CODTAB[1,1] "1" + INPUT CODTAB[2,] FR_LIV1 + DISPLAY "Livello@20" 500@->S0 + DISPLAY "Gruppo@15" CODTAB[2,] + DISPLAY "Descrizione@30" S0 + OUTPUT FR_LIV1 CODTAB[2,] + MESSAGE EMPTY RESET,FR_LIV2|RESET,FR_LIV3|RESET,FR_LIV4 + MESSAGE ENABLE,FR_LIV2 + CHECKTYPE NORMAL +END + +STRING FR_LIV2 15 +BEGIN + PROMPT 28 6 "" + FLAGS "U" + USE GCG + JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1] + INPUT CODTAB[1,1] "2" + INPUT CODTAB[2,] FR_LIV2 + DISPLAY "Livello@20" 500@->S0 + DISPLAY "Gruppo@15" CODTAB[2,] + DISPLAY "Descrizione@30" S0 + OUTPUT FR_LIV2 CODTAB[2,] + MESSAGE EMPTY RESET,FR_LIV3|RESET,FR_LIV4 + MESSAGE ENABLE,FR_LIV3 + CHECKTYPE NORMAL +END + +STRING FR_LIV3 15 +BEGIN + PROMPT 45 6 "" + FLAGS "U" + USE GCG + JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1] + INPUT CODTAB[1,1] "3" + INPUT CODTAB[2,] FR_LIV3 + DISPLAY "Livello@20" 500@->S0 + DISPLAY "Gruppo@15" CODTAB[2,] + DISPLAY "Descrizione@30" S0 + OUTPUT FR_LIV3 CODTAB[2,] + MESSAGE EMPTY RESET,FR_LIV4 + MESSAGE ENABLE,FR_LIV4 + CHECKTYPE NORMAL +END + +STRING FR_LIV4 15 +BEGIN + PROMPT 62 6 "" + FLAGS "U" + USE GCG + JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1] + INPUT CODTAB[1,1] "4" + INPUT CODTAB[2,] FR_LIV4 + DISPLAY "Livello@20" 500@->S0 + DISPLAY "Gruppo@15" CODTAB[2,] + DISPLAY "Descrizione@30" S0 + OUTPUT FR_LIV4 CODTAB[2,] + CHECKTYPE NORMAL +END + +STRING FR_UMQTA 3 +BEGIN + PROMPT 2 7 "U.M. " + USE LF_UMART KEY 2 + JOIN %UMS INTO CODTAB=UM + INPUT CODART FR_CODARTMAG SE + INPUT UM FR_UMQTA + DISPLAY "Codice@20" UM + DISPLAY "Descrizione@50" %UMS->S0 + OUTPUT FR_UMQTA UM + FIELD UMQTA + FLAG "U" + CHECKTYPE REQUIRED +END + +STRING FR_UMQTA2 2 +BEGIN + PROMPT 2 7 "U.M. " + USE %UMS + INPUT CODTAB FR_UMQTA2 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT FR_UMQTA2 CODTAB + FIELD UMQTA + FLAG "U" + CHECKTYPE NORMAL +END + +CURRENCY FR_PREZZO 15 +BEGIN + PROMPT 13 7 "Prezzo " + FLAGS "U" + FIELD PREZZO +END + +STRING FR_SCONTO 15 +BEGIN + PROMPT 38 7 "Sconto " + FIELD SCONTO +END + +NUMBER FR_PERCPROV 5 2 +BEGIN + PROMPT 65 7 "Provv. " + FIELD PERCPROV +END + +STRING FR_CAULAV 3 +BEGIN + PROMPT 2 8 "Cau. Lav. " + USE &LVCAU + INPUT CODTAB FR_CAULAV + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT FR_CAULAV CODTAB + OUTPUT FR_FLCONS B1 + OUTPUT FR_FLRIT B0 + CHECKTYPE REQUIRED + FLAGS "U" + FIELD CODAGG1 +END + +BOOLEAN FR_FLCONS +BEGIN + PROMPT 50 50 "Flag consegnato" + FLAGS "HG" +END + +BOOLEAN FR_FLRIT +BEGIN + PROMPT 50 50 "Flag ritirato" + FLAGS "HG" +END + +NUMBER FR_RITIRO 6 0 +BEGIN + PROMPT 20 8 "Ritirato " + FIELD QTAGG1 +END + +NUMBER FR_QTA 6 0 +BEGIN + PROMPT 39 8 "Consegnato " + FIELD QTA +END + +STRING FR_JOLLY1 6 +BEGIN + PROMPT 2 9 "Dot. Od. " + FIELD DOTOD + FLAGS "R" +END + +STRING FR_JOLLY2 6 +BEGIN + PROMPT 20 9 "Dot. Tem. " + FIELD DOTMP + FLAGS "R" +END + +DATE FR_JOLLY3 +BEGIN + PROMPT 40 9 "Inizio " + FIELD DADATATMP +END + +DATE FR_JOLLY4 +BEGIN + PROMPT 60 9 "Fine " + FIELD ADATATMP +END + +NUMBER FR_NCOLLI 7 +BEGIN + PROMPT 2 10 "N. Colli " + FIELD NCOLLI +END + +NUMBER FR_TARA 15 2 +BEGIN + PROMPT 25 10 "Tara " + FIELD TARA +END + +NUMBER FR_PNETTO 6 2 +BEGIN + PROMPT 60 10 "Peso netto " + FIELD PNETTO +END + +STRING FR_CODIVA 4 +BEGIN + PROMPT 2 12 "IVA " + USE %IVA + INPUT CODTAB FR_CODIVA + DISPLAY "Codice@20" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT FR_CODIVA CODTAB + OUTPUT FR_DESIVA S0 + FLAGS "U" + VALIDATE ZEROFILL_FUNC 2 + CHECKTYPE NORMAL + FIELD CODIVA +END + +STRING FR_DESIVA 50 +BEGIN + PROMPT 13 12 "" + USE %IVA KEY 2 + INPUT S0 FR_DESIVA + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice@20" CODTAB + OUTPUT FR_CODIVA CODTAB + OUTPUT FR_DESIVA S0 +END + +STRING FR_TIPODET 1 +BEGIN + PROMPT 67 12 "Indetr. " + USE %DET + INPUT CODTAB FR_TIPODET + DISPLAY "Codice" CODTAB + DISPLAY "Tipo" I0 + DISPLAY "Descrizione@50" S0 + OUTPUT FR_TIPODET CODTAB + CHECKTYPE NORMAL + FLAGS "U" +END + +GROUPBOX DLG_NULL 78 6 +BEGIN + PROMPT 1 14 "@bMagazzino" +END + +STRING FR_CODMAG 4 +BEGIN + PROMPT 2 15 "Magazzino " + USE MAG SELECT CODTAB[4,5]=="" + INPUT CODTAB FR_CODMAG + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT FR_CODMAG CODTAB + OUTPUT FR_DESMAG S0 + WARNING "Magazzino assente" + FLAGS "U" + CHECKTYPE NORMAL + FIELD CODMAG[1,3] +END + +STRING FR_DESMAG 50 +BEGIN + PROMPT 26 15 "" + FLAGS "D" +END + +STRING FR_CODDEP 4 +BEGIN + PROMPT 2 16 "Deposito " + USE MAG SELECT (CODTAB[1,3]==#FR_CODMAG) && (CODTAB[4,5]!="") + INPUT CODTAB[1,3] FR_CODMAG + INPUT CODTAB[4,5] FR_CODDEP + DISPLAY "Codice mag." CODTAB[1,3] + DISPLAY "Codice dep." CODTAB[4,5] + DISPLAY "Descrizione@50" S0 + OUTPUT FR_CODMAG CODTAB[1,3] + OUTPUT FR_CODDEP CODTAB[4,5] + OUTPUT FR_DESDEP S0 + MESSAGE DIRTY,FR_CODMAG|K_TAB,FR_CODMAG + CHECKTYPE NORMAL + WARNING "Deposito assente" + FLAGS "U" + FIELD CODMAG[4,5] +END + +STRING FR_DESDEP 50 +BEGIN + PROMPT 26 16 "" + FLAGS "D" +END + +STRING FR_CODMAGC 4 +BEGIN + PROMPT 2 17 "Magazzino Col. " + COPY USE FR_CODMAG + INPUT CODTAB FR_CODMAGC + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT FR_CODMAGC CODTAB + OUTPUT FR_DESMAGC S0 + WARNING "Magazzino assente" + FLAGS "U" + CHECKTYPE NORMAL + FIELD CODMAGC[1,3] +END + +STRING FR_DESMAGC 50 +BEGIN + PROMPT 26 17 "" + FLAGS "D" +END + +STRING FR_CODDEPC 4 +BEGIN + PROMPT 2 18 "Deposito " + USE MAG SELECT (CODTAB[1,3]==#FR_CODMAGC) && (CODTAB[4,5]!="") + INPUT CODTAB[1,3] FR_CODMAGC + INPUT CODTAB[4,5] FR_CODDEPC + DISPLAY "Codice mag." CODTAB[1,3] + DISPLAY "Codice dep." CODTAB[4,5] + DISPLAY "Descrizione@50" S0 + OUTPUT FR_CODMAGC CODTAB[1,3] + OUTPUT FR_CODDEPC CODTAB[4,5] + OUTPUT FR_DESDEPC S0 + MESSAGE DIRTY,FR_CODMAGC|K_TAB,FR_CODMAGC + CHECKTYPE NORMAL + WARNING "Deposito assente" + FLAGS "U" + FIELD CODMAGC[4,5] +END + +STRING FR_DESDEPC 50 +BEGIN + PROMPT 26 18 "" + FLAGS "D" +END + +ENDPAGE + +PAGE "Analitica" 0 2 0 0 + +GROUPBOX DLG_NULL 78 14 +BEGIN + PROMPT 1 0 "Contabilita' analitica" +END + +ENDPAGE +ENDMASK