Files
ATV_STDLabelAttach/Handler/Project_form2/Dialog/fLoaderInfo.cs
2025-07-17 16:11:46 +09:00

1738 lines
70 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Project.Dialog
{
public partial class fLoaderInfo : Form
{
string PrintPos = "";
public fLoaderInfo(List<string> errlist)
{
InitializeComponent();
Pub.flag.set(eFlag.WAIT_LOADERINFO, true, "_LOAD");
this.FormClosed += FLoaderInfo_FormClosed;
this.lstErrmsg.Items.Clear();
if (errlist != null)
{
foreach (var item in errlist)
AddErrorMessage(item);
}
}
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.iv1.Image != null)
{
this.iv1.Image.Dispose();
this.iv1.Image = null;
}
Pub.flag.set(eFlag.WAIT_LOADERINFO, false, "_CLOSE");
//사용자가 정보를 정확히 입력하지 않고 닫았다
if (Pub.Result.ItemData[1].VisionData.Confirm == false)
{
if (Pub.sm.Step == StateMachine.eSMStep.RUN)
{
Pub.Result.SetResultMessage(eResult.OPERATION, eECode.CAM_NOBARCODEL, eNextStep.pause, 1);
}
}
}
private void fLoaderInfo_Load(object sender, EventArgs e)
{
//현재 바코드가 읽었단 자료를 모두 표시한다.
this.tbRID.Text = Pub.Result.ItemData[1].VisionData.RID;
this.tbRID.Tag = Pub.Result.ItemData[1].VisionData.RID0;
//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 = Pub.Result.ItemData[1].VisionData.SID;
}
lbSID0.Text = Pub.Result.ItemData[1].VisionData.SID0;
tbVLOT.Text = Pub.Result.ItemData[1].VisionData.VLOT;
if (lbSID0.Text.isEmpty() == false)
lbSID0.Tag = lbSID0.Text;
//수량메뉴얼입력칸
if (Pub.Result.Option_QtyUpdateM)
{
if (Pub.Result.ItemData[1].VisionData.QTYRQ == true)
{
//수동입력이나 바코드에서 RQ값이 들어있는 상태이니 그것을 사용한다.
//lock (Pub.Result.ItemData[1].VisionData.barcodelist)
{
var rqBcd = Pub.Result.ItemData[1].VisionData.barcodelist.Where(t => t.Data.StartsWith("RQ")).FirstOrDefault();
if (rqBcd != null)
{
var newqty = rqBcd.Data.Substring(2).Trim();
Pub.log.Add($"수량업데이트 {tbQTY.Text}->{newqty}");
tbQTY.Text = newqty;
}
else
{
Pub.log.AddAT("RQ가 설정되어있었으나 해당 값이 코드 목록에 없어 수량을 채우지 않습니다");
}
}
}
else
{
//수량을 직접입력하는 경우이므로 수량값을 지워버린다.
Pub.log.Add($"수량업데이트 {tbQTY.Text}-> (직접입력으로인한삭제)");
tbQTY.Text = string.Empty;
}
}
else
{
Pub.log.Add($"수량업데이트 {tbQTY.Text}->{Pub.Result.ItemData[1].VisionData.QTY}");
tbQTY.Text = Pub.Result.ItemData[1].VisionData.QTY;
}
lbQTY0.Text = Pub.Result.ItemData[1].VisionData.QTY0;
tbDate.Text = Pub.Result.ItemData[1].VisionData.MFGDATE;
tbVName.Text = Pub.Result.ItemData[1].VisionData.VNAME;
tbpartno.Text = Pub.Result.ItemData[1].VisionData.PARTNO;
TbCustCode.Text = Pub.Result.ItemData[1].VisionData.temp_custcode; //210317
tbCustName.Text = Pub.Result.ItemData[1].VisionData.temp_custname;
//라벨위치 정보표시 - 210127
DisplayLabelPos(Pub.Result.ItemData[1].VisionData.LabelPositionData);
//프린트정보표시
this.PrintPos = Pub.Result.ItemData[1].VisionData.PrintPositionData;
DisplayPrintPos(Pub.Result.ItemData[1].VisionData.PrintPositionData);
//이미지표시 210121
this.iv1.Shapes.Clear();
if (Pub.Result.ItemData[1].VisionData.image != null)
{
//이미지복사해서사용 210329
var keyImage = Pub.Result.ItemData[1].VisionData.image.Clone();
this.iv1.Image = keyImage;
}
this.lvbcdList.Items.Clear();
//키엔스로부터 읽은 바코드 목록을 표시한다(우측)
func_displaybcdlist();
if (iv1.Image != null)
iv1.ZoomFit();
selectInput(this.tbRID);
//자동판단데이터 확인; (101-103d우선처리)
//이제 모든 sid변환은 1,3컬럼만 사용한다, 22-01-04
if (Pub.Result.JobType2 == "13" && tbSID.Text.StartsWith("10")) func_sidconv(true);
//릴아이디가 없는 경우 자동 생성해준다.
Boolean updaterid = false;
var custCode = TbCustCode.Text;
if (Pub.Result.Option_NewReelID)
{
if (tbRID.Text.isEmpty())
{
if (custCode.isEmpty() == false) updaterid = true;
else Pub.log.AddAT("릴 아이디를 생성해야하는데 커스터머 코드가 없습니다.");
}
else if (custCode.isEmpty() == false)
{
//릴id는 있는데. customer 코드값이 다르면 다시 만들어줘야한다.
if (tbRID.Text.StartsWith("RC" + custCode) == false)
{
Pub.log.Add("릴 ID의 cust 코드가 달라 다시 생성합니다");
updaterid = true;
}
}
}
if (updaterid)
{
var YY = DateTime.Now.Year.ToString().Substring(2);
var MM = DateTime.Now.Month.ToString("X");
var datestr = YY + MM;
var newsn = AmkorReelID.GetNextSNbyYM(datestr);
var data = "R";
data += "C";
data += custCode.Trim();
data += "4";
data += "A";
data += YY;
data += MM;
data += newsn;
if (data.Length == 15)
{
this.tbRID.Text = data;
Pub.log.Add("기초자료가 있어 릴 id를 자동 생성했음" + data);
}
else
{
Util.MsgE("릴 ID생성했지만 15자리가 아님 프로그램 오류(" + data + ")");
}
}
//자동완료이며, 사용자 확인이 off된상태, 수량입력도 false 된 상태여야함
if (Pub.Result.Option_AutoConf && Pub.Result.Option_Confirm1 == false && Pub.Result.Option_QtyUpdateM == false && Pub.Result.JobFirst == false)
{
//자료가 모두 있는지 확인한다.
tmAutoConfirm.Start();
}
}
void func_displaybcdlist()
{
var angok = Pub.Result.ItemData[1].VisionData.BaseAngle(out string msg, out Class.KeyenceBarcodeData bcd);
lock (Pub.Result.ItemData[1].VisionData.barcodelist)
{
var no = 1;
lvbcdList.Items.Clear(); //기존꺼 삭제
foreach (var item in Pub.Result.ItemData[1].VisionData.barcodelist)
{
var lv = this.lvbcdList.Items.Add(item.Angle.ToString("N1"));
lv.SubItems.Add(item.Data);
//lv.SubItems.Add(item.CenterPX.X.ToString());
//lv.SubItems.Add(item.CenterPX.Y.ToString());
var c = new StdLabelPrint.CAmkorSTDBarcode(item.Data);
if (c.isValid) lv.ForeColor = Color.Blue;
else lv.ForeColor = Color.Black;
if (item.sym == "1") lv.BackColor = Color.Gold;
else if (item.sym == "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;
iv1.AddShapeLine(vt[0], vt[1], lcolor);
iv1.AddShapeLine(vt[1], vt[2], lcolor);
iv1.AddShapeLine(vt[2], vt[3], lcolor);
iv1.AddShapeLine(vt[3], vt[0], lcolor);
iv1.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("데이터를 입력할 칸을 먼저 클릭 하세요");
return;
}
var lvitem = this.lvbcdList.FocusedItem;
if (lvitem == null) return;
var lvValue = lvitem.SubItems[1].Text.Trim();
if (lvValue.isEmpty())
{
Util.MsgE("선택한 자료에 값이 없습니다\n\n다른 자료를 선택하세요");
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;
//sid값을 적용했다면 프린트 위치도 확인한.다.
if (this.PrintPos.isEmpty() || this.PrintPos == "5" && lvValue.isEmpty() == false)
{
try
{
using (var db = new EEEntities())
{
var dr = db.Component_Reel_SIDInfo.Where(t => t.SID == lvValue).FirstOrDefault();
if (dr != null) //자료가잇는 경우에만 적용
{
this.PrintPos = dr.PrintPosition;
this.DisplayPrintPos(this.PrintPos);
}
}
}
catch (Exception ex)
{
Util.MsgE("SID:" + lvValue + " 의 인쇄위치값 불러오기 실패\n" + ex.Message);
}
}
}
else if (TagStr == "VLOT")
{
tbVLOT.Text = lvValue;
}
else if (TagStr == "QTY")
{
Pub.log.Add($"수량업데이트 {tbQTY.Text}->{lvValue}");
tbQTY.Text = lvValue;
}
else if (TagStr == "MFGDATE")
{
tbDate.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
//sid를 변경했다면 원본값은 sid0에 넣는다
func_sidconv(false);
}
void CancleAutoConfirm()
{
if (Pub.Result.Option_AutoConf)
{
btOK.Text = "◆ 입력 완료 ◆";
tmAutoConfirm.Stop();
}
}
void func_sidconv(Boolean auto)
{
var sid = tbSID.Text.Trim();
var jobtype = Pub.Result.JobType2;
if (jobtype == "13")
{
if (auto)
{
//데이터베이스에서 조회한다.
try
{
using (var db = new EEEntities())
{
var dr = db.Component_Reel_SIDConv.Where(t => t.SIDFrom == sid && string.IsNullOrEmpty(t.SIDTo) == false);
if (dr.Any() == true) //변환테이블자료가 있다.
{
if (dr.Count() == 1)
{
//원본에 값이 없는경우에만 생성한다
if(lbSID0.Text.isEmpty())
{
lbSID0.Tag = tbSID.Text; //변환정보가 있으니 현재 정보를 원본의 값에 넣는다
lbSID0.Text = tbSID.Text; //원본값
}
tbSID.Text = dr.First().SIDTo; //변환된 값을 현재 값에 넣는다.
Pub.log.Add(string.Format("다음 SID 자동변환 {0}->{1},작업:{2}", dr.First().SIDFrom, dr.First().SIDTo, jobtype));
}
else Pub.log.AddE(string.Format("SID 자동변환실패 {0}, 발견 SID변환정보 수량:{1}", dr.First().SIDFrom, dr.Count()));
}
else Pub.log.Add(string.Format("SID자동변경실패 변환자료 없음 sid:{0},작업:{1}", sid, jobtype));
}
}
catch (Exception ex)
{
Pub.log.AddE("SID변환작업실패 메세지:" + ex.Message);
}
}
else
{
var f = new Dialog.fNewSID(sid);
if (f.ShowDialog() != DialogResult.OK) return;
if (lbSID0.Tag == null || lbSID0.Tag.ToString().isEmpty()) //기존에 변환된 정보가 있는가?
{
//원본값 백업
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($"sid수동선택으로 인해 마지막 기록을 입력합니다 from={Pub.Result.LastSIDFrom},to={Pub.Result.LastSIDTo}");
}
Pub.Result.LastSIDCnt = f.FindSIDCount;
tbSID.Text = f.NewSID;
}
UpdateSID(auto);
makenewId();
}
else
{
Util.MsgE("sid변환작업 불가 :작업형태가 일치하지 않습니다 값=" + Pub.Result.JobType2);
}
}
void makenewId()
{
//ID가 잘못되었다.
if (Pub.Result.Option_NewReelID && CheckRID() == false)
{
//릴 아이디가 잘못되었다면 새로 갱신한다
var yy = DateTime.Now.ToString("yy");
var m = DateTime.Now.Month.ToString("X");
if (TbCustCode.Text.isEmpty())
{
Pub.log.AddAT("Customer 값이 없어 reelid를 새로 생성하지 못했습니다");
}
else
{
var newrid = AmkorReelID.MakeReelID(TbCustCode.Text, yy + m);
Pub.log.Add($"RID값을 자동 변경 했습니다 {tbRID.Text} -> {newrid}");
//if(tbRID.Text.isEmpty()==false) tbri
tbRID.Text = newrid;
}
}
}
void UpdateSID(Boolean auto = false)
{
//고칠게 없다.
if (TbCustCode.Text.isEmpty() == false && tbpartno.Text.isEmpty() == false && this.PrintPos.isEmpty() == false)
{
return;
}
//sid 가 변경되었으나 해당 sid 인쇄위치 및 customer / part no 값을 확인 합니다.
using (var db = new EEEntities())
{
var sid = this.tbSID.Text.Trim();
var dr = db.Component_Reel_SIDInfo.Where(t => t.SID == 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 (dr.PrintPosition.isEmpty() == false)
{
msg += "\nPrint Position : " + dr.PrintPosition;
bupdate = true;
}
if (bupdate == false)
{
//Util.MsgE("변경 가능한 자료가 없습니다");
return;
}
//화면에 표시 --자동화면일떄에는 묻지않고 적용한다
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 (dr.PrintPosition.isEmpty() == false)
{
this.PrintPos = dr.PrintPosition;
DisplayPrintPos(this.PrintPos);
}
//이 SID의 최근 MFGDate 와 Qty 를 추가 체크한다 210326
if (tbDate.Text.isEmpty() || tbQTY.Text.isEmpty())
{
func_CheckDateQty();
}
}
}
Boolean func_CheckDateQty()
{
Boolean bwarn = false;
using (var db2 = new EEEntities())
{
var sid = this.tbSID.Text.Trim();
if (sid.isEmpty()) return false; //sid가 없다.
//최근 6시간안에서 동일한 데이터를 찾아서 제안 해준다
var sd = DateTime.Now.AddHours(-1);
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 이전 기록으로 업데이트");
Pub.log.Add("'V.Name' 값을 이전 기록을 통해서 입력했습니다\n" +
"이전 작업시간 : " + ((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 && tbDate.Text.isEmpty())
{
//해당 mfgdae 가 바코드목록에 잇다면 바로 적용
//업다면 적용하고 적용 메세지 표시한다
//Pub.log.Add(string.Format("이전결과에서 값 업데이트 sid:{0},mfgdata={1}", sid, amkorid.MFGDate));
tbDate.Text = amkorid.MFGDate;
bwarn = true;
if (func_existbcddata(amkorid.MFGDate) == false)
{
AddErrorMessage("MFG 이전 기록으로 업데이트");
Pub.log.Add("'MFG Date' 값을 이전 기록을 통해서 입력했습니다\n" +
"이전 작업시간 : " + ((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($"수량업데이트 {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 이전 기록으로 업데이트");
Pub.log.Add("'Qty' 값을 이전 기록을 통해서 입력했습니다\n" +
"이전 작업시간 : " + ((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 이전 기록으로 업데이트");
Pub.log.Add("'Part No' 값을 이전 기록을 통해서 입력했습니다\n" +
"이전 작업시간 : " + ((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 이전 기록으로 업데이트");
Pub.log.Add("'Customer Code' 값을 이전 기록을 통해서 입력했습니다\n" +
"이전 작업시간 : " + ((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);
}
button6.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 이전 기록으로 업데이트");
Pub.log.Add("'Vender LOT' 값을 이전 기록을 통해서 입력했습니다\n" +
"이전 작업시간 : " + ((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 이전 기록으로 업데이트");
Pub.log.Add("'Vender Name' 값을 이전 기록을 통해서 입력했습니다\n" +
"이전 작업시간 : " + ((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>
/// 키엔스 바코드 목록에서 해당 데이터가 있는지 체크합니다
/// </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 가 필요 합니다");
return;
}
if (Pub.setting.OnlineMode == false)
{
Util.MsgE("오프라인 모드라 사용할 수 없습니다");
return;
}
var cnt = (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)
{
//수량이 동일하니 처리하지 않는다
}
else
{
//숫자가 달라지면?
if (Util.MsgQ(string.Format("수량을 변경하시겠습니까?\n현재:{0}\n서버:{1}", tbQTY.Text, newCnt)) == DialogResult.Yes)
{
Pub.log.Add($"수량업데이트 {tbQTY.Text}->{newCnt}");
tbQTY.Text = newCnt.ToString();
}
}
}
else
{
Util.MsgE("서버수량 확인 실패\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);
}
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);
var f = new Dialog.fNewReelID(id);
if (f.ShowDialog() != DialogResult.OK) return;
this.tbRID.Text = f.NewID;
if (f.tbCustCode.Text.Trim() != "" && f.tbCustCode.Text.Trim() != this.TbCustCode.Text.Trim())
this.TbCustCode.Text = f.tbCustCode.Text.Trim();
}
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.tbDate.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.tbDate.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(tbDate, "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 button5_Click(object sender, EventArgs e)
{
//파트번호자동입력(sid 를 가지고 테이블에서 찾는다)
if (tbSID.Text.isEmpty())
{
Util.MsgE("SID값이 필요 합니다", true);
return;
}
var sid = tbSID.Text.Trim();
using (var db = new EEEntities())
{
var dr = db.Component_Reel_SIDInfo.Where(t =>
t.SID == sid).FirstOrDefault();
if (dr == null)
{
Util.MsgE("해당 SID로 등록된 정보가 없습니다");
return;
}
//파트번호가 잇어야 한다.
if (dr.PartNo != null || dr.PartNo.isEmpty())
{
Util.MsgE("해당 SID에 Part No 의 값이 입력되지 않았습니다");
return;
}
var partno = dr.PartNo.Trim();
if (tbpartno.Text.isEmpty()) tbpartno.Text = partno;
else
{
var dlg = Util.MsgQ(string.Format("Part NO 값을 변경 할까요?\n" +
"기존 : " + tbpartno.Text + "\n" +
"신규 : " + partno));
if (dlg == DialogResult.Yes) tbpartno.Text = dr.PartNo;
}
}
}
private void button6_Click(object sender, EventArgs e)
{
using (var db = new EEEntities())
{
////서플라이코드가 있다면 그 코드값으로 가져온다
//var custCode = TbCustCode.Text.Trim();
//if (custCode.isEmpty() == false)
//{
// var drCustCode = db.Component_Reel_SIDConv.Where(t => t.cust == custCode).FirstOrDefault();
// if (drCustCode != null && drCustCode.manu.isEmpty() == false)
// {
// Pub.log.Add(string.Format("서플라이네임을 가져옴 값={0},코드={1}", drCustCode.manu, custCode));
// tbVName.Text = drCustCode.manu;
// return;
// }
//}
var sid = tbSID.Text.Trim();
if (sid.isEmpty())
{
Util.MsgE("SID값이 필요 합니다", true);
return;
}
var dr = db.Component_Reel_SIDInfo.AsNoTracking().Where(t =>
t.SID == sid).FirstOrDefault();
if (dr == null || dr.CustCode.isEmpty())
{
Util.MsgE("해당 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)
{
var dr2 = db.Component_Reel_Result.AsNoTracking().Where(t => t.VLOT == vlot).OrderByDescending(t => t.wdate).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("SID 를 찾기 위해서는 다음 정보가 필요 합니다\n" +
"1. Part No");
return;
}
//각 상황에 따라 다르다.
using (var db = new EEEntities())
{
var amksid = string.Empty;
if (custcode.isEmpty() == false && partno.isEmpty() == false)
{
var dr = db.Component_Reel_SIDInfo.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("등록된 Customer Code /Part No 에 해당되는 SID를 확인할 수 없습니다\n" +
"Customer Code : " + custcode + "\n" +
"Part No : " + partno);
return;
}
}
else if (custcode.isEmpty() == false)
{
var drow = db.Component_Reel_SIDInfo.Where(t => t.CustCode == custcode && string.IsNullOrEmpty(t.SID) == false).ToList();
if (drow == null || drow.Count < 1)
{
Util.MsgE("등록된 Customer Code 에 해당되는 SID를 확인할 수 없습니다\nCustomer : " + custcode);
return;
}
var f = new fSelectDataList(drow.Select(t => t.SID).ToArray());
if (f.ShowDialog() == DialogResult.OK)
{
amksid = f.SelectedValue;
}
else
{
Util.MsgE("사용자 선택이 취소 되었습니다");
return;
}
}
else if (partno.isEmpty() == false)
{
var drow = db.Component_Reel_SIDInfo.Where(t => t.PartNo == partno && string.IsNullOrEmpty(t.SID) == false).ToList();
if (drow == null || drow.Count < 1)
{
Util.MsgE("등록된 Part No 에 해당되는 SID를 확인할 수 없습니다\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("사용자 선택이 취소 되었습니다");
return;
}
}
if (amksid.isEmpty() == false)
{
Pub.log.Add(string.Format("amkor SId찾기 code={0},part={1},sid={2}", custcode, partno, amksid));
tbSID.Text = amksid;
UpdateSID();
makenewId();
}
else
{
Pub.log.Add(string.Format("검색된 SID가 없어 sid찾기가 실패 했습니다\n" +
"Cust:{0}\n" +
"PartNo:{1}", custcode, partno));
}
}
}
private void button8_Click(object sender, EventArgs e)
{
//중복검사
var rid = tbRID.Text.Trim();
if (rid.isEmpty())
{
Util.MsgE("Reel Id 값이 없습니다");
return;
}
if (Pub.setting.OnlineMode == false)
{
Util.MsgE("오프라인 모드라 사용할 수 없습니다");
return;
}
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($"해당 ID는 중복된 ID 입니다\n값:{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("사용자가 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;
}
else return true;
}
Boolean autoconf = false;
Boolean warn = false;
Boolean samesidwarn = false;
private void btOK_Click(object sender, EventArgs e)
{
//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();
}
}
}
//회전용데이터가 여러개 있다면 처리하지 않는다.
if (this.lvbcdList.CheckedItems.Count != 1)
{
Pub.AddSystemLog(Application.ProductVersion, "MAIN", $"회전 기준데이터가 {this.lvbcdList.CheckedItems.Count}건 입니다");
Util.MsgE("회전 기준데이터는 1개만 선택되어야 합니다");
return;
}
if (this.lvbcdList.CheckedItems.Count == 1)
{
var bcddata = lvbcdList.CheckedItems[0].SubItems[1].Text;
lock (Pub.Result.ItemData[1].VisionData.barcodelist)
{
foreach (var item in Pub.Result.ItemData[1].VisionData.barcodelist)
{
if (item.Data == bcddata)
{
Pub.log.Add(string.Format("회전 기준 바코드값 {0}", item.Data));
item.UserActive = true;
}
else item.UserActive = false;
}
}
}
//마지막에 작업한 데이터와 비교 ?? 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}");
}
if (tbSID.Text.isEmpty())
{
Util.MsgE("SID 가 입력되지 않았습니다");
tbSID.Focus();
return;
}
if (tbVLOT.Text.isEmpty())
{
Util.MsgE("VLOT 가 입력되지 않았습니다");
tbVLOT.Focus();
return;
}
if (tbQTY.Text.isEmpty())
{
Util.MsgE("QTY 가 입력되지 않았습니다");
tbQTY.Focus();
return;
}
if (tbDate.Text.isEmpty())
{
Util.MsgE("MFG-DATE 가 입력되지 않았습니다");
tbDate.Focus();
return;
}
if (tbRID.Text.isEmpty())
{
Util.MsgE("REEL ID 가 입력되지 않았습니다");
tbRID.Focus();
return;
}
//파트넘버 필수로 필요한 - 최준호s
if (this.tbpartno.Text.isEmpty())
{
Util.MsgE("PART No 가 입력되지 않았습니다");
tbpartno.Focus();
return;
}
if (this.PrintPos.isEmpty())
{
Util.MsgE("프린트 부착 위치가 지정되지 않았습니다");
return;
}
if (Pub.Result.Option_vname && this.tbVName.Text.isEmpty())
{
Util.MsgE("Vender Name 이 입력되지 않았습니다");
return;
}
//현재 작업모드와 SID가 일치하는지 확인한다.
var sidNew = this.tbSID.Text.Trim();
var sidOld = this.lbSID0.Text.Trim();//.Tag == null ? string.Empty : lbSID0.Text;
if (Pub.Result.Option_NewReelID && tbRID.Text.Length != 15)
{
Util.MsgE("신규 릴ID 생성모드 입니다.\n현재 릴ID는 15자리 가 아닙니다.\n릴ID를 확인하세요.");
return;
}
if (CheckRID() == false)
{
Pub.AddSystemLog(Application.ProductVersion, "MAIN", $"Reel ID 의 Customer Code 값이 현재 값과 일치하지 않습니다(RID:{tbRID.Text}/CUST:{TbCustCode.Text})");
Util.MsgE("Reel ID 의 Customer Code 값이 현재 값과 일치하지 않습니다");
return;
}
//SID별 부착위치를 결정시켜준다 - 210202
try
{
if (Pub.setting.OnlineMode)
{
using (var db = new EEEntities())
{
var drPrnPos = db.Component_Reel_SIDInfo.Where(t => t.SID == sidNew).FirstOrDefault();
if (drPrnPos == null)
{
var newdrpos = new Component_Reel_SIDInfo()
{
SID = sidNew,
PrintPosition = this.PrintPos,
Remark = string.Empty
};
db.Component_Reel_SIDInfo.Add(newdrpos);
db.SaveChanges();
Pub.log.Add(string.Format("SId별 프린트 위치 정보 추가 sid:{0},위치:{1}", tbSID.Text, this.PrintPos));
}
else if (drPrnPos.PrintPosition != this.PrintPos)
{
//기존에있는경우 내용이 다르면 업데이트한다
drPrnPos.PrintPosition = this.PrintPos;
db.SaveChanges();
Pub.log.Add(string.Format("SId별 프린트 위치 정보 추가 sid:{0},위치:{1}", tbSID.Text, this.PrintPos));
}
}
}
}
catch (Exception ex)
{
Pub.log.AddE(string.Format("sid별 프린트 위치 정보 추가 실패 sid:{0},메세지:{1}", tbSID.Text, ex.Message));
}
//sid lot 이름 검증
//var sid = this.tbSID.Text.Trim();
var lot = this.tbVLOT.Text.Trim();
if (warn == false && autoconf == true)
{
if (Pub.setting.OnlineMode)
using (var db = new EEEntities())
{
var predata = db.Component_Reel_Result.AsNoTracking().Where(t => t.SID == sidNew).OrderByDescending(t => t.wdate).FirstOrDefault();
if (predata != null && predata.VLOT != lot)
{
Util.MsgE("이전 LOT 값이 일치 하지 않습니다. 자동 확인이 취소 됩니다");
warn = true;
return;
}
}
}
//변환테이블의 데이터를 확인하고 업데이트한다.
if (Pub.setting.OnlineMode)
using (var db = new EEEntities())
{
//파트번호 업데이트
bool dataUpdate = false;
var drsidInfo = db.Component_Reel_SIDInfo.Where(t => t.SID == sidNew).FirstOrDefault();
if (drsidInfo.PartNo.isEmpty() && tbpartno.Text.isEmpty() == false &&
drsidInfo.PartNo != tbpartno.Text)
{
if (Util.MsgQ("다음 SID의 PART NO를 기록할까요?\n기록을 진행하면 이후 작업에는 묻지 않고 진행 됩니다\n" +
"SID:" + sidNew + "\nPARTNO:" + tbpartno.Text) == DialogResult.Yes)
{
drsidInfo.PartNo = this.tbpartno.Text.Trim();
dataUpdate = true;
}
}
if (drsidInfo.CustCode.isEmpty() && TbCustCode.Text.isEmpty() == false &&
drsidInfo.CustCode != TbCustCode.Text)
{
if (Util.MsgQ("다음 SID의 Customer Code 를 기록할까요?\n기록을 진행하면 이후 작업에는 묻지 않고 진행 됩니다\n" +
"SID:" + sidNew + "\n" + "CUST:" + TbCustCode.Text) == DialogResult.Yes)
{
drsidInfo.CustCode = this.TbCustCode.Text.Trim();
dataUpdate = true;
}
}
//커스터머이름도 저장한다. 220108
if (drsidInfo.CustName.isEmpty() && tbCustName.Text.isEmpty() == false && drsidInfo.CustName != tbCustName.Text)
{
if (Util.MsgQ("다음 SID의 Customer Name 을 기록할까요?\n기록을 진행하면 이후 작업에는 묻지 않고 진행 됩니다\n" +
"SID:" + sidNew + "\n" + "Cust Name:" + tbCustName.Text) == DialogResult.Yes)
{
drsidInfo.CustName = this.tbCustName.Text.Trim();
dataUpdate = true;
}
}
//SID변환테이블 -220104
if (Pub.Result.JobType2 == "13" && sidOld != sidNew && sidOld.isEmpty() == false && sidNew.isEmpty() == false)
{
var drConvData = db.Component_Reel_SIDConv.Where(t => t.SIDFrom == sidOld && t.SIDTo == sidNew).Any();
if (drConvData == false)
{
if (Util.MsgQ("다음 변환된 SID 정보를 저장할까요?\n기록을 진행하면 이후 작업에는 묻지 않고 진행 됩니다\n" +
"SID 원본 :" + sidOld + "\n" + "SID 대상:" + sidNew) == DialogResult.Yes)
{
//자료가 없다면 추가하고
//var olist = db.Component_Reel_SIDConv.Where(t => t.M101 == lbSID0.Text).ToList();
//if (olist.Count < 1)
//{
try
{
var newdr = new Component_Reel_SIDConv();
newdr.SIDFrom = sidOld;
newdr.SIDTo = sidNew;
newdr.Remark = "Auto Gen";
//newdr.M106 = string.Empty;
//newdr.M108 = string.Empty;
db.Component_Reel_SIDConv.Add(newdr);
db.SaveChanges();
}
catch (Exception ex)
{
Util.MsgE("SID변환 정보를 서버에 저장하지 못했습니다");
Pub.log.Add("sid변환정보 저장 실패 : " + ex.Message);
}
//}
//else
//{
// //있긴이삳.
// foreach (var item in olist)
// item.M103 = sid;
// db.SaveChanges();
//}
//있다면 업데이트 해준다.
}
}
}
//벤더는 SID에 종속되지 않는다
//if (drConv.VenderName.isEmpty() && tbVName.Text.isEmpty() == false && drConv.VenderName != tbVName.Text)
//{
// if (Util.MsgQ("다음 SID의 Vender Name 를 기록할까요? 기록을 진행하면 이후 작업에는 묻지 않고 진행 됩니다") == DialogResult.Yes)
// {
// drConv.VenderName = this.tbVName.Text.Trim();
// dataUpdate = true;
// }
//}
if (dataUpdate)
{
Pub.log.Add("Customer / Partno 의 SId연결 정보를 업데이트 합니다");
db.SaveChanges();
}
}
//값을 설정해주고 빠져나간다
Pub.Result.ItemData[1].VisionData.SID = tbSID.Text.Trim();
Pub.Result.ItemData[1].VisionData.SID0 = lbSID0.Text.Trim();
Pub.Result.ItemData[1].VisionData.VLOT = tbVLOT.Text.Trim();
Pub.Result.ItemData[1].VisionData.QTY = tbQTY.Text.Trim();
Pub.Result.ItemData[1].VisionData.MFGDATE = tbDate.Text.Trim();
Pub.Result.ItemData[1].VisionData.VNAME = tbVName.Text.Trim();
Pub.Result.ItemData[1].VisionData.SetRID(tbRID.Text.Trim(), "USER CONFIRM");//.RID = tbRID.Text.Trim();
if (tbRID.Tag == null || tbRID.Text.isEmpty()) Pub.Result.ItemData[1].VisionData.RID0 = string.Empty;
else Pub.Result.ItemData[1].VisionData.RID0 = tbRID.Text.Trim();// tbRID.Tag.ToString(); //210429
Pub.Result.ItemData[1].VisionData.PARTNO = tbpartno.Text.Trim();
if (this.autoconf) Pub.Result.ItemData[1].VisionData.ConfirmAuto = true;
Pub.Result.ItemData[1].VisionData.ConfirmUser = true; //사용자가확인했다!
Pub.Result.ItemData[1].VisionData.PrintPositionData = this.PrintPos;
Pub.Result.ItemData[1].VisionData.PrintPositionCheck = true; //사용자가 확인했다.
this.DisplayLabelPos(Pub.Result.ItemData[1].VisionData.LabelPositionData);
this.PrintPos = Pub.Result.ItemData[1].VisionData.PrintPositionData;
this.DisplayPrintPos(Pub.Result.ItemData[1].VisionData.PrintPositionData);
this.Close();
}
private void label26_Click(object sender, EventArgs e)
{
var sid = this.tbSID.Text.Trim();
if (sid.isEmpty()) return;
var dlg = Util.MsgQ("SID 에서 인쇄 위치를 검색 할까요?");
if (dlg != DialogResult.Yes) return;
using (var db = new EEEntities())
{
var dr = db.Component_Reel_SIDInfo.Where(t => t.SID == sid).FirstOrDefault();
if (dr == null || dr.PrintPosition.isEmpty())
{
Util.MsgE("입력된 SID에 저장된 인쇄 위치가 없습니다\n" +
"SID:" + sid);
return;
}
this.PrintPos = dr.PrintPosition;
DisplayPrintPos(this.PrintPos);
}
}
private void button1_Click_1(object sender, EventArgs e)
{
//데이터베이스 결과에서 자료를 추가한다.
List<Component_Reel_Result> result = new List<Component_Reel_Result>();
using (var db = new EEEntities())
{
//1.sid sid를 먼저 검색한다. 이것이 확률이 제일 높음
if (this.tbSID.Text.isEmpty() == false)
{
var list = db.Component_Reel_Result.AsNoTracking().
OrderByDescending(t => t.wdate).
Where(t => t.SID == tbSID.Text.Trim()).Take(5).ToList();
if (list != null && list.Count > 0) result.AddRange(list);
}
//2.파트번호
if (result.Count == 0 && this.tbpartno.Text.isEmpty() == false)
{
var list = db.Component_Reel_Result.AsNoTracking().
OrderByDescending(t => t.wdate).
Where(t => t.QR.Contains(";" + tbpartno.Text)).Take(5).ToList();
if (list != null && list.Count > 0) result.AddRange(list);
}
//3.벤더LOT
if (result.Count == 0 && this.tbVLOT.Text.isEmpty() == false)
{
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 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("검색된 결과가 없습니다\n검색 아이템\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.tbDate.Text.isEmpty() && amk.MFGDate.isEmpty() == false)
{
msg += (msg.isEmpty() ? "" : "\n") + string.Format("MFG Date:{0}=>{1}", tbDate.Text, amk.MFGDate);
tbDate.Text = amk.MFGDate;
}
if (Pub.Result.Option_QtyUpdateM == false && this.tbQTY.Text.isEmpty() && amk.QTY != 0)
{
msg += (msg.isEmpty() ? "" : "\n") + string.Format("QTY:{0}=>{1}", tbQTY.Text, amk.QTY);
Pub.log.Add($"수량업데이트 {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("다음 정보가 변경 되었습니다\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 EEEntities())
{
var dr = db.Component_Reel_SIDInfo.Where(t => t.SID == sid).FirstOrDefault();
if (dr == null || dr.PrintPosition.isEmpty())
{
Util.MsgE("입력된 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 값이 필요합니다");
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, Pub.setting.Timeout_AutoConfirm);
if (ts.TotalSeconds >= Pub.setting.Timeout_AutoConfirm)
{
tmAutoConfirm.Stop();
autoconf = true;
btOK.PerformClick();
}
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (lvbcdList.FocusedItem == null)
{
Util.MsgE("포커스를 받은 항목이 없습니다");
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("현재 Part No 값을 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;
}
}
}