#Include BL.Derde.LevSpecifiek FLOWTOE6 ;Toelevering [ 07/10/2002 4:36 PM ] ; BACKORD(LEVNr,TOENr,TLNr,BOQty,RestQty,LevWk,ReturnLocal) ; RestQty is optioneel New R,ModAant,Aantal,TLUNr,KLNr,ORDNr,OLNr,ModOLNr,OLUNr,ModTLNr,SwapFrom,SwapTo Set ModAant=$G(RestQty),LevWk=$G(LevWk),ModTLNr=TLNr Set R=^KTO(LEVNr,TOENr,TLNr),$P(R,D,23)=$P(R,D,3),^KTO(LEVNr,TOENr,TLNr)=R Set:'ModAant ModAant=$P(R,D,3)-BOQty Set:LevWk="" LevWk=$P(R,D,25) Set R=^KTO(LEVNr,TOENr,TLNr),Aantal=$P(R,D,3),$P(R,D,23)="" For I=9,10,16 Set:Aantal $P(R,D,I)=$P(R,D,I)/Aantal Set $P(R,D,I)=$J($P(R,D,I)*BOQty,0,##class(APPS.VKP.OrderlijnPrijsBepaler).GeefAantalDecimalen()) Set $P(R,D,3)=BOQty,$P(R,D,25)=LevWk,TLUNr=$P(R,D,15),TLUNr=TLUNr\100*100+99 Set TLUNr=$O(^TO("IU",TOENr,TLUNr),-1)+1,$P(R,D,15)=TLUNr Set TLNr=^KTO(LEVNr,TOENr,0),^KTO(LEVNr,TOENr,0)=TLNr+1 Set $P(R,D,13)=TLNr-100,^KTO(LEVNr,TOENr,TLNr)=R,ORDNr=$P(R,D,27),(OLNr,ModOLNr)=$P(R,D,28) Do SWNODE^FLOWTOE(LEVNr,TOENr,TLNr) Do ProductToeleveringLijnGemaakt^FLOWTOE2(LEVNr,TOENr,TLNr) If ORDNr Do .Set KLNr=$P(^KO1(ORDNr,"F"),D),R=^KOD(KLNr,"F",ORDNr,OLNr),Aantal=$P(R,D,3) .For I=9,10,16 Set:Aantal $P(R,D,I)=$P(R,D,I)/Aantal Set $P(R,D,I)=$J($P(R,D,I)*BOQty,0,##class(APPS.VKP.OrderlijnPrijsBepaler).GeefAantalDecimalen()) .Set:$L($P(R,D,35)) $P(R,D,35)=$$SPLITNR^FLOWORD6(KLNr,ORDNr,OLNr) .Set OLNr=^KOD(KLNr,"F",ORDNr,0),^KOD(KLNr,"F",ORDNr,0)=OLNr+1 .Set $P(R,D,3)=BOQty,OLUNr=$P(R,D,15),OLUNr=OLUNr\10*10+9 .Set OLUNr=$O(^ORD("IU",ORDNr,OLUNr),-1)+1,$P(R,D,15)=OLUNr,$P(R,D,28)=TLNr .Set ^KOD(KLNr,"F",ORDNr,OLNr)=R .Do SWNODE^FLOWORD(KLNr,ORDNr,OLNr) .Do ProductOrderLijnGemaakt^FLOWORD2(KLNr,ORDNr,OLNr) .Set R=^KTO(LEVNr,TOENr,TLNr),$P(R,D,28)=OLNr,^KTO(LEVNr,TOENr,TLNr)=R .Do InvoerUitvoerLinkAangemaakt^FLOWTOE2(LEVNr,TOENr,TLNr) .Set SwapFrom=OLNr .For Do Quit:SwapTo'>ModOLNr ..Set SwapTo=$O(^KOD(KLNr,"F",ORDNr,SwapFrom),-1) ..Quit:SwapTo'>ModOLNr ..Do LSWAP^FLOWORD2(ORDNr,SwapFrom,SwapTo,1) ..Set SwapFrom=SwapTo Set (SwapFrom,ReturnLocal("NewTLNr"))=TLNr For Do Quit:SwapTo'>ModTLNr .Set SwapTo=$O(^KTO(LEVNr,TOENr,SwapFrom),-1) .Quit:SwapTo'>ModTLNr .Do LSWAP^FLOWTOE2(TOENr,SwapFrom,SwapTo) .Set (SwapFrom,ReturnLocal("NewTLNr"))=SwapTo Do MODAANT(LEVNr,TOENr,ModTLNr,ModAant) Quit ; MODAANT(LEVNr,TOENr,TLNr,Aantal) New R,OldAant,ORDNr,OLNr Set:'$G(LEVNr) LEVNr=$P(^KTO1(TOENr),D) Do KWNODE^FLOWTOE(LEVNr,TOENr,TLNr) Set R=^KTO(LEVNr,TOENr,TLNr),ORDNr=$P(R,D,27),OLNr=$P(R,D,28) If Aantal Do .Set OldAant=$P(R,D,3) .For I=9,10,16 Set:OldAant $P(R,D,I)=$P(R,D,I)/OldAant Set $P(R,D,I)=$J($P(R,D,I)*Aantal,0,##class(APPS.VKP.OrderlijnPrijsBepaler).GeefAantalDecimalen()) .Set $P(R,D,3)=Aantal,^KTO(LEVNr,TOENr,TLNr)=R .Do SWNODE^FLOWTOE(LEVNr,TOENr,TLNr) .Do:Aantal'=OldAant ProductToeleveringLijnGewijzigd^FLOWTOE2(LEVNr,TOENr,TLNr,##class(DOM.AKP.enu.ProductToeleveringLijnWijzigingType).Aantal()) Else Do .Kill ^KTO(LEVNr,TOENr,TLNr) If 'Aantal Do CHKDEL^FLOWTOE(TOENr) Do:ORDNr MODOAANT(,ORDNr,OLNr,Aantal) Quit ; MODOAANT(KLNr,ORDNr,OLNr,Aantal) New R,OldAant Set:'$G(KLNr) KLNr=$P(^KO1(ORDNr,"F"),D) Do KWNODE^FLOWORD(KLNr,ORDNr,OLNr) If Aantal Do .Set R=^KOD(KLNr,"F",ORDNr,OLNr),OldAant=$P(R,D,3) .For I=9,10,16 Set:OldAant $P(R,D,I)=$P(R,D,I)/OldAant Set $P(R,D,I)=$J($P(R,D,I)*Aantal,0,##class(APPS.VKP.OrderlijnPrijsBepaler).GeefAantalDecimalen()) .Set $P(R,D,3)=Aantal,^KOD(KLNr,"F",ORDNr,OLNr)=R .Do SWNODE^FLOWORD(KLNr,ORDNr,OLNr) .Do ProductOrderLijnGewijzigd^FLOWORD2(KLNr,ORDNr,OLNr,##class(DOM.VKP.enu.ProductOrderLijnWijzigingType).Aantal()) Else Do .Kill ^KOD(KLNr,"F",ORDNr,OLNr) .Do ProductOrderLijnAnnulatie^FLOWORD2(KLNr,ORDNr,OLNr) .Do:$O(^KOD(KLNr,"F",ORDNr,100))="" DELOBJ^FLOWORD(ORDNr) Quit ; MODLEVWK(TOENr,TLUNr,LevWk,ModOrd) New R,LEVNr,TLNr,KLNr,ORDNr,OLNr,VerzendWijze,LandCode,PostCode,blVerzendWijze,blLeveringsTermijn,OldLevWk Set ModOrd=$G(ModOrd) Set LEVNr=$P(^KTO1(TOENr),D),TLNr=^TO("IU",TOENr,TLUNr) Do KWNODE^FLOWTOE(LEVNr,TOENr,TLNr) Set R=^KTO(LEVNr,TOENr,TLNr),OldLevWk=$P(R,D,25),$P(R,D,25)=LevWk,^KTO(LEVNr,TOENr,TLNr)=R Set ORDNr=$P(R,D,27),OLNr=$P(R,D,28) Do SWNODE^FLOWTOE(LEVNr,TOENr,TLNr) Do:LevWk'=OldLevWk ProductToeleveringLijnGewijzigd^FLOWTOE2(LEVNr,TOENr,TLNr,##class(DOM.AKP.enu.ProductToeleveringLijnWijzigingType).Leverdatum()) If $L(ModOrd),ORDNr,OLNr Do .Set:ModOrd LevWk=$$GeefDefaultOrderLeverdag(ORDNr,LevWk) .Do MODLEVWK^FLOWORD6(,ORDNr,OLNr,LevWk) Quit ; SPLITTLN(LEVNr,TOENr,TLNr,Aantal,LevWk,ReturnLocal) New I,R,ORDNr,OLNr,KLNr,PakFact,OrdLevT Set LevWk=$G(LevWk) If '$G(LEVNr) Set R=^KTO1(TOENr),LEVNr=$P(R,D) Set R=^KTO(LEVNr,TOENr,TLNr),ORDNr=$P(R,D,27),OLNr=$P(R,D,28) If ORDNr Do .Set OrdLevT=$$GeefDefaultOrderLeverdag(ORDNr,LevWk) .Set KLNr=$P(^KO1(ORDNr,"F"),D) .Set R=^KOD(KLNr,"F",ORDNr,OLNr),PakFact=$P(R,D,36) .Set:PakFact Aantal=Aantal\PakFact .Do SPLITOLN^FLOWORD6(,ORDNr,OLNr,Aantal,OrdLevT,,.ReturnLocal) .Set TLNr=$G(ReturnLocal("NewTLNr")) .Quit:'TLNr .Set TLUNr=$P($G(^KTO(LEVNr,TOENr,TLNr)),D,15) .Do:TLUNr MODLEVWK(TOENr,TLUNr,LevWk) Else Do BACKORD(LEVNr,TOENr,TLNr,Aantal,,LevWk,.ReturnLocal) Quit ; ; Geef de vroegste leverdag op basis van de toeleveringsweek GeefDefaultOrderLeverdag(ORDNr,LevWk) New Leverdag,KLNr,VerzendWijze,LandCode,PostCode,blVerzendWijze,blLeveringsTermijn Set KLNr=$P(^KO1(ORDNr,"F"),D) Set VerzendWijze=$$DEFAULT^KLVERZW(,KLNr) Set LandCode=$P(^KOD(KLNr,"F",ORDNr,3),D,8) Set:LandCode LandCode=$$LAND^vhRtn1(LandCode) ; Leveringsadres Set:LandCode="" LandCode=$$LAND^vhRtn1(KLNr,"K") Set PostCode=$P(^KOD(KLNr,"F",ORDNr,3),D,6) ; Leveringsadres Set:PostCode="" PostCode=$P(^KKL(^KK1(KLNr),0),D,6) Set blVerzendWijze=##class(APPS.VKP.VerzendWijze).%New(KLNr,VerzendWijze,LandCode,PostCode,ORDNr) Set blLeveringsTermijn=##class(APPS.VKP.LeveringsTermijn).%New(,blVerzendWijze) Set Leverdag=$$GetLeverDag^FLOW3(KLNr,,$$CALCDATE^vhLib.DataTypes($$INTDATE^vhLib.DataTypes(LevWk,"DW"),"W",0,"LA"),1) Quit Leverdag ; ; Oude toelevering tijdelijk opslaan voor later nazicht BLDDEVSAVE(TOENr) Do DELDEVSAVE Set LEVNr=$P(^KTO1(TOENr),D) Set ^DEVSAVE($I,"TOE")=TOENr Merge ^DEVSAVE($I,"TOE")=^KTO(LEVNr,TOENr) Quit ; ; Controle van de tijdelijk opgeslagen toelevering met de huidige toelevering CHKDEVSAVE(TOENr) New OTLNr,NTLNr,TLNr,ORec,NRec,Rec,PRNr,TLUNr,ORDNr,OLevWk,NLevWk,Data,ToeDate,KomRef,KLNr New Count,MailId,Betreft,Onderw,TUserId,Tekst,Link Do:$G(^DEVSAVE($I,"TOE"))=TOENr . Set OTLNr=100 . For Set OTLNr=$O(^DEVSAVE($I,"TOE",OTLNr)) Quit:OTLNr="" Do . . Set ORec=^DEVSAVE($I,"TOE",OTLNr),PRNr=$P(ORec,D,2),ORDNr=$P(ORec,D,27) . . Quit:'PRNr Quit:'ORDNr . . Set TLUNr=$P(ORec,D,15),OLevWk=$P(ORec,D,25) . . Set NTLNr=$G(^TO("IU",TOENr,TLUNr)) . . If 'NTLNr Set Data("OD")=ORDNr,Data("LW","V",OTLNr)=PRNr_D_OLevWk Quit . . Set NRec=^KTO(LEVNr,TOENr,NTLNr),NLevWk=$P(NRec,D,25) . . Quit:$$INTDATE^vhLib.DataTypes(NLevWk,"DW")'>$$INTDATE^vhLib.DataTypes(OLevWk,"DW") . . Set Data("OD")=ORDNr,Data("LW","W",NTLNr)=PRNr_D_OLevWk_D_NLevWk . Quit:'$D(Data) . Set ORDNr=Data("OD"),KLNr=$P($G(^KO1(ORDNr,"F")),D) . Quit:'KLNr . Set Rec=^KOD(KLNr,"F",ORDNr,1),TUserId=$P($P(Rec,D,8),"#") Set:'TUserId TUserId="ORDVW" . Set Betreft="Toelevering "_TOENr_", order "_ORDNr . Set Tekst(1)="Mail van "_$$USERNAME^vhUSER(),Count=1 . If $D(^KTO(LEVNr,TOENr)) Do . . Set Rec=^KTO(LEVNr,TOENr,1),ToeDate=$P(Rec,D,2),KomRef=$P(Rec,D,3) . . Set Onderw=KomRef . . ; Gewijzigde lijnen . . Do:$D(Data("LW","W")) . . . Set TLNr="",Count=Count+1,Tekst(Count)="~~ªUAchteruit geschoven leverwekenªu:" . . . For Set TLNr=$O(Data("LW","W",TLNr)) Quit:'TLNr Do . . . . Set Rec=Data("LW","W",TLNr),PRNr=$P(Rec,D),OLevWk=$P(Rec,D,2),NLevWk=$P(Rec,D,3) . . . . Set Rec=$P(^KPR(PRNr,0),D),Rec=Rec_$J("",30-$L(Rec))_OLevWk_" --> "_NLevWk . . . . Set Count=Count+1,Tekst(Count)="~"_Rec . . ; Verwijderde lijnen . . Do:$D(Data("LW","V")) . . . Set TLNr="",Count=Count+1,Tekst(Count)="~~ªUVolgende lijnen werden verwijderdªu:" . . . For Set TLNr=$O(Data("LW","V",TLNr)) Quit:'TLNr Do . . . . Set Rec=Data("LW","V",TLNr),PRNr=$P(Rec,D),OLevWk=$P(Rec,D,2) . . . . Set Rec=$P(^KPR(PRNr,0),D),Rec=Rec_$J("",30-$L(Rec))_OLevWk_" --> verwijderd" . . . . Set Count=Count+1,Tekst(Count)="~"_Rec . Else Do ; Toelevering is verwijderd . . Set Onderw="" . . Set Count=Count+1,Tekst(Count)="~~ªUDeze toelevering is volledig verwijderdªu:" . Set Count=Count+1,Tekst(Count)="~~Gelieve het order eventueel na te zien en" . Set Count=Count+1,Tekst(Count)="~de klant hiervan op de hoogte te brengen." . Set Link(1)="ORD\"_ORDNr_"\R" ;,Link(2)="RPLLEVWK\"_KLNr_"\R\O" Raadplegen leverweken nieuwe versie nog in de maak 14/01/2005 . Set Link(2)="KL\"_KLNr_"\R\O",Link(3)="TAPI\"_KLNr . Set MailId=$$SYSTEM^vhMAIL3("",Betreft,Onderw,TUserId,.Tekst,.Link,"U","A") Quit ; ; Verwijderen van de tijdelijk opgeslagen toelevering DELDEVSAVE Kill ^DEVSAVE($I,"TOE") Quit ; ; Oude toeleveringen van een leverancier tijdelijk opslaan voor later nazicht BLDALLDEVSAVE(LEVNr) Do DELALLDEVSAVE Set ^DEVSAVE($I,"ALLTOE")=LEVNr Merge ^DEVSAVE($I,"ALLTOE")=^KTO(LEVNr) Quit ; ; Controle van de tijdelijk opgeslagen toeleveringen van een leverancier met de huidige toeleveringen CHKALLDEVSAVE(LEVNr) New TOENr Do:$G(^DEVSAVE($I,"ALLTOE"))=LEVNr . Set TOENr="" . For Set TOENr=$O(^DEVSAVE($I,"ALLTOE",TOENr)) Quit:TOENr="" Do . . Do DELDEVSAVE . . Set ^DEVSAVE($I,"TOE")=TOENr . . Merge ^DEVSAVE($I,"TOE")=^DEVSAVE($I,"ALLTOE",TOENr) . . Do CHKDEVSAVE(TOENr) . Do DELDEVSAVE Quit ; ; Verwijderen van de tijdelijk opgeslagen toeleveringen van een leverancier DELALLDEVSAVE Kill ^DEVSAVE($I,"ALLTOE") Quit ; ; Afsplitsen van een aantal van een toeleveringslijn via het uniek lijnnummer ; Het aantal is het aantal dat in de opgesplitste lijn komt SplitsLijn(TOENr,TLUNr,Aantal) New LEVNr,ReturnLocal,TLNr,NewTLNr,NewTLUNr Set LEVNr=$P(^KTO1(TOENr),D),TLNr=^TO("IU",TOENr,TLUNr) Set AantalInOrigineel = $P(^KTO(LEVNr,TOENr,TLNr),D,3) If (Aantal > AantalInOrigineel) { Set Exceptie = ##class(TECH.Exceptions.BaseException).%New(##class(TECH.enu.ExceptionCode).InvalidInput(),"Aantal is groter dan het aantal in de lijn") Do ##class(TECH.ExceptionHandler).Throw(Exceptie) } If '$$CheckOLUNr(TOENr,TLNr) { Set Exceptie = ##class(TECH.Exceptions.BaseException).%New(##class(TECH.enu.ExceptionCode).InvalidInput(),"De lijn is kan niet meer opgedeeld worden") Do ##class(TECH.ExceptionHandler).Throw(Exceptie) } Do SPLITTLN(LEVNr,TOENr,TLNr,Aantal,,.ReturnLocal) Set NewTLNr=$G(ReturnLocal("NewTLNr")) Set:NewTLNr NewTLUNr=$P(^KTO(LEVNr,TOENr,NewTLNr),D,15) Quit $G(NewTLUNr) ; ; Copieeren van een aantal lijnen van een toeleveing naar een nieuwe toelevering. ; AfTeSplitsenLijnen zijn TLUNrs (unieke nummers) SplitsToelevering(TOENr,AfTeSplitsenLijnen) New LEVNr,ToTOENr,TLNr,TLUNr,ToTLNr,Iterator Set LEVNr=$P(^KTO1(TOENr),D) Set ToTOENr=$$GETNUM^FLOW("KTO","KTO1") Set ^KTO(LEVNr,ToTOENr,1)=^KTO(LEVNr,TOENr,1),^KTO(LEVNr,ToTOENr,0)=101 Set ^KTO1(ToTOENr)=LEVNr_D,^KTO2(LEVNr,ToTOENr)="",^KTOB(ToTOENr)=LEVNr_D Set:LEVNr=$$$LevBlum ^BLBeri("Z",ToTOENr)=LEVNr_D Set Iterator = ##class(TECH.ListIterator).%New(AfTeSplitsenLijnen) While Iterator.HasNext(){ Set TLUNr = Iterator.Next() Set TLNr=^TO("IU",TOENr,TLUNr) Set ToTLNr=^KTO(LEVNr,ToTOENr,0),^KTO(LEVNr,ToTOENr,0)=ToTLNr+1 Do LMOVE^FLOWTOE3(TOENr,TLNr,ToTOENr,ToTLNr) Set ^KTO(LEVNr,ToTOENr,4)=ToTLNr#100+1 } Do ##class(DOM.AKP.event.ToeleveringEventRaiser).RaiseToeleveringGemaaktEvent(ToTOENr) Quit ToTOENr ; ; Indien Kom, nazien of de orderlijn nog mag opgesplitst worden i.v.m. OLUNrs CheckOLUNr(TOENr,TLNr) New LEVNr,ORDNr,OLNr,OLUNr,Ok Set Ok=1,LEVNr=$P(^KTO1(TOENr),D) Set ORDNr=$P(^KTO(LEVNr,TOENr,TLNr),D,27) Set OLNr=$P(^KTO(LEVNr,TOENr,TLNr),D,28) If ORDNr,OLNr Set Ok=$$CheckOLUNr^FLOWORD6(ORDNr,OLNr) Quit Ok ; ; Rebuild ^KTO2 RebuildKTO2 New LEVNr,TOENr Kill ^KTO2 Set LEVNr=0 For Set LEVNr=$O(^KTO(LEVNr)) Quit:LEVNr="" Do . Set TOENr="" . For Set TOENr=$O(^KTO(LEVNr,TOENr)) Quit:TOENr="" Set ^KTO2(LEVNr,TOENr)="" Quit