diff --git a/Course/BusinessLogic/BusinessLogic/ImplementerReportLogic.cs b/Course/BusinessLogic/BusinessLogic/ImplementerReportLogic.cs new file mode 100644 index 0000000..5e0a36a --- /dev/null +++ b/Course/BusinessLogic/BusinessLogic/ImplementerReportLogic.cs @@ -0,0 +1,94 @@ +using Contracts.BusinessLogicsContracts; +using Contracts.StoragesContracts; +using Contracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BusinessLogic.BusinessLogic +{ + public class ImplementerReportLogic : IImplementerReportLogic + { + private readonly IDetailStorage _detailStorage; + private readonly IWorkshopStorage _workshopStorage; + private readonly IProductStorage _productStorage; + private readonly IProductionStorage _productionStorage; + + public ImplementerReportLogic(IDetailStorage detailStorage, IWorkshopStorage workshopStorage, IProductStorage productStorage, IProductionStorage productionStorage) + { + _detailStorage = detailStorage; + _workshopStorage = workshopStorage; + _productStorage = productStorage; + _productionStorage = productionStorage; + } + + public List? GetDetailProductChart(int UserId) + { + var details = _detailStorage.GetFilteredList(new() { UserId = UserId }); + List productChart = new(); + foreach (var det in details) + { + DetailProductCountChartViewModel product = new DetailProductCountChartViewModel(); + product.DetailName = det.Name; + var count = _productStorage.GetFilteredList(new() { DetailId = det.Id, UserId = UserId }).Sum(x => x.DetailProducts[det.Id].Item2); + product.ProductCount = count; + productChart.Add(product); + } + return productChart; + } + + public List? GetDetailProductionChart(int UserId) + { + var details = _detailStorage.GetFilteredList(new() { UserId = UserId }); + List productChart = new(); + foreach (var det in details) + { + DetailProductionCountChartViewModel product = new DetailProductionCountChartViewModel(); + product.DetailName = det.Name; + var count = _productionStorage.GetFilteredList(new() { DetailId = det.Id, UserId = UserId }).Count; + product.ProductionCount = count; + productChart.Add(product); + } + return productChart; + } + + public List? GetDetailTimeReport(DateTime start, DateTime end, int UserId) + { + var details = _detailStorage.GetFilteredList(new() { DateFrom = start, DateTo = end, UserId = UserId }); + if (details == null) + return new(); + List detailTimeReports = new List(); + foreach (var detail in details) + { + var report = new DetailTimeReport(); + report.DetailName = detail.Name; + var products = _productStorage.GetFilteredList(new() { DetailId = detail.Id, UserId = UserId }); + if (products != null) + report.Products = products.Select(p => p.Name).ToList(); + var productions = _productionStorage.GetFilteredList(new() { DetailId = detail.Id, UserId = UserId }); + if (productions != null) + report.Productions = productions.Select(p => p.Name).ToList(); + detailTimeReports.Add(report); + } + return detailTimeReports; + } + + public List? GetDetailWorkshopReport(List ids) + { + List reports = new(); + foreach (int i in ids) + { + DetailWorkshopReportViewModel report = new(); + var detail = _detailStorage.GetElement(new() { Id = i }); + report.DetailName = detail!.Name; + var workshops = _workshopStorage.GetFilteredList(new() { DetailId = i }); + if (workshops != null) + report.WorkShops = workshops.Select(w => w.Title).ToList(); + reports.Add(report); + } + return reports; + } + } +} diff --git a/Course/BusinessLogic/OfficePackage/AbstractSaveToExcel.cs b/Course/BusinessLogic/OfficePackage/AbstractSaveToExcel.cs deleted file mode 100644 index c03fd52..0000000 --- a/Course/BusinessLogic/OfficePackage/AbstractSaveToExcel.cs +++ /dev/null @@ -1,83 +0,0 @@ -using BusinessLogic.OfficePackage.HelperEnums; -using BusinessLogic.OfficePackage.HelperModels; - -namespace BusinessLogic.OfficePackage -{ - public abstract class AbstractSaveToExcel - { - /*public void CreateReport(ExcelInfo info) - { - CreateExcel(info); - - InsertCellInWorksheet(new ExcelCellParameters - { - ColumnName = "A", - RowIndex = 1, - Text = info.Title, - StyleInfo = ExcelStyleInfoType.Title - }); - - MergeCells(new ExcelMergeParameters - { - CellFromName = "A1", - CellToName = "C1" - }); - - uint rowIndex = 2; - foreach (var pc in info.DressComponents) - { - InsertCellInWorksheet(new ExcelCellParameters - { - ColumnName = "A", - RowIndex = rowIndex, - Text = pc.DressName, - StyleInfo = ExcelStyleInfoType.Text - }); - rowIndex++; - - foreach (var (Dress, Count) in pc.Components) - { - InsertCellInWorksheet(new ExcelCellParameters - { - ColumnName = "B", - RowIndex = rowIndex, - Text = Dress, - StyleInfo = ExcelStyleInfoType.TextWithBorder - }); - - InsertCellInWorksheet(new ExcelCellParameters - { - ColumnName = "C", - RowIndex = rowIndex, - Text = Count.ToString(), - StyleInfo = ExcelStyleInfoType.TextWithBorder - }); - - rowIndex++; - } - - InsertCellInWorksheet(new ExcelCellParameters - { - ColumnName = "A", - RowIndex = rowIndex, - Text = "Итого", - StyleInfo = ExcelStyleInfoType.Text - }); - InsertCellInWorksheet(new ExcelCellParameters - { - ColumnName = "C", - RowIndex = rowIndex, - Text = pc.TotalCount.ToString(), - StyleInfo = ExcelStyleInfoType.Text - }); - rowIndex++; - } - - SaveExcel(info); - }*/ - protected abstract void CreateExcel(ExcelInfo info); - protected abstract void InsertCellInWorksheet(ExcelCellParameters excelParams); - protected abstract void MergeCells(ExcelMergeParameters excelParams); - protected abstract void SaveExcel(ExcelInfo info); - } -} diff --git a/Course/BusinessLogic/OfficePackage/AbstractSaveToPdf.cs b/Course/BusinessLogic/OfficePackage/AbstractSaveToPdf.cs deleted file mode 100644 index 71043d9..0000000 --- a/Course/BusinessLogic/OfficePackage/AbstractSaveToPdf.cs +++ /dev/null @@ -1,48 +0,0 @@ -using BusinessLogic.OfficePackage.HelperEnums; -using BusinessLogic.OfficePackage.HelperModels; -using System.Collections.Generic; -using System.Linq; - -namespace BusinessLogic.OfficePackage -{ - public abstract class AbstractSaveToPdf - { - public void CreateDoc(PdfInfo info) - { - CreatePdf(info); - CreateParagraph(new PdfParagraph { Text = info.Title, Style = "NormalTitle", ParagraphAlignment = PdfParagraphAlignmentType.Center }); - CreateParagraph(new PdfParagraph { Text = $"с {info.DateFrom.ToShortDateString()} по {info.DateTo.ToShortDateString()}", Style = "Normal", ParagraphAlignment = PdfParagraphAlignmentType.Center }); - - CreateTable(new List { "2cm", "3cm", "6cm", "4cm", "3cm" }); - - CreateRow(new PdfRowParameters - { - Texts = new List { "Номер", "Дата заказа", "Изделие", "Статус", "Сумма" }, - Style = "NormalTitle", - ParagraphAlignment = PdfParagraphAlignmentType.Center - }); - - /* foreach (var order in info.Orders) - { - CreateRow(new PdfRowParameters - { - Texts = new List { order.Id.ToString(), order.DateCreate.ToShortDateString(), order.DressName, order.Status.ToString(), order.Sum.ToString() }, - Style = "Normal", - ParagraphAlignment = PdfParagraphAlignmentType.Left - }); - } - CreateParagraph(new PdfParagraph { Text = $"Итого: {info.Orders.Sum(x => x.Sum)}\t", Style = "Normal", ParagraphAlignment = PdfParagraphAlignmentType.Right }); -*/ - SavePdf(info); - } - protected abstract void CreatePdf(PdfInfo info); - - protected abstract void CreateParagraph(PdfParagraph paragraph); - - protected abstract void CreateTable(List columns); - - protected abstract void CreateRow(PdfRowParameters rowParameters); - - protected abstract void SavePdf(PdfInfo info); - } -} diff --git a/Course/BusinessLogic/OfficePackage/AbstractSaveToWord.cs b/Course/BusinessLogic/OfficePackage/AbstractSaveToWord.cs deleted file mode 100644 index 8841686..0000000 --- a/Course/BusinessLogic/OfficePackage/AbstractSaveToWord.cs +++ /dev/null @@ -1,46 +0,0 @@ -using BusinessLogic.OfficePackage.HelperEnums; -using BusinessLogic.OfficePackage.HelperModels; - -namespace BusinessLogic.OfficePackage -{ - public abstract class AbstractSaveToWord - { - public void CreateDoc(WordInfo info) - { - CreateWord(info); - CreateParagraph(new WordParagraph - { - Texts = new List<(string, WordTextProperties)> - { - (info.Title, new WordTextProperties { Bold = true, Size = "24", }) - }, - TextProperties = new WordTextProperties - { - Size = "24", - JustificationType = WordJustificationType.Both - } - }); - /*foreach (var dress in info.Dresses) - { - CreateParagraph(new WordParagraph - { - Texts = new List<(string, WordTextProperties)> - { - ($"{dress.DressName} - ", new WordTextProperties { Size = "24", Bold = true}), - (dress.Price.ToString(), new WordTextProperties { Size = "24" }) - }, - TextProperties = new WordTextProperties - { - Size = "24", - JustificationType = WordJustificationType.Both - } - }) ; - - }*/ - SaveWord(info); - } - protected abstract void CreateWord(WordInfo info); - protected abstract void CreateParagraph(WordParagraph paragraph); - protected abstract void SaveWord(WordInfo info); - } -} diff --git a/Course/BusinessLogic/OfficePackage/HelperModels/ExcelInfo.cs b/Course/BusinessLogic/OfficePackage/HelperModels/ExcelInfo.cs deleted file mode 100644 index e04c2a4..0000000 --- a/Course/BusinessLogic/OfficePackage/HelperModels/ExcelInfo.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Contracts.ViewModels; - -namespace BusinessLogic.OfficePackage.HelperModels -{ - public class ExcelInfo - { - public string FileName { get; set; } = string.Empty; - public string Title { get; set; } = string.Empty; - //public List DressComponents { get; set; } = new(); - } -} diff --git a/Course/BusinessLogic/OfficePackage/HelperModels/PdfInfo.cs b/Course/BusinessLogic/OfficePackage/HelperModels/PdfInfo.cs deleted file mode 100644 index dfc02f9..0000000 --- a/Course/BusinessLogic/OfficePackage/HelperModels/PdfInfo.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Contracts.ViewModels; - -namespace BusinessLogic.OfficePackage.HelperModels -{ - public class PdfInfo - { - public string FileName { get; set; } = string.Empty; - public string Title { get; set; } = string.Empty; - public DateTime DateFrom { get; set; } - public DateTime DateTo { get; set; } - //public List Orders { get; set; } = new(); - } -} diff --git a/Course/BusinessLogic/OfficePackage/HelperModels/WordInfo.cs b/Course/BusinessLogic/OfficePackage/HelperModels/WordInfo.cs deleted file mode 100644 index 14fabfc..0000000 --- a/Course/BusinessLogic/OfficePackage/HelperModels/WordInfo.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace BusinessLogic.OfficePackage.HelperModels -{ - public class WordInfo - { - public string FileName { get; set; } = string.Empty; - public string Title { get; set; } = string.Empty; - //public List Dresses { get; set; } = new(); - } -} diff --git a/Course/BusinessLogic/OfficePackage/Implements/SaveToExcel.cs b/Course/BusinessLogic/OfficePackage/Implements/SaveToExcel.cs deleted file mode 100644 index 3d431d6..0000000 --- a/Course/BusinessLogic/OfficePackage/Implements/SaveToExcel.cs +++ /dev/null @@ -1,283 +0,0 @@ -using BusinessLogic.OfficePackage.HelperModels; -using BusinessLogic.OfficePackage.HelperEnums; -using DocumentFormat.OpenXml.Office2010.Excel; -using DocumentFormat.OpenXml.Office2013.Excel; -using DocumentFormat.OpenXml.Packaging; -using DocumentFormat.OpenXml.Spreadsheet; -using DocumentFormat.OpenXml; - -namespace BusinessLogic.OfficePackage.Implements -{ - public class SaveToExcel : AbstractSaveToExcel - { - private SpreadsheetDocument? _spreadsheetDocument; - - private SharedStringTablePart? _shareStringPart; - - private Worksheet? _worksheet; - - private static void CreateStyles(WorkbookPart workbookpart) - { - var sp = workbookpart.AddNewPart(); - sp.Stylesheet = new Stylesheet(); - - var fonts = new Fonts() { Count = 2U, KnownFonts = true }; - - var fontUsual = new Font(); - fontUsual.Append(new FontSize() { Val = 12D }); - fontUsual.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color() { Theme = 1U }); - fontUsual.Append(new FontName() { Val = "Times New Roman" }); - fontUsual.Append(new FontFamilyNumbering() { Val = 2 }); - fontUsual.Append(new FontScheme() { Val = FontSchemeValues.Minor }); - - var fontTitle = new Font(); - fontTitle.Append(new Bold()); - fontTitle.Append(new FontSize() { Val = 14D }); - fontTitle.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color() { Theme = 1U }); - fontTitle.Append(new FontName() { Val = "Times New Roman" }); - fontTitle.Append(new FontFamilyNumbering() { Val = 2 }); - fontTitle.Append(new FontScheme() { Val = FontSchemeValues.Minor }); - - fonts.Append(fontUsual); - fonts.Append(fontTitle); - - var fills = new Fills() { Count = 2U }; - - var fill1 = new Fill(); - fill1.Append(new PatternFill() { PatternType = PatternValues.None }); - - var fill2 = new Fill(); - fill2.Append(new PatternFill() { PatternType = PatternValues.Gray125 }); - - fills.Append(fill1); - fills.Append(fill2); - - var borders = new Borders() { Count = 2U }; - - var borderNoBorder = new Border(); - borderNoBorder.Append(new LeftBorder()); - borderNoBorder.Append(new RightBorder()); - borderNoBorder.Append(new TopBorder()); - borderNoBorder.Append(new BottomBorder()); - borderNoBorder.Append(new DiagonalBorder()); - - var borderThin = new Border(); - - var leftBorder = new LeftBorder() { Style = BorderStyleValues.Thin }; - leftBorder.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color() { Indexed = 64U }); - - var rightBorder = new RightBorder() { Style = BorderStyleValues.Thin }; - rightBorder.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color() { Indexed = 64U }); - - var topBorder = new TopBorder() { Style = BorderStyleValues.Thin }; - topBorder.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color() { Indexed = 64U }); - - var bottomBorder = new BottomBorder() { Style = BorderStyleValues.Thin }; - bottomBorder.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color() { Indexed = 64U }); - - borderThin.Append(leftBorder); - borderThin.Append(rightBorder); - borderThin.Append(topBorder); - borderThin.Append(bottomBorder); - borderThin.Append(new DiagonalBorder()); - - borders.Append(borderNoBorder); - borders.Append(borderThin); - - var cellStyleFormats = new CellStyleFormats() { Count = 1U }; - var cellFormatStyle = new CellFormat() { NumberFormatId = 0U, FontId = 0U, FillId = 0U, BorderId = 0U }; - - cellStyleFormats.Append(cellFormatStyle); - - var cellFormats = new CellFormats() { Count = 3U }; - var cellFormatFont = new CellFormat() { NumberFormatId = 0U, FontId = 0U, FillId = 0U, BorderId = 0U, FormatId = 0U, ApplyFont = true }; - var cellFormatFontAndBorder = new CellFormat() { NumberFormatId = 0U, FontId = 0U, FillId = 0U, BorderId = 1U, FormatId = 0U, ApplyFont = true, ApplyBorder = true }; - var cellFormatTitle = new CellFormat() { NumberFormatId = 0U, FontId = 1U, FillId = 0U, BorderId = 0U, FormatId = 0U, Alignment = new Alignment() { Vertical = VerticalAlignmentValues.Center, WrapText = true, Horizontal = HorizontalAlignmentValues.Center }, ApplyFont = true }; - - cellFormats.Append(cellFormatFont); - cellFormats.Append(cellFormatFontAndBorder); - cellFormats.Append(cellFormatTitle); - - var cellStyles = new CellStyles() { Count = 1U }; - - cellStyles.Append(new CellStyle() { Name = "Normal", FormatId = 0U, BuiltinId = 0U }); - - var differentialFormats = new DocumentFormat.OpenXml.Office2013.Excel.DifferentialFormats() { Count = 0U }; - - var tableStyles = new TableStyles() { Count = 0U, DefaultTableStyle = "TableStyleMedium2", DefaultPivotStyle = "PivotStyleLight16" }; - - var stylesheetExtensionList = new StylesheetExtensionList(); - - var stylesheetExtension1 = new StylesheetExtension() { Uri = "{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" }; - stylesheetExtension1.AddNamespaceDeclaration("x14", "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"); - stylesheetExtension1.Append(new SlicerStyles() { DefaultSlicerStyle = "SlicerStyleLight1" }); - - var stylesheetExtension2 = new StylesheetExtension() { Uri = "{9260A510-F301-46a8-8635-F512D64BE5F5}" }; - stylesheetExtension2.AddNamespaceDeclaration("x15", "http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"); - stylesheetExtension2.Append(new TimelineStyles() { DefaultTimelineStyle = "TimeSlicerStyleLight1" }); - - stylesheetExtensionList.Append(stylesheetExtension1); - stylesheetExtensionList.Append(stylesheetExtension2); - - sp.Stylesheet.Append(fonts); - sp.Stylesheet.Append(fills); - sp.Stylesheet.Append(borders); - sp.Stylesheet.Append(cellStyleFormats); - sp.Stylesheet.Append(cellFormats); - sp.Stylesheet.Append(cellStyles); - sp.Stylesheet.Append(differentialFormats); - sp.Stylesheet.Append(tableStyles); - sp.Stylesheet.Append(stylesheetExtensionList); - } - - private static uint GetStyleValue(ExcelStyleInfoType styleInfo) - { - return styleInfo switch - { - ExcelStyleInfoType.Title => 2U, - ExcelStyleInfoType.TextWithBorder => 1U, - ExcelStyleInfoType.Text => 0U, - _ => 0U, - }; - } - - protected override void CreateExcel(ExcelInfo info) - { - _spreadsheetDocument = SpreadsheetDocument.Create(info.FileName, SpreadsheetDocumentType.Workbook); - // Создаем книгу (в ней хранятся листы) - var workbookpart = _spreadsheetDocument.AddWorkbookPart(); - workbookpart.Workbook = new Workbook(); - - CreateStyles(workbookpart); - - // Получаем/создаем хранилище текстов для книги - _shareStringPart = _spreadsheetDocument.WorkbookPart!.GetPartsOfType().Any() - ? _spreadsheetDocument.WorkbookPart.GetPartsOfType().First() - : _spreadsheetDocument.WorkbookPart.AddNewPart(); - - // Создаем SharedStringTable, если его нет - if (_shareStringPart.SharedStringTable == null) - { - _shareStringPart.SharedStringTable = new SharedStringTable(); - } - - // Создаем лист в книгу - var worksheetPart = workbookpart.AddNewPart(); - worksheetPart.Worksheet = new Worksheet(new SheetData()); - - // Добавляем лист в книгу - var sheets = _spreadsheetDocument.WorkbookPart.Workbook.AppendChild(new Sheets()); - var sheet = new Sheet() - { - Id = _spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart), - SheetId = 1, - Name = "Лист" - }; - sheets.Append(sheet); - - _worksheet = worksheetPart.Worksheet; - } - - protected override void InsertCellInWorksheet(ExcelCellParameters excelParams) - { - if (_worksheet == null || _shareStringPart == null) - { - return; - } - var sheetData = _worksheet.GetFirstChild(); - if (sheetData == null) - { - return; - } - - // Ищем строку, либо добавляем ее - Row row; - if (sheetData.Elements().Where(r => r.RowIndex! == excelParams.RowIndex).Any()) - { - row = sheetData.Elements().Where(r => r.RowIndex! == excelParams.RowIndex).First(); - } - else - { - row = new Row() { RowIndex = excelParams.RowIndex }; - sheetData.Append(row); - } - - // Ищем нужную ячейку - Cell cell; - if (row.Elements().Where(c => c.CellReference!.Value == excelParams.CellReference).Any()) - { - cell = row.Elements().Where(c => c.CellReference!.Value == excelParams.CellReference).First(); - } - else - { - // Все ячейки должны быть последовательно друг за другом расположены - // нужно определить, после какой вставлять - Cell? refCell = null; - foreach (Cell rowCell in row.Elements()) - { - if (string.Compare(rowCell.CellReference!.Value, excelParams.CellReference, true) > 0) - { - refCell = rowCell; - break; - } - } - - var newCell = new Cell() { CellReference = excelParams.CellReference }; - row.InsertBefore(newCell, refCell); - - cell = newCell; - } - - // вставляем новый текст - _shareStringPart.SharedStringTable.AppendChild(new SharedStringItem(new Text(excelParams.Text))); - _shareStringPart.SharedStringTable.Save(); - - cell.CellValue = new CellValue((_shareStringPart.SharedStringTable.Elements().Count() - 1).ToString()); - cell.DataType = new EnumValue(CellValues.SharedString); - cell.StyleIndex = GetStyleValue(excelParams.StyleInfo); - } - - protected override void MergeCells(ExcelMergeParameters excelParams) - { - if (_worksheet == null) - { - return; - } - MergeCells mergeCells; - - if (_worksheet.Elements().Any()) - { - mergeCells = _worksheet.Elements().First(); - } - else - { - mergeCells = new MergeCells(); - - if (_worksheet.Elements().Any()) - { - _worksheet.InsertAfter(mergeCells, _worksheet.Elements().First()); - } - else - { - _worksheet.InsertAfter(mergeCells, _worksheet.Elements().First()); - } - } - - var mergeCell = new MergeCell() - { - Reference = new StringValue(excelParams.Merge) - }; - mergeCells.Append(mergeCell); - } - - protected override void SaveExcel(ExcelInfo info) - { - if (_spreadsheetDocument == null) - { - return; - } - _spreadsheetDocument.WorkbookPart!.Workbook.Save(); - _spreadsheetDocument.Dispose(); - } - } -} diff --git a/Course/BusinessLogic/OfficePackage/Implements/SaveToPdf.cs b/Course/BusinessLogic/OfficePackage/Implements/SaveToPdf.cs deleted file mode 100644 index 15b36ac..0000000 --- a/Course/BusinessLogic/OfficePackage/Implements/SaveToPdf.cs +++ /dev/null @@ -1,114 +0,0 @@ -using BusinessLogic.OfficePackage.HelperEnums; -using BusinessLogic.OfficePackage.HelperModels; -using MigraDoc.DocumentObjectModel; -using MigraDoc.DocumentObjectModel.Tables; -using MigraDoc.Rendering; - -namespace BusinessLogic.OfficePackage.Implements -{ - public class SaveToPdf : AbstractSaveToPdf - { - private Document? _document; - - private Section? _section; - - private Table? _table; - - private static ParagraphAlignment GetParagraphAlignment(PdfParagraphAlignmentType type) - { - return type switch - { - PdfParagraphAlignmentType.Center => ParagraphAlignment.Center, - PdfParagraphAlignmentType.Left => ParagraphAlignment.Left, - PdfParagraphAlignmentType.Right => ParagraphAlignment.Right, - _ => ParagraphAlignment.Justify, - }; - } - - /// - /// Создание стилей для документа - /// - /// - private static void DefineStyles(Document document) - { - var style = document.Styles["Normal"]; - style.Font.Name = "Times New Roman"; - style.Font.Size = 14; - - style = document.Styles.AddStyle("NormalTitle", "Normal"); - style.Font.Bold = true; - } - - protected override void CreatePdf(PdfInfo info) - { - _document = new Document(); - DefineStyles(_document); - - _section = _document.AddSection(); - } - - protected override void CreateParagraph(PdfParagraph pdfParagraph) - { - if (_section == null) - { - return; - } - var paragraph = _section.AddParagraph(pdfParagraph.Text); - paragraph.Format.SpaceAfter = "1cm"; - paragraph.Format.Alignment = GetParagraphAlignment(pdfParagraph.ParagraphAlignment); - paragraph.Style = pdfParagraph.Style; - } - - protected override void CreateTable(List columns) - { - if (_document == null) - { - return; - } - _table = _document.LastSection.AddTable(); - - foreach (var elem in columns) - { - _table.AddColumn(elem); - } - } - - protected override void CreateRow(PdfRowParameters rowParameters) - { - if (_table == null) - { - return; - } - var row = _table.AddRow(); - for (int i = 0; i < rowParameters.Texts.Count; ++i) - { - row.Cells[i].AddParagraph(rowParameters.Texts[i]); - - if (!string.IsNullOrEmpty(rowParameters.Style)) - { - row.Cells[i].Style = rowParameters.Style; - } - - Unit borderWidth = 0.5; - - row.Cells[i].Borders.Left.Width = borderWidth; - row.Cells[i].Borders.Right.Width = borderWidth; - row.Cells[i].Borders.Top.Width = borderWidth; - row.Cells[i].Borders.Bottom.Width = borderWidth; - - row.Cells[i].Format.Alignment = GetParagraphAlignment(rowParameters.ParagraphAlignment); - row.Cells[i].VerticalAlignment = VerticalAlignment.Center; - } - } - - protected override void SavePdf(PdfInfo info) - { - var renderer = new PdfDocumentRenderer(true) - { - Document = _document - }; - renderer.RenderDocument(); - renderer.PdfDocument.Save(info.FileName); - } - } -} \ No newline at end of file diff --git a/Course/BusinessLogic/OfficePackage/Implements/SaveToWord.cs b/Course/BusinessLogic/OfficePackage/Implements/SaveToWord.cs deleted file mode 100644 index aac8665..0000000 --- a/Course/BusinessLogic/OfficePackage/Implements/SaveToWord.cs +++ /dev/null @@ -1,121 +0,0 @@ -using BusinessLogic.OfficePackage.HelperEnums; -using BusinessLogic.OfficePackage.HelperModels; -using DocumentFormat.OpenXml; -using DocumentFormat.OpenXml.Packaging; -using DocumentFormat.OpenXml.Wordprocessing; - -namespace BusinessLogic.OfficePackage.Implements -{ - public class SaveToWord : AbstractSaveToWord - { - private WordprocessingDocument? _wordDocument; - - private Body? _docBody; - - private static JustificationValues GetJustificationValues(WordJustificationType type) - { - return type switch - { - WordJustificationType.Both => JustificationValues.Both, - WordJustificationType.Center => JustificationValues.Center, - _ => JustificationValues.Left, - }; - } - - private static SectionProperties CreateSectionProperties() - { - var properties = new SectionProperties(); - - var pageSize = new PageSize - { - Orient = PageOrientationValues.Portrait - }; - - properties.AppendChild(pageSize); - - return properties; - } - - private static ParagraphProperties? CreateParagraphProperties(WordTextProperties? paragraphProperties) - { - if (paragraphProperties == null) - { - return null; - } - - var properties = new ParagraphProperties(); - - properties.AppendChild(new Justification() - { - Val = GetJustificationValues(paragraphProperties.JustificationType) - }); - - properties.AppendChild(new SpacingBetweenLines - { - LineRule = LineSpacingRuleValues.Auto - }); - - properties.AppendChild(new Indentation()); - - var paragraphMarkRunProperties = new ParagraphMarkRunProperties(); - if (!string.IsNullOrEmpty(paragraphProperties.Size)) - { - paragraphMarkRunProperties.AppendChild(new FontSize { Val = paragraphProperties.Size }); - } - properties.AppendChild(paragraphMarkRunProperties); - - return properties; - } - - protected override void CreateWord(WordInfo info) - { - _wordDocument = WordprocessingDocument.Create(info.FileName, WordprocessingDocumentType.Document); - MainDocumentPart mainPart = _wordDocument.AddMainDocumentPart(); - mainPart.Document = new Document(); - _docBody = mainPart.Document.AppendChild(new Body()); - } - - protected override void CreateParagraph(WordParagraph paragraph) - { - if (_docBody == null || paragraph == null) - { - return; - } - var docParagraph = new Paragraph(); - - docParagraph.AppendChild(CreateParagraphProperties(paragraph.TextProperties)); - - foreach (var run in paragraph.Texts) - { - var docRun = new Run(); - - var properties = new RunProperties(); - properties.AppendChild(new FontSize { Val = run.Item2.Size }); - if (run.Item2.Bold) - { - properties.AppendChild(new Bold()); - } - docRun.AppendChild(properties); - - docRun.AppendChild(new Text { Text = run.Item1, Space = SpaceProcessingModeValues.Preserve }); - - docParagraph.AppendChild(docRun); - } - - _docBody.AppendChild(docParagraph); - } - - protected override void SaveWord(WordInfo info) - { - if (_docBody == null || _wordDocument == null) - { - return; - } - _docBody.AppendChild(CreateSectionProperties()); - - _wordDocument.MainDocumentPart!.Document.Save(); - - _wordDocument.Dispose(); - } - } -} diff --git a/Course/Contracts/BusinessLogicsContracts/IImplementerReportLogic.cs b/Course/Contracts/BusinessLogicsContracts/IImplementerReportLogic.cs new file mode 100644 index 0000000..17dd954 --- /dev/null +++ b/Course/Contracts/BusinessLogicsContracts/IImplementerReportLogic.cs @@ -0,0 +1,17 @@ +using Contracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Contracts.BusinessLogicsContracts +{ + public interface IImplementerReportLogic + { + List? GetDetailWorkshopReport(List ids); + List? GetDetailTimeReport(DateTime start, DateTime end, int UserId); + List? GetDetailProductChart(int UserId); + List? GetDetailProductionChart(int UserId); + } +} diff --git a/Course/Contracts/ViewModels/DetailProductCountChartViewModel.cs b/Course/Contracts/ViewModels/DetailProductCountChartViewModel.cs new file mode 100644 index 0000000..7760542 --- /dev/null +++ b/Course/Contracts/ViewModels/DetailProductCountChartViewModel.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Contracts.ViewModels +{ + public class DetailProductCountChartViewModel + { + public string DetailName { get; set; } = string.Empty; + public int ProductCount { get; set; } + } +} diff --git a/Course/Contracts/ViewModels/DetailProductionCountChartViewModel.cs b/Course/Contracts/ViewModels/DetailProductionCountChartViewModel.cs new file mode 100644 index 0000000..3ef3a3a --- /dev/null +++ b/Course/Contracts/ViewModels/DetailProductionCountChartViewModel.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Contracts.ViewModels +{ + public class DetailProductionCountChartViewModel + { + public string DetailName { get; set; } = string.Empty; + public int ProductionCount { get; set; } + } +} diff --git a/Course/ImplementerApp/Controllers/ChartController.cs b/Course/ImplementerApp/Controllers/ChartController.cs new file mode 100644 index 0000000..b75afeb --- /dev/null +++ b/Course/ImplementerApp/Controllers/ChartController.cs @@ -0,0 +1,53 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; + +namespace ImplementerApp.Controllers +{ + public class ChartController : Controller + { + private readonly ILogger _logger; + private readonly ImplementerData _data; + public ChartController(ILogger logger, ImplementerData data) + { + _logger = logger; + _data = data; + } + private bool IsLoggedIn { get { return UserImplementer.user != null; } } + private int UserId { get { return UserImplementer.user!.Id; } } + [HttpGet] + public IActionResult ProductHistogramm() + { + if (!IsLoggedIn) + return RedirectToAction("IndexNonReg", "Home"); + try { + var chart = _data.GetProductChart(UserId); + return View(chart); + } catch + { + return RedirectToAction("IndexNonReg", "Home"); + } + } + public IActionResult Menu() + { + if (!IsLoggedIn) + return RedirectToAction("IndexNonReg", "Home"); + return View(); + } + [HttpGet] + public IActionResult ProductionHistogramm() + { + + if (!IsLoggedIn) + return RedirectToAction("IndexNonReg", "Home"); + try + { + var chart = _data.GetProductionChart(UserId); + return View(chart); + } + catch + { + return RedirectToAction("IndexNonReg", "Home"); + } + } + } +} diff --git a/Course/ImplementerApp/ImplementerApp.csproj b/Course/ImplementerApp/ImplementerApp.csproj index ac4c132..10934b3 100644 --- a/Course/ImplementerApp/ImplementerApp.csproj +++ b/Course/ImplementerApp/ImplementerApp.csproj @@ -7,6 +7,7 @@ + diff --git a/Course/ImplementerApp/ImplementerData.cs b/Course/ImplementerApp/ImplementerData.cs index 1a27d39..775a3e2 100644 --- a/Course/ImplementerApp/ImplementerData.cs +++ b/Course/ImplementerApp/ImplementerData.cs @@ -18,11 +18,13 @@ namespace ImplementerApp private readonly IProductLogic _productLogic; private readonly IMachineLogic _machineLogic; private readonly IWorkshopLogic _workshopLogic; + private readonly IImplementerReportLogic _reportLogic; private readonly AbstractSaveToExcelImplementer _excel; private readonly AbstractSaveToWordImplementer _word; private readonly AbstractSaveToPdfImplementer _pdf; private readonly AbstractMailWorker _mail; + public ImplementerData(ILogger logger, IImplementerLogic implementerLogic, IDetailLogic detailLogic, @@ -30,6 +32,7 @@ namespace ImplementerApp IProductLogic productLogic, IMachineLogic machineLogic, IWorkshopLogic workshopLogic, + IImplementerReportLogic reportLogic, AbstractSaveToExcelImplementer excel, AbstractSaveToWordImplementer word, AbstractMailWorker mail, @@ -42,6 +45,7 @@ namespace ImplementerApp _productLogic = productLogic; _machineLogic = machineLogic; _workshopLogic = workshopLogic; + _reportLogic = reportLogic; _excel = excel; _word = word; _mail = mail; @@ -149,41 +153,14 @@ namespace ImplementerApp return _machineLogic.ReadList(null); } - public List GetTimeReport(DateTime? startDate, DateTime? endDate, int UserId) + public List? GetTimeReport(DateTime? startDate, DateTime? endDate, int UserId) { - var details = _detailLogic.ReadList(new() { DateFrom = startDate, DateTo = endDate, UserId = UserId }); - if (details == null) - return new(); - List detailTimeReports = new List(); - foreach (var detail in details) - { - var report = new DetailTimeReport(); - report.DetailName = detail.Name; - var products = _productLogic.ReadList(new() { DetailId = detail.Id, UserId = UserId }); - if (products != null) - report.Products = products.Select(p => p.Name).ToList(); - var productions = _productionLogic.ReadList(new() { DetailId = detail.Id, UserId = UserId }); - if (productions != null) - report.Productions = productions.Select(p => p.Name).ToList(); - detailTimeReports.Add(report); - } - return detailTimeReports; + return _reportLogic.GetDetailTimeReport(startDate!.Value, endDate!.Value, UserId); } public List? GetWorkshopReports(List details) { - List reports = new(); - foreach (int i in details) - { - DetailWorkshopReportViewModel report = new(); - var detail = _detailLogic.ReadElement(new() { Id = i }); - report.DetailName = detail!.Name; - var workshops = _workshopLogic.ReadList(new() { DetailId = i }); - if (workshops != null) - report.WorkShops = workshops.Select(w => w.Title).ToList(); - reports.Add(report); - } - return reports; + return _reportLogic.GetDetailWorkshopReport(details); } public void SaveReportExcel(List details, MemoryStream stream) @@ -232,5 +209,14 @@ namespace ImplementerApp _mail.MailSendAsync(new() { MailAddress = UserImplementer.user!.Email, Subject = "Отчет", FileName = "PdfReport.pdf", Pdf = report}); } - } + public List? GetProductChart(int UserId) + { + return _reportLogic.GetDetailProductChart(UserId); + } + public List? GetProductionChart(int UserId) + { + return _reportLogic.GetDetailProductionChart(UserId); + } + + } } diff --git a/Course/ImplementerApp/Program.cs b/Course/ImplementerApp/Program.cs index e6f12d2..29de6ca 100644 --- a/Course/ImplementerApp/Program.cs +++ b/Course/ImplementerApp/Program.cs @@ -21,6 +21,7 @@ builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); +builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); diff --git a/Course/ImplementerApp/Views/Chart/Menu.cshtml b/Course/ImplementerApp/Views/Chart/Menu.cshtml new file mode 100644 index 0000000..bc33827 --- /dev/null +++ b/Course/ImplementerApp/Views/Chart/Menu.cshtml @@ -0,0 +1,11 @@ +@{ + ViewData["Title"] = "Меню графиков"; +} + +
+

Главное меню

+ +
diff --git a/Course/ImplementerApp/Views/Chart/ProductHistogramm.cshtml b/Course/ImplementerApp/Views/Chart/ProductHistogramm.cshtml new file mode 100644 index 0000000..12dbe3c --- /dev/null +++ b/Course/ImplementerApp/Views/Chart/ProductHistogramm.cshtml @@ -0,0 +1,42 @@ +@using Contracts.ViewModels; +@model List; + + + + + Histogram Example + + + +
+ +
+ + + \ No newline at end of file diff --git a/Course/ImplementerApp/Views/Chart/ProductionHistogramm.cshtml b/Course/ImplementerApp/Views/Chart/ProductionHistogramm.cshtml new file mode 100644 index 0000000..5384f3b --- /dev/null +++ b/Course/ImplementerApp/Views/Chart/ProductionHistogramm.cshtml @@ -0,0 +1,42 @@ +@using Contracts.ViewModels; +@model List; + + + + + Histogram Example + + + +
+ +
+ + + \ No newline at end of file diff --git a/Course/ImplementerApp/Views/Home/Index.cshtml b/Course/ImplementerApp/Views/Home/Index.cshtml index 446b85f..19a582c 100644 --- a/Course/ImplementerApp/Views/Home/Index.cshtml +++ b/Course/ImplementerApp/Views/Home/Index.cshtml @@ -10,6 +10,7 @@ Производства Личные данные Меню отчетов + Графики Выйти diff --git a/Course/ImplementerApp/Views/Product/ProductMachineAdd.cshtml b/Course/ImplementerApp/Views/Product/ProductMachineAdd.cshtml index c0d265c..6d1cafa 100644 --- a/Course/ImplementerApp/Views/Product/ProductMachineAdd.cshtml +++ b/Course/ImplementerApp/Views/Product/ProductMachineAdd.cshtml @@ -11,7 +11,7 @@
-

Список изделий

+

Список станков

@foreach (var machine in Model) {