Index: DOM/ProdRes/impl/VerwachteInvoerAPIimpl.cls.xml =================================================================== diff -u -r2161 -r2169 --- DOM/ProdRes/impl/VerwachteInvoerAPIimpl.cls.xml (.../VerwachteInvoerAPIimpl.cls.xml) (revision 2161) +++ DOM/ProdRes/impl/VerwachteInvoerAPIimpl.cls.xml (.../VerwachteInvoerAPIimpl.cls.xml) (revision 2169) @@ -83,8 +83,8 @@ Set AantalTeLinkenInvoer = VerwachteInvoer.GeefAantal() - VerwachteInvoer.GeefAantalGelinkt() - Set $ZTRAP = "RegistreerFout" Set OperatieScope = ##class(TECH.OperatieScope).StartMetTx() + Set $ZTRAP = "RegistreerFout" Set ProductReservatieIterator = VerwachteUitvoer.GeefProductReservatieIterator(ProductID) While (AantalTeLinkenInvoer > 0 && ProductReservatieIterator.HasNext()) { @@ -108,12 +108,14 @@ If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.SaveFailedException).%New("Kon de reservatie niet opslaan",Status)) } } } + Set $ZTRAP = "" Do OperatieScope.Gelukt() Quit RegistreerFout Set $ZTRAP = "" + Set Exceptie = ##class(TECH.ExceptionHandler).Catch() Do OperatieScope.Gefaald() - Do ##class(TECH.ExceptionHandler).Rethrow() + Do ##class(TECH.ExceptionHandler).Rethrow(Exceptie) ]]> @@ -168,5 +170,153 @@ Quit SamenvoegVoorstellen ]]> + + +VerwachteInvoerID:%String,NieuweVerwachteInvoer: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 (VerwachteInvoer.GeefAantal() < AantalGelinkt) + { + Set AantalAfsplitsen = AantalGelinkt - VerwachteInvoer.GeefAantal() + Do InvoerUitvoerLink.ZetAantalProducten(InvoerUitvoerLink.GeefAantalProducten()-AantalAfsplitsen) + Set NieuweInvoerUitvoerLink = ##class(DOM.ProdRes.impl.InvoerUitvoerLinkImpl).%New(AantalAfsplitsen) + Set Status = NieuweInvoerUitvoerLink.%Save() + If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.SaveFailedException).%New("Kon de InvoerUitvoerLink niet opslaan",Status)) } + Do NieuweVerwachteInvoer.RegistreerInvoerUitvoerLink(NieuweInvoerUitvoerLink) + Set VerwachteUitvoerReservatie = InvoerUitvoerLink.GeefVerwachteUitvoerReservatie() + Do VerwachteUitvoerReservatie.RegistreerInvoerUitvoerLink(NieuweInvoerUitvoerLink) + Set Status = VerwachteUitvoerReservatie.%Save() + If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.SaveFailedException).%New("Kon de verwachte uitvoer reservatie niet opslaan",Status)) } + } + // Alle resterende invoer-uitvoer-linken moeten verplaatst worden naar de nieuwe verwachte invoer + While (InvoerUitvoerLinkIterator.HasNext()) + { + Set InvoerUitvoerLink = InvoerUitvoerLinkIterator.Next() + Do VerwachteInvoer.VerwijderInvoerUitvoerLink(InvoerUitvoerLink) + Do NieuweVerwachteInvoer.RegistreerInvoerUitvoerLink(InvoerUitvoerLink) + } + } + + Set Status = VerwachteInvoer.%Save() + If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.SaveFailedException).%New("Kon de originele verwachte invoer niet opslaan",Status)) } + Set Status = NieuweVerwachteInvoer.%Save() + If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.SaveFailedException).%New("Kon de nieuwe verwachte invoer niet opslaan",Status)) } + + Set $ZTRAP = "" + Do OperatieScope.Gelukt() + + Quit NieuweVerwachteInvoer +SplitsError + Set $ZTRAP = "" + Set Exceptie = ##class(TECH.ExceptionHandler).Catch() + Do OperatieScope.Gefaald() + Do ##class(TECH.ExceptionHandler).Rethrow(Exceptie) +]]> + + + + +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 = SamengevoegdeVerwachteInvoer.GeefInvoerUitvoerLinkIterator() + While (InvoerUitvoerLinkIterator.HasNext()) + { + Set InvoerUitvoerLink = InvoerUitvoerLinkIterator.Next() + Set VerwachteUitvoerReservatie = InvoerUitvoerLink.GeefVerwachteUitvoerReservatie() + Set VerwachteUitvoerReservatieID = VerwachteUitvoerReservatie.%Id() + If ('InvoerUitvoerLinkPerReservatie.IsDefined(VerwachteUitvoerReservatieID)) + { + Do InvoerUitvoerLinkPerReservatie.SetAt(InvoerUitvoerLink, VerwachteUitvoerReservatieID) + } + Else + { + Set BestaandeInvoerUitvoerLink = InvoerUitvoerLinkPerReservatie.GetAt(VerwachteUitvoerReservatieID) + Do BestaandeInvoerUitvoerLink.ZetAantalProducten(BestaandeInvoerUitvoerLink.GeefAantalProducten() + InvoerUitvoerLink.GeefAantalProducten()) + Do VerwachteUitvoerReservatie.VerwijderInvoerUitvoerLink(InvoerUitvoerLink) + Set Status = VerwachteUitvoerReservatie.%Save() + If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.SaveFailedException).%New("Kon de nieuwe verwachte invoer niet opslaan",Status)) } + Do SamengevoegdeVerwachteInvoer.VerwijderInvoerUitvoerLink(InvoerUitvoerLink) + Set Status = InvoerUitvoerLink.%DeleteId(InvoerUitvoerLink.%Id()) + If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.StatusException).%New(##class(TECH.enu.ExceptionCode).GeneralError(),"Kon invoer-uitvoer-link "_InvoerUitvoerLink.%Id()_" niet verwijderen",Status)) } + } + } + + Set Status = SamengevoegdeVerwachteInvoer.%Save() + If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.SaveFailedException).%New("Kon de nieuwe verwachte invoer niet opslaan",Status)) } + + Set $ZTRAP = "" + Do OperatieScope.Gelukt() + } + + Quit SamengevoegdeVerwachteInvoer +SamenvoegError + Set $ZTRAP = "" + Set Exceptie = ##class(TECH.ExceptionHandler).Catch() + Do OperatieScope.Gefaald() + Do ##class(TECH.ExceptionHandler).Rethrow(Exceptie) +]]> +