#include PRGACNTs /* // +-+-+-+-+-+-+-+-+-+-+-+-+ // + TBX - TandemBox + // +-+-+-+-+-+-+-+-+-+-+-+-+ // // [ DEEL 2 ] */ WSTB ; This is a test method New WS,WSLn Set WS=##class(WS.TBX.Order).%New() Set WSLn=##class(WS.TBX.EM.OrderLijn).%New() Set WSLn.ItemKL="MG" ;"IN" ; Set WSLn.ItemLT="D" Do WS.Lijnen.SetAt(WSLn,1) Do WS.CalcPricesWeb() Set WS="" ; Close Quit BuildFromWS ; Parameters: WS,Opties Quit:('WS) Quit:(WS.Lijnen.Count()="") d TTraceW("WS: Begin BuildFromWS - ID="_WS.mID) ;d TTraceW("WS: Opties:"_$G(Opties)_" condition No Prices calc:"_($G(Opties)'["PRS=1;")) new sDbg Set sDbg="" New OrderDesignID,Result,Templ,arKDtl,lbDomLU,sDomVERW,sDomKLNr New arValidWS Set lbDomLU=WS.DomainLookUp(WS.WebDomain,$LB("VERW","KLNR")) ; Set TBXContext=##class(APPS.TBXWeb.TBXContext).InitFromHttpRequest() Set sDomVERW=$LG(lbDomLU,1) Set sDomKLNr=$LG(lbDomLU,2) Set Result=$$bfwTemplateViaLadeKL(..GetKlantBeperkDesign(WS.KLNummer,sDomVERW)) ; (.Templ) If '$G(Templ) Do Quit . Do bfwMarkAllError . d TTraceW(Result_" "_sDbg) ; Else : d DbgAdd("Templ",Templ) ;d DbgAdd("Templ.ProdID",Templ.ProductGetObjectId()) ;d TTrace("WSOrd= "_$C(13,10)_$$ExportXMLGAProd^WV(Templ.Product,"No Product")) Do bfwCalcWSLijnen d TTraceW("Result=OK: "_sDbg) ;d WL^vhDBG("Tijd einde BldFrWS : "_$$RestartTimer^vhLib) Quit bfwTemplateViaLadeKL(BeperkDesignCode) ; (Templ) New klID,lbTPs,TPCode,TemplateID,blnCheckDesign,OrderDesignID Set klID=WS.Lijnen.GetNext("").ItemKL Set:(klID="BE") klID="BA" d DbgAdd("KL",klID) Set OrderDesignID=WS.Lijnen.GetNext("").ItemDS ; Get design from first line - it shoud be the same for all other If OrderDesignID="" Do . Set blnCheckDesign=(BeperkDesignCode="") . Set OrderDesignID=..DesignFromLadeKleur(WSLn.ItemKL,"") Else If $L(BeperkDesignCode) Do ; !!! TEMPORARY PATCH for F-Design !!! (added by WimV on 13/03/2009) . Set blnCheckDesign=0 . Set OrderDesignID=..DesignFromLadeKleur(klID,BeperkDesignCode) Else Do . Set blnCheckDesign=0 Quit:(OrderDesignID="") "Geen Design gevonden" d DbgAdd("DS",OrderDesignID) ; Alleen "Standaard Design" toegelaten. Quit:(blnCheckDesign)&&($LG(..BTDep("TBDesign","TBDesignCode",OrderDesignID),1)'?1(1"S",1"B")) "Geen Standaard Design" Set lbTPs=..TPCodesFromDesign(OrderDesignID) Set TPCode=$LG(lbTPs,1) Quit:(TPCode="") "TemplateCode niet gevonden" d DbgAdd("TPCode",TPCode) Set TemplateID=$LG(##class(Prod.GAData.Template).IDsViaCode(TPCode),1) Quit:(TemplateID="") "TemplateID niet gevonden" d DbgAdd("TemplateID",TemplateID) Set Templ=##class(Prod.GAData.Template).%OpenId(TemplateID) Quit "" bfwMarkAllError New i Set i="" For Set WSLn=WS.Lijnen.GetNext(.i) Quit:(i="") Do . Set WSLn.KostPrijs="ERROR" Quit bfwCalcWSLijnen New Prod,i,arValidPR,Som,SomAant,WSLn,OrdStdL,arWSStdL,KLReductie,KLKorting,KLNrProd,GeldigeActiesVoorOrder ;n arORefs Do bfwCalcProductsInit Set i="" For Set WSLn=WS.Lijnen.GetNext(.i) Quit:(i="") Do . ;do ChronoReset^vhLib() . Set Prod=$$bfwProductFromWSLijn(WSLn,i,WS.NietMeeleveren) . Quit:(Prod="") . Do bfwCalcProduct(Prod,i,WS.NietMeeleveren,GeldigeActiesVoorOrder) . ;d WL^vhDBG("Tijd voor CalcProduct "_i_$C(9)_" : "_$$ChronoStepFMT^vhLib) . Set Prod="" ; Close Prod anyway Do bfwCalcProductsAfter Set Templ="" ; Close Quit /* ONDERSTAAND GEDEELTE VAN DE CODE (in deze method) MOET SYNCHROON BLIJVEN MET DE CODE OP VOLGENDE SERVERS - CACHE01 : klasse BL.Flow.Offerte.ProductGAData --> voor import into Admin + calc vanuit Excel - CACHE02 : klasse BL.Prod.GAData.TBXLadeConvert --> voor import into (Dev-)Admin + calc vanuit Excel - routine BL.PR.GA.TB.tmpDev2.MAC --> voor berekening WSOrder */ bfwProductFromWSLijn(WSLn,i,pdlNietMee) ; Returns Prod (kan zowel ORef als string value zijn) ; Maakt een GAData.Product object voor WSLn If (WSLn.Exclude=1) Do Quit "" Else If WSLn.ItemSTDL=$$$tbxCodeStdLade Do Quit $$$tbxCodeStdLade Set ..Qty=WSLn.Qty Set:(WSLn.ItemDS="") WSLn.ItemDS=OrderDesignID Set WSLn.GAMeta="TBX" Do ..ResetTB() Do bfwBTItemsFromWSLijn ; Data van blTBox naar GAData.Product New Prod Set Prod=##class(Prod.GAData.Product).BuildFromTemplate(Templ.%Id()) Do Prod.TemplateTmpInit() Do Prod.AutosFromTemplate(,"FILL") Do:(KLNrProd) Prod.KlantSetObjectId(KLNrProd) ; TBXContext.IsKlantIDIngevuld(...) Do ..BTValues.SetAt(Prod.TemplateCode,"TemplateCode") Do bfwSetNietMeeItems(pdlNietMee) Do bfwFBevestNML Do bfwResetNMItemsBinnenlade ; Reling/boxside worden sowieso gemonteerd op een binnenlade Do ..BTValuesToProduct(Prod) Do ..BWValuesToProduct(Prod) Do ..KMValuesToProduct(Prod,"TBR") Quit Prod bfwBTItemsFromWSLijn New lbDSCodes,DSCode,KFront,KRug,KBxs,Klas,SPZKpiece1 ;d WLIP^vhDBG(97,"*"_$L(WSLn.ItemRK)_"*"_" - "_WSLn.ItemRK) Set DSCode=$S($L(WSLn.ItemDS):$LG(..BTDep("TBDesign","TBDesignCode",WSLn.ItemDS),1), 1:"") Set KFront=$S($L(WSLn.ItemRK):$LG(..BTDep("TBRelingKleur","TBFrontKleur",WSLn.ItemRK),1), 1:"") Set KRug =$S($L(WSLn.ItemDS):$LG(..BTDep("TBDesign","TBRugKleur",WSLn.ItemDS),1), 1:"") If WSLn.ItemKX="" Do . Set KBxs=$S($L(WSLn.ItemDS):$LG(..BTDep("TBDesign","TBBoxsideKleur",WSLn.ItemDS),1), 1:"") . Set WSLn.ItemKX=KBxs ; Set to WSLijn Else Do . Set KBxs=WSLn.ItemKX Do ..BTValues.SetAt(WSLn.ItemDS ,"TBDesign") Do ..BTValues.SetAt(DSCode ,"TBDesignCode") Do ..BTValues.SetAt(WSLn.ItemLT ,"LadeCode") Do bfwBTItemsLadeCode(WSLn.ItemLT) Set Klas=..BTValues.GetAt("TBKlasse") Do ..BTValues.SetAt($S(..BTValues.GetAt("TBLadeType")="B":"Z", 1:WSLn.ItemFB) ,"TBFBevestiging") Do ..BTValues.SetAt(WSLn.ItemCB ,"TBCBreedte") Do ..BTValues.SetAt(WSLn.ItemWD ,"TBWandDikte") Do ..BTValues.SetAt($S(WSLn.ItemOPVL["L":25, 1:0) ,"OpvullijstLi") Do ..BTValues.SetAt($S(WSLn.ItemOPVL["R":25, 1:0) ,"OpvullijstRe") Do ..BTValues.SetAt(..DFLMinTolerantie(WSLn.ItemWD) ,"MinTolerantie") ; $S(+WSLn.ItemWD=0:0, 1:1) Do ..BTValues.SetAt(WSLn.ItemLD ,"TBLadeDiepte") Do ..BTValues.SetAt(WSLn.ItemDK ,"TBDraagKracht") Do ..BTValues.SetAt(WSLn.ItemKB ,"TBBodemKleur") Do ..BTValues.SetAt(WSLn.ItemRK ,"TBRelingKleur") Do ..BTValues.SetAt(KFront ,"TBFrontKleur") Do ..BTValues.SetAt($S(WSLn.ItemKL="BE":"BA", 1:WSLn.ItemKL) ,"TBLadeKleur") Do ..BTValues.SetAt(KRug ,"TBRugKleur") Do ..BTValues.SetAt(WSLn.ItemBM ,"TBBlumotion") Do ..BTValues.SetAt(WSLn.ItemBX ,"TBBoxSide") Do ..BTValues.SetAt(KBxs ,"TBBoxsideKleur") ; WSLn.ItemKX Do ..BTValues.SetAt(WSLn.ItemKV ,"TBVulstukKleur") Do ..BTValues.SetAt(WSLn.ItemKLROPVL ,"TBOpvullijstKleur") Do ..BTValues.SetAt(WSLn.ItemSB ,"TBStabilisator") Do ..BTValues.SetAt(WSLn.ItemRSTL ,"TBRugStukVerlaagd") Do ..BTValues.SetAt("Z" ,"TBStalenRug") Set SPZKpiece1=$P(WSLn.ItemSPZK,";",1) Do ..BTValues.SetAt(SPZKpiece1 ,"TBSPZijkant") If Klas=##class(DOM.PM.enu.TBXKlas).SifonTypeBlum() { Do ..BTValues.SetAt($P(WSLn.ItemSPZK,";",2) ,"SpoelbakZkLi") Do ..BTValues.SetAt($P(WSLn.ItemSPZK,";",3) ,"SpoelbakZkRe") Set AantalUitsparingen=..SpoelbakUitsparingen(WSLn.ItemLT,SPZKpiece1,Klas) If AantalUitsparingen>1 { Do ..BTValues.SetAt($P(WSLn.ItemSPZK,";",4) ,"SpoelbakZkMi") Do ..BTValues.SetAt($P(WSLn.ItemSPZK,";",5) ,"SpoelbakBreedte1") Do ..BTValues.SetAt($P(WSLn.ItemSPZK,";",6) ,"SpoelbakBreedte2") } Else { Do ..BTValues.SetAt($P(WSLn.ItemSPZK,";",4) ,"SpoelbakBreedte1") } } ElseIf Klas=##class(DOM.PM.enu.TBXKlas).Spoelbak() { #define SPZkOpMaat(%v) (%v?1(1"M".E,1"SI".E)) If $$$SPZkOpMaat(SPZKpiece1) { ; Spoelbak zijkant op maat Do ..BTValues.SetAt($P(WSLn.ItemSPZK,";",2) ,"SpoelbakZkLi") Do ..BTValues.SetAt($P(WSLn.ItemSPZK,";",3) ,"SpoelbakZkRe") Do ..BTValues.SetAt($P(WSLn.ItemSPZK,";",4) ,"SpoelbakZkMi") ; SpoelbakBreedte (SPBR) wordt berekend in Prod.BWValuesToProduct() } } ElseIf Klas=##class(DOM.PM.enu.TBXKlas).Sifon() { Do ..BTValues.SetAt($P(WSLn.ItemSPZK,";",2) ,"SpoelbakZkLi") Do ..BTValues.SetAt($P(WSLn.ItemSPZK,";",3) ,"SpoelbakZkRe") Do ..BTValues.SetAt($P(WSLn.ItemSPZK,";",4) ,"SpoelbakZkMi") Set SPBR=##class(BL.PR.GA.TandemBox).CalcBreedteSpoelbak(SPZKpiece1,0,0,DSCode) Do ..BTValues.SetAt(SPBR ,"SpoelbakBreedte") ; deze moet ingevuld zijn voor dubbele sifonlade } If ($L(WSLn.ItemVPK)) Do . Do ..BTValues.SetAt(WSLn.ItemVPK ,"Verpakking") . Do:(##class(BL.PR.GA.TandemBox).NietMeeToepassen(WSLn.ItemVPK)="True")||(WSLn.ItemVPK="xxP") bfwUpdateNMItemsBulk ; Do:(WSLn.ItemVPK?1(1"C",1"P",1"Z",1"A",1"Y")) bfwUpdateNMItemsBulk Do:($L(WSLn.ItemBGRP) ) ..BTValues.SetAt(WSLn.ItemBGRP ,"TBBinnenGreep") Do:('$L(WSLn.ItemBGRP)) ..BTValues.SetAt($S(WSLn.ItemLT?1(1"D/Z",1"C/Z"):"H",1:""),"TBBinnenGreep") Do ..BTValues.SetAt($S(WSLn.ItemFS="":"A", 1:WSLn.ItemFS) ,"TBFrontSteun") Do ..BTValues.SetAt($S(WSLn.ItemASM="":"0", 1:WSLn.ItemASM) ,"TBMat") Do ..BTValues.SetAt(WSLn.ItemDWV ,"TBDwarsVerdeling") Do ..BTValues.SetAt(WSLn.ItemOLP ,"OrgaluxProduct") Do bfwExtrasFromGlobal(DSCode) Quit bfwBTItemsLadeCode(LCodeID) ; Uit LadeCode volgen deze vijf properties: ; TBKlasse - TBGlijderType - TBLadeType - TBZijwand - TBRugHoogte New LCode,Key,TBVal Set LCode=##class(Prod.GAMeta.BT.LadeCode).%OpenId(LCodeID) Quit:('LCode) Set Key="" For Set TBVal=LCode.TBKenm.GetNext(.Key) Quit:(Key="") Do . Do ..BTValues.SetAt(TBVal,Key) Set LCode="" ; Close Quit bfwSetNietMeeItems(pdlNietMee) ; Niet Meeleveren is gedefinieerd op Hoofding-niveau en niet op Lijn-niveau Quit:(pdlNietMee="") New lbNietMee,i Set lbNietMee="" Set:(pdlNietMee["NMCP" ) lbNietMee=lbNietMee_$LB("NMCorpusProfiel") Set:(pdlNietMee["NMRL" ) lbNietMee=lbNietMee_$LB("NMZijReling") Set:(pdlNietMee["NMAK" ) lbNietMee=lbNietMee_$LB("NMAfdekkap") Set:(pdlNietMee["NMBDS" ) lbNietMee=lbNietMee_$LB("NMBodemsteun") Set:(pdlNietMee["NMBMM" ) lbNietMee=lbNietMee_$LB("NMBlumoMeenemer") Set:(pdlNietMee["NMBMB" ) lbNietMee=lbNietMee_$LB("NMBlumoBehuizing") Set:(pdlNietMee["NMFB" ) lbNietMee=lbNietMee_$LB("NMFBevestiging") Set:(pdlNietMee["NMBS" ) lbNietMee=lbNietMee_$LB("NMBoxSide") Set:(pdlNietMee["NMOVL" ) lbNietMee=lbNietMee_$LB("NMOpvullijst") Set:(pdlNietMee["NMSPDL") lbNietMee=lbNietMee_$LB("NMSPDwarsLatjes") Set:(pdlNietMee["NMASM" ) lbNietMee=lbNietMee_$LB("NMAntislipmat") For i=1:1:$LL(lbNietMee) Do:(1) ..BTValues.SetAt(1,$LI(lbNietMee,i)) ; WEL Meeleveren ("WM...") Set lbWelMee="" Set:(pdlNietMee["WMCP" ) lbWelMee=lbWelMee_$LB("NMCorpusProfiel") Set:(pdlNietMee["WMRL" ) lbWelMee=lbWelMee_$LB("NMZijReling") Set:(pdlNietMee["WMAK" ) lbWelMee=lbWelMee_$LB("NMAfdekkap") Set:(pdlNietMee["WMBDS" ) lbWelMee=lbWelMee_$LB("NMBodemsteun") Set:(pdlNietMee["WMBMM" ) lbWelMee=lbWelMee_$LB("NMBlumoMeenemer") Set:(pdlNietMee["WMBMB" ) lbWelMee=lbWelMee_$LB("NMBlumoBehuizing") Set:(pdlNietMee["WMFB" ) lbWelMee=lbWelMee_$LB("NMFBevestiging") Set:(pdlNietMee["WMBS" ) lbWelMee=lbWelMee_$LB("NMBoxSide") Set:(pdlNietMee["WMOVL" ) lbWelMee=lbWelMee_$LB("NMOpvullijst") Set:(pdlNietMee["WMSPDL") lbWelMee=lbWelMee_$LB("NMSPDwarsLatjes") Set:(pdlNietMee["WMASM" ) lbWelMee=lbWelMee_$LB("NMAntislipmat") For i=1:1:$LL(lbWelMee) Do:(1) ..BTValues.SetAt(0,$LI(lbWelMee,i)) Quit bfwFBevestNML ; FrontBevestiging Niet Meeleveren bij Lade ZONDER FB (excl. Binnenlade) ! If (..BTValues.GetAt("TBFBevestiging")="NM") || ((..BTValues.GetAt("TBFBevestiging")="Z")&&(..BTValues.GetAt("TBLadeType")'="B")) Do . Do ..BTValues.SetAt("S","TBFBevestiging") . Do ..BTValues.SetAt(1,"NMFBevestiging") Quit bfwUpdateNMItemsBulk New Key,dummy Set Key="NM" For Set Key=$O(..LookUp(Key)) Quit:(Key'?1"NM".E) Do . Quit:(Key?1(1"NMBlumoBehuizing",1"NMAntislipmat")) . Do:('..BTValues.IsDefined(Key)) ..BTValues.SetAt(1,Key) ;Do bfwResetNMItemsBinnenlade // de oproep is nu verhuisd naar bfwProductFromWSLijn Quit bfwResetNMItemsBinnenlade ; Binnenlade kan NIET gemonteerd worden zonder Reling, dus NMZijReling terug op 0 zetten If (..BTValues.GetAt("TBLadeType")="B")&&(..BTValues.GetAt("TBBoxSide")'="ZR") Do ; binnenlade met reling/boxside . Do ..BTValues.SetAt(0,"NMZijReling") . Do ..BTValues.SetAt(0,"NMBoxSide") Quit bfwExtrasFromGlobal(DSCode) #define GeefKlantSetting(%v) ##class(cspBasis.GAProdTBox).GeefKlantSpecifiekeSetting(sDomVERW,KLNrProd,%v,"") #define GeefKlantSettingNMAK $$$GeefKlantSetting(##class(APPS.TBXWeb.enu.KlantSpecifiekeSettingSubnode).NietMeeleverenAfdekkappen()) #define GeefKlantSettingStalenRug $$$GeefKlantSetting(##class(APPS.TBXWeb.enu.KlantSpecifiekeSettingSubnode).StalenRug()) #define GeefKlantSettingMatKlant $$$GeefKlantSetting(##class(APPS.TBXWeb.enu.KlantSpecifiekeSettingSubnode).MateriaalKlant()) #define DelimByDC(%v) $P(%v,";",$S(DSCode="I":2,1:1)) Quit:(sDomVERW'="VHEPN") ; Only for safety Do:($$$DelimByDC($$$GeefKlantSettingNMAK)=1) ..BTValues.SetAt(1,"NMAfdekkap") ; KLNrProd <--> WS.KLNummer Do:($$$GeefKlantSettingStalenRug?1"V") ..BTValues.SetAt($$$GeefKlantSettingStalenRug,"TBStalenRug") Set:($$$GeefKlantSettingMatKlant="HA")&&($G(arKenm("TBBodemKleur"))="LGS") arKenm("PlaatMat")="HA" ; Bodems Keller gebruiken : "Halux Afgewerkt" i.p.v. "Halux Stroken" // Copied from class BL.Flow.Offerte.ProductGAData for calc. via Excel Quit bfwCalcProductsInit New i Set OrdStdL="LoadMeNow" Set KLNrProd=+$S(sDomVERW'="VHEPN":sDomKLNr, 1:WS.KLNummer) Set KLKorting=WS.KLKorting ; (waarde in % uitgedrukt) Set KLReductie=$S(+KLKorting'=0:$J(1-(KLKorting/100),0,4), 1:1) // Actieve Acties ophalen. Deze worden lijn per lijn gecontroleerd. Achteraf zal de unie van de ActieCode (op lijnniveau) bewaard worden op het WSOrd (hoofding) niveau. // (Added by WimV on 17/12/2010) Set RefDatum=$H Set Shop=sDomVERW Set Klant=WS.KLNummer ; Klant-object kan enkel voor VHEPN; bij SFS of andere handels andere implementatie van het klant-object gebruiken (TBD) // ActieCodes wissen op WSOrd en WSLijn-niveau Do:($IsObject(WS.ActieCodesList)) WS.ActieCodesList.Clear() Set i="" For Set WSLn=WS.Lijnen.GetNext(.i) Quit:(i="") Do . ;Do WSLn.ActieCodesList.Clear() ; Vorige implementatie (MAG WEG) . Do WSLn.WisAlleActieGegevens() . Set WSLn.ActieKorting="" Set ActieveActiesList=##class(APPS.TBXWeb.Actie).GeefActieveActies(RefDatum,Shop,Klant) Set GeldigeActiesVoorOrder=ActieveActiesList.%New() d WL^vhDBG("Check geldige acties : ") Set itActieveActies=##class(TECH.ListIterator).%New(ActieveActiesList) While itActieveActies.HasNext() { Set Actie=itActieveActies.Next() If Actie.IsGeldigOrder(WS) { d WL^vhDBG("Geldige actie : "_Actie.ActieCode) Do GeldigeActiesVoorOrder.Insert(Actie) ;Do WS.VoegToeActieCode(Actie.ActieCode) } } Set (Som,SomAant)=0 Quit bfwCalcProduct(Prod,i,pdlNietMee,GeldigeActiesVoorOrder) Kill arValidPR If Prod=$$$tbxCodeStdLade Do . Do bfwCalcProdStdL ; all params are globally known Else If $IsObject(Prod) Do . Do bfwCalcProdViaItems Else Do . ; Nothing Set:(WSLn.KostPrijs'="ERROR") SomAant=SomAant+WSLn.Qty Merge arValidWS(i)=arValidPR(0) Quit bfwCalcProductsAfter Set WS.TotAantal=$S(SomAant>0:SomAant, 1:"") Set WS.TotPrijs=$S(Som>0:+$J(Som,0,2), 1:"") Do WS.VerzamelActieCodesVanLijnen() d TTrace("ValidWS(): "_$$ArrayToText^vhLib("arValidWS")) Set Prod="" Set OrdStdL="" Quit bfwCalcProdViaItems // Binnen de BENELUX wordt met LijstPrijs gewerkt. Buiten de BENELUX bepaalt de verwerker zelf zijn Marge op AKPrijs #define GenPRNrTBX 89322 #define MargeHEIN 2.95 #define MargeLMC 2.33 // MargeDUPO=1 , berekening via LijstPrijs --> geen #define MargeDUPO 1 // MargeHELMY=1, berekening via LijstPrijs --> geen #define MargeHELMY 1 // MargeHFLE=1 , berekening via LijstPrijs --> geen #define MargeHFLE 1 // MargeMBHO=1 , berekening via LijstPrijs --> geen #define MargeMBHO 1 // MargeKISCH=1 , berekening via LijstPrijs --> geen #define MargeKISCH 1 /* // Zie klasse APPS.EC.Winkelkar.WinkelkarService.impl.PrijsBepaler.SFSPrijsFactorBepaler #define MargeSFSxMetCP x.xx #define MargeSFSxZonderCP x.xx */ New KPrijsVH,LPrs,VKPrs,VerwMarge,KLNrPrs,PrPiece,GenPRNr,IsBeursUser,IsAnonymousUser New D,Q,U Set Q="K",D="\",U=";" Do Prod.CalcAll() Kill arValidPR Set IsBeursUser=($G(Opties)["PRS=B;") Set IsAnonymousUser=0 ; ($G(Opties)'["PRS=1;") If Prod.ValidatePR(.arValidPR) Do . Set GenPRNr=Prod.GenerischPRNr() . Set WSLn.Exclude=0 . . // Speciale users --> geen prijsberekening . If $G(Opties)["PRS=B;" Do Quit ; IsBeursUser . . Set KLNrPrs=sDomKLNr . . Set (AKPrs,VKPrs)="99.99" . Else If $G(Opties)'["PRS=1;" Do Quit ; IsAnonymousUser . . Set IsAnonymousUser=1 . . Set (AKPrs,VKPrs)="" . . // Else : gewone user --> standaard prijsberekening (zowel AKPrijs als VKPrijs bijhouden) . Set KPrijsVH=$G(Prod.Cumuls("KPrijs")) . Set KLNrPrs=$S(sDomVERW'="VHEPN":sDomKLNr, (WS.KLNummer?1.N)&&(WS.KLNummer>0):WS.KLNummer, 1:4645) . Set AKPrs=$P($$KLANTPR^KPRIJS(KLNrPrs,GenPRNr,$G(%NoSa),$J(KPrijsVH,0,2)),"\",1) . Set VKPrs=$$bfwCalcVKPrijsKlant(KPrijsVH,AKPrs,GeldigeActiesVoorOrder) Else Do . Set VKPrs="ERROR" . Set WSLn.Exclude=1 ; Fill in WSLn-properties If (VKPrs>0)||(IsAnonymousUser) Do . Set WSLn.AKPrijs=AKPrs . Set WSLn.KostPrijs=VKPrs . Do:('IsAnonymousUser) bfwZoekGeldigeActiesVoorWSLijn(WSLn,Prod,KLNrPrs,GenPRNr,GeldigeActiesVoorOrder,VKPrs) . Set Som=Som+(WSLn.Qty*WSLn.KostPrijs) Else Do . Set WSLn.AKPrijs="ERROR" . Set WSLn.KostPrijs="ERROR" . ;d TTrace("WSOrd ln("_i_"): "_$C(13,10)_$$ExportXMLGAProd^WV(Prod,"No Product")) . d bfwTranslateErr Quit bfwZoekGeldigeActiesVoorWSLijn(WSLn,Prod,KLNrPrs,GenPRNr,GeldigeActiesVoorOrder,VKPrsNormaal) Set itActies=##class(TECH.ListIterator).%New(GeldigeActiesVoorOrder) While itActies.HasNext() { Set Actie=itActies.Next() If Actie.IsGeldigProduct(WSLn,Prod) { // Bereken ActieKorting // Deze code moet verplaatst worden naar ActieSFSCorpusProfielen.BererkenKorting() of zoiets ;d WL^vhDBG("Show Cumuls") ;d WL^vhDBG($$ArrayToText^vhLib("Cumuls(""KPrijs"")",Prod,"Cumuls")) Set PrijsCP=$G(Prod.Cumuls("KPrijs",2,1,5))+$G(Prod.Cumuls("KPrijs",2,1,6)) ; CP links + CP rechts Set AKPrsCP=$P($$KLANTPR^KPRIJS(KLNrPrs,GenPRNr,$G(%NoSa),$J(PrijsCP,0,2)),"\",1) Set VKPrijsCP=$$bfwCalcVKPrijsKlant(PrijsCP,AKPrsCP,GeldigeActiesVoorOrder) If VKPrijsCP>0 { d WL^vhDBG("KPrijs CP : "_VKPrijsCP_" (is berekend via Cumuls)") Do WSLn.VoegToeActieGegevens(Actie.ActieCode,VKPrijsCP) } Else { // Problemen bij de berekening van de KortingPrijs Set VKPrijsCP=0 Do WSLn.VerwijderActieItem(Actie.ActieCode) } } Set WSLn.ActieKorting=WSLn.BerekenKorting() Set WSLn.KostPrijs=VKPrsNormaal-WSLn.ActieKorting } Quit bfwCalcVKPrijsKlant(KPrijsVH,AKPrs,GeldigeActiesVoorOrder) #define PcLijstPrs 15 #define PcVkPrsVH 14 #define HandelAankoopPrijs(%v) $P(%v,"\",$$$PcVkPrsVH) #define HandelLijstPrijs(%v) $P(%v,"\",$$$PcLijstPrs) // Van Hoecke domein Quit:(sDomVERW="VHEPN") AKPrs // BENELUX handels zonder korting, i.e. zonder klantinfo (dus Anonymous) Quit:(sDomVERW="DUPO" ) $P($$KLANTPR^KPRIJS(KLNrPrs,GenPRNr,$G(%NoSa),$J(KPrijsVH,0,2)),"\",$$$PcLijstPrs) Quit:(sDomVERW="HELMY") $P($$KLANTPR^KPRIJS(KLNrPrs,GenPRNr,$G(%NoSa),$J(KPrijsVH,0,2)),"\",$$$PcLijstPrs) // BENELUX handels met korting, i.e. met klantinfo New IsBeneluxHandelMetKorting,HandelVKPrijs,KPrijsData,HandelVKPrijs Set IsBeneluxHandelMetKorting = (sDomVERW="MBHO")||(sDomVERW="HFLB")||(sDomVERW="HFLE")||(sDomVERW="KISCH")||(sDomVERW="RAEM") If IsBeneluxHandelMetKorting { Set KPrijsData=$$KLANTPR^KPRIJS(KLNrPrs,GenPRNr,$G(%NoSa),$J(KPrijsVH,0,2)) Set HandelVKPrijs=$J($$$HandelLijstPrijs(KPrijsData)*KLReductie,0,2) // Als de "HandelVKPrijs met KLKorting" kleiner dan de HandelAKPrijs, dan wordt de KLKorting volledig ongedaan gemaakt. If HandelVKPrijs<$$$HandelAankoopPrijs(KPrijsData) { Set HandelVKPrijs=$$$HandelLijstPrijs(KPrijsData) } } Quit:(IsBeneluxHandelMetKorting) HandelVKPrijs // Niet-BENELUX handels (met en zonder korting , i.e. met en zonder klantinfo) Set VerwMarge=$CASE(sDomVERW, "HEIN":$$$MargeHEIN, "LMC":$$$MargeLMC, "SFS":$$bfwGeefPrijsFactorVoorSFS(pdlNietMee,GeldigeActiesVoorOrder), :1) If sDomVERW="LMC" Do . If ($G(KLReductie)<(1/$$$MargeLMC)) Set KLReductie=1 ; ( 1 / $$$MargeLMC = 0.4292 ) m.a.w. KLKorting mag niet groter zijn dan de MargeLMC . Set HandelVKPrijs=$J(AKPrs*VerwMarge*KLReductie,0,2) Else If sDomVERW="SFS" Do . If ($G(KLReductie)<(1/VerwMarge)) Set KLReductie=1 . Set HandelVKPrijs=$J(AKPrs*VerwMarge*KLReductie,0,2) Else Do . Set HandelVKPrijs=$S((VerwMarge=1):AKPrs, 1:$J(AKPrs*VerwMarge+0.004999,0,2)) ; Opnieuw afronden na VerwMarge-calculatie Quit HandelVKPrijs bfwGeefPrijsFactorVoorSFS(pdlNietMee,GeldigeActiesVoorOrder) New PrijsFactorSFS If GeldigeActiesVoorOrder.Count()>0 { // Voorlopig wordt niet gecontroleerd welke de actieve actie is, want er is slechts één aanwezig, nl. "CP gratis" Set PrijsFactorSFS=##class(APPS.EC.Winkelkar.WinkelkarService.impl.PrijsBepaler.SFSPrijsFactorBepaler).%GetParameter("TBXLadeZonderGeleiders") } Else { Set PrijsFactorSFS=##class(APPS.EC.Winkelkar.WinkelkarService.impl.PrijsBepaler.SFSPrijsFactorBepaler).%GetParameter("TBXLadeMetGeleiders") If (pdlNietMee["NMCP") { Set PrijsFactorSFS=##class(APPS.EC.Winkelkar.WinkelkarService.impl.PrijsBepaler.SFSPrijsFactorBepaler).%GetParameter("TBXLadeZonderGeleiders") } } Quit PrijsFactorSFS bfwTrapCalcPrs Set HandelVKPrijs="" Quit bfwTranslateErr New msg Set msg=Prod.ValidPRArrayToText(.arValidPR,1) ; blnAddInfoNode=1 Quit /* New Key Set Key="" For Set Key=$O(arValidPR(0,Key)) Quit:(Key="") Do . Set DItem=Prod.DataItems.GetAt(Key) . Set arValidPR(0,Key,"I")=DItem.Get("Oms")_" ("_DItem.Code_") : PRNr="""_DItem.Get("PRNr")_"""" ; _" Kenm="_$$$LCVT(DItem.Get("Kenm")) Quit */ bfwCalcProdStdL New VKPrs If OrdStdL="LoadMeNow" Do ; Execute only once . Set OrdStdL=$$bfwGetStdLadeOrder(sDomKLNr,WSLn.ItemDS) ; ($S(sDomVERW="HEIN":sDomKLNr, 1:"")) . Do:(OrdStdL) OrdStdL.DataArrayFromWS(.arWSStdL) Set VKPrs="" Set:(OrdStdL) VKPrs=$$bfwGetPrijsFromMatchLn(WSLn, .arWSStdL) If 'VKPrs Do . Set WSLn.KostPrijs="ERROR" . Set WSLn.Exclude=1 . Set arValidPR(0,"STDL")=$S(VKPrs["N/A":"StdLade "_VKPrs ,1:"StdL niet gevonden.") . Set VKPrs="" Else Do . Set VKPrs=VKPrs*$G(KLReductie,1) . Set WSLn.KostPrijs=VKPrs . Set Som=Som+(WSLn.Qty*VKPrs) . ;d TTrace("WSOrd ln("_i_"): "_$C(13,10)_"Std Lade") d WL^vhDBG("Tijd voor StdLade matchLn : "_$$RestartTimer^vhLib) Quit bfwGetStdLadeOrder(KLNr,TBDesign) New wsID Set wsID=##class(cspBasis.GAProdTBox).WSOrderIDStdLadeViaKLNr(KLNr,TBDesign) Quit:($L(wsID)) ##class(WS.TBX.Order).%OpenId(wsID) Quit "" bfwGetPrijsFromMatchLn(WSLn,arWSStdL) New i,Prijs,FBVal,AddPrsVal Set i=$$bfwGetMatchLijnNr Quit:(i="") "" Set FBVal=WSLn.ItemFB Set AddPrsVal=$S(FBVal="":"", 1:OrdStdL.Lijnen.GetAt(i).AddPrs.GetAt("FB_"_FBVal)) If (AddPrsVal="N/A") Do . Set Prijs="N/A: FB="_FBVal . d WL^vhDBG("StdLade N/A: FB="_FBVal) Else Do . Set Prijs=$G(arWSStdL("LN",i,"PRIJS")) . Set:(+Prijs) Prijs=Prijs+AddPrsVal Quit Prijs bfwGetMatchLijnNr() New arWSLn,arMDRow,MatchResult Do WSLn.DataArrayFromWSLn(.arWSLn) ;d TTrace("ArWSLn:"_$$ArrayToText^vhLib("arWSLn")) Set i="" For Set i=$O(arWSStdL("LN",i)) Quit:(i="") Do Quit:(MatchResult=1) ; (Prijs'="") . Quit:($G(arWSStdL("LN",i,"LIJNNR"))="") . Kill arMDRow . Merge arMDRow=arWSStdL("LN",i) . Set MatchResult=$$CompareFull^cspBasis.GAProdTBox.tmpDev(.arMDRow,.arWSLn) . d:(MatchResult=1) TTrace("Match found with line: "_i) ; _$$ArrayToText^vhLib("arMDRow")) Quit i DbgAdd(s,v) Set sDbg=sDbg_s_"="_v_" ** " Quit TTrace(msg) s:('$D(ClientIP)) ClientIP="192.168.1.97" d WL^vhDBG("TBox:"_msg) Quit TTraceW(msg) d TTrace(.msg) ;w msg,! Quit