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