919 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			919 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_INFOSELECTCLOSE] = true;
 | |
|             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();
 | |
|         }
 | |
|     }
 | |
| } | 
