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