Index: TAOR-rework-bugfixing/TAOR rework/nieuwdomein/mappers/SifonLadenMapper.vb
===================================================================
diff -u -r1637 -r1639
--- TAOR-rework-bugfixing/TAOR rework/nieuwdomein/mappers/SifonLadenMapper.vb (.../SifonLadenMapper.vb) (revision 1637)
+++ TAOR-rework-bugfixing/TAOR rework/nieuwdomein/mappers/SifonLadenMapper.vb (.../SifonLadenMapper.vb) (revision 1639)
@@ -2,13 +2,44 @@
Implements ISpecialLadeMapper(Of ISifonLade)
'''
- Public Function GeefAlle(waarde As ISpecialLadenOnderdelen) As List(Of ISifonLade) Implements IMapper(Of ISpecialLadenOnderdelen,ISifonLade).GeefAlle
- 'todo Throw New NotImplementedException
- Return new List(Of ISifonLade)
+ Public Function GeefAlle(onderdelen As List(Of IOnderdeel)) As List(Of ISifonLade) Implements IMapper(Of List(Of IOnderdeel), ISifonLade).GeefAlle
+ 'Onderdelen en hun aantal registreren.
+ Dim onderdelenAantalDictionary As New Dictionary(Of Type, Integer) From {
+ {GetType(Zijkant), 2},
+ {GetType(Front), -1},
+ {GetType(Bodem), 1},
+ {GetType(Rug), 1}
+ }
+
+ 'Onderdelen valideren.
+ If Not SpecialLadeMapperUtil.ValideerOnderdelen(onderdelen, onderdelenAantalDictionary) Then
+ 'Ongeldig.
+ Throw New Exception("Er zijn teveel of te weinig onderdelen aanwezig voor een of meerdere sifon laden.")
+ End If
+
+ 'Lijst met sifon laden initialiseren.
+ Dim sifonLaden As New List(Of ISifonLade)
+
+ 'Aantal laden opvragen en loop starten.
+ Dim aantalLaden = SpecialLadeMapperUtil.GeefAantalLaden(onderdelen, onderdelenAantalDictionary)
+ For i = 0 To aantalLaden -1
+ 'Nieuwe sifonlade initialiseren met informatie.
+ Dim sifonLade As New SifonLadeV2( _
+ SpecialLadeMapperUtil.GeefOnderdelenUitLade(Of Zijkant)(i, onderdelen, onderdelenAantalDictionary)(0), _
+ SpecialLadeMapperUtil.GeefOnderdelenUitLade(Of Zijkant)(i, onderdelen, onderdelenAantalDictionary)(1), _
+ SpecialLadeMapperUtil.GeefOnderdeelUitLade(Of Front)(i, onderdelen), _
+ SpecialLadeMapperUtil.GeefOnderdeelUitLade(Of Bodem)(i, onderdelen), _
+ SpecialLadeMapperUtil.GeefOnderdeelUitLade(Of Rug)(i, onderdelen) _
+ )
+ 'Toevoegen aan lijst.
+ sifonLaden.Add(sifonLade)
+ Next
+
+ Return sifonLaden
End Function
'''
- Public Function GeefEnkele(waarde As ISpecialLadenOnderdelen) As ISifonLade Implements IMapper(Of ISpecialLadenOnderdelen,ISifonLade).GeefEnkele
+ Public Function GeefEnkele(waarde As List(Of IOnderdeel)) As ISifonLade Implements IMapper(Of List(Of IOnderdeel), ISifonLade).GeefEnkele
Throw New NotImplementedException
End Function
End Class
Index: TAOR-rework-bugfixing/TAOR rework/nieuwdomein/mappers/ISpecialLadeMapper.vb
===================================================================
diff -u -r1635 -r1639
--- TAOR-rework-bugfixing/TAOR rework/nieuwdomein/mappers/ISpecialLadeMapper.vb (.../ISpecialLadeMapper.vb) (revision 1635)
+++ TAOR-rework-bugfixing/TAOR rework/nieuwdomein/mappers/ISpecialLadeMapper.vb (.../ISpecialLadeMapper.vb) (revision 1639)
@@ -1,3 +1,3 @@
Public Interface ISpecialLadeMapper(of T)
- inherits IMapper(Of ISpecialLadenOnderdelen, T)
+ inherits IMapper(Of List(Of IOnderdeel), T)
End Interface
Index: TAOR-rework-bugfixing/TAOR rework/laden/special laden/Sifonladen/SifonLadeV2.vb
===================================================================
diff -u -r1634 -r1639
--- TAOR-rework-bugfixing/TAOR rework/laden/special laden/Sifonladen/SifonLadeV2.vb (.../SifonLadeV2.vb) (revision 1634)
+++ TAOR-rework-bugfixing/TAOR rework/laden/special laden/Sifonladen/SifonLadeV2.vb (.../SifonLadeV2.vb) (revision 1639)
@@ -35,4 +35,19 @@
Public Property DiepteSifonuitsparing As Double Implements ISifonLade.DiepteSifonuitsparing
#End Region
+ Public Sub New ()
+ End Sub
+
+ Public Sub New(buitenzijkantL As Zijkant, buitenzijkanttR As Zijkant, front As Front, bodem As Bodem, rug As Rug)
+ BuitenzijkantL = buitenzijkantL
+ BuitenzijkanttR = buitenzijkanttR
+ Front = front
+ Bodem = bodem
+ RugL = rug
+ 'Variabelen instellen.
+ Bestandsnaam=buitenzijkantL.ArdisDataL.Bestandsnaam
+ Batch = buitenzijkantL.ArdisDataL.geefBatch()
+ End Sub
+
+
End Class
Index: TAOR-rework-bugfixing/TAOR rework/nieuwdomein/engines/SpecialLadeEngine.vb
===================================================================
diff -u -r1637 -r1639
--- TAOR-rework-bugfixing/TAOR rework/nieuwdomein/engines/SpecialLadeEngine.vb (.../SpecialLadeEngine.vb) (revision 1637)
+++ TAOR-rework-bugfixing/TAOR rework/nieuwdomein/engines/SpecialLadeEngine.vb (.../SpecialLadeEngine.vb) (revision 1639)
@@ -36,15 +36,15 @@
'''
'''
'''
- Private Function ArdisDatasConverteren(ardisDatas As List(Of ArdisData))
+ Private Function ArdisDatasConverteren(ardisDatas As List(Of ArdisData)) as List(Of TLadeType)
'Controleren of ArdisData niet leeg is.
If ardisDatas Is Nothing OrElse ardisDatas.Count = 0
'Geen resultaten gevonden, lege lijst retourneren.
Return New List(Of TLadeType)
End If
'Resultaten converteren naar 'special laden onderdelen'.
- Dim specialLadenOnderdelen = _onderdelenMapper.GeefEnkele(ardisDatas)
+ Dim onderdelen = _onderdelenMapper.GeefAlle(ardisDatas)
''Special laden onderdelen' converteren naar lijst van laden.
- Return _specialLadenMapper.GeefAlle(specialLadenOnderdelen)
+ Return _specialLadenMapper.GeefAlle(onderdelen)
End Function
End Class
Index: TAOR-rework-bugfixing/TAOR rework/nieuwdomein/mappers/IOnderdelenMapper.vb
===================================================================
diff -u -r1635 -r1639
--- TAOR-rework-bugfixing/TAOR rework/nieuwdomein/mappers/IOnderdelenMapper.vb (.../IOnderdelenMapper.vb) (revision 1635)
+++ TAOR-rework-bugfixing/TAOR rework/nieuwdomein/mappers/IOnderdelenMapper.vb (.../IOnderdelenMapper.vb) (revision 1639)
@@ -1,3 +1,3 @@
Public Interface IOnderdelenMapper(of T)
- Inherits IMapper(Of List(Of T), ISpecialLadenOnderdelen)
+ Inherits IMapper(Of List(Of T), IOnderdeel)
End Interface
Index: TAOR-rework-bugfixing/TAOR rework/nieuwdomein/mappers/ArdisdataOnderdelenMapper.vb
===================================================================
diff -u -r1637 -r1639
--- TAOR-rework-bugfixing/TAOR rework/nieuwdomein/mappers/ArdisdataOnderdelenMapper.vb (.../ArdisdataOnderdelenMapper.vb) (revision 1637)
+++ TAOR-rework-bugfixing/TAOR rework/nieuwdomein/mappers/ArdisdataOnderdelenMapper.vb (.../ArdisdataOnderdelenMapper.vb) (revision 1639)
@@ -4,12 +4,58 @@
Implements IOnderdelenMapper(Of ArdisData)
'''
- Public Function GeefAlle(waarde As List(Of ArdisData)) As List(Of ISpecialLadenOnderdelen) Implements IMapper(Of List(Of ArdisData), ISpecialLadenOnderdelen).GeefAlle
- Throw New NotImplementedException
+ Public Function GeefAlle(ardisDatas As List(Of ArdisData)) As List(Of IOnderdeel) Implements IMapper(Of List(Of ArdisData), IOnderdeel).GeefAlle
+ 'Lijst met alle onderdelen.
+ Dim onderdelen As New List(Of IOnderdeel)
+
+ 'Lijst met zijkanten.
+ Dim zijkantenArdisData As New List(Of ArdisData)
+
+ 'Alle onderdelen overlopen.
+ For Each ardisData In ardisDatas
+ 'Het type controleren, nieuwe isntantie maken van onderdeel en toevoegen aan lijst, zijkanten worden apart behandeld omdat deze per paar komen.
+ Select Case ardisData.PartRef
+ Case "ZijkantPlaat"
+ 'Toevoegen aan lijst met zijkanten.
+ zijkantenArdisData.Add(ardisData)
+ Case "Rug"
+ Dim rug As New Rug With {
+ .ArdisData = ardisData
+ }
+ onderdelen.Add(rug)
+ Case "Bodem"
+ Dim bodem As New Bodem With {
+ .ArdisData = ardisData
+ }
+ onderdelen.Add(bodem)
+ Case "Front"
+ Dim front As New Front With {
+ .ArdisData = ardisData
+ }
+ onderdelen.Add(front)
+ End Select
+ Next
+
+ 'Controleren of het aantal zijkanten even is.
+ If (zijkantenArdisData.Count mod 2) = 0 Then
+ 'Zijkanten overlopen en nieuwe instantie maken per paar.
+ For i = 0 To zijkantenArdisData.Count - 1 Step 2
+ Dim zijkant As New Zijkant With {
+ .ArdisDataL = zijkantenArdisData.Item(i),
+ .ArdisDataR = zijkantenArdisData.Item(i + 1)
+ }
+ onderdelen.Add(zijkant)
+ Next
+ Else
+ Throw New Exception("Het aantal Ardis datas voor zijkanten is oneven.")
+ End If
+
+ 'Lijst retourneren
+ Return onderdelen
End Function
'''
- Public Function GeefEnkele(waarde As List(Of ArdisData)) As ISpecialLadenOnderdelen Implements IMapper(Of List(Of ArdisData), ISpecialLadenOnderdelen).GeefEnkele
- Return New SpecialLadenOnderdelenNieuw()
+ Public Function GeefEnkele(waarde As List(Of ArdisData)) As IOnderdeel Implements IMapper(Of List(Of ArdisData), IOnderdeel).GeefEnkele
+ Throw New NotImplementedException()
End Function
End Class
Index: TAOR-rework-bugfixing/TAOR rework/TAOR rework.vbproj
===================================================================
diff -u -r1635 -r1639
--- TAOR-rework-bugfixing/TAOR rework/TAOR rework.vbproj (.../TAOR rework.vbproj) (revision 1635)
+++ TAOR-rework-bugfixing/TAOR rework/TAOR rework.vbproj (.../TAOR rework.vbproj) (revision 1639)
@@ -166,6 +166,7 @@
+
Index: TAOR-rework-bugfixing/TAOR rework/nieuwdomein/mappers/SpecialLadeMapperUtil.vb
===================================================================
diff -u
--- TAOR-rework-bugfixing/TAOR rework/nieuwdomein/mappers/SpecialLadeMapperUtil.vb (revision 0)
+++ TAOR-rework-bugfixing/TAOR rework/nieuwdomein/mappers/SpecialLadeMapperUtil.vb (revision 1639)
@@ -0,0 +1,191 @@
+'''
+''' Hulpfuncties voor mappers van special laden.
+'''
+Module SpecialLadeMapperUtil
+ '''
+ ''' Valideren van de onderdelen aan de hand van een dictionary met de onderdelen en hun aantallen voor één lade.
+ ''' Positief betekent verplicht aantal, negatief betekent optioneel, maar wel maximum aantal.
+ '''
+ ''' Lijst met onderdelen
+ ''' Dictionary met als key het type van een onderdeel en waarde die het aantal aangeeft
+ ''' True als de onderdelen goedgekeurd zijn
+ Public Function ValideerOnderdelen(onderdelen As List(Of IOnderdeel), vereisteOnderdelen As Dictionary(Of Type, Integer)) As Boolean
+ 'Controleren dat de lijst van onderdelen niet leeg is.
+ If onderdelen Is Nothing OrElse onderdelen.Count = 0 Then
+ Throw New Exception("Lijst van onderdelen mag niet leeg zijn bij het valideren.")
+ End If
+ 'Controleren dat de dictionary met vereiste onderdelen niet leeg is.
+ If vereisteOnderdelen Is Nothing Then
+ Throw New Exception("Vereiste onderdelen dictionary mag niet leeg zijn bij het valideren.")
+ End If
+
+ 'Aantal laden bijhouden, als voor een bepaald onderdeel het aantal afwijkt zijn de onderdelen ongeldig voor deze lade(n).
+ Dim aantalLaden = 0
+
+ 'De types van de onderdelen overlopen.
+ For Each onderdeelType In vereisteOnderdelen.Keys
+ 'Vereist aantal onderdelen opvragen en bijhouden.
+ Dim vereistAantalOnderdelen = vereisteOnderdelen.Item(onderdeelType)
+
+ 'Controleren dat waarde geen 0 is, delen door 0 gaat namelijk niet :3.
+ If vereistAantalOnderdelen = 0 Then
+ Throw New Exception($"Aantal onderdelen van het type {onderdeelType.Name} mag niet 0 zijn. @programmeur.")
+ End If
+
+ 'Aantal onderdelen van dat type tellen.
+ Dim aantalOnderdelen = 0
+ 'Onderdelen overlopen.
+ For Each onderdeel In onderdelen
+ 'Type controleren.
+ If onderdeel.GetType().Name.Equals(onderdeelType.Name) Then
+ 'Type komt overeen.
+ aantalOnderdelen += 1
+ End If
+ Next
+
+ 'Kijken of dit onderdeel optioneel is en niet aanwezig is.
+ If vereistAantalOnderdelen < 0 And aantalOnderdelen = 0 Then
+ 'Optioneel, deze iteratie skippen.
+ Continue For
+ End If
+
+ 'Onderdeel is aanwezig, verplicht of niet, moet het het juiste aantal opleveren.
+
+ 'Controleren of het aantal aanwezige onderdelen wel deelbaar is door het vereist aantal van dat onderdeel.
+ If aantalOnderdelen Mod vereistAantalOnderdelen <> 0 Then
+ 'Aantallen zijn niet deelbaar, ongeldig aantal.
+ 'Niet geldig.
+ Return False
+ End If
+
+ 'Berekenen hoeveel laden er aanwezig zijn volgens dit type onderdeel.
+ Dim aantalLadenBerekend = aantalOnderdelen \ vereistAantalOnderdelen
+
+ If aantalLaden = 0 Then
+ 'Als aantal laden op 0 staat, wordt het geüpdatet.
+ aantalLaden = aantalLadenBerekend
+ ElseIf aantalLaden <> aantalLadenBerekend Then
+ 'Aantal laden komt niet overeen met berekend aantal, ongeldig.
+ Return False
+ End If
+ Next
+
+ 'Onderdelen zijn gevalideerd en geldig.
+ Return True
+ End Function
+
+ '''
+ ''' Opvragen van aantal laden aan de hand van de onderdelen en de vereiste onderdelen dictionary.
+ '''
+ ''' Lijst met onderdelen
+ ''' Dictionary met als key het type van een onderdeel en waarde die het aantal aangeeft
+ ''' Aantal laden
+ Public Function GeefAantalLaden(onderdelen As List(Of IOnderdeel), vereisteOnderdelen As Dictionary(Of Type, Integer)) As Integer
+ Try
+ 'Aantal laden bijhouden.
+ Dim aantalLaden = 0
+
+ 'De types van de onderdelen overlopen.
+ Dim onderdeelType = vereisteOnderdelen.Keys.First()
+ 'Aantal onderdelen van dat type tellen.
+ Dim aantalOnderdelen = 0
+ 'Onderdelen overlopen.
+ For Each onderdeel In onderdelen
+ 'Type controleren.
+ If TypeName(onderdeel).Equals(onderdeelType.Name) Then
+ 'Type komt overeen.
+ aantalOnderdelen += 1
+ End If
+ Next
+
+ 'Berekenen hoeveel laden er aanwezig zijn.
+ Return aantalOnderdelen \ vereisteOnderdelen.Item(onderdeelType)
+ Catch ex As Exception
+ Throw New Exception($"Kon aantal laden niet opvragen {vbNewLine}{ex.Message}")
+ End Try
+ End Function
+
+ '''
+ ''' Opvragen onderdeel uit lijst van onderdelen voor bepaalde lade index.
+ '''
+ ''' Het type van het onderdeel
+ ''' De index van de lade
+ ''' De lijst met onderdelen
+ ''' Het onderdeel
+ Public Function GeefOnderdeelUitLade(Of T As IOnderdeel)(ladeIndex As Integer, onderdelen As List(Of IOnderdeel)) As T
+ Try
+ 'Bijhouden hoeveelste gespecifieerde onderdeel dit is.
+ Dim onderdeelIndex = 0
+
+ 'Onderdelen overlopen.
+ For Each onderdeel In onderdelen
+ 'Type controleren.
+ If TypeName(onderdeel).Equals(GetType(T).Name) Then
+ 'Type komt overeen.
+ 'Index verhogen.
+ onderdeelIndex += 1
+ 'Index onderdeel vergelijken met ladeIndex.
+ If onderdeelIndex = ladeIndex Then
+ 'Onderdeel retourneren, cast gebeurd automatisch, maar is sowieso correct.
+ Return onderdeel
+ End If
+ End If
+ Next
+ Return Nothing
+ Catch ex As Exception
+ Throw New Exception($"Kon onderdeel '{GetType(T).Name}' niet opvragen uit lade '{ladeIndex}'.{vbNewLine}{ex.Message}")
+ End Try
+ End Function
+
+ '''
+ ''' Opvragen onderdelen uit lijst van onderdelen voor bepaalde lade index.
+ '''
+ ''' Het type van een onderdeel
+ ''' De index van de lade
+ ''' De lijst met onderdelen
+ ''' Dictionary met als key het type van een onderdeel en waarde die het aantal aangeeft
+ ''' De lijst met de onderdelen
+ ''' Wanneer geen enkel onderdeel werd gevonden van type .
+ Public Function GeefOnderdelenUitLade(Of T As IOnderdeel)(ladeIndex As Integer, onderdelen As List(Of IOnderdeel), vereisteOnderdelen As Dictionary(Of Type, Integer)) As List(Of T)
+ Try
+ 'Bijhouden hoeveelste gespecifieerde onderdeel dit is.
+ Dim onderdeelIndex = 0
+ 'Opvragen aantal onderdelen van dat type.
+ Dim aantalOnderdelen = vereisteOnderdelen.Item(GetType(T))
+ 'Lijst met onderdelen.
+ Dim gevondenOnderdelen As New List(Of T)
+ 'Controleren dat er wel meerdere onderdelen aanwezig zijn.
+ If aantalOnderdelen <= 1 Then
+ Throw New Exception("Aantal onderdelen is te weinig om op te vragen voor een lade. Gebruik een andere functie (@programmeur).")
+ End If
+
+ 'Onderdelen overlopen.
+ For Each onderdeel In onderdelen
+ 'Type controleren.
+ If TypeName(onderdeel).Equals(GetType(T).Name) Then
+ 'Type komt overeen.
+ 'Onderdeel groep index berekenen.
+ Dim onderdeelGroepIndex = onderdeelIndex \ aantalOnderdelen
+ 'Onderdeel groep index vergelijken met lade index.
+ If onderdeelGroepIndex = ladeIndex Then
+ 'Onderdeel toevoegen aan lijst met gevonden onderdelen.
+ gevondenOnderdelen.Add(onderdeel)
+ End If
+ 'Index verhogen.
+ onderdeelIndex += 1
+ End If
+ Next
+
+ 'Aantal gevonden onderdelen controleren.
+ If gevondenOnderdelen.Count = 0 Then
+ 'Onderdeel werd niet gevonden.
+ Throw New Exception($"Type {GetType(T).Name} is niet aanwezig in de lijst met onderdelen.")
+ End If
+ 'Lijst met gevonden onderdelen retourneren.
+ Return gevondenOnderdelen
+ Catch ex As Exception
+ Throw New Exception($"Kon onderdelen '{GetType(T).Name}' niet opvragen uit lade '{ladeIndex}'.{vbNewLine}{ex.Message}")
+ End Try
+ End Function
+
+End Module