Index: EWORDS6.mac.rou =================================================================== diff -u -r48730 -r48810 --- EWORDS6.mac.rou (.../EWORDS6.mac.rou) (revision 48730) +++ EWORDS6.mac.rou (.../EWORDS6.mac.rou) (revision 48810) @@ -1,88 +1,110 @@ #include BL.Derde.LevSpecifiek +#include vhLib.Macro EWORDS6 ;E'WMS Automatisch markeren voor orderpicking [ 10/28/2003 10:26 AM ] /* - ============================================================================================================================ BELANGRIJK : ============ - De controles om te mogen groeperen ("Cumuleer Order" of kortere naam ... ) moeten in 2 routines in sync gehouden worden !!! - EWORDS3 : manueel markeren (via Admin-scherm, UI met vhTXTPOP-meldingen) - EWORDS6 : automatisch markeren (via background job, cfr. IsVoorVandaagOfMorgen) - ============================================================================================================================ - */ - ; WMS verwerking en eventueel doorsturen naar Egemin software indien voor vandaag SendWMS(ORDNr) - New %J,I,R,KLNr,PRNr,Aantal,OLUNr,LeverDag,CONSNr,VerzDat,DOutDate,DOutTime,VerzW,VerzZ,LevAdr,ChkBeletDone,IsVoorVandaagOfMorgen,IsVoorVandaag,ORDNrs,CumulORDNr,WaitORDNrs - New LandCode,PostCode,Info - Set IsVoorVandaagOfMorgen=##class(BL.Legacy.EWORDS6).PickingVoorVandaagVolgendeArbeidsdagOfAndereDag(ORDNr) + New %J,I,R,PRNr,Aantal,OLUNr,LeverDag,VerzDat,DOutDate,DOutTime,VerzW,VerzZ,LevAdr,ChkBeletDone,ORDNrs,CumulORDNr,WaitORDNrs + New LandCode,PostCode + New PickingDag, KlantNummer, Filters, FilterIterator, IsVoorVandaag, ConsolidatieNummer + New OrderApi, OrderLijn, OrderLijnIterator + New PickingOpdrachtInfo, PickingOpdrachtInfoIterator, PickingOpdrachtInfoLijst + + #dim PickingDag As BL.Legacy.EWORDS6.enu.PickingDag = ##class(BL.Legacy.EWORDS6).PickingVoorVandaagVolgendeArbeidsdagOfAndereDag(ORDNr) + + Do ##class(BL.Legacy.EWORDS6.InfoMelder).%New().Controleer(ORDNr) + + If ($$$Not(PickingDag = ##class(BL.Legacy.EWORDS6.enu.PickingDag).Andere())) { + #dim KlantNummer As %String = ##class(BL.Legacy.EWORDS6).GeefKlantNummer(ORDNr, D) + + Set ORDNrs = $$Cumul(ORDNr) + Set WaitORDNrs = $$WachtendeOrders(KlantNummer) + + For I=$Length(WaitORDNrs,";"):-1:1 { + Set CumulORDNr = $Piece(WaitORDNrs,";",I) + If ORDNrs [ CumulORDNr + Else If $$CheckCumul(ORDNr,CumulORDNr) Set ORDNrs = ORDNrs _ ";" _ CumulORDNr + Else Continue + Set $Piece(WaitORDNrs,";",I) = $Piece(WaitORDNrs,";",I+1,99) + } + + Quit:$$$Not($$Lock(ORDNrs)) + + #dim OrderApi As DOM.VKP.impl.DataM.DataMOrderAPI = ##class(DOM.VKP.impl.DataM.DataMOrderAPI).%New() + #dim PickingOpdrachtInfoLijst As %ListOfDataTypes = ##class(%ListOfDataTypes).%New() + + For I=1:1:$Length(ORDNrs,";") { + Set CumulORDNr = $Piece(ORDNrs,";",I) + Quit:$$$Not(CumulORDNr) + + #dim OrderLijnIterator As TECH.Iterator = OrderApi.GeefOrder(CumulORDNr).GeefOrderLijnIterator() + + While (OrderLijnIterator.HasNext()) { + #dim OrderLijn As DOM.VKP.ProductOrderlijn = OrderLijnIterator.Next() + + If (OrderLijn.%IsA("DOM.VKP.impl.DataM.DataMProductOrderlijn") && $$$Not(OrderLijn.GeefProductID() = "")) { + Do PickingOpdrachtInfoLijst.Insert(##class(BL.Legacy.EWORDS.PickingOpdrachtInfo).%New(OrderLijn.GeefAantal(), OrderLijn.GeefLeverdag(), OrderLijn.GeefOrderID(), OrderLijn.GeefID())) + } + } + } + + #dim Filters As %ListOfDataTypes = ##class(%ListOfDataTypes).%New() + Do Filters.Insert(##class(BL.Legacy.EWORDS.PickingOpdrachtInfoIterator.Filter.OrgaluxFilter).%New()) + Do Filters.Insert(##class(BL.Legacy.EWORDS.PickingOpdrachtInfoIterator.Filter.NietOrgaluxFilter).%New()) + + #dim IsVoorVandaag As %Boolean = (PickingDag = ##class(BL.Legacy.EWORDS6.enu.PickingDag).Vandaag()) + #dim FilterIterator As TECH.Iterator = ##class(TECH.ListIterator).%New(Filters) + + Set %J = $$%J^vhRtn1() + Kill ^HULP(%J) + + While (FilterIterator.HasNext()) { + #dim ConsolidatieNummer As %String = $$GETNUM^FLOW("KUL", "KU1") + #dim PickingOpdrachtInfoIterator As TECH.Iterator = ##class(BL.Legacy.EWORDS.PickingOpdrachtInfoIterator).%New(PickingOpdrachtInfoLijst, FilterIterator.Next()) + + If (PickingOpdrachtInfoIterator.HasNext()) { + While (PickingOpdrachtInfoIterator.HasNext()) { + #dim PickingOpdrachtInfo As BL.Legacy.EWORDS.PickingOpdrachtInfo = PickingOpdrachtInfoIterator.Next() + + Set ^HULP(%J, KlantNummer, "M", "A", PickingOpdrachtInfo.GeefOrderNummer(), PickingOpdrachtInfo.GeefOrderLijnNummer()) = PickingOpdrachtInfo.GeefData() + } + + Do INITDOMVKP^FLOWORD2(KlantNummer, ORDNr) + + Set VerzW = $$DEFAULT^KLVERZW(, KlantNummer, ORDNr) + Set VerzZone = "" + Set DOutDateTime = $Select(IsVoorVandaag:+$Horolog,1:+$$CALCDATE^vhLib.DataTypes($Horolog,"A",1)) _ "," _ blVerzendWijze.DueOutPickingTime() + Set VerzDat = blLeveringsTermijn.GetVroegsteLeverDag(+DOutDateTime) + Set DOutDateTime = blLeveringsTermijn.GetLaatstePickingsTijdstip(VerzDat) + Set LevAdr = ^KOD(KlantNummer, "F", ORDNr, 3) + + Do BLDCONS^EWORDS2(KlantNummer, $Name(^HULP(%J, KlantNummer, "M")), ConsolidatieNummer, $Piece(VerzW, ";"), VerzDat, DOutDateTime, VerzZone, LevAdr, .ChkBeletDone) ; Creatie suborderlijnen + + If ($$WMSIsActief() && IsVoorVandaag) { + Do SEND^EWORDSW(ConsolidatieNummer) + } + } + + Kill ^HULP(%J, KlantNummer) + } + + Kill ^HULP(%J) + For I=1:1:$L(ORDNrs,";") Set CumulORDNr=$P(ORDNrs,";",I) Kill ^ORDW("AUTO",CumulORDNr) + Do UnLock(ORDNrs) + } + + Quit - #dim Info As %String = "OrderKanWordenDoorgestuurd : "_##class(APPS.OrderUitvoering.DoorsturenOrderPickingService).%New().OrderKanWordenDoorgestuurd(ORDNr) - Set Info = Info_$C(13,10) _ "OrderStaatVolledigBijVanHoecke : "_##class(BL.Legacy.EWTOE).OrderStaatVolledigBijVanHoecke(ORDNr) - - If ('##class(APPS.OrderUitvoering.DoorsturenOrderPickingService).%New().OrderKanWordenDoorgestuurd(ORDNr) || '##class(BL.Legacy.EWTOE).OrderStaatVolledigBijVanHoecke(ORDNr)) - { - // N.B. NOT OrderStaatVolledigBijVanHoecke is uitzonderlijk mogelijk, want bij manueel doorsturen kan - // men kiezen om toch de orders met producten bij Halux al door te sturen. - Set Info = "Order toch doorgestuurd ondanks : "_$C(13,10)_Info - Do ##class(vhLib.Logger).%New("EWMS").WarningMail("SendWMS automatisch doorsturen is in de war",Info) - } - - If IsVoorVandaagOfMorgen { - // Heel het volgende stuk 2x uitvoeren: 1x voor ORGALUX en 1x voor niet-ORGALUX. - Set ORDNrs=$$Cumul(ORDNr) - Set R=^KO1(ORDNr,"F"),KLNr=$P(R,D) - Set WaitORDNrs=$$WachtendeOrders(KLNr) - For I=$L(WaitORDNrs,";"):-1:1 { - Set CumulORDNr=$P(WaitORDNrs,";",I) - If ORDNrs[CumulORDNr - Else If $$CheckCumul(ORDNr,CumulORDNr) Set ORDNrs=ORDNrs_";"_CumulORDNr - Else Continue - Set $P(WaitORDNrs,";",I)=$P(WaitORDNrs,";",I+1,99) - } - Quit:'$$Lock(ORDNrs) - Set IsVoorVandaag=IsVoorVandaagOfMorgen=1 - Set %J=$$%J^vhRtn1() - Kill ^HULP(%J) - Set R=^KO1(ORDNr,"F"),KLNr=$P(R,D) - For I=1:1:$L(ORDNrs,";") { - Set CumulORDNr=$P(ORDNrs,";",I) - Quit:'CumulORDNr - Set OLNr=100 - For { - Set OLNr=$O(^KOD(KLNr,"F",CumulORDNr,OLNr)) - Quit:'OLNr - Set R=^KOD(KLNr,"F",CumulORDNr,OLNr),PRNr=$P(R,D,2),Aantal=$P(R,D,3),OLUNr=$P(R,D,15),LeverDag=$P(R,D,25) - Continue:'PRNr - Set R=Aantal_D_D_LeverDag - Set ^HULP(%J,KLNr,"M","A",CumulORDNr,OLUNr)=R - } - } - Set CONSNr=$$GETNUM^FLOW("KUL","KU1") ; Tijdelijk - - Do INITDOMVKP^FLOWORD2(KLNr,ORDNr) - Set VerzW=$$DEFAULT^KLVERZW(,KLNr,ORDNr) - Set VerzZone="" - Set DOutDateTime=$S(IsVoorVandaag:+$H,1:+$$CALCDATE^vhLib.DataTypes($H,"A",1))_","_blVerzendWijze.DueOutPickingTime() - Set VerzDat=blLeveringsTermijn.GetVroegsteLeverDag(+DOutDateTime) - Set DOutDateTime=blLeveringsTermijn.GetLaatstePickingsTijdstip(VerzDat) - - Set LevAdr=^KOD(KLNr,"F",ORDNr,3) - Do BLDCONS^EWORDS2(KLNr,$NA(^HULP(%J,KLNr,"M")),CONSNr,$P(VerzW,";"),VerzDat,DOutDateTime,VerzZone,LevAdr,.ChkBeletDone) ; Creatie suborderlijnen - - If $$WMSIsActief(),IsVoorVandaag Do SEND^EWORDSW(CONSNr) ; Indien voor vandaag -> doorsturen - - Kill ^HULP(%J) - For I=1:1:$L(ORDNrs,";") Set CumulORDNr=$P(ORDNrs,";",I) Kill ^ORDW("AUTO",CumulORDNr) - Do UnLock(ORDNrs) - } - Quit - ; WMS is actief? WMSIsActief() New WMSIsActief @@ -791,4 +813,3 @@ If LevPerfCode="",LeverTermijn,LeverTermijn<$H ;Set OrderLijn.SetLevPerfCode()=Code ; cfr CSC } Quit -