530 lines
20 KiB
C#
530 lines
20 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.Windows.Forms;
|
|
|
|
namespace FEQ0000
|
|
{
|
|
public partial class fPurchase_excelimport : Form
|
|
{
|
|
BindingSource bsModel;
|
|
public fPurchase_excelimport()
|
|
{
|
|
InitializeComponent();
|
|
this.FormClosed += __Closed;
|
|
}
|
|
|
|
private void __Load(object sender, EventArgs e)
|
|
{
|
|
//상태
|
|
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");
|
|
BindingSource bsManu = new BindingSource(dt_dept, "");
|
|
this.cbEQManu.DisplayMember = "Value";
|
|
this.cbEQManu.ValueMember = "Value";
|
|
this.cbEQManu.DataSource = bsManu;
|
|
|
|
//장비모델
|
|
var dt_asset = FCOMMON.DBM.getCodeTable("07");
|
|
bsModel = new BindingSource(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;
|
|
|
|
string namestr = string.Format("{0}({1})", FCOMMON.info.Login.nameK, FCOMMON.info.Login.no);
|
|
if (FCOMMON.info.Login.no == "dev") namestr = "김치균(395552)";
|
|
this.cmbRequest.Items.Clear();
|
|
this.cmbRequest.Items.Add(namestr);
|
|
try
|
|
{
|
|
var cn = FCOMMON.DBM.getCn();
|
|
cn.Open();
|
|
string sql = "select [id],[name] " +
|
|
" from users" +
|
|
" where gcode='{1}' and id <> '{0}'" +
|
|
" order by [name]";
|
|
sql = string.Format(sql, FCOMMON.info.Login.no, FCOMMON.info.Login.gcode);
|
|
var cmd = new System.Data.SqlClient.SqlCommand(sql, cn);
|
|
var rdr = cmd.ExecuteReader();
|
|
while (rdr.Read())
|
|
{
|
|
string cmbdata = string.Format("{1}({0})", rdr[0].ToString(), rdr[1].ToString());
|
|
this.cmbRequest.Items.Add(cmbdata);
|
|
}
|
|
cmd.Dispose();
|
|
cn.Close();
|
|
cn.Dispose();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
FCOMMON.Util.MsgE("User List Error\n\n" + ex.Message);
|
|
}
|
|
cmbRequest.Text = namestr;// FCOMMON.info.Login.nameK;
|
|
|
|
|
|
dtPdate.Value = DateTime.Now;
|
|
|
|
cmbState.Text = "PO"; //po에서 변경 200423 - JBS요청
|
|
}
|
|
|
|
void __Closed(object sender, FormClosedEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
OpenFileDialog od = new OpenFileDialog();
|
|
od.Filter = "excel|*.xls|all files|*.*";
|
|
od.RestoreDirectory = true;
|
|
od.FilterIndex = 1;
|
|
od.RestoreDirectory = true;
|
|
if (od.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
|
|
textBox1.Text = od.FileName;
|
|
}
|
|
|
|
private void button1_Click(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void button2_Click(object sender, EventArgs e)
|
|
{
|
|
var dlg = FCOMMON.Util.MsgQ("데이터의 SID를 ITEM정보와 확인하여 업데이트 합니다.");
|
|
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
|
|
|
|
var i = FCOMMON.DBM.UpdateItemIndexbySID();
|
|
FCOMMON.Util.MsgI(i.ToString() + "건의 자료가 업데이트 되었습니다.");
|
|
|
|
|
|
}
|
|
|
|
private void numericUpDown6_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
var ctl = sender as NumericUpDown;
|
|
if (ctl.Value == 0) ctl.BackColor = Color.Gray;
|
|
else ctl.BackColor = Color.White;
|
|
}
|
|
|
|
private void toolStripButton1_Click(object sender, EventArgs e)
|
|
{
|
|
//저장버튼
|
|
if (this.listView1.Items.Count < 1)
|
|
{
|
|
FCOMMON.Util.MsgE("등록 가능한 자료가 없습니다.\n먼저 자료를 불러오세요");
|
|
return;
|
|
}
|
|
if (this.listView1.CheckedItems == null || this.listView1.CheckedItems.Count < 1)
|
|
{
|
|
FCOMMON.Util.MsgE("선택된 자료가 없습니다. 목록에서 입력할 자료를 선택하세요\n\n메뉴를 보려면 우클릭 하세요");
|
|
return;
|
|
}
|
|
|
|
|
|
//혀냊 입력된 자료를 적용한다
|
|
var valid = checkCombo();
|
|
if (valid == false) return;
|
|
|
|
//기존자료확인
|
|
var cnt = ta.CoutImport(dtPdate.Value.ToShortDateString(), dtPdate.Value.ToShortDateString(),
|
|
FCOMMON.info.Login.no, FCOMMON.info.Login.gcode);
|
|
if(cnt > 0)
|
|
{
|
|
var dlg = FCOMMON.Util.MsgQ("기존에 등록된 자료가 " +cnt.ToString() + "건 있습니다. 이 자료를 삭제할까요?");
|
|
if (dlg == DialogResult.Yes)
|
|
ta.DeleteImport(dtPdate.Value.ToShortDateString(), dtPdate.Value.ToShortDateString(),
|
|
FCOMMON.info.Login.no, FCOMMON.info.Login.gcode);
|
|
}
|
|
|
|
|
|
//요청자 번호확인
|
|
string userNo = this.cmbRequest.Text.Substring(cmbRequest.Text.LastIndexOf('(') + 1);
|
|
userNo = userNo.Substring(0, userNo.Length - 1);
|
|
|
|
//체크안된 데이터를 dr에서 삭제한다.
|
|
decimal itemAmt = 0;
|
|
var itemCount = 0;
|
|
foreach (ListViewItem lv in this.listView1.Items)
|
|
{
|
|
var dr = lv.Tag as dsPurchase.PurchaseRow;
|
|
if (lv.Checked == false) dr.AcceptChanges();
|
|
else
|
|
{
|
|
itemCount += 1;
|
|
dr.request = userNo;
|
|
dr.asset = cbEQModel.Text;
|
|
dr.dept = cbEQManu.Text;
|
|
dr.manuproc = cbManuProc.Text;
|
|
dr.process = cbProcess.Text.Trim();
|
|
dr.state = cmbState.Text.Trim();
|
|
dr.pdate = dtPdate.Value.ToShortDateString();
|
|
dr.project = tbProject.Text.Trim();
|
|
dr.AcceptChanges();
|
|
dr.SetAdded();
|
|
itemAmt += dr.pumamt;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//part 목록을 조회해서 NR에 등록해줘야 함
|
|
var dlg2 = FCOMMON.Util.MsgQ("해당 파트리스트를 NR구매 목록에 등록 하시겠습니까?\n" +
|
|
itemCount.ToString() + "건 " + itemAmt.ToString("N0") + "원");
|
|
if (dlg2 != System.Windows.Forms.DialogResult.Yes) return;
|
|
|
|
|
|
ta.Update(this.dsPRJ.Purchase);
|
|
dsPRJ.Purchase.AcceptChanges();
|
|
FCOMMON.Util.MsgI("Save OK");
|
|
}
|
|
|
|
bool checkCombo()
|
|
{
|
|
|
|
if (cbProcess.Text.isEmpty() == true)
|
|
{
|
|
FCOMMON.Util.MsgE("프로세스를 선택하세요.");
|
|
cbProcess.Focus();
|
|
return false;
|
|
}
|
|
|
|
if (tbProject.Text == "")
|
|
{
|
|
var dlg = FCOMMON.Util.MsgQ("프로젝트가 입력되지 않았습니다. 진행할까요?");
|
|
if(dlg != DialogResult.Yes)
|
|
{
|
|
tbProject.Focus();
|
|
return false;
|
|
}
|
|
}
|
|
if (this.cbProcess.Text.isEmpty() == true)
|
|
{
|
|
|
|
{
|
|
FCOMMON.Util.MsgE("[공정]을 선택하세요\n\n" +
|
|
"선택 대상이 없는 경우 문의 바랍니다.\n\n" +
|
|
"BongSeok Jung(T.7191)\n" +
|
|
"BongSeok.Jung@amkor.co.kr");
|
|
|
|
cbProcess.Focus();
|
|
return false;
|
|
}
|
|
}
|
|
if (cbManuProc.Text.isEmpty()==true)
|
|
{
|
|
|
|
{
|
|
FCOMMON.Util.MsgE("제조공정을 선택하세요\n\n" +
|
|
"선택 대상이 없는 경우 문의 바랍니다.\n\n" +
|
|
"BongSeok Jung(T.7191)\n" +
|
|
"BongSeok.Jung@amkor.co.kr");
|
|
|
|
cbManuProc.Focus();
|
|
return false;
|
|
}
|
|
}
|
|
if (this.cbEQManu.Text.isEmpty() == true)
|
|
{
|
|
|
|
{
|
|
FCOMMON.Util.MsgE("장비 제조사를 선택하세요.\n\n" +
|
|
"선택 대상이 없는 경우 문의 바랍니다.\n\n" +
|
|
"BongSeok Jung(T.7191)\n" +
|
|
"BongSeok.Jung@amkor.co.kr");
|
|
cbEQManu.Focus();
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
private void toolStripButton1_Click_1(object sender, EventArgs e)
|
|
{
|
|
|
|
if (textBox1.Text == "")
|
|
{
|
|
FCOMMON.Util.MsgE("파일을 선택하세요");
|
|
textBox1.Focus();
|
|
return;
|
|
}
|
|
if (!System.IO.File.Exists(textBox1.Text))
|
|
{
|
|
FCOMMON.Util.MsgE("입력하신 파일이 존재하지 않습니다.");
|
|
textBox1.Focus();
|
|
textBox1.SelectAll();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
libxl.Book book;// = new libxl.BinBook();
|
|
book = new libxl.BinBook();
|
|
book.setKey(FCOMMON.info.libxlCompany, FCOMMON.info.libxlKey);
|
|
try
|
|
{
|
|
book.load(textBox1.Text);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
FCOMMON.Util.MsgE(ex.Message);
|
|
return;
|
|
}
|
|
|
|
int sheetNum = (int)numericUpDown1.Value;
|
|
if (sheetNum > book.sheetCount())
|
|
{
|
|
FCOMMON.Util.MsgE("입력한 시트 번호는 존재하지 않습니다.");
|
|
book = null;
|
|
return;
|
|
}
|
|
var sheet = book.getSheet(sheetNum - 1);
|
|
var MaxRow = sheet.lastRow();
|
|
var MinRow = sheet.firstRow();
|
|
|
|
MaxRow = (int)Math.Min(MaxRow, nudE.Value - 1);
|
|
MinRow = (int)Math.Max(MinRow, nudS.Value - 1);
|
|
|
|
|
|
string SID = string.Empty;
|
|
string SC = string.Empty;
|
|
string CRCF = string.Empty;
|
|
string 품명 = string.Empty;
|
|
string 규격 = string.Empty;
|
|
string 수량 = string.Empty;
|
|
string 단위 = string.Empty;
|
|
string 단가 = string.Empty;
|
|
string 공급처 = string.Empty;
|
|
string PO = string.Empty;
|
|
string 비고 = string.Empty;
|
|
|
|
this.progressBar1.Value = 0;
|
|
this.progressBar1.Maximum = MaxRow - MinRow + 1;
|
|
this.listView1.Items.Clear();
|
|
this.listView1.Visible = false;
|
|
this.dsPRJ.Purchase.Clear();
|
|
this.dsPRJ.Purchase.AcceptChanges();
|
|
decimal sumamt = 0;
|
|
try
|
|
{
|
|
|
|
|
|
|
|
for (int r = MinRow; r <= MaxRow; r++)
|
|
{
|
|
progressBar1.Value += 1;
|
|
|
|
var cf_qty = sheet.cellType(r, (int)nudQty.Value - 1);
|
|
var cf_price = sheet.cellType(r, (int)nudPrice.Value - 1);
|
|
var cf_sid = sheet.cellType(r, (int)nudSid.Value - 1);
|
|
|
|
//필수값을 먼저 확인한다.
|
|
if (nudSid.Value > 0)
|
|
{
|
|
if (cf_sid == libxl.CellType.CELLTYPE_NUMBER)
|
|
SID = sheet.readNum(r, (int)nudSid.Value - 1).ToString();
|
|
else if (cf_sid == libxl.CellType.CELLTYPE_STRING)
|
|
SID = sheet.readStr(r, (int)nudSid.Value - 1).Replace(",", "").Trim();
|
|
}
|
|
if (nudSc.Value > 0) SC = sheet.readStr(r, (int)this.nudSc.Value - 1).Trim();
|
|
if (nudCr.Value > 0) CRCF = sheet.readStr(r, (int)this.nudCr.Value - 1).Trim();
|
|
//if (nudRecev.Value > 0) 수령 = sheet.readStr(r, (int)nudRecev.Value - 1).Trim();
|
|
if (nudPumName.Value > 0) 품명 = sheet.readStr(r, (int)this.nudPumName.Value - 1).Replace(",", "").Trim();
|
|
if (nudScale.Value > 0) 규격 = sheet.readStr(r, (int)nudScale.Value - 1).Trim();
|
|
|
|
|
|
|
|
|
|
//먼저 숫자로 읽어보낟
|
|
if (nudQty.Value > 0)
|
|
{
|
|
if (cf_qty == libxl.CellType.CELLTYPE_NUMBER)
|
|
수량 = sheet.readNum(r, (int)nudQty.Value - 1).ToString("N0").Replace(",", "").Trim();
|
|
else if (cf_qty == libxl.CellType.CELLTYPE_STRING)
|
|
수량 = sheet.readStr(r, (int)nudQty.Value - 1).Replace(",", "").Trim();
|
|
}
|
|
if (nudUnit.Value > 0) 단위 = sheet.readStr(r, (int)nudUnit.Value - 1).Trim();
|
|
if (nudPrice.Value > 0)
|
|
{
|
|
if (cf_price == libxl.CellType.CELLTYPE_NUMBER)
|
|
단가 = sheet.readNum(r, (int)nudPrice.Value - 1).ToString("N0");
|
|
else if (cf_price == libxl.CellType.CELLTYPE_STRING)
|
|
단가 = sheet.readStr(r, (int)nudPrice.Value - 1).Replace(",", "").Trim();
|
|
}
|
|
if (nudSupplty.Value > 0) 공급처 = sheet.readStr(r, (int)nudSupplty.Value - 1).Trim();
|
|
if (nudPo.Value > 0) PO = sheet.readStr(r, (int)nudPo.Value - 1).Trim();
|
|
if (nudMemo.Value > 0) 비고 = sheet.readStr(r, (int)nudMemo.Value - 1).Trim();
|
|
|
|
//sid 공백과 - _ 제거 200506
|
|
SID = SID.Replace(" ", "").Replace("-", "").Replace("_", "").Trim();
|
|
|
|
//필수자료갸ㅏ 없는 경우처리하지 않음
|
|
if (품명.Trim() == "") continue;
|
|
|
|
int d_qty = 0;
|
|
decimal d_price = 0;
|
|
decimal d_amt = 0;
|
|
|
|
if (단가 != "") d_price = decimal.Parse(단가);
|
|
if (수량 != "") d_qty = int.Parse(수량);
|
|
d_amt = d_price * d_qty;
|
|
|
|
var v_공급처 = string.Empty;
|
|
var v_공급처코드 = -1;
|
|
if (공급처 != "")
|
|
{
|
|
int idx;
|
|
string nameK, nameE;
|
|
if (FCOMMON.DBM.getFindSupply(공급처, out idx, out nameK, out nameE))
|
|
{
|
|
v_공급처 = nameK;
|
|
v_공급처코드 = idx;
|
|
}
|
|
else v_공급처 = 공급처;
|
|
}
|
|
|
|
|
|
|
|
//리스트뷰에 추가
|
|
var newitem = this.listView1.Items.Add(SC);
|
|
newitem.Checked = false;
|
|
newitem.SubItems.Add(CRCF);
|
|
newitem.SubItems.Add(SID);
|
|
newitem.SubItems.Add(품명);
|
|
newitem.SubItems.Add(규격);
|
|
newitem.SubItems.Add(d_qty.ToString());
|
|
newitem.SubItems.Add(단위);
|
|
newitem.SubItems.Add(d_price.ToString());
|
|
newitem.SubItems.Add(d_amt.ToString());
|
|
newitem.SubItems.Add(v_공급처);
|
|
newitem.SubItems.Add(PO);
|
|
newitem.SubItems.Add(비고);
|
|
|
|
//데이터도 추가를 해준다
|
|
var newdr = this.dsPRJ.Purchase.NewPurchaseRow();
|
|
newdr.wuid = FCOMMON.info.Login.no;
|
|
newdr.wdate = DateTime.Now;
|
|
newdr.gcode = FCOMMON.info.Login.gcode;
|
|
newdr.sc = SC;
|
|
newdr.orderno = CRCF;
|
|
newdr.sid = SID;
|
|
newdr.pumname = 품명;
|
|
newdr.pumscale = 규격;
|
|
newdr.pumqty = d_qty;
|
|
newdr.pumprice = d_price;
|
|
newdr.pumamt = d_amt;
|
|
newdr.supply = v_공급처;
|
|
newdr.supplyidx = v_공급처코드;
|
|
newdr.po = PO;
|
|
newdr.bigo = 비고;
|
|
newdr.import = true;
|
|
newitem.Tag = newdr;
|
|
this.dsPRJ.Purchase.AddPurchaseRow(newdr);
|
|
|
|
|
|
|
|
sumamt += d_amt;
|
|
|
|
}
|
|
//this.dsPRJ.ProjectsPart.AcceptChanges();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
FCOMMON.Util.MsgE("불러오는 중 오류 발생\n" + ex.Message);
|
|
}
|
|
//
|
|
book = null;
|
|
|
|
sbSum.Text = string.Format("합계:{0:N0}원", sumamt);
|
|
//this.bs.DataSource = dt;
|
|
//this.bn.BindingSource = this.bs;
|
|
//this.dataGridView1.AutoGenerateColumns = true;
|
|
//this.dataGridView1.DataSource = this.bs;
|
|
this.listView1.Visible = true;
|
|
//this.listView1.AutoResizeColumns();
|
|
|
|
if (this.listView1.Items.Count < 1)
|
|
{
|
|
FCOMMON.Util.MsgE("입력된 자료가 없습니다.\n\n지정된 엑셀의 1번째 칸에 값이 없다면 입력되지 않습니다.");
|
|
}
|
|
}
|
|
|
|
private void 전체선택ToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (ListViewItem item in this.listView1.Items)
|
|
item.Checked = true;
|
|
}
|
|
|
|
private void 모두해제ToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (ListViewItem item in this.listView1.Items)
|
|
item.Checked = false;
|
|
}
|
|
|
|
private void 선택반전ToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (ListViewItem item in this.listView1.Items)
|
|
item.Checked = !item.Checked;
|
|
}
|
|
|
|
private void cbEQManu_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if (bsModel == null) return;
|
|
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;
|
|
}
|
|
|
|
private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
var file = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "sample_purchase.xls");
|
|
if(System.IO.File.Exists(file)==false)
|
|
{
|
|
FCOMMON.Util.MsgE("샘플파일이 없습니다. 개발자 문의 바람");
|
|
return;
|
|
}
|
|
this.textBox1.Text = file;
|
|
FCOMMON.Util.RunExplorer(file);
|
|
}
|
|
}
|
|
}
|