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
Private ReadOnly _reworkTrayRepository As ReworkTrayRepository
Public ReadOnly Property SpecialLaden() As List(Of TLadeType)
Get
Return New List(Of TLadeType)(Laden)
End Get
End Property
'''
''' 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
_reworkTrayRepository = New ReworkTrayRepository()
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
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).
Dim reworkTrays = _reworkTrayEngine.VerdeelZijkantenOverTrays(zijkanten)
For Each reworktray In reworkTrays
_reworkTrayRepository.addReworkTraySpecialLade(reworktray)
Next
End Sub
'''
''' Andere data's genereren, kantenband, automilling, ...
'''
public overrides Sub Produceer()
Dim specialLaden As New List(Of SpecialLade)
For Each lade In Laden
'Opslaan in Caché
OpslaanGegenereerdeOnderdelen(lade)
'Converteren naar special lade.
Dim specialLade As SpecialLade = New SifonLade()
'Tpe bepalen en instellen.
If TypeOf lade Is SifonLadeV2 Then
specialLade.typeInstantie = ItemType.Sifonlade
Else
specialLade.typeInstantie = ItemType.DubbeleSifonlade
End If
Dim ruggen As New List(Of ArdisData)
'Onderdelen overlopen en toevoegen aan lade.
For Each onderdeel In lade.GeefAlleOnderdelen()
If TypeOf onderdeel Is Front Then
Dim front As Front = onderdeel
specialLade.voegFrontToe(front.ArdisData)
ElseIf TypeOf onderdeel Is Bodem Then
Dim bodem As Bodem = onderdeel
specialLade.voegBodemToe(bodem.ArdisData)
ElseIf TypeOf onderdeel Is Rug Then
Dim rug As Rug = onderdeel
ruggen.Add(rug.ArdisData)
ElseIf TypeOf onderdeel Is Zijkant Then
Dim zijkant As Zijkant = onderdeel
specialLade.voegZijkantToe(zijkant.ArdisDataL)
specialLade.voegZijkantToe(zijkant.ArdisDataR)
End If
Next
'Toevoegen aan totale lijst.
specialLade.voegRuggenToe(ruggen)
'De originele rug ophalen en toevoegen.
specialLade.voegRugToe(lade.OrigineleRug.ArdisData)
specialLaden.Add(specialLade)
Next
Dim hoofdaansturingSifonLade = New HoofdAansturingSifonLade(_reworkTrayRepository)
hoofdaansturingSifonLade.verwerkenSpecialLadeMetTrays(specialLaden)
End Sub
'''
''' Opslaan van de gegenereerde onderdelen in Caché: zijkanten en ruggen.
'''
Private Sub OpslaanGegenereerdeOnderdelen(lade As TLadeType)
For Each onderdeelOrigineelEnGegenereerd In lade.GeefGegenereerdeEnOrigineleOnderdelen()
If Configs.geefVerwerkStatus Then
Dim origineelOnderdeel = onderdeelOrigineelEnGegenereerd(0)
Dim gegenereerdonderdeel = onderdeelOrigineelEnGegenereerd(1)
'De naam van het onderdeel opvragen.
Dim nieuwOnderdeelNaam As String
If TypeOf origineelOnderdeel Is Zijkant Then
Dim origineleZijkant As Zijkant = origineelOnderdeel
Dim gegenereerdeZijkant As Zijkant = gegenereerdonderdeel
'Zijkant L.
nieuwOnderdeelNaam = Configs.specialLadeGeefOnderdeelNaamGegenereerdeZijkant(gegenereerdeZijkant.ArdisDataL.sifonLadeGeefOnderdeelLetter)
'Opslaan in Caché.
CacheMapper.OpslaanGegenereerdeOnderdelen(origineleZijkant.ArdisDataL, gegenereerdeZijkant.ArdisDataL, nieuwOnderdeelNaam)
'Zijkant R.
nieuwOnderdeelNaam = Configs.specialLadeGeefOnderdeelNaamGegenereerdeZijkant(gegenereerdeZijkant.ArdisDataR.sifonLadeGeefOnderdeelLetter)
'Opslaan in Caché.
CacheMapper.OpslaanGegenereerdeOnderdelen(origineleZijkant.ArdisDataR, gegenereerdeZijkant.ArdisDataR, nieuwOnderdeelNaam)
ElseIf TypeOf origineelOnderdeel Is Rug Then
'Rug
Dim origineleRug As Rug = origineelOnderdeel
Dim gegenereerdeRug As Rug = gegenereerdonderdeel
CacheMapper.OpslaanGegenereerdeOnderdelen(origineleRug.ArdisData, gegenereerdeRug.ArdisData, Configs.sifonLadeGeefOnderdeelNaamGegenereerdeRug())
End If
End If
Next
End Sub
End Class