Index: KPRIJS.mac.rou =================================================================== diff -u -r49400 -r50831 --- KPRIJS.mac.rou (.../KPRIJS.mac.rou) (revision 49400) +++ KPRIJS.mac.rou (.../KPRIJS.mac.rou) (revision 50831) @@ -73,7 +73,7 @@ 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,VkpEURAX,LijstEURAX,InclBTW,PriceUnit + New BTWfactor,LijstPr1,VkpEURIncl,VkpPr1,VkpPrIncl,VkpEURAX,LijstEURAX,InclBTW,PriceUnit,CachePPL ; 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 @@ -90,80 +90,67 @@ 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 - If $$IsAX(KLNr, PRNr) { - new LegacyKPRIJS, SimPplVoorAxPrijsCache, AantalVoorAxPrijsCache, Minuten - new AxPrijsCache, AxPrijsCacheRepository, AxKlantId, SalesPriceService, Result - - #dim LegacyKPRIJS As BL.Legacy.KPRIJS = ##class(BL.Legacy.KPRIJS).%New() - #dim SimPplVoorAxPrijsCache As %String = LegacyKPRIJS.GeefWaardeVoorAxPrijsCache(.SimPPL, "*") - #dim AantalVoorAxPrijsCache As %String = LegacyKPRIJS.GeefWaardeVoorAxPrijsCache(.Aantal, "*") - #dim Minuten As %Integer = LegacyKPRIJS.GeefMinuten() - - #dim AxPrijsCacheRepository As BL.Legacy.KPRIJS.AxPrijsCacheRepository = ##class(BL.Legacy.KPRIJS.AxPrijsCacheRepository).%New() - #dim AxPrijsCache As BL.Legacy.KPRIJS.AxPrijsCache = AxPrijsCacheRepository.GeefAxPrijsCache(KLNr, PRNr, SimPplVoorAxPrijsCache, AantalVoorAxPrijsCache) - #dim AxKlantId As %String = ##class(AXimpl.Utils.KlantIdConverter).%New().ConvertToAx(KlantID, ##class(DOM.common.enu.Personality).VanHoecke()) - #dim SalesPriceService As AXimpl.Admin.VKP.SalesPriceService = ##class(AXimpl.Admin.VKP.SalesPriceService).%New() - #dim Result As AXif.Dynamics.SalesPriceIn.MessageParts.ADUSalesPriceHeaderOutputDC = SalesPriceService.GeefPrijs(AxKlantId, PRNr, LegacyKPRIJS.GeefWaardeVoorAxPrijsCache(.SimPPL)) - - If ((Minuten - 600) > AxPrijsCache.Minuten) { - Try { - new ResultLine - - #dim ResultLine As AXif.Dynamics.SalesPriceIn.MessageParts.ADUSalesPriceLineOutputDC = Result.Lines.GetAt(1) - - Set AxPrijsCache.AxVerkoopPrijsEuro = ResultLine.Price - Set AxPrijsCache.AxLijstPrijsEuro = ResultLine.GrossPrice - Set AxPrijsCache.PrijsEenheid = +ResultLine.PriceUnit - Set AxPrijsCache.InclusiefBtw = Result.InclVAT - - Do AxPrijsCacheRepository.BewaarAxPrijsCache(AxPrijsCache, Minuten) - } Catch { - New Exception - - Set AxPrijsCache.AxVerkoopPrijsEuro = 99999 - Set AxPrijsCache.AxLijstPrijsEuro = 99999 - Set AxPrijsCache.PrijsEenheid = 1 - Set AxPrijsCache.InclusiefBtw = $$$False - - #dim Exception As TECH.Exceptions.Exception = ##class(TECH.ExceptionHandler).Catch() - - Do ##class(vhLib.Logger).LogExceptie(Exception) - } - } - - If ((AxPrijsCache.AxVerkoopPrijsEuro > 0) && $$$Not(AxPrijsCache.AxVerkoopPrijsEuro = 99999)) { - Set VkpEUR = AxPrijsCache.AxVerkoopPrijsEuro - Set LijstEUR = AxPrijsCache.AxLijstPrijsEuro - - If (AxPrijsCache.InclusiefBtw) { - Set VkpEUR = +$Justify(VkpEUR / 1.21, 0, 10) + If $$IsAX(KLNr,PRNr) { + Set CachePPL=$S($G(SimPPL):SimPPL,1:$$CifPPL(PRNr)) + Set CacheMinuten = $ListGet($Get(^AXPrijsCache(KLNr,PRNr,+CachePPL,$S($G(Aantal):Aantal,1:"*"))),1) + + If (($$GeefMinuten($Horolog)-600) < CacheMinuten) { + Set lb=^AXPrijsCache(KLNr,PRNr,+CachePPL,$S($G(Aantal):Aantal,1:"*")) + Set VkpEURAX=$LIST(lb,2) + Set LijstEURAX=$LI(lb,3) + Set PriceUnit=$LI(lb,4) + Set InclBTW=$LI(lb,5) + } Else { + Try + { + New SalesPriceService, Result + 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):SimPPL,1:""),.Aantal) + Set VkpEURAX = Result.Price + Set LijstEURAX = Result.GrossPrice + Set PriceUnit=+Result.PriceUnit + Set InclBTW=SalesPriceService.PrijzenInclBTW() + Set ^AXPrijsCache(KLNr,PRNr,+CachePPL,$S($G(Aantal):Aantal,1:"*"))=$LB($$GeefMinuten($H),VkpEURAX,LijstEURAX,PriceUnit,InclBTW) + } Catch { + Set (VkpEURAX,LijstEURAX)=99999 + Set PriceUnit=1 + Set InclBTW=0 + #dim Exception As TECH.Exceptions.Exception = ##class(TECH.ExceptionHandler).Catch() + do ##class(vhLib.Logger).LogExceptie(Exception) } - + } + + If (VkpEURAX>0)&&(VkpEURAX'=99999) + { + Set VkpEUR=VkpEURAX + Set LijstEUR=LijstEURAX + If InclBTW + { + Set VkpEUR=+$J(VkpEUR/1.21,0,10) + } Set VkpPr = VkpEUR Set LijstPr = LijstEUR - - If (AxPrijsCache.PrijsEenheid > 1) { - Set VkpEUR = VkpEUR / AxPrijsCache.PrijsEenheid - Set LijstEUR = LijstEUR / AxPrijsCache.PrijsEenheid + If PriceUnit>1 + { + Set VkpEUR=VkpEUR/PriceUnit + Set LijstEUR=LijstEUR/PriceUnit } - - Set GrOrde = $Case(AxPrijsCache.PrijsEenheid, 100:"H", :"E") - Set GrOrdNum = $Case(GrOrde, "H":100, :1) + Set GrOrde=$Case(PriceUnit,100:"H",:"E") + Set GrOrdNum=$Case(GrOrde,"H":100,:1) - Set Korting2 = 0 - If (+LijstEUR = 0) { - Set Korting1 = 0 - } Else { - Set Korting1 = (1 - (VkpEUR / LijstEUR)) * 100 + Set Korting2=0 + If +LijstEUR=0 { + Set Korting1=0 + } else { + Set Korting1=(1-(VkpEUR/LijstEUR))*100 } - } Else { - Do ##class(vhLib.Logger).%New().Debug("Prijsberekening AX Fallback", "Klant: '" _ KLNr _ "' Product: '" _ PRNr _ "' SimPPL: '" _ $Get(SimPPL) _ "' -> Prijs: " _ AxPrijsCache.AxVerkoopPrijsEuro _ " -> fallback naar cache berekening '" _ VkpEUR _ "'") - } + } else { + Do:(+VkpEUR>0)||(+VkpEURAX>0) ##class(vhLib.Logger).%New().Warning("Prijsberekening AX Fallback","Klant : '"_KLNr_"' Product : '"_PRNr_"' SimPPL : '"_$G(SimPPL)_"' -> Prijs : "_VkpEURAX_" -> fallback naar cache berekening '"_VkpEUR_"'") + } } - 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 @@ -172,7 +159,14 @@ { Quit $$$MaatwerkKlantenMetWildcardUitz[(";"_KLNr_";") } + +ProdViaAdmin(PRNr) + Quit:PRNr=1732579 0 + Quit:$E($P(^KPR(PRNr,2),"\",25))="6" 0 ; kind producten + Quit:$P(^KPR(PRNr,1),"\",25)=1 0 ; Niet actief + Quit 1 + GeefMinuten(DatumEnTijd) Quit $P(DatumEnTijd,".")*24*60+($P(DatumEnTijd,".",2)\60) @@ -187,7 +181,7 @@ IsAX(KLNr,PRNr) New Fase,IsAX Set IsAX=0 - If ($$$CheckAXFase) { + If ($$$CheckAXFase)&&$$ProdViaAdmin(PRNr) { Set IsAX=1 If $$PrijzenViaAdmin(KLNr) { If PRNr,$$$PRGet($$$LeveranciersNr)=$$$LevHalux { @@ -199,19 +193,16 @@ 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 + New KLNr + Set KLNr=$Case(Codex,"L":$$$CKlantL,"R":$$$CKlantR,"S":$$$CKlantS,"B":$$$CKlantB,"G":$$$CKlantG,"P":$$$CKlantP,"C":$$$CKlantCExcl) - Set KLNr=$Case(Codex,"L":$$$CKlantL,"R":$$$CKlantR,"S":$$$CKlantS,"B":$$$CKlantB,"G":$$$CKlantG,"P":$$$CKlantP,"C":$$$CKlantCExcl) - - Quit:'$Data(^KK1(KLNr)) "" - Quit $$KLANTPR(KLNr,PRNr) - + 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 @@ -222,6 +213,8 @@ New BTWfactor,LijstPr1,VkpEURIncl,VkpPr1,VkpPrIncl If $$$CheckAXFase&&($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() @@ -234,7 +227,7 @@ Set:$G(NoSa)'="S" NoSa="" Do GETPROD(PRNr,NoSa) If ($$$CheckAXFase) { - Set LijstPr=$$GeefLijstPrijsInAX(PRNr,$S($G(SimPPL):SimPPL,1:"")) + Set LijstPr=$$GeefLijstPrijsInAX(PRNr,$S($G(SimPPL):SimPPL,1:""),LijstPr) } Set Munt=KlMunt If KlMunt="MTL" Do ; Munt leverancier @@ -295,7 +288,7 @@ ;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=$$GeefLijstPrijsInAX(PRNr,$S($G(SimPPL):CifPPL,1:""),LijstPr) } Set LijstPr=LijstPr*GrOrdNum Set GrtPr=LijstPr*(100-%Vork/100) @@ -310,13 +303,59 @@ Set R=R_D_KatPrInd_D_KatPrHan_D_KatPrKs_D_LEVNr_D_CorFakt Quit R -GeefLijstPrijsInAX(PRNr,SimCifPPL) - New Result +GeefLijstPrijsInAX(PRNr,SimCifPPL,AdminLijstPr) + New Result,CachePPL,VkpEURAX, VkpEUR,LijstEURAX,PriceUnit,IncBTW,KLNr #Dim Result as AXif.Dynamics.SalesPriceIn.MessageParts.ADUSalesPriceLineOutputDC - - Set Result=##class(AXimpl.Admin.VKP.SalesPriceService).%New().GeefPrijs($$$KlantLVanHoecke,PRNr,.SimCifPPL) - Quit Result.GrossPrice + Quit:$$ProdViaAdmin(PRNr) AdminLijstPr + Set KLNr=$$$CKlantL + + Set CachePPL=$S($G(SimPPL):SimPPL,1:$$CifPPL(PRNr)) + Set CacheMinuten = $ListGet($Get(^AXPrijsCache(KLNr,PRNr,+CachePPL,"*")),1) + If (($$GeefMinuten($Horolog)-600) < CacheMinuten) { + Set lb=^AXPrijsCache(KLNr,PRNr,+CachePPL,"*") + Set VkpEURAX=$LI(lb,2) + Set PriceUnit=$LI(lb,4) + Set InclBTW=$LI(lb,5) + } Else { + Try + { + New SalesPriceService, Result + 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):SimPPL,1:""),.Aantal) + Set VkpEURAX = Result.Price + Set LijstEURAX = Result.GrossPrice + Set PriceUnit=+Result.PriceUnit + Set InclBTW=SalesPriceService.PrijzenInclBTW() + Set ^AXPrijsCache(KLNr,PRNr,+CachePPL,"*")=$LB($$GeefMinuten($H),VkpEURAX,LijstEURAX,PriceUnit,InclBTW,"LP") + } Catch { + Set (VkpEURAX)=99999 + Set PriceUnit=1 + Set InclBTW=0 + #dim Exception As TECH.Exceptions.Exception = ##class(TECH.ExceptionHandler).Catch() + do ##class(vhLib.Logger).LogExceptie(Exception) + } + } + + If (VkpEURAX>0)&&(VkpEURAX'=99999) + { + Set VkpEUR=VkpEURAX + If InclBTW + { + Set VkpEUR=+$J(VkpEUR/1.21,0,10) + } + If PriceUnit>1 + { + Set VkpEUR=VkpEUR/PriceUnit + } + } else { + Set VkpEUR=AdminLijstPr + do:(+VkpEUR>0)||(+VkpEURAX>0) ##class(vhLib.Logger).%New().Warning("Prijsberekening AX Fallback","LIJSTPRIJS Klant : '"_KLNr_"' Product : '"_PRNr_"' SimPPL : '"_$G(SimPPL)_"' -> Prijs : "_VkpEURAX_" -> fallback naar cache berekening '"_$G(AdminLijstPr)_"'") + } + Quit VkpEUR + + PRIJSGEGZONDERAX(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 @@ -366,14 +405,9 @@ GetProdBasis Set:$G(NoSa)="" NoSa="N" Set:($G(D)="") D = "\" - Set R = ^KPR(PRNr,1) - Set KatPrHan = $Piece(R, D, 18) - Set KatPrInd = $Piece(R, D, 19) - Set R = ^KPR(PRNr, 2) - Set KatPrKs = $Piece(R, D, 24) - Set R = "" - Set J = $Order(^KPR(PRNr, "J")) - Set:$E(J)="J" R=^KPR(PRNr,J) + 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) @@ -392,9 +426,7 @@ 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 - Set R = $Justify(R,1,4) - Set LijstPr = CifPPL + R + 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" @@ -413,7 +445,7 @@ 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 @@ -426,18 +458,18 @@ 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 + 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 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 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 }