..업로드 기능 추가
This commit is contained in:
		
							
								
								
									
										307
									
								
								SubProject/FEQ0000/Purchase/fPurchase_ImportO.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										307
									
								
								SubProject/FEQ0000/Purchase/fPurchase_ImportO.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,307 @@ | ||||
| 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_ImportO : Form | ||||
|     { | ||||
|         DataTable dt = new dsPurchase.PurchaseDataTable(); | ||||
|         DataTable dtExcel = new DataTable(); | ||||
|         public fPurchase_ImportO() | ||||
|         { | ||||
|             InitializeComponent(); | ||||
|             this.FormClosed += __Closed; | ||||
|         } | ||||
|  | ||||
|         private void __Load(object sender, EventArgs e) | ||||
|         { | ||||
|             this.sd.Value = DateTime.Now.AddMonths(-1); | ||||
|             this.ed.Value = DateTime.Now; | ||||
|         } | ||||
|  | ||||
|         void __Closed(object sender, FormClosedEventArgs e) | ||||
|         { | ||||
|            | ||||
|         } | ||||
|  | ||||
|         private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) | ||||
|         { | ||||
|             OpenFileDialog od = new OpenFileDialog(); | ||||
|             od.Filter = "excel|*.xlsx|all files|*.*"; | ||||
|             od.InitialDirectory = FCOMMON.Util.CurrentPath + "model"; | ||||
|             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) | ||||
|         { | ||||
|               int ColumnNameNo = (int)numericUpDown2.Value; | ||||
|             if(textBox1.Text.isEmpty()) | ||||
|             { | ||||
|                 FCOMMON.Util.MsgE("파일을 선택하세요"); | ||||
|                 textBox1.Focus(); | ||||
|                 return; | ||||
|             } | ||||
|             if(!System.IO.File.Exists(textBox1.Text)) | ||||
|             { | ||||
|                 FCOMMON.Util.MsgE("입력하신 파일이 존재하지 않습니다."); | ||||
|                 textBox1.Focus(); | ||||
|                 textBox1.SelectAll(); | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             dtExcel.Columns.Clear(); | ||||
|             dtExcel.Rows.Clear(); | ||||
|             dtExcel.AcceptChanges(); | ||||
|              | ||||
|             libxl.Book book;// = new libxl.BinBook(); | ||||
|             book = new libxl.XmlBook(); | ||||
|             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); | ||||
|             var MaxRow = sheet.lastRow();             | ||||
|             var MinRow = sheet.firstRow(); | ||||
|  | ||||
|             MaxRow = (int)Math.Min(MaxRow, nudE.Value-1); | ||||
|             MinRow = (int)Math.Max(MinRow, nudS.Value-1); | ||||
|             if(MinRow <= (ColumnNameNo-1)) | ||||
|             { | ||||
|                 FCOMMON.Util.MsgI("시작줄을 제목줄 보다 커야 합니다. 자동으로 +1 증가합니다."); | ||||
|                 MinRow = ColumnNameNo ; | ||||
|             } | ||||
|  | ||||
|  | ||||
|             var MaxCol = sheet.lastCol(); | ||||
|             var MinCol = sheet.firstCol(); | ||||
|  | ||||
|             MaxCol = (int)Math.Min(MaxCol, nudCE.Value - 1); | ||||
|             MinCol = (int)Math.Max(MinCol, nudCS.Value - 1); | ||||
|  | ||||
|             //제목줄을 처리한다.  181029 | ||||
|             List<string> cols = new List<string>(); | ||||
|  | ||||
|             string sDate = sd.Value.ToShortDateString(); | ||||
|             string eDate = ed.Value.ToShortDateString(); | ||||
|            | ||||
|             for (int c = MinCol; c <= MaxCol; c++) | ||||
|             { | ||||
|                 var strVallue = sheet.readStr(ColumnNameNo-1, c); | ||||
|                 if (strVallue.isEmpty() ) | ||||
|                 { | ||||
|                     if (c == MinCol) | ||||
|                     { | ||||
|                         //첫줄 첫행이 빈값이면 처리하지 않는다. | ||||
|                         FCOMMON.Util.MsgE("열 제목에 빈값이 있어 처리되지 못합니다."); | ||||
|                         return; | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         //빈값이 나왓으므로 열 최대값을 변경해준다. | ||||
|                         if(c < MaxCol) | ||||
|                         { | ||||
|                             FCOMMON.Util.MsgI("빈값으로 인해 최대 열 번호를 " + c.ToString() + "로 변경합니다"); | ||||
|                             MaxCol = c; | ||||
|                             break; | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 cols.Add(strVallue); | ||||
|                 this.dtExcel.Columns.Add(strVallue); | ||||
|             } | ||||
|  | ||||
|  | ||||
|             try{ | ||||
|                 for (int r = MinRow; r <= MaxRow; r++) | ||||
|                 { | ||||
|                     DataRow dr =  dtExcel.NewRow(); | ||||
|  | ||||
|                     Boolean nullColumn = false; | ||||
|                     for (int c = MinCol; c <= MaxCol; c++) | ||||
|                     { | ||||
|                         if (sheet.isDate(r, c)) | ||||
|                         { | ||||
|                             var datevalue = sheet.readNum(r, c); | ||||
|                             int y, m, d; | ||||
|                             y = m = d = 0; | ||||
|                             book.dateUnpack(datevalue, ref y, ref m, ref d); | ||||
|                             if (y >= 2000) | ||||
|                                 dr[cols[c]] = string.Format("{0:0000}-{1:00}-{2:00}", y, m, d); | ||||
|                             else | ||||
|                                 dr[cols[c]] = string.Empty; | ||||
|                              | ||||
|                             //일자가 만약 넘어서면 패스한다. | ||||
|                             if(cols[c]=="일자" ) | ||||
|                             { | ||||
|                                 string value = dr[cols[c]].ToString(); | ||||
|                                 if(value == "") | ||||
|                                 { | ||||
|                                     nullColumn = true;  //날짜가 없다면 패스 | ||||
|                                     break; | ||||
|                                 } else if(value.CompareTo(sDate) < 0) | ||||
|                                 { | ||||
|                                     nullColumn = true;  //과거데이터라서 패스 | ||||
|                                     break; | ||||
|                                 } else if(value.CompareTo(eDate) > 0) | ||||
|                                 { | ||||
|                                     nullColumn = true; //미래데이터 패스 | ||||
|                                     break; | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             var dateStrin = sheet.readStr(r, c); | ||||
|  | ||||
|                             var strVallue = sheet.readStr(r, c); | ||||
|                             if (strVallue.isEmpty() && c == MinCol) | ||||
|                             { | ||||
|                                 //첫줄 첫행이 빈값이면 처리하지 않는다. | ||||
|                                 nullColumn = true; | ||||
|                                 break; | ||||
|                             } | ||||
|                             if (!cols[c].isEmpty()) | ||||
|                                 dr[cols[c]] = strVallue; | ||||
|                         } | ||||
|                     } | ||||
|                     if (nullColumn) continue; //줄처리를 못한 경우 넘어감 | ||||
|                     if (dr != null) | ||||
|                     { | ||||
|                         dtExcel.Rows.Add(dr); | ||||
|                     } | ||||
|                 } | ||||
|                 dtExcel.AcceptChanges(); | ||||
|             } | ||||
|            catch(Exception ex) | ||||
|             { | ||||
|                 FCOMMON.Util.MsgE("불러오는 중 오류 발생\n" + ex.Message); | ||||
|             } | ||||
|             // | ||||
|             book = null; | ||||
|  | ||||
|             this.bs.DataSource = dtExcel; | ||||
|             this.dataGridView1.DataSource = dtExcel; | ||||
|             this.bn.BindingSource = this.bs; | ||||
|  | ||||
|             if(this.bs.Count < 1) | ||||
|             { | ||||
|                 FCOMMON.Util.MsgE("입력된 자료가 없습니다.\n\n지정된 엑셀의 1번째 칸에 값이 없다면 입력되지 않습니다."); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|  | ||||
|         private void button3_Click(object sender, EventArgs e) | ||||
|         { | ||||
|             if(dtExcel == null || dtExcel.Rows.Count < 1) | ||||
|             { | ||||
|                 FCOMMON.Util.MsgE("등록 가능한 자료가 없습니다."); | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             System.Text.StringBuilder sb = new StringBuilder(); | ||||
|             sb.AppendLine("다음 자료를 추가하시겠습니까?"); | ||||
|             sb.AppendLine(); | ||||
|             sb.AppendLine("'저장 완료' 메세지가 나올때 까지 기다려 주세요."); | ||||
|             sb.AppendLine(); | ||||
|             sb.AppendLine("실행 하려면 '예' 를 누르세요"); | ||||
|             var dlg = FCOMMON.Util.MsgQ(sb.ToString()); | ||||
|             if (dlg != System.Windows.Forms.DialogResult.Yes) return; | ||||
|              | ||||
|             //라인코드를 읽어서 값을 기록해준다. | ||||
|             var taLine = new  dsEQTableAdapters.LineCodeTableAdapter(); | ||||
|             var lineTd = taLine.GetData(); | ||||
|             lineTd.AcceptChanges(); | ||||
|  | ||||
|             dt.Clear(); | ||||
|             dt.AcceptChanges(); | ||||
|  | ||||
|             this.progressBar1.Value = 0; | ||||
|             this.progressBar1.Maximum = dtExcel.Rows.Count; | ||||
|  | ||||
|             //12,13 | ||||
|             foreach (DataRow dr in dtExcel.Rows) | ||||
|             { | ||||
|                 this.progressBar1.Value += 1; | ||||
|  | ||||
|                 //데이터추가 | ||||
|                 var newdr = dt.NewRow(); | ||||
|                 if (dr[1] == DBNull.Value) continue;   //nullerror | ||||
|  | ||||
|                 newdr["pdate"] = "2019-01-01";// dr[0].ToString(); | ||||
|                 newdr["orderno"] = dr[1].ToString(); | ||||
|                 newdr["sid"] = dr[2].ToString().Replace(" ","");    //181116 - 빈공백제거 | ||||
|                  | ||||
|                 //이름 변경함 | ||||
|                 if (dr[3].ToString() != "") dr[3] = dr[3].ToString().Replace("*", "x"); | ||||
|                 if (dr[4].ToString() != "") dr[4] = dr[4].ToString().Replace("*", "x"); | ||||
|                  | ||||
|                 newdr["pumname"] = dr[3].ToString(); | ||||
|                 newdr["pumscale"] = dr[4].ToString(); | ||||
|  | ||||
|                 newdr["pumunit"] = dr[7].ToString(); | ||||
|  | ||||
|                 if (dr[6].ToString() != "") | ||||
|                     newdr["pumqty"] = int.Parse(dr[6].ToString()); | ||||
|  | ||||
|                 if (dr[5].ToString() != "") | ||||
|                     newdr["pumprice"] = decimal.Parse(dr[5].ToString()); | ||||
|  | ||||
|                 if (dr[8].ToString() != "") | ||||
|                     newdr["pumamt"] = decimal.Parse(dr[8].ToString()); | ||||
|  | ||||
|                 newdr["supply"] = dr[10].ToString(); | ||||
|                 newdr["state"] = "PO";// dr[14 + 6].ToString(); | ||||
|                 newdr["import"] = true; | ||||
|                 newdr["wuid"] = "JBS"; | ||||
|                 newdr["wdate"] = "2019-04-16 00:00:00"; | ||||
|  | ||||
|                dt.Rows.Add(newdr); | ||||
|             } | ||||
|  | ||||
|             var taE = new dsPurchaseTableAdapters.PurchaseTableAdapter(); | ||||
|             if(checkBox1.Checked) taE.DeleteImport(sd.Value.ToShortDateString(),ed.Value.ToShortDateString()); | ||||
|             taE.Update((dsPurchase.PurchaseDataTable)dt); | ||||
|  | ||||
|             dt.AcceptChanges(); | ||||
|             FCOMMON.Util.MsgI("Save OK"); | ||||
|         } | ||||
|  | ||||
|         private void panel1_Paint(object sender, PaintEventArgs 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() + "건의 자료가 업데이트 되었습니다."); | ||||
|              | ||||
|  | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 chikyun.kim
					chikyun.kim