1 %RegisteredObject 0 Produceert een orgaluxproduct waarvan 1 van de kinderen (InTeKortenPRNr) op maat te maken is. OrgaluxProduct:DOM.PM.OLProduct.OLProduct,InbouwBreedte:%Integer DOM.PM.OLProduct.OLProduct = BreedteOLProduct) { Do ##class(TECH.ExceptionHandler).Throw(##class(APPS.PM.Maatwerk.OLM.OrgaluxOpMaatException).%New(##class(TECH.enu.ExceptionCode).InvalidInput(),"De inbouwbreedte mag niet groter zijn dan het ORGALUX product")) } Set OrgaluxProductOpMaat = "" Set ProductAPI = ##class(DOM.DomeinContext).Instance().GeefProductAPI() // Kopiƫren van het orgalux product Set PRNr = ..KopieerProduct(OrgaluxProduct) // Bepalen van het product dat moet verwijderd worden Set TeVervangenProduct = TeVervangenKinderen.GetAt(1).GeefProduct() Set BreedteInTeKortenProduct = ..GeefBreedteTeVervangenProduct(TeVervangenProduct,BreedteOLProduct) Kill ^PRBS("BS",PRNr,TeVervangenKinderen.GetAt(1).GeefID()) // Berekenen van de ingekorte producten Set InTeKortenProduct = InTeKortenKinderen.GetAt(1).GeefProduct() Set InTeKortenPRNr = InTeKortenProduct.GeefPRNr() // Bepalen van het verschil in lengte tussen het in te korten product en het orgalux product // Op deze manier kan de nieuwe lengte berekend worden voor het in te korten product zodat deze in de nieuwe lade past Set AantalInTeKorten = InTeKortenKinderen.GetAt(1).GeefAantal() Set InTeKortenNaar = InbouwBreedte - (BreedteOLProduct - BreedteInTeKortenProduct) Set IngekortProduct = ..BerekenIngekortProduct(InTeKortenProduct, TeVervangenProduct, InTeKortenNaar, AantalInTeKorten) Set VrijLabel = $Order(^PRBS("BS",PRNr,"KIND.999"),-1) Set VolgendNr = $E(1000+$Piece(VrijLabel,".",2)+1,2,4) Set ^PRBS("BS",PRNr,"KIND."_VolgendNr) = IngekortProduct.GeefPRNr()_"\"_AantalInTeKorten_"\K\\\\\\\\PROD\" Kill ^PRBS("BS",PRNr,InTeKortenKinderen.GetAt(1).GeefID()) // Extra toe te voegen Set Iterator = ##class(TECH.ListIterator).%New(ToeTeVoegenKinderen) While (Iterator.HasNext()) { Set KindProductInfo = Iterator.Next() Set $Piece(^PRBS("BS",PRNr,KindProductInfo.GeefID()),"\",2) = KindProductInfo.GeefAantal() } // Korttekst herwerken Set $Piece(^KPR(PRNr,0),"\",1) = ..GeefKorttekstIngekortProduct(OrgaluxProduct, InbouwBreedte) // Classficiatie correct instellen Set Classificatie = ProductAPI.GeefOrgaluxOpMaatClassificatie().GeefID() Set $Piece(^KPR(PRNr,"I1"),"\",1) = $$GETSORT^KLASS(Classificatie,1) Set $Piece(^KPR(PRNr,"I1"),"\",2) = $$GETSORT^KLASS(Classificatie,2) Set $Piece(^KPR(PRNr,"I1"),"\",3) = $$GETSORT^KLASS(Classificatie,3) Set $Piece(^KPR(PRNr,"I1"),"\",4) = Classificatie Do ..MaakLangteksten(PRNr, InbouwBreedte) Do RECALC^PRODUKT2(PRNr) Do BLDIND^PRODUKT2(PRNr) Set OriginelePrijs = OrgaluxProduct.GeefPrijs() Set Label = $Order(^PRBS("BS",PRNr,"")) While (Label '= "") { // Alle kost items die met een factor rekenen verwijderen // dit om de berekening voor de toeslag te laten kloppen. If ($Piece(^PRBS("BS",PRNr,Label),"\",5) '= "") { Kill ^PRBS("BS",PRNr,Label) } Set Label = $Order(^PRBS("BS",PRNr,Label)) } // Herrekenen van het orgalux product met nieuwe kinderen Set Som = 0 Do CALC^PRBS(PRNr,.Som,,,,.NoSa) Set NewPPL=$P(Som,"\") Do PRIJSUPD^PRBSC(PRNr,+$J(NewPPL,0,2),"A","") Set NieuwePrijs = ProductAPI.GeefProduct(PRNr).GeefPrijs() Set Rec="" Set $P(Rec,"\",2)=1 Set $P(Rec,"\",3)="S" ; Surplus Set $P(Rec,"\",4)= (OriginelePrijs - NieuwePrijs + (AantalInTeKorten * ..GeefToeslagPerBewerking())) Set $P(Rec,"\",9)="" ; KostMatID Set $P(Rec,"\",13) = "Inkorten toeslag + overdoos toeslag" Set $P(Rec,"\",16)=0 ; Meerwaarde Set $P(Rec,"\",10)=100 Set $P(Rec,"\",11)="SURP" Set ^PRBS("BS",PRNr,"SUR.001")=Rec // Herrekenen van het orgalux product met de toeslag Set Som = 0 Do CALC^PRBS(PRNr,.Som,,,,.NoSa) Set NewPPL=$P(Som,"\") Do PRIJSUPD^PRBSC(PRNr,+$J(NewPPL,0,2),"A","") Do BLDIND^PRBS(PRNr) Quit ProductAPI.GeefProduct(PRNr) ]]> 1 TeVervangenProduct:DOM.PM.Product,BreedteOLProduct:%Integer %Integer 1 %Float OrgaluxProduct:DOM.PM.OLProduct.OLProduct,InbouwBreedte:%Integer %String OrgaluxProduct:DOM.PM.OLProduct.OLProduct %Integer InTeKortenProduct:DOM.PM.Product,TeVervangenProduct:DOM.PM.Product,TeBekomenLengte:%Integer,Aantal:%Integer 1 DOM.PM.Product PRNr:%Integer,InbouwBreedte:%Integer OrgaluxProduct:DOM.PM.OLProduct.OLProduct 1) { Do ##class(TECH.ExceptionHandler).Throw(##class(APPS.PM.Maatwerk.OLM.OrgaluxOpMaatException).%New(##class(TECH.enu.ExceptionCode).InvalidInput(),"Er zijn meerdere te vervangen producten in dit orgalux product")) } ElseIf (TeVervangenKinderen.Count() = 0) { Do ##class(TECH.ExceptionHandler).Throw(##class(APPS.PM.Maatwerk.OLM.OrgaluxOpMaatException).%New(##class(TECH.enu.ExceptionCode).InvalidInput(),"Er zijn geen te vervangen producten in dit orgalux product")) } Set InTeKortenKinderen = InkortInfo.GeefInTeKortenKinderen() If (InTeKortenKinderen.Count() > 1) { Do ##class(TECH.ExceptionHandler).Throw(##class(APPS.PM.Maatwerk.OLM.OrgaluxOpMaatException).%New(##class(TECH.enu.ExceptionCode).InvalidInput(),"Er zijn meerdere in te korten producten in dit orgalux product")) } ElseIf (InTeKortenKinderen.Count() = 0) { Do ##class(TECH.ExceptionHandler).Throw(##class(APPS.PM.Maatwerk.OLM.OrgaluxOpMaatException).%New(##class(TECH.enu.ExceptionCode).InvalidInput(),"Er zijn geen in te korten producten in dit orgalux product")) } ]]> OrgaluxProduct:DOM.PM.OLProduct.OLProduct %Integer