#include vhLib.Macro #include %occInclude // Returns Float value or $LB() when KostType="T2" KostLoop() ; Parameters: KostType #define NumWithZeros(%v) $TR($J(%v,3)," ","0") #define KDelim "-" New Som1,Som2,Self,Meta,GAData,Staffel,ChildID,Templ,TemplProd,TPDItem,KostArray,emKost,Key,blnTijdKost,SubKost,lbIDs,i,KostMatObj,KostMatID,scK,lbMatKost,tmpLB Set (Som1,Som2)=0 Set Self=%this Set Meta=..MetaItem Set GAData=..Product.GAData ; !!! Version is NOT COMPATIBLE with CACHE02 !!! Set Staffel=Self.Val("Staffel") Set:('Staffel) Staffel=1 ; Nieuwe prijzen : "prijslijst klanten" bestaat niet meer ==> in commentaar gezet op 22/10/04 door WimV. ;Set:(('..Product.Klant) || (..Product.Klant.Prijsklasse="P")) Staffel=1 ; Voor prijslijst klanten mag de productiestaffel niet toegekend worden Set ChildID=..Code Set Templ=..Product.TemplateTmp Set TemplProd=$S(Templ.SchaduwActief:Templ.SchaduwProduct, 1:Templ.Product) Set TPDItem=TemplProd.DataItemsGetChildAt(ChildID) Set KostArray=$S(KostType="M":TPDItem.KostMat,1:TPDItem.KostTijd) ; MatKost of TijdKost - array of objects Set blnTijdKost=(KostType="T2") Set lbMatKost="" If (..Autos.IsDefined("LoopList")) Do . Set %KostType=KostType . Set lbIDs=..EvalTemplAuto("LoopList") ; lbIDs=1 --> std kost; lbIDs="" --> geen kostcalc ! . Kill %KostType Set scK=$$$OK If ($G(lbIDs,1)=1)||('$$IsList^vhLib(lbIDs)) Do ; alle KostParams van DItem één maal doorlopen . Do kstLoopParams($$$KDelim_ChildID) . Set lbIDs="" For i=1:1:$LL(lbIDs) Do:($LD(lbIDs,i)) ; alle KostParams van DItem n maal doorlopen, waarbij n het aantal is in lbIDs. . Set %LoopKey=$LI(lbIDs,i) . Do kstLoopParams($$$KDelim_ChildID_"#"_i_$S(%LoopKey="":"", 1:$$$KDelim_%LoopKey)) Kill %LoopKey Do:(KostType="M") ..Parameters.SetAt(lbMatKost,"lbMatKost") d:($$$ISERR(scK)) WL^vhDBG("Fout in KostObj (Type M/T/T2: "_KostType_"): "_$$ParseStatus^vhLib(scK)) Quit:($$$ISERR(scK)) $S(blnTijdKost:$LB(9999+$J(Som1,0,2),"ERROR"), 1:scK) Quit $S(blnTijdKost:$LB($J(Som1,0,2),$J(Som1,0,2)), KostType="T":$J(Som1,0,2), 1:$J(Som1,0,4)) kstLoopParams(LoopKey) ; Looping door de kosttijd/mat elementen Set Key="" For Set emKost=KostArray.GetNext(.Key) Quit:(Key="")||($$$ISERR(scK)) Do . Quit:(+emKost.StaffelMin>Staffel) ; Min is ingevuld en Staffel is kleiner dan Min . Quit:(emKost.StaffelMax)&&(emKost.StaffelMax'>Staffel) ; Max is ingevuld en Staffel is groter dan Max . Set %KeyKDtl=Key_$G(LoopKey) . Set SubKost=emKost.Calc(Staffel) . If (SubKost="ERROR") Do Quit . . Set scK=$$$ERROR($$$GeneralError,"Fout bij emKost.Calc()") . . Set SubKost=0 . ; Else Do . Set tmpLB="" . If KostType="M" Do . . Set tmpLB=$LB(SubKost) . . Quit:(emKost.KostMatID="") ; MatKost meteen naar EUR omgezet in AParam en BParam, geen MatKost-omrekening nodig . . Kill KostMatID,ErrorMsg . . Set KostMatObj=emKost.GetKostMatObj(%this,.KostMatID,.ErrorMsg) ; MatKostID wordt ingevuld . . Set:($D(arKDtl(%KeyKDtl))) $LI(arKDtl(%KeyKDtl),4)=$S(KostMatID="":"~", 1:KostMatID) . . ;d WLIP^vhDBG(97,"KostMatObj : "_KostMatObj_" - ID="_KostMatID) . . If $L($G(ErrorMsg)) Do . . . Set scK=$$$ERROR($$$GeneralError,ErrorMsg) . . Else If $IsObject(KostMatObj) Do . . . Set SubKost=$J(KostMatObj.MatKostCalc(SubKost,$G(%NoSa)),0,4) . . . Set tmpLB=tmpLB_$LB(KostMatID,SubKost) ; KostMatObj.%Id() . . Else If KostMatID="" Do . . . ; ; MatKost meteen naar EUR omgezet, geen MatKost-omrekening nodig . . . Set SubKost=$J(SubKost,0,4) . . . Set tmpLB=tmpLB_$LB(KostMatID,SubKost) ; KostMatObj.%Id() . . Else Do . . . Set scK=$$$ERROR($$$GeneralError,"Geen KostMat-object") . . Set:($D(arKDtl(%KeyKDtl))) $LI(arKDtl(%KeyKDtl),1)=$S($$$ISERR(scK):"ERROR",1:"")_SubKost . Set Som1=Som1+SubKost . Set:(blnTijdKost) Som2=Som2+emKost.StaffelCorr(SubKost,Staffel) . Set:(KostType="M") lbMatKost=lbMatKost_$LB(tmpLB) Kill %KeyKDtl Quit ; opgeroepen via Prod.GAMeta.EM.KostTijd StaffelCorr() ; Param : Waarde,Staffel Quit Waarde*$S($D(%KadObj)&&(Staffel=10)&&((%this.Multiplicant_%this.Reductie)["Staffel"):2, 1:1) ; Indien Staffel=10 dan niet ineens delen door 10 maar wel door 5 //Set:(Staffel=10)&(%this.Variabelen["Staffel") TijdKost=TijdKost*2 - ENKEL EN ALLEEN ALS Staffel IN DE BEREKENINGSFORMULE VOORKOMT !!! ; opgeroepen via Prod.GAMeta.EM.KostTijd CalcOne() ; Parameters: Staffel,BldDtl New Multi,Reductie,Tijd,TijdKost,Mat,TijdViaMin,MatViaMin,MatBasis2,MatMultiplicant2,MatMin2,Waarde,WaardeViaMin,scKDtl Set Multi=$J($$caoEvalExec(..Multiplicant),0,4) Set Reductie=$J($$caoEvalExec(..Reductie),0,4) Quit:($$$ISERR($G(scKDtl,$$$OK))) "ERROR" Set Waarde=(Multi*..AParam)+..BParam Set:(Waarde) Waarde=$S(Waarde>..Min:Waarde,1:..Min) Set WaardeViaMin=(Waarde=..Min) Set Waarde=Waarde*Reductie ; Reductie in rekening brengen ... ;Set:($D(%KadObj)&&(Staffel=10)&&((..Multiplicant_..Reductie)["Staffel")) Waarde=Waarde*2 ; TEMP Staffelcorrectie voor Kaderdeur bij Staffel=10 Set:($L(%KeyKDtl)) arKDtl(%KeyKDtl)=$LB(Waarde,Multi,Reductie) ; Debug voor de waarden van het KostDtl-object ;Do caoBuildKostDtls ; Oude methode voor Debug-info Quit Waarde caoEvalExec(sExec) Quit:($L(sExec,"`")=1) sExec New RetVal Do EXEC^vhRES($P(sExec,"`",1),$P(sExec,"`",2),"RetVal",,"caoTRAP^"_$ZN) ; RetVal wordt teruggekregen Quit RetVal caoTRAP Set $ZTRAP="" Set scKDtl=$$$ERROR($$$GeneralError,"Fout bij Kost-object") New msg Set msg="EXECUTE FOUT: "_sTyp_"`"_sExecTxt_"`"_$G(sParList) Do WLFMT^vhDBG(msg,"A") Do WLFMT^vhDBG("Bij .EM.KostTijd-object, oms="_..Omschrijving,"A") Do WL^vhDBG("ErrorMsg bij EXECUTE : "_$$$CRLF_$ZE) Do:($D(MApplication)) MApplication.MessageBox(msg) ; Foutmelding voor Makova Set RetVal="" ; 0.001 Quit 1 ; Doorgeven errormelding /* caoBuildKostDtls If 0, Mat!Tijd,CalcObj Do .Set CalcDtlObj=##class(Prod.GADef.emKadPrijsDtl).%New() .Set CalcDtlObj.Groep=%this.KostGroep .Set CalcDtlObj.KostCode=%this.ItemID ; voor array elementen ==> element_key .Set CalcDtlObj.KostPlaats=%this.KostPlaats .Set CalcDtlObj.SortNr=%this.Sort .Set CalcDtlObj.Multiplicant=Multi .Set CalcDtlObj.Reductor=Reductie .Set CalcDtlObj.Tijd=$J(Reductie*Tijd,0,0) .Set CalcDtlObj.TijdKost=TijdKost .Set CalcDtlObj.TijdViaMin=TijdViaMin .Set CalcDtlObj.Variabelen=$$EVALVAR(%this.Variabelen) .Set VolgNr=VolgNr+1 .Do CalcObj.Details.SetAt(CalcDtlObj,VolgNr) .Do CalcDtlObj.%Close() Quit EVALVAR(Vars) New Result,I,Var,Val Set Result="" For I=1:1:$L(Vars,";") Do .Set Var=$P(Vars,";",I) .Quit:'$L(Var) .X "Set Val=$G("_Var_",""???"")" .Set Result=Result_"; "_Var_"="_Val Quit $E(Result,3,999) */