- Enhanced QR vision trigger logging with detailed command/data output - Added JSON data extraction for barcode processing - Improved WMS info query with data completeness check - Updated SID information form with trust flags for user inputs - Added auto-resize columns and UI improvements to SID selection dialog - Fixed barcode data processing to handle JSON wrapped responses - Added pick retry reset and timing control on form close 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
918 lines
36 KiB
C#
918 lines
36 KiB
C#
using AR;
|
|
using SATOPrinterAPI;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using System.Windows.Forms.VisualStyles;
|
|
|
|
namespace Project.Dialog
|
|
{
|
|
public partial class fSelectSIDInformation : Form
|
|
{
|
|
Boolean autoconf = false;
|
|
Boolean warn = false;
|
|
Boolean samesidwarn = false;
|
|
bool NewReelId = false;
|
|
public fSelectSIDInformation()
|
|
{
|
|
InitializeComponent();
|
|
VAR.BOOL[eVarBool.FG_WAIT_INFOSELECT] = true;
|
|
this.WindowState = FormWindowState.Normal;
|
|
var sql = VAR.STR[eVarString.MULTISID_QUERY];
|
|
var fields = VAR.STR[eVarString.MULTISID_FIELDS];
|
|
this.lbExecuteSQL.Text = sql;
|
|
this.FormClosed += FLoaderInfo_FormClosed;
|
|
}
|
|
|
|
|
|
private void FLoaderInfo_FormClosed(object sender, FormClosedEventArgs e)
|
|
{
|
|
AR.VAR.I32[AR.eVarInt32.PickOnRetry] = 0;
|
|
VAR.TIME[eVarTime.KEYENCEWAIT] = DateTime.Now;
|
|
|
|
VAR.BOOL[eVarBool.FG_WAIT_INFOSELECT] = false;
|
|
PUB.Result.ItemDataC.VisionData.PropertyChanged -= VisionData_PropertyChanged;
|
|
|
|
////사용자가 정보를 정확히 입력하지 않고 닫았다
|
|
//if (PUB.Result.ItemDataC.VisionData.Confirm == false)
|
|
//{
|
|
// if (PUB.sm.Step == eSMStep.RUN)
|
|
// PUB.Result.SetResultMessage(eResult.OPERATION, eECode.INCOMPLETE_INFOSELECT, eNextStep.PAUSE, 1);
|
|
//}
|
|
}
|
|
|
|
private void fLoaderInfo_Load(object sender, EventArgs e)
|
|
{
|
|
var sql = VAR.STR[eVarString.MULTISID_QUERY];
|
|
var fields = VAR.STR[eVarString.MULTISID_FIELDS];
|
|
|
|
try
|
|
{
|
|
var cn = DBHelper.GetConnection();
|
|
var cmd = new SqlCommand(sql, cn);
|
|
var da = new SqlDataAdapter(cmd);
|
|
var dt = new DataTable();
|
|
da.Fill(dt);
|
|
int i = 0;
|
|
this.dsWMS.VW_GET_MAX_QTY_VENDOR_LOT.Clear();
|
|
foreach (DataRow dr in dt.Rows)
|
|
{
|
|
var newdr = this.dsWMS.VW_GET_MAX_QTY_VENDOR_LOT.NewVW_GET_MAX_QTY_VENDOR_LOTRow();
|
|
newdr.idx = dsWMS.VW_GET_MAX_QTY_VENDOR_LOT.Count + 1;
|
|
if (dt.Columns.Contains("SID")) newdr.SID = dr["SID"]?.ToString() ?? string.Empty;
|
|
else newdr.SID = string.Empty;
|
|
if (dt.Columns.Contains("PART_NO")) newdr.PART_NO = dr["PART_NO"]?.ToString() ?? string.Empty;
|
|
else newdr.PART_NO = string.Empty;
|
|
if (dt.Columns.Contains("VENDOR_LOT")) newdr.VENDOR_LOT = dr["VENDOR_LOT"]?.ToString() ?? string.Empty;
|
|
else newdr.VENDOR_LOT = string.Empty;
|
|
if (dt.Columns.Contains("VENDOR_NM")) newdr.VENDOR_NM = dr["VENDOR_NM"]?.ToString() ?? string.Empty;
|
|
else newdr.VENDOR_NM = string.Empty;
|
|
if (dt.Columns.Contains("BATCH_NO")) newdr.BATCH_NO = dr["BATCH_NO"]?.ToString() ?? string.Empty;
|
|
else newdr.BATCH_NO = string.Empty;
|
|
if (dt.Columns.Contains("CUST_CODE")) newdr.CUST_CODE = dr["CUST_CODE"]?.ToString() ?? string.Empty;
|
|
else newdr.CUST_CODE = string.Empty;
|
|
if (dt.Columns.Contains("MFG_DATE")) newdr.MFG_DATE = dr["MFG_DATE"]?.ToString() ?? string.Empty;
|
|
else newdr.MFG_DATE = string.Empty;
|
|
if (dt.Columns.Contains("QTY")) newdr.QTY = (dr["QTY"]?.ToString() ?? "0").toInt();
|
|
else newdr.QTY = 0;
|
|
|
|
|
|
this.dsWMS.VW_GET_MAX_QTY_VENDOR_LOT.AddVW_GET_MAX_QTY_VENDOR_LOTRow(newdr);//?.ToString() ??
|
|
//string.Empty;
|
|
}
|
|
|
|
dsWMS.VW_GET_MAX_QTY_VENDOR_LOT.AcceptChanges();
|
|
//this.dv1.DataSource = null;
|
|
//this.dv1.Rows.Clear();
|
|
//this.dv1.Columns.Clear();
|
|
|
|
//var cols = new String[] { "No", "SID", "PartNo", "VendorLot", "VendorName", "MFGDate", "Qty" };
|
|
//foreach (var colname in cols)
|
|
// this.dv1.Columns.Add($"col_{colname}", colname);
|
|
|
|
//foreach (dsWMS.VW_GET_MAX_QTY_VENDOR_LOTRow row in dsWMS.VW_GET_MAX_QTY_VENDOR_LOT)
|
|
//{
|
|
// this.dv1.Rows.Add(new string[] { });
|
|
//}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
UTIL.MsgE($"Data Query Error\n{ex.Message}");
|
|
}
|
|
|
|
//현재 바코드가 읽었단 자료를 모두 표시한다.
|
|
var item = PUB.Result.ItemDataC;
|
|
NewReelId = item.VisionData.RIDNew;
|
|
tbSID.Text = item.VisionData.SID;
|
|
tbLot.Text = item.VisionData.VLOT;
|
|
tbMFG.Text = item.VisionData.MFGDATE;
|
|
tbVName.Text = item.VisionData.VNAME;
|
|
tbPart.Text = item.VisionData.PARTNO;
|
|
TbCustCode.Text = item.VisionData.CUSTCODE;
|
|
tbBatch.Text = item.VisionData.BATCH;
|
|
|
|
selectInput(this.tbSID);
|
|
|
|
if (tbVName.Text.isEmpty())
|
|
if (PUB.Result.vModel.Def_Vname.isEmpty() == false)
|
|
tbVName.Text = PUB.Result.vModel.Def_Vname;
|
|
|
|
if (tbMFG.Text.isEmpty())
|
|
if (PUB.Result.vModel.Def_MFG.isEmpty() == false)
|
|
tbMFG.Text = PUB.Result.vModel.Def_MFG;
|
|
|
|
item.VisionData.PropertyChanged += VisionData_PropertyChanged;
|
|
|
|
this.Show();
|
|
this.dv1.AutoResizeColumns();
|
|
}
|
|
|
|
delegate void UpdateTextHandler(Control ctrl, string value);
|
|
public void UpdateText(Control ctrl, string value)
|
|
{
|
|
if (ctrl is Label || ctrl is TextBox)
|
|
{
|
|
if (ctrl.InvokeRequired)
|
|
{
|
|
ctrl.BeginInvoke(new UpdateTextHandler(UpdateText), new object[] { ctrl, value });
|
|
}
|
|
else if (ctrl is Label)
|
|
((Label)ctrl).Text = value;
|
|
else if (ctrl is TextBox)
|
|
((TextBox)ctrl).Text = value;
|
|
}
|
|
|
|
}
|
|
|
|
private void VisionData_PropertyChanged(object sender, PropertyChangedEventArgs e)
|
|
{
|
|
//값이 바뀌었으나 현재 값이 입력되지 않았따면 처리해준다. 220712
|
|
var item = PUB.Result.ItemDataC;
|
|
|
|
if (e.PropertyName.Equals("MFGDATE") && tbMFG.Text.isEmpty())
|
|
UpdateText(tbMFG, item.VisionData.MFGDATE);
|
|
|
|
if (e.PropertyName.Equals("VNAME") && tbVName.Text.isEmpty())
|
|
UpdateText(tbVName, item.VisionData.VNAME);
|
|
|
|
if (e.PropertyName.Equals("PARTNO") && tbPart.Text.isEmpty())
|
|
UpdateText(tbPart, item.VisionData.PARTNO);
|
|
|
|
if (e.PropertyName.Equals("CUSTCODE") && TbCustCode.Text.isEmpty())
|
|
UpdateText(TbCustCode, item.VisionData.CUSTCODE); //210317
|
|
|
|
if (e.PropertyName.Equals("SID") && tbSID.Text.isEmpty())
|
|
UpdateText(tbSID, item.VisionData.SID);
|
|
|
|
if (e.PropertyName.Equals("VLOT") && tbLot.Text.isEmpty())
|
|
UpdateText(tbLot, item.VisionData.VLOT);
|
|
}
|
|
|
|
|
|
string TagStr = string.Empty;
|
|
void selectInput(Control c)
|
|
{
|
|
TagStr = string.Empty;
|
|
if (c is TextBox)
|
|
{
|
|
var tb = c as TextBox;
|
|
TagStr = tb.Tag.ToString();
|
|
}
|
|
else if (c is Label)
|
|
{
|
|
var lb = c as Label;
|
|
TagStr = lb.Tag.ToString();
|
|
}
|
|
|
|
//동일태그를 가진 textbox 의 배경색을 업데이트한다
|
|
foreach (Control tb in panel3.Controls)
|
|
{
|
|
if (tb is TextBox)
|
|
{
|
|
if (tb.Tag.ToString() == TagStr)
|
|
{
|
|
tb.BackColor = Color.SkyBlue;
|
|
}
|
|
else tb.BackColor = SystemColors.Control;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
private void tbDate_Click(object sender, EventArgs e)
|
|
{
|
|
selectInput(sender as TextBox);
|
|
}
|
|
|
|
private void button4_Click(object sender, EventArgs e)
|
|
{
|
|
DateTime dt = DateTime.Now;
|
|
var dtstr = this.tbMFG.Text.Trim().Replace("-", "").Replace("/", "");
|
|
if (dtstr.Length == 8)
|
|
{
|
|
dt = new DateTime(
|
|
int.Parse(dtstr.Substring(0, 4)),
|
|
int.Parse(dtstr.Substring(4, 2)),
|
|
int.Parse(dtstr.Substring(6, 2)));
|
|
}
|
|
|
|
var f = new Dialog.fSelectDay(dt);
|
|
if (f.ShowDialog() == DialogResult.OK)
|
|
{
|
|
this.tbMFG.Text = f.dt.ToShortDateString();
|
|
}
|
|
}
|
|
|
|
private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
UTIL.TouchKeyShow(tbSID, "INPUT SID");
|
|
}
|
|
|
|
private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
UTIL.TouchKeyShow(tbLot, "INPUT VENDER LOT");
|
|
}
|
|
|
|
private void linkLabel5_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
UTIL.TouchKeyShow(tbMFG, "INPUT MFG DATE");
|
|
}
|
|
|
|
private void linkLabel6_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
UTIL.TouchKeyShow(tbVName, "INPUT SUPPLY NAME");
|
|
}
|
|
|
|
private void linkLabel7_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
//tbpartno
|
|
UTIL.TouchKeyShow(tbPart, "INPUT CUSTOMER PART NO.");
|
|
}
|
|
|
|
|
|
private void linkLabel8_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
UTIL.TouchKeyShow(TbCustCode, "INPUT SUPPLY CODE");
|
|
}
|
|
|
|
|
|
private void btOK_Click(object sender, EventArgs e)
|
|
{
|
|
bool topmost = this.TopMost;
|
|
//var IsBypas = VAR.STR[eVarString.JOB_TYPE] == "BP";
|
|
if (System.Diagnostics.Debugger.IsAttached)
|
|
this.TopMost = false;
|
|
|
|
var itemC = PUB.Result.ItemDataC;
|
|
|
|
//manu 목록에 없다면 추가 해준다.
|
|
var manuName = tbVName.Text.Trim().ToLower();
|
|
if (manuName.isEmpty() == false)
|
|
{
|
|
lock (PUB.Result.dsList)
|
|
{
|
|
if (PUB.Result.dsList.Supply.Where(t => t.TITLE.ToLower() == manuName).Any() == false)
|
|
{
|
|
//기존 manu 목록에 없으니 추가한다.
|
|
var newdr = PUB.Result.dsList.Supply.NewSupplyRow();
|
|
newdr.TITLE = tbVName.Text.Trim();
|
|
PUB.Result.dsList.Supply.AddSupplyRow(newdr);
|
|
PUB.Result.SaveListDB();
|
|
}
|
|
}
|
|
}
|
|
|
|
//필수값 입력 확인
|
|
#region "Check iNput Data"
|
|
if (tbSID.Text.isEmpty())
|
|
{
|
|
UTIL.MsgE("SID was not entered");
|
|
tbSID.Focus();
|
|
return;
|
|
}
|
|
|
|
//if (tbLot.Text.isEmpty())
|
|
//{
|
|
// UTIL.MsgE("VLOT 가 입력되지 않았습니다");
|
|
// tbLot.Focus();
|
|
// return;
|
|
//}
|
|
|
|
//if (tbMFG.Text.isEmpty())
|
|
//{
|
|
// UTIL.MsgE("MFG-DATE 가 입력되지 않았습니다");
|
|
// tbMFG.Focus();
|
|
// return;
|
|
//}
|
|
|
|
//if (this.tbPart.Text.isEmpty())
|
|
//{
|
|
// UTIL.MsgE("PART No 가 입력되지 않았습니다");
|
|
// tbPart.Focus();
|
|
// return;
|
|
//}
|
|
|
|
#endregion
|
|
|
|
//현재 작업모드와 SID가 일치하는지 확인한다.
|
|
var sidNew = this.tbSID.Text.Trim();
|
|
var partNo = this.tbPart.Text.Trim();
|
|
var custCode = this.TbCustCode.Text.Trim();
|
|
|
|
//모든자료는 존재한다 저장가능하다
|
|
if (AR.SETTING.Data.OnlineMode)
|
|
{
|
|
//시드정보테이블의 데이터를 역으로 저장한 경우
|
|
if (VAR.BOOL[eVarBool.Opt_ApplySIDInfo] && VAR.BOOL[eVarBool.Opt_SID_WriteServer])
|
|
{
|
|
Dictionary<string, string> wheres = new Dictionary<string, string>();
|
|
Dictionary<string, string> columns = new Dictionary<string, string>();
|
|
|
|
//조건절생성
|
|
if (VAR.BOOL[eVarBool.Opt_SID_Where_CustCode]) wheres.Add("CustCode", TbCustCode.Text);
|
|
if (VAR.BOOL[eVarBool.Opt_SID_Where_PartNo]) wheres.Add("PartNo", tbPart.Text);
|
|
if (VAR.BOOL[eVarBool.Opt_SID_Where_SID]) wheres.Add("SID", tbSID.Text);
|
|
if (VAR.BOOL[eVarBool.Opt_SID_Where_VLOT]) wheres.Add("VenderLot", tbLot.Text);
|
|
|
|
//Make Target COlumns
|
|
if (VAR.BOOL[eVarBool.Opt_SID_Apply_CustCode]) columns.Add("CustCode", TbCustCode.Text);
|
|
if (VAR.BOOL[eVarBool.Opt_SID_Apply_PartNo]) columns.Add("PartNo", tbPart.Text);
|
|
//if (VAR.BOOL[eVarBool.Opt_SID_Apply_PrintPos]) columns.Add("PrintPosition", this.PrintPos);
|
|
if (VAR.BOOL[eVarBool.Opt_SID_Apply_SID])
|
|
{
|
|
//SID변환기능이 동작한상태에서는 변환된 SID정보를 저장하지 않는다 230510
|
|
if (VAR.BOOL[eVarBool.Opt_SIDConvert])
|
|
{
|
|
PUB.log.AddAT($"SID information is not updated due to the use of SID conversion function");
|
|
}
|
|
else columns.Add("SID", tbSID.Text);
|
|
}
|
|
if (VAR.BOOL[eVarBool.Opt_SID_Apply_VenderName]) columns.Add("VenderName", tbVName.Text);
|
|
|
|
//EE-SID정보에 데이터를 저장한다
|
|
ServerWriteINF_EED(columns, wheres);
|
|
//ServerWriteINF_WMS(columns, wheres);
|
|
}
|
|
}
|
|
|
|
//값을 설정해주고 빠져나간다
|
|
if (tbSID.Text.isEmpty() &&
|
|
itemC.VisionData.SID.isEmpty() == false &&
|
|
itemC.VisionData.SID.Equals(tbSID.Text.Trim()) == false)
|
|
itemC.VisionData.SID0 = itemC.VisionData.SID;
|
|
|
|
//값이있는것들만 기록해준다.
|
|
if (tbSID.Text.isEmpty() == false)
|
|
{
|
|
itemC.VisionData.SID = tbSID.Text.Trim();
|
|
itemC.VisionData.SID_Trust = true;
|
|
}
|
|
if (tbBatch.Text.isEmpty() == false)
|
|
{
|
|
itemC.VisionData.BATCH = tbBatch.Text.Trim();
|
|
|
|
}
|
|
if (tbLot.Text.isEmpty() == false)
|
|
{
|
|
itemC.VisionData.VLOT = tbLot.Text.Trim();
|
|
itemC.VisionData.VLOT_Trust = true;
|
|
}
|
|
if (tbMFG.Text.isEmpty() == false)
|
|
{
|
|
itemC.VisionData.MFGDATE = tbMFG.Text.Trim();
|
|
itemC.VisionData.MFGDATE_Trust = true;
|
|
}
|
|
if (tbVName.Text.isEmpty() == false)
|
|
{
|
|
itemC.VisionData.VNAME = tbVName.Text.Trim();
|
|
itemC.VisionData.VNAME_Trust = true;
|
|
}
|
|
if (tbPart.Text.isEmpty() == false)
|
|
{
|
|
itemC.VisionData.PARTNO = tbPart.Text.Trim();
|
|
itemC.VisionData.PARTNO_Trust = true;
|
|
}
|
|
|
|
this.TopMost = topmost;
|
|
this.Close();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 지정한 자료를 서버에 기록합니다. 조건절과 대상 열을 제공해야합니다
|
|
/// </summary>
|
|
void ServerWriteINF_WMS(Dictionary<string, string> columns, Dictionary<string, string> wheres)
|
|
{
|
|
//변경된 값만 저장여부를 확인할 것이므로 기존 값을 모두 가져온다
|
|
var SQL = "select top 1 " + string.Join(",", columns.Select(t => "isnull([" + t.Key + "],'') as " + t.Key + "")) +
|
|
" from K4EE_Component_Reel_SID_Information WITH(NOLOCK)";
|
|
|
|
var WSQL = $" where MC='{PUB.MCCode}'";
|
|
for (int i = 0; i < wheres.Count; i++)
|
|
{
|
|
var col = wheres.ElementAt(i);
|
|
var colname = col.Key;
|
|
var colvalue = col.Value;
|
|
WSQL += " AND ";
|
|
WSQL += $" {colname}='{colvalue.Replace("'", "''")}'";
|
|
}
|
|
SQL += WSQL;
|
|
|
|
Dictionary<String, string> UpdateTarget = new Dictionary<string, string>();
|
|
var CN = new System.Data.SqlClient.SqlConnection();
|
|
CN.ConnectionString = Properties.Settings.Default.CS;
|
|
var CMD = new System.Data.SqlClient.SqlCommand(SQL, CN);
|
|
CN.Open();
|
|
var DAR = CMD.ExecuteReader();
|
|
var NoData = true;
|
|
Dictionary<String, string> InsertTarget = new Dictionary<string, string>();
|
|
while (DAR.Read())
|
|
{
|
|
NoData = false;
|
|
foreach (var col in columns)
|
|
{
|
|
var vStr = DAR[col.Key].ToString();
|
|
var cStr = col.Value;
|
|
if (vStr.Equals(cStr) == false)
|
|
{
|
|
//differenct value
|
|
UpdateTarget.Add(col.Key, cStr);
|
|
}
|
|
}
|
|
}
|
|
DAR.Close();
|
|
//자료가 없다면 데이터를 추가한다.
|
|
if (NoData)
|
|
{
|
|
foreach (var col in columns)
|
|
{
|
|
InsertTarget.Add(col.Key, col.Value);
|
|
}
|
|
foreach (var item in wheres)
|
|
{
|
|
if (InsertTarget.ContainsKey(item.Key) == false)
|
|
InsertTarget.Add(item.Key, item.Value);
|
|
}
|
|
}
|
|
|
|
if (UpdateTarget.Count > 0) //if update target
|
|
{
|
|
|
|
var dlgMsg = $"다음 값을 서버(SID정보)에 저장 하시겠습니까?\n";
|
|
foreach (var item in UpdateTarget)
|
|
dlgMsg += $"Item:{item.Key} => {item.Value}\n";
|
|
|
|
var dlg = UTIL.MsgQ(dlgMsg);
|
|
if (dlg == DialogResult.Yes)
|
|
{
|
|
|
|
//check double data 220706
|
|
var CSQL = "select count(*) from K4EE_Component_Reel_SID_Information WITH(NOLOCK) ";
|
|
CSQL += WSQL;
|
|
CMD.CommandText = CSQL;
|
|
var cnt = int.Parse(CMD.ExecuteScalar().ToString());
|
|
var whke = string.Join(",", wheres.Select(t => t.Key).ToList());
|
|
if (cnt < 1)
|
|
{
|
|
PUB.log.AddAT("SQL=" + CSQL);
|
|
UTIL.MsgE($"Cannot update information because there is no target reel information\n" + whke);
|
|
}
|
|
else if (cnt > 1)
|
|
{
|
|
|
|
PUB.log.AddAT("SQL=" + CSQL);
|
|
UTIL.MsgE($"Multiple target reel information({cnt} records) exists, cannot update information\n" + whke);
|
|
}
|
|
else
|
|
{
|
|
var USQL = $"update K4EE_Component_Reel_SID_Information set [MC]='{PUB.MCCode}'," +
|
|
string.Join(",", UpdateTarget.Select(t => "[" + t.Key + "]='" + t.Value + "'"));
|
|
|
|
USQL += WSQL;
|
|
try
|
|
{
|
|
CMD.CommandText = USQL;
|
|
var UpdateOK = CMD.ExecuteNonQuery() == 1;
|
|
if (UpdateOK == false)
|
|
{
|
|
UTIL.MsgE("Save Error");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
UTIL.MsgE("Save Error\n" + ex.Message);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (InsertTarget.Count > 0)
|
|
{
|
|
|
|
var dlgMsg = $"다음 값을 서버에 저장 하시겠습니까?\n";
|
|
foreach (var item in InsertTarget)
|
|
dlgMsg += $"Item:{item.Key} => {item.Value}\n";
|
|
|
|
var dlg = UTIL.MsgQ(dlgMsg);
|
|
if (dlg == DialogResult.Yes)
|
|
{
|
|
var ISQL = $"insert into K4EE_Component_Reel_SID_Information ([MC],wdate," +
|
|
string.Join(",", InsertTarget.Select(t => "[" + t.Key + "]")) + ") values(" +
|
|
$"'{PUB.MCCode}',getdate()," +
|
|
string.Join(",", InsertTarget.Select(t => "'" + t.Value.Replace("'", "''") + "'")) + ")";
|
|
|
|
//ISQL += WSQL;
|
|
try
|
|
{
|
|
CMD.CommandText = ISQL;
|
|
var UpdateOK = CMD.ExecuteNonQuery() == 1;
|
|
if (UpdateOK == false)
|
|
{
|
|
UTIL.MsgE("Save Error");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
UTIL.MsgE("Save Error\n" + ex.Message);
|
|
}
|
|
}
|
|
|
|
}
|
|
CN.Close();
|
|
CN.Dispose();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 지정한 자료를 서버에 기록합니다. 조건절과 대상 열을 제공해야합니다
|
|
/// </summary>
|
|
void ServerWriteINF_EED(Dictionary<string, string> columns, Dictionary<string, string> wheres)
|
|
{
|
|
//변경된 값만 저장여부를 확인할 것이므로 기존 값을 모두 가져온다
|
|
var SQL = "select top 1 " + string.Join(",", columns.Select(t => "isnull([" + t.Key + "],'') as " + t.Key + "")) +
|
|
" from K4EE_Component_Reel_SID_Information WITH(NOLOCK)";
|
|
|
|
var WSQL = $" where MC='{PUB.MCCode}'";
|
|
for (int i = 0; i < wheres.Count; i++)
|
|
{
|
|
var col = wheres.ElementAt(i);
|
|
var colname = col.Key;
|
|
var colvalue = col.Value;
|
|
WSQL += " AND ";
|
|
WSQL += $" {colname}='{colvalue.Replace("'", "''")}'";
|
|
}
|
|
SQL += WSQL;
|
|
|
|
Dictionary<String, string> UpdateTarget = new Dictionary<string, string>();
|
|
var CN = new System.Data.SqlClient.SqlConnection();
|
|
CN.ConnectionString = Properties.Settings.Default.CS;
|
|
var CMD = new System.Data.SqlClient.SqlCommand(SQL, CN);
|
|
CN.Open();
|
|
var DAR = CMD.ExecuteReader();
|
|
var NoData = true;
|
|
Dictionary<String, string> InsertTarget = new Dictionary<string, string>();
|
|
while (DAR.Read())
|
|
{
|
|
NoData = false;
|
|
foreach (var col in columns)
|
|
{
|
|
var vStr = DAR[col.Key].ToString();
|
|
var cStr = col.Value;
|
|
if (vStr.Equals(cStr) == false)
|
|
{
|
|
//differenct value
|
|
UpdateTarget.Add(col.Key, cStr);
|
|
}
|
|
}
|
|
}
|
|
DAR.Close();
|
|
//자료가 없다면 데이터를 추가한다.
|
|
if (NoData)
|
|
{
|
|
foreach (var col in columns)
|
|
{
|
|
InsertTarget.Add(col.Key, col.Value);
|
|
}
|
|
foreach (var item in wheres)
|
|
{
|
|
if (InsertTarget.ContainsKey(item.Key) == false)
|
|
InsertTarget.Add(item.Key, item.Value);
|
|
}
|
|
}
|
|
|
|
if (UpdateTarget.Count > 0) //if update target
|
|
{
|
|
var dlgMsg = $"다음 값을 EED서버(SID정보)에 저장 하시겠습니까?\n";
|
|
foreach (var item in UpdateTarget)
|
|
dlgMsg += $"Item:{item.Key} => {item.Value}\n";
|
|
|
|
var dlg = UTIL.MsgQ(dlgMsg);
|
|
if (dlg == DialogResult.Yes)
|
|
{
|
|
//check double data 220706
|
|
var CSQL = "select count(*) from K4EE_Component_Reel_SID_Information WITH(NOLOCK) ";
|
|
CSQL += WSQL;
|
|
CMD.CommandText = CSQL;
|
|
var cnt = int.Parse(CMD.ExecuteScalar().ToString());
|
|
var whke = string.Join(",", wheres.Select(t => t.Key).ToList());
|
|
if (cnt < 1)
|
|
{
|
|
PUB.log.AddAT("SQL=" + CSQL);
|
|
UTIL.MsgE($"Cannot update information because there is no target reel information\n" + whke);
|
|
}
|
|
else if (cnt > 1)
|
|
{
|
|
|
|
PUB.log.AddAT("SQL=" + CSQL);
|
|
UTIL.MsgE($"Multiple target reel information({cnt} records) exists, cannot update information\n" + whke);
|
|
}
|
|
else
|
|
{
|
|
var USQL = $"update K4EE_Component_Reel_SID_Information set [MC]='{PUB.MCCode}'," +
|
|
string.Join(",", UpdateTarget.Select(t => "[" + t.Key + "]='" + t.Value + "'"));
|
|
|
|
USQL += WSQL;
|
|
try
|
|
{
|
|
CMD.CommandText = USQL;
|
|
var UpdateOK = CMD.ExecuteNonQuery() == 1;
|
|
if (UpdateOK == false)
|
|
{
|
|
UTIL.MsgE("Save Error");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
UTIL.MsgE("Save Error\n" + ex.Message);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (InsertTarget.Count > 0)
|
|
{
|
|
var dlgMsg = $"다음 값을 EED서버에 저장 하시겠습니까?\n";
|
|
foreach (var item in InsertTarget)
|
|
dlgMsg += $"Item:{item.Key} => {item.Value}\n";
|
|
|
|
var dlg = UTIL.MsgQ(dlgMsg);
|
|
if (dlg == DialogResult.Yes)
|
|
{
|
|
var ISQL = $"insert into K4EE_Component_Reel_SID_Information ([MC],wdate," +
|
|
string.Join(",", InsertTarget.Select(t => "[" + t.Key + "]")) + ") values(" +
|
|
$"'{PUB.MCCode}',getdate()," +
|
|
string.Join(",", InsertTarget.Select(t => "'" + t.Value.Replace("'", "''") + "'")) + ")";
|
|
|
|
//ISQL += WSQL;
|
|
try
|
|
{
|
|
CMD.CommandText = ISQL;
|
|
var UpdateOK = CMD.ExecuteNonQuery() == 1;
|
|
if (UpdateOK == false)
|
|
{
|
|
UTIL.MsgE("Save(EED) Error");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
UTIL.MsgE("Save(EED) Error\n" + ex.Message);
|
|
}
|
|
}
|
|
|
|
}
|
|
CN.Close();
|
|
CN.Dispose();
|
|
}
|
|
/// <summary>
|
|
/// 지정한 자료를 서버에 기록합니다. 조건절과 대상 열을 제공해야합니다
|
|
/// </summary>
|
|
void ServerWriteCNV(Dictionary<string, string> columns, Dictionary<string, string> wheres)
|
|
{
|
|
//변경된 값만 저장여부를 확인할 것이므로 기존 값을 모두 가져온다
|
|
var tableName = "K4EE_Component_Reel_SID_Convert";
|
|
var SQL = "select top 1 " + string.Join(",", columns.Select(t => "isnull([" + t.Key + "],'') as " + t.Key + "")) +
|
|
$" from {tableName} WITH(NOLOCK) ";
|
|
|
|
var WSQL = $" where isnull(MC,'{PUB.MCCode}')='{PUB.MCCode}'";
|
|
for (int i = 0; i < wheres.Count; i++)
|
|
{
|
|
var col = wheres.ElementAt(i);
|
|
var colname = col.Key;
|
|
var colvalue = col.Value;
|
|
WSQL += " AND ";
|
|
WSQL += $" {colname}='{colvalue.Replace("'", "''")}'";
|
|
}
|
|
SQL += WSQL;
|
|
|
|
Dictionary<String, string> UpdateTarget = new Dictionary<string, string>();
|
|
var CN = new System.Data.SqlClient.SqlConnection();
|
|
CN.ConnectionString = Properties.Settings.Default.CS;
|
|
var CMD = new System.Data.SqlClient.SqlCommand(SQL, CN);
|
|
CN.Open();
|
|
var DAR = CMD.ExecuteReader();
|
|
var NoData = true;
|
|
Dictionary<String, string> InsertTarget = new Dictionary<string, string>();
|
|
while (DAR.Read())
|
|
{
|
|
NoData = false;
|
|
foreach (var col in columns)
|
|
{
|
|
var vStr = DAR[col.Key].ToString();
|
|
var cStr = col.Value;
|
|
if (vStr.Equals(cStr) == false)
|
|
{
|
|
//differenct value
|
|
UpdateTarget.Add(col.Key, cStr);
|
|
}
|
|
}
|
|
}
|
|
DAR.Close();
|
|
|
|
//자료가 없다면 데이터를 추가한다.
|
|
if (NoData)
|
|
{
|
|
foreach (var col in columns)
|
|
{
|
|
InsertTarget.Add(col.Key, col.Value);
|
|
}
|
|
foreach (var item in wheres)
|
|
{
|
|
if (InsertTarget.ContainsKey(item.Key) == false)
|
|
InsertTarget.Add(item.Key, item.Value);
|
|
}
|
|
}
|
|
|
|
if (UpdateTarget.Count > 0) //if update target
|
|
{
|
|
|
|
var dlgMsg = $"다음 SID변환값을 서버에 업데이트 하시겠습니까?\n";
|
|
foreach (var item in UpdateTarget)
|
|
dlgMsg += $"Item:{item.Key} => {item.Value}\n";
|
|
|
|
var dlg = UTIL.MsgQ(dlgMsg);
|
|
if (dlg == DialogResult.Yes)
|
|
{
|
|
|
|
//check double data 220706
|
|
var CSQL = $"select count(*) from {tableName}";
|
|
CSQL += WSQL;
|
|
CMD.CommandText = CSQL;
|
|
var cnt = int.Parse(CMD.ExecuteScalar().ToString());
|
|
var whke = string.Join(",", wheres.Select(t => t.Key).ToList());
|
|
if (cnt < 1)
|
|
{
|
|
PUB.log.AddAT("SQL=" + CSQL);
|
|
UTIL.MsgE($"No target reel information exists, cannot update conversion information\n" + whke);
|
|
}
|
|
else if (cnt > 1)
|
|
{
|
|
|
|
PUB.log.AddAT("SQL=" + CSQL);
|
|
UTIL.MsgE($"Multiple target reel conversion information({cnt} records) exists, cannot update information\n" + whke);
|
|
}
|
|
else
|
|
{
|
|
var USQL = $"update {tableName} set isnull([MC],'{PUB.MCCode}')='{PUB.MCCode}'," +
|
|
string.Join(",", UpdateTarget.Select(t => "[" + t.Key + "]='" + t.Value + "'"));
|
|
|
|
USQL += WSQL;
|
|
try
|
|
{
|
|
CMD.CommandText = USQL;
|
|
var UpdateOK = CMD.ExecuteNonQuery() == 1;
|
|
if (UpdateOK == false)
|
|
{
|
|
UTIL.MsgE("(CNV)Save Error");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
UTIL.MsgE("(CNV)Save Error\n" + ex.Message);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (InsertTarget.Count > 0)
|
|
{
|
|
|
|
var dlgMsg = $"다음 변환값을 서버에 추가 하시겠습니까?\n";
|
|
foreach (var item in InsertTarget)
|
|
dlgMsg += $"Item:{item.Key} => {item.Value}\n";
|
|
|
|
|
|
var dlg = UTIL.MsgQ(dlgMsg);
|
|
if (dlg == DialogResult.Yes)
|
|
{
|
|
var ISQL = $"insert into {tableName} ([MC]," +
|
|
string.Join(",", InsertTarget.Select(t => "[" + t.Key + "]")) + ") values(" +
|
|
$"'{PUB.MCCode}'," +
|
|
string.Join(",", InsertTarget.Select(t => "'" + t.Value.Replace("'", "''") + "'")) + ")";
|
|
|
|
//ISQL += WSQL;
|
|
try
|
|
{
|
|
CMD.CommandText = ISQL;
|
|
var UpdateOK = CMD.ExecuteNonQuery() == 1;
|
|
if (UpdateOK == false)
|
|
{
|
|
UTIL.MsgE("Save(CNV) Error");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
UTIL.MsgE("Save(CNV) Error\n" + ex.Message);
|
|
}
|
|
}
|
|
|
|
}
|
|
CN.Close();
|
|
CN.Dispose();
|
|
|
|
if (UpdateTarget.Any() || InsertTarget.Any())
|
|
{
|
|
PUB.GetSIDConverDB();
|
|
}
|
|
}
|
|
|
|
private void button4_Click_1(object sender, EventArgs e)
|
|
{
|
|
if (tbPart.Text.isEmpty()) tbPart.Text = "N/A";
|
|
else
|
|
{
|
|
var dlg = UTIL.MsgQ("Would you like to change the current Part No value to N/A?");
|
|
if (dlg == DialogResult.Yes) tbPart.Text = "N/A";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private void button5_Click_2(object sender, EventArgs e)
|
|
{
|
|
if (tbVName.Text.isEmpty()) tbVName.Text = "N/A";
|
|
else
|
|
{
|
|
var dlg = UTIL.MsgQ("Would you like to change the current VenderName value to N/A?");
|
|
if (dlg == DialogResult.Yes) tbVName.Text = "N/A";
|
|
}
|
|
}
|
|
|
|
private void lnkBatch_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
UTIL.TouchKeyShow(tbBatch, "INPUT BATCH");
|
|
}
|
|
|
|
void ValueUpdate(TextBox tb, string value, string colname)
|
|
{
|
|
var tagstring = tb.Tag?.ToString() ?? string.Empty;
|
|
if (value.isEmpty() == false)
|
|
{
|
|
tb.Tag = tb.Text;
|
|
tb.Text = value;
|
|
}
|
|
//else if (tagstring.isEmpty() == false && value.isEmpty() == false && tb.Text != value)
|
|
//{
|
|
// //한번설정된 값인데 다른 값을 선택했다
|
|
// if (UTIL.MsgQ($"{colname} 값을 변경할까요?\n{tb.Text} -> {value}") == DialogResult.Yes)
|
|
// {
|
|
// tb.Text = value;
|
|
// }
|
|
|
|
//}
|
|
}
|
|
|
|
|
|
private void vW_GET_MAX_QTY_VENDOR_LOTDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
if (e.RowIndex < 0 || e.ColumnIndex < 0) return;
|
|
var col = this.dv1.Columns[e.ColumnIndex];
|
|
if (col.DataPropertyName.Equals("SID") == false) return;
|
|
var drv = this.bs.Current as DataRowView;
|
|
if (drv == null) return;
|
|
var dr = drv.Row as dsWMS.VW_GET_MAX_QTY_VENDOR_LOTRow;
|
|
if (dr == null) return;
|
|
|
|
var dlg = UTIL.MsgQ("Would you like to enter the values of the selected items?\nEmpty values will be entered automatically and user confirmation will be required for existing values");
|
|
if (dlg != DialogResult.Yes) return;
|
|
|
|
//SID값은 반드시 있다
|
|
ValueUpdate(tbSID, dr.SID, "SID");
|
|
ValueUpdate(tbLot, dr.VENDOR_LOT, "LOT");
|
|
ValueUpdate(tbPart, dr.PART_NO, "PARTNO");
|
|
ValueUpdate(TbCustCode, dr.CUST_CODE, "CUST_CODE");
|
|
ValueUpdate(tbVName, dr.VENDOR_NM, "VENDER_NM");
|
|
ValueUpdate(tbMFG, dr.MFG_DATE, "MFG_DATE");
|
|
ValueUpdate(tbBatch, dr.BATCH_NO, "BATCH_NO");
|
|
}
|
|
|
|
private void fSelectSIDInformation_Shown(object sender, EventArgs e)
|
|
{
|
|
this.dv1.AutoResizeColumns();
|
|
}
|
|
}
|
|
} |