diff --git a/CarRepairShop/CarRepairShopBusinessLogic/BusinessLogics/ReportLogic.cs b/CarRepairShop/CarRepairShopBusinessLogic/BusinessLogics/ReportLogic.cs new file mode 100644 index 0000000..0b75b84 --- /dev/null +++ b/CarRepairShop/CarRepairShopBusinessLogic/BusinessLogics/ReportLogic.cs @@ -0,0 +1,111 @@ +using CarRepairShopBusinessLogic.OfficePackage; +using CarRepairShopBusinessLogic.OfficePackage.HelperModels; +using CarRepairShopContracts.BindingModels; +using CarRepairShopContracts.BusinessLogicsContracts; +using CarRepairShopContracts.SearchModels; +using CarRepairShopContracts.StoragesContracts; +using CarRepairShopContracts.ViewModels; +using DocumentFormat.OpenXml.Bibliography; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopBusinessLogic.BusinessLogics +{ + public class ReportLogic : IReportLogic + { + private readonly IComponentStorage _componentStorage; + private readonly IRepairStorage _repairStorage; + private readonly IOrderStorage _orderStorage; + private readonly AbstractSaveToExcel _saveToExcel; + private readonly AbstractSaveToWord _saveToWord; + private readonly AbstractSaveToPdf _saveToPdf; + + public ReportLogic(IRepairStorage repairStorage, IComponentStorage componentStorage, IOrderStorage orderStorage, AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf) + { + _repairStorage = repairStorage; + _componentStorage = componentStorage; + _orderStorage = orderStorage; + + _saveToExcel = saveToExcel; + _saveToWord = saveToWord; + _saveToPdf = saveToPdf; + } + + public List GetRepairComponent() + { + var components = _componentStorage.GetFullList(); + + var repairs = _repairStorage.GetFullList(); + + var list = new List(); + + foreach ( var repair in repairs ) + { + var record = new ReportRepairComponentViewModel + { + RepairName = repair.RepairName, + Components = new List<(string, int)>(), + TotalCount = 0 + }; + foreach(var component in components ) + { + if (repair.RepairComponents.ContainsKey(component.Id)) + { + record.Components.Add(new (component.ComponentName, repair.RepairComponents[component.Id].Item2)); + record.TotalCount += repair.RepairComponents[component.Id].Item2; + } + } + + list.Add(record); + } + return list; + } + + public List GetOrders(ReportBindingModel model) + { + return _orderStorage.GetFilteredList(new OrderSearchModel { DateFrom = model.DateFrom, DateTo = model.DateTo }).Select(x=>new ReportOrdersViewModel + { + Id = x.Id, + DateCreate = x.DateCreate, + RepairName = x.RepairName, + Sum = x.Sum, + OrderStatus = x.Status.ToString(), + }).ToList(); + } + + public void SaveComponentsToWordFile(ReportBindingModel model) + { + _saveToWord.CreateDoc(new WordInfo + { + FileName = model.FileName, + Title = "Cписок ремонтов", + Repairs = _repairStorage.GetFullList() + }); + } + + public void SaveRepairComponentToExcelFile(ReportBindingModel model) + { + _saveToExcel.CreateReport(new ExcelInfo + { + FileName = model.FileName, + Title = "Список компонент", + RepairComponents = GetRepairComponent() + }); + } + + public void SaveOrdersToPdfFile(ReportBindingModel model) + { + _saveToPdf.CreateDoc(new PdfInfo + { + FileName = model.FileName, + Title = "Список заказов", + DateFrom = model.DateFrom!.Value, + DateTo = model.DateTo!.Value, + Orders = GetOrders(model) + }); + } + } +} diff --git a/CarRepairShop/CarRepairShopBusinessLogic/CarRepairShopBusinessLogic.csproj b/CarRepairShop/CarRepairShopBusinessLogic/CarRepairShopBusinessLogic.csproj index a065f64..d097b76 100644 --- a/CarRepairShop/CarRepairShopBusinessLogic/CarRepairShopBusinessLogic.csproj +++ b/CarRepairShop/CarRepairShopBusinessLogic/CarRepairShopBusinessLogic.csproj @@ -9,6 +9,9 @@ + + + diff --git a/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/AbstractSaveToExcel.cs b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/AbstractSaveToExcel.cs index f03c5cb..e37b979 100644 --- a/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/AbstractSaveToExcel.cs +++ b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/AbstractSaveToExcel.cs @@ -36,12 +36,12 @@ namespace CarRepairShopBusinessLogic.OfficePackage { ColumnName = "A", RowIndex = rowIndex, - Text = rc.ComponentName, + Text = rc.RepairName, StyleInfo = ExcelStyleInfoType.Text }); rowIndex++; - foreach(var repair in rc.Repairs) + foreach(var repair in rc.Components) { InsertCellInWorksheet(new ExcelCellParameters { diff --git a/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/AbstractSaveToPdf.cs b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/AbstractSaveToPdf.cs new file mode 100644 index 0000000..a14869f --- /dev/null +++ b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/AbstractSaveToPdf.cs @@ -0,0 +1,52 @@ +using CarRepairShopBusinessLogic.OfficePackage.HelperEnums; +using CarRepairShopBusinessLogic.OfficePackage.HelperModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopBusinessLogic.OfficePackage +{ + public abstract class AbstractSaveToPdf + { + + public void CreateDoc(PdfInfo info) + { + CreatePdf(info); + CreateParagraph(new PdfParagraph { Text = info.Title, Style = "NormalTitle", ParagraphAligment = PdfParagraphAlignmentType.Center }); + CreateParagraph(new PdfParagraph { Text = $"с {info.DateFrom.ToShortDateString()} по {info.DateTo.ToShortDateString()}", Style = "Normal", ParagraphAligment = PdfParagraphAlignmentType.Center }); + + CreateTable(new List { "2cm", "3cm", "6cm", "3cm" }); + + CreateRow(new PdfRowParameters + { + Texts = new List { "Номер", "Дата заказа", "Ремонт", "Сумма" }, + Style = "NormalTitle", + ParagraphAligment = PdfParagraphAlignmentType.Center + }); + + foreach(var order in info.Orders) + { + CreateRow(new PdfRowParameters + { + Texts = new List { order.Id.ToString(), order.DateCreate.ToShortDateString(), order.RepairName, order.Sum.ToString() }, + Style = "Normal", + ParagraphAligment = PdfParagraphAlignmentType.Right + }); + } + CreateParagraph(new PdfParagraph { Text = $"Итого: {info.Orders.Sum(x => x.Sum)}\t", Style = "Normal", ParagraphAligment = 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/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/AbstractSaveToWord.cs b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/AbstractSaveToWord.cs index ed969df..d2c148b 100644 --- a/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/AbstractSaveToWord.cs +++ b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/AbstractSaveToWord.cs @@ -23,13 +23,13 @@ namespace CarRepairShopBusinessLogic.OfficePackage } }); - foreach (var component in info.Components) + foreach (var repair in info.Repairs) { CreateParagraph(new WordParagraph { Texts = new List<(string, WordTextProperties)> { - (component.ComponentName, new WordTextProperties{Size = "24", }) + (repair.RepairName, new WordTextProperties{Size = "24", Bold = true}), (" "+repair.Price.ToString(), new WordTextProperties{Size = "24"} ) }, TextProperties = new WordTextProperties { diff --git a/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAligmentType.cs b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAligmentType.cs new file mode 100644 index 0000000..7a32802 --- /dev/null +++ b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAligmentType.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopBusinessLogic.OfficePackage.HelperEnums +{ + public enum PdfParagraphAlignmentType + { + Center, + Left, + Right + } +} diff --git a/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs new file mode 100644 index 0000000..551bb0c --- /dev/null +++ b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs @@ -0,0 +1,23 @@ +using CarRepairShopContracts.BindingModels; +using CarRepairShopContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopBusinessLogic.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/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperModels/PdfParagraph.cs b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperModels/PdfParagraph.cs new file mode 100644 index 0000000..16bfa82 --- /dev/null +++ b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperModels/PdfParagraph.cs @@ -0,0 +1,16 @@ +using CarRepairShopBusinessLogic.OfficePackage.HelperEnums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopBusinessLogic.OfficePackage.HelperModels +{ + public class PdfParagraph + { + public string Text { get; set; } = string.Empty; + public string Style { get; set; } = string.Empty; + public PdfParagraphAlignmentType ParagraphAligment { get; set; } + } +} diff --git a/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperModels/PdfRowParameters.cs b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperModels/PdfRowParameters.cs new file mode 100644 index 0000000..62f6037 --- /dev/null +++ b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperModels/PdfRowParameters.cs @@ -0,0 +1,18 @@ +using CarRepairShopBusinessLogic.OfficePackage.HelperEnums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopBusinessLogic.OfficePackage.HelperModels +{ + public class PdfRowParameters + { + public List Texts { get; set; } = new(); + + public string Style { get; set; } = string.Empty; + + public PdfParagraphAlignmentType ParagraphAligment { get; set; } + } +} diff --git a/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperModels/WordInfo.cs b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperModels/WordInfo.cs index ec01962..d20ebd7 100644 --- a/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperModels/WordInfo.cs +++ b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/HelperModels/WordInfo.cs @@ -11,6 +11,6 @@ namespace CarRepairShopBusinessLogic.OfficePackage.HelperModels { public string FileName { get; set; } = string.Empty; public string Title { get; set; } = string.Empty; - public List Components { get; set; } = new(); + public List Repairs { get; set; } = new(); } } diff --git a/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/Implements/SaveToPdf.cs b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/Implements/SaveToPdf.cs new file mode 100644 index 0000000..c89563f --- /dev/null +++ b/CarRepairShop/CarRepairShopBusinessLogic/OfficePackage/Implements/SaveToPdf.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CarRepairShopBusinessLogic.OfficePackage.HelperEnums; +using CarRepairShopBusinessLogic.OfficePackage.HelperModels; +using MigraDoc.DocumentObjectModel; +using MigraDoc.DocumentObjectModel.Tables; +using MigraDoc.Rendering; + + +namespace CarRepairShopBusinessLogic.OfficePackage.Implements +{ + public class SaveToPdf : AbstractSaveToPdf + { + private Document? _document; + + private Section? _section; + + private Table? _table; + + private static ParagraphAlignment GetParagraphAligment(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 = GetParagraphAligment(pdfParagraph.ParagraphAligment); + 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> Repairs { get; set; } = new(); + public List<(string,int)> Components { get; set; } = new(); } } diff --git a/CarRepairShop/CarRepairShopDatabaseImplement/CarRepairShopDatabase.cs b/CarRepairShop/CarRepairShopDatabaseImplement/CarRepairShopDatabase.cs index a5aa8c6..e5eaf24 100644 --- a/CarRepairShop/CarRepairShopDatabaseImplement/CarRepairShopDatabase.cs +++ b/CarRepairShop/CarRepairShopDatabaseImplement/CarRepairShopDatabase.cs @@ -14,7 +14,7 @@ namespace CarRepairShopDatabaseImplement { if(optionsBuilder.IsConfigured == false) { - optionsBuilder.UseSqlServer(@"Data Source=.\SQLEXPRESS;Initial Catalog=CarRapirShopDatabase;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True"); + optionsBuilder.UseSqlServer(@"Data Source=.\SQLEXPRESS;Initial Catalog=CarRapirShopDatabase;Integrated Security=True;MultipleActiveResultSets=True;TrustServerCertificate=True"); } base.OnConfiguring(optionsBuilder); } diff --git a/CarRepairShop/CarRepairShopDatabaseImplement/Implements/OrderStorage.cs b/CarRepairShop/CarRepairShopDatabaseImplement/Implements/OrderStorage.cs index 0cbc9f2..8dd0324 100644 --- a/CarRepairShop/CarRepairShopDatabaseImplement/Implements/OrderStorage.cs +++ b/CarRepairShop/CarRepairShopDatabaseImplement/Implements/OrderStorage.cs @@ -3,6 +3,8 @@ using CarRepairShopContracts.SearchModels; using CarRepairShopContracts.StoragesContracts; using CarRepairShopContracts.ViewModels; using CarRepairShopDatabaseImplement.Models; +using DocumentFormat.OpenXml.InkML; +using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; @@ -16,16 +18,22 @@ namespace CarRepairShopDatabaseImplement.Implements public List GetFullList() { using var context = new CarRepairShopDatabase(); - return context.Orders.Select(x => GetFullOrder(x.GetViewModel)).ToList(); + return context.Orders.Select(x => GetFullOrder(x.GetViewModel, context)).ToList(); } public List GetFilteredList(OrderSearchModel model) { - if(!model.Id.HasValue) + if (!model.DateFrom.HasValue && !model.DateTo.HasValue) { return new(); } using var context = new CarRepairShopDatabase(); - return context.Orders.Where(x => x.Id == model.Id).Select(x => GetFullOrder(x.GetViewModel)).ToList(); + + if (model.DateFrom.HasValue) + { + return context.Orders.Include(x => x.Repair).Where(x => x.DateCreate >= model.DateFrom && x.DateCreate <= model.DateTo).Select(x => GetFullOrder(x.GetViewModel, context)).ToList(); + } + + return context.Orders.Where(x => x.Id == model.Id).Select(x => GetFullOrder(x.GetViewModel, context)).ToList(); } public OrderViewModel? GetElement(OrderSearchModel model) { @@ -34,7 +42,7 @@ namespace CarRepairShopDatabaseImplement.Implements return null; } using var context = new CarRepairShopDatabase(); - return GetFullOrder(context.Orders.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id).GetViewModel); + return GetFullOrder(context.Orders.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id).GetViewModel, context); } public OrderViewModel? Insert(OrderBindingModel model) { @@ -46,7 +54,7 @@ namespace CarRepairShopDatabaseImplement.Implements using var context = new CarRepairShopDatabase(); context.Orders.Add(newOrder); context.SaveChanges(); - return GetFullOrder(newOrder.GetViewModel); + return GetFullOrder(newOrder.GetViewModel, context); } public OrderViewModel? Update(OrderBindingModel model) { @@ -58,7 +66,7 @@ namespace CarRepairShopDatabaseImplement.Implements } order.Update(model); context.SaveChanges(); - return GetFullOrder(order.GetViewModel); + return GetFullOrder(order.GetViewModel, context); } public OrderViewModel? Delete(OrderBindingModel model) { @@ -68,15 +76,15 @@ namespace CarRepairShopDatabaseImplement.Implements { context.Orders.Remove(element); context.SaveChanges(); - return GetFullOrder(element.GetViewModel); + return GetFullOrder(element.GetViewModel, context); } return null; } - private static OrderViewModel GetFullOrder(OrderViewModel model) + private static OrderViewModel GetFullOrder(OrderViewModel model, CarRepairShopDatabase context) { - using var context = new CarRepairShopDatabase(); - model.RepairName = context.Repairs.FirstOrDefault(x => x.Id == model.RepairId)!.RepairName; + string? repairName = context.Repairs.FirstOrDefault(x => x.Id == model.RepairId)?.RepairName; + if (repairName != null) model.RepairName = repairName; return model; } } diff --git a/CarRepairShop/CarRepairShopDatabaseImplement/Models/Order.cs b/CarRepairShop/CarRepairShopDatabaseImplement/Models/Order.cs index 5147aea..cf98d7c 100644 --- a/CarRepairShop/CarRepairShopDatabaseImplement/Models/Order.cs +++ b/CarRepairShop/CarRepairShopDatabaseImplement/Models/Order.cs @@ -32,6 +32,8 @@ namespace CarRepairShopDatabaseImplement.Models public DateTime? DateImplement { get; set; } + public Repair Repair { get; set; } + public static Order? Create(OrderBindingModel model) { if (model == null) diff --git a/CarRepairShop/CarRepairShopView/CarRepairShopView.csproj b/CarRepairShop/CarRepairShopView/CarRepairShopView.csproj index 6a40b62..456bc44 100644 --- a/CarRepairShop/CarRepairShopView/CarRepairShopView.csproj +++ b/CarRepairShop/CarRepairShopView/CarRepairShopView.csproj @@ -30,12 +30,14 @@ + + diff --git a/CarRepairShop/CarRepairShopView/DataSources/CarRepairShopContracts.BusinessLogicsContracts.IComponentLogic.datasource b/CarRepairShop/CarRepairShopView/DataSources/CarRepairShopContracts.BusinessLogicsContracts.IComponentLogic.datasource new file mode 100644 index 0000000..3a9a570 --- /dev/null +++ b/CarRepairShop/CarRepairShopView/DataSources/CarRepairShopContracts.BusinessLogicsContracts.IComponentLogic.datasource @@ -0,0 +1,10 @@ + + + + CarRepairShopContracts.BusinessLogicsContracts.IComponentLogic, CarRepairShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/FormMain.Designer.cs b/CarRepairShop/CarRepairShopView/FormMain.Designer.cs index ec5b8c0..1d3193c 100644 --- a/CarRepairShop/CarRepairShopView/FormMain.Designer.cs +++ b/CarRepairShop/CarRepairShopView/FormMain.Designer.cs @@ -32,6 +32,10 @@ справочникиToolStripMenuItem = new ToolStripMenuItem(); компонентыToolStripMenuItem = new ToolStripMenuItem(); изделияToolStripMenuItem = new ToolStripMenuItem(); + отчетыToolStripMenuItem = new ToolStripMenuItem(); + ComponentsToolStripMenuItem = new ToolStripMenuItem(); + ComponentRepairsToolStripMenuItem = new ToolStripMenuItem(); + OrdersToolStripMenuItem = new ToolStripMenuItem(); dataGridView = new DataGridView(); buttonCreateOrder = new Button(); buttonTakeOrderInWork = new Button(); @@ -44,7 +48,7 @@ // // menuStrip1 // - menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem }); + menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, отчетыToolStripMenuItem }); menuStrip1.Location = new Point(0, 0); menuStrip1.Name = "menuStrip1"; menuStrip1.Size = new Size(1059, 24); @@ -72,6 +76,34 @@ изделияToolStripMenuItem.Text = "Ремонт"; изделияToolStripMenuItem.Click += ремонтToolStripMenuItem_Click; // + // отчетыToolStripMenuItem + // + отчетыToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { ComponentsToolStripMenuItem, ComponentRepairsToolStripMenuItem, OrdersToolStripMenuItem }); + отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem"; + отчетыToolStripMenuItem.Size = new Size(60, 20); + отчетыToolStripMenuItem.Text = "Отчеты"; + // + // ComponentsToolStripMenuItem + // + ComponentsToolStripMenuItem.Name = "ComponentsToolStripMenuItem"; + ComponentsToolStripMenuItem.Size = new Size(221, 22); + ComponentsToolStripMenuItem.Text = "Список ремонтов"; + ComponentsToolStripMenuItem.Click += ComponentsToolStripMenuItem_Click; + // + // ComponentRepairsToolStripMenuItem + // + ComponentRepairsToolStripMenuItem.Name = "ComponentRepairsToolStripMenuItem"; + ComponentRepairsToolStripMenuItem.Size = new Size(221, 22); + ComponentRepairsToolStripMenuItem.Text = "Компоненты по ремонтам"; + ComponentRepairsToolStripMenuItem.Click += ComponentRepairsToolStripMenuItem_Click; + // + // OrdersToolStripMenuItem + // + OrdersToolStripMenuItem.Name = "OrdersToolStripMenuItem"; + OrdersToolStripMenuItem.Size = new Size(221, 22); + OrdersToolStripMenuItem.Text = "Список заказов"; + OrdersToolStripMenuItem.Click += OrdersToolStripMenuItem_Click; + // // dataGridView // dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; @@ -177,5 +209,9 @@ private Button buttonOrderReady; private Button buttonIssuedOrder; private Button buttonRef; + private ToolStripMenuItem отчетыToolStripMenuItem; + private ToolStripMenuItem ComponentsToolStripMenuItem; + private ToolStripMenuItem ComponentRepairsToolStripMenuItem; + private ToolStripMenuItem OrdersToolStripMenuItem; } } \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/FormMain.cs b/CarRepairShop/CarRepairShopView/FormMain.cs index f2c829a..88d91bc 100644 --- a/CarRepairShop/CarRepairShopView/FormMain.cs +++ b/CarRepairShop/CarRepairShopView/FormMain.cs @@ -18,11 +18,13 @@ namespace CarRepairShopView { private readonly ILogger _logger; private readonly IOrderLogic _orderLogic; - public FormMain(ILogger logger, IOrderLogic orderLogic) + private readonly IReportLogic _reportLogic; + public FormMain(ILogger logger, IOrderLogic orderLogic, IReportLogic reportLogic) { InitializeComponent(); _logger = logger; _orderLogic = orderLogic; + _reportLogic = reportLogic; } private void FormMain_Load(object sender, EventArgs e) @@ -77,7 +79,8 @@ namespace CarRepairShopView _logger.LogInformation("Заказ №{id}. Меняется статус на 'В работе'", id); try { - var operationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel { + var operationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel + { Id = id, Status = Enum.Parse(dataGridView.SelectedRows[0].Cells["Status"].Value.ToString()), }); @@ -103,7 +106,8 @@ namespace CarRepairShopView _logger.LogInformation("Заказ №{id}. Меняется статус на 'Готов'", id); try { - var operationResult = _orderLogic.FinishOrder(new OrderBindingModel { + var operationResult = _orderLogic.FinishOrder(new OrderBindingModel + { Id = id, Status = Enum.Parse(dataGridView.SelectedRows[0].Cells["Status"].Value.ToString()), }); @@ -129,7 +133,8 @@ namespace CarRepairShopView _logger.LogInformation("Заказ №{id}. Меняется статус на 'Выдан'", id); try { - var operationResult = _orderLogic.DeliveryOrder(new OrderBindingModel { + var operationResult = _orderLogic.DeliveryOrder(new OrderBindingModel + { Id = id, Status = Enum.Parse(dataGridView.SelectedRows[0].Cells["Status"].Value.ToString()), }); @@ -151,5 +156,34 @@ namespace CarRepairShopView { LoadData(); } + + private void ComponentsToolStripMenuItem_Click(object sender, EventArgs e) + { + using var dialog = new SaveFileDialog { Filter = "docx|*.docx" }; + if (dialog.ShowDialog() == DialogResult.OK) + { + _reportLogic.SaveComponentsToWordFile(new ReportBindingModel { FileName = dialog.FileName }); + MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void ComponentRepairsToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormReportRepairComponents)); + if (service is FormReportRepairComponents form) + { + form.ShowDialog(); + } + } + + + private void OrdersToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormReportOrders)); + if(service is FormReportOrders form) + { + form.ShowDialog(); + } + } } } diff --git a/CarRepairShop/CarRepairShopView/FormMain.resx b/CarRepairShop/CarRepairShopView/FormMain.resx index 5203d24..a0623c8 100644 --- a/CarRepairShop/CarRepairShopView/FormMain.resx +++ b/CarRepairShop/CarRepairShopView/FormMain.resx @@ -18,7 +18,7 @@ System.Resources.ResXResourceReader, System.Windows.Forms, ... System.Resources.ResXResourceWriter, System.Windows.Forms, ... this is my long stringthis is a comment - Blue + Blue [base64 mime encoded serialized .NET Framework object] diff --git a/CarRepairShop/CarRepairShopView/FormReportOrders.Designer.cs b/CarRepairShop/CarRepairShopView/FormReportOrders.Designer.cs new file mode 100644 index 0000000..84ee42d --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormReportOrders.Designer.cs @@ -0,0 +1,130 @@ +namespace CarRepairShopView +{ + partial class FormReportOrders + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel = new Panel(); + buttonToPdf = new Button(); + buttonMake = new Button(); + label2 = new Label(); + dateTimePickerTo = new DateTimePicker(); + dateTimePickerFrom = new DateTimePicker(); + label1 = new Label(); + panel.SuspendLayout(); + SuspendLayout(); + // + // panel + // + panel.Controls.Add(buttonToPdf); + panel.Controls.Add(buttonMake); + panel.Controls.Add(label2); + panel.Controls.Add(dateTimePickerTo); + panel.Controls.Add(dateTimePickerFrom); + panel.Controls.Add(label1); + panel.Dock = DockStyle.Top; + panel.Location = new Point(0, 0); + panel.Name = "panel"; + panel.Size = new Size(916, 47); + panel.TabIndex = 0; + // + // buttonToPdf + // + buttonToPdf.Location = new Point(778, 12); + buttonToPdf.Name = "buttonToPdf"; + buttonToPdf.Size = new Size(126, 23); + buttonToPdf.TabIndex = 5; + buttonToPdf.Text = "В Pdf"; + buttonToPdf.UseVisualStyleBackColor = true; + buttonToPdf.Click += buttonToPdf_Click; + // + // buttonMake + // + buttonMake.Location = new Point(391, 12); + buttonMake.Name = "buttonMake"; + buttonMake.Size = new Size(137, 23); + buttonMake.TabIndex = 4; + buttonMake.Text = "Сформировать"; + buttonMake.UseVisualStyleBackColor = true; + buttonMake.Click += buttonMake_Click; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(184, 18); + label2.Name = "label2"; + label2.Size = new Size(21, 15); + label2.TabIndex = 3; + label2.Text = "по"; + // + // dateTimePickerTo + // + dateTimePickerTo.Location = new Point(211, 12); + dateTimePickerTo.Name = "dateTimePickerTo"; + dateTimePickerTo.Size = new Size(150, 23); + dateTimePickerTo.TabIndex = 2; + // + // dateTimePickerFrom + // + dateTimePickerFrom.Location = new Point(28, 12); + dateTimePickerFrom.Name = "dateTimePickerFrom"; + dateTimePickerFrom.Size = new Size(150, 23); + dateTimePickerFrom.TabIndex = 1; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(7, 18); + label1.Name = "label1"; + label1.Size = new Size(15, 15); + label1.TabIndex = 0; + label1.Text = "С"; + // + // FormReportOrders + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(916, 454); + Controls.Add(panel); + Name = "FormReportOrders"; + Text = "FormReportOrders"; + panel.ResumeLayout(false); + panel.PerformLayout(); + ResumeLayout(false); + } + + #endregion + + private Panel panel; + private DateTimePicker dateTimePickerFrom; + private Label label1; + private Button buttonToPdf; + private Button buttonMake; + private Label label2; + private DateTimePicker dateTimePickerTo; + } +} \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/FormReportOrders.cs b/CarRepairShop/CarRepairShopView/FormReportOrders.cs new file mode 100644 index 0000000..133b1db --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormReportOrders.cs @@ -0,0 +1,102 @@ +using CarRepairShopContracts.BindingModels; +using CarRepairShopContracts.BusinessLogicsContracts; +using DocumentFormat.OpenXml.Spreadsheet; +using Microsoft.Extensions.Logging; +using Microsoft.Reporting.WinForms; +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 CarRepairShopView +{ + public partial class FormReportOrders : Form + { + + private readonly ReportViewer reportViewer; + + private readonly ILogger _logger; + + private readonly IReportLogic _logic; + + public FormReportOrders(ILogger logger, IReportLogic logic) + { + InitializeComponent(); + _logger = logger; + _logic = logic; + reportViewer = new ReportViewer + { + Dock = DockStyle.Fill + }; + var path = Directory.GetParent(Directory.GetCurrentDirectory())?.Parent?.Parent?.ToString() + "\\ReportOrders.rdlc"; + reportViewer.LocalReport.LoadReportDefinition(new FileStream(path, FileMode.Open)); + Controls.Clear(); + Controls.Add(reportViewer); + Controls.Add(panel); + } + + private void buttonMake_Click(object sender, EventArgs e) + { + if (dateTimePickerFrom.Value.Date >= dateTimePickerTo.Value.Date) + { + MessageBox.Show("Дата начала должна быть меньше даты окончания", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + try + { + var dataSource = _logic.GetOrders(new ReportBindingModel + { + DateFrom = dateTimePickerFrom.Value, + DateTo = dateTimePickerTo.Value + }); + var source = new ReportDataSource("DataSetOrders", dataSource); + reportViewer.LocalReport.DataSources.Clear(); + reportViewer.LocalReport.DataSources.Add(source); + var parameters = new[] { new ReportParameter("ReportParameterPeriod", $"с {dateTimePickerFrom.Value.ToShortDateString()} по {dateTimePickerTo.Value.ToShortDateString()}") }; + reportViewer.LocalReport.SetParameters(parameters); + + reportViewer.RefreshReport(); + _logger.LogInformation("Загрузка списка заказов на период {From}-{To}", dateTimePickerFrom.Value.ToShortDateString(), dateTimePickerTo.Value.ToShortDateString()); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки списка заказов на период"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonToPdf_Click(object sender, EventArgs e) + { + if (dateTimePickerFrom.Value.Date >= dateTimePickerTo.Value.Date) + { + MessageBox.Show("Дата начала должна быть меньше даты окончания", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + using var dialog = new SaveFileDialog { Filter = "pdf|*.pdf" }; + if(dialog.ShowDialog() == DialogResult.OK) + { + try + { + _logic.SaveOrdersToPdfFile(new ReportBindingModel + { + FileName = dialog.FileName, + DateFrom = dateTimePickerFrom.Value.Date, + DateTo = dateTimePickerTo.Value.Date, + }); + _logger.LogInformation("Сохранение списка заказов на период {from}-{to}", dateTimePickerFrom.Value.ToShortDateString(), dateTimePickerTo.Value.ToShortDateString()); + MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch(Exception ex) + { + _logger.LogError(ex, "Ошибка сохранения списка заказов на период"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } +} diff --git a/CarRepairShop/CarRepairShopView/FormReportOrders.resx b/CarRepairShop/CarRepairShopView/FormReportOrders.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormReportOrders.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/FormReportRepairComponents.Designer.cs b/CarRepairShop/CarRepairShopView/FormReportRepairComponents.Designer.cs new file mode 100644 index 0000000..483fbfc --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormReportRepairComponents.Designer.cs @@ -0,0 +1,112 @@ +namespace CarRepairShopView +{ + partial class FormReportRepairComponents + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + buttonSaveToExcel = new Button(); + dataGridView = new DataGridView(); + ColumnComponent = new DataGridViewTextBoxColumn(); + ColumnRepair = new DataGridViewTextBoxColumn(); + ColumnCount = new DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // buttonSaveToExcel + // + buttonSaveToExcel.Location = new Point(12, 9); + buttonSaveToExcel.Name = "buttonSaveToExcel"; + buttonSaveToExcel.Size = new Size(133, 32); + buttonSaveToExcel.TabIndex = 0; + buttonSaveToExcel.Text = "Сохранить в Excel"; + buttonSaveToExcel.UseVisualStyleBackColor = true; + buttonSaveToExcel.Click += buttonSaveToExcel_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.BackgroundColor = Color.White; + dataGridView.CellBorderStyle = DataGridViewCellBorderStyle.Raised; + dataGridView.ClipboardCopyMode = DataGridViewClipboardCopyMode.Disable; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnComponent, ColumnRepair, ColumnCount }); + dataGridView.Dock = DockStyle.Bottom; + dataGridView.Location = new Point(0, 47); + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single; + dataGridView.RowHeadersVisible = false; + dataGridView.RowTemplate.Height = 25; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(498, 420); + dataGridView.TabIndex = 1; + // + // ColumnComponent + // + ColumnComponent.HeaderText = "Компонент"; + ColumnComponent.Name = "ColumnComponent"; + ColumnComponent.ReadOnly = true; + // + // ColumnRepair + // + ColumnRepair.HeaderText = "Ремонт"; + ColumnRepair.Name = "ColumnRepair"; + ColumnRepair.ReadOnly = true; + // + // ColumnCount + // + ColumnCount.HeaderText = "Количество"; + ColumnCount.Name = "ColumnCount"; + ColumnCount.ReadOnly = true; + // + // FormReportRepairComponents + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(498, 467); + Controls.Add(dataGridView); + Controls.Add(buttonSaveToExcel); + Name = "FormReportRepairComponents"; + Text = "Компоненты по ремонтам"; + Load += FormReportRepairComponents_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Button buttonSaveToExcel; + private DataGridView dataGridView; + private DataGridViewTextBoxColumn ColumnComponent; + private DataGridViewTextBoxColumn ColumnRepair; + private DataGridViewTextBoxColumn ColumnCount; + } +} \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/FormReportRepairComponents.cs b/CarRepairShop/CarRepairShopView/FormReportRepairComponents.cs new file mode 100644 index 0000000..e710f6e --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormReportRepairComponents.cs @@ -0,0 +1,80 @@ +using CarRepairShopContracts.BindingModels; +using CarRepairShopContracts.BusinessLogicsContracts; +using Microsoft.Extensions.Logging; +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 CarRepairShopView +{ + public partial class FormReportRepairComponents : Form + { + + private readonly ILogger _logger; + + private readonly IReportLogic _logic; + + public FormReportRepairComponents(ILogger logger, IReportLogic logic) + { + InitializeComponent(); + _logger = logger; + _logic = logic; + } + + private void FormReportRepairComponents_Load(object sender, EventArgs e) + { + try + { + var dict = _logic.GetRepairComponent(); + if (dict != null) + { + dataGridView.Rows.Clear(); + foreach (var elem in dict) + { + dataGridView.Rows.Add(new object[] { elem.RepairName, "", "" }); + foreach (var listElem in elem.Components) + { + dataGridView.Rows.Add(new object[] { "", listElem.Item1, listElem.Item2 }); + } + dataGridView.Rows.Add(new object[] { "Итого", "", elem.TotalCount }); + dataGridView.Rows.Add(Array.Empty()); + } + } + _logger.LogInformation("Загрузка списка компонент по ремонтам"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки списка компонент по ремонтам"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonSaveToExcel_Click(object sender, EventArgs e) + { + using var dialog = new SaveFileDialog { Filter = "xlsx|*.xlsx" }; + if (dialog.ShowDialog() == DialogResult.OK) + { + try + { + _logic.SaveRepairComponentToExcelFile(new ReportBindingModel + { + FileName = dialog.FileName + }); + _logger.LogInformation("Сохранение списка изедий по компонентам"); + MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch(Exception ex) + { + _logger.LogError(ex, "Ошибка сохранения списка ремонтов по компонентам"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } +} diff --git a/CarRepairShop/CarRepairShopView/FormReportRepairComponents.resx b/CarRepairShop/CarRepairShopView/FormReportRepairComponents.resx new file mode 100644 index 0000000..0df6b74 --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormReportRepairComponents.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/Program.cs b/CarRepairShop/CarRepairShopView/Program.cs index 902e082..5db5ca3 100644 --- a/CarRepairShop/CarRepairShopView/Program.cs +++ b/CarRepairShop/CarRepairShopView/Program.cs @@ -1,4 +1,6 @@ using CarRepairShopBusinessLogic.BusinessLogics; +using CarRepairShopBusinessLogic.OfficePackage; +using CarRepairShopBusinessLogic.OfficePackage.Implements; using CarRepairShopContracts.BusinessLogicsContracts; using CarRepairShopContracts.StoragesContracts; using CarRepairShopDatabaseImplement.Implements; @@ -40,9 +42,16 @@ namespace CarRepairShopView services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); + + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); @@ -50,6 +59,8 @@ namespace CarRepairShopView services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); + services.AddTransient(); } } } \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.BusinessLogicsContracts.IOrderLogic.datasource b/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.BusinessLogicsContracts.IOrderLogic.datasource new file mode 100644 index 0000000..7d4cf31 --- /dev/null +++ b/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.BusinessLogicsContracts.IOrderLogic.datasource @@ -0,0 +1,10 @@ + + + + CarRepairShopContracts.BusinessLogicsContracts.IOrderLogic, CarRepairShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.BusinessLogicsContracts.IRepairLogic.datasource b/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.BusinessLogicsContracts.IRepairLogic.datasource new file mode 100644 index 0000000..b66f6ff --- /dev/null +++ b/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.BusinessLogicsContracts.IRepairLogic.datasource @@ -0,0 +1,10 @@ + + + + CarRepairShopContracts.BusinessLogicsContracts.IRepairLogic, CarRepairShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.BusinessLogicsContracts.IReportLogic.datasource b/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.BusinessLogicsContracts.IReportLogic.datasource new file mode 100644 index 0000000..40b408e --- /dev/null +++ b/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.BusinessLogicsContracts.IReportLogic.datasource @@ -0,0 +1,10 @@ + + + + CarRepairShopContracts.BusinessLogicsContracts.IReportLogic, CarRepairShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.StoragesContracts.IComponentStorage.datasource b/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.StoragesContracts.IComponentStorage.datasource new file mode 100644 index 0000000..3878009 --- /dev/null +++ b/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.StoragesContracts.IComponentStorage.datasource @@ -0,0 +1,10 @@ + + + + CarRepairShopContracts.StoragesContracts.IComponentStorage, CarRepairShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.StoragesContracts.IOrderStorage.datasource b/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.StoragesContracts.IOrderStorage.datasource new file mode 100644 index 0000000..a3dc55a --- /dev/null +++ b/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.StoragesContracts.IOrderStorage.datasource @@ -0,0 +1,10 @@ + + + + CarRepairShopContracts.StoragesContracts.IOrderStorage, CarRepairShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.StoragesContracts.IRepairStorage.datasource b/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.StoragesContracts.IRepairStorage.datasource new file mode 100644 index 0000000..89b6ddd --- /dev/null +++ b/CarRepairShop/CarRepairShopView/Properties/DataSources/CarRepairShopContracts.StoragesContracts.IRepairStorage.datasource @@ -0,0 +1,10 @@ + + + + CarRepairShopContracts.StoragesContracts.IRepairStorage, CarRepairShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/ReportOrders.rdlc b/CarRepairShop/CarRepairShopView/ReportOrders.rdlc new file mode 100644 index 0000000..995b5cc --- /dev/null +++ b/CarRepairShop/CarRepairShopView/ReportOrders.rdlc @@ -0,0 +1,585 @@ + + + 0 + + + + System.Data.DataSet + /* Local Connection */ + + 10791c83-cee8-4a38-bbd0-245fc17cefb3 + + + + + + CarRepairShopContractsViewModels + /* Local Query */ + + + + Id + System.Int32 + + + DateCreate + System.DateTime + + + RepairName + System.String + + + OrderStatus + System.String + + + Sum + System.Decimal + + + + CarRepairShopContracts.ViewModels + ReportOrdersViewModel + CarRepairShopContracts.ViewModels.ReportOrdersViewModel, CarRepairShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + + + + + + + + + true + true + + + + + Заказы + + + + + + + 0.07056cm + 0.74817cm + 20.40786cm + + + 2pt + 2pt + 2pt + 2pt + + + + + + + 4.65194cm + + + 3.9605cm + + + 4.65194cm + + + 2.5cm + + + 3.82644cm + + + + + 0.6cm + + + + + true + true + + + + + Номер + + + + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + Дата создания + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + Изделие + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + Статус заказа + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + Сумма + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + 0.6cm + + + + + true + true + + + + + =Fields!Id.Value + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Fields!DateCreate.Value + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Fields!RepairName.Value + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Fields!OrderStatus.Value + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Fields!Sum.Value + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + + + + + + + + + + + + + + After + + + + + + + DataSetOrders + 2.4892cm + 0.3937cm + 1.2cm + 19.59082cm + 1 + + + + + + true + true + + + + + =Parameters!ReportParameterPeriod.Value + + + + + + + 0.88928cm + 0.78148cm + 20.40786cm + 2 + + + 2pt + 2pt + 2pt + 2pt + + + + true + true + + + + + Итого: + + + + + + 2pt + 2pt + 2pt + 2pt + + + + true + true + + + + + =Sum(Fields!Sum.Value, "DataSetOrders") + + + + + + 2pt + 2pt + 2pt + 2pt + + + + 2in +