1 TECH.RegisteredObject,DOM.ProdRes.VerwachteInvoerAPI right VerwachteInvoerID:%String VerwachteInvoerInfo:DOM.ProdRes.dto.VerwachteInvoerInfo DOM.ProdRes.VerwachteInvoer VerwachteInvoerID:%String VerwachteInvoerID:%String TransactieReferentie:%String,TransactieLijnReferentie:%String,Bedrijf:DOM.common.enu.Bedrijf DOM.ProdRes.VerwachteInvoer Gooit een exceptie indien de verwachte invoer niet bestaat TransactieReferentie:%String,TransactieLijnReferentie:%String,Bedrijf:DOM.common.enu.Bedrijf DOM.ProdRes.VerwachteInvoer VerwachteInvoerID:%String,VerwachteUitvoerID:%String 0 && ProductReservatieIterator.HasNext()) { #dim UitvoerReservatie As DOM.ProdRes.UitvoerReservatie = ProductReservatieIterator.Next() #dim AantalTeLinkenReservatie As %Double = UitvoerReservatie.GeefAantal() - UitvoerReservatie.GeefAantalGelinkt() If (AantalTeLinkenReservatie > AantalTeLinkenInvoer) { Set AantalTeLinkenReservatie = AantalTeLinkenInvoer } If (AantalTeLinkenReservatie > 0) && (UitvoerReservatie.IsBlad()) { Do ..LinkReservaties(InvoerReservatie, UitvoerReservatie, AantalTeLinkenReservatie) Set AantalTeLinkenInvoer = AantalTeLinkenInvoer - AantalTeLinkenReservatie } } } Do OperatieScope.Gelukt() } Catch { Do OperatieScope.Gefaald() #dim Exception As TECH.Exceptions.Exception = ##class(TECH.ExceptionHandler).Rethrow() } ]]> InvoerReservatie:DOM.ProdRes.InvoerReservatie,UitvoerReservatie:DOM.ProdRes.UitvoerReservatie,Aantal:%Double 1 Geeft aan voor welke producten bepaalde verwachte invoeren kunnen samengevoegd worden. VerwachteUitvoerIDs:%ListOfDataTypes DOM.ProdRes.dto.SamenvoegVoorstellen 1) { #dim SamenvoegVoorstel As DOM.ProdRes.dto.SamenvoegVoorstel = ##class(DOM.ProdRes.dto.SamenvoegVoorstel).%New() Set SamenvoegVoorstel.Aantal = 0 Set SamenvoegVoorstel.ProductID = VerwachteInvoerLijstIterator.Key() Set VerwachteInvoerIterator = ##class(TECH.ListIterator).%New(VerwachteInvoerLijst) While (VerwachteInvoerIterator.HasNext()) { Set VerwachteInvoer = VerwachteInvoerIterator.Next() Do SamenvoegVoorstel.VerwachteInvoerIDs.Insert(VerwachteInvoer.%Id()) Set SamenvoegVoorstel.Aantal = SamenvoegVoorstel.Aantal + VerwachteInvoer.GeefReservatie().GeefAantal() } Do SamenvoegVoorstellen.Insert(SamenvoegVoorstel) } } Quit SamenvoegVoorstellen ]]> Verbreekt de nodige invoer-uitvoer-links en doet ook de nodige saves. VerwachteInvoerID:%String,VerwachteUitvoerID:%String VerwachteInvoerID:%String,NieuweVerwachteInvoerInfo:DOM.ProdRes.dto.VerwachteInvoerInfo DOM.ProdRes.VerwachteInvoer AantalGelinkt)) { Set InvoerUitvoerLink = InvoerUitvoerLinkIterator.Next() Set AantalGelinkt = AantalGelinkt + InvoerUitvoerLink.GeefAantalProducten() } // Als er überhaupt een invoer-uitvoer-link was komen we in deze if If ($IsObject(InvoerUitvoerLink)) { // Het object dat aanwezig is, is degene die er heeft voor gezorgd dat de while lus is gestopt. // Als het aantal gelinkt groter is dan moet het de invoer-uitvoer-link gesplitst worden. // Bij gelijke aantallen moeten we niks extra doen met dit object want dan voldoet de verwachte invoer net om de link te voldoen. If (OrigineleInvoerReservatie.GeefAantal() < AantalGelinkt) { #dim AantalAfsplitsen As %Double = AantalGelinkt - OrigineleInvoerReservatie.GeefAantal() Do InvoerUitvoerLink.ZetAantalProducten(InvoerUitvoerLink.GeefAantalProducten()-AantalAfsplitsen) Set NieuweInvoerUitvoerLink = ##class(DOM.ProdRes.impl.InvoerUitvoerLinkImpl).%New(AantalAfsplitsen) Do NieuweInvoerUitvoerLink.Save() Do NieuweVerwachteInvoer.GeefReservatie().RegistreerInvoerUitvoerLink(NieuweInvoerUitvoerLink) #dim UitvoerReservatie As DOM.ProdRes.UitvoerReservatie = InvoerUitvoerLink.GeefUitvoerReservatie() Do UitvoerReservatie.RegistreerInvoerUitvoerLink(NieuweInvoerUitvoerLink) Do UitvoerReservatie.Save() } // Alle resterende invoer-uitvoer-linken moeten verplaatst worden naar de nieuwe verwachte invoer While (InvoerUitvoerLinkIterator.HasNext()) { Set InvoerUitvoerLink = InvoerUitvoerLinkIterator.Next() Do OrigineleInvoerReservatie.VerwijderInvoerUitvoerLink(InvoerUitvoerLink) Do NieuweVerwachteInvoer.GeefReservatie().RegistreerInvoerUitvoerLink(InvoerUitvoerLink) } } } Do OrigineleVerwachteInvoer.Save() Do NieuweVerwachteInvoer.Save() Do OperatieScope.Gelukt() } Catch { Do OperatieScope.Gefaald() #dim Exception As TECH.Exceptions.Exception = ##class(TECH.ExceptionHandler).Rethrow() } Quit NieuweVerwachteInvoer ]]> InvoerReservatie1:DOM.ProdRes.InvoerReservatie,InvoerReservatie2:DOM.ProdRes.InvoerReservatie De verwachte invoeren moeten dezelfde producten bevatten. De samengevoegde verwachte invoer wordt teruggegeven. De samen te voegen verwachte invoeren worden verwijderd. VerwachteInvoerIDs:%ListOfDataTypes,DueIn:%TimeStamp,TransactieReferentie:%String,TransactieLijnReferentie:%String DOM.ProdRes.VerwachteInvoer reservatie) hetzelfde zijn. Deze kunnen we ook samenvoegen. Set InvoerUitvoerLinkPerReservatie = ##class(%ArrayOfObjects).%New() Set InvoerUitvoerLinkIterator = SamengevoegdeInvoerReservatie.GeefInvoerUitvoerLinkIterator() While (InvoerUitvoerLinkIterator.HasNext()) { Set InvoerUitvoerLink = InvoerUitvoerLinkIterator.Next() #dim UitvoerReservatie As DOM.ProdRes.UitvoerReservatie = InvoerUitvoerLink.GeefUitvoerReservatie() #dim UitvoerReservatieID As %String = UitvoerReservatie.%Id() If $$$Not(InvoerUitvoerLinkPerReservatie.IsDefined(UitvoerReservatieID)) { Do InvoerUitvoerLinkPerReservatie.SetAt(InvoerUitvoerLink, UitvoerReservatieID) } Else { #dim BestaandeInvoerUitvoerLink As DOM.ProdRes.InvoerUitvoerLink = InvoerUitvoerLinkPerReservatie.GetAt(UitvoerReservatieID) Do BestaandeInvoerUitvoerLink.ZetAantalProducten(BestaandeInvoerUitvoerLink.GeefAantalProducten() + InvoerUitvoerLink.GeefAantalProducten()) Do UitvoerReservatie.VerwijderInvoerUitvoerLink(InvoerUitvoerLink) Do UitvoerReservatie.Save() Do SamengevoegdeInvoerReservatie.VerwijderInvoerUitvoerLink(InvoerUitvoerLink) Do InvoerUitvoerLink.DeleteId(InvoerUitvoerLink.%Id()) } } Do SamengevoegdeVerwachteInvoer.Save() Do OperatieScope.Gelukt() } Catch { Do OperatieScope.Gefaald() #dim Exception As TECH.Exceptions.Exception = ##class(TECH.ExceptionHandler).Rethrow() } } Quit SamengevoegdeVerwachteInvoer ]]> ProductID:%String,Bedrijf:DOM.common.enu.Bedrijf,InclusiefGelinkte:%Boolean,MaxDueIn:%TimeStamp=##class(TECH.DateTime).MaxTimeStamp() %Double '"_##class(DOM.ProdRes.enu.VerwachteInvoerStatus).Ingeboekt()_"')" _" GROUP BY ProductID") Do ResultSet.Execute(ProductID, Bedrijf, MaxDueIn) If (ResultSet.Next()) { Set AantalVerwacht = ResultSet.Data("Aantal") } Do ResultSet.Close() If $$$Not(InclusiefGelinkte) { Set ResultSet = ##class(%ResultSet).%New() Do ResultSet.Prepare("SELECT COALESCE(sum(AantalProducten),0) As AantalGelinkt FROM DOM_ProdRes_impl.InvoerReservatieImpl I" _" LEFT JOIN DOM_ProdRes_impl.InvoerReservatieImpl_InvoerUitvoerLinken L ON L.InvoerReservatieImpl = I.ID" _" LEFT JOIN DOM_ProdRes_impl.InvoerUitvoerLinkImpl IL ON IL.ID = L.element_key" _" WHERE ProductID = ? AND I.Bedrijf = ? AND (DueIn is null OR DueIn < ?) AND IL.Status <> '" _ ##class(DOM.ProdRes.enu.InvoerUitvoerLinkStatus).Voldaan() _ "'" _" GROUP BY ProductID") Do ResultSet.Execute(ProductID, Bedrijf, MaxDueIn) If (ResultSet.Next()) { Set AantalVerwacht = AantalVerwacht - ResultSet.Data("AantalGelinkt") } Do ResultSet.Close() } Quit AantalVerwacht ]]>