170 lines
7.7 KiB
C#
170 lines
7.7 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 FPJ0000.EBoard
|
|
{
|
|
public partial class fEBoardReport : Form
|
|
{
|
|
public fEBoardReport()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void fEBoardReport_Load(object sender, EventArgs e)
|
|
{
|
|
//기본엑셀파일을 가져온다
|
|
this.Show();
|
|
Application.DoEvents();
|
|
|
|
//파일불러오기
|
|
LoadExcel();
|
|
}
|
|
|
|
void LoadExcel()
|
|
{
|
|
//파일불러오기
|
|
var fi = new System.IO.FileInfo(FCOMMON.Util.CurrentPath + "EBoardReport.xlsx");
|
|
this.fpSpread1.OpenExcel(fi.FullName);
|
|
}
|
|
|
|
private void btRefresh_Click(object sender, EventArgs e)
|
|
{
|
|
//새로고침
|
|
//a2 에 날짜를 표시함.
|
|
var db = new EEEntities();
|
|
var sd = this.dts.Value.ToShortDateString();
|
|
var ed = this.dte.Value.ToShortDateString();
|
|
|
|
var 분류목록 = db.EETGW_JobReport_EBoard.Where(t => string.IsNullOrEmpty(t.분류) == false).OrderBy(t => t.분류).GroupBy(t => t.분류).ToList();
|
|
|
|
var 기간자료 = db.EETGW_JobReport_EBoard.Where(t => t.pdate.CompareTo(sd) >= 0 && t.pdate.CompareTo(ed) <= 0);
|
|
var 담당목록 = db.vGroupUser.Where(t => t.gcode == FCOMMON.info.Login.gcode && t.processs == "전자실" && string.IsNullOrEmpty(t.state) == true).OrderBy(t => t.name).GroupBy(t => t.name);
|
|
|
|
|
|
var row = 1;
|
|
var col = 1;
|
|
var col0 = 1;
|
|
foreach (var item in 분류목록)
|
|
{
|
|
var dr = item.FirstOrDefault();
|
|
var cell = this.fpSpread1.Sheets[0].Cells[row, col + 0];
|
|
cell.Value = dr.분류;
|
|
cell.ColumnSpan = 2;
|
|
cell.BackColor = Color.SkyBlue;
|
|
cell.HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center;
|
|
cell.VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center;
|
|
|
|
cell = this.fpSpread1.Sheets[0].Cells[row + 1, col + 0];
|
|
cell.Value = "건";
|
|
cell.BackColor = Color.Khaki;
|
|
cell.HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center;
|
|
cell.VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center;
|
|
|
|
cell = this.fpSpread1.Sheets[0].Cells[row + 1, col + 1];
|
|
cell.Value = "시간";
|
|
cell.BackColor = Color.Khaki;
|
|
cell.HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center;
|
|
cell.VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center;
|
|
|
|
col += 2;
|
|
col0 += 1;
|
|
}
|
|
|
|
//마지막 열에는 비용절감항목을 추가한다.
|
|
fpSpread1.Sheets[0].Cells[1, col].Value = "비용절감";
|
|
fpSpread1.Sheets[0].Cells[1, col].BackColor = Color.WhiteSmoke;
|
|
fpSpread1.Sheets[0].Cells[1, col].RowSpan = 2;
|
|
fpSpread1.Sheets[0].Cells[1, col].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center;
|
|
fpSpread1.Sheets[0].Cells[1, col].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center;
|
|
|
|
var MaxCol = col0;
|
|
col = 0;
|
|
row = 3;
|
|
foreach (var item in 담당목록)
|
|
{
|
|
//var dr = item.KeY;
|
|
this.fpSpread1.Sheets[0].Cells[row, col].Value = item.Key;
|
|
|
|
//이 담당자의 횟수를 읽어온다
|
|
for (int i = 1; i < MaxCol; i++)
|
|
{
|
|
var 분류명 = fpSpread1.Sheets[0].Cells[1, 1 + (i - 1) * 2].Value.ToString();
|
|
var 분류데이터 = 기간자료.Where(t => t.uid.Contains(item.Key) && t.분류 == 분류명);
|
|
var 건수 = 분류데이터.Count();
|
|
var 시간 = 분류데이터.Sum(t => t.RepairTime);
|
|
this.fpSpread1.Sheets[0].Cells[row, (i - 1) * 2 + 1].Value = 건수;
|
|
this.fpSpread1.Sheets[0].Cells[row, (i - 1) * 2 + 2].Value = 시간;
|
|
this.fpSpread1.Sheets[0].Cells[row, (i - 1) * 2 + 2].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center;
|
|
this.fpSpread1.Sheets[0].Cells[row, (i - 1) * 2 + 2].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center;
|
|
|
|
this.fpSpread1.Sheets[0].Cells[row, (i - 1) * 2 + 1].Column.Width = 50;
|
|
this.fpSpread1.Sheets[0].Cells[row, (i - 1) * 2 + 2].Column.Width = 70;
|
|
}
|
|
|
|
//이 담당자의 수리완료건의 비용절감비용을 가져온다
|
|
var 절감비용 = 기간자료.Where(t => t.uid.Contains(item.Key) && t.분류 == "수리완료" && string.IsNullOrEmpty(t.수리완료일) == false && string.IsNullOrEmpty(t.외주업체) == true).Sum(t => t.CostReduction);
|
|
this.fpSpread1.Sheets[0].Cells[row, (MaxCol) * 2 - 1].Value = 절감비용;
|
|
this.fpSpread1.Sheets[0].Cells[row, (MaxCol) * 2 - 1].BackColor = Color.WhiteSmoke;
|
|
this.fpSpread1.Sheets[0].Cells[row, (MaxCol) * 2 - 1].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center;
|
|
this.fpSpread1.Sheets[0].Cells[row, (MaxCol) * 2 - 1].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center;
|
|
row += 1;
|
|
}
|
|
|
|
this.fpSpread1.Sheets[0].Cells[row, 0].Value = "합계";
|
|
|
|
|
|
for (int i = 1; i < MaxCol; i++)
|
|
{
|
|
var colIdx = (i - 1) * 2;
|
|
var c1 = (char)(65 + colIdx + 1);
|
|
var c2 = (char)(65 + colIdx + 2);
|
|
this.fpSpread1.Sheets[0].Cells[row, colIdx + 1].Formula = $"SUM({c1}4:{c1}" + row.ToString() + ")";
|
|
this.fpSpread1.Sheets[0].Cells[row, colIdx + 2].Formula = $"SUM({c2}4:{c2}" + row.ToString() + ")";
|
|
}
|
|
var c3 = (char)(65 + MaxCol * 2 - 1);
|
|
this.fpSpread1.Sheets[0].Cells[row, (MaxCol) * 2 - 1].Formula = $"SUM({c3}4:{c3}" + row.ToString() + ")";
|
|
this.fpSpread1.Sheets[0].Cells["A1"].Value = "Performance";
|
|
this.fpSpread1.Sheets[0].Cells["A1"].ColumnSpan = MaxCol * 2;
|
|
this.fpSpread1.Sheets[0].Cells["A2"].Value = "성명";
|
|
this.fpSpread1.Sheets[0].Cells["A2"].RowSpan = 2;
|
|
|
|
this.fpSpread1.Sheets[0].Cells[$"A2:A{row}"].BackColor = Color.WhiteSmoke;
|
|
|
|
//합계필드 색상변경
|
|
this.fpSpread1.Sheets[0].Cells[$"A{row + 1}:{c3}{row + 1}"].BackColor = Color.WhiteSmoke;
|
|
//this.fpSpread1.Sheets[0].Cells[$"A{row + 1}:{c3}{row + 1}"].Border =
|
|
// new FarPoint.Win.ComplexBorder(
|
|
// new FarPoint.Win.ComplexBorderSide(FarPoint.Win.ComplexBorderSideStyle.MediumLine));
|
|
|
|
|
|
//모든열을 중앙정렬한다
|
|
|
|
|
|
this.fpSpread1.Invalidate();
|
|
}
|
|
|
|
private void btSave_Click(object sender, EventArgs e)
|
|
{
|
|
//파일저장
|
|
var sd = new SaveFileDialog();
|
|
sd.Filter = "excel|*.xls";
|
|
if (sd.ShowDialog() == DialogResult.OK)
|
|
{
|
|
this.fpSpread1.SaveExcel(sd.FileName);
|
|
}
|
|
}
|
|
|
|
private void panel1_MouseDoubleClick(object sender, MouseEventArgs e)
|
|
{
|
|
LoadExcel();
|
|
}
|
|
}
|
|
}
|