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