Index: AX/Uitgaand/VKP/PrijsVerschilNrUitz/impl/PrijsUitzDixfGenerator.cls.xml
===================================================================
diff -u
--- AX/Uitgaand/VKP/PrijsVerschilNrUitz/impl/PrijsUitzDixfGenerator.cls.xml (revision 0)
+++ AX/Uitgaand/VKP/PrijsVerschilNrUitz/impl/PrijsUitzDixfGenerator.cls.xml (revision 48131)
@@ -0,0 +1,28 @@
+
+
+
+AX.Uitgaand.VKP.PrijsUitz.impl.PrijsUitzDixfGenerator
+
+
+
+Do ##class(AX.Uitgaand.VKP.PrijsVerschilNrUitz.impl.PrijsUitzDixfGenerator).%New().GenerateAll()
+
+
+
+
+
+
Index: AX/Uitgaand/VKP/PrijsVerschilNrUitz/impl/PrijsUitzDixfConverter.cls.xml
===================================================================
diff -u
--- AX/Uitgaand/VKP/PrijsVerschilNrUitz/impl/PrijsUitzDixfConverter.cls.xml (revision 0)
+++ AX/Uitgaand/VKP/PrijsVerschilNrUitz/impl/PrijsUitzDixfConverter.cls.xml (revision 48131)
@@ -0,0 +1,116 @@
+
+
+
+Prod.Product
+TECH.RegisteredObject
+
+
+%RegisteredObject
+
+
+
+%RegisteredObject
+
+
+
+%String
+1
+
+
+
+AXdixf.PrijsUitz.PrijsUitz
+1
+
+
+
+%Boolean
+
+
+
+AX.Uitgaand.EC.DataAX.impl.Translator
+
+
+
+1
+1
+%Status
+1
+
+
+
+
+itPrijsUitz:PrijsUitzIterator,LineNum:%String
+AXdixf.VerkoopPrijzen.VerkoopPrijzenKortingen
+
+
+
+
+KLNr
+
+
+
+
+
+
Index: AX/Uitgaand/VKP/PrijsVerschilNrUitz/impl/PrijsUitzBuildCache.cls.xml
===================================================================
diff -u
--- AX/Uitgaand/VKP/PrijsVerschilNrUitz/impl/PrijsUitzBuildCache.cls.xml (revision 0)
+++ AX/Uitgaand/VKP/PrijsVerschilNrUitz/impl/PrijsUitzBuildCache.cls.xml (revision 48131)
@@ -0,0 +1,204 @@
+
+
+
+BL.Derde.LevSpecifiek,Prod.Product,vhLib.Macro
+TECH.RegisteredObject,TECH.Iterator
+
+
+%Integer
+1
+
+
+
+PrijsUitzDixfConverter
+1
+
+
+
+TECH.Iterator
+1
+
+
+
+TECH.Query.QueryAPI
+1
+
+
+
+TECH.ResultSet
+1
+
+
+
+%String
+1
+
+
+
+%String
+1
+
+
+
+TECH.Iterator
+
+
+
+DOM.VKP.VanHoeckeKlant
+
+
+
+%String
+
+
+
+%String
+
+
+
+%String
+1
+
+
+
+%String
+
+
+
+%Decimal
+
+
+
+%Decimal
+
+
+
+%String
+
+
+
+%String
+
+
+
+AXimpl.Admin.VKP.SalesPriceService
+
+
+
+%Status
+
+
+
+
+1
+%Status
+1
+ ",TotaalAantalVerschillen,!
+]]>
+
+
+
+ ",..AantalVerschillen,*9,$J(..OphalenTijd,0,1)
+ Write " / ", $J(..PrijsAXTijd,0,1)," / ",$J(..PrijsAdminTijd,0,1),!
+]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+KLNr:%String,PRNr:%String,PrijsRec:%String,Result:AXif.Dynamics.SalesPriceIn.MessageParts.ADUSalesPriceLineOutputDC,Error:%String
+
+
+
+
+
+
Index: KPRIJSADMIN.mac.rou
===================================================================
diff -u
--- KPRIJSADMIN.mac.rou (revision 0)
+++ KPRIJSADMIN.mac.rou (revision 48131)
@@ -0,0 +1,500 @@
+KPRIJS ;Produkt prijs
+#define CheckAXFase (0)
+#define MaatwerkKlantenMetWildcardUitz ";19485;14604;"
+#include vhLib.Macro
+#include Prod.Product
+#include BL.Derde.LevSpecifiek
+#include BL.Derde.KlantSpecifiek
+#define CodexList "LRSBG"
+#define CodexDeelVork "0;25;50;75;100"
+#define CodexDeelVorkOL "0;27.27272727;45.45454545;72.72727272;100"
+
+KlantPrijsObject(KLNr,PRNr,NoSa,RefDat,Aantal,LevTerm,Optie)
+ Quit $$KlantPrijsNaarKlantPrijsObject($$KlantPrijs(.KLNr,.PRNr,.NoSa,.RefDat,.Aantal,.LevTerm,.Optie))
+
+KLANTPRObject(KLNr,PRNr,NoSa,SimPPL)
+ quit $$KlantPrijsNaarKlantPrijsObject($$KLANTPR(.KLNr,.PRNr,.NoSa,.SimPPL))
+
+KlantPrijsNaarKlantPrijsObject(Record)
+ new PrijsInfo set PrijsInfo = ##class(APPS.VKP.dto.PrijsInfo).%New()
+ set PrijsInfo.Prijs = +$piece(Record,"\",1)
+ set PrijsInfo.Munt = $piece(Record,"\",2)
+ set PrijsInfo.GrootteOrde = $piece(Record,"\",3)
+ set PrijsInfo.LijstPrijs = $piece(Record,"\",4)
+ set PrijsInfo.KortingPercentage1 = +$piece(Record,"\",5)
+ set PrijsInfo.KortingPercentage2 = +$piece(Record,"\",6)
+ set PrijsInfo.PrijsCodex = $piece(Record,"\",7)
+ set PrijsInfo.PrijsBerekingManier = $piece(Record,"\",8)
+ set PrijsInfo.Pariteit = $piece(Record,"\",9)
+ set PrijsInfo.AfrondingRegel = $piece(Record,"\",10)
+ set PrijsInfo.GrootteOrdeNumeriek = $piece(Record,"\",11)
+ set PrijsInfo.AfrondingRegelNumeriek = $piece(Record,"\",12)
+ set PrijsInfo.AankoopprijsInEuro = +$piece(Record,"\",13)
+ set PrijsInfo.PrijsInEuro = +$piece(Record,"\",14)
+ set PrijsInfo.LijstPrijsInEuro = +$piece(Record,"\",15)
+ quit PrijsInfo
+
+
+ // Bereken van de verkoopprijs van een product voor een bepaalde klant rekening houdend met optionele kortigen
+KlantPrijs(KLNr,PRNr,NoSa,RefDat,Aantal,LevTerm,Optie)
+ ; Optie : T = Geen TANDEMBOX korting berekening
+ ; Optie : D = Display van optionele kortingen
+ Goto KLANTPR2
+
+ // Berekenen van de verkoopprijs van een product volgens de opgegeven korting
+ // eventueel wordt er gecontroleerd op de KATprijs
+KlantPrijsViaKorting(KLNr,PRNr,Korting1,Korting2,KlantGrOrde,CheckKAT,NoSa)
+ ; GrootteOrde is optioneel
+ Goto KLANTPR3
+
+ // Berekenen van de productverkoopprijs van een klant
+KLANTPR(KLNr,PRNr,NoSa,SimPPL)
+ If $G(KLNr)="?" Do HELPFUNC^vhRtn1($ZN,"KLANTPR") Quit ""
+ New Aantal,RefDat,LevTerm,Optie,VolgNr
+ ; De SimPPL wordt genomen ter vervanging van de PPL in PRNr,
+ ; zo kan dan het product een generisch product zijn waarvoor het afgeleid product nog niet bestaat
+ ; De SimPPL moet voldoen aan de muntpariteit en de grootteorde
+ ; Output: Piece 1 = prijs
+ ; Piece 2 = munt
+ ; Piece 3 = eenheid
+ ; Piece 4 = lijstprijs
+ ; Piece 5 = korting1
+ ; Piece 6 = korting2
+ ; Piece 7 = codex
+ ; Piece 8 = katprijs
+ ; Piece 9 = pariteit
+ ; Piece 10 = afrondingsregel
+ ; Piece 11 = eenheid(numeriek)
+ ; Piece 12 = round
+ ; Piece 13 = aankpr(EUR)
+ ; Piece 14 = prijs(EUR)
+ ; Piece 15 = lijstprijs(EUR)
+KLANTPR2
+ New Korting1,Korting2,CheckKAT,KlantGrOrde
+KLANTPR3
+ New R,KatProd,IsKatPr,FaMunt,Munt,MuntPar,VkpPr,KortNiv,AkpEUR,VkpEUR,LijstEUR,KlMunt,KlTyp,NetBrutP,PrijsKl,IsKsCust,IsLidVan,%LidVan,LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,PrMunt,CifPPL,LijstPr,Vork,%Vork
+ New BTWfactor,LijstPr1,VkpEURIncl,VkpPr1,VkpPrIncl
+ ; Opgezet via GETCUST : KlMunt,KlTyp,NetBrutP,PrijsKl,IsKsCust,IsLidVan,%LidVan
+ ; Opgezet via GETPROD : LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,PrMunt,CifPPL,LijstPr,Vork,%Vork
+ New LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,PrMunt,CifPPL,LijstPr,Vork,%Vork,BusinessType,Klant,KlantID, CorFakt,KortRec
+ Set:$G(NoSa)'="S" NoSa=""
+ Set FaMunt=$$FADEF^vhRtn1()
+ Do GETCUST(KLNr,NoSa,PRNr),GETPROD(PRNr,NoSa,$G(SimPPL))
+ Set IsKatPr=$S(IsKsCust:KatPrKs,KlTyp:KatPrHan,1:KatPrInd)
+ Set Munt=KlMunt
+ If KlMunt="MTL" Do ; Munt leverancier
+ .Set Munt=PrMunt
+ .Set:Munt="" Munt=$P(^KLE(^KL1(LevNr),0),D,11)
+ Set:Munt="" Munt=FaMunt ; Defaulting naar EUR
+ Set MuntPar=$$MUNTPAR^vhRtn1(Munt,2,NoSa)
+ Set KlantID = ##class(DOM.DomeinContext).Instance().GeefLegacyPartijAPI().GeefKlantPartijID(KLNr)
+ Set Klant = ##class(DOM.DomeinContext).Instance().GeefVerkoopAPI().GeefKlant(KlantID)
+ Set BusinessType = Klant.GeefBusinessType()
+ Do KKORTING, CALC
+
+ // VHIP907: Verkoopprijzen
+ // VHIP907->MVI: voorlopig laat ik alles invullen in fase 2a en overschrijf ik enkel de waarden die ax teruggeeft
+ New SalesPriceService, Output, OutputLine
+
+ If $$IsAX(KLNr,PRNr) {
+ Set SalesPriceService = ##class(AXimpl.Admin.VKP.SalesPriceService).%New()
+ #Dim Result as AXif.Dynamics.SalesPriceIn.MessageParts.ADUSalesPriceLineOutputDC
+ Set Result = SalesPriceService.GeefPrijs(KLNr, PRNr, $S($G(SimPPL):CifPPL,1:""))
+
+ Set VkpEUR = Result.Price
+ Set VkpPr = VkpEUR
+ Set LijstEUR = Result.GrossPrice
+ Set LijstPr = LijstEUR
+ Set Korting2=0
+ Set Korting1=(VkpEUR/LijstEUR-1)*100
+ }
+
+ Quit $$BUILD
+
+ ; Build = VkpPr_D_Munt_D_GrOrde_D_LijstPr_D_Korting1_D_Korting2_D_$G(PrijsKl)_D_$G(KortNiv)_D_+$J(1/MuntPar,0,8)_D_GrOrde_1_D_GrOrdNum_D_1_D_AkpEUR_D_VkpEUR_D_LijstEUR
+ ; 1:prijs,2:munt,3:eenheid,4:lijstprijs,5:korting1,6:korting2,7:codex,8:katprijs,9:pariteit,10:afrondingsregel,11:eenheid(numeriek),12:round,13:aankpr(EUR),14:prijs(EUR),15:lijstprijs(EUR)
+
+
+
+ // Set twee kortingen om van in % (*100) naar ��n korting in %
+OneKorting(Korting1,Korting2)
+ Quit (1-((1-(Korting1/100))*(1-(Korting2/100))))*100
+
+IsAX(KLNr,PRNr)
+ New Fase,IsAX
+ Set IsAX=0
+ If ($$$CheckAXFase) {
+ Set IsAX=1
+ If $$$MaatwerkKlantenMetWildcardUitz[(";"&KLNr&";") {
+ If PRNr,$$$PRGet($$$LeveranciersNr)=$$$LevHalux {
+ Set IsAX=0
+ }
+ }
+ }
+ ;w "KLNr",KLNr," PRNr",PRNr," = ",IsAX,!
+ Quit IsAX
+
+PRODINCLBTW(PRNr,Land,KlMunt,Korting1,Korting2,NetBrutP,KlTyp,NoSa,SimPPL,KlantGrOrde,CheckKAT,BusinessType)
+ New R
+ Set R = $$PROD(.PRNr,.Korting1,.Korting2,.KlMunt,.NetBrutP,.KlTyp,.NoSa,.SimPPL,.KlantGrOrde,.CheckKAT,.BusinessType)
+ Set $P(R,"\") = $P(R,"\")*$$GETBTWFACTOR(.Land)
+ Quit R
+ProdViaCodex(PRNr,Codex)
+ New KLNr
+ Set KLNr=$Case(Codex,"L":6819,"R":6820,"S":6821,"B":6822,"G":29391,"P":13854,"C":15876)
+ Quit:'$D(^KK1(KLNr)) ""
+ Quit $$KLANTPR(KLNr,PRNr)
+
+PROD(PRNr,Korting1,Korting2,KlMunt,NetBrutP,KlTyp,NoSa,SimPPL,KlantGrOrde,CheckKAT,BusinessType)
+ ; KlTyp 0=Industrie, 1=handel, P=prijslijst
+ ; De SimPPL wordt genomen ter vervanging van de PPL in PRNr,
+ ; zo kan dan het product een generisch product zijn waarvoor het afgeleid product nog niet bestaat
+ ; De SimPPL moet voldoen aan de muntpariteit en de grootteorde
+ New R,KatPr,CorFakt,KatProd,IsKatPr,FaMunt,Munt,MuntPar,IsKsCust,PrijsKl,VkpPr,KortNiv,AkpEUR,VkpEUR,LijstEUR,LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,PrMunt,CifPPL,LijstPr,Vork,%Vork
+ New BTWfactor,LijstPr1,VkpEURIncl,VkpPr1,VkpPrIncl
+
+ If ($G(Korting1)'="")&&("CPLRSBG"[Korting1) Quit $$ProdViaCodex(PRNr,Korting1)
+
+
+ ; Opgezet via GETPROD : LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,PrMunt,CifPPL,LijstPr,Vork,%Vork
+
+ Set:$Get(BusinessType)="" BusinessType = ##class(DOM.VKP.enu.BusinessType).B2B()
+ Set CheckKAT=$G(CheckKAT,1),FaMunt=$$FADEF^vhRtn1()
+ ;Defaulting
+ Set Korting2=$G(Korting2)
+ Set KlMunt=$G(KlMunt,FaMunt)
+ Set NetBrutP=$G(NetBrutP)
+ Set KlTyp=$G(KlTyp),IsKsCust=0 ;KlTyp="P"
+ Set:$G(NoSa)'="S" NoSa=""
+ Do GETPROD(PRNr,NoSa)
+ If ($$$CheckAXFase) {
+ Set LijstPr=$$GeefLijstPrijsInAX(PRNr,$S($G(SimPPL):SimPPL,1:""))
+ }
+ Set Munt=KlMunt
+ If KlMunt="MTL" Do ; Munt leverancier
+ .Set Munt=PrMunt
+ .Set:Munt="" Munt=$P(^KLE(^KL1(LevNr),0),D,11)
+ Set:Munt="" Munt=FaMunt ; Defaulting naar EUR
+ Set MuntPar=$$MUNTPAR^vhRtn1(Munt,2,NoSa)
+ Do PKORTING,CALC
+ Quit $$BUILD
+
+LEVPR(LEVNr,PRNr,NoSa) ; Prijsgegevens ophalen voor opmaak toelevering
+ New R,MuntPar,Korting1,Korting2,Munt,AankPr,Eenheid,Prijs
+ If "N"[$G(NoSa) Set NoSa=""
+ Set:'$D(LEVNr) LEVNr=$O(^KPR(PRNr,"J")),LEVNr=$S($E(LEVNr)="J":$E(LEVNr,2,9),1:"?")
+ If '$D(^KPR(PRNr,"J"_LEVNr)) Quit "Undef"
+ Set R=^KPR(PRNr,"J"_LEVNr),Korting1=$P(R,D,9),Korting2="",Munt=$P(R,D,17)
+ Set AankPr=$P(R,D,19),Eenheid=$P(R,D,28)
+ If NoSa="S" Do
+ .Set R=$$SchaduwPPL(PRNr) Set:$L(R) AankPr=R
+ .Set R=^KPR(PRNr,2)
+ .If $L($P(R,D,4)) Set Korting1=$P(R,D,4),Korting2=""
+ .Set:$L($P(^KPR(PRNr,1),D,3)) Munt=$P(^KPR(PRNr,1),D,3)
+ Set:LEVNr=$$$LevBlum Korting2=$$ExtraKorting^Blum.RaadplegenProduct(PRNr)*100 ; Blum geeft vanaf 01/03/2010 extra korting voor sommige kundestammen - PV 25/02/2010
+ Set:(+Korting1=0)&&(+Korting2'=0) Korting1=Korting2,Korting2=""
+ Set MuntPar=$$MUNT^vhRtn1(Munt,,11,NoSa)
+ Set Prijs=AankPr-(AankPr*Korting1/100),Prijs=Prijs-(Prijs*Korting2/100)
+ Set R=$J(Prijs,0,2)_D_Munt_D_Eenheid_D_AankPr_D_Korting1_D_Korting2_"\\\"_MuntPar_"\\"
+ Set Eenheid=$S(Eenheid="M":1000,Eenheid="H":100,1:1),Prijs=$J(Prijs/Eenheid*MuntPar,0,4)
+ Set R=R_Eenheid_"\\"_Prijs
+ Quit R ; PPL(incl. korting, munt lev) munt, eenheid, Aankprijs( excl. korting, munt lev.), korting1, korting2, , , Pariteit, , eenheid(numeriek), , PPL(EUR incl. korting)
+
+PRIJSGEG(PRNr,NoSa,SimPPL) ; Ophalen van de prijsgegevens van een product
+ ; De SimPPL wordt genomen ter vervanging van de PPL in PRNr,
+ ; zo kan dan het product een generisch product zijn waarvoor het afgeleid product nog niet bestaat
+ ; De SimPPL moet voldoen aan de muntpariteit en de grootteorde
+ ; Output: Piece 1 = PPL
+ ; Piece 2 = aankoopmunt
+ ; Piece 3 = aankoopeenheid
+ ; Piece 4 = aankoopeenheid (numeriek)
+ ; Piece 5 = korting
+ ; Piece 6 = CifPPL
+ ; Piece 7 = firmamunt
+ ; Piece 8 = verkoopeenheid
+ ; Piece 9 = verkoopeenheid (numeriek)
+ ; Piece 10 = Cif%
+ ; Piece 11 = dekkingsbijdrage
+ ; Piece 12 = dekkingsbijdrage%
+ ; Piece 13 = vork
+ ; Piece 14 = vork%
+ ; Piece 15 = lijstprijs (per stuk)
+ ; Piece 16 = katprod industrie (Prijsklasse code)
+ ; Piece 17 = katprod handel (Prijsklasse code)
+ ; Piece 18 = katprod KS (Prijsklasse code)
+ ; Piece 19 = LEVNr
+ ; Piece 20 = CorFakt
+ New I,J,R,LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,GrtPr,PrMunt,CifPPL,LijstPr,Vork,DB,FaMunt,Decimal,EenhAank,PPL,%Korting,%Vork,%DB,%Cif,CorFakt
+ Do GetProdBasis
+ ;Set Decimal=$$MUNT^vhRtn1(FaMunt,4),%DB=$J(%DB*GrOrdNum,0,Decimal)
+ Set R=CifPPL/(100-%DB/100)*%DB/100,R=$J(R,1,4),LijstPr=CifPPL+R
+ If ($$$CheckAXFase) {
+ Set LijstPr=$$GeefLijstPrijsInAX(PRNr,$S($G(SimPPL):CifPPL,1:""))
+ }
+ Set LijstPr=LijstPr*GrOrdNum
+ Set GrtPr=LijstPr*(100-%Vork/100)
+ Set GrtPr=$J($$ROUND(GrtPr),0,2)
+ Set LijstPr=$J($$ROUND(LijstPr),0,2)
+ Set Vork=LijstPr-GrtPr/GrOrdNum
+ Set LijstPr=LijstPr/GrOrdNum
+ Set PPL=$J(PPL*EenhAank,0,4)
+ Set DB=LijstPr-CifPPL
+ Set R=PPL_D_PrMunt_D_$S(EenhAank=1:"E",EenhAank=100:"H",EenhAank=1000:"M",1:"")_D_EenhAank
+ Set R=R_D_%Korting_D_CifPPL_D_FaMunt_D_GrOrde_D_GrOrdNum_D_%Cif_D_DB_D_%DB_D_Vork_D_%Vork_D_LijstPr
+ Set R=R_D_KatPrInd_D_KatPrHan_D_KatPrKs_D_LEVNr_D_CorFakt
+ Quit R
+
+GeefLijstPrijsInAX(PRNr,SimCifPPL)
+ New Result
+ #Dim Result as AXif.Dynamics.SalesPriceIn.MessageParts.ADUSalesPriceLineOutputDC
+
+ Set Result=##class(AXimpl.Admin.VKP.SalesPriceService).%New().GeefPrijs($$$KlantLVanHoecke,PRNr,.SimCifPPL)
+ Quit Result.GrossPrice
+
+
+GETPROD(PRNr,NoSa,SimPPL) ; Ophalen productgegevens
+ New J,R,FaMunt,EenhAank,PPL,%Korting,%DB,%Cif
+ Do GetProdBasis
+ Quit
+
+GetProdBasis
+ Set:$G(NoSa)="" NoSa="N"
+ Set:($G(D)="") D = "\"
+ Set R=^KPR(PRNr,1),KatPrHan=$P(R,D,18),KatPrInd=$P(R,D,19)
+ Set R=^KPR(PRNr,2),KatPrKs=$P(R,D,24)
+ Set R="",J=$O(^KPR(PRNr,"J")) Set:$E(J)="J" R=^KPR(PRNr,J)
+ Set LEVNr=$P(R,D),PrMunt=$P(R,D,17)
+ Set EenhAank=$P(R,D,28),EenhAank=$S("E"[EenhAank:1,EenhAank="H":100,EenhAank="M":1000,1:0)
+ Set PPL=$P(R,D,19),%Korting=$P(R,D,9),%Vork=$P(R,D,27),%DB=$P(R,D,24),%Cif=$P(R,D,21)
+ Set CorFakt=$P(R,D,8)
+ Do:NoSa="S"
+ .Set R=$$SchaduwPPL(PRNr) Set:$L(R) PPL=R
+ .Set R=^KPR(PRNr,2) Set:$L($P(R,D,4)) %Korting=$P(R,D,4)
+ .Set:$L($P(R,D,5)) %Vork=$P(R,D,5) Set:$L($P(R,D,6)) %DB=$P(R,D,6) Set:$L($P(R,D,7)) %Cif=$P(R,D,7)
+ .Set:$L($P(R,D,26)) CorFakt=$P(R,D,26)
+ .Set R=^KPR(PRNr,1) Set:$L($P(R,D,3)) PrMunt=$P(R,D,3)
+ .Set:$L($P(R,D,15)) KatPrHan=$P(R,D,15) Set:$L($P(R,D,16)) KatPrInd=$P(R,D,16)
+ .Set:KatPrHan="Z" KatPrHan=""
+ .Set:KatPrInd="Z" KatPrInd=""
+ Set:$G(SimPPL) PPL=SimPPL
+ Set FaMunt=$$FADEF^vhRtn1()
+ Set PPL=PPL/EenhAank
+ If FaMunt'[PrMunt S R=$$MUNT^vhRtn1(PrMunt,,11,NoSa),PPL=PPL*R
+ Set CifPPL=PPL*(100-%Korting)/100*(100+%Cif)/100,CifPPL=$J(CifPPL,1,4) Set:'CifPPL %DB=0
+ Set R=CifPPL/(100-%DB/100)*%DB/100,R=$J(R,1,4),LijstPr=CifPPL+R
+ Set Vork=CifPPL+R*%Vork/100,Vork=$J(Vork,1,4)
+ Set GrOrde=$$GRORDE^PRODUKT2(PRNr,NoSa)
+ Set:GrOrde="" GrOrde="E"
+ Set GrOrdNum=$S(GrOrde="M":1000,GrOrde="H":100,1:1)
+ Quit
+
+CifPPL(PRNr,NoSa)
+ New I,J,R,LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,GrtPr,PrMunt,CifPPL,LijstPr,Vork,DB,FaMunt,Decimal,EenhAank,PPL,%Korting,%Vork,%DB,%Cif,CorFakt
+ Do GetProdBasis
+ Quit CifPPL
+
+BUILD() Quit VkpPr_D_Munt_D_GrOrde_D_LijstPr_D_Korting1_D_Korting2_D_$G(PrijsKl)_D_$G(KortNiv)_D_+$J(1/MuntPar,0,8)_D_GrOrde_1_D_GrOrdNum_D_1_D_AkpEUR_D_VkpEUR_D_LijstEUR
+ ; 1:prijs,2:munt,3:eenheid,4:lijstprijs,5:korting1,6:korting2,7:codex,8:katprijs,9:pariteit,10:afrondingsregel,11:eenheid(numeriek),12:round,13:aankpr(EUR),14:prijs(EUR),15:lijstprijs(EUR)
+
+CALC
+ If $L($G(KlantGrOrde)) Do
+ . Set GrOrde=KlantGrOrde
+ . Set GrOrdNum=$S(GrOrde="M":1000,GrOrde="H":100,1:1)
+
+ If (BusinessType = ##class(DOM.VKP.enu.BusinessType).B2B()) {
+ Set LijstPr=LijstPr*GrOrdNum
+ If NetBrutP Do ; Bruto
+ .Set LijstPr=$J($$ROUND(LijstPr)*MuntPar,0,2)
+ .Set VkpPr=$J(LijstPr*(100-Korting1/100)*(100-Korting2/100),0,2)
+ Else Do ; Netto
+ .Set VkpPr=LijstPr*(100-Korting1/100)*(100-Korting2/100)
+ .Set VkpPr=$J($$ROUND(VkpPr)*MuntPar,0,2)
+ .Set LijstPr=$J($$ROUND(LijstPr)*MuntPar,0,2)
+ Set AkpEUR=+$J(CifPPL,0,4)
+ Set LijstEUR=+$J(LijstPr/GrOrdNum/MuntPar,0,4)
+ Set VkpEUR=+$J(VkpPr/GrOrdNum/MuntPar,0,4)
+ If $G(%LidVan) S VkpEUR=+$J(VkpEUR*(100-%LidVan/100),0,4) ; De verkoopprijs wordt verlaagd met de commissie vergoeding van de aankoopgroep
+ } Else {
+ Set LijstEUR = +$J(LijstPr,0,4) // Lijstprijs excl BTW in euro, per eenheid
+ Set LijstPr1=LijstPr*GrOrdNum
+ Set BTWfactor = $$GETBTWFACTOR("BE", PRNr)
+ Set VkpPr1=LijstPr1*(100-Korting1/100)*(100-Korting2/100) // Verkoopprijs excl BTW in euro
+ Set VkpEURIncl=$$B2CROUND(VkpPr1*BTWfactor) // Verkoopprijs incl BTW in euro
+ Set VkpEUR=+$J(VkpEURIncl/BTWfactor/GrOrdNum,0,4) // Verkoopprijs excl BTW via terugrekenen van de inclusiefprijs, in euro, per eenheid
+ Set VkpPrIncl=$J(VkpEURIncl*MuntPar,0,2) // Verkoopprijs incl BTW in de gevraagde munt
+ Set VkpPr=VkpPrIncl/BTWfactor // Verkoopprijs excl BTW via terugrekenen van de inclusiefprijs, in de gevraagde munt
+ // Niet afgerond voor maximale precisie bij opnieuw bijtellen an de BTW
+ Set LijstPr=$J($$ROUND(LijstPr1)*MuntPar,0,2) // Lijstprijs excl BTW volgens bestaande afronding, in de gevraagde munt
+ Set AkpEUR=+$J(CifPPL,0,4) // Aankoopprijs in euro excl BTW, per eenheid
+ Set VkpEURIncl=+$J(VkpEURIncl/GrOrdNum,0,4) // Verkoopprijs incl BTW in euro, per eenheid
+ }
+ Quit
+
+KKORTING ; Korting bepalen afhankelijk van KATPrijs of Klantcodex
+ If $G(Korting1)="" Do ; Korting was niet opgegeven dus zelf bepalen
+ . Set KortRec=$$GetKorting^KORTING(KLNr,PRNr,NoSa,.RefDat,.Aantal,.LevTerm,.Optie)
+ . Set Korting1=$LI(KortRec,2),Korting2=$LI(KortRec,3),KortNiv=$LI(KortRec,6)
+ . If $L($LG(KortRec,7)) Set KlantGrOrde=$LI(KortRec,7) ; GrootteOrde wordt overruled met deze van de uitzondering
+ Else If '$G(CheckKAT) Do ; Korting was opgegeven maar controle op KATprijs moet uitgevoerd worden
+ . Set KATprijs=$$KATPrijs^KORTING(KLNr,PRNr,.NoSa)
+ . If $L(PrijsKl),"CP"[PrijsKl Set KATprijs="" ; Geen katprijs indien "C" of "P" klant
+ . Set:$L(KATprijs) Korting1=KATprijs,Korting2="",KortNiv="K"
+ Quit
+
+TranslateCodex(PRNr,Codex,NoSa,%Vork)
+ New Korting
+ Quit:Codex'?.1A Codex
+ ; Voor KS-korting E=per stuk, K=kleinverpakking
+ If "KE"[Codex,$L(Codex) Do Quit Korting
+ . New R,KSDB
+ . If '$G(PRNr) Set KSDB=20
+ . Else Do
+ . . Set R=$O(^KPR(PRNr,"J")) Set:$E(R)="J" R=^KPR(PRNr,R)
+ . . Set KSDB=$P(R,D,10)
+ . . If $G(NoSa)="S" Set R=^KPR(PRNr,2) Set:$P(R,D,10) KSDB=$P(R,D,10)
+ . Set Korting=100-(10000/(100-KSDB))/$S(Codex="K":2.5,1:1)
+ If "CP"[Codex,$L(Codex) Do Quit Korting
+ . Set Korting=$S(Codex="C":-100,1:-10)
+ . Set Korting=$$TranslateCodexBeslag^KPRIJSExeptions(PRNr, Codex, Korting)
+ . If (##class(DOM.DomeinContext).Instance().GeefProductTypeAPI().IsTAORIndelingProduct(PRNr)) Do
+ . . Set Korting = 0 // Cons en Plus staan op lijstprijs
+ . . Set Korting=$$TranslateCodexTaorIndeling^KPRIJSExeptions(PRNr, Codex, Korting)
+ . If Codex="C",$$ISORGAL^PRODUKT2(PRNr) Do
+ . . New R,%Vork,CifPPL,CorFakt,GrOrdNum,GrOrde,KatPrHan,KatPrInd,KatPrKs,LEVNr,LijstPr,PrMunt,Vork,KatPr
+ . . Do GETPROD(PRNr,NoSa)
+ . . If 'LijstPr Set Korting=0 Quit
+ . . Set R=$$PROD(PRNr,"S",,,,,NoSa) ; Berekenen Spilprijs
+ . . Set Korting=1-($P(R,D)*2/LijstPr)*100 ; Spilprijs * 2
+ . . Set Korting=$$TranslateCodexOrgalux^KPRIJSExeptions(PRNr, Codex, Korting)
+ Set:($$$CodexList'[Codex)!(Codex="") Codex="L"
+ Set:$G(%Vork)="" %Vork=$P($$PRIJSGEG(PRNr,.NoSa),D,14)
+ Quit +$J(%Vork*$P($S($$ISORGAL^ORGALUX(PRNr):$$$CodexDeelVorkOL,1:$$$CodexDeelVork),";",$F($$$CodexList,Codex)-1)/100,0,4)
+
+PKORTING ; opgevenen korting eventueel overrulen met KATprijs
+ ; KATprijs
+ Set KatPr=$S(Korting1="C":"",Korting1="P":"",'CheckKAT:"",IsKsCust:KatPrKs,KlTyp:KatPrHan,1:KatPrInd)
+ Set:$L(KatPr) Korting1=KatPr,Korting2="",KortNiv="K"
+ ; Omzetting code naar %
+ If Korting1?1A Set Korting1=$$TranslateCodex(PRNr,Korting1,.NoSa,%Vork),Korting2=""
+
+ Quit
+
+ROUND(Prijs,Eenheid=100) ; Afronden naar boven op 1 cent
+ Set Prijs=$J(Prijs*Eenheid+.499999,0,0)/Eenheid
+ Quit Prijs
+
+B2CROUND(Prijs) // Afronding voor B2C prijsberekening
+ Quit $$ROUND(Prijs,2)
+
+GETBTWFACTOR(LandVanVerkoop, PRNr) // Geeft het BTW-percentage, los van het feit of we de BTW al dan niet aanrekenen
+ // TODO In principe moet het BTW% bepaald worden uit de BTW-code van het product.
+ // TODO BTW-code omzetten naar een % via ^KBA
+ New Land
+ Set Land=$G(LandVanVerkoop)
+ Quit $S(Land?1(1"B",1"BE"):1.21,Land="NL":1.21,Land="CH":1.076,1:1)
+
+GETCUST(KLNr,NoSa,PRNr) ; Ophalen klantgegevens
+ New R,KlantId,FaMunt
+ Set:$G(NoSa)'="S" NoSa=""
+ Set FaMunt=$$FADEF^vhRtn1(),KlantId=^KK1(KLNr)
+ Set R=^KKL(KlantId,0),KlMunt=$P(R,D,11) Set:KlMunt="" KlMunt=FaMunt
+ Set R=$G(^KKL(KlantId,7))
+ If NoSa="S",$L($P(R,D,8))=3 Set KLMunt=$P(R,D,8)
+ Set KlTyp=$$IsHandel^KLANT5(KLNr)
+ Set R=^KKL(KlantId,2)
+ Set PrijsKl=$$PRIJSKL^KLANT(KLNr,PRNr,NoSa),NetBrutP=$P(R,D,5)
+ Set IsLidVan=$$GetLidVan^KF21B(KLNr),%LidVan=$LI(IsLidVan,2),IsLidVan=$LI(IsLidVan) ; %LidVan bevat de commissie % van de aankoopgroep
+ If NoSa="S",$L($P(R,D,25)) Set PrijsKl=$P(R,D,25)
+ Set IsKsCust=0 ;$$ISKLANT^KS(KLNr,,NoSa)
+ Quit
+
+ ; Controle of de prijs niet onder de aankoopprijs zit
+ ; Controle of de prijs niet boven de lijstprijs zit
+CHKPRIJS(PRNr,LijstPr,VerkPr,Eenheid,Pariteit,AankPr,WachtW,Position,TimeOut,Time,Check,KLNr)
+ New R,KortText,Ok,Klant,KlantID
+ #dim KlantID As DOM.VKP.VanHoeckeKlantID
+ #dim Klant As DOM.VKP.Klant
+ Set WachtW=$G(WachtW),Position=$G(Position),TimeOut=$G(TimeOut),Time=$G(Time)
+ Set Check=$G(Check) Set:Check="" Check="ALV"
+ Set LijstPr=LijstPr/Eenheid*Pariteit,VerkPr=VerkPr/Eenheid*Pariteit,Ok=1
+ If Check["L",'LijstPr Do
+ .Set KortText=$P(^KPR(PRNr,0),D)
+ .Set R=$$^vhTXTPOP("KPRIJS","CHK-LIJST-NUL-PRIJS","",KortText),Ok=R'="A"
+ .If Ok,$L(WachtW) Set Ok=$$ASK^vhWACHTW(WachtW,Position,TimeOut,Time)
+ Else If Check["A",'AankPr Do
+ .Set KortText=$P(^KPR(PRNr,0),D)
+ .Set R=$$^vhTXTPOP("KPRIJS","CHK-AANK-NUL-PRIJS","",KortText),Ok=R'="A"
+ .If Ok,$L(WachtW) Set Ok=$$ASK^vhWACHTW(WachtW,Position,TimeOut,Time)
+ ELse If Check["V",VerkPrLijstPr Do
+ .Set KlantID = ##class(DOM.DomeinContext).Instance().GeefLegacyPartijAPI().GeefKlantPartijID($G(KLNr,KC))
+ .Set Klant = ##class(DOM.DomeinContext).Instance().GeefVerkoopAPI().GeefKlant(KlantID)
+ .If Klant.GeefBusinessType() = ##class(DOM.VKP.enu.BusinessType).B2B() Do
+ ..Set KortText=$P(^KPR(PRNr,0),D)
+ ..Set R=$$^vhTXTPOP("KPRIJS","CHK-VERK-LIJST-PRIJS","",KortText,$J(VerkPr,0,2),$J(LijstPr,0,2)),Ok=R'="A"
+ ..If Ok,$L(WachtW) Set Ok=$$ASK^vhWACHTW(WachtW,Position,TimeOut,Time)
+ Quit Ok
+
+ ; Deze routine komt te vervallen na het afschaffen van de Prijslijst-klant
+KSKORT(PRNr,Korting,NoSa)
+ Goto KSKORT+1^KPRIJSS
+
+ ; ShaduwPPL van een product ophalen i.v.m. bouwstenen
+ ; ForceSchaduwPPL = 0 of '$G() geeft leeg indien gelijk aan de PPL (default)
+ ; = 1 geeft steeds de SchaduwPPL ook indien gelijk aan de PPL
+SchaduwPPL(PRNr,ForceSchaduwPPL)
+ New J,R,SchaduwPPL,PPL,PRBS
+
+ If ($$HasHalfFabr^PRBS(PRNr)||($$$ProductGet(PRNr,$$$LinkType)="S")),'$$ExcludeSchaduwPPL(PRNr) Do ; Halfabrikaat of Stock over kinderen EXEPT 358M5002SF *7587*
+ . New GrOrde
+ . Do CALC^PRBS(PRNr,.PRBS,,,,"S") ; recursie mogelijk
+ . Set SchaduwPPL=$P(PRBS,D)
+ . Set J=$O(^KPR(PRNr,"J")),R=^(J),GrOrde=$P(R,D,28)
+ . Set GrOrde=$S(GrOrde="M":1000,GrOrde="H":100,1:1)
+ . Set SchaduwPPL=+$J(SchaduwPPL*GrOrde,0,2)
+ Else Set R=^KPR(PRNr,2),SchaduwPPL=$P(R,D,3)
+ Do:'$G(ForceSchaduwPPL) ; Leeg indien SchaduwPPL = PPL
+ . Set J=$O(^KPR(PRNr,"J")),R=^(J),PPL=$P(R,D,19)
+ . Set:+PPL=+SchaduwPPL SchaduwPPL=""
+ Quit SchaduwPPL
+
+ExcludeSchaduwPPL(PRNr)
+ Quit:(PRNr?1(1"355494",1"355495")) 1
+ ;Quit:($P($$GENTYP^HAD(PRNr),"\")="KAD") 1 ; PV 09/09/10 op vraag van JB
+ Quit 0 ; include
+
+SchaduwPPLRecurse(PRNr,ForceSchaduwPPL)
+ New J,R,SchaduwPPL,PPL,PRBS
+ If ($$HasHalfFabr^PRBS(PRNr)||($$$ProductGet(PRNr,$$$LinkType)="S")) Do ; Halfabrikaat of Stock over kinderen
+ . If '$D(%SchaduwPPLRecurse(PRNr)) Do
+ . . New GrOrde,StartRecurse
+ . . Set:'$D(%SchaduwPPLRecurse) %SchaduwPPLRecurse=PRNr
+ . . Set %SchaduwPPLRecurse(PRNr)=""
+ . . Set:StartRecurse %SchaduwPPLRecurse=PRNr ; Start product
+ . . Do CALC^PRBS(PRNr,.PRBS,,,,"S")
+ . . Kill %SchaduwPPLRecurse(PRNr)
+ . . Kill:%SchaduwPPLRecurse=PRNr %SchaduwPPLRecurse ; Start product
+ . . Set SchaduwPPL=$P(PRBS,D)
+ . . Set J=$O(^KPR(PRNr,"J")),R=^(J),GrOrde=$P(R,D,28)
+ . . Set GrOrde=$S(GrOrde="M":1000,GrOrde="H":100,1:1)
+ . . Set SchaduwPPL=+$J(SchaduwPPL*GrOrde,0,2)
+ . Else Do ; Recursie probleem
+ . . Set R=^KPR(PRNr,2),SchaduwPPL=$P(R,D,3) ; best mogelijke waarde
+ . . ; Mail versturen van de fout
+ . . ; Hoofdnood is start product
+ . . Set Body=$$ArrayToText^vhLib("%SchaduwPPLRecurse")
+ . . Set From="System@vanhoecke.be"
+ . . Set Subj="KPRIJS - recursie probleem in bouwstenen"
+ . . Set To=$LB("pv@vanhoecke.be")
+ . . Do SendMiniMail^vhLib(From,To,Subj,Body,,,,,)
+ Else Set R=^KPR(PRNr,2),SchaduwPPL=$P(R,D,3)
+ Do:'$G(ForceSchaduwPPL) ; Leeg indien SchaduwPPL = PPL
+ . Set J=$O(^KPR(PRNr,"J")),R=^(J),PPL=$P(R,D,19)
+ . Set:+PPL=+SchaduwPPL SchaduwPPL=""
+ Quit SchaduwPPL
Index: AXif/Dynamics/SalesPriceOut/MessageParts/ADUSalesPriceLineInputDC.cls.xml
===================================================================
diff -u -r45515 -r48131
--- AXif/Dynamics/SalesPriceOut/MessageParts/ADUSalesPriceLineInputDC.cls.xml (.../ADUSalesPriceLineInputDC.cls.xml) (revision 45515)
+++ AXif/Dynamics/SalesPriceOut/MessageParts/ADUSalesPriceLineInputDC.cls.xml (.../ADUSalesPriceLineInputDC.cls.xml) (revision 48131)
@@ -98,7 +98,7 @@
-%TimeStamp
+%Date
Index: AXif/Dynamics/SalesPriceIn/MessageParts/ADUSalesPriceHeaderOutputDC.cls.xml
===================================================================
diff -u -r45515 -r48131
--- AXif/Dynamics/SalesPriceIn/MessageParts/ADUSalesPriceHeaderOutputDC.cls.xml (.../ADUSalesPriceHeaderOutputDC.cls.xml) (revision 45515)
+++ AXif/Dynamics/SalesPriceIn/MessageParts/ADUSalesPriceHeaderOutputDC.cls.xml (.../ADUSalesPriceHeaderOutputDC.cls.xml) (revision 48131)
@@ -11,6 +11,8 @@
+
+Parameter XMLIGNOREINVALIDTAG As BOOLEAN = 1;
http://schemas.datacontract.org/2004/07/Dynamics.Ax.Application
@@ -38,6 +40,11 @@
+
+%Boolean
+
+
+
AXif.Dynamics.SalesPriceIn.MessageParts.ADUSalesPriceLineOutputDC
list
Index: AX/Uitgaand/VKP/PrijsVerschilNrUitz/impl/PrijsUitzIterator.cls.xml
===================================================================
diff -u
--- AX/Uitgaand/VKP/PrijsVerschilNrUitz/impl/PrijsUitzIterator.cls.xml (revision 0)
+++ AX/Uitgaand/VKP/PrijsVerschilNrUitz/impl/PrijsUitzIterator.cls.xml (revision 48131)
@@ -0,0 +1,120 @@
+
+
+
+TECH.RegisteredObject,TECH.Iterator
+
+
+%Integer
+1
+
+
+
+PrijsUitzDixfConverter
+1
+
+
+
+TECH.Iterator
+1
+
+
+
+TECH.Query.QueryAPI
+1
+
+
+
+TECH.ResultSet
+1
+
+
+
+%String
+1
+
+
+
+%String
+1
+
+
+
+QueryAPI:TECH.Query.QueryAPI=""
+1
+1
+%Status
+1
+
+
+
+
+%Boolean
+
+
+
+
+AXdixf.PrijsUitz.PrijsUitz
+
+
+
+
+%List
+
+
+
+
+%List
+
+
+
+
+%List
+
+
+
+
+%List
+
+
+
+
+%List
+
+
+
+
+%List
+
+
+
+
+%String
+
+
+
+
+
+
Index: KPRIJSAX.mac.rou
===================================================================
diff -u
--- KPRIJSAX.mac.rou (revision 0)
+++ KPRIJSAX.mac.rou (revision 48131)
@@ -0,0 +1,500 @@
+KPRIJS ;Produkt prijs
+#define CheckAXFase (1)
+#define MaatwerkKlantenMetWildcardUitz ";19485;14604;"
+#include vhLib.Macro
+#include Prod.Product
+#include BL.Derde.LevSpecifiek
+#include BL.Derde.KlantSpecifiek
+#define CodexList "LRSBG"
+#define CodexDeelVork "0;25;50;75;100"
+#define CodexDeelVorkOL "0;27.27272727;45.45454545;72.72727272;100"
+
+KlantPrijsObject(KLNr,PRNr,NoSa,RefDat,Aantal,LevTerm,Optie)
+ Quit $$KlantPrijsNaarKlantPrijsObject($$KlantPrijs(.KLNr,.PRNr,.NoSa,.RefDat,.Aantal,.LevTerm,.Optie))
+
+KLANTPRObject(KLNr,PRNr,NoSa,SimPPL)
+ quit $$KlantPrijsNaarKlantPrijsObject($$KLANTPR(.KLNr,.PRNr,.NoSa,.SimPPL))
+
+KlantPrijsNaarKlantPrijsObject(Record)
+ new PrijsInfo set PrijsInfo = ##class(APPS.VKP.dto.PrijsInfo).%New()
+ set PrijsInfo.Prijs = +$piece(Record,"\",1)
+ set PrijsInfo.Munt = $piece(Record,"\",2)
+ set PrijsInfo.GrootteOrde = $piece(Record,"\",3)
+ set PrijsInfo.LijstPrijs = $piece(Record,"\",4)
+ set PrijsInfo.KortingPercentage1 = +$piece(Record,"\",5)
+ set PrijsInfo.KortingPercentage2 = +$piece(Record,"\",6)
+ set PrijsInfo.PrijsCodex = $piece(Record,"\",7)
+ set PrijsInfo.PrijsBerekingManier = $piece(Record,"\",8)
+ set PrijsInfo.Pariteit = $piece(Record,"\",9)
+ set PrijsInfo.AfrondingRegel = $piece(Record,"\",10)
+ set PrijsInfo.GrootteOrdeNumeriek = $piece(Record,"\",11)
+ set PrijsInfo.AfrondingRegelNumeriek = $piece(Record,"\",12)
+ set PrijsInfo.AankoopprijsInEuro = +$piece(Record,"\",13)
+ set PrijsInfo.PrijsInEuro = +$piece(Record,"\",14)
+ set PrijsInfo.LijstPrijsInEuro = +$piece(Record,"\",15)
+ quit PrijsInfo
+
+
+ // Bereken van de verkoopprijs van een product voor een bepaalde klant rekening houdend met optionele kortigen
+KlantPrijs(KLNr,PRNr,NoSa,RefDat,Aantal,LevTerm,Optie)
+ ; Optie : T = Geen TANDEMBOX korting berekening
+ ; Optie : D = Display van optionele kortingen
+ Goto KLANTPR2
+
+ // Berekenen van de verkoopprijs van een product volgens de opgegeven korting
+ // eventueel wordt er gecontroleerd op de KATprijs
+KlantPrijsViaKorting(KLNr,PRNr,Korting1,Korting2,KlantGrOrde,CheckKAT,NoSa)
+ ; GrootteOrde is optioneel
+ Goto KLANTPR3
+
+ // Berekenen van de productverkoopprijs van een klant
+KLANTPR(KLNr,PRNr,NoSa,SimPPL)
+ If $G(KLNr)="?" Do HELPFUNC^vhRtn1($ZN,"KLANTPR") Quit ""
+ New Aantal,RefDat,LevTerm,Optie,VolgNr
+ ; De SimPPL wordt genomen ter vervanging van de PPL in PRNr,
+ ; zo kan dan het product een generisch product zijn waarvoor het afgeleid product nog niet bestaat
+ ; De SimPPL moet voldoen aan de muntpariteit en de grootteorde
+ ; Output: Piece 1 = prijs
+ ; Piece 2 = munt
+ ; Piece 3 = eenheid
+ ; Piece 4 = lijstprijs
+ ; Piece 5 = korting1
+ ; Piece 6 = korting2
+ ; Piece 7 = codex
+ ; Piece 8 = katprijs
+ ; Piece 9 = pariteit
+ ; Piece 10 = afrondingsregel
+ ; Piece 11 = eenheid(numeriek)
+ ; Piece 12 = round
+ ; Piece 13 = aankpr(EUR)
+ ; Piece 14 = prijs(EUR)
+ ; Piece 15 = lijstprijs(EUR)
+KLANTPR2
+ New Korting1,Korting2,CheckKAT,KlantGrOrde
+KLANTPR3
+ New R,KatProd,IsKatPr,FaMunt,Munt,MuntPar,VkpPr,KortNiv,AkpEUR,VkpEUR,LijstEUR,KlMunt,KlTyp,NetBrutP,PrijsKl,IsKsCust,IsLidVan,%LidVan,LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,PrMunt,CifPPL,LijstPr,Vork,%Vork
+ New BTWfactor,LijstPr1,VkpEURIncl,VkpPr1,VkpPrIncl
+ ; Opgezet via GETCUST : KlMunt,KlTyp,NetBrutP,PrijsKl,IsKsCust,IsLidVan,%LidVan
+ ; Opgezet via GETPROD : LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,PrMunt,CifPPL,LijstPr,Vork,%Vork
+ New LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,PrMunt,CifPPL,LijstPr,Vork,%Vork,BusinessType,Klant,KlantID, CorFakt,KortRec
+ Set:$G(NoSa)'="S" NoSa=""
+ Set FaMunt=$$FADEF^vhRtn1()
+ Do GETCUST(KLNr,NoSa,PRNr),GETPROD(PRNr,NoSa,$G(SimPPL))
+ Set IsKatPr=$S(IsKsCust:KatPrKs,KlTyp:KatPrHan,1:KatPrInd)
+ Set Munt=KlMunt
+ If KlMunt="MTL" Do ; Munt leverancier
+ .Set Munt=PrMunt
+ .Set:Munt="" Munt=$P(^KLE(^KL1(LevNr),0),D,11)
+ Set:Munt="" Munt=FaMunt ; Defaulting naar EUR
+ Set MuntPar=$$MUNTPAR^vhRtn1(Munt,2,NoSa)
+ Set KlantID = ##class(DOM.DomeinContext).Instance().GeefLegacyPartijAPI().GeefKlantPartijID(KLNr)
+ Set Klant = ##class(DOM.DomeinContext).Instance().GeefVerkoopAPI().GeefKlant(KlantID)
+ Set BusinessType = Klant.GeefBusinessType()
+ Do KKORTING, CALC
+
+ // VHIP907: Verkoopprijzen
+ // VHIP907->MVI: voorlopig laat ik alles invullen in fase 2a en overschrijf ik enkel de waarden die ax teruggeeft
+ New SalesPriceService, Output, OutputLine
+
+ If $$IsAX(KLNr,PRNr) {
+ Set SalesPriceService = ##class(AXimpl.Admin.VKP.SalesPriceService).%New()
+ #Dim Result as AXif.Dynamics.SalesPriceIn.MessageParts.ADUSalesPriceLineOutputDC
+ Set Result = SalesPriceService.GeefPrijs(KLNr, PRNr, $S($G(SimPPL):CifPPL,1:""))
+
+ Set VkpEUR = Result.Price
+ Set VkpPr = VkpEUR
+ Set LijstEUR = Result.GrossPrice
+ Set LijstPr = LijstEUR
+ Set Korting2=0
+ Set Korting1=(VkpEUR/LijstEUR-1)*100
+ }
+
+ Quit $$BUILD
+
+ ; Build = VkpPr_D_Munt_D_GrOrde_D_LijstPr_D_Korting1_D_Korting2_D_$G(PrijsKl)_D_$G(KortNiv)_D_+$J(1/MuntPar,0,8)_D_GrOrde_1_D_GrOrdNum_D_1_D_AkpEUR_D_VkpEUR_D_LijstEUR
+ ; 1:prijs,2:munt,3:eenheid,4:lijstprijs,5:korting1,6:korting2,7:codex,8:katprijs,9:pariteit,10:afrondingsregel,11:eenheid(numeriek),12:round,13:aankpr(EUR),14:prijs(EUR),15:lijstprijs(EUR)
+
+
+
+ // Set twee kortingen om van in % (*100) naar ��n korting in %
+OneKorting(Korting1,Korting2)
+ Quit (1-((1-(Korting1/100))*(1-(Korting2/100))))*100
+
+IsAX(KLNr,PRNr)
+ New Fase,IsAX
+ Set IsAX=0
+ If ($$$CheckAXFase) {
+ Set IsAX=1
+ If $$$MaatwerkKlantenMetWildcardUitz[(";"&KLNr&";") {
+ If PRNr,$$$PRGet($$$LeveranciersNr)=$$$LevHalux {
+ Set IsAX=0
+ }
+ }
+ }
+ ;w "KLNr",KLNr," PRNr",PRNr," = ",IsAX,!
+ Quit IsAX
+
+PRODINCLBTW(PRNr,Land,KlMunt,Korting1,Korting2,NetBrutP,KlTyp,NoSa,SimPPL,KlantGrOrde,CheckKAT,BusinessType)
+ New R
+ Set R = $$PROD(.PRNr,.Korting1,.Korting2,.KlMunt,.NetBrutP,.KlTyp,.NoSa,.SimPPL,.KlantGrOrde,.CheckKAT,.BusinessType)
+ Set $P(R,"\") = $P(R,"\")*$$GETBTWFACTOR(.Land)
+ Quit R
+ProdViaCodex(PRNr,Codex)
+ New KLNr
+ Set KLNr=$Case(Codex,"L":6819,"R":6820,"S":6821,"B":6822,"G":29391,"P":13854,"C":15876)
+ Quit:'$D(^KK1(KLNr)) ""
+ Quit $$KLANTPR(KLNr,PRNr)
+
+PROD(PRNr,Korting1,Korting2,KlMunt,NetBrutP,KlTyp,NoSa,SimPPL,KlantGrOrde,CheckKAT,BusinessType)
+ ; KlTyp 0=Industrie, 1=handel, P=prijslijst
+ ; De SimPPL wordt genomen ter vervanging van de PPL in PRNr,
+ ; zo kan dan het product een generisch product zijn waarvoor het afgeleid product nog niet bestaat
+ ; De SimPPL moet voldoen aan de muntpariteit en de grootteorde
+ New R,KatPr,CorFakt,KatProd,IsKatPr,FaMunt,Munt,MuntPar,IsKsCust,PrijsKl,VkpPr,KortNiv,AkpEUR,VkpEUR,LijstEUR,LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,PrMunt,CifPPL,LijstPr,Vork,%Vork
+ New BTWfactor,LijstPr1,VkpEURIncl,VkpPr1,VkpPrIncl
+
+ If ($G(Korting1)'="")&&("CPLRSBG"[Korting1) Quit $$ProdViaCodex(PRNr,Korting1)
+
+
+ ; Opgezet via GETPROD : LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,PrMunt,CifPPL,LijstPr,Vork,%Vork
+
+ Set:$Get(BusinessType)="" BusinessType = ##class(DOM.VKP.enu.BusinessType).B2B()
+ Set CheckKAT=$G(CheckKAT,1),FaMunt=$$FADEF^vhRtn1()
+ ;Defaulting
+ Set Korting2=$G(Korting2)
+ Set KlMunt=$G(KlMunt,FaMunt)
+ Set NetBrutP=$G(NetBrutP)
+ Set KlTyp=$G(KlTyp),IsKsCust=0 ;KlTyp="P"
+ Set:$G(NoSa)'="S" NoSa=""
+ Do GETPROD(PRNr,NoSa)
+ If ($$$CheckAXFase) {
+ Set LijstPr=$$GeefLijstPrijsInAX(PRNr,$S($G(SimPPL):SimPPL,1:""))
+ }
+ Set Munt=KlMunt
+ If KlMunt="MTL" Do ; Munt leverancier
+ .Set Munt=PrMunt
+ .Set:Munt="" Munt=$P(^KLE(^KL1(LevNr),0),D,11)
+ Set:Munt="" Munt=FaMunt ; Defaulting naar EUR
+ Set MuntPar=$$MUNTPAR^vhRtn1(Munt,2,NoSa)
+ Do PKORTING,CALC
+ Quit $$BUILD
+
+LEVPR(LEVNr,PRNr,NoSa) ; Prijsgegevens ophalen voor opmaak toelevering
+ New R,MuntPar,Korting1,Korting2,Munt,AankPr,Eenheid,Prijs
+ If "N"[$G(NoSa) Set NoSa=""
+ Set:'$D(LEVNr) LEVNr=$O(^KPR(PRNr,"J")),LEVNr=$S($E(LEVNr)="J":$E(LEVNr,2,9),1:"?")
+ If '$D(^KPR(PRNr,"J"_LEVNr)) Quit "Undef"
+ Set R=^KPR(PRNr,"J"_LEVNr),Korting1=$P(R,D,9),Korting2="",Munt=$P(R,D,17)
+ Set AankPr=$P(R,D,19),Eenheid=$P(R,D,28)
+ If NoSa="S" Do
+ .Set R=$$SchaduwPPL(PRNr) Set:$L(R) AankPr=R
+ .Set R=^KPR(PRNr,2)
+ .If $L($P(R,D,4)) Set Korting1=$P(R,D,4),Korting2=""
+ .Set:$L($P(^KPR(PRNr,1),D,3)) Munt=$P(^KPR(PRNr,1),D,3)
+ Set:LEVNr=$$$LevBlum Korting2=$$ExtraKorting^Blum.RaadplegenProduct(PRNr)*100 ; Blum geeft vanaf 01/03/2010 extra korting voor sommige kundestammen - PV 25/02/2010
+ Set:(+Korting1=0)&&(+Korting2'=0) Korting1=Korting2,Korting2=""
+ Set MuntPar=$$MUNT^vhRtn1(Munt,,11,NoSa)
+ Set Prijs=AankPr-(AankPr*Korting1/100),Prijs=Prijs-(Prijs*Korting2/100)
+ Set R=$J(Prijs,0,2)_D_Munt_D_Eenheid_D_AankPr_D_Korting1_D_Korting2_"\\\"_MuntPar_"\\"
+ Set Eenheid=$S(Eenheid="M":1000,Eenheid="H":100,1:1),Prijs=$J(Prijs/Eenheid*MuntPar,0,4)
+ Set R=R_Eenheid_"\\"_Prijs
+ Quit R ; PPL(incl. korting, munt lev) munt, eenheid, Aankprijs( excl. korting, munt lev.), korting1, korting2, , , Pariteit, , eenheid(numeriek), , PPL(EUR incl. korting)
+
+PRIJSGEG(PRNr,NoSa,SimPPL) ; Ophalen van de prijsgegevens van een product
+ ; De SimPPL wordt genomen ter vervanging van de PPL in PRNr,
+ ; zo kan dan het product een generisch product zijn waarvoor het afgeleid product nog niet bestaat
+ ; De SimPPL moet voldoen aan de muntpariteit en de grootteorde
+ ; Output: Piece 1 = PPL
+ ; Piece 2 = aankoopmunt
+ ; Piece 3 = aankoopeenheid
+ ; Piece 4 = aankoopeenheid (numeriek)
+ ; Piece 5 = korting
+ ; Piece 6 = CifPPL
+ ; Piece 7 = firmamunt
+ ; Piece 8 = verkoopeenheid
+ ; Piece 9 = verkoopeenheid (numeriek)
+ ; Piece 10 = Cif%
+ ; Piece 11 = dekkingsbijdrage
+ ; Piece 12 = dekkingsbijdrage%
+ ; Piece 13 = vork
+ ; Piece 14 = vork%
+ ; Piece 15 = lijstprijs (per stuk)
+ ; Piece 16 = katprod industrie (Prijsklasse code)
+ ; Piece 17 = katprod handel (Prijsklasse code)
+ ; Piece 18 = katprod KS (Prijsklasse code)
+ ; Piece 19 = LEVNr
+ ; Piece 20 = CorFakt
+ New I,J,R,LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,GrtPr,PrMunt,CifPPL,LijstPr,Vork,DB,FaMunt,Decimal,EenhAank,PPL,%Korting,%Vork,%DB,%Cif,CorFakt
+ Do GetProdBasis
+ ;Set Decimal=$$MUNT^vhRtn1(FaMunt,4),%DB=$J(%DB*GrOrdNum,0,Decimal)
+ Set R=CifPPL/(100-%DB/100)*%DB/100,R=$J(R,1,4),LijstPr=CifPPL+R
+ If ($$$CheckAXFase) {
+ Set LijstPr=$$GeefLijstPrijsInAX(PRNr,$S($G(SimPPL):CifPPL,1:""))
+ }
+ Set LijstPr=LijstPr*GrOrdNum
+ Set GrtPr=LijstPr*(100-%Vork/100)
+ Set GrtPr=$J($$ROUND(GrtPr),0,2)
+ Set LijstPr=$J($$ROUND(LijstPr),0,2)
+ Set Vork=LijstPr-GrtPr/GrOrdNum
+ Set LijstPr=LijstPr/GrOrdNum
+ Set PPL=$J(PPL*EenhAank,0,4)
+ Set DB=LijstPr-CifPPL
+ Set R=PPL_D_PrMunt_D_$S(EenhAank=1:"E",EenhAank=100:"H",EenhAank=1000:"M",1:"")_D_EenhAank
+ Set R=R_D_%Korting_D_CifPPL_D_FaMunt_D_GrOrde_D_GrOrdNum_D_%Cif_D_DB_D_%DB_D_Vork_D_%Vork_D_LijstPr
+ Set R=R_D_KatPrInd_D_KatPrHan_D_KatPrKs_D_LEVNr_D_CorFakt
+ Quit R
+
+GeefLijstPrijsInAX(PRNr,SimCifPPL)
+ New Result
+ #Dim Result as AXif.Dynamics.SalesPriceIn.MessageParts.ADUSalesPriceLineOutputDC
+
+ Set Result=##class(AXimpl.Admin.VKP.SalesPriceService).%New().GeefPrijs($$$KlantLVanHoecke,PRNr,.SimCifPPL)
+ Quit Result.GrossPrice
+
+
+GETPROD(PRNr,NoSa,SimPPL) ; Ophalen productgegevens
+ New J,R,FaMunt,EenhAank,PPL,%Korting,%DB,%Cif
+ Do GetProdBasis
+ Quit
+
+GetProdBasis
+ Set:$G(NoSa)="" NoSa="N"
+ Set:($G(D)="") D = "\"
+ Set R=^KPR(PRNr,1),KatPrHan=$P(R,D,18),KatPrInd=$P(R,D,19)
+ Set R=^KPR(PRNr,2),KatPrKs=$P(R,D,24)
+ Set R="",J=$O(^KPR(PRNr,"J")) Set:$E(J)="J" R=^KPR(PRNr,J)
+ Set LEVNr=$P(R,D),PrMunt=$P(R,D,17)
+ Set EenhAank=$P(R,D,28),EenhAank=$S("E"[EenhAank:1,EenhAank="H":100,EenhAank="M":1000,1:0)
+ Set PPL=$P(R,D,19),%Korting=$P(R,D,9),%Vork=$P(R,D,27),%DB=$P(R,D,24),%Cif=$P(R,D,21)
+ Set CorFakt=$P(R,D,8)
+ Do:NoSa="S"
+ .Set R=$$SchaduwPPL(PRNr) Set:$L(R) PPL=R
+ .Set R=^KPR(PRNr,2) Set:$L($P(R,D,4)) %Korting=$P(R,D,4)
+ .Set:$L($P(R,D,5)) %Vork=$P(R,D,5) Set:$L($P(R,D,6)) %DB=$P(R,D,6) Set:$L($P(R,D,7)) %Cif=$P(R,D,7)
+ .Set:$L($P(R,D,26)) CorFakt=$P(R,D,26)
+ .Set R=^KPR(PRNr,1) Set:$L($P(R,D,3)) PrMunt=$P(R,D,3)
+ .Set:$L($P(R,D,15)) KatPrHan=$P(R,D,15) Set:$L($P(R,D,16)) KatPrInd=$P(R,D,16)
+ .Set:KatPrHan="Z" KatPrHan=""
+ .Set:KatPrInd="Z" KatPrInd=""
+ Set:$G(SimPPL) PPL=SimPPL
+ Set FaMunt=$$FADEF^vhRtn1()
+ Set PPL=PPL/EenhAank
+ If FaMunt'[PrMunt S R=$$MUNT^vhRtn1(PrMunt,,11,NoSa),PPL=PPL*R
+ Set CifPPL=PPL*(100-%Korting)/100*(100+%Cif)/100,CifPPL=$J(CifPPL,1,4) Set:'CifPPL %DB=0
+ Set R=CifPPL/(100-%DB/100)*%DB/100,R=$J(R,1,4),LijstPr=CifPPL+R
+ Set Vork=CifPPL+R*%Vork/100,Vork=$J(Vork,1,4)
+ Set GrOrde=$$GRORDE^PRODUKT2(PRNr,NoSa)
+ Set:GrOrde="" GrOrde="E"
+ Set GrOrdNum=$S(GrOrde="M":1000,GrOrde="H":100,1:1)
+ Quit
+
+CifPPL(PRNr,NoSa)
+ New I,J,R,LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,GrtPr,PrMunt,CifPPL,LijstPr,Vork,DB,FaMunt,Decimal,EenhAank,PPL,%Korting,%Vork,%DB,%Cif,CorFakt
+ Do GetProdBasis
+ Quit CifPPL
+
+BUILD() Quit VkpPr_D_Munt_D_GrOrde_D_LijstPr_D_Korting1_D_Korting2_D_$G(PrijsKl)_D_$G(KortNiv)_D_+$J(1/MuntPar,0,8)_D_GrOrde_1_D_GrOrdNum_D_1_D_AkpEUR_D_VkpEUR_D_LijstEUR
+ ; 1:prijs,2:munt,3:eenheid,4:lijstprijs,5:korting1,6:korting2,7:codex,8:katprijs,9:pariteit,10:afrondingsregel,11:eenheid(numeriek),12:round,13:aankpr(EUR),14:prijs(EUR),15:lijstprijs(EUR)
+
+CALC
+ If $L($G(KlantGrOrde)) Do
+ . Set GrOrde=KlantGrOrde
+ . Set GrOrdNum=$S(GrOrde="M":1000,GrOrde="H":100,1:1)
+
+ If (BusinessType = ##class(DOM.VKP.enu.BusinessType).B2B()) {
+ Set LijstPr=LijstPr*GrOrdNum
+ If NetBrutP Do ; Bruto
+ .Set LijstPr=$J($$ROUND(LijstPr)*MuntPar,0,2)
+ .Set VkpPr=$J(LijstPr*(100-Korting1/100)*(100-Korting2/100),0,2)
+ Else Do ; Netto
+ .Set VkpPr=LijstPr*(100-Korting1/100)*(100-Korting2/100)
+ .Set VkpPr=$J($$ROUND(VkpPr)*MuntPar,0,2)
+ .Set LijstPr=$J($$ROUND(LijstPr)*MuntPar,0,2)
+ Set AkpEUR=+$J(CifPPL,0,4)
+ Set LijstEUR=+$J(LijstPr/GrOrdNum/MuntPar,0,4)
+ Set VkpEUR=+$J(VkpPr/GrOrdNum/MuntPar,0,4)
+ If $G(%LidVan) S VkpEUR=+$J(VkpEUR*(100-%LidVan/100),0,4) ; De verkoopprijs wordt verlaagd met de commissie vergoeding van de aankoopgroep
+ } Else {
+ Set LijstEUR = +$J(LijstPr,0,4) // Lijstprijs excl BTW in euro, per eenheid
+ Set LijstPr1=LijstPr*GrOrdNum
+ Set BTWfactor = $$GETBTWFACTOR("BE", PRNr)
+ Set VkpPr1=LijstPr1*(100-Korting1/100)*(100-Korting2/100) // Verkoopprijs excl BTW in euro
+ Set VkpEURIncl=$$B2CROUND(VkpPr1*BTWfactor) // Verkoopprijs incl BTW in euro
+ Set VkpEUR=+$J(VkpEURIncl/BTWfactor/GrOrdNum,0,4) // Verkoopprijs excl BTW via terugrekenen van de inclusiefprijs, in euro, per eenheid
+ Set VkpPrIncl=$J(VkpEURIncl*MuntPar,0,2) // Verkoopprijs incl BTW in de gevraagde munt
+ Set VkpPr=VkpPrIncl/BTWfactor // Verkoopprijs excl BTW via terugrekenen van de inclusiefprijs, in de gevraagde munt
+ // Niet afgerond voor maximale precisie bij opnieuw bijtellen an de BTW
+ Set LijstPr=$J($$ROUND(LijstPr1)*MuntPar,0,2) // Lijstprijs excl BTW volgens bestaande afronding, in de gevraagde munt
+ Set AkpEUR=+$J(CifPPL,0,4) // Aankoopprijs in euro excl BTW, per eenheid
+ Set VkpEURIncl=+$J(VkpEURIncl/GrOrdNum,0,4) // Verkoopprijs incl BTW in euro, per eenheid
+ }
+ Quit
+
+KKORTING ; Korting bepalen afhankelijk van KATPrijs of Klantcodex
+ If $G(Korting1)="" Do ; Korting was niet opgegeven dus zelf bepalen
+ . Set KortRec=$$GetKorting^KORTING(KLNr,PRNr,NoSa,.RefDat,.Aantal,.LevTerm,.Optie)
+ . Set Korting1=$LI(KortRec,2),Korting2=$LI(KortRec,3),KortNiv=$LI(KortRec,6)
+ . If $L($LG(KortRec,7)) Set KlantGrOrde=$LI(KortRec,7) ; GrootteOrde wordt overruled met deze van de uitzondering
+ Else If '$G(CheckKAT) Do ; Korting was opgegeven maar controle op KATprijs moet uitgevoerd worden
+ . Set KATprijs=$$KATPrijs^KORTING(KLNr,PRNr,.NoSa)
+ . If $L(PrijsKl),"CP"[PrijsKl Set KATprijs="" ; Geen katprijs indien "C" of "P" klant
+ . Set:$L(KATprijs) Korting1=KATprijs,Korting2="",KortNiv="K"
+ Quit
+
+TranslateCodex(PRNr,Codex,NoSa,%Vork)
+ New Korting
+ Quit:Codex'?.1A Codex
+ ; Voor KS-korting E=per stuk, K=kleinverpakking
+ If "KE"[Codex,$L(Codex) Do Quit Korting
+ . New R,KSDB
+ . If '$G(PRNr) Set KSDB=20
+ . Else Do
+ . . Set R=$O(^KPR(PRNr,"J")) Set:$E(R)="J" R=^KPR(PRNr,R)
+ . . Set KSDB=$P(R,D,10)
+ . . If $G(NoSa)="S" Set R=^KPR(PRNr,2) Set:$P(R,D,10) KSDB=$P(R,D,10)
+ . Set Korting=100-(10000/(100-KSDB))/$S(Codex="K":2.5,1:1)
+ If "CP"[Codex,$L(Codex) Do Quit Korting
+ . Set Korting=$S(Codex="C":-100,1:-10)
+ . Set Korting=$$TranslateCodexBeslag^KPRIJSExeptions(PRNr, Codex, Korting)
+ . If (##class(DOM.DomeinContext).Instance().GeefProductTypeAPI().IsTAORIndelingProduct(PRNr)) Do
+ . . Set Korting = 0 // Cons en Plus staan op lijstprijs
+ . . Set Korting=$$TranslateCodexTaorIndeling^KPRIJSExeptions(PRNr, Codex, Korting)
+ . If Codex="C",$$ISORGAL^PRODUKT2(PRNr) Do
+ . . New R,%Vork,CifPPL,CorFakt,GrOrdNum,GrOrde,KatPrHan,KatPrInd,KatPrKs,LEVNr,LijstPr,PrMunt,Vork,KatPr
+ . . Do GETPROD(PRNr,NoSa)
+ . . If 'LijstPr Set Korting=0 Quit
+ . . Set R=$$PROD(PRNr,"S",,,,,NoSa) ; Berekenen Spilprijs
+ . . Set Korting=1-($P(R,D)*2/LijstPr)*100 ; Spilprijs * 2
+ . . Set Korting=$$TranslateCodexOrgalux^KPRIJSExeptions(PRNr, Codex, Korting)
+ Set:($$$CodexList'[Codex)!(Codex="") Codex="L"
+ Set:$G(%Vork)="" %Vork=$P($$PRIJSGEG(PRNr,.NoSa),D,14)
+ Quit +$J(%Vork*$P($S($$ISORGAL^ORGALUX(PRNr):$$$CodexDeelVorkOL,1:$$$CodexDeelVork),";",$F($$$CodexList,Codex)-1)/100,0,4)
+
+PKORTING ; opgevenen korting eventueel overrulen met KATprijs
+ ; KATprijs
+ Set KatPr=$S(Korting1="C":"",Korting1="P":"",'CheckKAT:"",IsKsCust:KatPrKs,KlTyp:KatPrHan,1:KatPrInd)
+ Set:$L(KatPr) Korting1=KatPr,Korting2="",KortNiv="K"
+ ; Omzetting code naar %
+ If Korting1?1A Set Korting1=$$TranslateCodex(PRNr,Korting1,.NoSa,%Vork),Korting2=""
+
+ Quit
+
+ROUND(Prijs,Eenheid=100) ; Afronden naar boven op 1 cent
+ Set Prijs=$J(Prijs*Eenheid+.499999,0,0)/Eenheid
+ Quit Prijs
+
+B2CROUND(Prijs) // Afronding voor B2C prijsberekening
+ Quit $$ROUND(Prijs,2)
+
+GETBTWFACTOR(LandVanVerkoop, PRNr) // Geeft het BTW-percentage, los van het feit of we de BTW al dan niet aanrekenen
+ // TODO In principe moet het BTW% bepaald worden uit de BTW-code van het product.
+ // TODO BTW-code omzetten naar een % via ^KBA
+ New Land
+ Set Land=$G(LandVanVerkoop)
+ Quit $S(Land?1(1"B",1"BE"):1.21,Land="NL":1.21,Land="CH":1.076,1:1)
+
+GETCUST(KLNr,NoSa,PRNr) ; Ophalen klantgegevens
+ New R,KlantId,FaMunt
+ Set:$G(NoSa)'="S" NoSa=""
+ Set FaMunt=$$FADEF^vhRtn1(),KlantId=^KK1(KLNr)
+ Set R=^KKL(KlantId,0),KlMunt=$P(R,D,11) Set:KlMunt="" KlMunt=FaMunt
+ Set R=$G(^KKL(KlantId,7))
+ If NoSa="S",$L($P(R,D,8))=3 Set KLMunt=$P(R,D,8)
+ Set KlTyp=$$IsHandel^KLANT5(KLNr)
+ Set R=^KKL(KlantId,2)
+ Set PrijsKl=$$PRIJSKL^KLANT(KLNr,PRNr,NoSa),NetBrutP=$P(R,D,5)
+ Set IsLidVan=$$GetLidVan^KF21B(KLNr),%LidVan=$LI(IsLidVan,2),IsLidVan=$LI(IsLidVan) ; %LidVan bevat de commissie % van de aankoopgroep
+ If NoSa="S",$L($P(R,D,25)) Set PrijsKl=$P(R,D,25)
+ Set IsKsCust=0 ;$$ISKLANT^KS(KLNr,,NoSa)
+ Quit
+
+ ; Controle of de prijs niet onder de aankoopprijs zit
+ ; Controle of de prijs niet boven de lijstprijs zit
+CHKPRIJS(PRNr,LijstPr,VerkPr,Eenheid,Pariteit,AankPr,WachtW,Position,TimeOut,Time,Check,KLNr)
+ New R,KortText,Ok,Klant,KlantID
+ #dim KlantID As DOM.VKP.VanHoeckeKlantID
+ #dim Klant As DOM.VKP.Klant
+ Set WachtW=$G(WachtW),Position=$G(Position),TimeOut=$G(TimeOut),Time=$G(Time)
+ Set Check=$G(Check) Set:Check="" Check="ALV"
+ Set LijstPr=LijstPr/Eenheid*Pariteit,VerkPr=VerkPr/Eenheid*Pariteit,Ok=1
+ If Check["L",'LijstPr Do
+ .Set KortText=$P(^KPR(PRNr,0),D)
+ .Set R=$$^vhTXTPOP("KPRIJS","CHK-LIJST-NUL-PRIJS","",KortText),Ok=R'="A"
+ .If Ok,$L(WachtW) Set Ok=$$ASK^vhWACHTW(WachtW,Position,TimeOut,Time)
+ Else If Check["A",'AankPr Do
+ .Set KortText=$P(^KPR(PRNr,0),D)
+ .Set R=$$^vhTXTPOP("KPRIJS","CHK-AANK-NUL-PRIJS","",KortText),Ok=R'="A"
+ .If Ok,$L(WachtW) Set Ok=$$ASK^vhWACHTW(WachtW,Position,TimeOut,Time)
+ ELse If Check["V",VerkPrLijstPr Do
+ .Set KlantID = ##class(DOM.DomeinContext).Instance().GeefLegacyPartijAPI().GeefKlantPartijID($G(KLNr,KC))
+ .Set Klant = ##class(DOM.DomeinContext).Instance().GeefVerkoopAPI().GeefKlant(KlantID)
+ .If Klant.GeefBusinessType() = ##class(DOM.VKP.enu.BusinessType).B2B() Do
+ ..Set KortText=$P(^KPR(PRNr,0),D)
+ ..Set R=$$^vhTXTPOP("KPRIJS","CHK-VERK-LIJST-PRIJS","",KortText,$J(VerkPr,0,2),$J(LijstPr,0,2)),Ok=R'="A"
+ ..If Ok,$L(WachtW) Set Ok=$$ASK^vhWACHTW(WachtW,Position,TimeOut,Time)
+ Quit Ok
+
+ ; Deze routine komt te vervallen na het afschaffen van de Prijslijst-klant
+KSKORT(PRNr,Korting,NoSa)
+ Goto KSKORT+1^KPRIJSS
+
+ ; ShaduwPPL van een product ophalen i.v.m. bouwstenen
+ ; ForceSchaduwPPL = 0 of '$G() geeft leeg indien gelijk aan de PPL (default)
+ ; = 1 geeft steeds de SchaduwPPL ook indien gelijk aan de PPL
+SchaduwPPL(PRNr,ForceSchaduwPPL)
+ New J,R,SchaduwPPL,PPL,PRBS
+
+ If ($$HasHalfFabr^PRBS(PRNr)||($$$ProductGet(PRNr,$$$LinkType)="S")),'$$ExcludeSchaduwPPL(PRNr) Do ; Halfabrikaat of Stock over kinderen EXEPT 358M5002SF *7587*
+ . New GrOrde
+ . Do CALC^PRBS(PRNr,.PRBS,,,,"S") ; recursie mogelijk
+ . Set SchaduwPPL=$P(PRBS,D)
+ . Set J=$O(^KPR(PRNr,"J")),R=^(J),GrOrde=$P(R,D,28)
+ . Set GrOrde=$S(GrOrde="M":1000,GrOrde="H":100,1:1)
+ . Set SchaduwPPL=+$J(SchaduwPPL*GrOrde,0,2)
+ Else Set R=^KPR(PRNr,2),SchaduwPPL=$P(R,D,3)
+ Do:'$G(ForceSchaduwPPL) ; Leeg indien SchaduwPPL = PPL
+ . Set J=$O(^KPR(PRNr,"J")),R=^(J),PPL=$P(R,D,19)
+ . Set:+PPL=+SchaduwPPL SchaduwPPL=""
+ Quit SchaduwPPL
+
+ExcludeSchaduwPPL(PRNr)
+ Quit:(PRNr?1(1"355494",1"355495")) 1
+ ;Quit:($P($$GENTYP^HAD(PRNr),"\")="KAD") 1 ; PV 09/09/10 op vraag van JB
+ Quit 0 ; include
+
+SchaduwPPLRecurse(PRNr,ForceSchaduwPPL)
+ New J,R,SchaduwPPL,PPL,PRBS
+ If ($$HasHalfFabr^PRBS(PRNr)||($$$ProductGet(PRNr,$$$LinkType)="S")) Do ; Halfabrikaat of Stock over kinderen
+ . If '$D(%SchaduwPPLRecurse(PRNr)) Do
+ . . New GrOrde,StartRecurse
+ . . Set:'$D(%SchaduwPPLRecurse) %SchaduwPPLRecurse=PRNr
+ . . Set %SchaduwPPLRecurse(PRNr)=""
+ . . Set:StartRecurse %SchaduwPPLRecurse=PRNr ; Start product
+ . . Do CALC^PRBS(PRNr,.PRBS,,,,"S")
+ . . Kill %SchaduwPPLRecurse(PRNr)
+ . . Kill:%SchaduwPPLRecurse=PRNr %SchaduwPPLRecurse ; Start product
+ . . Set SchaduwPPL=$P(PRBS,D)
+ . . Set J=$O(^KPR(PRNr,"J")),R=^(J),GrOrde=$P(R,D,28)
+ . . Set GrOrde=$S(GrOrde="M":1000,GrOrde="H":100,1:1)
+ . . Set SchaduwPPL=+$J(SchaduwPPL*GrOrde,0,2)
+ . Else Do ; Recursie probleem
+ . . Set R=^KPR(PRNr,2),SchaduwPPL=$P(R,D,3) ; best mogelijke waarde
+ . . ; Mail versturen van de fout
+ . . ; Hoofdnood is start product
+ . . Set Body=$$ArrayToText^vhLib("%SchaduwPPLRecurse")
+ . . Set From="System@vanhoecke.be"
+ . . Set Subj="KPRIJS - recursie probleem in bouwstenen"
+ . . Set To=$LB("pv@vanhoecke.be")
+ . . Do SendMiniMail^vhLib(From,To,Subj,Body,,,,,)
+ Else Set R=^KPR(PRNr,2),SchaduwPPL=$P(R,D,3)
+ Do:'$G(ForceSchaduwPPL) ; Leeg indien SchaduwPPL = PPL
+ . Set J=$O(^KPR(PRNr,"J")),R=^(J),PPL=$P(R,D,19)
+ . Set:+PPL=+SchaduwPPL SchaduwPPL=""
+ Quit SchaduwPPL
Index: AXimpl/Dynamics/SalesPriceOut/SalesPriceService.cls.xml
===================================================================
diff -u -r46497 -r48131
--- AXimpl/Dynamics/SalesPriceOut/SalesPriceService.cls.xml (.../SalesPriceService.cls.xml) (revision 46497)
+++ AXimpl/Dynamics/SalesPriceOut/SalesPriceService.cls.xml (.../SalesPriceService.cls.xml) (revision 48131)
@@ -39,7 +39,8 @@
%Status
1
+Voor 1 product:
+
Set Result = SalesPriceService.GeefPrice(KLNr, PRNr, optionele CifPPL)
+
Voor meerdere producten via iterator:
+
Do SalesPriceService.Initialisatie(KLNr)
+
Do SalesPriceService.VoegToe(PRNr1, optionele CifPPL)
+
Do SalesPriceService.VoegToe(PRNr2, optionele CifPPL)
+
Do SalesPriceService.VoerUit()
+
Set iterator=SalesPriceService.GeefResultaatIterator
+
+
Voor meerdere producten via het onthouden van een reference:
+
Do SalesPriceService.Initialisatie(KLNr)
+
Set Reference1=SalesPriceService.VoegToe(PRNr1, optionele CifPPL)
+
Set Reference2=SalesPriceService.VoegToe(PRNr2, optionele CifPPL)
+
Do SalesPriceService.VoerUit()
+
Do SalesPriceService.GeefResultaat(Reference1)
+
Do SalesPriceService.GeefResultaat(Reference2)]]>
TECH.Mockable
+
+ 1
+d rc.ZetApplicatie("AX_FASE")
+w ci.GeefString("AX_FASE") -> 2A
+
+*/
+]]>
+
+
AXimpl.MessageManager
1
@@ -13,11 +50,29 @@
1
-
-DOM.PM.ProductAPI
+
+AX.Uitgaand.PM.impl.Convertor.Sopr.ProductConvertor
1
+
+AXif.Dynamics.SalesPriceOut.MessageParts.ADUSalesPriceHeaderInputDC
+1
+
+
+
+AXif.Dynamics.SalesPriceIn.MessageParts.ADUSalesPriceHeaderOutputDC
+1
+
+
+
+KlantNummer:%String,ProductNummer:%String,PrijsRec:%String
+
+
+
SalesPriceService:AXimpl.Dynamics.SalesPriceOut.SalesPriceService="",MessageManager:AXimpl.MessageManager="",ProductApi:DOM.PM.ProductAPI
1
@@ -26,53 +81,115 @@
1
-
-KlantNummer:%String,ProductNummer:%String,Record:%String
+
+KlantNummer:%String
+
+
+
+
+ProductNummer:%String,CifPPL:%String=""
%String
-
+
+Reference
+AXif.Dynamics.SalesPriceIn.MessageParts.ADUSalesPriceLineOutputDC
+
+
+
+
+
+
+
+
+AXif.Dynamics.SalesPriceIn.MessageParts.ADUSalesPriceHeaderOutputDC
+
+
+
KlantNummer:%String,ProductNummer:%String,CifPPL:%String
AXif.Dynamics.SalesPriceIn.MessageParts.ADUSalesPriceHeaderOutputDC
-
-MessageId:%String,ProductNummer:%String,CifPPL:%String
+
+PRNr:%String
1
-AXif.Dynamics.SalesPriceOut.MessageParts.ADUSalesPriceLineInputDC
+%String
+
+
+KLNr:%String
+1
+%String
+
+
+
+
+KLNr:%String
+%String
+
+
Index: KPRIJS.mac.rou
===================================================================
diff -u -r47864 -r48131
--- KPRIJS.mac.rou (.../KPRIJS.mac.rou) (revision 47864)
+++ KPRIJS.mac.rou (.../KPRIJS.mac.rou) (revision 48131)
@@ -1,8 +1,10 @@
KPRIJS ;Produkt prijs
-
+#define CheckAXFase (##class(TECH.Config.ConfigMgr).Instance().GetString("AX_SalesPriceOut_Fase") = "2A")
+#define MaatwerkKlantenMetWildcardUitz ";19485;14604;"
#include vhLib.Macro
#include Prod.Product
#include BL.Derde.LevSpecifiek
+#include BL.Derde.KlantSpecifiek
#define CodexList "LRSBG"
#define CodexDeelVork "0;25;50;75;100"
#define CodexDeelVorkOL "0;27.27272727;45.45454545;72.72727272;100"
@@ -92,28 +94,56 @@
// VHIP907: Verkoopprijzen
// VHIP907->MVI: voorlopig laat ik alles invullen in fase 2a en overschrijf ik enkel de waarden die ax teruggeeft
- New Fase, SalesPriceService, Output, OutputLine
- Set Fase = ##class(TECH.Config.ConfigMgr).Instance().GetString("AX_SalesPriceOut_Fase")
+ New SalesPriceService, Output, OutputLine
- If (Fase = "2A") {
- Set SalesPriceService = ##class(AXimpl.Admin.VKP.SalesPriceService).%New()
- Set Output = SalesPriceService.GeefPrijs(KLNr, PRNr, CifPPL)
- Set OutputLine = Output.Lines.GetAt(1)
+ If $$IsAX(KLNr,PRNr) {
+ Set SalesPriceService = ##class(AXimpl.Admin.VKP.SalesPriceService).%New()
+ #Dim Result as AXif.Dynamics.SalesPriceIn.MessageParts.ADUSalesPriceLineOutputDC
+ Set Result = SalesPriceService.GeefPrijs(KLNr, PRNr, $S($G(SimPPL):CifPPL,1:""))
- Set VkpEUR = OutputLine.Price
+ Set VkpEUR = Result.Price
+ Set VkpPr = VkpEUR
+ Set LijstEUR = Result.GrossPrice
+ Set LijstPr = LijstEUR
+ Set Korting2=0
+ Set Korting1=(VkpEUR/LijstEUR-1)*100
}
Quit $$BUILD
+
+ ; Build = VkpPr_D_Munt_D_GrOrde_D_LijstPr_D_Korting1_D_Korting2_D_$G(PrijsKl)_D_$G(KortNiv)_D_+$J(1/MuntPar,0,8)_D_GrOrde_1_D_GrOrdNum_D_1_D_AkpEUR_D_VkpEUR_D_LijstEUR
+ ; 1:prijs,2:munt,3:eenheid,4:lijstprijs,5:korting1,6:korting2,7:codex,8:katprijs,9:pariteit,10:afrondingsregel,11:eenheid(numeriek),12:round,13:aankpr(EUR),14:prijs(EUR),15:lijstprijs(EUR)
+
+
// Set twee kortingen om van in % (*100) naar ��n korting in %
OneKorting(Korting1,Korting2)
Quit (1-((1-(Korting1/100))*(1-(Korting2/100))))*100
-
+
+IsAX(KLNr,PRNr)
+ New Fase,IsAX
+ Set IsAX=0
+ If ($$$CheckAXFase) {
+ Set IsAX=1
+ If $$$MaatwerkKlantenMetWildcardUitz[(";"&KLNr&";") {
+ If PRNr,$$$PRGet($$$LeveranciersNr)=$$$LevHalux {
+ Set IsAX=0
+ }
+ }
+ }
+ ;w "KLNr",KLNr," PRNr",PRNr," = ",IsAX,!
+ Quit IsAX
+
PRODINCLBTW(PRNr,Land,KlMunt,Korting1,Korting2,NetBrutP,KlTyp,NoSa,SimPPL,KlantGrOrde,CheckKAT,BusinessType)
New R
Set R = $$PROD(.PRNr,.Korting1,.Korting2,.KlMunt,.NetBrutP,.KlTyp,.NoSa,.SimPPL,.KlantGrOrde,.CheckKAT,.BusinessType)
Set $P(R,"\") = $P(R,"\")*$$GETBTWFACTOR(.Land)
Quit R
+ProdViaCodex(PRNr,Codex)
+ New KLNr
+ Set KLNr=$Case(Codex,"L":6819,"R":6820,"S":6821,"B":6822,"G":29391,"P":13854,"C":15876)
+ Quit:'$D(^KK1(KLNr)) ""
+ Quit $$KLANTPR(KLNr,PRNr)
PROD(PRNr,Korting1,Korting2,KlMunt,NetBrutP,KlTyp,NoSa,SimPPL,KlantGrOrde,CheckKAT,BusinessType)
; KlTyp 0=Industrie, 1=handel, P=prijslijst
@@ -123,6 +153,9 @@
New R,KatPr,CorFakt,KatProd,IsKatPr,FaMunt,Munt,MuntPar,IsKsCust,PrijsKl,VkpPr,KortNiv,AkpEUR,VkpEUR,LijstEUR,LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,PrMunt,CifPPL,LijstPr,Vork,%Vork
New BTWfactor,LijstPr1,VkpEURIncl,VkpPr1,VkpPrIncl
+ If ($G(Korting1)'="")&&("CPLRSBG"[Korting1) Quit $$ProdViaCodex(PRNr,Korting1)
+
+
; Opgezet via GETPROD : LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,PrMunt,CifPPL,LijstPr,Vork,%Vork
Set:$Get(BusinessType)="" BusinessType = ##class(DOM.VKP.enu.BusinessType).B2B()
@@ -134,6 +167,9 @@
Set KlTyp=$G(KlTyp),IsKsCust=0 ;KlTyp="P"
Set:$G(NoSa)'="S" NoSa=""
Do GETPROD(PRNr,NoSa)
+ If ($$$CheckAXFase) {
+ Set LijstPr=$$GeefLijstPrijsInAX(PRNr,$S($G(SimPPL):SimPPL,1:""))
+ }
Set Munt=KlMunt
If KlMunt="MTL" Do ; Munt leverancier
.Set Munt=PrMunt
@@ -192,6 +228,9 @@
Do GetProdBasis
;Set Decimal=$$MUNT^vhRtn1(FaMunt,4),%DB=$J(%DB*GrOrdNum,0,Decimal)
Set R=CifPPL/(100-%DB/100)*%DB/100,R=$J(R,1,4),LijstPr=CifPPL+R
+ If ($$$CheckAXFase) {
+ Set LijstPr=$$GeefLijstPrijsInAX(PRNr,$S($G(SimPPL):CifPPL,1:""))
+ }
Set LijstPr=LijstPr*GrOrdNum
Set GrtPr=LijstPr*(100-%Vork/100)
Set GrtPr=$J($$ROUND(GrtPr),0,2)
@@ -203,9 +242,16 @@
Set R=PPL_D_PrMunt_D_$S(EenhAank=1:"E",EenhAank=100:"H",EenhAank=1000:"M",1:"")_D_EenhAank
Set R=R_D_%Korting_D_CifPPL_D_FaMunt_D_GrOrde_D_GrOrdNum_D_%Cif_D_DB_D_%DB_D_Vork_D_%Vork_D_LijstPr
Set R=R_D_KatPrInd_D_KatPrHan_D_KatPrKs_D_LEVNr_D_CorFakt
- Set R=##class(AXimpl.Admin.Context).Instance().GeefSalesPriceService().ModifyPrijsGeg($G(KLNr),$G(PRNr),R)
Quit R
+GeefLijstPrijsInAX(PRNr,SimCifPPL)
+ New Result
+ #Dim Result as AXif.Dynamics.SalesPriceIn.MessageParts.ADUSalesPriceLineOutputDC
+
+ Set Result=##class(AXimpl.Admin.VKP.SalesPriceService).%New().GeefPrijs($$$KlantLVanHoecke,PRNr,.SimCifPPL)
+ Quit Result.GrossPrice
+
+
GETPROD(PRNr,NoSa,SimPPL) ; Ophalen productgegevens
New J,R,FaMunt,EenhAank,PPL,%Korting,%DB,%Cif
Do GetProdBasis
@@ -243,7 +289,9 @@
Quit
CifPPL(PRNr,NoSa)
- Quit $P($$PRIJSGEG(PRNr,.NoSa),D,6)
+ New I,J,R,LEVNr,KatPrHan,KatPrInd,KatPrKs,GrOrde,GrOrdNum,GrtPr,PrMunt,CifPPL,LijstPr,Vork,DB,FaMunt,Decimal,EenhAank,PPL,%Korting,%Vork,%DB,%Cif,CorFakt
+ Do GetProdBasis
+ Quit CifPPL
BUILD() Quit VkpPr_D_Munt_D_GrOrde_D_LijstPr_D_Korting1_D_Korting2_D_$G(PrijsKl)_D_$G(KortNiv)_D_+$J(1/MuntPar,0,8)_D_GrOrde_1_D_GrOrdNum_D_1_D_AkpEUR_D_VkpEUR_D_LijstEUR
; 1:prijs,2:munt,3:eenheid,4:lijstprijs,5:korting1,6:korting2,7:codex,8:katprijs,9:pariteit,10:afrondingsregel,11:eenheid(numeriek),12:round,13:aankpr(EUR),14:prijs(EUR),15:lijstprijs(EUR)
@@ -450,24 +498,3 @@
. Set J=$O(^KPR(PRNr,"J")),R=^(J),PPL=$P(R,D,19)
. Set:+PPL=+SchaduwPPL SchaduwPPL=""
Quit SchaduwPPL
-
-
-HeeftNietAlleenKinderen(PRNr,NoSa)
- New HeeftNietAlleenKinderen,BSKey,BSNode
-
- Quit:($$$ProductGet(PRNr,$$$LinkType)="S") 1 ; stock over kinderen -> de kinderen bepalen de prijs
-
- If $G(NoSa)="S" Do
- . Set BSNode="BSS"
- . Set:'$D(^PRBS(BSNode,PRNr)) BSNode="BS"
- Else Do
- . Set BSNode="BS"
-
- ; als er alleen kinderen zijn dan gaat het over een ministuck liste en dan bepaald de moeder de prijs en niet de som van de bouwstenen
- Set HeeftNietAlleenKinderen=0
- Set BSKey=""
- For Set BSKey=$O(^PRBS(BSNode,PRNr,BSKey)) Quit:BSKey="" Do Quit:HeeftNietAlleenKinderen
- . Set HeeftNietAlleenKinderen=$P(^PRBS(BSNode,PRNr,BSKey),"\",3)?1(1"H",1"S",1"T")
- Quit HeeftNietAlleenKinderen
-
-