From ca302e66ff832a3177ac3ec305eef8eab5cd49c4 Mon Sep 17 00:00:00 2001 From: DyCTaTOR <125912249+DyCTaTOR@users.noreply.github.com> Date: Tue, 28 May 2024 19:50:44 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=BE=D1=82=D0=BD=D0=BE?= =?UTF-8?q?=D1=88=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BC=D0=BD=D0=BE=D0=B3=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BA=D0=BE=20=D0=BC=D0=BD=D0=BE=D0=B3=D0=B8=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/ReportLogic.cs | 2 +- .../OfficePackage/AbstractSaveToExcel.cs | 82 ---- .../OfficePackage/AbstractSaveToPdf.cs | 69 ---- .../OfficePackage/AbstractSaveToWord.cs | 45 --- .../HelperEnums/PdfParagraphAlignmentType.cs | 4 +- .../OfficePackage/Implements/SaveToExcel.cs | 356 ------------------ .../OfficePackage/Implements/SaveToPdf.cs | 114 ------ .../OfficePackage/Implements/SaveToWord.cs | 136 ------- .../UniversityClientAppWorker/APIClient.cs | 56 ++- .../Controllers/HomeController.cs | 52 ++- .../Views/Home/Index.cshtml | 14 + .../Views/Home/InfoPlanOfStudy.cshtml | 16 +- .../ViewModels/PlanOfStudyViewModel.cs | 9 + .../Implements/PlanOfStudyStorage.cs | 16 +- .../Models/PlanOfStudy.cs | 2 +- 15 files changed, 142 insertions(+), 831 deletions(-) delete mode 100644 University/UniversityBusinessLogic/OfficePackage/AbstractSaveToExcel.cs delete mode 100644 University/UniversityBusinessLogic/OfficePackage/AbstractSaveToPdf.cs delete mode 100644 University/UniversityBusinessLogic/OfficePackage/AbstractSaveToWord.cs delete mode 100644 University/UniversityBusinessLogic/OfficePackage/Implements/SaveToExcel.cs delete mode 100644 University/UniversityBusinessLogic/OfficePackage/Implements/SaveToPdf.cs delete mode 100644 University/UniversityBusinessLogic/OfficePackage/Implements/SaveToWord.cs diff --git a/University/UniversityBusinessLogic/BusinessLogics/ReportLogic.cs b/University/UniversityBusinessLogic/BusinessLogics/ReportLogic.cs index 6bba05b..c0c3f60 100644 --- a/University/UniversityBusinessLogic/BusinessLogics/ReportLogic.cs +++ b/University/UniversityBusinessLogic/BusinessLogics/ReportLogic.cs @@ -1,6 +1,6 @@ using System.Reflection; using University.ViewModels; -using UniversityBusinessLogics.OfficePackage; +using UniversityBusinessLogic.OfficePackage; using UniversityContracts.BindingModels; using UniversityContracts.BusinessLogicContracts; using UniversityContracts.SearchModels; diff --git a/University/UniversityBusinessLogic/OfficePackage/AbstractSaveToExcel.cs b/University/UniversityBusinessLogic/OfficePackage/AbstractSaveToExcel.cs deleted file mode 100644 index bd0e3b5..0000000 --- a/University/UniversityBusinessLogic/OfficePackage/AbstractSaveToExcel.cs +++ /dev/null @@ -1,82 +0,0 @@ -using UniversityBusinessLogic.OfficePackage.HelperEnums; -using UniversityBusinessLogic.OfficePackage.HelperModels; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace UniversityBusinessLogic.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 wk in info.WorkComponents) - { - InsertCellInWorksheet(new ExcelCellParameters - { - ColumnName = "A", - RowIndex = rowIndex, - Text = wk.WorkName, - StyleInfo = ExcelStyleInfoType.Text - }); - rowIndex++; - foreach (var (Component, Count) in wk.Components) - { - InsertCellInWorksheet(new ExcelCellParameters - { - ColumnName = "B", - RowIndex = rowIndex, - Text = Component, - StyleInfo = - ExcelStyleInfoType.TextWithBroder - }); - InsertCellInWorksheet(new ExcelCellParameters - { - ColumnName = "C", - RowIndex = rowIndex, - Text = Count.ToString(), - StyleInfo = - ExcelStyleInfoType.TextWithBroder - }); - rowIndex++; - } - InsertCellInWorksheet(new ExcelCellParameters - { - ColumnName = "A", - RowIndex = rowIndex, - Text = "Итого", - StyleInfo = ExcelStyleInfoType.Text - }); - InsertCellInWorksheet(new ExcelCellParameters - { - ColumnName = "C", - RowIndex = rowIndex, - Text = wk.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/University/UniversityBusinessLogic/OfficePackage/AbstractSaveToPdf.cs b/University/UniversityBusinessLogic/OfficePackage/AbstractSaveToPdf.cs deleted file mode 100644 index 88b782f..0000000 --- a/University/UniversityBusinessLogic/OfficePackage/AbstractSaveToPdf.cs +++ /dev/null @@ -1,69 +0,0 @@ -using UniversityBusinessLogic.OfficePackage.HelperEnums; -using UniversityBusinessLogic.OfficePackage.HelperModels; - -namespace UniversityBusinessLogic.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", "3cm", "4 cm" }); - - 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.WorkName, order.OrderStatus.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); - } - - /// - /// Создание doc-файла - /// - /// - 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/University/UniversityBusinessLogic/OfficePackage/AbstractSaveToWord.cs b/University/UniversityBusinessLogic/OfficePackage/AbstractSaveToWord.cs deleted file mode 100644 index cae8b5c..0000000 --- a/University/UniversityBusinessLogic/OfficePackage/AbstractSaveToWord.cs +++ /dev/null @@ -1,45 +0,0 @@ -using UniversityBusinessLogic.OfficePackage.HelperEnums; -using UniversityBusinessLogic.OfficePackage.HelperModels; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace UniversityBusinessLogic.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.Center - } - }); - foreach (var work in info.Works) - { - CreateParagraph(new WordParagraph - { - Texts = new List<(string, WordTextProperties)> {(work.WorkName + " - ", new WordTextProperties { Size = "24", Bold = true, }), - (work.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/University/UniversityBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAlignmentType.cs b/University/UniversityBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAlignmentType.cs index 774aa2d..1dd4a6b 100644 --- a/University/UniversityBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAlignmentType.cs +++ b/University/UniversityBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAlignmentType.cs @@ -3,7 +3,9 @@ public enum PdfParagraphAlignmentType { Center, + Left, - Rigth + + Right } } diff --git a/University/UniversityBusinessLogic/OfficePackage/Implements/SaveToExcel.cs b/University/UniversityBusinessLogic/OfficePackage/Implements/SaveToExcel.cs deleted file mode 100644 index f1c7d66..0000000 --- a/University/UniversityBusinessLogic/OfficePackage/Implements/SaveToExcel.cs +++ /dev/null @@ -1,356 +0,0 @@ -using DocumentFormat.OpenXml.Office2010.Excel; -using DocumentFormat.OpenXml.Office2013.Excel; -using DocumentFormat.OpenXml.Office2016.Excel; -using DocumentFormat.OpenXml.Packaging; -using DocumentFormat.OpenXml.Spreadsheet; -using DocumentFormat.OpenXml; -using PlumbingRepairBusinessLogic.OfficePackage.HelperEnums; -using PlumbingRepairBusinessLogic.OfficePackage.HelperModels; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace PlumbingRepairBusinessLogic.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.TextWithBroder => 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/University/UniversityBusinessLogic/OfficePackage/Implements/SaveToPdf.cs b/University/UniversityBusinessLogic/OfficePackage/Implements/SaveToPdf.cs deleted file mode 100644 index cd58a04..0000000 --- a/University/UniversityBusinessLogic/OfficePackage/Implements/SaveToPdf.cs +++ /dev/null @@ -1,114 +0,0 @@ -using PlumbingRepairBusinessLogic.OfficePackage.HelperEnum; -using PlumbingRepairBusinessLogic.OfficePackage.HelperModels; -using MigraDoc.DocumentObjectModel; -using MigraDoc.DocumentObjectModel.Tables; -using MigraDoc.Rendering; - -namespace PlumbingRepairBusinessLogic.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/University/UniversityBusinessLogic/OfficePackage/Implements/SaveToWord.cs b/University/UniversityBusinessLogic/OfficePackage/Implements/SaveToWord.cs deleted file mode 100644 index 02adf82..0000000 --- a/University/UniversityBusinessLogic/OfficePackage/Implements/SaveToWord.cs +++ /dev/null @@ -1,136 +0,0 @@ -using DocumentFormat.OpenXml; -using DocumentFormat.OpenXml.Packaging; -using DocumentFormat.OpenXml.Wordprocessing; -using UniversityBusinessLogic.OfficePackage.HelperEnums; -using UniversityBusinessLogic.OfficePackage.HelperModels; -using UniversityBusinessLogic.OfficePackage; - -namespace UniversityBusinessLogics.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(); - } - } -} \ No newline at end of file diff --git a/University/UniversityClientAppWorker/APIClient.cs b/University/UniversityClientAppWorker/APIClient.cs index 8446141..c05be52 100644 --- a/University/UniversityClientAppWorker/APIClient.cs +++ b/University/UniversityClientAppWorker/APIClient.cs @@ -2,6 +2,9 @@ using UniversityContracts.ViewModels; using System.Net.Http.Headers; using System.Text; +using Azure.Core; +using UniversityDataModels.Models; +using UniversityDatabaseImplement.Models; namespace PlumbingRepairClientApp { @@ -28,7 +31,24 @@ namespace PlumbingRepairClientApp throw new Exception(result); } } - public static void PostRequest(string requestUrl, T model) + public static async Task GetRequestPlanOfStudyAsync(string requestUrl) + { + var response = await _client.GetAsync(requestUrl); + var result = await response.Content.ReadAsStringAsync(); + if (response.IsSuccessStatusCode) + { + var settings = new JsonSerializerSettings + { + Converters = new List { new TeacherConverter() } + }; + return JsonConvert.DeserializeObject(result, settings); + } + else + { + throw new Exception(result); + } + } + public static void PostRequest(string requestUrl, T model) { var json = JsonConvert.SerializeObject(model); var data = new StringContent(json, Encoding.UTF8, "application/json"); @@ -41,5 +61,39 @@ namespace PlumbingRepairClientApp throw new Exception(result); } } + } + public class TeacherConverter : JsonConverter + { + public override bool CanConvert(Type objectType) + { + return objectType == typeof(ITeacherModel); + //return true; } + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + if (reader.TokenType == JsonToken.Null) + return null; + + // Пропускаем десериализацию, если уже есть экземпляр Teacher + if (existingValue is Teacher teacher) + return teacher; + + var teach = new Teacher(); + serializer.Populate(reader, teach); + return teach; + } + + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + if (value == null) + { + writer.WriteNull(); + return; + } + + var teacher = (Teacher)value; + serializer.Serialize(writer, teacher); + } + } } diff --git a/University/UniversityClientAppWorker/Controllers/HomeController.cs b/University/UniversityClientAppWorker/Controllers/HomeController.cs index 4cc7a5b..373f516 100644 --- a/University/UniversityClientAppWorker/Controllers/HomeController.cs +++ b/University/UniversityClientAppWorker/Controllers/HomeController.cs @@ -17,17 +17,43 @@ namespace UniversityClientAppWorker.Controllers { _logger = logger; } - [HttpGet] + /*[HttpGet] public IActionResult Index() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } + ViewBag.Teachers = APIClient.GetRequest>($"api/teacher/getallteachers"); return View(APIClient.GetRequest>($"api/planofstudys/getplanofstudys?userId={APIClient.User.Id}")); + }*/ + [HttpGet] + public async Task Index() + { + if (APIClient.User == null) + { + return Redirect("~/Home/Enter"); + } + ViewBag.Teachers = APIClient.GetRequest>($"api/teacher/getallteachers"); + var planOfStudys = await APIClient.GetRequestPlanOfStudyAsync>($"api/planofstudys/getplanofstudys?userId={APIClient.User.Id}"); + + return View(planOfStudys); } - [HttpPost] - public void CreatePlanOfStudy(string profile, string formOfStudy) + [HttpGet] + public async Task InfoPlanOfStudy(int id) + { + if (APIClient.User == null) + { + return Redirect("~/Home/Enter"); + } + var obj1 = APIClient.GetRequest>($"api/teacher/getallteachers"); + ViewBag.Teachers = obj1; + + var obj = await APIClient.GetRequestPlanOfStudyAsync($"api/planofstudys/getplanofstudy?id={id}&userId={APIClient.User.Id}"); + return View(obj); + } + [HttpPost] + public void CreatePlanOfStudy(string profile, string formOfStudy, List teacherIds) { if (APIClient.User == null) { @@ -41,8 +67,9 @@ namespace UniversityClientAppWorker.Controllers { Profile = profile, FormOfStudy = formOfStudy, - UserId = APIClient.User.Id - }); + UserId = APIClient.User.Id, + PlanOfStudyTeachers = teacherIds.ToDictionary(id => id, id => (ITeacherModel)null) + }); Response.Redirect("Index"); } [HttpPost] @@ -58,18 +85,8 @@ namespace UniversityClientAppWorker.Controllers }); Response.Redirect("Index"); } - [HttpGet] - public IActionResult InfoPlanOfStudy(int id) - { - if (APIClient.User == null) - { - return Redirect("~/Home/Enter"); - } - ViewBag.Teachers = APIClient.GetRequest>($"api/teacher/getallteachers"); - return View(APIClient.GetRequest($"api/planofstudys/getplanofstudy?id={id}&userId={APIClient.User.Id}")); - } [HttpPost] - public void UpdatePlanOfStudy(int id, string profile, string formOfStudy) + public void UpdatePlanOfStudy(int id, string profile, string formOfStudy, List teacherIds) { if (id == 0) { @@ -79,7 +96,8 @@ namespace UniversityClientAppWorker.Controllers { Id = id, Profile = profile, - FormOfStudy = formOfStudy + FormOfStudy = formOfStudy, + PlanOfStudyTeachers = teacherIds.ToDictionary(id => id, id => (ITeacherModel)null) }); Response.Redirect("Index"); } diff --git a/University/UniversityClientAppWorker/Views/Home/Index.cshtml b/University/UniversityClientAppWorker/Views/Home/Index.cshtml index 32e222b..0964dec 100644 --- a/University/UniversityClientAppWorker/Views/Home/Index.cshtml +++ b/University/UniversityClientAppWorker/Views/Home/Index.cshtml @@ -21,6 +21,20 @@ +
+
Преподаватели:
+
+ @foreach (var teacher in ViewBag.Teachers) + { +
+ + +
+ } +
+
diff --git a/University/UniversityClientAppWorker/Views/Home/InfoPlanOfStudy.cshtml b/University/UniversityClientAppWorker/Views/Home/InfoPlanOfStudy.cshtml index 3a97a3f..68c4eda 100644 --- a/University/UniversityClientAppWorker/Views/Home/InfoPlanOfStudy.cshtml +++ b/University/UniversityClientAppWorker/Views/Home/InfoPlanOfStudy.cshtml @@ -18,12 +18,16 @@
Преподаватели:
- + @foreach (var teacher in ViewBag.Teachers) + { +
+ + +
+ }
diff --git a/University/UniversityContracts/ViewModels/PlanOfStudyViewModel.cs b/University/UniversityContracts/ViewModels/PlanOfStudyViewModel.cs index 54f1527..69c4987 100644 --- a/University/UniversityContracts/ViewModels/PlanOfStudyViewModel.cs +++ b/University/UniversityContracts/ViewModels/PlanOfStudyViewModel.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; +using System.Text.Json.Serialization; using System.Threading.Tasks; using UniversityDataModels.Models; @@ -21,5 +22,13 @@ namespace UniversityContracts.ViewModels get; set; } = new(); + + public PlanOfStudyViewModel() { } + + [JsonConstructor] + public PlanOfStudyViewModel(Dictionary planOfStudyTeachers) + { + this.PlanOfStudyTeachers = planOfStudyTeachers.ToDictionary(x => x.Key, x => x.Value as ITeacherModel); + } } } diff --git a/University/UniversityDatabaseImplement/Implements/PlanOfStudyStorage.cs b/University/UniversityDatabaseImplement/Implements/PlanOfStudyStorage.cs index b52d9f8..96ae87e 100644 --- a/University/UniversityDatabaseImplement/Implements/PlanOfStudyStorage.cs +++ b/University/UniversityDatabaseImplement/Implements/PlanOfStudyStorage.cs @@ -18,7 +18,12 @@ namespace UniversityDatabaseImplement.Implements { using var context = new UniversityDatabase(); - return context.PlanOfStudys.Select(x => x.GetViewModel).ToList(); + return context.PlanOfStudys + .Include(x => x.Teachers) + .ThenInclude(t => t.Teacher) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); } public List GetDisciplineFromStudentsFromPlanOfStudys(PlanOfStudySearchModel model) @@ -59,6 +64,8 @@ namespace UniversityDatabaseImplement.Implements } using var context = new UniversityDatabase(); var query = context.PlanOfStudys + .Include(x => x.Teachers) + .ThenInclude(x => x.Teacher) .Include(x => x.Students) .Include(x => x.User) .AsQueryable(); @@ -80,7 +87,12 @@ namespace UniversityDatabaseImplement.Implements return null; } using var context = new UniversityDatabase(); - return context.PlanOfStudys.Include(x => x.User).FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))?.GetViewModel; + return context.PlanOfStudys + .Include(x => x.User) + .Include(x => x.Teachers) + .ThenInclude(x => x.Teacher) + .FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))? + .GetViewModel; } public PlanOfStudyViewModel? Insert(PlanOfStudyBindingModel model) diff --git a/University/UniversityDatabaseImplement/Models/PlanOfStudy.cs b/University/UniversityDatabaseImplement/Models/PlanOfStudy.cs index 8369bb3..f478f01 100644 --- a/University/UniversityDatabaseImplement/Models/PlanOfStudy.cs +++ b/University/UniversityDatabaseImplement/Models/PlanOfStudy.cs @@ -100,7 +100,7 @@ namespace UniversityDatabaseImplement.Models UserId = UserId, Profile = Profile, FormOfStudy = FormOfStudy, - PlanOfStudyTeachers = PlanOfStudyTeachers, + PlanOfStudyTeachers = PlanOfStudyTeachers }; } }