Files
Groupware/SubProject/FPJ0000/EBoard/fEBoardReport.cs
2021-02-08 15:57:07 +09:00

403 lines
18 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();
this.fpSpread1.ActiveSheet.RowCount = 0;
}
string Loadexcel = string.Empty;
void LoadExcel()
{
//파일불러오기
if (radioButton1.Checked)
{
var fi = new System.IO.FileInfo(FCOMMON.Util.CurrentPath + "EBoardReport.xlsx");
if (this.Loadexcel != fi.FullName)
{
this.fpSpread1.OpenExcel(fi.FullName);
this.Loadexcel = fi.FullName;
}
}
else
{
var fi = new System.IO.FileInfo(FCOMMON.Util.CurrentPath + "EBoardReportCapa.xlsx");
if (this.Loadexcel != fi.FullName)
{
this.fpSpread1.OpenExcel(fi.FullName);
this.Loadexcel = fi.FullName;
}
}
}
private void btRefresh_Click(object sender, EventArgs e)
{
RefreshData();
}
void RefreshData()
{
LoadExcel();
if (radioButton1.Checked) Refresh1();
else Refresh2();
this.fpSpread1.Invalidate();
}
void Refresh1()
{
//새로고침
//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));
//차트데이터
var chart1 = this.fpSpread1.ActiveSheet.Charts[0];
chart1.Model.LabelAreas[0].Text = "Technical Support Q'ty & Cost Save(Kwon)"; //상단차트제목
var ser1 = chart1.Model.PlotAreas[0].Series[0] as FarPoint.Win.Chart.ClusteredBarSeries;
var ser1_df = ser1.Series[0].Values.DataSource as FarPoint.Win.Spread.Chart.SeriesDataField;
var ser1_cn = ser1.Series[0].CategoryNames.DataSource as FarPoint.Win.Spread.Chart.SeriesDataField;
ser1_df.Formula = $"Performance!$R$4:$R${row}";
ser1_cn.Formula = $"Performance!$A$4:$A${row}";
var ser2 = chart1.Model.PlotAreas[0].Series[1] as FarPoint.Win.Chart.LineSeries;
var ser2_df = ser2.Values.DataSource as FarPoint.Win.Spread.Chart.SeriesDataField;
var ser2_cn = ser2.CategoryNames.DataSource as FarPoint.Win.Spread.Chart.SeriesDataField;
ser2_df.Formula = $"Performance!$D$4:$D${row}";
ser2_cn.Formula = $"Performance!$A$4:$A${row}";
var chart2 = this.fpSpread1.ActiveSheet.Charts[1]; //qty
var ser21 = chart2.Model.PlotAreas[0].Series[0] as FarPoint.Win.Chart.PieSeries;
var ser21_df = ser21.Values.DataSource as FarPoint.Win.Spread.Chart.SeriesDataField;
var ser21_cn = ser21.CategoryNames.DataSource as FarPoint.Win.Spread.Chart.SeriesDataField;
ser21_df.Formula = $"Performance!$D$4:$D${row}";
ser21_cn.Formula = $"Performance!$A$4:$A${row}";
var chart3 = this.fpSpread1.ActiveSheet.Charts[2]; //cost
var ser31 = chart3.Model.PlotAreas[0].Series[0] as FarPoint.Win.Chart.PieSeries;
var ser31_df = ser31.Values.DataSource as FarPoint.Win.Spread.Chart.SeriesDataField;
var ser31_cn = ser31.CategoryNames.DataSource as FarPoint.Win.Spread.Chart.SeriesDataField;
ser31_df.Formula = $"Performance!$R$4:$R${row}";
ser31_cn.Formula = $"Performance!$A$4:$A${row}";
}
void Refresh2()
{
//Process / Equipment / BordName 으로 그룹핑
//a2 에 날짜를 표시함.
this.progressBar2.Value = 0;
var db = new EEEntities();
var sd = this.dts.Value.ToShortDateString();
var ed = this.dte.Value.ToShortDateString();
var fi = new System.IO.FileInfo(FCOMMON.Util.CurrentPath + "EBoardReportCapa.xlsx");
this.fpSpread1.OpenExcel(fi.FullName);
this.Loadexcel = fi.FullName;
var = db.EETGW_JobReport_EBoard.Where(t => t.gcode == FCOMMON.info.Login.gcode && t.pdate.CompareTo(sd) >= 0 && t.pdate.CompareTo(ed) <= 0);
var Grp_process = .GroupBy(t => t.Process);
this.fpSpread1.Sheets[0].ColumnCount = 5;
var row = 3;
this.progressBar2.Maximum = Grp_process.Count();
foreach (var item in Grp_process)
{
this.progressBar2.Value += 1;
//포맷초기화
//var rangec = this.fpSpread1.Sheets[0].Cells[$"A{row}:D{row}"];
//rangec.BackColor = Color.White;
//rangec.RowSpan = 1;
//rangec.ColumnSpan = 1;
//rangec.HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center;
//rangec.VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center;
var dr = item.FirstOrDefault();
var cell = this.fpSpread1.Sheets[0].Cells[$"A{row}"];
cell.Value = dr.Process;
//cell.BackColor = Color.Lime;
var row_grp = row;
//이것아래의 모델그룹을 찾는다.
var grp_model = item.GroupBy(t => t.Model);
var cntg1 = 0;
foreach (var itemModel in grp_model)
{
var drModel = itemModel.FirstOrDefault();
var cellModel = this.fpSpread1.Sheets[0].Cells[$"B{row}"];
cellModel.Value = drModel.Model;
cellModel.BackColor = Color.White;
var row_mod = row;
if (cntg1 > 0)
{
this.fpSpread1.Sheets[0].Cells[$"A{row}"].Value = string.Empty;
}
//이것아래의 보드를 찾는다.
var grp_brd = itemModel.GroupBy(t => t.BoardName);
var cntg2 = 0;
foreach (var itemBrd in grp_brd)
{
var drBrd = itemBrd.FirstOrDefault();
var cellBrd = this.fpSpread1.Sheets[0].Cells[$"C{row}"];
cellBrd.Value = drBrd.BoardName;
cellBrd.BackColor = Color.White;
if (cntg2 > 0)
{
this.fpSpread1.Sheets[0].Cells[$"A{row}"].Value = string.Empty;
this.fpSpread1.Sheets[0].Cells[$"B{row}"].Value = string.Empty;
}
//합계수량
var sumQty = itemBrd.Sum(t => t.QTY);
var sumAmt = itemBrd.Sum(t => t.CostReduction);
var cellQty = this.fpSpread1.Sheets[0].Cells[$"D{row}"];
var cellAmt = this.fpSpread1.Sheets[0].Cells[$"E{row}"];
cellQty.Value = sumQty;
cellAmt.Value = sumAmt;
cntg2 += 1;
cntg1 += 1;
if (grp_brd.Count() > 1)
row += 1;
}
//소계를 추가한다.
if (cntg2 > 1)
{
this.fpSpread1.Sheets[0].Cells[$"A{row}"].Value = string.Empty;
this.fpSpread1.Sheets[0].Cells[$"B{row}"].Value = string.Empty;
this.fpSpread1.Sheets[0].Cells[$"C{row}"].Value = $"({drModel.Model}) Sub Total";
this.fpSpread1.Sheets[0].Cells[$"C{row}"].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Left;
this.fpSpread1.Sheets[0].Cells[$"D{row}"].Value = itemModel.Sum(t => t.QTY);
this.fpSpread1.Sheets[0].Cells[$"E{row}"].Value = itemModel.Sum(t => t.CostReduction);
this.fpSpread1.Sheets[0].Cells[$"C{row}:E{row}"].BackColor = Color.FromArgb(200,200,200);
this.fpSpread1.Sheets[0].Cells[$"B{row_mod}"].RowSpan = row - row_mod + 1;
}
//cntg1 += cntg2;
if ((grp_model.Count() + grp_brd.Count()) > 2)
row += 1;
}
if (cntg1 > 1)
{
this.fpSpread1.Sheets[0].Cells[$"A{row}"].Value = string.Empty;
this.fpSpread1.Sheets[0].Cells[$"B{row}"].Value = $"({dr.Process}) Sub Total";
this.fpSpread1.Sheets[0].Cells[$"B{row}"].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Left;
this.fpSpread1.Sheets[0].Cells[$"B{row}"].ColumnSpan = 2;
//this.fpSpread1.Sheets[0].Cells[$"C{row}"].Value = string.Empty;// item.Count();
this.fpSpread1.Sheets[0].Cells[$"D{row}"].Value = item.Sum(t => t.QTY);
this.fpSpread1.Sheets[0].Cells[$"E{row}"].Value = item.Sum(t => t.CostReduction);
this.fpSpread1.Sheets[0].Cells[$"B{row}:E{row}"].BackColor = Color.FromArgb(150, 150, 150);
this.fpSpread1.Sheets[0].Cells[$"A{row_grp}"].RowSpan = row-row_grp+1 ;
}
row += 1;
}
this.fpSpread1.Sheets[0].Cells[$"A{row}"].Value = "Total";
this.fpSpread1.Sheets[0].Cells[$"B{row}"].Value = string.Empty;// $"({dr.Process})-{cntg1}";
this.fpSpread1.Sheets[0].Cells[$"C{row}"].Value = string.Empty;// item.Count();
this.fpSpread1.Sheets[0].Cells[$"D{row}"].Value = .Sum(t => t.QTY);
this.fpSpread1.Sheets[0].Cells[$"E{row}"].Value = .Sum(t => t.CostReduction);
this.fpSpread1.Sheets[0].Cells[$"A{row}:E{row}"].BackColor = Color.SkyBlue;
this.fpSpread1.Sheets[0].RowCount = row;
this.progressBar2.Value = this.progressBar2.Maximum;
}
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();
}
private void button3_Click(object sender, EventArgs e)
{
var bt = sender as Button;
if (bt.Text == "년")
{
dts.Value = new DateTime(DateTime.Now.Year, 1, 1);
dte.Value = new DateTime(DateTime.Now.Year, 12, 31);
}
if (bt.Text == "월")
{
dts.Value = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
dte.Value = dts.Value.AddMonths(1).AddDays(-1);
}
if (bt.Text == "주")
{
dts.Value = DateTime.Now.AddDays(-(int)DateTime.Now.DayOfWeek);
dte.Value = DateTime.Now.AddDays(6 - (int)DateTime.Now.DayOfWeek);
}
if (bt.Text == "일")
{
dts.Value = DateTime.Now;
dte.Value = DateTime.Now;
}
RefreshData();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
}
}
}