Service voor de Halux planningstool. Ondersteunt het visualiseren van het resourcegebruik voor alle toeleveringen die reeds ingegeven zijn. 1 %RegisteredObject 0 Halux_Planning_PlanningService ToeleveringNummer:%Integer,AantalToeleveringen:%Integer,DrempelAantalProducten:%Integer APPS.Halux.Planning.dto.SplitsToeleveringEvaluatie DrempelAantalProducten) { Set Aantal = ProductToeleveringLijn.GeefAantal() Set AantalPerToelevering = ##class(TECH.Math).Floor(Aantal / AantalToeleveringen) Set Rest = Aantal - (AantalToeleveringen*AantalPerToelevering) For i=1:1:AantalToeleveringen { Set Aantal = AantalPerToelevering If (Rest > 0) { Set Aantal = Aantal + 1 Set Rest = Rest - 1 } Set SplitsToeleveringEvaluatie.GesplitsteToeleveringen.GetAt(i).Beschrijving = "Toelevering "_i Do SplitsToeleveringEvaluatie.GesplitsteToeleveringen.GetAt(i).Aantallen.Insert(Aantal) } } Else { Do SplitsToeleveringEvaluatie.GesplitsteToeleveringen.GetAt(1).Aantallen.Insert(ProductToeleveringLijn.GeefAantal()) For i=2:1:AantalToeleveringen { Do SplitsToeleveringEvaluatie.GesplitsteToeleveringen.GetAt(i).Aantallen.Insert(0) } } } } Quit SplitsToeleveringEvaluatie ]]> Van:%Date,Naar:APPS.Halux.Planning.dto.DataLijst,ToeleveringNummers:%ListOfDataTypes APPS.Halux.Planning.dto.EvaluatiesVerplaatsingen DueOutDag) { Set LeverImpactDueOut = ##class(APPS.Halux.Planning.impl.ProductPlanningUtils).GeefLeverImpact(Toelevering, ##class(TECH.DateTime).DateToTimeStamp(Datum)) If (LeverImpactDueOut '= 0) { Set LeverImpactPlanning = ##class(APPS.Halux.Planning.impl.ProductPlanningUtils).GeefLeverImpact(Toelevering, ##class(TECH.DateTime).DateToTimeStamp(Datum), ##class(TECH.DateTime).DateToTimeStamp(Van)) Do VerplaatsingEvaluatie.Evaluaties.Insert("Toelevering "_Toelevering.GeefToeNr()_" wordt naar achter verplaatst en krijgt een leverimpact. Leverimpact ten opzichte van due out: "_LeverImpactDueOut_" dagen. Leverimpact ten opzichte van de planning: "_LeverImpactPlanning_" dagen.") Set VerplaatsingEvaluatie.LeverimpactDueOutInDagen = LeverImpactDueOut Set VerplaatsingEvaluatie.LeverimpactPlanningInDagen = LeverImpactPlanning } } If (VerplaatsingEvaluatie.Evaluaties.Count() > 0) { Do Resultaat.VerplaatsingEvaluaties.Insert(VerplaatsingEvaluatie) } } } Else { Do Resultaat.Evaluaties.Insert("Toelevering "_ToeleveringNummer_" bestaat niet.") } Do Verplaatsingen.Insert(Resultaat) } Quit Verplaatsingen ]]> Geeft de planningsdetails voor een bepaalde datum en een bepaalde categorie. De categorie mag leeg zijn ("") in welk geval de details voor alle categorieen getoond worden.. Datum:%Date,Categorie:APPS.Halux.Planning.enu.Categorie %XML.DataSet Geeft de planningsdetails voor een bepaalde datum en een bepaalde categorie specifiek voor het toeleveringsscherm. De categorie mag leeg zijn ("") in welk geval de details voor alle categorieen getoond worden. Dag:%Date,Categorie:APPS.Halux.Planning.enu.Categorie %XML.DataSet Geeft de overzichtsinfo terug van de gevraagde dagen. De dagen worden bepaald via de door OV ingegeven datum voor niet expliciet verplaatste toeleveringen en de doeldatum (uit ToeleveringsPlanning) voor expliciet verplaatste toeleveringen. We werken enkel met datum, niet met dagdelen voor de eenvoud. De server bepaalt welke dagen worden getoond binnen het opgegeven bereik. Weekends en verlofdagen worden Van:%Date,Tot:%Date %XML.DataSet Tot) { Set Hulp = Tot Set Tot = Van Set Van = Hulp } If (##class(TECH.Config.ConfigMgr).Instance().GetBoolean("Halux_Planning_AutoResync")) { Do ..ResyncToeleveringInfo() } Set DataSet = ##class(%XML.DataSet).%New("APPS.Halux.Planning.impl.Queries:qGeefPlanningOverzicht") Do DataSet.SetArgs(Van, Tot) Quit DataSet ]]> ToeleveringNummer:%Integer APPS.Halux.Planning.dto.ToeleveringDetail 0) { Set ActieInfo = ##class(APPS.Halux.Planning.dto.ActieInfo).%New() Set ActieInfo.ActieCode = ##class(APPS.Halux.Planning.enu.ActieCode).VerplaatsVerwacht() Set ActieInfo.ActieTekst = "Naar verwacht" Set ActieInfo.IcoonNaam = "Icoon.PNG" Set ActieInfo.IsIngeschakeld = 1 Do ToeleveringDetail.ActieInfoLijst.Insert(ActieInfo) If (ToeleveringInfo.GeplandStatus = ##class(APPS.Halux.Planning.enu.GeplandStatus).Vroeger()) { Do AnalyseLijst.Insert("Vroeger ingepland maar stockprobleem!") Do ActieLijst.Insert("Verplaatsen naar datum waarop we de toelevering voor de stockproblemen verwachten.") } Set Toelevering = ##class(DOM.DomeinContext).Instance().GeefToeleveringAPI().GeefToelevering(ToeleveringNummer) Set BijhorendeBatch = ##class(APPS.Halux.common.BatchService).%New().GeefBijhorendeBatch(Toelevering) If ($IsObject(BijhorendeBatch)) { Do AnalyseLijst.Insert("In batch met stockprobleem!") Do ActieLijst.Insert("Uit batch halen.") } } If (AnalyseLijst.Count() > 0) { Set DisplayString = DisplayString_"Analyse:"_$C(13,10) Set Iterator = ##class(TECH.ListIterator).%New(AnalyseLijst) While (Iterator.HasNext()) { Set DisplayString = DisplayString_"- "_Iterator.Next()_$C(13,10) } Set DisplayString = DisplayString_$C(13,10) } If (ActieLijst.Count() > 0) { Set DisplayString = DisplayString_"Acties:"_$C(13,10) Set Iterator = ##class(TECH.ListIterator).%New(ActieLijst) While (Iterator.HasNext()) { Set DisplayString = DisplayString_"- "_Iterator.Next()_$C(13,10) } Set DisplayString = DisplayString_$C(13,10) } If (ToeleveringInfo.GeplandStatus '= ##class(APPS.Halux.Planning.enu.GeplandStatus).Impliciet()) { Set ActieInfo = ##class(APPS.Halux.Planning.dto.ActieInfo).%New() Set ActieInfo.ActieCode = ##class(APPS.Halux.Planning.enu.ActieCode).VerplaatsDueOut() Set ActieInfo.ActieTekst = "Naar dueout" Set ActieInfo.IcoonNaam = "Icoon.PNG" Set ActieInfo.IsIngeschakeld = 1 Do ToeleveringDetail.ActieInfoLijst.Insert(ActieInfo) } } Else { Set DisplayString = "Toelevering "_ToeleveringNummer_" bestaat niet" } Set AantalWeken = 1 Set ToeleveringNummers = ##class(%ListOfDataTypes).%New() Do ToeleveringNummers.Insert(ToeleveringNummer) Set DueOutAlternatievenLijst = ..GeefDueOutAlternatieven(AantalWeken, ToeleveringNummers) If (DueOutAlternatievenLijst.Lijst.Count() > 0) { While (DueOutAlternatievenLijst.Lijst.GetAt(1).Data.Count() < 4) { Set AantalWeken = AantalWeken + 1 Set DueOutAlternatievenLijst = ..GeefDueOutAlternatieven(AantalWeken, ToeleveringNummers) } Set DueOutAlternatieven = ##class(%ListOfDataTypes).%New() For i=1:1:4 { Do DueOutAlternatieven.Insert(DueOutAlternatievenLijst.Lijst.GetAt(1).Data.GetAt(i)) } Set ToeleveringDetail.PlanningSuggestie = ..GeefPlanningSuggestie(DueOutAlternatieven) } Set ToeleveringDetail.DisplayString = DisplayString Quit ToeleveringDetail ]]> Lijst van APPS.Halux.Planning.dto.StockProbleemInfo ToeleveringNummer:%Integer %ListOfObjects Lijst van timestamps Geeft enkel een suggestie indien in de lijst geen opeenvolgende werkdagen zitten DueOutDagen:%ListOfDataTypes %String 1 Set LaatstVerwerkt = DueOutDag While (('BevatGaten) && ('##class(TECH.DateTime).IsWeekdag(LaatstVerwerkt+1))) { Set LaatstVerwerkt = LaatstVerwerkt + 1 } } } If (BevatGaten) { Set Suggestie = "Kan best gepland worden op: "_$C(13,10) Set DagenIterator = ##class(TECH.ListIterator).%New(DueOutDagen) While (DagenIterator.HasNext()) { Set DueOutDag = DagenIterator.Next() Set Dag = ##class(TECH.DateTime).Dag(DueOutDag) Set Maand = ##class(TECH.DateTime).Maand(DueOutDag) Set DagNaamTweeLetters = ##class(TECH.StringUtils).ToLower($Extract(##class(TECH.DateTime).DagNaam(DueOutDag),1,2)) Set Suggestie = Suggestie_##class(TECH.StringUtils).AlignRight(Dag,0,2)_"/"_##class(TECH.StringUtils).AlignRight(Maand,0,2)_" ("_DagNaamTweeLetters_")" If (DagenIterator.HasNext()) { Set Suggestie = Suggestie_", " } } } Else { Set Suggestie = "Wordt dagelijks geleverd dus geen voorkeurdatum voor de planning" } Quit Suggestie ]]> AantalWeken:%Integer,ToeleveringNummers:%ListOfDataTypes APPS.Halux.Planning.dto.DueOutAlternatiefResultaat APPS.Halux.Planning.dto.ApplicatieInstellingen ResourceDrempelData:APPS.Halux.Planning.impl.ResourceDrempel 1 APPS.Halux.Planning.dto.ResourceDrempel Geeft de settings van de kolommen (o.a. volgorde en breedte) terug. DataGridNaam:%String,Gebruiker:%String APPS.common.GUI.dto.KolomInfoLijst Bewaart de settings van de kolommen. DataGridNaam:%String,Gebruiker:%String,KolomInfoLijst:APPS.common.GUI.dto.KolomInfoLijst Lijn:APPS.Halux.common.enu.ProductieLijn,ToeleveringNummers:%ListOfDataTypes APPS.Halux.Planning.dto.MaakBatchResultaat ToeleveringNummer:%Integer,AantalToeleveringen:%Integer,DrempelAantalProducten:%Integer APPS.Halux.Planning.dto.SplitsToeleveringResultaat 0) { Set $ZTRAP="SplitsFout" Set NieuwUniekLijnNr = $$SplitsLijn^FLOWTOE6(ToeleveringNummer,UniekeLijnNummers.GetAt(j),GesplitsteToelevering.Aantallen.GetAt(j)) Set $ZTRAP="" Do AfTeSplitsenLijnen.Insert(NieuwUniekLijnNr) } } Set $ZTRAP="SplitsFout" Set NieuweToeleveringNummer = $$SplitsToelevering^FLOWTOE6(ToeleveringNummer,AfTeSplitsenLijnen) Set $ZTRAP="" Set NieuweToelevering = ##class(DOM.DomeinContext).Instance().GeefToeleveringAPI().GeefToelevering(NieuweToeleveringNummer) Set ToeleveringCreatedEventData = ##class(TECH.Events.ToeleveringCreatedEventData).%New(NieuweToelevering) Set ToeleveringCreatedEvent = ##class(TECH.Events.ToeleveringCreatedEvent).%New(ToeleveringCreatedEventData) Do ##class(APPS.Halux.Planning.impl.EventCatcher).ToeleveringCreatedEventListener(ToeleveringCreatedEvent) Do GewijzigdeToeleveringen.Insert(NieuweToelevering) } TCOMMIT Set ToeleveringModifiedEventData = ##class(TECH.Events.ToeleveringModifiedEventData).%New(Toelevering) Set ToeleveringModifiedEvent = ##class(TECH.Events.ToeleveringModifiedEvent).%New(ToeleveringModifiedEventData) Do ##class(APPS.Halux.Planning.impl.EventCatcher).ToeleveringModEventListener(ToeleveringModifiedEvent) If (GewijzigdeToeleveringen.Count() > 0) { Do GewijzigdeToeleveringen.Insert(Toelevering) Set DataSet = ##class(%XML.DataSet).%New() Do DataSet.Prepare(##class(APPS.Halux.Planning.impl.Queries).GeefPlanningDetailVoor(GewijzigdeToeleveringen)) Set Resultaat.Wijzigingen = DataSet } Set Resultaat.Boodschap = "Splitsen van toelevering "_ToeleveringNummer_" geslaagd" } Else { Set Resultaat.Boodschap = "Toelevering "_ToeleveringNummer_" bestaat niet" } Quit Resultaat SplitsFout Set $ZTRAP = "" Set Resultaat.Boodschap = ##class(TECH.ExceptionHandler).Catch().ToString() TROLLBACK Quit Resultaat ]]> Gebruiker:%String,Opmerking:%String,VerplaatsNaar:%TimeStamp,ToeleveringNummers:%ListOfDataTypes APPS.Halux.Planning.dto.VerplaatsToeleveringenResultaat ToeleveringsNummer:%Integer APPS.Halux.Planning.dto.VerplaatsToeleveringenResultaat ToeleveringsNummer:%Integer APPS.Halux.Planning.dto.VerplaatsToeleveringenResultaat ActieCode:APPS.Halux.Planning.enu.ActieCode,ActieParameter:APPS.Halux.Planning.dto.ActieParameter APPS.Halux.Planning.dto.VoerUitActieResultaat 0) { // Laatste verwachtdag zoeken van alle stockproblemen Set VerwachtOpDag = StockProbleemInfoLijst.GetAt(1).VerwachtOpDag For i=2:1:StockProbleemInfoLijst.Count() { If (StockProbleemInfoLijst.GetAt(i).VerwachtOpDag ] VerwachtOpDag) { Set VerwachtOpDag = StockProbleemInfoLijst.GetAt(i).VerwachtOpDag } } Set ToeleveringInfo = ##class(APPS.Halux.Planning.impl.ToeleveringInfo).%OpenId(ToeleveringNummer) Set ToeleveringInfo.Gepland = $zdt(VerwachtOpDag,3) Set Status = ToeleveringInfo.%Save() If ($$$ISERR(Status)) { Set Resultaat.IsGeslaagd = 0 Set Resultaat.FoutBoodschap = $$ParseStatus^vhLib(Status) } Else { Set Resultaat.IsGeslaagd = 1 } } Else { Set Resultaat.IsGeslaagd = 0 Set Resultaat.FoutBoodschap = "Toelevering "_ToeleveringNummer_" heeft geen stockproblemen en kan dus niet naar de verwachte levertijd verplaatst worden" } } Else { Set Resultaat.IsGeslaagd = 0 Set Resultaat.FoutBoodschap = "Onbekende actiecode" } Quit Resultaat ]]> Do ##class(APPS.Halux.Planning.PlanningService).%New().ResyncToeleveringInfo()