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 - -