using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace FEQ0000 { public partial class fPurchase_Add : Form { BindingSource bsManu; BindingSource bsModel; dsPurchase.PurchaseRow dr; public Boolean repeatAdd = false; public fPurchase_Add(dsPurchase.PurchaseRow dr_) { InitializeComponent(); bsManu = new BindingSource(); bsModel = new BindingSource(); this.dr = dr_; this.KeyPreview = true; this.StartPosition = FormStartPosition.CenterScreen; this.KeyDown += (s1, e1) => { if (e1.KeyCode == Keys.Escape) this.Close(); }; foreach (Control ctl in groupBox1.Controls) { if (ctl.GetType() == typeof(TextBox) || ctl.GetType() == typeof(ComboBox)) { ctl.KeyDown += ctl_KeyDown; } } } private void __Load(object sender, EventArgs e) { // TODO: 이 코드는 데이터를 'dsPurchase.Purchase' 테이블에 로드합니다. 필요한 경우 이 코드를 이동하거나 제거할 수 있습니다. this.purchaseTableAdapter.Fill(this.dsPurchase.Purchase); // this.Show(); // Application.DoEvents(); //statelist var stateList = FCOMMON.DBM.getCodeTable("04"); this.cmbState.DisplayMember = "Value"; this.cmbState.ValueMember = "Value"; this.cmbState.DataSource = stateList; //장비제조 var dt_dept = FCOMMON.DBM.getCodeTable("06"); bsManu.DataSource = dt_dept; this.cbEQManu.DisplayMember = "Value"; this.cbEQManu.ValueMember = "Value"; this.cbEQManu.DataSource = bsManu; //장비모델 var dt_asset = FCOMMON.DBM.getCodeTable("07"); bsModel.DataSource = dt_asset; bsModel.Filter = "svalue='그런거없다'"; this.cbEQModel.DisplayMember = "Value"; this.cbEQModel.ValueMember = "Value"; this.cbEQModel.DataSource = bsModel; //제조공정 var dt_manuproc = FCOMMON.DBM.getCodeTable("08"); this.cbManuProc.DisplayMember = "Value"; this.cbManuProc.ValueMember = "Value"; this.cbManuProc.DataSource = dt_manuproc; //장비기술공정 var dt_eetproc = FCOMMON.DBM.getCodeTable("09"); this.cbProcess.DisplayMember = "Value"; this.cbProcess.ValueMember = "Value"; this.cbProcess.DataSource = dt_eetproc; ////processlist //var procList = FCOMMON.DBM.getGroupTable("process", "Purchase", "process <> ''"); //this.cbProcess.DisplayMember = "Value"; //this.cbProcess.ValueMember = "Key"; //this.cbProcess.DataSource = new BindingSource(procList, ""); //juserlist var userList = FCOMMON.DBM.getGroupList("name", "Users", "[level] > 0 and [level] < 10"); foreach (var user in userList) { this.cmbReceive.Items.Add(user); this.cmbRequest.Items.Add(user); } dtPdate.Value = DateTime.Parse(dr.pdate); if (dr.IsindateNull() || dr.indate.isEmpty()) { this.chkInDate.Checked = false; } else { this.chkInDate.Checked = true; dtInDate.Value = DateTime.Parse(dr.indate); } if (dr.IsedateNull() || dr.edate.isEmpty()) { this.chkExp.Checked = false; } else { this.chkExp.Checked = true; dtExpDate.Value = DateTime.Parse(dr.edate); } ///입력된 데이터를 적용한다. dtPdate.Value = DateTime.Parse(dr.pdate); cmbRequest.Text = dr.request; tbSID.Text = dr.sid; if (dr.manuproc == "") cbManuProc.SelectedIndex = -1; else cbManuProc.Text = dr.manuproc; //190106 if (dr.dept == "") cbEQManu.SelectedIndex = -1; else cbEQManu.Text = dr.dept; //제조사 if (cbEQManu.SelectedIndex == -1) { if (dr.asset != "") FCOMMON.Util.MsgE( string.Format("장비 모델 명({0})이 있지만 해당 제조사가 없으므로 모델명이 제거 됩니다. 모델을 다시 지정 하세요", dr.asset)); cbEQModel.SelectedIndex = -1; } else { cbEQModel.Text = dr.asset; //제조모델명 if (cbEQModel.SelectedIndex == -1) { FCOMMON.Util.MsgE("모델을 다시 선택하세요"); } } tbPumName.Text = dr.pumname; tbPumModel.Text = dr.pumscale; tbPumQty.Text = dr.pumqty.ToString(); tbPumStock.Text = "--"; if (dr.IspumidxNull()) tbPumIDX.Text = "-1"; else tbPumIDX.Text = dr.pumidx.ToString(); tbPumPrice.Text = dr.pumprice.ToString(); tbPumAmt.Text = dr.pumamt.ToString("N0"); //천단위 구분기호 추가 181222 tbPumUnit.Text = dr.pumunit; tbSupply.Text = dr.supply; tbSupplyIndex.Text = dr.supplyidx.ToString(); tbProject.Text = dr.project; tbProjectIndex.Text = dr.projectidx.ToString(); cmbState.Text = dr.state; cmbReceive.Text = dr.receive; if (dr.process == "") cbProcess.SelectedIndex = -1; else cbProcess.Text = dr.process; if (cbProcess.SelectedIndex == -1) { //181203 - 이 사용자가 마지막으로 사용한 공정값을 사용한다. var lastprocess = FCOMMON.DBM.getFirstValue("process", "purchase", "request like '%" + this.cmbRequest.Text + "%'", "pdate desc"); if (lastprocess != "") cbProcess.Text = lastprocess; } tbSC.Text = dr.sc; tbPO.Text = dr.po; tbOrderNo.Text = dr.orderno; tbBigo.Text = dr.bigo; dtInDate.Text = dr.indate; dtExpDate.Text = dr.edate; //chkInDate.Checked = !dr.IsindateNull(); //chkExp.Checked = !dr.IsedateNull(); this.dtExpDate.Enabled = chkExp.Checked; this.dtInDate.Enabled = chkInDate.Checked; //일반사용자의경우에는 상태를 변경하지 못한다. int curLevel = Math.Max(FCOMMON.info.Login.level, FCOMMON.DBM.getAuth(FCOMMON.DBM.eAutoType.purchase)); if (curLevel < 5) { if (dr.RowState == DataRowState.Detached || dr.RowState == DataRowState.Added) cmbReceive.Enabled = false; cmbState.Enabled = false; if (cmbRequest.Text != "") cmbRequest.Enabled = false; //데이터가 편집 상태인데 요청자가 내가 아닌경우에도 편집 불가 Boolean enb = true; if (dr.RowState == DataRowState.Unchanged && dr.request != FCOMMON.info.Login.nameK) enb = false; if (tbSC.Text.Trim() != "") enb = false; if (enb == false) //일반 사용자는 쇼핑, 카드 잇으면 수정 불가 { btSave.Enabled = false; btSaveAdd.Enabled = false; groupBox1.Enabled = false; groupBox2.Enabled = false; } } this.Show(); Application.DoEvents(); tbSID.Focus(); //이미지를 불러온다. if (dr.RowState != DataRowState.Detached && dr.RowState != DataRowState.Deleted && dr.RowState != DataRowState.Added) { if (dr.IspumidxNull() == false && dr.pumidx != -1) { var img = FCOMMON.DBM.GetImageData("Items", "image", dr.pumidx); if (img != null) { this.pictureBox1.Image = img; } } } } string sidTrim(string sid) { return sid.Replace(" ", "").Replace("-", "").Replace("_", "").Trim(); } void ctl_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { Control ctl = sender as Control; string nm = ctl.Name.ToLower(); string search = ctl.Text.Trim(); Console.WriteLine("inner keydown " + nm + ":" + search); switch (nm) { case "cmbrequest": //요청자가 마지막으로 입력한 자료의 process 를 찾아서 기입해준다. var lastprocess = FCOMMON.DBM.getFirstValue("process", "purchase", "request like '%" + this.cmbRequest.Text + "%'", "pdate desc"); if (lastprocess != "") cbProcess.Text = lastprocess; tbSID.Focus(); break; case "tbsid": if (search != "" && search != "신규") { //if (search.Length == 9 && search.IndexOf('-') == -1) //{ // search = string.Format("{0}-{1}-{2}", // search.Substring(0, 3), // search.Substring(3, 3), // search.Substring(6, 3)); // tbSID.Text = search; //} var f = new FCM0000.fLovItem("%" + sidTrim(search) + "%"); if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK) { tbSID.Text = sidTrim(f.SID); tbPumIDX.Text = f.item.ToString(); tbPumName.Text = f.itemName; tbPumModel.Text = f.itemmodel; tbPumPrice.Text = f.itemprice.ToString(); tbPumQty.Text = "1"; tbPumUnit.Text = f.itemUnit; //181214 //pumamtTextBox.Text = tbPumPrice.Text;\ //이 제품의 마지막 구매기록을 찾아서 업데이트 해준다. var pcInfo = FCOMMON.DBM.getLastPurchaseInfo(f.item); if (pcInfo.idx != -1) { tbSupply.Text = pcInfo.supply; tbSupplyIndex.Text = pcInfo.supplyidx.ToString(); if (pcInfo.project != "" && tbProject.Text == "") tbProject.Text = pcInfo.project; } else { tbSupply.Text = f.itemSupply; tbSupplyIndex.Text = f.itemSupplyidx.ToString(); } if (tbPumIDX.Text != "") { var image = FCOMMON.DBM.GetImageData("Items", "image", int.Parse(tbPumIDX.Text)); var oimage = this.pictureBox1.Image; this.pictureBox1.Image = image; if (oimage != null) oimage.Dispose(); } FCOMMON.Util.MsgI("SID를 선택하면 품명&모델을 편집할 수 없습니다.\n\n해당 정보는 '품목' 정보에서 수정해야 합니다."); //이름을 선택되었으므로 모델을 선택한다. tbPumName.Enabled = false; tbPumModel.Enabled = false; tbPumQty.Focus(); this.Invalidate(); return; } else { tbPumName.Enabled = true; tbPumModel.Enabled = true; tbPumName.Focus(); } } else { tbPumName.Enabled = true; tbPumModel.Enabled = true; tbPumName.Focus(); } break; case "tbpumname": if (search != "") { var f = new FCM0000.fLovItem("%" + search + "%"); if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK) { //인덱스값이 다르면 모델 및 가격을 업데이트 한다. tbPumName.Text = f.itemName; if (this.tbPumIDX.Text != f.item.ToString()) { this.tbPumIDX.Text = f.item.ToString(); this.tbPumModel.Text = f.itemmodel; this.tbPumPrice.Text = f.itemprice.ToString(); this.tbSID.Text = f.SID; this.tbPumUnit.Text = f.itemUnit; //181214 //제품을 찾앗다면 suppy 등을 업데이트 해준다. var pcInfo = FCOMMON.DBM.getLastPurchaseInfo(f.item); if (pcInfo.idx != -1) { tbSupply.Text = pcInfo.supply; tbSupplyIndex.Text = pcInfo.supplyidx.ToString(); if (pcInfo.project != "" && tbProject.Text == "") tbProject.Text = pcInfo.project; } else { tbSupply.Text = f.itemSupply; tbSupplyIndex.Text = f.itemSupplyidx.ToString(); } } if (tbPumIDX.Text != "") { var image = FCOMMON.DBM.GetImageData("Items", "image", int.Parse(tbPumIDX.Text)); var oimage = this.pictureBox1.Image; this.pictureBox1.Image = image; if (oimage != null) oimage.Dispose(); } } else this.tbPumIDX.Text = "-1"; } tbPumModel.Focus(); break; case "tbproject": if (search != "") { FCM0000.fLovProject f = new FCM0000.fLovProject("%" + search + "%"); if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK) { this.tbProject.Text = f.Title; this.tbProjectIndex.Text = f.Index.ToString(); } } this.btSave.Focus(); break; case "tbsupply": if (search != "") { FCM0000.fLovSupply f = new FCM0000.fLovSupply(search); if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK) { tbSupply.Text = f.Title; tbSupplyIndex.Text = f.Index.ToString(); this.tbProject.Focus(); } } tbProject.Focus(); break; default: SendKeys.Send("{TAB}"); break; } } } private bool saveData() { this.Validate(); tbSID.Text = sidTrim(tbSID.Text); if (cbProcess.Text.Trim() == "") { FCOMMON.Util.MsgE("프로세스를 선택하세요."); cbProcess.Focus(); return false; } if (tbPumName.Text.isEmpty()) { FCOMMON.Util.MsgE("품명이 없습니다."); tbPumName.Focus(); return false; } if (tbPumModel.Text == "") { FCOMMON.Util.MsgE("제품 모델을 입력하세요."); tbPumModel.Focus(); return false; } if (tbPumQty.Text == "") { FCOMMON.Util.MsgE("수량을 입력하세요."); tbPumQty.Focus(); return false; } if (tbProject.Text == "") { FCOMMON.Util.MsgE("프로젝트 정보를 입력하세요."); tbProject.Focus(); return false; } var overtime = DateTime.Now - DateTime.Parse("2019-01-09 00:00:00"); if (overtime.TotalSeconds > 0) { if (this.cbProcess.SelectedIndex == -1) { if (FCOMMON.info.Login.level >= 5) { var dlg = FCOMMON.Util.MsgQ("[공정]을 입력하지 않고 진행 하시겠습니까?\n\n" + "선택 대상이 없는 경우 문의 바랍니다.\n\n" + "BongSeok Jung(T.7191)\n" + "BongSeok.Jung@amkor.co.kr"); if (dlg != System.Windows.Forms.DialogResult.Yes) { cbProcess.Focus(); return false; } } else { FCOMMON.Util.MsgE("[공정]을 선택하세요\n\n" + "선택 대상이 없는 경우 문의 바랍니다.\n\n" + "BongSeok Jung(T.7191)\n" + "BongSeok.Jung@amkor.co.kr"); cbProcess.Focus(); return false; } } if (cbManuProc.SelectedIndex == -1) { if (FCOMMON.info.Login.level >= 5) { var dlg = FCOMMON.Util.MsgQ("제조공정을 입력하지 않고 진행 하시겠습니까?\n\n" + "선택 대상이 없는 경우 문의 바랍니다.\n\n" + "BongSeok Jung(T.7191)\n" + "BongSeok.Jung@amkor.co.kr"); if (dlg != System.Windows.Forms.DialogResult.Yes) { cbManuProc.Focus(); return false; } } else { FCOMMON.Util.MsgE("제조공정을 선택하세요\n\n" + "선택 대상이 없는 경우 문의 바랍니다.\n\n" + "BongSeok Jung(T.7191)\n" + "BongSeok.Jung@amkor.co.kr"); cbManuProc.Focus(); return false; } } if (this.cbEQManu.SelectedIndex == -1) { if (FCOMMON.info.Login.level >= 5) { var dlg = FCOMMON.Util.MsgQ("장비제조사를 입력하지 않고 진행 하시겠습니까?\n\n" + "선택 대상이 없는 경우 문의 바랍니다.\n\n" + "BongSeok Jung(T.7191)\n" + "BongSeok.Jung@amkor.co.kr"); if (dlg != System.Windows.Forms.DialogResult.Yes) { cbEQManu.Focus(); return false; } } else { FCOMMON.Util.MsgE("장비 제조사를 선택하세요.\n\n" + "선택 대상이 없는 경우 문의 바랍니다.\n\n" + "BongSeok Jung(T.7191)\n" + "BongSeok.Jung@amkor.co.kr"); cbEQManu.Focus(); return false; } } //if (bsModel.Count > 0 && this.cbEQModel.SelectedIndex == -1) //{ // FCOMMON.Util.MsgE("장비 모델을 선택하세요.\n\n" + // "선택 대상이 없는 경우 문의 바랍니다.\n\n" + // "BongSeok Jung(T.7191)\n" + // "BongSeok.Jung@amkor.co.kr"); // cbEQModel.Focus(); // return false; //} } if (dr.RowState != DataRowState.Detached && dr.RowState != DataRowState.Added) { if (dr.sc != tbSC.Text.Trim() && tbSC.Text != "") { dtPdate.Value = DateTime.Now; this.cmbState.SelectedValue = "Approving"; //if (dr.state == "00") dr.state = "01"; //approv 변경 } } //수령을 했는데. 현재 상태가 04 미만이면 04(수령)으로 변경 한다. if (chkInDate.Checked) { var curState = this.cmbState.Text.Trim(); if (curState.ToLower() == "po" || curState.ToLower() == "pr" || curState.ToLower() == "approving") { this.cmbState.SelectedValue = "Received"; } } if (tbPumQty.Text.isEmpty()) tbPumQty.Text = "0"; if (tbPumPrice.Text.isEmpty()) tbPumPrice.Text = "0"; dr.pumqty = int.Parse(tbPumQty.Text); dr.pumprice = decimal.Parse(tbPumPrice.Text); dr.pumamt = dr.pumqty * dr.pumprice; if (tbPumIDX.Text == "" || tbPumIDX.Text == "-1") dr.SetpumidxNull(); else dr.pumidx = int.Parse(tbPumIDX.Text); var sid = this.tbSID.Text.Replace("-", "").Replace(" ", "").Replace("-", "").Trim(); //if (sid.Length == 9) sid = sid.Substring(0, 3) + "-" + sid.Substring(3, 3) + "-" + sid.Substring(6, 3); dr.sid = sid; if (chkExp.Checked) dr.edate = this.dtExpDate.Value.ToShortDateString(); else dr.SetedateNull(); if (chkInDate.Checked) dr.indate = this.dtInDate.Value.ToShortDateString(); else dr.SetindateNull(); dr.pdate = this.dtPdate.Value.ToShortDateString(); dr.request = cmbRequest.Text; dr.sid = tbSID.Text; dr.asset = cbEQModel.Text; dr.dept = cbEQManu.Text; dr.manuproc = cbManuProc.Text; dr.pumname = tbPumName.Text; dr.pumname = dr.pumname.Replace("*", "x"); //181031 dr.pumscale = tbPumModel.Text; dr.pumscale = dr.pumscale.Replace("*", "x"); //181031 dr.pumunit = tbPumUnit.Text; dr.supply = tbSupply.Text; if (tbSupplyIndex.Text == "") dr.SetsupplyidxNull(); else dr.supplyidx = int.Parse(tbSupplyIndex.Text); dr.project = tbProject.Text; if (tbProjectIndex.Text == "") dr.SetprojectidxNull(); else dr.projectidx = int.Parse(tbProjectIndex.Text); dr.state = cmbState.Text.Trim(); dr.receive = cmbReceive.Text; dr.process = cbProcess.Text; dr.sc = tbSC.Text; dr.po = tbPO.Text; dr.orderno = tbOrderNo.Text; dr.bigo = tbBigo.Text; //품정보가 업데이트 되어있으면 해당 데이터의 이미지를 업데이트 한다.(크기비교) //품정보가 없다면 그대로 생성을 해준다. if (tbPumIDX.Text == "" || tbPumIDX.Text == "-1") { //아이템을 추가해야하낟. byte[] pic = null; if (this.pictureBox1.Image != null && this.pictureBox1.Tag.ToString() == "U") { //이미지를 변경해줘야 한다. pic = FCOMMON.DBM.getImagByteArray(this.pictureBox1.Image); } var newidx = FCOMMON.DBM.addItem(dr.pumname, dr.sid, dr.pumscale, dr.pumprice, dr.supply, dr.supplyidx, pic); if (newidx != -1) { dr.pumidx = newidx; Console.WriteLine("new pumidx set = " + dr.pumidx.ToString()); } } else { //아이템을 추가해야한다(변경된 이름은 if (this.pictureBox1.Image != null && this.pictureBox1.Tag.ToString() == "U") { //이미지를 변경해줘야 한다. FCOMMON.DBM.setImageData(this.pictureBox1.Image, "Items", "image", dr.pumidx); } } dr.EndEdit(); return true; } private void button1_Click(object sender, EventArgs e) { if (!saveData()) return; DialogResult = System.Windows.Forms.DialogResult.OK; } private void chkInDate_CheckedChanged(object sender, EventArgs e) { this.dtInDate.Enabled = chkInDate.Checked; } private void chkExp_CheckedChanged(object sender, EventArgs e) { this.dtExpDate.Enabled = chkExp.Checked; } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { string code = ""; if (cmbState.SelectedIndex < 0) label3.Text = "--"; else { //var value = cmbState.DataSource as BindingSource; //var list = value.DataSource as Dictionary; //var item = list.Values if (cmbState.Text.StartsWith("[") == false) return; code = cmbState.Text.ToString().Substring(1, 2); var desc = FCOMMON.DBM.getCodeSavlue("04", code); label3.Text = desc; } switch (code) { case "01": label3.BackColor = Color.LightBlue; break; case "02": label3.BackColor = Color.SkyBlue; break; case "03": label3.BackColor = Color.Yellow; break; case "04": label3.BackColor = Color.Green; break; case "06": case "05": label3.BackColor = Color.Red; break; case "07": label3.BackColor = Color.Magenta; break; default: label3.BackColor = Color.LightGray; break; } } private void button2_Click(object sender, EventArgs e) { if (!saveData()) return; this.repeatAdd = true; DialogResult = System.Windows.Forms.DialogResult.OK; } private void tbPumQty_TextChanged(object sender, EventArgs e) { var strQty = this.tbPumQty.Text; var strPrice = this.tbPumPrice.Text; int qty = 0; double price = 0; if (strQty.IsNumeric()) qty = int.Parse(strQty); if (strPrice.IsNumeric()) price = double.Parse(strPrice); double amt = price * qty; tbPumAmt.Text = amt.ToString("N0"); } private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { string path = "\\\\k4fs3201n\\ee1t$\\1. 장비기술1파트\\24_Project & Overhaul 예산 사용 실적\\구매 견적서\\" + DateTime.Now.Year.ToString("0000") + "년"; FCOMMON.Util.RunExplorer(path); } private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { OpenFileDialog od = new OpenFileDialog(); if (od.ShowDialog() != System.Windows.Forms.DialogResult.OK) return; var image = Image.FromFile(od.FileName); var oimage = this.pictureBox1.Image; this.pictureBox1.Image = image; this.pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; this.pictureBox1.Tag = "U"; if (oimage != null) oimage.Dispose(); } private void imgpase_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { if (!Clipboard.ContainsImage()) { FCOMMON.Util.MsgE("이미지를 먼저 클립보드에 복사 하세요."); return; } var image = Clipboard.GetImage(); var oimage = this.pictureBox1.Image; this.pictureBox1.Image = image; this.pictureBox1.Tag = "U"; if (oimage != null) oimage.Dispose(); } private void linkLabel4_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { FCOMMON.fWebCamera f = new FCOMMON.fWebCamera(FCOMMON.info.camIndex); if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK) { var bmp = f.bmp.Clone(); Application.DoEvents(); var oimag = this.pictureBox1.Image; this.pictureBox1.Image = (Image)bmp; if (oimag != null) oimag.Dispose(); } } private void cbEQManu_SelectedIndexChanged(object sender, EventArgs e) { string 원본모델 = cbEQModel.Text; //장비모델 필터를 변경해준다. if (cbEQManu.SelectedIndex < 0) { cbEQModel.SelectedIndex = -1; return; } string filter = "svalue='" + cbEQManu.Text.Replace("'", "''") + "'"; bsModel.Filter = filter; if (원본모델 != "") cbEQModel.Text = 원본모델; else cbEQModel.SelectedIndex = -1; } } }