Changed SQL query string formatting for consistency across the codebase. Updated 2 occurrences in fLoaderInfo.cs (lines 691 and 2085). 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2365 lines
94 KiB
C#
2365 lines
94 KiB
C#
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 AR;
|
|
using SATOPrinterAPI;
|
|
|
|
namespace Project.Dialog
|
|
{
|
|
public partial class fLoaderInfo : Form
|
|
{
|
|
string PrintPos = "";
|
|
|
|
public fLoaderInfo(List<string> errlist)
|
|
{
|
|
InitializeComponent();
|
|
PUB.flag.set(eVarBool.FG_WAIT_LOADERINFO, true, "_LOAD");
|
|
this.FormClosed += FLoaderInfo_FormClosed;
|
|
this.lstErrmsg.Items.Clear();
|
|
this.WindowState = FormWindowState.Maximized;
|
|
this.label9.Text = "1D(11)";
|
|
this.label10.Text = "QR(1)";
|
|
this.label11.Text = "DataMatrix(2)";
|
|
if (errlist != null)
|
|
{
|
|
|
|
foreach (var item in errlist)
|
|
AddErrorMessage(item);
|
|
}
|
|
if (PUB.Result.vModel.IgnoreBatch) tbBatch.Enabled = false;
|
|
if (PUB.Result.vModel.IgnorePartNo) tbpartno.Enabled = false;
|
|
linkLabel7.Enabled = tbpartno.Enabled;
|
|
button4.Enabled = tbpartno.Enabled;
|
|
btPartChk.Enabled = tbpartno.Enabled;
|
|
lnkBatch.Enabled = tbBatch.Enabled;
|
|
}
|
|
|
|
void AddErrorMessage(string msg)
|
|
{
|
|
if (this.lstErrmsg.InvokeRequired)
|
|
{
|
|
this.lstErrmsg.BeginInvoke(new Action(() =>
|
|
{
|
|
//동일한 태그를 가진 항목이 존재하는가?
|
|
if (lstErrmsg.FindString(msg) < 0)
|
|
lstErrmsg.Items.Add(string.Format("{0}", msg));
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
//동일한 태그를 가진 항목이 존재하는가?
|
|
if (lstErrmsg.FindString(msg) < 0)
|
|
lstErrmsg.Items.Add(string.Format("{0}", msg));
|
|
}
|
|
}
|
|
|
|
private void FLoaderInfo_FormClosed(object sender, FormClosedEventArgs e)
|
|
{
|
|
//이미지해제 210329
|
|
if (this.ivF.Image != null)
|
|
{
|
|
this.ivF.Image.Dispose();
|
|
this.ivF.Image = null;
|
|
}
|
|
|
|
PUB.flag.set(eVarBool.FG_WAIT_LOADERINFO, false, "_CLOSE");
|
|
|
|
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_LOADERDATA, eNextStep.PAUSE, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void fLoaderInfo_Load(object sender, EventArgs e)
|
|
{
|
|
//현재 바코드가 읽었단 자료를 모두 표시한다.
|
|
var item = PUB.Result.ItemDataC;
|
|
this.tbRID.Text = item.VisionData.RID;
|
|
this.tbRID0.Text = item.VisionData.RID0;
|
|
NewReelId = item.VisionData.RIDNew;
|
|
|
|
lvbcdList.Columns.Clear();
|
|
lvbcdList.Columns.Add("각도", 60);
|
|
lvbcdList.Columns.Add("값", 250);
|
|
lvbcdList.Columns.Add("*", 45);
|
|
|
|
|
|
//sid전환기능은 옵션의 상태값에 연결
|
|
if (PUB.sm.Step != eSMStep.IDLE)
|
|
btSidConv.Enabled = VAR.BOOL[eVarBool.Opt_SIDConvert];
|
|
|
|
//if (Pub.Result.JobType == "13" )
|
|
//{
|
|
// if (Pub.Result.ItemData[1].VisionData.SID.StartsWith("103"))
|
|
// {
|
|
// tbSID.Text = Pub.Result.ItemData[1].VisionData.SID;
|
|
// }
|
|
// else
|
|
// {
|
|
// var msg = $"13작업이나 입력된 SID가 103이 아니여서 적용하지 않습니다. sid:{Pub.Result.ItemData[1].VisionData.SID}";
|
|
// Pub.AddSystemLog(Application.ProductVersion, "LoaderInfo", msg);
|
|
// Pub.log.AddAT(msg);
|
|
// }
|
|
//}
|
|
//else
|
|
//{
|
|
tbSID.Text = item.VisionData.SID;
|
|
lbSID0.Text = item.VisionData.SID0;
|
|
|
|
if (lbSID0.Text.isEmpty() == false)
|
|
lbSID0.Tag = lbSID0.Text;
|
|
|
|
tbVLOT.Text = item.VisionData.VLOT;
|
|
|
|
//수량메뉴얼입력칸
|
|
|
|
|
|
if (VAR.BOOL[eVarBool.Opt_UserQtyRQ])
|
|
{
|
|
if (item.VisionData.QTYRQ == true)
|
|
{
|
|
//수동입력이나 바코드에서 RQ값이 들어있는 상태이니 그것을 사용한다.
|
|
//lock (Pub.Result.ItemData[1].VisionData.barcodelist)
|
|
{
|
|
var rqBcd = item.VisionData.barcodelist.Where(t => t.Value.Data.StartsWith("RQ")).FirstOrDefault();
|
|
if (rqBcd.Value != null)
|
|
{
|
|
var newqty = rqBcd.Value.Data.Substring(2).Trim();
|
|
PUB.log.Add($"Quantity updated {tbQTY.Text}->{newqty}");
|
|
tbQTY.Text = newqty;
|
|
}
|
|
else
|
|
{
|
|
PUB.log.AddAT("RQ was set but the value is not in the code list, quantity will not be filled");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
//Clear quantity value for manual input case
|
|
PUB.log.Add($"Quantity updated {tbQTY.Text}-> (cleared for manual input)");
|
|
tbQTY.Text = string.Empty;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
PUB.log.Add($"Quantity updated {tbQTY.Text}->{item.VisionData.QTY}");
|
|
tbQTY.Text = item.VisionData.QTY;
|
|
}
|
|
|
|
lbQTY0.Text = item.VisionData.QTY0;
|
|
tbMFG.Text = item.VisionData.MFGDATE;
|
|
tbVName.Text = item.VisionData.VNAME;
|
|
tbpartno.Text = item.VisionData.PARTNO;
|
|
|
|
TbCustCode.Text = item.VisionData.CUSTCODE; //210317
|
|
tbCustName.Text = item.VisionData.CUSTNAME;
|
|
tbBatch.Text = item.VisionData.BATCH;
|
|
tbQtyMax.Text = item.VisionData.QTYMAX;
|
|
|
|
//Label position info display - 210127 -- delete(220706)
|
|
//DisplayLabelPos(PUB.Result.ItemData[1].VisionData.LabelPositionData);
|
|
|
|
//Print info display
|
|
this.PrintPos = item.VisionData.PrintPositionData;
|
|
if (PUB.flag.get(eVarBool.Opt_DisablePrinter)) this.PrintPos = "8";
|
|
if (this.PrintPos.isEmpty() && item.VisionData.SID.isEmpty() == false)
|
|
{
|
|
//If print position is empty, query server to find data - 231005
|
|
var taresult = new DataSet1TableAdapters.K4EE_Component_Reel_ResultTableAdapter();
|
|
this.PrintPos = taresult.GetPrintPosition(AR.SETTING.Data.McName, item.VisionData.SID);
|
|
}
|
|
DisplayPrintPos(this.PrintPos);
|
|
|
|
//Image display 210121
|
|
this.ivF.Shapes.Clear();
|
|
this.ivR.Shapes.Clear();
|
|
if (item.VisionData.imageF != null)
|
|
{
|
|
//이미지복사해서사용 210329
|
|
var keyImage = item.VisionData.imageF.Clone();
|
|
this.ivF.Image = keyImage;
|
|
}
|
|
if (item.VisionData.imageR != null)
|
|
{
|
|
//이미지복사해서사용 210329
|
|
var keyImage = item.VisionData.imageR.Clone();
|
|
this.ivR.Image = keyImage;
|
|
}
|
|
this.lvbcdList.Items.Clear();
|
|
|
|
//키엔스로부터 읽은 바코드 목록을 표시한다(우측)
|
|
func_displaybcdlist();
|
|
|
|
if (ivF.Image != null)
|
|
ivF.ZoomFit();
|
|
|
|
if (ivR.Image != null)
|
|
ivR.ZoomFit();
|
|
|
|
selectInput(this.tbRID);
|
|
|
|
//자동판단데이터 확인; (101-103d우선처리)
|
|
//이제 모든 sid변환은 1,3컬럼만 사용한다, 22-01-04
|
|
if (PUB.Result.JobType2 == "13" && tbSID.Text.StartsWith("10")) func_sidconv(true);
|
|
|
|
//기본값 적용 220712
|
|
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;
|
|
|
|
//자동완료이며, 사용자 확인이 off된상태, 수량입력도 false 된 상태여야함
|
|
if (VAR.BOOL[eVarBool.Option_AutoConf] &&
|
|
VAR.BOOL[eVarBool.Opt_UserConfim] == false &&
|
|
VAR.BOOL[eVarBool.Opt_UserQtyRQ] == false &&
|
|
PUB.Result.JobFirst == false)
|
|
{
|
|
//자료가 모두 있는지 확인한다.
|
|
tmAutoConfirm.Start();
|
|
}
|
|
|
|
|
|
item.VisionData.PropertyChanged += VisionData_PropertyChanged;
|
|
}
|
|
|
|
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("QTY0") && lbQTY0.Text.isEmpty())
|
|
UpdateText(lbQTY0, item.VisionData.QTY0);
|
|
|
|
if (e.PropertyName.Equals("QTY") && this.tbQTY.Text.isEmpty())
|
|
UpdateText(tbQTY, item.VisionData.QTY);
|
|
|
|
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") && tbpartno.Text.isEmpty())
|
|
UpdateText(tbpartno, item.VisionData.PARTNO);
|
|
|
|
if (e.PropertyName.Equals("CUSTCODE") && TbCustCode.Text.isEmpty())
|
|
UpdateText(TbCustCode, item.VisionData.CUSTCODE); //210317
|
|
|
|
if (e.PropertyName.Equals("CUSTNAME") && tbCustName.Text.isEmpty())
|
|
UpdateText(tbCustName, item.VisionData.CUSTNAME);
|
|
|
|
if (e.PropertyName.Equals("SID") && tbSID.Text.isEmpty())
|
|
UpdateText(tbSID, item.VisionData.SID);
|
|
|
|
if (e.PropertyName.Equals("RID") && tbRID.Text.isEmpty())
|
|
UpdateText(tbRID, item.VisionData.RID);
|
|
|
|
if (e.PropertyName.Equals("RID0") && tbRID0.Text.isEmpty())
|
|
UpdateText(tbRID0, item.VisionData.RID0);
|
|
|
|
if (e.PropertyName.Equals("SID0") && lbSID0.Text.isEmpty())
|
|
UpdateText(lbSID0, item.VisionData.SID0);
|
|
|
|
if (e.PropertyName.Equals("VLOT") && tbVLOT.Text.isEmpty())
|
|
UpdateText(tbVLOT, item.VisionData.VLOT);
|
|
}
|
|
|
|
void func_displaybcdlist()
|
|
{
|
|
var itemc = PUB.Result.ItemDataC;
|
|
var angok = itemc.VisionData.BaseAngle(out string msg, out Class.KeyenceBarcodeData bcd);
|
|
lock (itemc.VisionData.barcodelist)
|
|
{
|
|
var no = 1;
|
|
lvbcdList.Items.Clear(); //기존꺼 삭제
|
|
foreach (var bcddata in itemc.VisionData.barcodelist)
|
|
{
|
|
var item = bcddata.Value;
|
|
var lv = this.lvbcdList.Items.Add(item.Angle.ToString("N1"));
|
|
lv.SubItems.Add(item.Data);
|
|
lv.SubItems.Add(item.barcodeSymbol + item.barcodeSource);
|
|
//.SubItems.Add(item.barcodeSource);
|
|
//lv.SubItems.Add(item.CenterPX.X.ToString());
|
|
//lv.SubItems.Add(item.CenterPX.Y.ToString());
|
|
if (item.RegExConfirm)
|
|
{
|
|
if (item.RefExApply)
|
|
lv.ForeColor = Color.Blue;
|
|
else
|
|
lv.ForeColor = Color.Black;
|
|
}
|
|
else lv.ForeColor = Color.DimGray;
|
|
|
|
if (item.barcodeSymbol == "1") lv.BackColor = Color.Gold;
|
|
else if (item.barcodeSymbol == "2") lv.BackColor = Color.Lime;
|
|
else lv.BackColor = Color.WhiteSmoke;
|
|
|
|
//회전에 사용할 데이터라면 체크를 해준다.
|
|
if (angok && bcd.Data == item.Data)
|
|
{
|
|
if (this.lvbcdList.CheckedItems.Count == 0)
|
|
lv.Checked = true;
|
|
}
|
|
else lv.Checked = false;
|
|
|
|
//vertext 표시
|
|
var vt = item.vertex;
|
|
if (vt.Length == 4)
|
|
{
|
|
Color lcolor = no % 2 == 0 ? Color.Tomato : Color.Lime;
|
|
if (item.barcodeSource == "F")
|
|
{
|
|
ivF.AddShapeLine(vt[0], vt[1], lcolor);
|
|
ivF.AddShapeLine(vt[1], vt[2], lcolor);
|
|
ivF.AddShapeLine(vt[2], vt[3], lcolor);
|
|
ivF.AddShapeLine(vt[3], vt[0], lcolor);
|
|
ivF.AddShapeText(vt[0], no.ToString(), Color.Black); //210312
|
|
}
|
|
else
|
|
{
|
|
ivR.AddShapeLine(vt[0], vt[1], lcolor);
|
|
ivR.AddShapeLine(vt[1], vt[2], lcolor);
|
|
ivR.AddShapeLine(vt[2], vt[3], lcolor);
|
|
ivR.AddShapeLine(vt[3], vt[0], lcolor);
|
|
ivR.AddShapeText(vt[0], no.ToString(), Color.Black); //210312
|
|
}
|
|
|
|
}
|
|
|
|
//가장우측상단에 번호를 표시한다.
|
|
|
|
|
|
no += 1;
|
|
}
|
|
}
|
|
}
|
|
private void button1_Click(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void label6_Click(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
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 groupBox2.Controls)
|
|
{
|
|
if (tb is TextBox)
|
|
{
|
|
if (tb.Tag.ToString() == TagStr)
|
|
{
|
|
tb.BackColor = Color.SkyBlue;
|
|
}
|
|
else tb.BackColor = SystemColors.Control;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void button2_Click(object sender, EventArgs e)
|
|
{
|
|
//if (this.listView1.FocusedItem == null)
|
|
//{
|
|
// Util.MsgE("입력할 바코드 값을 먼저 선택하세요");
|
|
// return;
|
|
//}
|
|
if (this.TagStr.isEmpty())
|
|
{
|
|
UTIL.MsgE("Please click the field to enter data first");
|
|
return;
|
|
}
|
|
var lvitem = this.lvbcdList.FocusedItem;
|
|
if (lvitem == null) return;
|
|
|
|
var lvValue = lvitem.SubItems[1].Text.Trim();
|
|
if (lvValue.isEmpty())
|
|
{
|
|
UTIL.MsgE("The selected data has no value\n\nPlease select other data");
|
|
return;
|
|
}
|
|
|
|
//선택자료가 ; 으로 분류가능하면 추가로 팝업
|
|
if (lvValue.Split(';').Length > 1)
|
|
{
|
|
var ff = new Dialog.fSelectDataList(lvValue.Split(';'));
|
|
if (ff.ShowDialog() == DialogResult.OK)
|
|
{
|
|
lvValue = ff.SelectedValue;
|
|
}
|
|
else return;
|
|
}
|
|
else if (lvValue.Split(',').Length > 1)
|
|
{
|
|
var ff = new Dialog.fSelectDataList(lvValue.Split(','));
|
|
if (ff.ShowDialog() == DialogResult.OK)
|
|
{
|
|
lvValue = ff.SelectedValue;
|
|
}
|
|
else return;
|
|
}
|
|
|
|
if (TagStr == "RID" || TagStr == "ID")
|
|
{
|
|
tbRID.Text = lvValue;
|
|
}
|
|
else if (TagStr == "SID")
|
|
{
|
|
tbSID.Text = lvValue;
|
|
|
|
//If SID value is applied, also check print position
|
|
if (this.PrintPos.isEmpty() || this.PrintPos == "5" && lvValue.isEmpty() == false)
|
|
{
|
|
try
|
|
{
|
|
using (var ta = new DataSet1TableAdapters.K4EE_Component_Reel_Print_InformationTableAdapter())
|
|
{
|
|
var dr = ta.GetBySID(PUB.MCCode, lvValue).FirstOrDefault();
|
|
if (dr != null) //자료가잇는 경우에만 적용
|
|
{
|
|
this.PrintPos = dr.PrintPosition;
|
|
this.DisplayPrintPos(this.PrintPos);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
UTIL.MsgE("SID:" + lvValue + " failed to load print position value\n" + ex.Message);
|
|
}
|
|
}
|
|
}
|
|
else if (TagStr == "VLOT")
|
|
{
|
|
tbVLOT.Text = lvValue;
|
|
}
|
|
else if (TagStr == "QTY")
|
|
{
|
|
PUB.log.Add($"Quantity updated {tbQTY.Text}->{lvValue}");
|
|
tbQTY.Text = lvValue;
|
|
}
|
|
else if (TagStr == "MFGDATE")
|
|
{
|
|
tbMFG.Text = lvValue;
|
|
}
|
|
else if (TagStr == "SUPPLY")
|
|
{
|
|
tbVName.Text = lvValue;
|
|
}
|
|
else if (TagStr == "PARTNO")
|
|
{
|
|
tbpartno.Text = lvValue;
|
|
}
|
|
}
|
|
|
|
private void button3_Click(object sender, EventArgs e)
|
|
{
|
|
CancleAutoConfirm();
|
|
//Pub.Result.JobEndTime
|
|
//If SID is changed, put original value in sid0
|
|
if (tbSID.Text.isEmpty())
|
|
{
|
|
UTIL.MsgE("SID is missing");
|
|
tbSID.Focus();
|
|
return;
|
|
}
|
|
func_sidconv(false);
|
|
}
|
|
|
|
void CancleAutoConfirm()
|
|
{
|
|
if (VAR.BOOL[eVarBool.Option_AutoConf])
|
|
{
|
|
btOK.Text = "◆ Input Complete ◆";
|
|
tmAutoConfirm.Stop();
|
|
}
|
|
}
|
|
|
|
void func_sidconv(Boolean auto)
|
|
{
|
|
var sid = tbSID.Text.Trim();
|
|
|
|
|
|
if (auto)
|
|
{
|
|
//Query from database
|
|
try
|
|
{
|
|
var dr = PUB.Result.DTSidConvert.Where(t => t.SIDFrom == sid);
|
|
if (dr.Any() == true) //Conversion table data exists
|
|
{
|
|
if (dr.Count() == 1)
|
|
{
|
|
//Create only when original has no value
|
|
if (lbSID0.Text.isEmpty())
|
|
{
|
|
lbSID0.Tag = tbSID.Text; //Since conversion info exists, put current info into original value
|
|
lbSID0.Text = tbSID.Text; //Original value
|
|
}
|
|
tbSID.Text = dr.First().SIDTo; //Put converted value into current value
|
|
var drsid = dr.First();
|
|
PUB.log.Add(string.Format("SID auto conversion {0}->{1}", drsid.SIDFrom, drsid.SIDTo));
|
|
}
|
|
else
|
|
{
|
|
PUB.log.AddE(string.Format("SID auto conversion failed {0}, found SID conversion info count:{1}", sid, dr.Count()));
|
|
PUB.Result.DTSidConvertMultiList.Add(sid);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
PUB.Result.DTSidConvertEmptyList.Add(sid);
|
|
PUB.log.Add(string.Format("SID auto conversion failed - no conversion data sid:{0}", sid));
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
PUB.log.AddE("SID conversion operation failed message:" + ex.Message);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var f = new Dialog.fNewSID(sid);
|
|
if (f.ShowDialog() != DialogResult.OK) return;
|
|
|
|
if (lbSID0.Tag == null || lbSID0.Tag.ToString().isEmpty()) //Is there previously converted info?
|
|
{
|
|
//원본값 백업
|
|
lbSID0.Tag = tbSID.Text;
|
|
lbSID0.Text = tbSID.Text;
|
|
|
|
//from & to
|
|
PUB.Result.LastSIDFrom = tbSID.Text.Trim();
|
|
PUB.Result.LastSIDTo = f.NewSID.Trim();
|
|
|
|
PUB.log.Add($"Entering last record due to manual SID selection from={PUB.Result.LastSIDFrom},to={PUB.Result.LastSIDTo}");
|
|
}
|
|
|
|
PUB.Result.LastSIDCnt = f.FindSIDCount;
|
|
tbSID.Text = f.NewSID;
|
|
}
|
|
|
|
UpdateSID(auto);
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 데이터베이스의 정보를 UI에 반영한다
|
|
/// </summary>
|
|
/// <param name="auto"></param>
|
|
void UpdateSID(Boolean auto = false)
|
|
{
|
|
//고칠게 없다.
|
|
if (TbCustCode.Text.isEmpty() == false && tbpartno.Text.isEmpty() == false && this.PrintPos.isEmpty() == false)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//sid 가 변경되었으나 해당 sid 인쇄위치 및 customer / part no 값을 확인 합니다.
|
|
var taSID = new DataSet1TableAdapters.K4EE_Component_Reel_SID_InformationTableAdapter();
|
|
var taPRN = new DataSet1TableAdapters.K4EE_Component_Reel_Print_InformationTableAdapter();
|
|
|
|
try
|
|
{
|
|
var sid = this.tbSID.Text.Trim();
|
|
|
|
var dr = taSID.GetBySID(PUB.MCCode, sid).FirstOrDefault();// db.Component_Reel_SID_Information.Where(t => t.SID == sid).FirstOrDefault();
|
|
var drP = taPRN.GetBySID(PUB.MCCode, sid).FirstOrDefault();
|
|
|
|
if (dr == null) return;
|
|
|
|
var msg = "SID 변경으로 인해 다음 자료를 입력할까요?";
|
|
Boolean bupdate = false;
|
|
if (dr.CustCode.isEmpty() == false && dr.CustCode != TbCustCode.Text)
|
|
{
|
|
msg += "\nCustomer Code : " + dr.CustCode;
|
|
msg += "\nCustomer Name : " + dr.CustName;
|
|
bupdate = true;
|
|
}
|
|
|
|
if (dr.PartNo.isEmpty() == false && dr.PartNo != tbpartno.Text)// tbpartno.Text.isEmpty())
|
|
{
|
|
msg += "\nPart No : " + dr.PartNo;
|
|
bupdate = true;
|
|
}
|
|
|
|
if (drP.PrintPosition.isEmpty() == false)
|
|
{
|
|
msg += "\nPrint Position : " + drP.PrintPosition;
|
|
bupdate = true;
|
|
}
|
|
if (bupdate == false)
|
|
{
|
|
//Util.MsgE("변경 가능한 자료가 없습니다");
|
|
return;
|
|
}
|
|
|
|
//Display on screen - apply without asking in auto mode
|
|
if (auto == false && UTIL.MsgQ(msg) != DialogResult.Yes) return;
|
|
if (dr.CustCode.isEmpty() == false && TbCustCode.Text != dr.CustCode)
|
|
{
|
|
TbCustCode.Text = dr.CustCode;
|
|
tbCustName.Text = dr.CustName;
|
|
}
|
|
|
|
if (dr.PartNo.isEmpty() == false && tbpartno.Text != dr.PartNo)
|
|
{
|
|
this.tbpartno.Text = dr.PartNo;
|
|
}
|
|
|
|
if (drP.PrintPosition.isEmpty() == false)
|
|
{
|
|
this.PrintPos = drP.PrintPosition;
|
|
DisplayPrintPos(this.PrintPos);
|
|
}
|
|
|
|
//이 SID의 최근 MFGDate 와 Qty 를 추가 체크한다 210326
|
|
if (tbMFG.Text.isEmpty() || tbQTY.Text.isEmpty())
|
|
{
|
|
func_CheckDateQty();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
PUB.log.AddE($"SID information update failed: {ex.Message}");
|
|
}
|
|
taSID.Dispose();
|
|
taPRN.Dispose();
|
|
}
|
|
|
|
Boolean func_CheckDateQty()
|
|
{
|
|
Boolean bwarn = false;
|
|
|
|
var sid = this.tbSID.Text.Trim();
|
|
if (sid.isEmpty()) return false; //sid가 없다.
|
|
|
|
//최근 6시간안에서 동일한 데이터를 찾아서 제안 해준다
|
|
var sd = DateTime.Now.AddHours(-1);
|
|
var sql = "select * from K4EE_Component_Reel_Result with (nolock)" +
|
|
" where jtype = @jtype and sid = @sid and isnull(QR,'') <> '' and stime >= @sd" +
|
|
" order by wdate desc";
|
|
var ps = new SqlParameter[] {
|
|
new SqlParameter("jtype", PUB.Result.JobType2),
|
|
new SqlParameter("sid", sid),
|
|
new SqlParameter("sd", sd),
|
|
};
|
|
|
|
DataSet1.K4EE_Component_Reel_ResultRow preData = null;
|
|
var preDatas = DBHelper.Get(sql, ps);
|
|
if (preDatas.Rows.Count > 0) preData = preDatas.Rows[0] as DataSet1.K4EE_Component_Reel_ResultRow;
|
|
|
|
//var preData = db2.Component_Reel_Result.AsNoTracking().Where(t =>
|
|
//t.JTYPE == PUB.Result.JobType2 &&
|
|
//t.SID == sid &&
|
|
//string.IsNullOrEmpty(t.QR) == false &&
|
|
//t.STIME >= sd).OrderByDescending(t => t.wdate).FirstOrDefault();
|
|
|
|
//기존자료가 없다면 취소
|
|
if (preData == null) return false;
|
|
var amkorid = new StdLabelPrint.CAmkorSTDBarcode(preData.QR);
|
|
|
|
if (preData.VNAME != tbVName.Text)
|
|
{
|
|
//해당 mfgdae 가 바코드목록에 잇다면 바로 적용
|
|
//업다면 적용하고 적용 메세지 표시한다
|
|
//Pub.log.Add(string.Format("이전결과에서 값 업데이트 sid:{0},mfgdata={1}", sid, amkorid.MFGDate));
|
|
tbVName.Text = preData.VNAME;
|
|
bwarn = true;
|
|
//if (func_existbcddata(amkorid.MFGDate) == false)
|
|
{
|
|
AddErrorMessage("V.Name updated from previous record");
|
|
PUB.log.Add("'V.Name' value entered from previous record\n" +
|
|
"Previous work time: " + ((DateTime)(preData.wdate)).ToString("yyyy-MM-dd HH:mm:ss") + "\n" +
|
|
"SID : " + preData.SID + "\n" +
|
|
"MFG Date : " + amkorid.MFGDate + "\n" +
|
|
"Part No : " + amkorid.PARTNO + "\n" +
|
|
"Vender Lot : " + amkorid.VLOT + "\n" +
|
|
"Vender Name : " + amkorid.VENDERNAME + "\n" +
|
|
"QTY : " + amkorid.QTY.ToString(), true);
|
|
}
|
|
}
|
|
|
|
|
|
if (amkorid.MFGDate.isEmpty() == false && tbMFG.Text.isEmpty())
|
|
{
|
|
//해당 mfgdae 가 바코드목록에 잇다면 바로 적용
|
|
//업다면 적용하고 적용 메세지 표시한다
|
|
//Pub.log.Add(string.Format("이전결과에서 값 업데이트 sid:{0},mfgdata={1}", sid, amkorid.MFGDate));
|
|
tbMFG.Text = amkorid.MFGDate;
|
|
bwarn = true;
|
|
if (func_existbcddata(amkorid.MFGDate) == false)
|
|
{
|
|
AddErrorMessage("MFG updated from previous record");
|
|
PUB.log.Add("'MFG Date' value entered from previous record\n" +
|
|
"Previous work time: " + ((DateTime)(preData.wdate)).ToString("yyyy-MM-dd HH:mm:ss") + "\n" +
|
|
"SID : " + preData.SID + "\n" +
|
|
"MFG Date : " + amkorid.MFGDate + "\n" +
|
|
"Part No : " + amkorid.PARTNO + "\n" +
|
|
"Vender Lot : " + amkorid.VLOT + "\n" +
|
|
"Vender Name : " + amkorid.VENDERNAME + "\n" +
|
|
"QTY : " + amkorid.QTY.ToString(), true);
|
|
}
|
|
}
|
|
|
|
if (amkorid.QTY > 0 && tbQTY.Text.isEmpty())
|
|
{
|
|
//해당 mfgdae 가 바코드목록에 잇다면 바로 적용
|
|
//업다면 적용하고 적용 메세지 표시한다
|
|
PUB.log.Add($"Quantity updated {tbQTY.Text}->{amkorid.QTY}");
|
|
tbQTY.Text = amkorid.QTY.ToString();
|
|
//Pub.log.Add(string.Format("이전결과에서 값 업데이트 sid:{0},qty={1}", sid, amkorid.QTY));
|
|
bwarn = true;
|
|
if (func_existbcddata(amkorid.QTY.ToString()) == false)
|
|
{
|
|
AddErrorMessage("QTY updated from previous record");
|
|
PUB.log.Add("'Qty' value entered from previous record\n" +
|
|
"Previous work time: " + ((DateTime)(preData.wdate)).ToString("yyyy-MM-dd HH:mm:ss") + "\n" +
|
|
"SID : " + preData.SID + "\n" +
|
|
"MFG Date : " + amkorid.MFGDate + "\n" +
|
|
"Part No : " + amkorid.PARTNO + "\n" +
|
|
"Vender Lot : " + amkorid.VLOT + "\n" +
|
|
"Vender Name : " + amkorid.VENDERNAME + "\n" +
|
|
"QTY : " + amkorid.QTY.ToString(), true);
|
|
}
|
|
|
|
}
|
|
|
|
if (amkorid.PARTNO.isEmpty() == false && tbpartno.Text.isEmpty())
|
|
{
|
|
//해당 mfgdae 가 바코드목록에 잇다면 바로 적용
|
|
//업다면 적용하고 적용 메세지 표시한다
|
|
tbpartno.Text = amkorid.PARTNO;
|
|
bwarn = true;
|
|
//Pub.log.Add(string.Format("이전결과에서 값 업데이트 sid:{0},PARTNO={1}", sid, amkorid.PARTNO));
|
|
if (func_existbcddata(amkorid.PARTNO) == false)
|
|
{
|
|
AddErrorMessage("PartNo updated from previous record");
|
|
PUB.log.Add("'Part No' value entered from previous record\n" +
|
|
"Previous work time: " + ((DateTime)(preData.wdate)).ToString("yyyy-MM-dd HH:mm:ss") + "\n" +
|
|
"SID : " + preData.SID + "\n" +
|
|
"MFG Date : " + amkorid.MFGDate + "\n" +
|
|
"Part No : " + amkorid.PARTNO + "\n" +
|
|
"Vender Lot : " + amkorid.VLOT + "\n" +
|
|
"Vender Name : " + amkorid.VENDERNAME + "\n" +
|
|
"QTY : " + amkorid.QTY.ToString(), true);
|
|
}
|
|
|
|
}
|
|
|
|
//Customer
|
|
if (amkorid.RID.Length > 10 && amkorid.RID.Substring(2, 4) != TbCustCode.Text.Trim())
|
|
{
|
|
//해당 mfgdae 가 바코드목록에 잇다면 바로 적용
|
|
//업다면 적용하고 적용 메세지 표시한다
|
|
TbCustCode.Text = amkorid.RID.Substring(2, 4);
|
|
bwarn = true;
|
|
//Pub.log.Add(string.Format("이전결과에서 값 업데이트 sid:{0},VLOT={1}", sid, amkorid.VLOT));
|
|
if (func_existbcddata(TbCustCode.Text) == false)
|
|
{
|
|
AddErrorMessage("Customer Code updated from previous record");
|
|
PUB.log.Add("'Customer Code' value entered from previous record\n" +
|
|
"Previous work time: " + ((DateTime)(preData.wdate)).ToString("yyyy-MM-dd HH:mm:ss") + "\n" +
|
|
"SID : " + preData.SID + "\n" +
|
|
"MFG Date : " + amkorid.MFGDate + "\n" +
|
|
"Part No : " + amkorid.PARTNO + "\n" +
|
|
"Vender Lot : " + amkorid.VLOT + "\n" +
|
|
"Vender Name : " + amkorid.VENDERNAME + "\n" +
|
|
"QTY : " + amkorid.QTY.ToString(), true);
|
|
|
|
|
|
}
|
|
btCustomAutoInput.PerformClick();
|
|
}
|
|
|
|
|
|
if (amkorid.VLOT.isEmpty() == false && tbVLOT.Text.isEmpty())
|
|
{
|
|
//해당 mfgdae 가 바코드목록에 잇다면 바로 적용
|
|
//업다면 적용하고 적용 메세지 표시한다
|
|
tbVLOT.Text = amkorid.VLOT;
|
|
bwarn = true;
|
|
//Pub.log.Add(string.Format("이전결과에서 값 업데이트 sid:{0},VLOT={1}", sid, amkorid.VLOT));
|
|
if (func_existbcddata(amkorid.VLOT) == false)
|
|
{
|
|
AddErrorMessage("VLOT updated from previous record");
|
|
PUB.log.Add("'Vender LOT' value entered from previous record\n" +
|
|
"Previous work time: " + ((DateTime)(preData.wdate)).ToString("yyyy-MM-dd HH:mm:ss") + "\n" +
|
|
"SID : " + preData.SID + "\n" +
|
|
"MFG Date : " + amkorid.MFGDate + "\n" +
|
|
"Part No : " + amkorid.PARTNO + "\n" +
|
|
"Vender Lot : " + amkorid.VLOT + "\n" +
|
|
"Vender Name : " + amkorid.VENDERNAME + "\n" +
|
|
"QTY : " + amkorid.QTY.ToString(), true);
|
|
}
|
|
|
|
}
|
|
|
|
if (amkorid.VENDERNAME.isEmpty() == false && tbVName.Text.isEmpty())
|
|
{
|
|
//해당 mfgdae 가 바코드목록에 잇다면 바로 적용
|
|
//업다면 적용하고 적용 메세지 표시한다
|
|
tbVName.Text = amkorid.VENDERNAME;
|
|
bwarn = true;
|
|
//Pub.log.Add(string.Format("이전결과에서 값 업데이트 sid:{0},VENDERNAME={1}", sid, amkorid.VENDERNAME));
|
|
if (func_existbcddata(amkorid.VENDERNAME) == false)
|
|
{
|
|
AddErrorMessage("VNAME updated from previous record");
|
|
PUB.log.Add("'Vender Name' value entered from previous record\n" +
|
|
"Previous work time: " + ((DateTime)(preData.wdate)).ToString("yyyy-MM-dd HH:mm:ss") + "\n" +
|
|
"SID : " + preData.SID + "\n" +
|
|
"MFG Date : " + amkorid.MFGDate + "\n" +
|
|
"Part No : " + amkorid.PARTNO + "\n" +
|
|
"Vender Lot : " + amkorid.VLOT + "\n" +
|
|
"Vender Name : " + amkorid.VENDERNAME + "\n" +
|
|
"QTY : " + amkorid.QTY.ToString(), true);
|
|
}
|
|
|
|
}
|
|
|
|
return bwarn;
|
|
|
|
}
|
|
/// <summary>
|
|
/// Check if the data exists in Keyence barcode list
|
|
/// </summary>
|
|
/// <param name="data"></param>
|
|
/// <returns></returns>
|
|
Boolean func_existbcddata(string data)
|
|
{
|
|
var lv = lvbcdList.FindItemWithText(data);
|
|
return lv != null;
|
|
}
|
|
|
|
private void btReqQty_Click(object sender, EventArgs e)
|
|
{
|
|
var msg = string.Empty;
|
|
var rid = tbRID.Text.Trim();
|
|
if (rid.isEmpty())
|
|
{
|
|
UTIL.MsgE("Reel ID is required");
|
|
return;
|
|
}
|
|
if (AR.SETTING.Data.OnlineMode == false)
|
|
{
|
|
UTIL.MsgE("Cannot be used in offline mode");
|
|
return;
|
|
}
|
|
|
|
var cnt = 0;// (Amkor.RestfulService.get_stock_count(rid, out msg));
|
|
if (cnt > 0)
|
|
{
|
|
var oldCnt = int.Parse(tbQTY.Text.Replace(",", ""));
|
|
var newCnt = (int)cnt;
|
|
if (oldCnt == newCnt)
|
|
{
|
|
//Quantities are same, no processing needed
|
|
}
|
|
else
|
|
{
|
|
//If numbers are different?
|
|
if (UTIL.MsgQ(string.Format("Do you want to change the quantity?\nCurrent: {0}\nServer: {1}", tbQTY.Text, newCnt)) == DialogResult.Yes)
|
|
{
|
|
PUB.log.Add($"Quantity updated {tbQTY.Text}->{newCnt}");
|
|
tbQTY.Text = newCnt.ToString();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
UTIL.MsgE("Server quantity check failed\n\n" + msg);
|
|
}
|
|
}
|
|
|
|
private void tbSupply_TextChanged(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
private void label13_Click(object sender, EventArgs e)
|
|
{
|
|
//라벨위치
|
|
//라벨위치느느 클릭해서 고칠필요 없다
|
|
}
|
|
|
|
|
|
private void label22_Click(object sender, EventArgs e)
|
|
{
|
|
//부착위치
|
|
var lb = sender as Label;
|
|
PrintPos = lb.Tag.ToString();
|
|
DisplayPrintPos(PrintPos);
|
|
}
|
|
|
|
void DisplayPrintPos(string v)
|
|
{
|
|
var lbs = new Label[] { pb7, pb8, pb9, pb4, pb6, pb1, pb2, pb3 };
|
|
foreach (Label item in lbs)
|
|
if (item.Tag.ToString() == v) item.BackColor = Color.Blue;
|
|
else item.BackColor = Color.FromArgb(64, 64, 64);
|
|
}
|
|
|
|
|
|
//라벨은 여러 위치에서 발견될 수 있다
|
|
//void DisplayLabelPos(byte[] labelpos)
|
|
//{
|
|
// var lbs = new Label[] { lbl1, lbl2, lbl3, lbl4, lbl6, lbl7, lbl8, lbl9 };
|
|
// for (int i = 0; i < labelpos.Length; i++)
|
|
// lbs[i].BackColor = labelpos[i] > 0 ? Color.Blue : Color.FromArgb(64, 64, 64);
|
|
//}
|
|
|
|
bool NewReelId = false;
|
|
private void btNewID_Click(object sender, EventArgs e)
|
|
{
|
|
//var id = TbCustCode.Text; // string.Empty;
|
|
//if (id.Length != 4)
|
|
//{
|
|
// UTIL.MsgE($"올바른 고객번호를 입력하세요\n" +
|
|
// $"고객번호는 4자리여야 합니다\n" +
|
|
// $"값 : {id}\n" +
|
|
// $"길이 : {id.Length}");
|
|
// return;
|
|
//}
|
|
//if (tbRID.Text.Length > 4) id = tbRID.Text.Substring(0, 4);
|
|
|
|
//already check
|
|
bool MakeNewID = true;
|
|
if (tbRID0.Text.isEmpty() == false && tbRID.Text.isEmpty() == false)
|
|
{
|
|
if (UTIL.MsgQ($"This is a newly generated ReelID. Do you want to generate it again?") != DialogResult.Yes)
|
|
{
|
|
MakeNewID = false;
|
|
}
|
|
}
|
|
|
|
//웹서비스로 생성한다.
|
|
if (MakeNewID)
|
|
{
|
|
var sid = tbSID.Text.Trim();
|
|
if (sid.isEmpty())
|
|
{
|
|
UTIL.MsgE("No SID");
|
|
return;
|
|
}
|
|
|
|
//WMS generates from DB
|
|
var newid = PUB.MakeNewREELID(sid);
|
|
if (newid.success == false)
|
|
{
|
|
UTIL.MsgE($"No ReelID Data\n{newid.message}", true);
|
|
return;
|
|
}
|
|
|
|
//remain original reel id
|
|
if (this.tbRID0.Text.isEmpty() && tbRID.Text.isEmpty() == false)
|
|
this.tbRID0.Text = tbRID.Text.Trim();
|
|
|
|
this.tbRID.Text = newid.newid;
|
|
NewReelId = true;
|
|
PUB.log.AddI($"New REELID:{newid.newid}(LoaderInfo)");
|
|
}
|
|
}
|
|
|
|
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 groupBox2_Enter(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
//클릭하면 입력창을 띄운다
|
|
UTIL.TouchKeyShow(tbRID, "Input REEL ID");
|
|
}
|
|
|
|
private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
UTIL.TouchKeyShow(tbSID, "INPUT SID");
|
|
}
|
|
|
|
private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
UTIL.TouchKeyShow(tbVLOT, "INPUT VENDER LOT");
|
|
}
|
|
|
|
private void linkLabel4_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
UTIL.TouchKeyShow(tbQTY, "INPUT QTY");
|
|
}
|
|
|
|
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(tbpartno, "INPUT CUSTOMER PART NO.");
|
|
}
|
|
|
|
private void btPart_Click(object sender, EventArgs e)
|
|
{
|
|
//파트번호자동입력(sid 를 가지고 테이블에서 찾는다)
|
|
if (tbSID.Text.isEmpty())
|
|
{
|
|
UTIL.MsgE("SID value is required", true);
|
|
return;
|
|
}
|
|
var sid = tbSID.Text.Trim();
|
|
using (var db = new DataSet1TableAdapters.K4EE_Component_Reel_SID_InformationTableAdapter())
|
|
{
|
|
var dr = db.GetBySID(PUB.MCCode, sid).FirstOrDefault();
|
|
if (dr == null)
|
|
{
|
|
UTIL.MsgE("No information found for this SID");
|
|
return;
|
|
}
|
|
|
|
//파트번호가 잇어야 한다.
|
|
if (dr.PartNo != null || dr.PartNo.isEmpty())
|
|
{
|
|
UTIL.MsgE("Part No value is not entered for this SID");
|
|
return;
|
|
}
|
|
|
|
var partno = dr.PartNo.Trim();
|
|
if (tbpartno.Text.isEmpty()) tbpartno.Text = partno;
|
|
else
|
|
{
|
|
var dlg = UTIL.MsgQ(string.Format("Would you like to change the Part NO value?\n" +
|
|
"Existing : " + tbpartno.Text + "\n" +
|
|
"New : " + partno));
|
|
if (dlg == DialogResult.Yes) tbpartno.Text = dr.PartNo;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
private void btCustAutoInput_Click(object sender, EventArgs e)
|
|
{
|
|
using (var db = new DataSet1TableAdapters.K4EE_Component_Reel_SID_InformationTableAdapter())
|
|
{
|
|
|
|
var sid = tbSID.Text.Trim();
|
|
if (sid.isEmpty())
|
|
{
|
|
UTIL.MsgE("SID value is required", true);
|
|
return;
|
|
}
|
|
|
|
var dr = db.GetBySID(PUB.MCCode, sid).FirstOrDefault();
|
|
if (dr == null || dr.CustCode.isEmpty())
|
|
{
|
|
UTIL.MsgE("No information found for this SID");
|
|
return;
|
|
}
|
|
|
|
//찾은데이터에서 값을 확인한다.
|
|
//Util.MsgI(string.Format("Customer/Vender 정보가 업데이트 되었습니다\n" +
|
|
// "Customer : {0}\n" +
|
|
// "Customer Name : {1}\n" +
|
|
// "Vender Name : {2}", dr.CustCode, dr.CustName, dr.VenderName));
|
|
|
|
//벤더네임은 vlot값을 가지고 한다. 210504
|
|
var vlot = this.tbVLOT.Text.Trim();
|
|
if (vlot.isEmpty() == false)
|
|
{
|
|
using (var taResult = new DataSet1TableAdapters.K4EE_Component_Reel_ResultTableAdapter())
|
|
{
|
|
var dr2 = taResult.GetByLastVLotOne(AR.SETTING.Data.McName, vlot).FirstOrDefault();
|
|
if (dr2 != null)
|
|
{
|
|
tbVName.Text = dr2.VNAME;
|
|
}
|
|
}
|
|
}
|
|
TbCustCode.Text = dr.CustCode;
|
|
tbCustName.Text = dr.CustName;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
private void linkLabel8_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
UTIL.TouchKeyShow(TbCustCode, "INPUT SUPPLY CODE");
|
|
}
|
|
|
|
private void button7_Click(object sender, EventArgs e)
|
|
{
|
|
//진수석님 데이터에서 찾아본다.
|
|
var custcode = TbCustCode.Text.Trim();
|
|
var partno = tbpartno.Text.Trim();
|
|
if (partno.isEmpty())
|
|
{
|
|
UTIL.MsgE("The following information is required to find SID\n" +
|
|
"1. Part No");
|
|
return;
|
|
}
|
|
|
|
//각 상황에 따라 다르다.
|
|
using (var db = new DataSet1TableAdapters.K4EE_Component_Reel_SID_InformationTableAdapter())
|
|
{
|
|
var amksid = string.Empty;
|
|
var dtSIDInfo = db.GetData(PUB.MCCode);
|
|
|
|
if (custcode.isEmpty() == false && partno.isEmpty() == false)
|
|
{
|
|
var dr = dtSIDInfo.Where(t => t.CustCode == custcode && t.PartNo == partno && string.IsNullOrEmpty(t.SID) == false).FirstOrDefault();
|
|
if (dr != null && dr.SID.isEmpty() == false)
|
|
{
|
|
amksid = dr.SID;
|
|
}
|
|
else
|
|
{
|
|
UTIL.MsgE("Cannot confirm SID corresponding to registered Customer Code/Part No\n" +
|
|
"Customer Code : " + custcode + "\n" +
|
|
"Part No : " + partno);
|
|
return;
|
|
}
|
|
}
|
|
else if (custcode.isEmpty() == false)
|
|
{
|
|
var drow = dtSIDInfo.Where(t => t.CustCode == custcode && string.IsNullOrEmpty(t.SID) == false).ToList();
|
|
if (drow == null || drow.Count < 1)
|
|
{
|
|
UTIL.MsgE("Cannot find SID for the registered Customer Code\nCustomer: " + custcode);
|
|
return;
|
|
}
|
|
var f = new fSelectDataList(drow.Select(t => t.SID).ToArray());
|
|
if (f.ShowDialog() == DialogResult.OK)
|
|
{
|
|
amksid = f.SelectedValue;
|
|
}
|
|
else
|
|
{
|
|
UTIL.MsgE("User selection was canceled");
|
|
return;
|
|
}
|
|
}
|
|
else if (partno.isEmpty() == false)
|
|
{
|
|
var drow = dtSIDInfo.Where(t => t.PartNo == partno && string.IsNullOrEmpty(t.SID) == false).ToList();
|
|
if (drow == null || drow.Count < 1)
|
|
{
|
|
UTIL.MsgE("Cannot find SID for the registered Part No\n" + "Part No: " + partno);
|
|
return;
|
|
}
|
|
|
|
var sidarr = drow.Select(t => t.SID).ToList();
|
|
var lst = new List<String>();
|
|
foreach (var item in sidarr)
|
|
{
|
|
var m101 = string.Empty;
|
|
var m103 = item.Trim();
|
|
var m106 = string.Empty;
|
|
lst.Add(m101 + ";" + m103 + ";" + m106);
|
|
}
|
|
var f = new Dialog.fSelectSID(lst);
|
|
if (f.ShowDialog() == DialogResult.OK)
|
|
{
|
|
var returndata = f.Value.Split(';');
|
|
amksid = returndata[1].Trim();
|
|
}
|
|
else
|
|
{
|
|
UTIL.MsgE("User selection was canceled");
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (amksid.isEmpty() == false)
|
|
{
|
|
PUB.log.Add(string.Format("Amkor SID search code={0},part={1},sid={2}", custcode, partno, amksid));
|
|
tbSID.Text = amksid;
|
|
UpdateSID();
|
|
}
|
|
else
|
|
{
|
|
PUB.log.Add(string.Format("SID search failed - no SID found\n" +
|
|
"Cust:{0}\n" +
|
|
"PartNo:{1}", custcode, partno));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
private void btIDCheck_Click(object sender, EventArgs e)
|
|
{
|
|
//중복검사
|
|
var rid = tbRID.Text.Trim();
|
|
if (rid.isEmpty())
|
|
{
|
|
UTIL.MsgE("Reel ID value is missing");
|
|
return;
|
|
}
|
|
if (AR.SETTING.Data.OnlineMode == false)
|
|
{
|
|
UTIL.MsgE("Cannot be used in offline mode");
|
|
return;
|
|
}
|
|
|
|
UTIL.MsgE("WMS function not available");
|
|
//var result = Amkor.RestfulService.get_existed_matl_by_id(rid);
|
|
//if (result.Complete == false)
|
|
//{
|
|
// UTIL.MsgE(result.Message);
|
|
//}
|
|
//else
|
|
//{
|
|
// if (result.Result == true)
|
|
// {
|
|
// UTIL.MsgE($"This ID is a duplicate ID\nValue: {rid}");
|
|
// return;
|
|
// }
|
|
// else
|
|
// {
|
|
// UTIL.MsgI($"해당 ID는 중복되지 않았습니다\n{rid}");
|
|
// }
|
|
//}
|
|
}
|
|
|
|
private void button9_Click(object sender, EventArgs e)
|
|
{
|
|
var f = new Dialog.fSelectCustInfo();
|
|
if (f.ShowDialog() == DialogResult.OK)
|
|
{
|
|
this.tbCustName.Text = f.CustName;
|
|
this.TbCustCode.Text = f.CustCode;
|
|
PUB.log.Add(string.Format("User directly selected Customer {0}:{1}", tbCustName.Text, TbCustCode.Text));
|
|
}
|
|
}
|
|
|
|
Boolean CheckRID()
|
|
{
|
|
var rid = tbRID.Text.Trim();
|
|
if (rid.Length < 10) return false;
|
|
//var cut = TbCustCode.Text.Trim();
|
|
//if (rid.Substring(2, 4) != cut)
|
|
//{
|
|
// return false;
|
|
//}
|
|
return true;
|
|
}
|
|
Boolean autoconf = false;
|
|
Boolean warn = false;
|
|
Boolean samesidwarn = false;
|
|
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 "Rotate Data"
|
|
if (this.lvbcdList.CheckedItems.Count != 1)
|
|
{
|
|
PUB.AddSystemLog(Application.ProductVersion, "MAIN", $"회전 기준데이터가 {this.lvbcdList.CheckedItems.Count}건 입니다");
|
|
UTIL.MsgE("Only one rotation reference data should be selected");
|
|
return;
|
|
}
|
|
if (this.lvbcdList.CheckedItems.Count == 1)
|
|
{
|
|
var bcddata = lvbcdList.CheckedItems[0].SubItems[1].Text;
|
|
lock (itemC.VisionData.barcodelist)
|
|
{
|
|
foreach (var item in itemC.VisionData.barcodelist)
|
|
{
|
|
if (item.Value.Data == bcddata)
|
|
{
|
|
PUB.log.Add(string.Format("Rotation reference barcode value {0}", item.Value.Data));
|
|
item.Value.UserActive = true;
|
|
}
|
|
else item.Value.UserActive = false;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
//마지막에 작업한 데이터와 비교 ?? 220104
|
|
//if (tbSID.Text == PUB.Result.LastSIDTo && tbVName.Text != PUB.Result.LastVName)
|
|
//{
|
|
// PUB.Result.LastVName = tbVName.Text;
|
|
// PUB.log.Add($"Vname 값을 저장하여 연속작업시 사용합니다 sid:{tbSID.Text},vname:{tbVName.Text}");
|
|
//}
|
|
|
|
//필수값 입력 확인
|
|
#region "Check iNput Data"
|
|
if (tbSID.Text.isEmpty())
|
|
{
|
|
UTIL.MsgE("SID is not entered");
|
|
tbSID.Focus();
|
|
return;
|
|
}
|
|
if (tbVLOT.Text.isEmpty())
|
|
{
|
|
UTIL.MsgE("VLOT is not entered");
|
|
tbVLOT.Focus();
|
|
return;
|
|
}
|
|
if (tbQTY.Text.isEmpty())
|
|
{
|
|
UTIL.MsgE("QTY is not entered");
|
|
tbQTY.Focus();
|
|
return;
|
|
}
|
|
if (tbMFG.Text.isEmpty())
|
|
{
|
|
UTIL.MsgE("MFG-DATE is not entered");
|
|
tbMFG.Focus();
|
|
return;
|
|
}
|
|
if (tbRID.Text.isEmpty())
|
|
{
|
|
UTIL.MsgE("REEL ID is not entered");
|
|
tbRID.Focus();
|
|
return;
|
|
}
|
|
if (PUB.Result.vModel.IgnorePartNo == false && this.tbpartno.Text.isEmpty())
|
|
{
|
|
UTIL.MsgE("PART No is not entered");
|
|
tbpartno.Focus();
|
|
return;
|
|
}
|
|
if (PUB.OPT_BYPASS() == false && PUB.Result.vModel.DisablePrinter == false && this.PrintPos.isEmpty())
|
|
{
|
|
UTIL.MsgE("Print attachment position is not specified");
|
|
return;
|
|
}
|
|
if (PUB.OPT_BYPASS() == false && this.tbVName.Text.isEmpty())
|
|
{
|
|
UTIL.MsgE("Vendor Name is not entered");
|
|
return;
|
|
}
|
|
#endregion
|
|
|
|
//현재 작업모드와 SID가 일치하는지 확인한다.
|
|
var sidNew = this.tbSID.Text.Trim();
|
|
var sidOld = this.lbSID0.Text.Trim();//.Tag == null ? string.Empty : lbSID0.Text;v
|
|
var partNo = this.tbpartno.Text.Trim();
|
|
var custCode = this.TbCustCode.Text.Trim();
|
|
|
|
if (VAR.BOOL[eVarBool.Opt_NewReelID] && (tbRID.Text.isEmpty() || NewReelId == false))
|
|
{
|
|
UTIL.MsgE("New Reel ID generation mode.\nPlease generate REEL ID.");
|
|
this.TopMost = topmost;
|
|
return;
|
|
}
|
|
|
|
//sid전환모드 확인 230510
|
|
if (VAR.BOOL[eVarBool.Opt_SIDConvert])
|
|
{
|
|
if (lbSID0.Tag == null || lbSID0.Text.Length != 9)
|
|
{
|
|
UTIL.MsgE("SID conversion mode. Please perform SID conversion");
|
|
this.TopMost = topmost;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
//신규릴 모드일때에만 CustomerCode 값을 체크한다
|
|
if (VAR.BOOL[eVarBool.Opt_NewReelID] && CheckRID() == false)
|
|
{
|
|
PUB.AddSystemLog(Application.ProductVersion, "MAIN", $"Reel ID 의 Customer Code 값이 현재 값과 일치하지 않습니다(RID:{tbRID.Text}/CUST:{TbCustCode.Text})");
|
|
UTIL.MsgE("Reel ID Customer Code value does not match the current value\nRegenerate REEL ID if necessary");
|
|
this.TopMost = topmost;
|
|
return;
|
|
}
|
|
|
|
//자동 실행이나 LOT값이 변경되면 자동 실행을 취소한다
|
|
var lot = this.tbVLOT.Text.Trim();
|
|
if (warn == false && autoconf == true)
|
|
{
|
|
if (AR.SETTING.Data.OnlineMode)
|
|
{
|
|
var taQ = new DataSet1TableAdapters.QueriesTableAdapter();
|
|
var LastLot = taQ.GetLastVLotFromSID(sidNew);
|
|
if (LastLot.isEmpty() == false && LastLot.Equals(lot) == false)
|
|
{
|
|
UTIL.MsgE("Previous LOT value does not match. Auto confirmation is canceled\n" +
|
|
$"Previous LOT:{LastLot}, New LOT:{lot}");
|
|
warn = true;
|
|
this.TopMost = topmost;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//모든자료는 존재한다 저장가능하다
|
|
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", tbpartno.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", tbVLOT.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", tbpartno.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 will not be updated due to SID conversion feature usage");
|
|
}
|
|
else columns.Add("SID", tbSID.Text);
|
|
}
|
|
if (VAR.BOOL[eVarBool.Opt_SID_Apply_VenderName]) columns.Add("VenderName", tbVName.Text);
|
|
ServerWriteINF(columns, wheres);
|
|
}
|
|
|
|
|
|
//시드변환정보 저장
|
|
if (VAR.BOOL[eVarBool.Opt_SIDConvert] && VAR.BOOL[eVarBool.Opt_SID_WriteServer])
|
|
{
|
|
var SIDO = lbSID0.Text.Trim();
|
|
var SIDN = tbSID.Text.Trim();
|
|
if (SIDO.Equals(SIDN) == false && SIDO.isEmpty() == false && SIDN.isEmpty() == false && SIDO.Length == 9 && SIDO.Length == SIDN.Length)
|
|
{
|
|
Dictionary<string, string> wheres = new Dictionary<string, string>();
|
|
Dictionary<string, string> columns = new Dictionary<string, string>();
|
|
|
|
//조건절생성
|
|
wheres.Add("SIDFrom", SIDO);
|
|
|
|
//Make Target COlumns
|
|
columns.Add("SIDTo", SIDN);
|
|
columns.Add("SIDFrom", SIDO); //250106
|
|
ServerWriteCNV(columns, wheres);
|
|
}
|
|
}
|
|
else PUB.log.AddI($"Seed conversion information(SID) will not be saved");
|
|
|
|
//시드변환테이블에 데이터를 저장하는 경우이다.
|
|
if (VAR.BOOL[eVarBool.Opt_ApplySIDConv] && VAR.BOOL[eVarBool.Opt_Conv_WriteServer])
|
|
{
|
|
Dictionary<string, string> wheres = new Dictionary<string, string>();
|
|
Dictionary<string, string> columns = new Dictionary<string, string>();
|
|
|
|
//조건절생성
|
|
if (VAR.BOOL[eVarBool.Opt_Conv_Where_CustCode]) wheres.Add("CustCode", TbCustCode.Text);
|
|
if (VAR.BOOL[eVarBool.Opt_Conv_Where_PartNo]) wheres.Add("PartNo", tbpartno.Text);
|
|
if (VAR.BOOL[eVarBool.Opt_Conv_Where_SID]) wheres.Add("SIDTo", tbSID.Text);
|
|
if (VAR.BOOL[eVarBool.Opt_Conv_Where_VLOT]) wheres.Add("VenderLot", tbVLOT.Text);
|
|
|
|
//Make Target COlumns
|
|
if (VAR.BOOL[eVarBool.Opt_Conv_Apply_CustCode]) columns.Add("CustCode", TbCustCode.Text);
|
|
if (VAR.BOOL[eVarBool.Opt_Conv_Apply_PartNo]) columns.Add("PartNo", tbpartno.Text);
|
|
if (VAR.BOOL[eVarBool.Opt_Conv_Apply_PrintPos]) columns.Add("PrintPosition", this.PrintPos);
|
|
if (VAR.BOOL[eVarBool.Opt_Conv_Apply_VenderName]) columns.Add("VenderName", tbVName.Text);
|
|
if (VAR.BOOL[eVarBool.Opt_Conv_Apply_Batch]) columns.Add("batch", tbBatch.Text);
|
|
if (VAR.BOOL[eVarBool.Opt_Conv_Apply_QtyMax]) columns.Add("qtymax", tbQtyMax.Text);
|
|
if (VAR.BOOL[eVarBool.Opt_Conv_Apply_SID]) columns.Add("SIDFrom", lbSID0.Text.Trim()); //250106
|
|
|
|
PUB.log.Add($"SID conversion info save columns:{string.Join(",", columns)},where:{string.Join("',", wheres)}");
|
|
ServerWriteCONVINF(columns, wheres);
|
|
}
|
|
else PUB.log.AddI($"Seed conversion information(detailed) will not be saved");
|
|
}
|
|
|
|
//값을 설정해주고 빠져나간다
|
|
itemC.VisionData.SetRID(tbRID.Text.Trim(), "USER CONFIRM");//.RID = tbRID.Text.Trim();
|
|
itemC.VisionData.RID0 = tbRID0.Text.Trim();// tbRID.Text.Trim();// tbRID.Tag.ToString(); //210429
|
|
itemC.VisionData.RIDNew = this.NewReelId;
|
|
|
|
|
|
itemC.VisionData.SID0 = lbSID0.Text.Trim(); //orginal sid value
|
|
|
|
if (lbSID0.Text.isEmpty() &&
|
|
itemC.VisionData.SID.isEmpty() == false &&
|
|
itemC.VisionData.SID.Equals(tbSID.Text.Trim()) == false)
|
|
itemC.VisionData.SID0 = itemC.VisionData.SID;
|
|
|
|
|
|
itemC.VisionData.SID = tbSID.Text.Trim(); //sid convert value
|
|
itemC.VisionData.QTYMAX = tbQtyMax.Text.Trim();
|
|
itemC.VisionData.BATCH = tbBatch.Text.Trim();
|
|
|
|
itemC.VisionData.VLOT = tbVLOT.Text.Trim();
|
|
itemC.VisionData.QTY = tbQTY.Text.Trim();
|
|
itemC.VisionData.MFGDATE = tbMFG.Text.Trim();
|
|
itemC.VisionData.VNAME = tbVName.Text.Trim();
|
|
itemC.VisionData.PARTNO = tbpartno.Text.Trim();
|
|
|
|
//Apply Confirm Data
|
|
if (this.autoconf) itemC.VisionData.ConfirmAuto = true;
|
|
itemC.VisionData.ConfirmUser = true;
|
|
|
|
//Apply Print Position Data
|
|
itemC.VisionData.PrintPositionData = this.PrintPos;
|
|
itemC.VisionData.PrintPositionCheck = true; //사용자가 확인했다.
|
|
|
|
//delete -- 220706
|
|
//this.DisplayLabelPos(itemC.VisionData.LabelPositionData);
|
|
|
|
this.PrintPos = itemC.VisionData.PrintPositionData;
|
|
this.DisplayPrintPos(itemC.VisionData.PrintPositionData);
|
|
|
|
this.TopMost = topmost;
|
|
this.Close();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 지정한 자료를 서버에 기록합니다. 조건절과 대상 열을 제공해야합니다
|
|
/// </summary>
|
|
void ServerWriteINF(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 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.Key} => {item.Value}\n";
|
|
|
|
var dlg = UTIL.MsgQ(dlgMsg);
|
|
if (dlg == DialogResult.Yes)
|
|
{
|
|
|
|
//check double data 220706
|
|
var CSQL = "select count(*) from 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 target reel information is missing\n" + whke);
|
|
}
|
|
else if (cnt > 1)
|
|
{
|
|
|
|
PUB.log.AddAT("SQL=" + CSQL);
|
|
UTIL.MsgE($"Cannot update information because multiple target reel information exists ({cnt} items)\n" + whke);
|
|
}
|
|
else
|
|
{
|
|
var USQL = $"update 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.Key} => {item.Value}\n";
|
|
|
|
var dlg = UTIL.MsgQ(dlgMsg);
|
|
if (dlg == DialogResult.Yes)
|
|
{
|
|
var ISQL = $"insert into 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 ServerWriteCNV(Dictionary<string, string> columns, Dictionary<string, string> wheres)
|
|
{
|
|
//변경된 값만 저장여부를 확인할 것이므로 기존 값을 모두 가져온다
|
|
var tableName = "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.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($"Cannot update conversion information because target reel information is missing\n" + whke);
|
|
}
|
|
else if (cnt > 1)
|
|
{
|
|
|
|
PUB.log.AddAT("SQL=" + CSQL);
|
|
UTIL.MsgE($"Cannot update information because multiple target reel conversion information exists ({cnt} items)\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.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();
|
|
}
|
|
}
|
|
|
|
|
|
void ServerWriteCONVINF(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 Component_Reel_SID_Convert WITH(NOLOCK) ";
|
|
|
|
var WSQL = $" where (MC is null or 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;
|
|
|
|
PUB.log.Add($"ServerWriteCONVINF SQL={SQL}");
|
|
|
|
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 = $"다음 값을 서버(변환정보)에 저장 하시겠습니까?\n";
|
|
foreach (var item in UpdateTarget)
|
|
dlgMsg += $"항목:{item.Key} => {item.Value}\n";
|
|
|
|
var dlg = UTIL.MsgQ(dlgMsg);
|
|
if (dlg == DialogResult.Yes)
|
|
{
|
|
|
|
//check double data 220706
|
|
var CSQL = "select count(*) from Component_Reel_SID_Convert 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($"(CONVINFO) 대상 릴 정보가 없어 정보를 업데이트 할 수 없습니다\n" + whke);
|
|
}
|
|
else if (cnt > 1)
|
|
{
|
|
|
|
PUB.log.AddAT("SQL=" + CSQL);
|
|
UTIL.MsgE($"(CONVINFO) 대상 릴 정보가 복수로({cnt}건) 존재하여 정보를 업데이트 할 수 없습니다\n" + whke);
|
|
}
|
|
else
|
|
{
|
|
var USQL = $"update Component_Reel_SID_Convert set " +
|
|
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("(CONVINFO) Save Error");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
UTIL.MsgE("(CONVINFO) Save Error\n" + ex.Message);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (InsertTarget.Count > 0)
|
|
{
|
|
|
|
var dlgMsg = $"다음 값을 서버(변환정보)에 저장 하시겠습니까?\n";
|
|
foreach (var item in InsertTarget)
|
|
dlgMsg += $"항목:{item.Key} => {item.Value}\n";
|
|
|
|
|
|
var dlg = UTIL.MsgQ(dlgMsg);
|
|
if (dlg == DialogResult.Yes)
|
|
{
|
|
var ISQL = $"insert into Component_Reel_SID_Convert ([MC],wdate," +
|
|
string.Join(",", InsertTarget.Select(t => "[" + t.Key + "]")) + ") values(" +
|
|
$"null,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("(CONVINFO) Save Error");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
UTIL.MsgE("(CONVINFO) Save Error\n" + ex.Message);
|
|
}
|
|
}
|
|
|
|
}
|
|
CN.Close();
|
|
CN.Dispose();
|
|
}
|
|
|
|
private void label26_Click(object sender, EventArgs e)
|
|
{
|
|
var sid = this.tbSID.Text.Trim();
|
|
if (sid.isEmpty()) return;
|
|
|
|
var dlg = UTIL.MsgQ("Do you want to search for print position from SID?");
|
|
if (dlg != DialogResult.Yes) return;
|
|
|
|
using (var db = new DataSet1TableAdapters.K4EE_Component_Reel_Print_InformationTableAdapter())
|
|
{
|
|
var dr = db.GetBySID(PUB.MCCode, sid).FirstOrDefault();
|
|
if (dr == null || dr.PrintPosition.isEmpty())
|
|
{
|
|
UTIL.MsgE("No print position stored for entered SID\n" +
|
|
"SID:" + sid);
|
|
return;
|
|
}
|
|
this.PrintPos = dr.PrintPosition;
|
|
DisplayPrintPos(this.PrintPos);
|
|
}
|
|
}
|
|
|
|
private void button1_Click_1(object sender, EventArgs e)
|
|
{
|
|
//데이터베이스 결과에서 자료를 추가한다.
|
|
var result = new DataSet1.K4EE_Component_Reel_ResultDataTable();// new List<Component_Reel_Result>();
|
|
|
|
var tabName = "K4EE_Component_Reel_Result with (nolock)";
|
|
|
|
//1.sid sid를 먼저 검색한다. 이것이 확률이 제일 높음
|
|
if (this.tbSID.Text.isEmpty() == false)
|
|
{
|
|
var sql = $"select top 5 * from {tabName} where sid = @sid order by wdate desc";
|
|
var list = DBHelper.Get(sql, new SqlParameter("sid", $"{tbSID.Text}"));
|
|
//sql = sql.Replace("@sid", tbSID.Text.Trim());
|
|
if (list.Rows.Count > 0) result.Merge(list);
|
|
}
|
|
//2.파트번호
|
|
if (result.Count == 0 && this.tbpartno.Text.isEmpty() == false)
|
|
{
|
|
var sql = $"select top 5 * from {tabName} where QR like @search order by wdate desc";
|
|
var list = DBHelper.Get(sql, new SqlParameter("search", $"%;{tbpartno.Text}%"));
|
|
if (list.Rows.Count > 0) result.Merge(list);
|
|
}
|
|
//3.벤더LOT
|
|
if (result.Count == 0 && this.tbVLOT.Text.isEmpty() == false)
|
|
{
|
|
var sql = $"select top 5 * from {tabName} where QR like @search order by wdate desc";
|
|
var list = DBHelper.Get(sql, new SqlParameter("search", $"%;{tbVLOT.Text}%"));
|
|
if (list.Rows.Count > 0) result.Merge(list);
|
|
//var list = db.Component_Reel_Result.AsNoTracking().
|
|
// OrderByDescending(t => t.wdate).
|
|
// Where(t => t.QR.Contains(";" + tbVLOT.Text + ";")).Take(5).ToList();
|
|
///if (list != null && list.Count > 0) result.AddRange(list);
|
|
}
|
|
|
|
//4.벤더이름
|
|
if (result.Count == 0 && this.tbVName.Text.isEmpty() == false)
|
|
{
|
|
var sql = $"select top 5 * from {tabName} where QR like @search order by wdate desc";
|
|
var list = DBHelper.Get(sql, new SqlParameter("search", $"%;{tbVName.Text}%"));
|
|
if (list.Rows.Count > 0) result.Merge(list);
|
|
|
|
//var list = db.Component_Reel_Result.AsNoTracking().
|
|
// OrderByDescending(t => t.wdate).
|
|
// Where(t => t.QR.Contains(";" + tbVName.Text + ";")).Take(5).ToList();
|
|
//if (list != null && list.Count > 0) result.AddRange(list);
|
|
}
|
|
|
|
//customer code
|
|
if (result.Count < 1)
|
|
{
|
|
UTIL.MsgE("No search results found\nSearch items\n" +
|
|
"1.SID\n" +
|
|
"2.LOT\n" +
|
|
"3.PARTNO\n");
|
|
return;
|
|
}
|
|
var f = new fSelectResult(result);
|
|
if (f.ShowDialog() != DialogResult.OK) return;
|
|
|
|
//값이 없는 것만 처리한다.
|
|
string msg = string.Empty;
|
|
var qr = f.SelectedValue.QR;
|
|
var amk = new StdLabelPrint.CAmkorSTDBarcode(qr);
|
|
if (this.tbSID.Text.isEmpty() && amk.SID.isEmpty() == false)
|
|
{
|
|
msg += (msg.isEmpty() ? "" : "\n") + string.Format("SID:{0}=>{1}", tbSID.Text, amk.SID);
|
|
tbSID.Text = amk.SID;
|
|
}
|
|
if (this.tbpartno.Text.isEmpty() && amk.PARTNO.isEmpty() == false)
|
|
{
|
|
msg += (msg.isEmpty() ? "" : "\n") + string.Format("Part No:{0}=>{1}", tbpartno.Text, amk.PARTNO);
|
|
tbpartno.Text = amk.PARTNO;
|
|
}
|
|
if (this.tbVLOT.Text.isEmpty() && amk.VLOT.isEmpty() == false)
|
|
{
|
|
msg += (msg.isEmpty() ? "" : "\n") + string.Format("Vender LOT:{0}=>{1}", tbVLOT.Text, amk.VLOT);
|
|
tbVLOT.Text = amk.VLOT;
|
|
}
|
|
if (this.tbVName.Text.isEmpty() && f.SelectedValue.VNAME.isEmpty() == false)
|
|
{
|
|
msg += (msg.isEmpty() ? "" : "\n") + string.Format("Vender Name:{0}=>{1}", tbVName.Text, f.SelectedValue.VNAME);
|
|
tbVName.Text = f.SelectedValue.VNAME;
|
|
}
|
|
if (this.tbMFG.Text.isEmpty() && amk.MFGDate.isEmpty() == false)
|
|
{
|
|
msg += (msg.isEmpty() ? "" : "\n") + string.Format("MFG Date:{0}=>{1}", tbMFG.Text, amk.MFGDate);
|
|
tbMFG.Text = amk.MFGDate;
|
|
}
|
|
|
|
if (VAR.BOOL[eVarBool.Opt_UserQtyRQ] == false && this.tbQTY.Text.isEmpty() && amk.QTY != 0)
|
|
{
|
|
msg += (msg.isEmpty() ? "" : "\n") + string.Format("QTY:{0}=>{1}", tbQTY.Text, amk.QTY);
|
|
|
|
PUB.log.Add($"Quantity updated {tbQTY.Text}->{amk.QTY}");
|
|
tbQTY.Text = amk.QTY.ToString();
|
|
}
|
|
|
|
|
|
var custcode = amk.RID.Substring(2, 4);
|
|
if (this.TbCustCode.Text.isEmpty() && custcode.isEmpty() == false)
|
|
{
|
|
msg += (msg.isEmpty() ? "" : "\n") + string.Format("QTY:{0}=>{1}", TbCustCode.Text, custcode);
|
|
TbCustCode.Text = custcode;// amk.QTY.ToString();
|
|
}
|
|
|
|
if (msg.isEmpty() == false)
|
|
{
|
|
UTIL.MsgI("The following information has been changed\n" + msg, true);
|
|
}
|
|
}
|
|
|
|
private void label2_Click_1(object sender, EventArgs e)
|
|
{
|
|
var sid = this.tbSID.Text.Trim();
|
|
if (sid.isEmpty()) return;
|
|
using (var db = new DataSet1TableAdapters.K4EE_Component_Reel_Print_InformationTableAdapter())
|
|
{
|
|
var dr = db.GetBySID(PUB.MCCode, sid).FirstOrDefault();
|
|
if (dr == null || dr.PrintPosition.isEmpty())
|
|
{
|
|
UTIL.MsgE("No print position stored for entered SID\n" +
|
|
"SID:" + sid);
|
|
return;
|
|
}
|
|
this.PrintPos = dr.PrintPosition;
|
|
}
|
|
|
|
DisplayPrintPos(this.PrintPos);
|
|
}
|
|
|
|
private void button3_Click_1(object sender, EventArgs e)
|
|
{
|
|
var sid = this.tbSID.Text.Trim();
|
|
if (sid.isEmpty())
|
|
{
|
|
UTIL.MsgE("SID value is required");
|
|
return;
|
|
}
|
|
func_CheckDateQty();
|
|
}
|
|
|
|
DateTime stime = DateTime.Now;
|
|
private void tmAutoConfirm_Tick(object sender, EventArgs e)
|
|
{
|
|
var ts = DateTime.Now - stime;
|
|
btOK.Text = string.Format("{0:N0}/{1:N0} 초후 자동 완료", ts.TotalSeconds, AR.SETTING.Data.Timeout_AutoConfirm);
|
|
if (ts.TotalSeconds >= AR.SETTING.Data.Timeout_AutoConfirm)
|
|
{
|
|
tmAutoConfirm.Stop();
|
|
autoconf = true;
|
|
btOK.PerformClick();
|
|
}
|
|
}
|
|
|
|
private void 회전기준바코드로설정ToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
if (lvbcdList.FocusedItem == null)
|
|
{
|
|
UTIL.MsgE("No item has focus");
|
|
return;
|
|
}
|
|
var dataindex = lvbcdList.FocusedItem.Index;
|
|
foreach (ListViewItem item in this.lvbcdList.Items)
|
|
{
|
|
if (item.Index == dataindex) item.Checked = true;
|
|
else item.Checked = false;
|
|
}
|
|
}
|
|
|
|
private void button4_Click_1(object sender, EventArgs e)
|
|
{
|
|
if (tbpartno.Text.isEmpty()) tbpartno.Text = "N/A";
|
|
else
|
|
{
|
|
var dlg = UTIL.MsgQ("Do you want to change the current Part No value to N/A?");
|
|
if (dlg == DialogResult.Yes) tbpartno.Text = "N/A";
|
|
}
|
|
}
|
|
|
|
private void linkLabel9_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
UTIL.TouchKeyShow(this.tbCustName, "INPUT CUST NAME");
|
|
}
|
|
|
|
private void button5_Click_1(object sender, EventArgs e)
|
|
{
|
|
var a = 1;
|
|
var b = 0;
|
|
var c = a / b;
|
|
|
|
}
|
|
|
|
private void lvbcdList_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if (lvbcdList.FocusedItem == null) toolStripStatusLabel1.Text = "--";
|
|
toolStripStatusLabel1.Text = lvbcdList.FocusedItem.SubItems[1].Text;
|
|
}
|
|
|
|
private void groupBox3_Enter(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void button5_Click_2(object sender, EventArgs e)
|
|
{
|
|
if (tbVName.Text.isEmpty()) tbVName.Text = "N/A";
|
|
else
|
|
{
|
|
var dlg = UTIL.MsgQ("Do you want to change the current VenderName value to N/A?");
|
|
if (dlg == DialogResult.Yes) tbVName.Text = "N/A";
|
|
}
|
|
}
|
|
|
|
private void tbBarcode_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.Enter)
|
|
{
|
|
var data = tbBarcode.Text.Trim().Split(';');
|
|
if (data.Length > 4)
|
|
{
|
|
if (data[0].Length == 9 && data[0].StartsWith("10"))
|
|
{
|
|
var sid = data[0].Trim();
|
|
var batch = data[1].Trim();
|
|
var cpn = data[4].Trim();
|
|
|
|
if (tbBatch.Text.isEmpty())
|
|
{
|
|
tbBatch.Text = batch;
|
|
PUB.log.Add($"Set batch value from user barcode input:{batch}");
|
|
}
|
|
|
|
|
|
if (tbSID.Text.isEmpty())
|
|
{
|
|
tbSID.Text = sid;
|
|
tbpartno.Text = cpn;
|
|
PUB.log.Add($"Enter SID/Part number from user barcode, value:{sid}{cpn}");
|
|
}
|
|
else
|
|
{
|
|
if (tbSID.Text.StartsWith("103"))
|
|
{
|
|
//검증
|
|
if (tbSID.Text.Equals(sid))
|
|
{
|
|
//맞다
|
|
tbpartno.Text = cpn;
|
|
PUB.log.Add($"Enter part number from user barcode, value:{cpn}");
|
|
}
|
|
else
|
|
{
|
|
UTIL.MsgE($"Part number not set due to 103 SID mismatch\nOriginal SID: {tbSID.Text}\nTarget SID: {sid}");
|
|
}
|
|
}
|
|
else if (tbSID.Text.StartsWith("101"))
|
|
{
|
|
//변경전 101->103
|
|
lbSID0.Text = tbSID.Text.Trim();
|
|
tbSID.Tag = tbSID.Text.Trim();
|
|
tbSID.Text = sid;
|
|
tbpartno.Text = cpn;
|
|
PUB.log.Add($"Enter SID/Part number from user barcode, value:{sid}{cpn}");
|
|
}
|
|
}
|
|
}
|
|
else PUB.log.AddE($"User barcode 0 is not SID{data}");
|
|
}
|
|
else PUB.log.AddE($"User barcode error insufficient array count:{data}");
|
|
tbBarcode.SelectAll();
|
|
tbBarcode.Focus();
|
|
}
|
|
}
|
|
|
|
private void lnkBatch_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
UTIL.TouchKeyShow(tbBatch, "INPUT BATCH");
|
|
}
|
|
|
|
private void linkLabel10_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
UTIL.TouchKeyShow(tbQtyMax, "INPUT MAX QTY(SAP)");
|
|
}
|
|
}
|
|
}
|