diff --git a/Project/Properties/AssemblyInfo.cs b/Project/Properties/AssemblyInfo.cs index 064ae05..dcc9eee 100644 --- a/Project/Properties/AssemblyInfo.cs +++ b/Project/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호가 자동으로 // 지정되도록 할 수 있습니다. // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("22.02.01.1200")] -[assembly: AssemblyFileVersion("22.02.01.1200")] +[assembly: AssemblyVersion("22.02.01.1730")] +[assembly: AssemblyFileVersion("22.02.01.1730")] diff --git a/SubProject/FCOMMON/DataBaseManager.cs b/SubProject/FCOMMON/DataBaseManager.cs index df2320b..bcc0e45 100644 --- a/SubProject/FCOMMON/DataBaseManager.cs +++ b/SubProject/FCOMMON/DataBaseManager.cs @@ -435,7 +435,7 @@ namespace FCOMMON var retval = new sItemInfo(); retval.idx = -1; - string sql = "select [id],[name],([name] +'(' +[id] +')') as dispName,[dept],[email],[level],[tel] " + + string sql = "select [id],[name],([name] +'(' +[id] +')') as dispName,[dept],[email],[level],[tel],isnull(processs,'') as process " + " from vGroupUser " + " where gcode='" + FCOMMON.info.Login.gcode + "' and [id] <> 'dev' and isnull(outdate,'') = '' and useUserState = 1 order by [name]"; var cmd = new SqlCommand(sql, cn); diff --git a/SubProject/FPJ0000/JobReport_/fJobChartMenu.cs b/SubProject/FPJ0000/JobReport_/fJobChartMenu.cs index e55cf81..d406bd2 100644 --- a/SubProject/FPJ0000/JobReport_/fJobChartMenu.cs +++ b/SubProject/FPJ0000/JobReport_/fJobChartMenu.cs @@ -40,6 +40,9 @@ namespace FPJ0000.JobReport_ UpdateUserList(); //엑셀파일불러오기 + this.Show(); + Application.DoEvents(); + var file = FCOMMON.Util.CurrentPath + "ReportProjectSummary.xlsx"; this.fpSpread1.OpenExcel(file); if (this.fpSpread1.Sheets.Count > 1) this.fpSpread1.ActiveSheetIndex = 0; @@ -49,38 +52,53 @@ namespace FPJ0000.JobReport_ } void UpdateUserList() { - var db = new EEEntities(); + // var db = new EEEntities(); cmbUser.Items.Clear(); cmbUser.Items.Add("--전체--"); + var userList = FCOMMON.DBM.getUserTable(1); + + //일반사용자 목록 가져온다 IQueryable> userlist; - if (tbProcess.SelectedIndex <= 0) + //공정구분없이 전체사용자를 가져온다 + foreach (System.Data.DataRow item in userList.Rows) { - //공정구분없이 전체사용자를 가져온다 - userlist = db.vJobReportForUser.Where(t => t.gcode == FCOMMON.info.Login.gcode).OrderBy(t => t.name).GroupBy(t => t.name); - } - else - { - userlist = db.vJobReportForUser.Where(t => t.gcode == FCOMMON.info.Login.gcode && t.userProcess == tbProcess.Text).OrderBy(t => t.name).GroupBy(t => t.name); + var id = item.Field("id"); + var dispname = item.Field("dispname"); + var process = item.Field("process"); + if (tbProcess.SelectedIndex > 0 && tbProcess.Text.Equals(process) == false) continue; + cmbUser.Items.Add(dispname); } - //if (tbProcess.SelectedIndex != 0) userlist = userlist.Where(t => t.processs == tbProcess.Text); //해당 공정의 인원만 처리한다 + //if (tbProcess.SelectedIndex <= 0) + //{ + + //} + //else + //{ + // userlist = db.vJobReportForUser.Where(t => t.gcode == FCOMMON.info.Login.gcode && t.userProcess == tbProcess.Text).OrderBy(t => t.name).GroupBy(t => t.name); + //} + + ////if (tbProcess.SelectedIndex != 0) userlist = userlist.Where(t => t.processs == tbProcess.Text); //해당 공정의 인원만 처리한다 + - foreach (var item in userlist) - { - var dr = item.First(); - cmbUser.Items.Add(String.Format("[{0}] {1}", dr.id, dr.name)); - } if (tbProcess.SelectedIndex > 0) - cmbUser.Text = string.Format("[{0}] {1}", FCOMMON.info.Login.no, FCOMMON.info.Login.nameK); + cmbUser.Text = string.Format("{1}({0})", FCOMMON.info.Login.no, FCOMMON.info.Login.nameK); if (cmbUser.SelectedIndex < 0) cmbUser.SelectedIndex = 0; //기본전체로 선택해준다. } + string getUserID() + { + var si = cmbUser.Text.LastIndexOf("("); + var ei = cmbUser.Text.LastIndexOf(")"); + var retval = cmbUser.Text.Substring(si + 1, ei - si - 1); + return retval; + } void refrehData() { var db = new EEEntities(); @@ -120,7 +138,7 @@ namespace FPJ0000.JobReport_ if (cmbUser.SelectedIndex > 0) { //사용자번호 - var UserNo = cmbUser.Text.Substring(1, cmbUser.Text.IndexOf(']') - 1); + var UserNo = getUserID();// cmbUser.Text.Substring(1, cmbUser.Text.IndexOf(']') - 1); baseData = db.vJobReportForUser.Where(t => t.gcode == FCOMMON.info.Login.gcode && t.id == UserNo).OrderBy(t => t.name).ToList(); } else if (tbProcess.SelectedIndex > 0) @@ -144,7 +162,7 @@ namespace FPJ0000.JobReport_ if (cmbUser.SelectedIndex > 0) { //사용자번호 - var UserNo = cmbUser.Text.Substring(1, cmbUser.Text.IndexOf(']') - 1); + var UserNo = getUserID();// cmbUser.Text.Substring(1, cmbUser.Text.IndexOf(']') - 1); baseData = db.vJobReportForUser .Where(t => t.gcode == FCOMMON.info.Login.gcode && t.id == UserNo && t.pdate.CompareTo(vSD) >= 0 && t.pdate.CompareTo(vED) <= 0) .OrderBy(t => t.name) @@ -212,13 +230,18 @@ namespace FPJ0000.JobReport_ { var dr = item.FirstOrDefault(); this.fpSpread1.Sheets[0].Cells[6, col++].Value = dr.process; - if (col == 11) break; //목록개수를 넘었으니 더이상 진행하지 못한다 이것들은 모두 ETC에 넣는다 + if (col == 82) break; //목록개수를 넘었으니 더이상 진행하지 못한다 이것들은 모두 ETC에 넣는다 //col += 1; } //나머지 열을 * 로 채운다 - for (int i = col; i < 11; i++) + for (int i = col; i < 82; i++) + { this.fpSpread1.Sheets[0].Cells[6, i].Value = "*"; + this.fpSpread1.Sheets[0].Columns[i].Visible = (i < 8);//.Cells[6, i].Value = "*"; + } + + System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("ko-KR", false); FarPoint.Win.Spread.CellType.NumberCellType numberCellType1 = new FarPoint.Win.Spread.CellType.NumberCellType(); @@ -227,9 +250,9 @@ namespace FPJ0000.JobReport_ //프로세스목록을 먼저 기록한다 - row = 7; + row = 7; var orProcess = baseData.OrderBy(t => t.requestpart).GroupBy(t => t.requestpart); - this.fpSpread1.Sheets[0].RowCount = 7+ orProcess.Count() + 1; + this.fpSpread1.Sheets[0].RowCount = 7 + orProcess.Count() + 1; foreach (var item in orProcess) { @@ -240,7 +263,7 @@ namespace FPJ0000.JobReport_ double sumOt = 0.0; //double holytime = 0.0; int coldata = 2; - for (int i = 2; i < 11; i++) + for (int i = 2; i < 82; i++) { var colName = fpSpread1.Sheets[0].Cells[6, i].Value.ToString(); @@ -267,39 +290,56 @@ namespace FPJ0000.JobReport_ //ETC영역계산 { //전체합산데이터와, 2~10까지의 데이터가 일치하지 않으면 그것이 ETC이다 - var etchr = item.Sum(t => t.hrs); - var etcot = item.Sum(t => t.ot); + var etchr = item.Where(t => t.hrs != null).Sum(t => (float)t.hrs); + var etcot = item.Where(t => t.ot != null).Sum(t => (float)t.ot); //현재데이터의 hrs의 합 - var subtotal = 0.0; - for(int i = 2; i <11;i++) + var subtotal = 0f; + for (int i = 2; i < 82; i++) { var ivalue = fpSpread1.Sheets[0].Cells[row, i].Value; - if (ivalue != null) subtotal += (double)ivalue; + if (ivalue != null) + { + subtotal = subtotal + float.Parse(ivalue.ToString()); + } } var etcval = (etchr + etcot) - subtotal; - fpSpread1.Sheets[0].Cells[row, 11].Value = etcval; + if (etcval != 0f) + Console.WriteLine("sdf"); + fpSpread1.Sheets[0].Cells[row, 82].Value = etcval; } - fpSpread1.Sheets[0].Cells[row, 12].CellType = numberCellType1; - fpSpread1.Sheets[0].Cells[row, 12].ParseFormatString = "N1"; - fpSpread1.Sheets[0].Cells[row, 12].Formula = string.Format("SUM(C{0}:G{0})+L{0}", row + 1); - + fpSpread1.Sheets[0].Cells[row, 83].CellType = numberCellType1; + fpSpread1.Sheets[0].Cells[row, 83].ParseFormatString = "N1"; + fpSpread1.Sheets[0].Cells[row, 83].Formula = string.Format("SUM(C{0}:CD{0})+CE{0}", row + 1); + fpSpread1.Sheets[0].Cells[row, 83].BackColor = Color.Gold; + fpSpread1.Sheets[0].Cells[row, 83].Border = new ComplexBorder(left, top, right, bottom); + fpSpread1.Sheets[0].Cells[row, 83].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center; + fpSpread1.Sheets[0].Cells[row, 83].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center; + //H8 /$I$4 - if (sumOt == 0.0) fpSpread1.Sheets[0].Cells[row, 13].Value = null; //OT합계 - else fpSpread1.Sheets[0].Cells[row, 13].Value = sumOt; //OT합계 + if (sumOt == 0.0) fpSpread1.Sheets[0].Cells[row, 84].Value = null; //OT합계 + else fpSpread1.Sheets[0].Cells[row, 84].Value = sumOt; //OT합계 // process 의 휴가시간을 다시 계산한다. var 휴가데이터 = baseData.Where(t => t.requestpart == RequestPart && t.svalue == "휴가"); if (휴가데이터 == null || 휴가데이터.Count() < 1) { - fpSpread1.Sheets[0].Cells[row, 14].Value = null;// 0.0; //휴가시간 + fpSpread1.Sheets[0].Cells[row, 85].Value = null;// 0.0; //휴가시간 } - else fpSpread1.Sheets[0].Cells[row, 14].Value = 휴가데이터.Sum(t => t.hrs); //휴가시간 + else fpSpread1.Sheets[0].Cells[row, 85].Value = 휴가데이터.Sum(t => t.hrs); //휴가시간 - for (int i = 1; i <= 14; i++) + fpSpread1.Sheets[0].Cells[row, 84].Border = new ComplexBorder(left, top, right, bottom); + fpSpread1.Sheets[0].Cells[row, 84].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center; + fpSpread1.Sheets[0].Cells[row, 84].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center; + + fpSpread1.Sheets[0].Cells[row, 85].Border = new ComplexBorder(left, top, right, bottom); + fpSpread1.Sheets[0].Cells[row, 85].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center; + fpSpread1.Sheets[0].Cells[row, 85].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center; + + for (int i = 1; i <= 82; i++) { - if(i == 12) fpSpread1.Sheets[0].Cells[row, i].BackColor = Color.LightGray; + if (i == 82) fpSpread1.Sheets[0].Cells[row, i].BackColor = Color.LightGray; else fpSpread1.Sheets[0].Cells[row, i].BackColor = Color.White; fpSpread1.Sheets[0].Cells[row, i].Border = new ComplexBorder(left, top, right, bottom); fpSpread1.Sheets[0].Cells[row, i].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center; @@ -308,6 +348,7 @@ namespace FPJ0000.JobReport_ row += 1; + Application.DoEvents(); } //합계데이터 @@ -316,11 +357,11 @@ namespace FPJ0000.JobReport_ fpSpread1.Sheets[0].Cells[row, 1].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center; fpSpread1.Sheets[0].Cells[row, 1].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center; fpSpread1.Sheets[0].Cells[row, 1].Border = new ComplexBorder(left, top, right, bottom); - for (int i = 2; i <= 14; i++) + for (int i = 2; i <= 82; i++) { char basec = 'C'; char newc = (char)(basec + (i - 2)); - fpSpread1.Sheets[0].Cells[row, i].Formula = "SUM(" + newc.ToString() + "8:" + newc.ToString() + row.ToString() + ")"; + fpSpread1.Sheets[0].Cells[row, i].Formula = "SUM(" + ColumnAdress(i + 1) + "8:" + ColumnAdress(i + 1) + row.ToString() + ")"; fpSpread1.Sheets[0].Cells[row, i].BackColor = Color.LightGray; fpSpread1.Sheets[0].Cells[row, i].CellType = numberCellType1; @@ -333,9 +374,43 @@ namespace FPJ0000.JobReport_ fpSpread1.Sheets[0].Cells[row, i].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center; } + fpSpread1.Sheets[0].Cells[row, 83].CellType = numberCellType1; + fpSpread1.Sheets[0].Cells[row, 83].ParseFormatString = "N1"; + fpSpread1.Sheets[0].Cells[row, 83].Formula = string.Format("SUM(C{0}:CD{0})+CE{0}", row + 1); + fpSpread1.Sheets[0].Cells[row, 83].BackColor = Color.Gold; + + + fpSpread1.Sheets[0].Cells[row, 83].Border = new ComplexBorder(left, top, right, bottom); + fpSpread1.Sheets[0].Cells[row, 83].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center; + fpSpread1.Sheets[0].Cells[row, 83].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center; + + + + fpSpread1.Sheets[0].Cells[row, 84].Border = new ComplexBorder(left, top, right, bottom); + fpSpread1.Sheets[0].Cells[row, 84].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center; + fpSpread1.Sheets[0].Cells[row, 84].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center; + + fpSpread1.Sheets[0].Cells[row, 85].Border = new ComplexBorder(left, top, right, bottom); + fpSpread1.Sheets[0].Cells[row, 85].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center; + fpSpread1.Sheets[0].Cells[row, 85].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center; + + this.fpSpread1.Sheets[0].RowCount = row + 1; } + public string ColumnAdress(int col) + { + if (col <= 26) + { + return Convert.ToChar(col + 64).ToString(); + } + int div = col / 26; + int mod = col % 26; + if (mod == 0) { mod = 26; div--; } + return ColumnAdress(div) + ColumnAdress(mod); + } + + private void tbProcess_SelectedIndexChanged(object sender, EventArgs e) { if (binit == false) return; diff --git a/SubProject/FPJ0000/ReportProjectSummary.xlsx b/SubProject/FPJ0000/ReportProjectSummary.xlsx index d60b89d..3953a9d 100644 Binary files a/SubProject/FPJ0000/ReportProjectSummary.xlsx and b/SubProject/FPJ0000/ReportProjectSummary.xlsx differ