Imports System.Data Imports System.Data.SqlClient Imports System.IO Public Class mountingForm Public mountStart As Boolean = False Public status As Boolean = False Public mountAfter As Boolean = False Public reload As Boolean = False Public qacheck As Boolean = False Private sequence As New Sequence() Private currentsequence As String Private currentrev As String Private currentline As String Private currentmodel As String Private currenttype As String Private isQA As Boolean = False Private kseqno As String Private Sub mountingForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.MdiParent = mainForm Control.CheckForIllegalCrossThreadCalls = False getSequence() Timer1.Interval = 500 Timer1.Start() Timer1.Enabled = False btn_reload.Enabled = False btn_Check.Enabled = False btnComplete.Visible = False dg.Visible = False initializeDG() End Sub Private Sub getSequence() Dim sequence As New Sequence Dim sequenceList As New List(Of String) Dim i As Integer = 0 cmbRev.Items.Clear() sequenceList = sequence.getValidSequence() cmbSeq.Items.Clear() While i < sequenceList.Count cmbSeq.Items.Add(sequenceList(i)) i = i + 1 End While End Sub Public Sub getRevisions() Dim rev As New Sequence Dim revList As New List(Of String) Dim i As Integer = 0 revList = rev.getRevisions(cmbSeq.SelectedItem, cmbLine.SelectedItem, cmbModel.SelectedItem, cmbType.SelectedItem) cmbRev.Items.Clear() While i < revList.Count cmbRev.Items.Add(revList(i)) i = i + 1 End While End Sub Public Sub getModels() Dim rev As New Sequence Dim revList As New List(Of String) Dim i As Integer = 0 revList = rev.getModel(cmbSeq.SelectedItem, cmbLine.SelectedItem) cmbModel.Items.Clear() While i < revList.Count cmbModel.Items.Add(revList(i)) i = i + 1 End While End Sub Public Sub getTypes() Dim rev As New Sequence Dim revList As New List(Of String) Dim i As Integer = 0 revList = rev.getTypes(cmbSeq.SelectedItem, cmbLine.SelectedItem, cmbModel.SelectedItem) cmbType.Items.Clear() While i < revList.Count cmbType.Items.Add(revList(i)) i = i + 1 End While End Sub Public Sub getLines() Dim rev As New Sequence Dim revList As New List(Of String) Dim i As Integer = 0 revList = rev.getLines(cmbSeq.SelectedItem) cmbLine.Items.Clear() While i < revList.Count cmbLine.Items.Add(revList(i)) i = i + 1 End While End Sub Private Sub txtStart_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtStart.KeyUp If e.KeyCode = Keys.Enter Then Dim fChar As String = String.Empty Dim entry As String = txtStart.Text Dim str() As String If mountAfter = True Then clear() mountAfter = False Timer1.Enabled = False lbl_Pass.Visible = False lbl_fail.Visible = False End If fChar = Mid(entry, 1, 1) If entry.Contains("*") Then txtFeeder.Text = entry.Replace("*", "") txtStart.Text = String.Empty txtStart.Focus() ElseIf fChar = "@" Then txtOperator.Text = Mid(entry, 2, Len(entry)) txtStart.Text = String.Empty txtStart.Focus() ' ElseIf (IsNumeric(entry) And Len(entry) <> 15) Then ' txtQuantity.Text = entry ' txtStart.Text = String.Empty ' txtStart.Focus() ElseIf IsSerialNumber(entry) Then txtSerial.Text = entry Dim parts As New PartsRecords(entry) txtPartNo.Text = parts.IonicsPN txtPartDesc.Text = parts.Description txtLotNum.Text = parts.LotNo txtQuantity.Text = parts.Quantity txtStart.Text = String.Empty txtStart.Focus() End If 'validate inputs If validateInput() Then str = Split(txtFeeder.Text, "-") If isQA = True Then txtQuantity.Text = "0" Dim mounting As New Mounting mounting.mDate = DateTime.Now mounting.machine = str(0) mounting.revision = sequence.revision mounting.feeder = str(1) mounting.partno = txtPartNo.Text mounting.quantity = CDbl(txtQuantity.Text) mounting.lotNumber = txtLotNum.Text mounting.mOperator = txtOperator.Text mounting.lblserial = txtSerial.Text mounting.sequenceno = kseqno mounting.threePL = 0 sequence.sequenceno = kseqno If sequence.verify(txtPartNo.Text, str(0), str(1)) = True Then lbl_Pass.Visible = True lbl_fail.Visible = False mounting.verify = 1 status = True mountAfter = True Timer1.Enabled = True updateDGPass(txtFeeder.Text) If loginForm.userType = "Operator" Then If Not isQA Then Dim parts As New PartsRecords parts.mount(txtSerial.Text) End If Else 'mounting.add_hist(reload, qacheck, status) End If Else lbl_Pass.Visible = False lbl_fail.Visible = True mounting.verify = 0 status = False mountAfter = True Timer1.Enabled = True updateDGFail(txtFeeder.Text) End If mounting.add(reload, isQA, status) checkComplete() Else txtStart.Text = String.Empty txtStart.Focus() End If End If End Sub Public Shared Function IsNumeric(ByVal sText As String) As Boolean If Double.TryParse(sText, Globalization.NumberStyles.AllowDecimalPoint) Then Return True Else Return False End If End Function Public Shared Function IsSerialNumber(ByVal sText As String) As Boolean Dim isPartNo As Boolean = False Dim cnstr = mainForm.cnstr Dim conn As New SqlConnection(cnstr) Dim myQuery As String myQuery = "SELECT * FROM PartsRecords WHERE SerialNum = '" & sText & "' AND (Status = 'PDN' OR Status = 'SMT')" Dim mycommand As SqlCommand mycommand = New SqlCommand(myQuery, conn) Try conn.Open() Dim reader As SqlDataReader = mycommand.ExecuteReader() If reader.HasRows Then reader.Read() If (reader("Status") = "SMT") Then mountingForm.reload = True Else mountingForm.reload = False End If isPartNo = True End If reader.Close() conn.Close() Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) conn.Close() End Try Return isPartNo End Function Public Shared Function getDesc(ByVal partNum As String) As String Dim desc As String = String.Empty Dim cnstr = mainForm.cnstr Dim conn As New SqlConnection(cnstr) Dim myQuery As String myQuery = "SELECT * FROM KPARTS WHERE KPTPARTNUM = '" & partNum & "'" Dim mycommand As SqlCommand mycommand = New SqlCommand(myQuery, conn) Try conn.Open() Dim reader As SqlDataReader = mycommand.ExecuteReader() reader.Read() desc = reader("KPTDESCRIPTION") conn.Close() Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) conn.Close() End Try Return desc End Function Private Function validateInput() As Boolean Dim valid As Boolean = False If qacheck = True Then If txtPartNo.Text <> "" And txtFeeder.Text <> "" And txtOperator.Text <> "" Then valid = True End If Else If txtPartNo.Text <> "" And txtFeeder.Text <> "" And txtLotNum.Text <> "" And txtQuantity.Text <> "" And txtOperator.Text <> "" Then valid = True End If End If Return valid End Function Private Sub clear() txtSerial.Text = String.Empty txtFeeder.Text = String.Empty txtPartNo.Text = String.Empty txtPartDesc.Text = String.Empty txtQuantity.Text = String.Empty txtLotNum.Text = String.Empty txtOperator.Text = String.Empty txtStart.Text = String.Empty End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If Timer1.Enabled = True Then If Timer1.Tag = True Then If status = True Then lbl_Pass.Visible = True Else lbl_fail.Visible = True End If Timer1.Tag = False Else If status = True Then lbl_Pass.Visible = False Else lbl_fail.Visible = False End If Timer1.Tag = True End If End If End Sub Private Sub btn_setSequence_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_setSequence.Click If mountStart = False Then If cmbSeq.SelectedItem <> "" And cmbRev.SelectedItem <> "" And cmbModel.SelectedItem <> "" And cmbLine.SelectedItem <> "" And cmbType.SelectedItem <> "" Then kseqno = sequence.getSequenceNo(cmbSeq.SelectedItem, cmbLine.SelectedItem, cmbModel.SelectedItem, cmbType.SelectedItem, cmbRev.SelectedItem) sequence.account = cmbSeq.SelectedItem sequence.revision = cmbRev.SelectedItem cmbSeq.Enabled = False cmbRev.Enabled = False cmbModel.Enabled = False cmbLine.Enabled = False cmbType.Enabled = False btn_reload.Enabled = True btn_Check.Enabled = True If isQA Then btnReload.Visible = True Else btnQA.Visible = True End If btn_setSequence.Text = "Change Sequence" txtStart.Focus() 'If (Not currentsequence = sequence.account Or Not currentrev = sequence.revision Or Not currentmodel = sequence.model Or Not currentline = sequence.line Or Not currenttype = sequence.pcbside) Then ' qaMode() ' clear() ' Timer1.Stop() ' lbl_fail.Visible = False ' lbl_Pass.Visible = False ' btnReload.Visible = False 'Else ' checkComplete() 'End If If (MessageBox.Show("Do you want to resume mounting sequence?", "Message", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes) Then checkComplete() Else qaMode() clear() Timer1.Stop() lbl_fail.Visible = False lbl_Pass.Visible = False btnReload.Visible = False End If currentsequence = sequence.account currentrev = sequence.revision currentline = sequence.line currentmodel = sequence.model currenttype = sequence.pcbside mountStart = True Else MessageBox.Show("Please select the machine and revision to use.", "Set Machine", MessageBoxButtons.OK, MessageBoxIcon.Error) End If Else btn_setSequence.Text = "Set Sequence" btnQA.Visible = False cmbSeq.Enabled = True cmbRev.Enabled = True cmbModel.Enabled = True cmbLine.Enabled = True cmbType.Enabled = True btn_reload.Enabled = False btn_Check.Enabled = False btnReload.Visible = False mountStart = False End If End Sub Private Sub cmbSeq_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbSeq.SelectedIndexChanged getLines() btn_reload.Enabled = False btn_Check.Enabled = False End Sub Private Sub btn_reload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_reload.Click If reload = False Then btn_reload.Text = "Set Normal Mode" reload = True btn_Check.Visible = False txtStart.Focus() Me.BackColor = Color.HotPink Else btn_reload.Text = "Set Reload Mode" reload = False btn_Check.Visible = False txtStart.Focus() Me.BackColor = System.Drawing.SystemColors.Control End If End Sub Private Sub GroupBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox1.Enter End Sub Public Sub qaMode() btnReload.Text = "Normal Mode" btnComplete.Visible = True qacheck = True btnQA.Visible = False btnReload.Visible = False btn_reload.Visible = False txtLotNum.Visible = False Label8.Visible = False txtQuantity.Visible = False Label7.Visible = False Me.BackColor = Color.Goldenrod dg.Visible = True fillDataSet() fillDataGridView() txtStart.Focus() End Sub Private Sub btn_Check_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Check.Click If qacheck = False Then qaMode() Else reloadMode() End If End Sub Public Sub reloadMode() btnReload.Text = "Normal Mode" btnComplete.Visible = False btnQA.Visible = True btnReload.Visible = False qacheck = False btn_reload.Visible = False txtLotNum.Visible = True Label8.Visible = True txtQuantity.Visible = True Label7.Visible = True Me.BackColor = System.Drawing.SystemColors.Control dg.Visible = False txtStart.Focus() Dim m As New Mounting m.addSettings(cmbLine.SelectedItem.ToString, kseqno) End Sub Private Sub initializeDG() Dim Serial As New DataGridViewTextBoxColumn Dim Feeder As New DataGridViewTextBoxColumn Dim PartNo As New DataGridViewTextBoxColumn Dim Status As New DataGridViewTextBoxColumn Serial.HeaderText = "Serial" Feeder.HeaderText = "Feeder" PartNo.HeaderText = "PartNumber" Status.HeaderText = "Status" dg.Columns.Add(Feeder) dg.Columns.Add(PartNo) dg.Columns.Add(Status) dg.Columns.Add(Serial) dg.Columns(0).ReadOnly = True dg.Columns(1).ReadOnly = True dg.Columns(2).ReadOnly = True dg.Columns(3).ReadOnly = True dg.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.None dg.Columns(0).Width = 75 dg.Columns(1).Width = 180 dg.Columns(2).Width = 100 dg.Columns(3).Width = 150 dg.Columns(0).SortMode = DataGridViewColumnSortMode.Programmatic dg.Columns(1).SortMode = DataGridViewColumnSortMode.Programmatic dg.Columns(2).SortMode = DataGridViewColumnSortMode.Programmatic dg.Columns(3).SortMode = DataGridViewColumnSortMode.Programmatic End Sub Private Sub fillDataSet() Dim i As Integer Dim limit As Integer Dim cnstr = mainForm.cnstr Dim conn As New SqlConnection(cnstr) Dim adapter As New SqlDataAdapter kseqno = sequence.getSequenceNo(cmbSeq.SelectedItem, cmbLine.SelectedItem, cmbModel.SelectedItem, cmbType.SelectedItem, cmbRev.SelectedItem) Dim myQuery As String myQuery = "SELECT * FROM KSEQUENCE_DETAIL WHERE KSEQUENCENO = '" & kseqno & "'" Dim mycommand As SqlCommand mycommand = New SqlCommand(myQuery, conn) Try conn.Open() adapter.SelectCommand = mycommand ds.Clear() adapter.Fill(ds) i = 0 limit = ds.Tables(0).Rows.Count - 1 Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally conn.Close() End Try End Sub Private Sub fillDataGridView() Dim i As Integer = 0 dg.Rows.Clear() For i = 0 To ds.Tables(0).Rows.Count - 1 dg.Rows.Add() dg.Rows(i).Cells(0).Value = ds.Tables(0).Rows(i).Item("KSQMODULE") + "-" + ds.Tables(0).Rows(i).Item("KSQFEEDERNO") dg.Rows(i).Cells(1).Value = ds.Tables(0).Rows(i).Item("KSQPARTNO") dg.Rows(i).Cells(2).Value = "" dg.Rows(i).Cells(3).Value = "" Next End Sub Private Sub updateDGPass(ByVal Feeder As String) Dim i As Integer = 0 If dg.Rows.Count > 0 Then While i < dg.Rows.Count If dg.Rows(i).Cells(0).Value = Feeder Then dg.Rows(i).Cells(2).Value = "PASS" dg.Rows(i).Cells(3).Value = txtSerial.Text dg.Rows(i).Cells(0).Style.BackColor = Color.Green dg.Rows(i).Cells(1).Style.BackColor = Color.Green dg.Rows(i).Cells(2).Style.BackColor = Color.Green dg.Rows(i).Cells(3).Style.BackColor = Color.Green 'dg.Rows(i).Selected = True 'dg.Rows(i).Cells(0).Selected = True dg.CurrentCell = dg(0, i) End If i = i + 1 End While End If End Sub Private sub updateDGFail(ByVal Feeder As String) Dim i As Integer = 0 If dg.Rows.Count > 0 Then While i < dg.Rows.Count If dg.Rows(i).Cells(0).Value = Feeder Then dg.Rows(i).Cells(2).Value = "FAIL" dg.Rows(i).Cells(3).Value = txtSerial.Text dg.Rows(i).Cells(0).Style.BackColor = Color.Red dg.Rows(i).Cells(1).Style.BackColor = Color.Red dg.Rows(i).Cells(2).Style.BackColor = Color.Red dg.Rows(i).Cells(3).Style.BackColor = Color.Red 'dg.Rows(i).Selected = True 'dg.Rows(i).Cells(0).Selected = True dg.CurrentCell = dg(0, i) End If i = i + 1 End While End If End Sub Private Sub btnComplete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnComplete.Click Dim msg As String = "" Dim i As Integer = 0 Dim t As Integer = 0 Dim p As Integer = 0 Dim f As Integer = 0 If dg.Rows.Count > 0 Then While i < dg.Rows.Count - 1 If dg.Rows(i).Cells(2).Value <> "" Then If dg.Rows(i).Cells(2).Value = "PASS" Then p = p + 1 End If If dg.Rows(i).Cells(2).Value = "FAIL" Then f = f + 1 End If t = t + 1 End If i = i + 1 End While End If msg = vbCrLf + "RESULT :" + vbCrLf + t.ToString + " of " + i.ToString + " checked" + vbCrLf + vbCrLf + "PASSED = " + p.ToString + vbCrLf + "FAILED = " + f.ToString myMessageBox.Show(msg) txtStart.Focus() End Sub Private Sub checkComplete() Dim i As Integer = 0 Dim t As Integer = 0 If dg.Rows.Count > 0 Then While i < dg.Rows.Count - 1 If dg.Rows(i).Cells(2).Value <> "" Then t = t + 1 End If i = i + 1 End While End If If i = t Then 'If btnComplete.Visible = False Then 'btnComplete_Click(Me, EventArgs.Empty) ' End If If qacheck Then btnComplete_Click(Me, EventArgs.Empty) Dim p As Integer = 0 Dim f As Integer = 0 i = 0 t = 0 If dg.Rows.Count > 0 Then While i < dg.Rows.Count - 1 If dg.Rows(i).Cells(2).Value <> "" Then If dg.Rows(i).Cells(2).Value = "PASS" Then p = p + 1 End If If dg.Rows(i).Cells(2).Value = "FAIL" Then f = f + 1 End If t = t + 1 End If i = i + 1 End While End If If f = 0 Then MsgBox("Complete!", MsgBoxStyle.OkOnly) clear() reloadMode() End If End If End If End Sub Private Sub dg_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dg.CellContentClick txtStart.Focus() End Sub Private Sub dg_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dg.CellClick txtStart.Focus() End Sub Private Sub dg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dg.Click txtStart.Focus() End Sub Private Sub cmbPlant_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) getSequence() End Sub Private Sub chkstart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkstart.CheckedChanged If chkstart.Checked = True Then fillDataSet() fillDataGridView() txtStart.Focus() Else End If End Sub Private Sub btnReload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReload.Click 'qacheck = False isQA = False reloadMode() clear() End Sub Private Sub btnQA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnQA.Click isQA = True qaMode() clear() btnReload.Visible = True End Sub Private Sub cmbLine_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbLine.SelectedIndexChanged getModels() End Sub Private Sub cmbRev_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbRev.SelectedIndexChanged End Sub Private Sub cmbModel_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbModel.SelectedIndexChanged getTypes() End Sub Private Sub cmbType_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbType.SelectedIndexChanged getRevisions() End Sub End Class