Imports TA_OR_rework Public MustInherit Class MustInheritSifonLadeManager(Of TLadeType As ISifonLade) Inherits LadeManager(Of TLadeType) Private ReadOnly _specialLadenEngine As ISpecialLadeEngine(Of TLadeType) Private ReadOnly _reworkTrayEngine As IReworkTrayEngine ''' ''' Initialiseren met een special laden engine. ''' ''' De special laden engine Public Sub New(specialLadenEngine As ISpecialLadeEngine(Of TLadeType), reworkTrayEngine As IReworkTrayEngine) _specialLadenEngine = specialLadenEngine _reworkTrayEngine = reworkTrayEngine End Sub ''' Protected Overrides Function LaadLadenData(identificatie As String) As List(Of TLadeType) 'Laden opvragen met lade code en dan retourneren. Return _specialLadenEngine.GeefLadenMetLadeCode(identificatie) End Function ''' ''' Alle laden updaten met waarden uit andere lade. ''' ''' De andere lade Public Sub UpdateAlleLaden(gewijzigdeLade As TLadeType) 'Controleer of lijst met laden leeg is. If Laden Is Nothing OrElse Laden.Count = 0 Then 'Lijst is leeg, update kan niet uitgevoerd worden. Throw New Exception("Kon special laden niet updaten aan de hand van een gewijzigde lade. Geen laden aanwezig.") End If 'Lijst is niet leeg, hook aanroepen. UpdateLaden(gewijzigdeLade) End Sub ''' ''' Hook voor alle laden te updaten met waarden uit andere lade. ''' ''' De andere lade Protected MustOverride Sub UpdateLaden(gewijzigdeLade As TLadeType) ''' ''' De laden in een afgewerkte staat brengen. ''' Public Sub BouwLaden() Try 'Elke lade overlopen. For Each lade In Laden Try GenereerOnderdelen(lade) Catch ex As Exception Throw New Exception($"Kon onderdelen niet genereren.{vbNewLine}{ex.Message}") End Try Try VerdeelOverReworkTrays(lade) Catch ex As Exception Throw New Exception($"Kon zijkanten niet verdelen over rework trays.{vbNewLine}{ex.Message}") End Try Try GenereerOnderdeelDatas(lade) Catch ex As Exception Throw New Exception($"Kon de andere data's voor elk onderdeel niet genereren.{vbNewLine}{ex.Message}") End Try Next Catch ex As Exception Throw New Exception($"Laden konden niet gebouwd worden.{vbNewLine}{ex.Message}") End Try End Sub ''' ''' Genereren van de onderdelen, zijkanten, bodem, ... ''' Private Sub GenereerOnderdelen(lade As TLadeType) lade.MaakLade() End Sub ''' ''' Verdelen van de zijkanten over de rework trays. ''' Private Sub VerdeelOverReworkTrays(lade As TLadeType) Dim zijkanten = lade.GeefAlleOnderdelen().Where(Function(onderdeel) TypeOf onderdeel Is Zijkant).Select(function(onderdeel) CType(onderdeel, Zijkant)).ToList() 'Data updaten in zijkanten (slotnummer en traynummer door te verdelen over de trays als paar (zijkantL en zijkantR) _reworkTrayEngine.VerdeelZijkantenOverTrays(zijkanten) End Sub ''' ''' Andere data's genereren, kantenband, automilling, ... ''' Protected MustOverride Sub GenereerOnderdeelDatas(lade As TLadeType) End Class