입력한 패킹코드가 시리얼번호가 여러개 있는 패킹에 포함된 시리얼번호이면, 해당 시리얼번호만 삭제하도록 수정

This commit is contained in:
KwakJooYoung 2025-09-25 14:36:27 +09:00
parent b76c563d90
commit 5dddf07326

View File

@ -1,11 +1,30 @@
'Imports System.Data.OleDb
'Imports System.Reflection
Imports System.ComponentModel
Imports System.IO.Ports
Imports Microsoft.Office.Core
Imports Excel = Microsoft.Office.Interop.Excel
''Imports Microsoft.Office.Interop
Public Class frmMySqlTest
Private Enum typeList
prodset_V1
prodface_V2
prodeye
prodbody
'신규제품추가 : 제품 시리얼 번호 두번째 자리와 동일하도록 업데이트
End Enum
Private Enum modelList
PRO = 1
LUX
MAXIMUM
ALPHA
ALTO
EFFECT
MAXIMUM_ALPHA
'신규제품추가 : 제품 시리얼 번호 첫번째 자리와 동일하도록 업데이트
End Enum
Private Enum data_set
packcode
pack_date
@ -27,12 +46,14 @@ Public Class frmMySqlTest
EffectV3_Serial
MAXIMUM_ALPHA_Serial
'신규제품추가 : 추가하는 품목의 변수 추가
pack_note
ordercode
order_name
phone
ship_date
invoice
order_note
End Enum
Private data_set_max_index As Integer = [Enum].GetNames(GetType(data_set)).Length - 1
Private data_select(data_set_max_index) As String
@ -183,6 +204,11 @@ Public Class frmMySqlTest
Public InputCnt As Long
Public InputCntVal As Integer = 10
Private command_serial As String
Private command_count As String
Private product_serial_type As String
Private all_serial_list As New List(Of String)
Private Sub SetInputCnt()
InputCnt = InputCntVal
timer_barcode.Enabled = True
@ -258,7 +284,145 @@ Public Class frmMySqlTest
' Me.Refresh()
'End Sub
Private Sub clearVariable()
command_serial = Nothing
command_count = Nothing
product_serial_type = Nothing
all_serial_list.Clear()
clear_switch = True
txb_clear()
dgv_pack_item.Rows.Clear()
dgv_pack_item.Refresh()
For i = 0 To data_set_max_index
data_select(i) = "NULL"
Next
For i = 0 To data_count_max_index
data_cnt(i) = "0"
Next
End Sub
Private Function select_packingCode(serial As String) As String
Dim modelNum As String = Mid(serial, 1, 1)
Dim typeNum As String = Mid(serial, 2, 1)
Select Case modelNum
Case modelList.PRO
Select Case typeNum
Case typeList.prodset_V1
command_serial = "Main_Product_SN"
command_count = "Set_Cnt"
product_serial_type = data_set.set_serial
Case typeList.prodface_V2
command_serial = "Pro_Face_Serial"
command_count = "Pro_CT_FaceCnt"
product_serial_type = data_set.pro_fa_serial
Case typeList.prodeye
command_serial = "Pro_Eye_Serial"
command_count = "Pro_CT_EYE_Cnt"
product_serial_type = data_set.pro_ey_serial
Case typeList.prodbody
command_serial = "Pro_Body_Serial"
command_count = "Pro_CT_BodyCnt"
product_serial_type = data_set.pro_bo_serial
End Select
Case modelList.LUX
Select Case typeNum
Case typeList.prodset_V1
command_serial = "Main_Product_SN"
command_count = "Set_Cnt"
product_serial_type = data_set.set_serial
Case typeList.prodface_V2
command_serial = "Lux_Face_Serial"
command_count = "Lux_CT_FaceCnt"
product_serial_type = data_set.lux_fa_serial
Case typeList.prodeye
command_serial = "Lux_Eye_Serial"
command_count = "Lux_CT_EYE_Cnt"
product_serial_type = data_set.lux_ey_serial
Case typeList.prodbody
command_serial = "Lux_Body_Serial"
command_count = "Lux_CT_BodyCnt"
product_serial_type = data_set.lux_bo_serial
End Select
Case modelList.MAXIMUM
Select Case typeNum
Case typeList.prodset_V1
command_serial = "MAXIMUM_SN"
command_count = "MAXIMUM_Cnt"
product_serial_type = data_set.MAXIMUM_serial
Case typeList.prodface_V2
command_serial = "MAXIMUM_SN"
command_count = "MAXIMUM_Cnt"
product_serial_type = data_set.MAXIMUM_serial
End Select
Case modelList.ALPHA
Select Case typeNum
Case typeList.prodset_V1
command_serial = "Alpha_Set_Serial"
command_count = "Alpha_Set_Cnt"
product_serial_type = data_set.Alpha_Serial
Case typeList.prodface_V2
command_serial = "Alpha_Face_Serial"
command_count = "Alpha_Face_Cnt"
product_serial_type = data_set.Alpha_fa_Serial
Case typeList.prodeye
command_serial = "Alpha_Eye_Serial"
command_count = "Alpha_Eye_Cnt"
product_serial_type = data_set.Alpha_ey_Serial
Case typeList.prodbody
command_serial = "Alpha_Body_Serial"
command_count = "Alpha_Body_Cnt"
product_serial_type = data_set.Alpha_bo_Serial
End Select
Case modelList.ALTO
Select Case typeNum
Case typeList.prodset_V1
command_serial = "Alto_Serial"
command_count = "Alto_Cnt"
product_serial_type = data_set.Alto_Serial
End Select
Case modelList.EFFECT
Select Case typeNum
Case typeList.prodset_V1
command_serial = "Effect_Serial"
command_count = "Effect_Cnt"
product_serial_type = data_set.Effect_Serial
Case typeList.prodbody
command_serial = "EffectV3_Serial"
command_count = "EffectV3_Cnt"
product_serial_type = data_set.EffectV3_Serial
End Select
Case modelList.MAXIMUM_ALPHA
Select Case typeNum
Case typeList.prodset_V1
command_serial = "MAXIMUM_ALPHA_SN"
command_count = "MAXIMUM_ALPHA_Cnt"
product_serial_type = data_set.MAXIMUM_ALPHA_Serial
End Select
'신규제품추가 : 추가한 제품의 case 업데이트
End Select
If command_serial <> Nothing Then
dbcmd = "SELECT PackingCode FROM " & sales_table & " WHERE " & command_serial & " LIKE '%" & serial & "%'"
If DBQueryReader(dbcmd) Then
Return sqlDataQuery(0)
End If
End If
Return Nothing
End Function
Private Sub btnReadDB_Click(sender As Object, e As EventArgs) Handles btnReadDB.Click
@ -273,10 +437,16 @@ Public Class frmMySqlTest
Else
dgv_pack_item.Rows.Clear()
Dim packing_code As String = txbPacking.Text
If db_select(txbPacking.Text) Then
clearVariable()
'시리얼번호를 포함하고 있는 패킹코드 검색
If Len(txbPacking.Text) = 12 Then
packing_code = select_packingCode(txbPacking.Text)
End If
If db_select(packing_code) Then
If item_out() Then
txb_pack_code.Text = data_select(data_set.packcode)
txb_pack_date.Text = data_select(data_set.pack_date)
@ -286,6 +456,9 @@ Public Class frmMySqlTest
txb_invoice.Text = data_select(data_set.invoice)
End If
If all_serial_list.Count > 1 Then
MsgBox(txbPacking.Text & " 는 패킹코드 " & packing_code & "에 포함된 시리얼번호입니다")
End If
Else
txbPacking.BackColor = Color.Red
MsgBox("등록되지 않은 데이터 입니다. 패킹 코드를 확인하여 주십시오.", vbCritical)
@ -296,7 +469,7 @@ Public Class frmMySqlTest
txbPacking.Focus()
End Sub
Private Function db_select(serial As String) As Boolean
Private Function db_select(packing_code As String) As Boolean
dbcmd = "SELECT IFNULL(sale.PackingCode,'NULL')
, IFNULL(sale.`Data`,'NULL')
@ -317,12 +490,14 @@ Public Class frmMySqlTest
, IFNULL(sale.Effect_Serial,'NULL')
, IFNULL(sale.EffectV3_Serial,'NULL')
, IFNULL(sale.MAXIMUM_ALPHA_SN,'NULL')
, IFNULL(sale.note, '')
, IFNULL(otb.Order_Code,'NULL')
, IFNULL(otb.Orderer_Name,'NULL')
, IFNULL(otb.Phone_Number,'NULL')
, IFNULL(otb.Shipment_Date,'NULL')
, IFNULL(otb.Invoice_Number,'NULL')
, IFNULL(otb.note,'')
, IFNULL(sale.Set_Cnt,'0')
, '0'
@ -442,7 +617,7 @@ Public Class frmMySqlTest
, IFNULL(sale.BeautykitMirrorLCnt,'0')
FROM " & sales_db & " AS sale LEFT JOIN " & order_db & " AS otb ON sale.PackingCode = otb.Packing_Code
WHERE sale.PackingCode = '" & serial & "' GROUP BY sale.PackingCode" '신규제품추가/신규구성품추가 : 추가하는 품목의 시리얼, 개수 조회 추가
WHERE sale.PackingCode = '" & packing_code & "' GROUP BY sale.PackingCode" '신규제품추가/신규구성품추가 : 추가하는 품목의 시리얼, 개수 조회 추가
If DBQueryReader(dbcmd) Then
@ -454,20 +629,22 @@ Public Class frmMySqlTest
data_cnt(i) = sqlDataQuery(data_set_max_index + i)
Next
'모든 제품의 시리얼번호를 검색
For i = data_set.set_serial To data_set.pack_note - 1
If data_select(i) <> "NULL" Then
Dim serial_array() As String = data_select(i).Split("/")
For j = 0 To serial_array.Length - 1
If Len(serial_array(j)) <> 0 Then
all_serial_list.Add(serial_array(j))
End If
Next
End If
Next
Return True
Else
For i = 0 To data_set_max_index
data_select(i) = "NULL"
Next
For i = 0 To data_count_max_index
data_cnt(i) = "0"
Next
Return False
End If
End Function
@ -544,6 +721,191 @@ Public Class frmMySqlTest
End If
End Sub
Private Sub delete_packingCode()
Dim msg_cnt As Int16
Dim serial_data As String
msg_cnt = MsgBox("해당 패킹 및 전표 데이터를 삭제하시겠습니까?", vbExclamation + vbOKCancel)
If msg_cnt = 1 Then
serial_data = delete_sales()
If txb_pack_code.Text <> "NULL" Then
If pack_delete(serial_data) Then
If txb_state_code.Text <> "NULL" Then
If state_delete(serial_data) Then
txbPacking.BackColor = Color.Green
clear_switch = True
txb_clear()
dgv_pack_item.Rows.Clear()
MsgBox("데이터 삭제가 완료되었습니다.", vbInformation)
Else
txbPacking.BackColor = Color.Red
MsgBox("데이터베이스 안에 전표 데이터가 존재하지 않습니다. 데이터를 확인하여 주십시오.", vbCritical)
End If
Else
txbPacking.BackColor = Color.Green
clear_switch = True
txb_clear()
dgv_pack_item.Rows.Clear()
MsgBox("데이터 삭제가 완료되었습니다.", vbInformation)
End If
Else
txbPacking.BackColor = Color.Red
MsgBox("데이터베이스 안에 패킹 데이터가 존재하지 않습니다. 데이터를 확인하여 주십시오.", vbCritical)
End If
End If
Else
MsgBox("삭제가 취소되었습니다.", vbInformation)
End If
End Sub
Private Sub delete_serial()
Dim msg_cnt As Int16
msg_cnt = MsgBox("패킹에 포함된 시리얼번호를 삭제하시겠습니까?", vbExclamation + vbOKCancel)
If msg_cnt = 1 Then
'STEP_01 : jomtTesterDB.jomtSalesPackingTbl 테이블 시리얼번호 삭제
Dim remain_serial_data() As String = data_select(product_serial_type).Replace(txbPacking.Text, "").Split("/")
Dim update_serial_str As String = ""
Dim update_serial_cnt As UInt16 = 0
Dim update_note_str As String = data_select(data_set.pack_note)
For i = 0 To remain_serial_data.Length - 1
If Len(remain_serial_data(i)) <> 0 Then
If update_serial_str = "" Then
update_serial_str = remain_serial_data(i)
Else
update_serial_str = update_serial_str & "/" & remain_serial_data(i)
End If
update_serial_cnt += 1
End If
Next
If Len(update_note_str) = 0 Then
update_note_str = txbPacking.Text
Else
update_note_str = update_note_str & "," & txbPacking.Text
End If
dbcmd = "UPDATE " & sales_db &
" SET " & command_serial & " = '" & update_serial_str & "'" &
", " & command_count & " = " & update_serial_cnt &
", note = '" & update_note_str & "'" &
" WHERE PackingCode = '" & txb_pack_code.Text & "'"
If DBCommand(dbcmd) Then
'STEP_02 : jomtOrderDB.jomtOrderTbl 테이블 시리얼번호 삭제
If txb_state_code.Text <> "NULL" Then
dbcmd = "SELECT IFNULL(Serial_Number, '') FROM " & order_db &
" WHERE Order_Code = '" & txb_state_code.Text & "' AND Serial_Number LIKE '%" & txbPacking.Text & "%'"
If DBQueryReader(dbcmd) Then
remain_serial_data = sqlDataQuery(0).Replace(txbPacking.Text, "").Split("/")
update_serial_str = ""
update_serial_cnt = 0
update_note_str = data_select(data_set.order_note)
For i = 0 To remain_serial_data.Length - 1
If Len(remain_serial_data(i)) <> 0 Then
If update_serial_str = "" Then
update_serial_str = remain_serial_data(i)
Else
update_serial_str = update_serial_str & "/" & remain_serial_data(i)
End If
update_serial_cnt += 1
End If
Next
If Len(update_note_str) = 0 Then
update_note_str = txbPacking.Text
Else
update_note_str = update_note_str & "," & txbPacking.Text
End If
'STEP_02-1 : jomtOrderDB.jomtOrderTbl 테이블 시리얼번호, 개수 업데이트
dbcmd = "UPDATE " & order_db &
" SET Serial_Number = '" & update_serial_str & "'" &
", Item_Count = " & update_serial_cnt &
" WHERE Order_Code = '" & txb_state_code.Text & "' AND Serial_Number LIKE '%" & txbPacking.Text & "%'"
If DBCommand(dbcmd) Then
'STEP_02-2 : jomtOrderDB.jomtOrderTbl 테이블 note에 삭제된 시리얼번호 업데이트
dbcmd = "UPDATE " & order_db &
" SET note = '" & update_note_str & "'" &
" WHERE Order_Code = '" & txb_state_code.Text & "'"
If DBCommand(dbcmd) = False Then
txbPacking.BackColor = Color.Red
MsgBox("Order 테이블 시리얼번호 삭제(2) 중 오류가 발생하였습니다.", vbCritical)
Exit Sub
End If
Else
txbPacking.BackColor = Color.Red
MsgBox("Order 테이블 시리얼번호 삭제(1) 중 오류가 발생하였습니다.", vbCritical)
Exit Sub
End If
End If
End If
Else
txbPacking.BackColor = Color.Red
MsgBox("SalesPacking 테이블 시리얼번호 삭제 중 오류가 발생하였습니다.", vbCritical)
Exit Sub
End If
'삭제하는 시리얼번호가 패킹코드이면 패킹코드를 다시 설정
If txbPacking.Text = txb_pack_code.Text Then
all_serial_list.Remove(txbPacking.Text)
all_serial_list.Sort()
dbcmd = "UPDATE " & sales_db &
" SET PackingCode = '" & all_serial_list(0) & "'" &
" WHERE PackingCode = '" & txb_pack_code.Text & "'"
If DBCommand(dbcmd) Then
dbcmd = "UPDATE " & order_db &
" SET Packing_Code = '" & all_serial_list(0) & "'" &
" WHERE Order_Code = '" & txb_state_code.Text & "' AND Packing_Code = '" & txb_pack_code.Text & "'"
If DBCommand(dbcmd) = False Then
txbPacking.BackColor = Color.Red
MsgBox("Order 테이블 패킹코드 업데이트에 오류가 발생하였습니다.", vbCritical)
Exit Sub
End If
Else
txbPacking.BackColor = Color.Red
MsgBox("SalesPacking 테이블 패킹코드 업데이트에 오류가 발생하였습니다.", vbCritical)
Exit Sub
End If
End If
txbPacking.BackColor = Color.Green
clear_switch = True
txb_clear()
dgv_pack_item.Rows.Clear()
MsgBox("데이터 삭제가 완료되었습니다.", vbInformation)
End If
End Sub
Private Sub btn_delete_Click(sender As Object, e As EventArgs) Handles btn_delete.Click
Dim msg_cnt As Int16
Dim serial_data As String
@ -585,45 +947,10 @@ Public Class frmMySqlTest
Else
msg_cnt = MsgBox("해당 패킹 및 전표 데이터를 삭제하시겠습니까?", vbExclamation + vbOKCancel)
If msg_cnt = 1 Then
serial_data = delete_sales()
If txb_pack_code.Text <> "NULL" Then
If pack_delete(serial_data) Then
If txb_state_code.Text <> "NULL" Then
If state_delete(serial_data) Then
txbPacking.BackColor = Color.Green
clear_switch = True
txb_clear()
dgv_pack_item.Rows.Clear()
MsgBox("데이터 삭제가 완료되었습니다.", vbInformation)
Else
txbPacking.BackColor = Color.Red
MsgBox("데이터베이스 안에 전표 데이터가 존재하지 않습니다. 데이터를 확인하여 주십시오.", vbCritical)
End If
Else
txbPacking.BackColor = Color.Green
clear_switch = True
txb_clear()
dgv_pack_item.Rows.Clear()
MsgBox("데이터 삭제가 완료되었습니다.", vbInformation)
End If
Else
txbPacking.BackColor = Color.Red
MsgBox("데이터베이스 안에 패킹 데이터가 존재하지 않습니다. 데이터를 확인하여 주십시오.", vbCritical)
End If
End If
If all_serial_list.Count > 1 Then
delete_serial()
Else
MsgBox("삭제가 취소되었습니다.", vbInformation)
delete_packingCode()
End If
End If
@ -699,6 +1026,10 @@ Public Class frmMySqlTest
End If
Next
If Len(data_select(data_set.pack_note)) > 0 Then
serial_data = data_select(data_set.pack_note) & "," & serial_data
End If
Return serial_data
End Function