#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()="") New ClientIP 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 blTBox Set blTBox = %this New dsID,Result,Templ,arKDtl,lbDomLU,sDomVERW,sDomKLNr New arValidWS New GemaaktProductId Set lbDomLU=WS.DomainLookUp(WS.WebDomain,$LB("VERW","KLNR")) Set sDomVERW=$LG(lbDomLU,1) Set sDomKLNr=$LG(lbDomLU,2) Set Result=$$bfwTemplateViaLadeKL(blTBox, WS, blTBox.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 $listbuild(GemaaktProductId) bfwTemplateViaLadeKL(blTBox, WebOrder, BeperkDesignCode) ; (Templ) New klID,lbTPs,TPCode,TemplateID,blnCheckDesign,OrderDesignID Set klID=WebOrder.Lijnen.GetNext("").ItemKL Set:(klID="BE") klID="BA" d DbgAdd("KL",klID) Set OrderDesignID=WebOrder.Lijnen.GetNext("").ItemDS ; Get design from first line - it shoud be the same for all other If OrderDesignID="" Do . Set blnCheckDesign=(BeperkDesignCode="") . Set OrderDesignID=blTBox.DesignFromLadeKleur(klID,BeperkDesignCode) Else If $L(BeperkDesignCode) Do ; !!! TEMPORARY PATCH for F-Design !!! (added by WimV on 13/03/2009) . Set blnCheckDesign=0 . Set OrderDesignID=blTBox.DesignFromLadeKleur(klID,BeperkDesignCode) Else Do . Set blnCheckDesign=0 Quit:(OrderDesignID="") "Geen Design gevonden" d DbgAdd("DS",OrderDesignID) ; Alleen "Standaard Design" toegelaten. Quit:(blnCheckDesign)&&($LG(blTBox.BTDep("TBDesign","TBDesignCode",OrderDesignID),1)'?1(1"S",1"B")) "Geen Standaard Design" Set lbTPs=blTBox.TPCodesFromDesign(OrderDesignID) Set TPCode=$LG(lbTPs,1) Quit:(TPCode="") "TemplateCode niet gevonden voor Design '"_OrderDesignID_"'." d DbgAdd("TPCode",TPCode) Set TemplateID=$LG(##class(Prod.GAData.Template).IDsViaCode(TPCode),1) Quit:(TemplateID="") "TemplateID niet gevonden voor TPCode '"_TPCode_"'." 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,ProductTypeAPI New MetaArray, PRNr, Taal ;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 blTBox.Qty=WSLn.Qty Set:(WSLn.ItemDS="") WSLn.ItemDS=OrderDesignID Set WSLn.GAMeta="TBX" Do blTBox.ResetTB() Do bfwBTItemsFromWSLijn(WSLn,blTBox) ; 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) Do blTBox.BTValues.SetAt(Prod.TemplateCode,"TemplateCode") Do bfwSetNietMeeItems(blTBox,pdlNietMee) Do bfwFBevestNML(blTBox) Do bfwResetNMItemsBinnenlade(blTBox) ; Reling/boxside worden sowieso gemonteerd op een binnenlade Do blTBox.BTValuesToProduct(Prod) Do blTBox.BWValuesToProduct(Prod) Do blTBox.KMValuesToProduct(Prod,"TBR") Quit Prod bfwBTItemsFromWSLijn(WSLn,blTBox) New lbDSCodes,DSCode,KFront,KRug,KBxs,Klas,SPZKpiece1,AantalUitsparingen,CodeStalenRug ;d WLIP^vhDBG(97,"*"_$L(WSLn.ItemRK)_"*"_" - "_WSLn.ItemRK) Set DSCode=$S($L(WSLn.ItemDS):$LG(blTBox.BTDep("TBDesign","TBDesignCode",WSLn.ItemDS),1), 1:"") Set KFront=$S($L(WSLn.ItemRK):$LG(blTBox.BTDep("TBRelingKleur","TBFrontKleur",WSLn.ItemRK),1), 1:"") Set KRug =$S($L(WSLn.ItemDS):$LG(blTBox.BTDep("TBDesign","TBRugKleur",WSLn.ItemDS),1), 1:"") If WSLn.ItemKX="" Do . Set KBxs=$S($L(WSLn.ItemDS):$LG(blTBox.BTDep("TBDesign","TBBoxsideKleur",WSLn.ItemDS),1), 1:"") . Set WSLn.ItemKX=KBxs ; Set to WSLijn Else Do . Set KBxs=WSLn.ItemKX Do blTBox.BTValues.SetAt(WSLn.ItemDS ,"TBDesign") Do blTBox.BTValues.SetAt(DSCode ,"TBDesignCode") Do blTBox.BTValues.SetAt(WSLn.ItemLT ,"LadeCode") Do bfwBTItemsLadeCode(WSLn.ItemLT) Set Klas=blTBox.BTValues.GetAt("TBKlasse") Do blTBox.BTValues.SetAt($S(blTBox.BTValues.GetAt("TBLadeType")="B":"Z", 1:WSLn.ItemFB) ,"TBFBevestiging") Do blTBox.BTValues.SetAt(WSLn.ItemCB ,"TBCBreedte") Do blTBox.BTValues.SetAt(WSLn.ItemWD ,"TBWandDikte") Do blTBox.BTValues.SetAt($S(WSLn.ItemOPVL["L":25, 1:0) ,"OpvullijstLi") Do blTBox.BTValues.SetAt($S(WSLn.ItemOPVL["R":25, 1:0) ,"OpvullijstRe") Do blTBox.BTValues.SetAt(blTBox.DFLMinTolerantie(WSLn.ItemWD) ,"MinTolerantie") ; $S(+WSLn.ItemWD=0:0, 1:1) Do blTBox.BTValues.SetAt(WSLn.ItemLD ,"TBLadeDiepte") Do blTBox.BTValues.SetAt(WSLn.ItemDK ,"TBDraagKracht") Do blTBox.BTValues.SetAt(WSLn.ItemKB ,"TBBodemKleur") Do blTBox.BTValues.SetAt(WSLn.ItemRK ,"TBRelingKleur") Do blTBox.BTValues.SetAt(KFront ,"TBFrontKleur") Do blTBox.BTValues.SetAt($S(WSLn.ItemKL="BE":"BA", 1:WSLn.ItemKL) ,"TBLadeKleur") Do blTBox.BTValues.SetAt(KRug ,"TBRugKleur") Do blTBox.BTValues.SetAt(WSLn.ItemBM ,"TBBlumotion") Do blTBox.BTValues.SetAt(WSLn.ItemBX ,"TBBoxSide") Do blTBox.BTValues.SetAt(KBxs ,"TBBoxsideKleur") ; WSLn.ItemKX Do blTBox.BTValues.SetAt(WSLn.ItemKV ,"TBVulstukKleur") Do blTBox.BTValues.SetAt(WSLn.ItemKLROPVL ,"TBOpvullijstKleur") Do blTBox.BTValues.SetAt(WSLn.ItemSB ,"TBStabilisator") Do blTBox.BTValues.SetAt(WSLn.ItemRSTL ,"TBRugStukVerlaagd") Set CodeStalenRug = $$$If(WSLn.ItemRugwandMateriaal="Staal", "V", "Z") Do blTBox.BTValues.SetAt(CodeStalenRug ,"TBStalenRug") Set SPZKpiece1=$P(WSLn.ItemSPZK,";",1) Do blTBox.BTValues.SetAt(SPZKpiece1 ,"TBSPZijkant") If ##class(TECH.StringUtils).Equals(Klas, ##class(DOM.PM.enu.TBXToepassing).SifonType2(),##class(DOM.PM.enu.TBXToepassing).SifonType3()) { Do blTBox.BTValues.SetAt($P(WSLn.ItemSPZK,";",2) ,"SpoelbakZkLi") Do blTBox.BTValues.SetAt($P(WSLn.ItemSPZK,";",3) ,"SpoelbakZkRe") Set AantalUitsparingen=blTBox.SpoelbakUitsparingen(WSLn.ItemLT,SPZKpiece1,Klas) If AantalUitsparingen>1 { Do blTBox.BTValues.SetAt($P(WSLn.ItemSPZK,";",4) ,"SpoelbakZkMi") Do blTBox.BTValues.SetAt($P(WSLn.ItemSPZK,";",5) ,"SpoelbakBreedte1") Do blTBox.BTValues.SetAt($P(WSLn.ItemSPZK,";",6) ,"SpoelbakBreedte2") } Else { Do blTBox.BTValues.SetAt($P(WSLn.ItemSPZK,";",4) ,"SpoelbakBreedte1") } } ElseIf Klas=##class(DOM.PM.enu.TBXToepassing).Spoelbak() { #define SPZkOpMaat(%v) (%v?1(1"M".E,1"SI".E)) If $$$SPZkOpMaat(SPZKpiece1) { ; Spoelbak zijkant op maat Do blTBox.BTValues.SetAt($P(WSLn.ItemSPZK,";",2) ,"SpoelbakZkLi") Do blTBox.BTValues.SetAt($P(WSLn.ItemSPZK,";",3) ,"SpoelbakZkRe") Do blTBox.BTValues.SetAt($P(WSLn.ItemSPZK,";",4) ,"SpoelbakZkMi") ; SpoelbakBreedte (SPBR) wordt berekend in Prod.BWValuesToProduct() } } ElseIf Klas=##class(DOM.PM.enu.TBXToepassing).SifonType1() { Do blTBox.BTValues.SetAt($P(WSLn.ItemSPZK,";",2) ,"SpoelbakZkLi") Do blTBox.BTValues.SetAt($P(WSLn.ItemSPZK,";",3) ,"SpoelbakZkRe") Do blTBox.BTValues.SetAt($P(WSLn.ItemSPZK,";",4) ,"SpoelbakZkMi") Set SPBR=##class(BL.PR.GA.TandemBox).CalcBreedteSpoelbak(SPZKpiece1,0,0,DSCode) Do blTBox.BTValues.SetAt(SPBR ,"SpoelbakBreedte") ; deze moet ingevuld zijn voor dubbele sifonlade } If ($L(WSLn.ItemVPK)) Do . Do blTBox.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) ) blTBox.BTValues.SetAt(WSLn.ItemBGRP ,"TBBinnenGreep") Do:('$L(WSLn.ItemBGRP)) blTBox.BTValues.SetAt($S(WSLn.ItemLT?1(1"D/Z",1"C/Z"):"H",1:""),"TBBinnenGreep") Do blTBox.BTValues.SetAt($S(WSLn.ItemFS="":"A", 1:WSLn.ItemFS) ,"TBFrontSteun") Do blTBox.BTValues.SetAt($S(WSLn.ItemASM="":"0", 1:WSLn.ItemASM) ,"TBMat") Do blTBox.BTValues.SetAt(WSLn.ItemDWV ,"TBDwarsVerdeling") If $$$Not(##class(TECH.StringUtils).Equals(WSLn.ItemOnderdelenSpeciaal, "V", "")) { Do blTBox.BTValues.SetAt(WSLn.ItemOnderdelenSpeciaal ,"TBOndSpecial") } If $$$HasLength(WSLn.ItemPlaatMateriaal) { Do blTBox.BTValues.SetAt(WSLn.ItemPlaatMateriaal ,"PlaatMat") } If $$$HasLength(WSLn.ItemMinTolerantieOpIB) { Do blTBox.BTValues.SetAt(WSLn.ItemMinTolerantieOpIB ,"MinTolerantie") } Do blTBox.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 blTBox.BTValues.SetAt(TBVal,Key) Set LCode="" ; Close Quit bfwSetNietMeeItems(blTBox,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["NMTOBSET" ) lbNietMee=lbNietMee_$LB("NMTOBSet") Set:(pdlNietMee["NMTOBSTG" ) lbNietMee=lbNietMee_$LB("NMTOBStang") Set:(pdlNietMee["NMTOBTOEB") lbNietMee=lbNietMee_$LB("NMTOBToebehoren") 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) blTBox.BTValues.SetAt(1,$LI(lbNietMee,i)) ; WEL Meeleveren ("WM...") New lbWelMee 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["WMTOBSET" ) lbWelMee=lbWelMee_$LB("NMTOBSet") Set:(pdlNietMee["WMTOBSTG" ) lbWelMee=lbWelMee_$LB("NMTOBStang") Set:(pdlNietMee["WMTOBTOEB") lbWelMee=lbWelMee_$LB("NMTOBToebehoren") 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) blTBox.BTValues.SetAt(0,$LI(lbWelMee,i)) Quit bfwFBevestNML(blTBox) ; FrontBevestiging Niet Meeleveren bij Lade ZONDER FB (excl. Binnenlade) ! If (blTBox.BTValues.GetAt("TBFBevestiging")="NM") || ((blTBox.BTValues.GetAt("TBFBevestiging")="Z")&&(blTBox.BTValues.GetAt("TBLadeType")'="B")) Do . Do blTBox.BTValues.SetAt("S","TBFBevestiging") . Do blTBox.BTValues.SetAt(1,"NMFBevestiging") Quit bfwUpdateNMItemsBulk New Key,dummy Set Key="NM" For Set Key=$O(blTBox.LookUp(Key)) Quit:(Key'?1"NM".E) Do . Quit:(Key?1(1"NMBlumoBehuizing",1"NMAntislipmat")) . Do:('blTBox.BTValues.IsDefined(Key)) blTBox.BTValues.SetAt(1,Key) ;Do bfwResetNMItemsBinnenlade(blTBox) // de oproep is nu verhuisd naar bfwProductFromWSLijn Quit bfwResetNMItemsBinnenlade(blTBox) ; Binnenlade kan NIET gemonteerd worden zonder Reling, dus NMZijReling terug op 0 zetten If (blTBox.BTValues.GetAt("TBLadeType")="B")&&(blTBox.BTValues.GetAt("TBBoxSide")'="ZR") Do ; binnenlade met reling/boxside . Do blTBox.BTValues.SetAt(0,"NMZijReling") . Do blTBox.BTValues.SetAt(0,"NMBoxSide") Quit bfwExtrasFromGlobal(DSCode) #define KLDataExtra(%v) $$$GlobalKLData(0,sDomVERW,KLNrProd,%v) #define DelimByDC(%v) $P(%v,";",$S(DSCode="I":2,1:1)) Quit:(sDomVERW'="VHEPN") ; Only for safety Do:($$$DelimByDC($G($$$KLDataExtra("NMAK")))=1) blTBox.BTValues.SetAt(1,"NMAfdekkap") ; KLNrProd <--> WS.KLNummer Do:($G($$$GlobalKLData(0,sDomVERW,KLNrProd,"SR"))?1"V") blTBox.BTValues.SetAt($$$GlobalKLData(0,sDomVERW,KLNrProd,"SR"),"TBStalenRug") 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) New RefDatum,Shop,Klant 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="" New ActieveActiesList,itActieveActies 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) Do:(WSLn.KostPrijs="ERROR") ##class(vhLib.Logger).%New().Warning("Fout in berekening TBX",$$ArrayToText^vhLib("arValidPR(0)",.arValidPR)_$$$CRLF_$$$CRLF_$$ObjToText^vhLib(WSLn)) 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 2.2 #define MargeSFSxZonderCP 2.36 */ New KPrijsVH,LPrs,AKPrs,VKPrs,VerwMarge,KLNrPrs,PrPiece,GenPRNr,IsBeursUser,IsAnonymousUser New GenType,LowestVal 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) || ($G(Opties)["DDEFS=1") 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) . . New GADataProduct, TbxHelper . Set GADataProduct = Prod . Set TbxHelper = ##class(APPS.PM.Maatwerk.impl.BerekeningServiceProduct.TbxHelper).%New() . // Enkel de DataDefinities bewaren . If $G(Opties)["DDEFS=1" Do Quit ; Early quit, beter anders oplossen! . . Do TbxHelper.StelInProductDataOpGADataProduct(GADataProduct, Opties) . . Do GADataProduct.GenereerDataDefinities() . . ; Het is wel mogelijk dat niet alle HFBuilder correct berekend konden worden (nieuwe impl zoals bvb. Rug X38). De DataDefinities zullen dan toch nog correct gegenereerd zijn. . . Set GemaaktProductId = GADataProduct.ProductGetObjectId() . ;Else : . If $G(Opties)["KPR=1" Do . . New GADataProduct, GADataProductId,scSave,TbxHelper . . Set GADataProduct = Prod . . Set TbxHelper = ##class(APPS.PM.Maatwerk.impl.BerekeningServiceProduct.TbxHelper).%New() . . Do TbxHelper.StelInProductDataOpGADataProduct(GADataProduct, Opties) . . Do GADataProduct.KPRCreate() . . Set GemaaktProductId = GADataProduct.ProductGetObjectId() . . . . If (GemaaktProductId '> 0) Do Quit . . . // SetStatus : Error . . . Set GemaaktProductId = "" . . . Do ##class(vhLib.Logger).%New().ErrorMail("KPRCreate failed","KPRCreate vanuit BL.PR.GA.TB.tmpDev2.mac is niet gelukt. "_"KPR Product not created") . . ; Else . . Set scSave=GADataProduct.SaveClean() . . If $$$ISOK(scSave) Do . . . Set GADataProductId = GADataProduct.%Id() . . . Do ##class(Prod.Product).SetPropViaNr(GemaaktProductId,"GAProdID",GADataProductId) ; ^KPR(PRNr,"G") --> 13e piece . . Else Do . . . Set GemaaktProductId = "" . . . Do ##class(vhLib.Logger).%New().ErrorMail("KPRCreate failed","GADataProduct.SaveClean() vanuit BL.PR.GA.TB.tmpDev2.mac is niet gelukt. "_$$ParseStatus^vhLib(scSave)) . Else Do . Set GemaaktProductId = "" . 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) New itActies 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.OrderDataVoorStdLades).%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