#include %occInclude #include vhLib.Macro OLDTransformPrevNext(TranslateMe,RelPosPrev,RelPosNext) ;TransformPrevNext(TranslateMe,RelPosPrev,RelPosNext) Quit "" OLDAbsPosRecalcAll(Opties,%this) ; AbsPosRecalcAll(Opties) Quit OLDAbsPosCalc(sCode,RelPos,PrevVal,NextVal,%this) ; AbsPosCalc(sCode,RelPos,PrevVal,NextVal) Quit 0 IsUserWV() Set blnTelnetWV=($ZUTIL(67,7,$J)["TNT|WV_XP") Set blnUserWV=(blnTelnetWV||$$ClientIsIP^vhLib(97)) Quit ''blnUserWV CalcNewKost(SetGlobVar) Set SetGlobVar=$G(SetGlobVar,0) Quit 1 New tmpUserWV,blnCalc Set tmpUserWV=$S((SetGlobVar)||('$D(%IsUserWV)):$$IsUserWV(), 1:%IsUserWV) ; $S(('SetGlobVar)&&($D(%IsUserWV)):%IsUserWV, 1:$$IsUserWV()) Set:(SetGlobVar) %IsUserWV=tmpUserWV Set blnCalc=(tmpUserWV=1) Quit blnCalc ; Do StartJobBuildAllPRBS^Prod.GADef.KaderDeur.tmpDev() StartJobBuildAllPRBS() Job BGxBuildAllPRBS^Prod.GADef.KaderDeur.tmpDev() w "Job started in process (ID): "_$ZCHILD Quit BGxBuildAllPRBS() New StartTime,sc,scM,msg d LOW^%PRIO Set StartTime=$ZDT($H,4) ;Do GetIDsKostSpecial() Set sc=$$BuildAllPRBS() Set msg="routine BuildAllPRBS() finished."_$$$CRLF_ "Time: from "_StartTime_" until "_$ZDT($H,4)_$$$CRLF_ "Job ID: "_$J_$$$CRLF_ $$ParseStatus^vhLib(sc) Set scM=$$SendMiniMail^vhLib(""""_$$$Server_""" ",$LB("WV@vanhoecke.be"),"Job finished",msg,0) Kill:($$$ISOK(sc))&&($$$ISOK(scM)) ^wvKadDiff(-1,"NEXT ID") Quit // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // // BEREKENING VAN DE Bouwstenen in ^PRBS (dd. septemeer 2006) // // // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // ; w $$BuildAllPRBS^Prod.GADef.KaderDeur.tmpDev() BuildAllPRBS(KadIDCust) New sc Kill %arLOG If ($G(KadIDCust)) Do . Kill %arFakeIDs . Set %arFakeIDs(KadIDCust)="" ; KadID Set sc=$$LoopKadObjViaKPR("") ; 240000) w $$$ArrayTT("%arLOG"),! Do ArrayToTabDelim^vhLib(.%arLOG,"c:\temp\KadPrijsCmp_007.txt",,"") Quit sc LoopKadObjViaKPR(StartPRNr) New PRNr,KadID,KadObj,tmpTemplateRef Set PRNr=$G(StartPRNr,"") For Set KadID=$$cnpNextFromKPR(.PRNr) Quit:(PRNr="") Do . Quit:(KadID<1000) . Set ^wvKadDiff(-1,"NEXT ID")=KadID_" (PRNr="_PRNr_")" . w !,KadID_" (PRNr="_PRNr_") " . q:(KadID<104090)||(KadID>104100) ; q:(KadID>266440) . ; Get Objects . Set KadObj=##class(Prod.GADef.KaderDeur).%OpenId(KadID) . Do BuildPRBS(KadObj) Quit $$$OK BuildPRBS(KadObj) Quit:('$IsObject(KadObj))||('$IsObject(KadObj.Product)) New CalcObj,Staffel,PRNr,KPrijs,tmpAr Set CalcObj=##class(Prod.GADef.KadPrijs).%OpenId(KadObj.%Id()) Quit:('$IsObject(CalcObj)) Set Staffel=CalcObj.Aantal Set PRNr=KadObj.ProductGetObjectId() Set KPrijs=KadObj.KostPrijsCalc(Staffel) ; uitvoeren om KadObj.GADataProduct aan te maken Set %arLOG(PRNr)=KadID_" "_KPrijs Merge tmpAr=^HADPR("P",PRNr) If $IsObject(KadObj.GADataProduct) Do . Do KadObj.GADataProduct.ProductSetObjectId(KadObj.ProductGetObjectId()) . Do KadObj.GADataProduct.KPRCreate("",Staffel,0) . ;Set tmpTemplateRef=KadObj.GADataProduct.TemplateTmp Merge ^HADPR("P",PRNr)=tmpAr ; reset ^HADPR ;w tmpTemplateRef,! Quit GetIDsKostSpecial() Kill %arFakeIDs &sql(DECLARE crsKadKS CURSOR FOR SELECT ID INTO :ID FROM Prod_GADef.KaderDeur WHERE (ID>1000) AND ( (ConstructKostSpecial<>0) OR (ProfAfwKostSpecial<>0) OR (VullingKostSpecial<>0) ) ) &sql(OPEN crsKadKS) For &sql(FETCH crsKadKS) Quit:(SQLCODE) Set %arFakeIDs(ID)="" &sql(CLOSE crsKadKS) Quit ;d RecalcKostSpecial^Prod.GADef.KaderDeur.tmpDev() RecalcKostSpecial() New KadID,KadObj,BEF2EUR Do GetIDsKostSpecial() Set BEF2EUR=1 ; 1/40.3399 Set KadID="" For Set KadID=$Order(%arFakeIDs(KadID)) Quit:(KadID="") Do . Set KadObj=##class(Prod.GADef.KaderDeur).%OpenId(KadID) . Quit:('$IsObject(KadObj)) . Set:(KadObj.ProfAfwKostSpecial) KadObj.ProfAfwKostSpecial=$J(KadObj.ProfAfwKostSpecial*BEF2EUR,0,5) . Set:(KadObj.VullingKostSpecial) KadObj.VullingKostSpecial=$J(KadObj.VullingKostSpecial*BEF2EUR,0,5) . Set:(KadObj.ConstructKostSpecial) KadObj.ConstructKostSpecial=$J(KadObj.ConstructKostSpecial*BEF2EUR,0,5) . Set sc=KadObj.%Save() . w KadID_" "_$S($$$ISERR(sc):$$ParseStatus^vhLib(sc), 1:1),! Quit $$$OK /* /// Verplaatst naar CALCviaGADataProduct^Prod.GADef.KaderDeur.KostPrijs(%this,Staffel,CalcObj) CalcKostPrijsNew(%this,Staffel,CalcObj) #define KADBasis "KADBasis" New KadObj,TemplateID,Prod,arValidPR,KPrijs,arKDtls,BEF2EUR Set KadObj=%this ;Set BldDtl=($IsObject($G(CalcObj))) Set TemplateID=$LG(##class(Prod.GAData.Template).IDsViaCode($$$KADBasis),1) Set Prod=##class(Prod.GAData.Product).BuildFromTemplate(TemplateID) Quit:('$IsObject(Prod)) "" Do Prod.KlantSetObjectId($G(KLNr)) Do Prod.TemplateTmpInit() Do Prod.AutosFromTemplate(,"FILL") Do tnbValuesToProduct Do Prod.CalcAll() Set:($IsObject($G(CalcObj))) CalcObj.DetailGAData=Prod If 'Prod.ValidatePR(.arValidPR) Do ; Quit "" . Do tnbInvalidPR . Set KPrijs="" Else Do . Set KPrijs=+$J($G(Prod.Cumuls("KPrijs")),0,2) ;Set %FRZ("ProfKant")=Prod.Val("LFREZZK") ; for debugging purpose Quit $J(KPrijs,0,2) tnbInvalidPR #define CRLF $C(13,10) New msg,Key,DItem d WLIP^vhDBG(97,"KAD KPCalc New - "_$G(KadID,%this.%Id())_" - %NoSa : "_$G(%NoSa)_" Staffel: "_Staffel) Set msg="Fouten bij de validatie van de producten: " Set Key="" For Set Key=$O(arValidPR(0,Key)) Quit:(Key="") Do . Set DItem=Prod.DataItems.GetAt(Key) . Set msg=msg_$$$CRLF_"> "_DItem.Get("Oms")_" ("_DItem.Code_") : PRNr="""_DItem.Get("PRNr")_"""" ;Do MApplication.MessageBox(msg,"Producten valideren",$$$MBICONEXCLAMATION) d WL^vhDBG(msg) Quit tnbValuesToProduct Do:('$D(Prod.LookUp("PLItem"))) Prod.BuildLookUp($LB("ICode")) ; "PLItem" is onderdeel van BuildLU("ICode") Do tnbSetViaObj(KadObj) Do tnbSetViaProgLabel("QTY",Staffel) Set sc=$$tnbSetDItemKadObj(KadObj) Do Prod.BuildLookUp($LB("PL")) Quit tnbSetViaObj(KadObj) Do tnbSetViaProgLabel("TOEP",KadObj.Toepassing.ItemID) Do tnbSetViaProgLabel("PH",KadObj.Hoogte) Do tnbSetViaProgLabel("PB",KadObj.Breedte) Do tnbSetViaProgLabel("PT",KadObj.ProfType.ItemID) Do tnbSetViaProgLabel("PA",KadObj.ProfAfw.ItemID) If $IsObject(KadObj.Vulling.Vulling) Do . Do tnbSetViaProgLabel("VULCODE",KadObj.Vulling.Vulling.ItemID) . Do tnbSetViaProgLabel("LVE",$$tnbListVullingExtras()) . Do tnbSetViaProgLabel("VULOPP",KadObj.VulOpp()) . Do tnbSetViaProgLabel("VULOMTREK",KadObj.VulOmtrek()) Do tnbSetViaProgLabel("OPH",KadObj.OphangPlaats.ItemID) Do tnbSetViaProgLabel("LBSL","") Do tnbSetViaProgLabel("LBSL2","") Do tnbSetViaProgLabel("LBOR","") Do tnbSetViaProgLabel("MON",KadObj.Gemonteerd) Do tnbSetViaProgLabel("VPK",KadObj.Verpakking) Do tnbSetViaProgLabel("DOSNR",KadObj.Dossier) Set BEF2EUR=1 ; 1/40.3399 Do tnbSetViaProgLabel("PROFKS",KadObj.ProfAfwKostSpecial*BEF2EUR) Do tnbSetViaProgLabel("VULKS",KadObj.VullingKostSpecial*BEF2EUR) Do tnbSetViaProgLabel("CONSKS",KadObj.ConstructKostSpecial*BEF2EUR) Do tnbSetViaProgLabel("GEWICHT",KadObj.Gewicht()) Do tnbSetViaProgLabel("PWIJZE",$S(1:KadObj.ProductieWijzeGetObjectId(), ..cboLosProfDeel.ItemIndex>-1:"LPR", 1:"")) Do tnbSetViaProgLabel("ODEEL",$$ObjectListToLB^vhLib(KadObj.Onderdelen)) Quit tnbListVullingExtras() Quit:('$IsObject(KadObj.Vulling)) New Key,VE,tmpLB Set (tmpLB,Key)="" For Set VE=KadObj.Vulling.VullingExtra.GetNext(.Key) Quit:(Key="") Set tmpLB=tmpLB_$LB(VE.ItemID) Quit tmpLB tnbSetViaProgLabel(ProgLabel,Val) Do Prod.SetItemValByPL(ProgLabel,Val) Quit tnbSetDItemKadObj(KadObj) #define NodePLItem "PLItem" New Item,ProgLabel Set ProgLabel="KADOBJ" Set Item=$G(Prod.LookUp($$$NodePLItem,ProgLabel,"IOref")) Quit:('$IsObject(Item)) $$$ERROR($$$GeneralError,"No Item Object") Set Item.FixedKeys=$LB("Object") ; Temporary set key fixed, else it will be cleared before Re-CalcAll() Quit Item.SetObject(KadObj) Quit $$$OK */ // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // // ANALYSE VAN DE NIEUWE PRIJZEN (t.o.v huidige KostPrijs in ^KPR) (dd. juni 2006) // // // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // ; w $$CheckNewPrs^Prod.GADef.KaderDeur.tmpDev() CheckNewPrs(KadIDCust,SelectKLNr) Do WLIP^vhDBG(97,"CheckNewPrs") New sc W "Killing large variables. Please wait ...",! Kill %arFakeIDs Kill %arLOG,%arLOGI,%arLOGD W "Start processing ...",! ;Set %arLOG(0)=$LB("[NP]","[OP]","[DIFF]","Toepas","Prof","Vul","Hgt","Brd","Qty","FrezZK","LVE","VPKType","ProfKS","VulKS","ConsKS") ;Set %arLOGD("KLNr","KKey","PRNr")=$LB("KadID","","FxPRS","other PRS","RelDiff") Set:($G(KadIDCust)) %arFakeIDs(KadIDCust)="" ; KadID /* * / Set %arFakeIDs(104295)="" ; KadID Set %arFakeIDs(104318)="" Set %arFakeIDs(255644)="" Set %arFakeIDs(256223)="" Set %arFakeIDs(263864)="" Set %arFakeIDs(264165)="" /* */ Set sc=$$CheckNewPrices("") ; 250000) Do cnpCompareSimilar() ;w $$$ArrayTT("log(""SAME"")",.%arLOG),! ;w $$$ArrayTT("log(""DIFF"")",.%arLOG),! ;w $$$ArrayTT("%arLOG"),! Do:($L($G(SelectKLNr))) ArrayToTabDelim^vhLib(.%arLOG,"c:\temp\KadPrijsChk_003.txt",,"") Do ArrayToTabDelim^vhLib(.%arLOGD,"c:\temp\KadPrijsChkDiff_"_$S($L($G(SelectKLNr)):SelectKLNr_"_",1:"")_"003.txt",,"") Quit sc CheckNewPrices(StartPRNr) #define Pc(%i) $P(Rec,"\",%i)_"\" #define Pc2(%i,%j) $P(Rec,"\",%i,%j)_"\" New PRNr,KadID,CalcObj,Qty,KLNr,OldPRS,NewPRS,Rec,KKey ; KadObj,KPrijs,PrevPRS,lbBadIDs Set PRNr=$G(StartPRNr,"") For Set KadID=$$cnpNextFromKPR(.PRNr) Quit:(PRNr="") Do . Quit:(KadID<1000) . Set NewPRS=$P(^KPR(PRNr,2),"\",3) . Quit:('NewPRS) ; SchaduwPrijs nog niet ingevuld . ; Get Objects . Quit:('##class(Prod.GADef.KaderDeur).%ExistsId(KadID)) . Set CalcObj=##class(Prod.GADef.KadPrijs).%OpenId(KadID) . Quit:('$IsObject(CalcObj)) . w PRNr_" "_KadID,! . Set Qty=CalcObj.Aantal . Set KLNr=$O(^KSTPR(PRNr,0)) Set:(KLNr="") KLNr="0" . Quit:($L($G(SelectKLNr)))&&(KLNr'=SelectKLNr) . Set Rec=$G(^KPR(PRNr,"G")) . Set OldPRS=$P(Rec,"\",12) . ;w:(OldPRS'=$P(^KPR(PRNr,"J6332"),"\",19)) "HLX:"_$P(^KPR(PRNr,"J6332"),"\",19)_" "_OldPRS,! . ;d:(OldPRS'=$P(^KPR(PRNr,"J6332"),"\",19)) WL^vhDBG(KadID_" "_"HLX:"_$P(^KPR(PRNr,"J6332"),"\",19)_" "_OldPRS) . ;Set:(OldPRS="") OldPRS=$P(^KPR(PRNr,"J6332"),"\",19) . Do:($J(NewPRS,0,2)'=$J(CalcObj.TotaleKostPrijs,0,2)) WL^vhDBG(KadID_" NewPRS NIET gelijk : "_NewPRS_" - CalcObj: "_CalcObj.TotaleKostPrijs) . Do:(KadID'=$P(Rec,"\",13)) WL^vhDBG(KadID_" NIET gelijk aan ID in ""G""-node : "_$P(Rec,"\",13)) . Set KKey=$$$Pc(2)_$$$Pc(5)_$$$Pc2(8,9)_$$$Pc(10)_$$$Pc(11)_$$$Pc(14)_$$$Pc(6) . Set %arLOG(KLNr,KKey,PRNr)=$LB(Qty,KadID,$P(Rec,"\",1),OldPRS,"-->",NewPRS) . Set %arLOGI(KadID)=$LB(KLNr,PRNr,KKey) Quit $$$OK cnpCompareSimilar() New KLNr,KKey,PRNr,blnDiff Set (KLNr,KKey,PRNr)="" For Set KLNr=$O(%arLOG(KLNr)) Quit:(KLNr="") Do . W KLNr,! . For Set KKey=$O(%arLOG(KLNr,KKey)) Quit:(KKey="") Do . . Set blnDiff=0 . . For Set PRNr=$O(%arLOG(KLNr,KKey,PRNr)) Quit:(PRNr="") Set %arLOG(KLNr,KKey,PRNr)=%arLOG(KLNr,KKey,PRNr)_$$cnpCalcRelDiffLB(PRNr,.blnDiff) . . Do:(blnDiff) WL^vhDBG("KLNR: "_KLNr_" "_KKey) . . Merge:(blnDiff) %arLOGD(KLNr,KKey)=%arLOG(KLNr,KKey) . Kill:($G(SelectKLNr)="") %arLOG(KLNr) Quit cnpCalcRelDiffLB(FixedPRNr,blnOver) ; blnOver als .local doorgeven #define RelMarge 5 #define iPRS $LI(%arLOG(KLNr,KKey,iPRNr),6) #define iOldPRS $LI(%arLOG(KLNr,KKey,iPRNr),4) #define FactOld $S('FxOldPRS||'$$$iOldPRS:1, 1:FxOldPRS/$$$iOldPRS) New FxPRS,FxOldPRS,tmpLB,iPRNr,iPRS,RelDiff Set FxPRS=$LI(%arLOG(KLNr,KKey,FixedPRNr),6) Set FxOldPRS=$LI(%arLOG(KLNr,KKey,FixedPRNr),4) Set tmpLB="" Set iPRNr=FixedPRNr ; Start $ORDER() from FixedPRNr For Set iPRNr=$O(%arLOG(KLNr,KKey,iPRNr)) Quit:(iPRNr="") Do . Set RelDiff=$J((FxPRS-($$$iPRS*$$$FactOld))/FxPRS*100,0,1) . ;Do WL^vhDBG("KLNR: "_KLNr_" "_RelDiff) . Set tmpLB=tmpLB_$LB(RelDiff) . If $ZAbs(RelDiff)>$$$RelMarge Do . . Set blnOver=1 . . Do WL^vhDBG("KLNR: "_KLNr_" KadID: "_$LI(%arLOG(KLNr,KKey,FixedPRNr),2)_" 5% marge overschreden : "_FxPRS_" - "_$$$iPRS_" ("_$J($$$FactOld,0,3)_") -> "_RelDiff) ;Set %arLOGD(KLNr,KKey,FixedPRNr)=$LB($LI(%arLOG(KLNr,KKey,FixedPRNr),2)," >5% ",FxPRS,iPRS,RelDiff) Quit tmpLB ; Set %arLOGD("KLNr","KKey","PRNr")=$LB("KadID","","FxPRS","other PRS","RelDiff") // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // // VERGELIJKING VAN DE PRIJSBEREKENING (nieuwe methode: via Prod.GAData) (dd. juni 2006) // // // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // ; w $$ComparePrs^Prod.GADef.KaderDeur.tmpDev() ComparePrs(KadIDCust) New sc Kill %arFakeIDs Kill %arLOG Set %arLOG(0)=$LB("[NP]","[OP]","[DIFF]","Toepas","Prof","Vul","Hgt","Brd","Qty","FrezZK","LVE","VPKType","ProfKS","VulKS","ConsKS") Set:($G(KadIDCust)) %arFakeIDs(KadIDCust)="" ; KadID /* * / Set %arFakeIDs(104295)="" ; KadID Set %arFakeIDs(104318)="" Set %arFakeIDs(255644)="" Set %arFakeIDs(256223)="" Set %arFakeIDs(263864)="" Set %arFakeIDs(264165)="" /* */ Set sc=$$CompareNewPrices(1,240000) ; 240000) ;w $$$ArrayTT("log(""SAME"")",.%arLOG),! ;w $$$ArrayTT("log(""DIFF"")",.%arLOG),! w $$$ArrayTT("%arLOG"),! Do ArrayToTabDelim^vhLib(.%arLOG,"c:\temp\KadPrijsCmp_004.txt",,"") Quit sc CompareNewPrices(blnSimulate,StartPRNr) #define SINGLESaveGAData ($O(%arFakeIDs($O(%arFakeIDs(""))))="")&&($O(%arFakeIDs(""))'="") #define DEBUGSaveGAData 0 New PRNr,KadID,KadObj,KPrijs,CalcObj,PrevPRS,Qty,lbBadIDs New Munt,BldDtl,ForceRecalc Set PRNr=$G(StartPRNr,"") For Set KadID=$$cnpNextFromKPR(.PRNr) Quit:(PRNr="") Do . Quit:(KadID<1000) . ; Get Objects . Set KadObj=##class(Prod.GADef.KaderDeur).%OpenId(KadID) . Quit:('$IsObject(KadObj)) . Set CalcObj=##class(Prod.GADef.KadPrijs).%OpenId(KadID) . Quit:('$IsObject(CalcObj)) .; ; w PRNr_" "_KadID,! .; ; Get previous values .; Set Qty=CalcObj.Aantal .; Set PrevPRS=CalcObj.TotaleKostPrijs . ; Calc new price . Set KPrijs=$$cmpCalcPrice(KadObj,CalcObj,blnSimulate&&('$G(KadIDCust))) . Do:($$$DEBUGSaveGAData)||($$$SINGLESaveGAData) CalcObj.SaveGADataDtl() ; ckpSaveProdGAData() . ; Handle result .; Set:(PrevPRS'=KPrijs) %arLOG("DIFF",KadID)=$LB(PRNr,Qty,PrevPRS,"->",KPrijs) .; Set:(PrevPRS=KPrijs) %arLOG("SAME",KadID)=$LB(PRNr,Qty,KPrijs) . If blnSimulate Do . . Write "Kad: "_KadID,! ; _" (#="_Qty_") "_PrevPRS_" --> "_KPrijs,! . Else Do . . Set tmpPRNr=$S(KadID=PRNr:KadObj.ProductGetObjectId(), 1:PRNr) ; 230848 . . Set $P(^KPR(tmpPRNr,2),"\",3)=$J(KPrijs,0,2) . . Set $P(^KPR(tmpPRNr,1),"\",3)="EUR" . . w tmpPRNr _" " ;_(^KPR(tmpPRNr,2)),! Quit $$$OK cmpCalcPrice(KadObj,CalcObj,blnCalcOnly) Quit:(blnCalcOnly) KadObj.KostPrijsCalc(CalcObj.Aantal) ; Else: Store in CalcObj Set Munt="" Set BldDtl=$G(KadIDCust)>0 ; 0 ; (CalcObj.HasDetails()) Set ForceRecalc=1 Quit KadObj.KostPrijs(CalcObj.Aantal,Munt,BldDtl,ForceRecalc) // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // // BEREKENING VAN DE SCHADUWPRIJS in het kader van de prijsverhoging (dd. mei 2006) // // Twee fasen: 1) simulatie met output naar device // // 2) invullen van de nieuwe waarde in de SCHADUWPRIJS // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // ; w $$SimNewPrs^Prod.GADef.KaderDeur.tmpDev() SimNewPrs(KadIDCust) New sc Kill %arLOG If ($G(KadIDCust)) Do . Kill %arFakeIDs . Set %arFakeIDs(KadIDCust)="" ; KadID ;Set %arFakeIDs(265418)="" ; KadID /* * / Set %arFakeIDs(104295)="" ; KadID Set %arFakeIDs(104318)="" Set %arFakeIDs(255644)="" Set %arFakeIDs(256223)="" Set %arFakeIDs(263864)="" Set %arFakeIDs(264165)="" /* */ Set %NoSa="S" Set sc=$$CalcNewPrices(1,"240000") ; 240000) Kill %NoSa ;w $$$ArrayTT("log(""SAME"")",.%arLOG),! ;w $$$ArrayTT("log(""DIFF"")",.%arLOG),! w $$$ArrayTT("%arLOG"),! Do ArrayToTabDelim^vhLib(.%arLOG,"c:\temp\KadPrijsCmp_007.txt",,"") Quit sc ; Do KPRFillSH^Prod.GADef.KaderDeur.tmpDev() KPRFillSH(KadIDCust) New sc Kill %arLOG If ($G(KadIDCust)) Do . Kill %arFakeIDs . Set %arFakeIDs(KadIDCust)="" ; KadID Set %NoSa="S" Set sc=$$CalcNewPrices(0,"") Kill %NoSa Do ArrayToTabDelim^vhLib(.%arLOG,"c:\temp\KadPrijsCmp_008.txt",,"") Quit sc TestD() New arDiff,KadID,PRNr,Delta,PrsKPR ;Do LoadDiff() Merge arDiff=%arLOG("DIFF") Set KadID="" For Set KadID=$O(arDiff(KadID)) Quit:(KadID="") Do . Set PRNr=$LG(arDiff(KadID),1) . Quit:PRNr="" . Set PrsKPR=$P($G(^KPR(PRNr,"G")),"\",12) . Set:(PrsKPR'=$J($LG(arDiff(KadID),3),0,2)) arDiff(0,"PrsKPR",KadID)=PrsKPR . ;w PRNr_": " zw ^ORD("IP",PRNr) zw ^BON("IP",PRNr) zw ^TO("IP",PRNr) w ! . w PRNr_": " w ! ; zw ^PRHIST(PRNr) w ! . ;Set:($D(^PRHIST(PRNr))) arDiff(KadID,"HIST")=1 . Set Delta=$LG(arDiff(KadID),5)-$LG(arDiff(KadID),3) . Set $LI(arDiff(KadID),6)="D= "_$J(Delta,0,2) . Set arDiff(0,"DATA",KadID)=$$tstGetKadPropts(KadID) . If '$D(^PRHIST(PRNr)) Do . . Merge arDiff(0,"NoHist",KadID)=arDiff(KadID) . . Merge:($D(^KOFKLP(PRNr))) arDiff(0,"OFF","NoHist",KadID)=arDiff(KadID) . . Kill arDiff(KadID) . ;Merge:('$D(^PRHIST(PRNr))) arDiff(0,"NoHist",KadID)=arDiff(KadID) . ;Merge:('$D(^PRHIST(PRNr)))&&($D(^KOFKLP(PRNr))) arDiff(0,"NoHist","OFF",KadID)=arDiff(KadID) . ;Kill:('$D(^PRHIST(PRNr))) arDiff(KadID) . Merge:($D(^KOFKLP(PRNr))) arDiff(0,"OFF","Hist",KadID)=arDiff(KadID) ;Do WLIP^vhDBG(97,$$$ArrayTT("arDiff")) Do ArrayToTextWF^vhLib("arDiff","c:\temp\KadPrijsLog_009.txt") Quit tstGetKadPropts(KadID) New tmpID,tmpAr,tmpCode &sql(SELECT ID, Vulling_Vulling, Vulling_VullingExtra, Breedte, Hoogte, TemplateUsed, ProfType, ProfAfw, Toepassing, Product, TemplateRoutine, WijzigTijdStip INTO :tmpID, :tmpAr(1), :tmpAr(2), :tmpAr(3), :tmpAr(4), :tmpAr(5), :tmpAr(6), :tmpAr(7), :tmpAr(8), :tmpAr(9), :tmpAr(10), :tmpAr(11) FROM Prod_GADef.KaderDeur WHERE ID=:KadID) Quit $J($LG(arDiff(KadID),6),14)_" "_$J($G(tmpAr(1)),8)_" "_$J($$$LCVT($G(tmpAr(2))),16)_" "_$J($G(tmpAr(3)),7)_" "_$J($G(tmpAr(4)),7)_" "_$J($G(tmpAr(5)),7)_" "_$J($G(tmpAr(6)),7)_" "_$J($G(tmpAr(7)),7)_" "_$G(tmpAr(8))_" "_$G(tmpAr(9))_" "_$G(tmpAr(10))_" "_$G(tmpAr(11)) Quit "" TestC() New arDiff,KadID,CalcObj,arComp Do LoadDiff() Set KadID="" For Set KadID=$O(arDiff(KadID)) Quit:(KadID="") Do . Set CalcObj=##class(Prod.GADef.KadPrijs).%OpenId(KadID) . Set:('$IsObject(CalcObj)) arComp("NoCalc",KadID)="" . Quit:('$IsObject(CalcObj)) . ;Set:(CalcObj.HasDetails()) arComp("NoDtl",KadID)="" . Set arComp($S(CalcObj.HasDetails()>0:"DTL",1:"NoDtl"),KadID)="" Do WLIP^vhDBG(97,$$$ArrayTT("arComp(""NoCalc"")",.arComp)) Do WLIP^vhDBG(97,$$$ArrayTT("arComp(""DTL"")",.arComp)) Do WLIP^vhDBG(97,$$$ArrayTT("arComp(""NoDtl"")",.arComp)) Quit CalcNewPrices(blnSimulate,StartPRNr) New PRNr,KadID,KadObj,KPrijs,CalcObj,PrevPRS,Qty,lbBadIDs New Munt,BldDtl,ForceRecalc Set lbBadIDs="" ; $LB(97870,97871,239511) Set PRNr=$G(StartPRNr,"") For Set KadID=$$cnpNextFromKPR(.PRNr) Quit:(PRNr="") Do . Quit:(KadID<1000) . w !,KadID_" " . q:(KadID<108222) ; q:(KadID>266440) . ;Quit:($LF(lbBadIDs,KadID)>0) . ; Get Objects . Set KadObj=##class(Prod.GADef.KaderDeur).%OpenId(KadID) . Quit:('$IsObject(KadObj)) . Set CalcObj=##class(Prod.GADef.KadPrijs).%OpenId(KadID) . Quit:('$IsObject(CalcObj)) . ;w PRNr_" "_KadID,! . Set tmpPRNr=$S(KadID=PRNr:KadObj.ProductGetObjectId(), 1:PRNr) ; 230848 . ; Get previous values . Set Qty=CalcObj.Aantal . Set PrevPRS=CalcObj.TotaleKostPrijs . Set PrevPRS=$P(^KPR(tmpPRNr,2),"\",3) ; CalcObj.TotaleKostPrijs . ; Calc new price . Set KPrijs=$$cnpCalcPrice(KadObj,CalcObj,blnSimulate) . Set $LI(%arLOG(KadID),2)=PrevPRS . Set $LI(%arLOG(KadID),3)=$LI(%arLOG(KadID),1)-$LG(%arLOG(KadID),2) . ; Handle result . ;Set:(PrevPRS'=KPrijs) %arLOG("DIFF",KadID)=$LB(PRNr,Qty,PrevPRS,"->",KPrijs) . ;Set:(PrevPRS=KPrijs) %arLOG("SAME",KadID)=$LB(PRNr,Qty,KPrijs) . If blnSimulate Do . . Write "Kad: "_KadID,! ; _" (#="_Qty_") "_PrevPRS_" --> "_KPrijs,! . Else Do . . Set tmpPRNr=$S(KadID=PRNr:KadObj.ProductGetObjectId(), 1:PRNr) ; 230848 . . Set $P(^KPR(tmpPRNr,2),"\",3)=$J(KPrijs,0,2) . . Set $P(^KPR(tmpPRNr,1),"\",3)="EUR" . . w tmpPRNr _" " ;_(^KPR(tmpPRNr,2)),! Quit $$$OK cnpNextFromKPR(PRNr) ; PRNr als .local doorgeven #define FromArray 0 If $$$FromArray || ($$$aHasSubNodes(%arFakeIDs)) Do Quit KadID . Set PRNr=$O(%arFakeIDs(PRNr)) . Set KadID=PRNr ; Else Loop through ^KPR Set PRNr=$O(^KPR(PRNr)) Quit:(PRNr="") "" Quit:(PRNr'?4.7N) "" Quit:($P($$GENTYP^HAD(PRNr),"\",1)'?1(1"KAD",1"PRF",1"GLA")) "" Set KadID=$P($G(^KPR(PRNr,"G")),"\",13) Quit KadID cnpCalcPrice(KadObj,CalcObj,blnCalcOnly) Quit:(blnCalcOnly) KadObj.KostPrijsCalc(CalcObj.Aantal) ; Else: Store in CalcObj Set Munt="" Set BldDtl=0 ; (CalcObj.HasDetails()) Set ForceRecalc=1 Quit KadObj.KostPrijs(CalcObj.Aantal,Munt,BldDtl,ForceRecalc) LoadDiff() Merge arDiff=^wvKadDiff Quit // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // /* ; OPROEPEN via: Do PrijsAnalyse^Prod.GADef.KaderDeur.tmpDev( ,.ar) PrijsAnalyse(KadID,RetArray) Kill RetArray Quit:($G(KadID)="") New KadObj,KPrs New QtyStaffel,Munt,BldDtl,ForceRecalc Set KadObj=##class(Prod.GADef.KaderDeur).%OpenId(KadID) Quit:('KadObj) Set QtyStaffel=$$praGetQtyStaffel(KadID) If QtyStaffel'>0 Do Quit . ;Write "QtyStaffel onbekend !" . Set RetArray="QtyStaffel onbekend !" Else Do . ;Write "KadID: "_KadID_" Qty:"_QtyStaffel,! ; Else Set Munt="" Set BldDtl=1 ;Set ForceRecalc=0 Set KPrs=KadObj.KostPrijs(QtyStaffel,Munt,BldDtl,$G(ForceRecalc)) Set KadObj="" ; Calc prices Set MatKost=$$praCalcMatKost(KadID) Set lbProdKost=$$praCalcProdKost(KadID) Set ProdKost=$LG(lbProdKost,1) Set ProdTijd=$LG(lbProdKost,2) ; Build return Array Set RetArray("KPrijs")=KPrs Set RetArray("MatKost")=MatKost Set RetArray("ProdKost")=ProdKost Set RetArray("ProdTijd")=ProdTijd zw RetArray Quit praGetQtyStaffel(KadID) // Dit SQL-statement geeft de objecten weer die geen KadPrijs-object hebben ==> QtyStaffel is onbekend !!! // SELECT KD.* FROM Prod_GADef.KaderDeur AS KD,Prod_GADef.KadPrijs AS KP // WHERE (KD.ID=*KP.ID) AND (KP.ID is null) and (KD.TemplateRoutine="" or KD.TemplateRoutine is null ) // New CalcObj,tmpQty Set CalcObj=##CLASS(Prod.GADef.KadPrijs).%OpenId(KadID) Quit:('CalcObj) 0 Set tmpQty=CalcObj.Aantal Set CalcObj="" Quit tmpQty praCalcMatKost(KadID) New RS,sQuery,tmpStatus,Sum Set Sum=0 Set RS=##class(%ResultSet).%New("Prod.GADef.KadPrijs:LijstMateriaalKost") Set tmpStatus=RS.Execute(KadID) For Quit:('RS.Next()) Do . Set Sum=Sum+RS.Get("MatKost") . ;RS.Get("ID") ;RS.Get("KostCode") ;RS.Get("MatKost") Do RS.%Close() Quit Sum praCalcProdKost(KadID) New RS,sQuery,tmpStatus,SumK,SumT Set (SumK,SumT)=0 Set RS=##class(%ResultSet).%New("Prod.GADef.KadPrijs:LijstProductieKost") Set tmpStatus=RS.Execute(KadID) For Quit:('RS.Next()) Do . Set SumK=SumK+RS.Get("TijdKost") . Set SumT=SumT+RS.Get("Tijd") . ;RS.Get("ID") ;RS.Get("KostPlaats") ;RS.Get("TijdKost") ;RS.Get("Tijd") Do RS.%Close() Quit $LB(SumK,SumT) */