' robin de bock 10/08/2017 Imports System.Data.Odbc Imports TA_OR_rework.Domeincontroller Public Class FormGrid Private _tabel As Kolommen Private _waarde As Object Private _gegenereerd As Boolean = False Private _barcode As String Private _onderdeel As String Private _initiëleHoogteElementenBuitenDataGridViewCache As Integer Private _batchViaBarcodeOfToelevering As String Private _toeleveringIdViaBarcode As String Public Sub New() InitializeComponent() End Sub 'Filterbuttons en kolommen in reworkgrid genereren. Private Sub FormGrid_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 'Filter buttons configureren naargelang de resolutie. configureerGrootteFilterButtons() 'Genereren van de buttons om te filteren. genereerFilterButtons() 'De kolommen in het hoofdgrid genereren. genereerKolommenReworkGrid() _gegenereerd = True 'Tonen of de reworks wel verwerkt worden afhankelijk van de verwerkstatus (debuggen). lblVerwerking.Visible = Not Configs.geefVerwerkStatus End Sub 'Instellen van de data die door selectID form wordt meegegeven Public Sub LaadData(tabel As Kolommen, waarde As Object, ByRef datareader As Object) 'De data opslaan die het grid gaat gebruiken om zelf de data table op te vragen. Me._tabel = tabel Me._waarde = waarde LaadGridCache(datareader) resetFilterButtons() End Sub 'Instellen van de data die door selectID form worden meegegeven. Public Sub LaadData(tabel As Kolommen, waarde As Object) 'De data opslaan die het grid gaat gebruiken om zelf de data table op te vragen. Me._tabel = tabel Me._waarde = waarde 'Caché laden. LaadGridCache() End Sub Public Sub voegReworkRedenToe(reden() As String) Try toevoegenVanRework(_barcode, reden, _onderdeel, _tabel = Kolommen.barcodesVoorraad) Catch ex As Exception MessageBox.Show(ex.Message, "Er is een fout opgetreden...", MessageBoxButtons.OK, MessageBoxIcon.Error) Application.Exit() End Try _barcode = Nothing _onderdeel = Nothing refreshReworkButtonsGridCache() refreshReworkGrid() End Sub Private Sub btnVerwerkRework_VisibleChanged(sender As Object, e As System.EventArgs) Handles btnVerwerkRework.VisibleChanged refreshReworkButtonsGridCache() refreshReworkGrid() End Sub ''' ''' Grid laden met ofwel de meegegeven datatable, ofwel de data zelf ophalen aan de hand van de kolom en de waarde. ''' ''' Optionele data table. Private Sub LaadGridCache(Optional dataTable As DataTable = Nothing) Try 'De gridview vullen 'Kolommen laten auto-genereren. DataGridViewCache.AutoGenerateColumns = True 'Controleren of de data table is meegegeven en rijen bevat. If Not IsNothing(dataTable) AndAlso dataTable.Rows.Count > 0 Then 'Zo ja, laadt de gridview met de data table. DataGridViewCache.DataSource = dataTable Else 'Zo neen, controleer type kolom. Dit is nodig om te weten van waar de data table zal komen. If Not _tabel = Kolommen.barcodeArdis Then 'Ophalen bij Caché. DataGridViewCache.DataSource = CacheMapper.GeefDataTable(_tabel, _waarde) Else 'Ophalen bij Ardis. DataGridViewCache.DataSource = ArdisMapper.geefDataReader(_waarde) End If End If 'Refreshen van de grid view. DataGridViewCache.Refresh() Catch ex As Exception MessageBox.Show(ex.Message, "Er is een fout opgetreden...", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try 'Uitbreid buttons in- of uitschakelen afhankelijk van type kolom (van bij het zoeken). 'Alle buttons zichtbaar maken. btnToonMeerFilters.Visible = True btnHuidigeFilter.Visible = True btnUitbreidenBatch.Visible = True btnUitbreidenToelevering.Visible = True 'Controleren welk type kolom is gebruikt om te zoeken. If _tabel = Kolommen.barcode Then 'Barcode kan uitbreiden op batch en toelevering. btnUitbreidenBatch.Enabled = True btnUitbreidenToelevering.Enabled = True ElseIf _tabel = Kolommen.toelevering Then 'Toelevering kan uitbreiden op batch. btnUitbreidenBatch.Enabled = True ElseIf _tabel = Kolommen.barcodeArdis Then 'Barcode Ardis verbergt meer filters en huidige filter knoppen. btnToonMeerFilters.Visible = False btnHuidigeFilter.Visible = False Else 'Standaard staan de opties uitbreiden met batch en toelevering op uitgeschakelt. btnUitbreidenBatch.Enabled = False btnUitbreidenToelevering.Enabled = False End If 'Code die het rework grid pas refreshed als hoofdgrid gegenereerd is. 'Don't ask why it's necessary. 'Pls don't touch. If _gegenereerd Then refreshReworkGrid() End If End Sub 'selectie van veld afzetten voor beide grids Private Sub DataGridViewCache_SelectionChanged(sender As System.Object, e As System.EventArgs) Handles DataGridViewCache.SelectionChanged DataGridViewCache.ClearSelection() End Sub Private Sub DataGridViewReworks_SelectionChanged(sender As System.Object, e As System.EventArgs) Handles DataGridViewReworks.SelectionChanged DataGridViewReworks.ClearSelection() End Sub 'CACHE 'instellen kolommen en opmaak verzorgen nadat data in grid is geladen Private Sub DataGridViewCache_DataBindingComplete(sender As System.Object, e As System.Windows.Forms.DataGridViewBindingCompleteEventArgs) Handles DataGridViewCache.DataBindingComplete 'de zelf toegevoegde kolommen achteraan zetten, OPGELET INDEXEN IN CODE,DE ZELF TOEGEVOEGDE KOLOMMEN KRIJGEN INDEX INDEX 0->2, ookal staan ze zichtbaar achteraan For i As Integer = 0 To 2 DataGridViewCache.Columns(i).DisplayIndex = DataGridViewCache.ColumnCount - (3 - i) Next For i As Integer = 0 To Me.DataGridViewCache.Rows.Count - 1 'de kolommen voor: toon detail, toevoegen rework, print label tekst geven Me.DataGridViewCache.Rows(i).Cells("toonDetail").Value = "Toon detail" Me.DataGridViewCache.Rows(i).Cells("toevoegenRework").Value = "Toevoegen rework" Me.DataGridViewCache.Rows(i).Cells("print").Value = "Print label" 'de reworks kleuren + leegmaken als 0 If Me.DataGridViewCache.Rows(i).Cells("rework").Value <= 0 Then Me.DataGridViewCache.Rows(i).Cells("rework").Style.ForeColor = ConfiguratieKleuren.geefReworkKleur(0) ElseIf Me.DataGridViewCache.Rows(i).Cells("rework").Value = 1 Then Me.DataGridViewCache.Rows(i).Cells("rework").Style.BackColor = ConfiguratieKleuren.geefReworkKleur(1) Me.DataGridViewCache.Rows(i).Cells("rework").Style.ForeColor = Color.Black ElseIf Me.DataGridViewCache.Rows(i).Cells("rework").Value > 1 Then Me.DataGridViewCache.Rows(i).Cells("rework").Style.BackColor = ConfiguratieKleuren.geefReworkKleur(2) Me.DataGridViewCache.Rows(i).Cells("rework").Style.ForeColor = Color.Black End If 'de lijn die bij de onderdelen hoort kleuren Try Dim kleur As Color = Configs.geefKleurOnderdeel(Me.DataGridViewCache.Rows(i).Cells("onderdeel").Value) Dim kolomNaam As String For teller As Integer = 3 To 9 kolomNaam = Me.DataGridViewCache.Columns(teller).Name DataGridViewCache.Rows(i).Cells(kolomNaam).Style.BackColor = kleur Next 'kleur instellen van de status kolom kleur = ConfiguratieKleuren.geefKleurStatus(Me.DataGridViewCache.Rows(i).Cells("status").Value) Me.DataGridViewCache.Rows(i).Cells("status").Style.BackColor = kleur Catch ex As Exception MessageBox.Show(ex.Message, "Er is een fout opgetreden...", MessageBoxButtons.OK, MessageBoxIcon.Error) Application.Exit() End Try If _tabel = Kolommen.barcode AndAlso Me.DataGridViewCache.Rows(i).Cells("VerwerkingID").Value = _waarde Then _batchViaBarcodeOfToelevering = Me.DataGridViewCache.Rows(i).Cells("batchID").Value _toeleveringIdViaBarcode = Me.DataGridViewCache.Rows(i).Cells("toeleveringID").Value End If Next 'als er wordt opgezocht met toelevering het batchID opslaan If _tabel = Kolommen.toelevering Then If DataGridViewCache.RowCount > 0 Then _batchViaBarcodeOfToelevering = Me.DataGridViewCache.Rows(0).Cells("batchID").Value End If End If 'aligneren van de status en rework kolom DataGridViewCache.Columns(10).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter DataGridViewCache.Columns(11).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter 'zorgen dat de rework knoppen een andere kleur zijn als ze zijn geselecteerd als rework refreshReworkButtonsGridCache() End Sub 'klikken op buttons in de gridviewCache Private Sub DataGridViewCache_CellClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridViewCache.CellClick Dim rowIndex = e.RowIndex Dim colIndex = e.ColumnIndex Try If rowIndex >= 0 And colIndex >= 0 Then 'als er op de header wordt gedrukt geven ze index -1 Dim colName As String = DataGridViewCache.Columns(colIndex).Name _barcode = DataGridViewCache.Rows(rowIndex).Cells(8).Value.ToString _onderdeel = DataGridViewCache.Rows(rowIndex).Cells(9).Value.ToString Select Case colName Case "toonDetail" toonDetails(_barcode) Case "toevoegenRework" If getInstance.bestaatRework(_barcode) Then getInstance.verwijderRework(_barcode) refreshReworkGrid() refreshReworkButtonsGridCache() Else 'voor testen default waarde meegeven If Not Configs.geefVerwerkStatus Then Dim reden() As String = {"RedenCode", "RedenLabel"} voegReworkRedenToe(reden) ElseIf _tabel = Kolommen.barcodesVoorraad Then 'Als het om voorraad in te vullen is wordt niks meegegeven als reden. Dim reden() As String = {String.Empty, String.Empty} voegReworkRedenToe(reden) ElseIf _tabel = Kolommen.barcodeArdis Then Dim reden() As String = {"Code", "Special zijkant"} voegReworkRedenToe(reden) Else FormController.getInstance.laadFormReworkRedenen(Me, _onderdeel) End If End If Case "print" printLabelUit(_barcode) End Select End If Catch ex As Exception MessageBox.Show(ex.Message, "Er is een fout opgetreden...", MessageBoxButtons.OK, MessageBoxIcon.Error) Application.Exit() End Try End Sub Private Sub btnToonMeerFilters_Click(sender As System.Object, e As System.EventArgs) Handles btnToonMeerFilters.Click klapToeOpen() End Sub ''' ''' Datagrid laden aan de hand van een filter. De data wordt zelf opgehaald. ''' ''' De filter Private Sub LaadGridCacheMetFilter(filter As String) Try DataGridViewCache.AutoGenerateColumns = True 'Data table opvragen en toewijzen aan grid view. DataGridViewCache.DataSource = CacheMapper.GeefdataTable(_tabel, _waarde, filter) DataGridViewCache.Refresh() 'Rework knoppen per rij een keer laten updaten. refreshReworkButtonsGridCache() Catch ex As Exception MessageBox.Show(ex.Message, "Er is een fout opgetreden...", MessageBoxButtons.OK, MessageBoxIcon.Error) Application.Exit() End Try End Sub Private Sub toonDetails(barcode As String) FormController.getInstance.laadFormDetail(Me, barcode) End Sub Private Sub toevoegenVanRework(barcode As String, reden() As String, onderdeel As String, voorVoorraad As Boolean) Try If getInstance.bestaatRework(barcode) Then getInstance.verwijderRework(barcode) Else getInstance.addRework(barcode, reden, onderdeel, voorVoorraad) End If Catch ex As Exception MessageBox.Show(ex.Message, "Er is een fout opgetreden...", MessageBoxButtons.OK, MessageBoxIcon.Error) Application.Exit() End Try refreshReworkGrid() refreshReworkButtonsGridCache() End Sub Private Sub genereerKolommenReworkGrid() 'de kolommen toevoegen en benoemen DataGridViewReworks.ColumnCount = 5 DataGridViewReworks.Columns(2).Name = "Barcode" DataGridViewReworks.Columns(3).Name = "Onderdeel" DataGridViewReworks.Columns(4).Name = "Reden rework" 'opslaan ardis en de verwijder kolom achteraan zetten DataGridViewReworks.Columns(0).DisplayIndex = 4 DataGridViewReworks.Columns(1).DisplayIndex = 4 End Sub Private Sub refreshReworkGrid() 'leegmaken van de grid DataGridViewReworks.Rows.Clear() Try 'de waarden van de reworks ophalen en in de grid steken Dim index As Integer = 0 For Each rework As String() In getInstance.geefReworks() Dim row As String() = New String() {rework(3), "verwijder", rework(0), rework(1), rework(2)} DataGridViewReworks.Rows.Add(row) 'de lijn die bij de onderdelen hoort kleuren Dim kleur As Color = Configs.geefKleurOnderdeel(rework(1)) DataGridViewReworks.Rows(index).Cells(2).Style.BackColor = kleur DataGridViewReworks.Rows(index).Cells(3).Style.BackColor = kleur 'het vak kleuren dat opslaan in Ardis regelt Me.DataGridViewReworks.Rows(index).Cells("opslaanArdis").Style.BackColor = ConfiguratieKleuren.geefOpslaanArdisKleur(rework(3)) index += 1 Next Catch ex As Exception MessageBox.Show(ex.Message, "Er is een fout opgetreden...", MessageBoxButtons.OK, MessageBoxIcon.Error) Application.Exit() End Try Try 'label dat aantal reworks bijhoud updaten lblAantalReworks.Text = getInstance.geefAantalReworks 'button enabled maken als reworks aantal hoog genoeg is If getInstance.geefAantalReworks > 0 Then btnVerwerkRework.Enabled = True Else btnVerwerkRework.Enabled = False End If Catch ex As Exception MessageBox.Show(ex.Message, "Er is een fout opgetreden...", MessageBoxButtons.OK, MessageBoxIcon.Error) Application.Exit() End Try End Sub 'klikken op buttons in de gridviewReworks Private Sub DataGridViewReworks_CellClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridViewReworks.CellClick Dim rowIndex = e.RowIndex Dim colIndex = e.ColumnIndex Try If rowIndex >= 0 And colIndex >= 0 Then 'als er op de header wordt gedrukt geven ze index -1 Dim barcode As String = DataGridViewReworks.Rows(rowIndex).Cells(2).Value.ToString If DataGridViewReworks.Columns(colIndex).Name.Equals("verwijderRework") Then getInstance.verwijderRework(barcode) refreshReworkGrid() refreshReworkButtonsGridCache() ElseIf DataGridViewReworks.Columns(colIndex).Name.Equals("opslaanArdis") Then getInstance.wijzigOpslaanArdisRework(barcode) refreshReworkGrid() End If End If Catch ex As Exception MessageBox.Show(ex.Message, "Er is een fout opgetreden...", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Sub refreshReworkButtonsGridCache() For i As Integer = 0 To Me.DataGridViewCache.Rows.Count - 1 Try 'kijken wat de barcode is van de lijn Dim barcode As String = Me.DataGridViewCache.Rows(i).Cells(8).Value If getInstance.bestaatRework(barcode) Then Me.DataGridViewCache.Rows(i).Cells("toevoegenRework").Style.BackColor = ConfiguratieKleuren.geefReworkKleur(2) Me.DataGridViewCache.Rows(i).Cells("toevoegenRework").Value = "Verwijder rework" Else 'als barcode is gebruikt om op te vragen, laten zien welke rij correspondeerd met de barcode (barcode geeft meer dan 1 resultaat) If (_tabel = Kolommen.barcode Or _tabel = Kolommen.barcodeArdis) AndAlso CStr(Me.DataGridViewCache.Rows(i).Cells("VerwerkingID").Value).ToUpper = CStr(_waarde).ToUpper Then Me.DataGridViewCache.Rows(i).Cells("toevoegenRework").Style.BackColor = ConfiguratieKleuren.geefReworkKleur(1) _batchViaBarcodeOfToelevering = Me.DataGridViewCache.Rows(0).Cells("batchID").Value _toeleveringIdViaBarcode = Me.DataGridViewCache.Rows(0).Cells("toeleveringID").Value Else Me.DataGridViewCache.Rows(i).Cells("toevoegenRework").Style.BackColor = DefaultBackColor End If Me.DataGridViewCache.Rows(i).Cells("toevoegenRework").Value = "Toevoegen rework" End If Catch ex As Exception MessageBox.Show(ex.Message, "Er is een fout opgetreden...", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try Next End Sub Private Sub printLabelUit(barcode As String) FormController.getInstance.laadFormLabel(Me, barcode) End Sub Private Sub btnSelectie_Click(sender As System.Object, e As System.EventArgs) Handles btnSelectie.Click FormController.getInstance.laadFormSelectID(Me) End Sub 'als uit form wordt gegaan openklap menu verbergen Private Sub FormGrid_VisibleChanged(sender As System.Object, e As System.EventArgs) Handles MyBase.VisibleChanged panelFilterButtons.Visible = False End Sub Private tussenruimteButtons(1) As Integer 'configureren van de grootte van de filter buttons Private Sub configureerGrootteFilterButtons() Dim verhouding As Double = 80 / 1080 btnToonAlles.Height = verhouding * Me.Size.Height verhouding = 90 / 1080 tussenruimteButtons(0) = verhouding * Me.Size.Height verhouding = 18 / 1080 tussenruimteButtons(1) = verhouding * Me.Size.Height End Sub 'maken van de filter buttons en ze in het panel zetten + kleur Private Sub genereerFilterButtons() Try Dim onderdelen As List(Of String) = Configs.Onderdelen panelFilterButtons.Height = onderdelen.Count * btnHuidigeFilter.Height panelFilterButtons.Width = btnToonAlles.Width panelFilterButtons.AutoSize = True panelFilterButtons.AutoSizeMode = Windows.Forms.AutoSizeMode.GrowAndShrink For index As Integer = 0 To onderdelen.Count - 1 Dim newButton = New Windows.Forms.Button newButton.AutoSize = False newButton.Name = "btn" + CStr(index) newButton.Text = "Filter op " + onderdelen(index).ToLower newButton.Top = (index + 1) * tussenruimteButtons(0) + tussenruimteButtons(1) newButton.Font = New Font("Microsoft Sans Serif", 15) newButton.BackColor = Configs.geefKleurOnderdeel(onderdelen(index)) newButton.Size = btnToonAlles.Size AddHandler newButton.Click, AddressOf ButtonClicked panelFilterButtons.Controls.Add(newButton) Next Catch ex As Exception MessageBox.Show(ex.Message, "Er is een fout opgetreden...", MessageBoxButtons.OK, MessageBoxIcon.Error) Application.Exit() End Try End Sub Private gedrukteKnop As Button Private Sub ButtonClicked(sender As Object, e As EventArgs) If gedrukteKnop IsNot Nothing Then gedrukteKnop.Enabled = True gedrukteKnop = Nothing End If 'de "toon alles" button enabled maken btnToonAlles.Enabled = True 'kijken op wat de button sorteert Dim button As Button = sender Dim filter As String = button.Text.Replace("Filter op", "").Trim 'grid laden met filter laadGridCacheMetFilter(filter) 'laten zien op wat er gesorteert wordt en de button disbled maken btnHuidigeFilter().Text = "Gefilterd op " + filter btnHuidigeFilter.BackColor = Configs.geefKleurOnderdeel(filter) button.Enabled = False gedrukteKnop = button 'openklap menu verbergen klapToeOpen() End Sub Private Sub btnToonAlles_Click(sender As System.Object, e As System.EventArgs) Handles btnToonAlles.Click LaadGridCache() klapToeOpen() resetFilterButtons() End Sub Private Sub resetFilterButtons() btnToonAlles.Enabled = False btnHuidigeFilter.Text = "" btnHuidigeFilter.BackColor = DefaultBackColor If gedrukteKnop IsNot Nothing Then gedrukteKnop.Enabled = True gedrukteKnop = Nothing End If 'knop verbergen als er werd gezocht via iets dat niet gefilterd mag worden If _tabel = Kolommen.barcodesVoorraad Then btnToonMeerFilters.Enabled = False Else btnToonMeerFilters.Enabled = True End If End Sub Private Sub klapToeOpen() panelFilterButtons.Visible = Not panelFilterButtons.Visible End Sub 'uitbreiden tot batch/levering Private Sub btnUitbreidenBatch_Click_1(sender As System.Object, e As System.EventArgs) Handles btnUitbreidenBatch.Click _tabel = Kolommen.batch _waarde = _batchViaBarcodeOfToelevering btnUitbreidenBatch.Enabled = False btnUitbreidenToelevering.Enabled = False LaadGridCache() resetFilterButtons() End Sub Private Sub btnUitbreidenToelevering_Click(sender As System.Object, e As System.EventArgs) Handles btnUitbreidenToelevering.Click _tabel = Kolommen.toelevering _waarde = _toeleveringIdViaBarcode btnUitbreidenToelevering.Enabled = False LaadGridCache() resetFilterButtons() End Sub Private Sub btnVerwerkRework_Click(sender As System.Object, e As System.EventArgs) Handles btnVerwerkRework.Click Try getInstance.verdeelReworkZijkantenOverReworkTray() refreshReworkButtonsGridCache() refreshReworkGrid() If Domeincontroller.getInstance.geefAantalReworkTrays <= 0 Then Domeincontroller.getInstance.verwerkReworks() FormController.getInstance.laadFormSelectID(Me) Else FormController.getInstance.laadFormReworkTrayPrinter(Me) End If Catch ex As Exception MessageBox.Show(ex.Message, "Er is een fout opgetreden...", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Sub FormGrid_SizeChanged(sender As System.Object, e As System.EventArgs) Handles MyBase.SizeChanged$ stelInitieleSizeWaardenIn() Dim grootte As Integer = Math.Floor(14 * (Me.Size.Width / CDbl(1920))) DataGridViewCache.DefaultCellStyle.Font = New Font("Microsoft Sans Serif", grootte) DataGridViewCache.ColumnHeadersDefaultCellStyle.Font = New Font("Microsoft Sans Serif", grootte) DataGridViewReworks.ColumnHeadersDefaultCellStyle.Font = New Font("Microsoft Sans Serif", grootte) DataGridViewReworks.ColumnHeadersDefaultCellStyle.Font = New Font("Microsoft Sans Serif", grootte) Dim standaardHoogte As Integer = DataGridViewCache.RowTemplate.Height Dim hoogte As Integer = (If(Me.Size.Height > 1080, 1080, Me.Size.Height) - _initiëleHoogteElementenBuitenDataGridViewCache) hoogte -= hoogte Mod DataGridViewCache.ColumnHeadersHeight DataGridViewCache.Height = hoogte End Sub Private Sub stelInitieleSizeWaardenIn() If _initiëleHoogteElementenBuitenDataGridViewCache <= 0 Then 'hoogte van alle elementen buiten datagridview cache opslaan _initiëleHoogteElementenBuitenDataGridViewCache = 1080 - DataGridViewCache.Size.Height End If End Sub End Class