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 = ProductAPI.KopieerProduct(OrgaluxProduct).GeefPRNr() // Productobject zelf niet bewaren omdat prijzen en samenstelling toch gaan wijzigen Set SamengesteldProduct = ProductAPI.GeefSamengesteldProduct(PRNr) // Product op "niet-stock" plaatsen Set $Piece(^KPR(PRNr,1),"\",20) = "" // Product op "beperkt actief" plaatsen Set $Piece(^KPR(PRNr,1),"\",25) = 2 // Bepalen van het product dat moet verwijderd worden Set TeVervangenProduct = TeVervangenKinderen.GetAt(1).GeefProduct() Set BreedteInTeKortenProduct = ..GeefBreedteTeVervangenProduct(TeVervangenProduct,BreedteOLProduct) Set Bouwsteen = SamengesteldProduct.GeefBouwsteen(TeVervangenKinderen.GetAt(1).GeefID()) Do SamengesteldProduct.VerwijderBouwsteen(Bouwsteen) // 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 Bouwsteen = SamengesteldProduct.VoegToeKindBouwsteen(IngekortProduct,AantalInTeKorten) Set Bouwsteen = SamengesteldProduct.GeefBouwsteen(InTeKortenKinderen.GetAt(1).GeefID()) Do SamengesteldProduct.VerwijderBouwsteen(Bouwsteen) // Extra toe te voegen Set Iterator = ##class(TECH.ListIterator).%New(ToeTeVoegenKinderen) While (Iterator.HasNext()) { Set KindProductInfo = Iterator.Next() Set Bouwsteen = SamengesteldProduct.GeefBouwsteen(KindProductInfo.GeefID()) Do Bouwsteen.ZetAantal(KindProductInfo.GeefAantal()) } Do SamengesteldProduct.Save() // Korttekst herwerken Set $Piece(^KPR(PRNr,0),"\",1) = ..GeefKorttekstIngekortProduct(OrgaluxProduct, InbouwBreedte, IngekortProduct) // 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) Do Gewijzigd^PRODUKT2(PRNr) Do Gewijzigd^PRODUKT2(IngekortProduct.GeefPRNr()) Quit ProductAPI.GeefProduct(PRNr) ]]> 1 TeVervangenProduct:DOM.PM.Product,BreedteOLProduct:%Integer %Integer 1 %Float OrgaluxProduct:DOM.PM.OLProduct.OLProduct,InbouwBreedte:%Integer,IngekortProduct:DOM.PM.Product %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")) } ]]>