using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Windows;
using Comal.Classes;
using InABox.Configuration;
using InABox.Wpf;
using Microsoft.Win32;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
namespace PRSDesktop
{
///
/// Interaction logic for SetoutTemplate.xaml
///
public partial class SetoutTemplate : ThemableWindow
{
private readonly GlobalConfiguration config = new();
private FactoryTemplate currentTemplate;
private readonly FactorySetup settings;
public SetoutTemplate()
{
InitializeComponent();
settings = config.Load();
Templates.Load(settings);
Stages.SetStages(new List());
//Attributes.Attributes = new List();
//Attributes.Refresh(true, false);
currentTemplate = null;
}
private void OKButton_Click(object sender, RoutedEventArgs e)
{
if (currentTemplate != null)
{
currentTemplate.Stages.Clear();
currentTemplate.Stages.AddRange(Stages.GetStages());
currentTemplate.Items.Clear();
//currentTemplate.Attributes.AddRange(Items.GetItems());
}
settings.Templates = Templates.Templates;
config.Save(settings);
Close();
}
private void CancelButton_Click(object sender, RoutedEventArgs e)
{
Close();
}
private void Templates_TemplateSelected(object sender, TempateSelectedArgs e)
{
if (currentTemplate != null)
{
currentTemplate.Stages.Clear();
currentTemplate.Stages.AddRange(Stages.GetStages());
currentTemplate.Items.Clear();
//currentTemplate.Items.AddRange(Items.GetItems());
}
currentTemplate = e.Template;
if (e.Template != null) Stages.SetStages(e.Template.Stages);
//Attributes.Attributes = e.Template.Attributes;
//Attributes.Refresh(false,true);
}
private ICell EnsureCell(ISheet sheet, int row, int col, ICellStyle style)
{
var _row = sheet.GetRow(row);
if (_row == null)
_row = sheet.CreateRow(row);
var _cell = _row.GetCell(col);
if (_cell == null)
_cell = _row.CreateCell(col);
_cell.CellStyle = style;
return _cell;
}
private ICellStyle CreateStyle(IWorkbook book, IndexedColors color)
{
var style = book.CreateCellStyle();
style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
style.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
style.BorderLeft = BorderStyle.Medium;
style.BorderRight = BorderStyle.Medium;
style.BorderTop = BorderStyle.Medium;
style.BorderBottom = BorderStyle.Medium;
style.FillForegroundColor = color.Index;
style.FillPattern = FillPattern.SolidForeground;
return style;
}
private void ExportButton_Click(object sender, RoutedEventArgs e)
{
if (currentTemplate != null)
{
currentTemplate.Stages.Clear();
currentTemplate.Stages.AddRange(Stages.GetStages());
currentTemplate.Items.Clear();
//currentTemplate.Items.AddRange(Items.GetItems());
}
var dlg = new SaveFileDialog();
dlg.DefaultExt = "xlsx";
dlg.Filter = "Excel Files|*.xlsx";
if (dlg.ShowDialog() != true)
return;
using (var stream = new FileStream(dlg.FileName, FileMode.Create, FileAccess.Write))
{
IWorkbook book = new XSSFWorkbook();
var sheet = book.CreateSheet("Sheet1");
var style = CreateStyle(book, IndexedColors.Grey50Percent);
EnsureCell(sheet, 0, 0, style).SetCellValue("Code");
EnsureCell(sheet, 0, 1, style).SetCellValue("Description");
EnsureCell(sheet, 1, 0, style).SetCellValue("");
EnsureCell(sheet, 1, 1, style).SetCellValue("");
sheet.AddMergedRegion(new CellRangeAddress(0, 1, 0, 0));
sheet.AddMergedRegion(new CellRangeAddress(0, 1, 1, 1));
var sections = new List();
var config = new GlobalConfiguration();
var settings = config.Load();
var iGrp = 0;
var sGrp = "";
for (var i = 0; i < settings.Sections.Count; i++)
{
var section = settings.Sections[i];
sections.Add(section.ID);
if (!section.Group.Equals(sGrp))
{
if (!string.IsNullOrEmpty(sGrp))
sheet.AddMergedRegion(new CellRangeAddress(0, 0, iGrp, i + 1));
iGrp = i + 2;
sGrp = section.Group;
}
EnsureCell(sheet, 0, i + 2, style).SetCellValue(section.Group);
EnsureCell(sheet, 1, i + 2, style).SetCellValue(section.Name);
}
if (iGrp < settings.Sections.Count + 2)
sheet.AddMergedRegion(new CellRangeAddress(0, 0, iGrp, settings.Sections.Count + 1));
style = CreateStyle(book, IndexedColors.White);
for (var j = 0; j < settings.Templates.Count; j++)
{
var template = settings.Templates[j];
EnsureCell(sheet, j + 2, 0, style).SetCellValue(template.Code);
EnsureCell(sheet, j + 2, 1, style).SetCellValue(template.Name);
for (var k = 0; k < sections.Count; k++)
EnsureCell(sheet, j + 2, k + 2, style).SetCellValue(" ");
foreach (var stage in template.Stages)
{
var col = sections.IndexOf(stage.SectionID);
EnsureCell(sheet, j + 2, col + 2, style).SetCellValue(stage.Minutes);
}
}
for (var i = 0; i < settings.Sections.Count + 2; i++)
sheet.AutoSizeColumn(i);
book.Write(stream);
}
Process.Start(dlg.FileName);
}
}
}