вроде готово

This commit is contained in:
Milana Ievlewa 2024-05-02 19:47:10 +03:00
parent e4f26967a4
commit 0f41c75076
45 changed files with 3118 additions and 1355 deletions

View File

@ -14,107 +14,115 @@ namespace ComputersShopBusinessLogic.BusinessLogics
{ {
public class ImplementerLogic : IImplementerLogic public class ImplementerLogic : IImplementerLogic
{ {
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly IImplementerStorage _implementerStorage; private readonly IImplementerStorage _implementerStorage;
public ImplementerLogic(ILogger<IImplementerLogic> logger, IImplementerStorage implementerStorage) public ImplementerLogic(ILogger<ImplementerLogic> logger, IImplementerStorage implementerStorage)
{ {
_logger = logger; _logger = logger;
_implementerStorage = implementerStorage; _implementerStorage = implementerStorage;
} }
public bool Create(ImplementerBindingModel model)
{
CheckModel(model);
if (_implementerStorage.Insert(model) == null)
{
_logger.LogWarning("Insert operation failed");
return false;
}
return true;
}
public bool Delete(ImplementerBindingModel model) public bool Create(ImplementerBindingModel model)
{ {
CheckModel(model, false); CheckModel(model);
_logger.LogInformation("Delete. Id:{Id}", model.Id); if (_implementerStorage.Insert(model) == null)
if (_implementerStorage.Delete(model) == null) {
{ _logger.LogWarning("Insert operation failed");
_logger.LogWarning("Delete operation failed"); return false;
return false; }
} return true;
return true; }
}
public ImplementerViewModel? ReadElement(ImplementerSearchModel model) public bool Delete(ImplementerBindingModel model)
{ {
if (model == null) CheckModel(model, false);
{ _logger.LogInformation("Delete. Id:{Id}", model.Id);
throw new ArgumentNullException(nameof(model)); if (_implementerStorage.Delete(model) == null)
} {
_logger.LogInformation("ReadElement. ImplementerFIO:{ImplementerFIO}. Id:{ Id}", model.ImplementerFIO, model.Id); _logger.LogWarning("Delete operation failed");
var element = _implementerStorage.GetElement(model); return false;
if (element == null) }
{ return true;
_logger.LogWarning("ReadElement element not found"); }
return null;
}
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
return element;
}
public List<ImplementerViewModel>? ReadList(ImplementerSearchModel? model) public ImplementerViewModel? ReadElement(ImplementerSearchModel model)
{ {
_logger.LogInformation("ReadList. ImplementerFIO:{ImplementerFIO}. Id:{Id}", model?.ImplementerFIO, model?.Id); if (model == null)
var list = model == null ? _implementerStorage.GetFullList() : _implementerStorage.GetFilteredList(model); {
if (list == null) throw new ArgumentNullException(nameof(model));
{ }
_logger.LogWarning("ReadList return null list"); _logger.LogInformation("ReadElement. FIO:{FIO}.Id:{ Id}",
return null; model.ImplementerFIO, model.Id);
} var element = _implementerStorage.GetElement(model);
_logger.LogInformation("ReadList. Count:{Count}", list.Count); if (element == null)
return list; {
} _logger.LogWarning("ReadElement element not found");
return null;
}
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
return element;
}
public bool Update(ImplementerBindingModel model) public List<ImplementerViewModel>? ReadList(ImplementerSearchModel? model)
{ {
CheckModel(model); _logger.LogInformation("ReadList. FIO:{FIO}.Id:{ Id} ", model?.ImplementerFIO, model?.Id);
if (_implementerStorage.Update(model) == null) var list = (model == null) ? _implementerStorage.GetFullList() :
{ _implementerStorage.GetFilteredList(model);
_logger.LogWarning("Update operation failed"); if (list == null)
return false; {
} _logger.LogWarning("ReadList return null list");
return true; return null;
} }
private void CheckModel(ImplementerBindingModel model, bool withParams = true) _logger.LogInformation("ReadList. Count:{Count}", list.Count);
{ return list;
if (model == null) }
{
throw new ArgumentNullException(nameof(model)); public bool Update(ImplementerBindingModel model)
} {
if (!withParams) CheckModel(model);
{ if (_implementerStorage.Update(model) == null)
return; {
} _logger.LogWarning("Update operation failed");
if (string.IsNullOrEmpty(model.ImplementerFIO)) return false;
{ }
throw new ArgumentNullException("Нет ФИО исполнителя", nameof(model.ImplementerFIO)); return true;
} }
if (model.Qualification <= 0)
{ private void CheckModel(ImplementerBindingModel model, bool withParams = true)
throw new ArgumentNullException("Квалификация не может быть меньше 0", nameof(model.Qualification)); {
} if (model == null)
if (model.WorkExperience <= 0) {
{ throw new ArgumentNullException(nameof(model));
throw new ArgumentNullException("Стаж работы не модет былть меньше 0", nameof(model.WorkExperience)); }
} if (!withParams)
_logger.LogInformation("Implementer. ImplementerID:{Id}. ImplementerFIO: {ImplementerFIO}. Password: { Password}. Qualification: {Qualification}. WorkExperience: {WorkExperience}", model.Id, model.ImplementerFIO, model.Password, model.Qualification, model.WorkExperience); {
var element = _implementerStorage.GetElement(new ImplementerSearchModel return;
{ }
ImplementerFIO = model.ImplementerFIO if (model.WorkExperience < 0)
}); {
if (element != null && element.Id != model.Id) throw new ArgumentException("Опыт работы не должен быть отрицательным", nameof(model.WorkExperience));
{ }
throw new InvalidOperationException("Такой исполнитель уже существует"); if (model.Qualification < 0)
} {
} throw new ArgumentException("Квалификация не должна быть отрицательной", nameof(model.Qualification));
} }
if (string.IsNullOrEmpty(model.Password))
{
throw new ArgumentNullException("Нет пароля исполнителя", nameof(model.ImplementerFIO));
}
if (string.IsNullOrEmpty(model.ImplementerFIO))
{
throw new ArgumentNullException("Нет фио исполнителя", nameof(model.ImplementerFIO));
}
_logger.LogInformation("Implementer. Id: {Id}, FIO: {FIO}", model.Id, model.ImplementerFIO);
var element = _implementerStorage.GetElement(new ImplementerSearchModel
{
ImplementerFIO = model.ImplementerFIO,
});
if (element != null && element.Id != model.Id)
{
throw new InvalidOperationException("Исполнитель с таким фио уже есть");
}
}
}
} }

View File

@ -13,111 +13,127 @@ using System.Threading.Tasks;
namespace PrecastConcretePlantBusinessLogic.BusinessLogics namespace PrecastConcretePlantBusinessLogic.BusinessLogics
{ {
public class OrderLogic : IOrderLogic public class OrderLogic : IOrderLogic
{ {
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly IOrderStorage _orderStorage; private readonly IOrderStorage _orderStorage;
public OrderLogic(ILogger<OrderLogic> logger, IOrderStorage orderStorage) public OrderLogic(ILogger<OrderLogic> logger, IOrderStorage orderStorage)
{ {
_logger = logger; _logger = logger;
_orderStorage = orderStorage; _orderStorage = orderStorage;
} }
public List<OrderViewModel>? ReadList(OrderSearchModel? model) public OrderViewModel? ReadElement(OrderSearchModel model)
{ {
_logger.LogInformation("ReadList. Id: {Id}", model?.Id); if (model == null)
var list = model == null ? _orderStorage.GetFullList() : _orderStorage.GetFilteredList(model); {
if (list == null) throw new ArgumentNullException(nameof(model));
{ }
_logger.LogWarning("ReadList return null list"); _logger.LogInformation("ReadElement. DateFrom:{DateFrom}. DateTo:{DateTo}. Id:{Id}", model.DateFrom, model.DateTo, model.Id);
return null; var element = _orderStorage.GetElement(model);
} if (element == null)
_logger.LogInformation("ReadList. Count: {Count}", list.Count); {
return list; _logger.LogWarning("ReadElement element not found");
} return null;
public bool CreateOrder(OrderBindingModel model) }
{ _logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
CheckModel(model); return element;
if (model.Status != OrderStatus.Неизвестен) }
{ public List<OrderViewModel>? ReadList(OrderSearchModel? model)
_logger.LogWarning("Invalid order status"); {
return false; _logger.LogInformation("ReadList. Id: {Id}", model?.Id);
} var list = model == null ? _orderStorage.GetFullList() : _orderStorage.GetFilteredList(model);
model.Status = OrderStatus.Принят; if (list == null)
if (_orderStorage.Insert(model) == null) {
{ _logger.LogWarning("ReadList return null list");
_logger.LogWarning("Insert operation failed"); return null;
return false; }
} _logger.LogInformation("ReadList. Count: {Count}", list.Count);
return true; return list;
} }
public bool TakeOrderInWork(OrderBindingModel model) public bool CreateOrder(OrderBindingModel model)
{ {
CheckModel(model, false); CheckModel(model);
if (_orderStorage.GetElement(new OrderSearchModel { Id = model.Id })?.Status != OrderStatus.Принят) if (model.Status != OrderStatus.Неизвестен)
{ {
_logger.LogWarning("Invalid order status"); _logger.LogWarning("Invalid order status");
return false; return false;
} }
model.Status = OrderStatus.Выполняется; model.Status = OrderStatus.Принят;
if (_orderStorage.Update(model) == null) if (_orderStorage.Insert(model) == null)
{ {
_logger.LogWarning("Update operation failed"); model.Status = OrderStatus.Неизвестен;
} _logger.LogWarning("Insert operation failed");
return true; return false;
} }
public bool FinishOrder(OrderBindingModel model) return true;
{ }
CheckModel(model, false); private bool StatusUpdate(OrderBindingModel model, OrderStatus newStatus)
if (_orderStorage.GetElement(new OrderSearchModel { Id = model.Id })?.Status != OrderStatus.Выполняется) {
{ var viewModel = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id });
_logger.LogWarning("Invalid order status"); if (viewModel == null)
return false; {
} throw new ArgumentNullException(nameof(model));
model.Status = OrderStatus.Готов; }
model.DateImplement = DateTime.Now; if (viewModel.Status + 1 != newStatus)
if (_orderStorage.Update(model) == null) {
{ _logger.LogWarning("Change status operation failed");
_logger.LogWarning("Update operation failed"); throw new InvalidOperationException();
} }
return true; model.Status = newStatus;
} if (model.Status == OrderStatus.Готов)
public bool DeliveryOrder(OrderBindingModel model) {
{ model.DateImplement = DateTime.Now;
CheckModel(model, false); }
var order = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id }); else
if (order?.Status != OrderStatus.Готов) {
{ model.DateImplement = viewModel.DateImplement;
_logger.LogWarning("Invalid order status"); }
return false; if (viewModel.ImplementerId.HasValue)
} {
model.Status = OrderStatus.Выдан; model.ImplementerId = viewModel.ImplementerId.Value;
model.DateImplement = order.DateImplement; }
if (_orderStorage.Update(model) == null) CheckModel(model, false);
{ if (_orderStorage.Update(model) == null)
_logger.LogWarning("Update operation failed"); {
} _logger.LogWarning("Change status operation failed");
return true; return false;
} }
private void CheckModel(OrderBindingModel model, bool withParams = true) return true;
{ }
if (model == null) public bool TakeOrderInWork(OrderBindingModel model)
{ {
throw new ArgumentNullException(nameof(model)); return StatusUpdate(model, OrderStatus.Выполняется);
} }
if (!withParams) public bool FinishOrder(OrderBindingModel model)
{ {
return; model.DateImplement = DateTime.Now;
} return StatusUpdate(model, OrderStatus.Готов);
if (model.Sum <= 0) }
{ public bool DeliveryOrder(OrderBindingModel model)
throw new ArgumentNullException("Стоимость должна быть больше 0", nameof(model.Sum)); {
}
_logger.LogInformation("Order. Id: {Id}. Sum: {Sum}. ReinforcedId: {ReinforcedId}", model.Id, model.Sum, model.ReinforcedId); return StatusUpdate(model, OrderStatus.Выдан);
var element = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id }); }
if (element != null && element.Id == model.Id) private void CheckModel(OrderBindingModel model, bool withParams = true)
{ {
throw new InvalidOperationException("Заказ с таким номером уже есть"); if (model == null)
} {
} throw new ArgumentNullException(nameof(model));
} }
if (!withParams)
{
return;
}
if (model.Sum <= 0)
{
throw new ArgumentNullException("Стоимость должна быть больше 0", nameof(model.Sum));
}
_logger.LogInformation("Order. Id: {Id}. Sum: {Sum}. ReinforcedId: {ReinforcedId}", model.Id, model.Sum, model.ReinforcedId);
var element = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id });
if (element != null && element.Id == model.Id)
{
throw new InvalidOperationException("Заказ с таким номером уже есть");
}
}
}
} }

View File

@ -0,0 +1,143 @@
using Microsoft.Extensions.Logging;
using PrecastConcretePlantContracts.BindingModels;
using PrecastConcretePlantContracts.BusinessLogicsContracts;
using PrecastConcretePlantContracts.SearchModels;
using PrecastConcretePlantContracts.ViewModels;
using PrecastConcretePlantDataModels.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PrecastConcretePlantBusinessLogic.BusinessLogics
{
public class WorkModelling : IWorkProcess
{
private readonly ILogger _logger;
private readonly Random _rnd;
private IOrderLogic? _orderLogic;
public WorkModelling(ILogger<WorkModelling> logger)
{
_logger = logger;
_rnd = new Random(1000);
}
public void DoWork(IImplementerLogic implementerLogic, IOrderLogic orderLogic)
{
_orderLogic = orderLogic;
var implementers = implementerLogic.ReadList(null);
if (implementers == null)
{
_logger.LogWarning("DoWork. Implementers is null");
return;
}
var orders = _orderLogic.ReadList(new OrderSearchModel { Statuses = new() { OrderStatus.Принят, OrderStatus.Выполняется } });
if (orders == null || orders.Count == 0)
{
_logger.LogWarning("DoWork. Orders is null or empty");
return;
}
_logger.LogDebug("DoWork for {Count} orders", orders.Count);
foreach (var implementer in implementers)
{
Task.Run(() => WorkerWorkAsync(implementer, orders));
}
}
/// <summary>
/// Имитация работы исполнителя
/// </summary>
private async Task WorkerWorkAsync(ImplementerViewModel implementer, List<OrderViewModel> orders)
{
if (_orderLogic == null || implementer == null)
{
return;
}
await RunOrderInWork(implementer, orders);
await Task.Run(() =>
{
foreach (var order in orders)
{
try
{
_logger.LogDebug("DoWork. Worker {Id} try get order {Order}", implementer.Id, order.Id);
_orderLogic.TakeOrderInWork(new OrderBindingModel
{
Id = order.Id,
ImplementerId = implementer.Id
});
Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 1000) * order.Count);
_logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, order.Id);
_orderLogic.FinishOrder(new OrderBindingModel
{
Id = order.Id
});
Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100));
}
catch (InvalidOperationException ex)
{
_logger.LogWarning(ex, "Error try get work");
}
catch (Exception ex)
{
_logger.LogError(ex, "Error while do work");
throw;
}
}
});
}
/// <summary>
/// Ищем заказ, которые уже в работе (вдруг исполнителя прервали)
/// </summary>
private async Task RunOrderInWork(ImplementerViewModel implementer, List<OrderViewModel> allOrders)
{
if (_orderLogic == null || implementer == null || allOrders == null || allOrders.Count == 0)
{
return;
}
try
{
var runOrder = await Task.Run(() => allOrders.FirstOrDefault(x => x.ImplementerId == implementer.Id && x.Status == OrderStatus.Выполняется));
if (runOrder == null)
{
return;
}
_logger.LogDebug("DoWork. Worker {Id} back to order {Order}", implementer.Id, runOrder.Id);
Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 300) * runOrder.Count);
_logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, runOrder.Id);
_orderLogic.FinishOrder(new OrderBindingModel
{
Id = runOrder.Id
});
Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100));
}
catch (InvalidOperationException ex)
{
_logger.LogWarning(ex, "Error try get work");
}
catch (Exception ex)
{
_logger.LogError(ex, "Error while do work");
throw;
}
}
}
}

View File

@ -13,315 +13,298 @@ using System.Threading.Tasks;
namespace PrecastConcretePlantBusinessLogic.OfficePackage.Implements namespace PrecastConcretePlantBusinessLogic.OfficePackage.Implements
{ {
public class SaveToExcel : AbstractSaveToExcel public class SaveToExcel : AbstractSaveToExcel
{ {
private SpreadsheetDocument? _spreadsheetDocument; private SpreadsheetDocument? _spreadsheetDocument;
private SharedStringTablePart? _shareStringPart;
private Worksheet? _worksheet;
private static void CreateStyles(WorkbookPart workbookpart)
{
var sp = workbookpart.AddNewPart<WorkbookStylesPart>();
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 };
private SharedStringTablePart? _shareStringPart; 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<SharedStringTablePart>().Any()
?
_spreadsheetDocument.WorkbookPart.GetPartsOfType<SharedStringTablePart>().First()
:
_spreadsheetDocument.WorkbookPart.AddNewPart<SharedStringTablePart>();
if (_shareStringPart.SharedStringTable == null)
{
_shareStringPart.SharedStringTable = new SharedStringTable();
}
private Worksheet? _worksheet; var worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
//Настройка стилей для файла var sheets = _spreadsheetDocument.WorkbookPart.Workbook.AppendChild(new Sheets());
private static void CreateStyles(WorkbookPart workbookpart) var sheet = new Sheet()
{ {
var sp = workbookpart.AddNewPart<WorkbookStylesPart>(); Id = _spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart),
sp.Stylesheet = new Stylesheet(); SheetId = 1,
var fonts = new Fonts() { Count = 2U, KnownFonts = true }; Name = "Лист"
var fontUsual = new Font(); };
fontUsual.Append(new FontSize() { Val = 12D }); sheets.Append(sheet);
fontUsual.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color() { Theme = 1U }); _worksheet = worksheetPart.Worksheet;
fontUsual.Append(new FontName() { Val = "Times New Roman" }); }
fontUsual.Append(new FontFamilyNumbering() { Val = 2 }); protected override void InsertCellInWorksheet(ExcelCellParameters excelParams)
fontUsual.Append(new FontScheme() { Val = FontSchemeValues.Minor }); {
var fontTitle = new Font(); if (_worksheet == null || _shareStringPart == null)
fontTitle.Append(new Bold()); {
fontTitle.Append(new FontSize() { Val = 14D }); return;
fontTitle.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color() { Theme = 1U }); }
fontTitle.Append(new FontName() { Val = "Times New Roman" }); var sheetData = _worksheet.GetFirstChild<SheetData>();
fontTitle.Append(new FontFamilyNumbering() { Val = 2 }); if (sheetData == null)
fontTitle.Append(new FontScheme() { Val = FontSchemeValues.Minor }); {
fonts.Append(fontUsual); return;
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() Row row;
{ if (sheetData.Elements<Row>().Where(r => r.RowIndex! == excelParams.RowIndex).Any())
Count = 0U, {
DefaultTableStyle = "TableStyleMedium2", row = sheetData.Elements<Row>().Where(r => r.RowIndex! == excelParams.RowIndex).First();
DefaultPivotStyle = "PivotStyleLight16" }
}; else
var stylesheetExtensionList = new StylesheetExtensionList(); {
var stylesheetExtension1 = new StylesheetExtension() row = new Row() { RowIndex = excelParams.RowIndex };
{ sheetData.Append(row);
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);
}
// Получение номера стиля из типа Cell cell;
private static uint GetStyleValue(ExcelStyleInfoType styleInfo) if (row.Elements<Cell>().Where(c => c.CellReference!.Value == excelParams.CellReference).Any())
{ {
return styleInfo switch cell = row.Elements<Cell>().Where(c => c.CellReference!.Value == excelParams.CellReference).First();
{ }
ExcelStyleInfoType.Title => 2U, else
ExcelStyleInfoType.TextWithBorder => 1U, {
ExcelStyleInfoType.Text => 0U,
_ => 0U,
};
}
protected override void CreateExcel(ExcelInfo info)
{
_spreadsheetDocument = SpreadsheetDocument.Create(info.FileName, SpreadsheetDocumentType.Workbook);
//Создание книги Cell? refCell = null;
var workbookpart = _spreadsheetDocument.AddWorkbookPart(); foreach (Cell rowCell in row.Elements<Cell>())
workbookpart.Workbook = new Workbook(); CreateStyles(workbookpart); {
//Получение/создание хранилища текстов для книги if (string.Compare(rowCell.CellReference!.Value, excelParams.CellReference, true) > 0)
_shareStringPart = {
_spreadsheetDocument.WorkbookPart!.GetPartsOfType<SharedStringTablePart>().Any() refCell = rowCell;
? break;
_spreadsheetDocument.WorkbookPart.GetPartsOfType<SharedStringTablePart>().First() }
: }
_spreadsheetDocument.WorkbookPart.AddNewPart<SharedStringTablePart>(); var newCell = new Cell()
{
CellReference = excelParams.CellReference
};
row.InsertBefore(newCell, refCell);
cell = newCell;
}
//Создание SharedStringTable, если таковой нет _shareStringPart.SharedStringTable.AppendChild(new SharedStringItem(new Text(excelParams.Text)));
if (_shareStringPart.SharedStringTable == null) _shareStringPart.SharedStringTable.Save();
{ cell.CellValue = new CellValue((_shareStringPart.SharedStringTable.Elements<SharedStringItem>().Count() - 1).ToString());
_shareStringPart.SharedStringTable = new SharedStringTable(); cell.DataType = new EnumValue<CellValues>(CellValues.SharedString);
} cell.StyleIndex = GetStyleValue(excelParams.StyleInfo);
}
protected override void MergeCells(ExcelMergeParameters excelParams)
{
if (_worksheet == null)
{
return;
}
MergeCells mergeCells;
if (_worksheet.Elements<MergeCells>().Any())
{
mergeCells = _worksheet.Elements<MergeCells>().First();
}
else
{
mergeCells = new MergeCells();
if (_worksheet.Elements<CustomSheetView>().Any())
{
_worksheet.InsertAfter(mergeCells, _worksheet.Elements<CustomSheetView>().First());
}
else
{
_worksheet.InsertAfter(mergeCells, _worksheet.Elements<SheetData>().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();
}
//Создание листа в книгу }
var worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
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<SheetData>();
if (sheetData == null)
{
return;
}
//Ищем строку либо добавляем ее
Row row;
if (sheetData.Elements<Row>().Where(r => r.RowIndex! == excelParams.RowIndex).Any())
{
row = sheetData.Elements<Row>().Where(r => r.RowIndex! == excelParams.RowIndex).First();
}
else
{
row = new Row() { RowIndex = excelParams.RowIndex };
sheetData.Append(row);
}
//Ищем нужную ячейку
Cell cell;
if (row.Elements<Cell>().Where(c => c.CellReference!.Value == excelParams.CellReference).Any())
{
cell = row.Elements<Cell>().Where(c => c.CellReference!.Value == excelParams.CellReference).First();
}
else
{
//Все ячейки должны быть последовательно друг за другом. Опеделение после какой вставка
Cell? refCell = null;
foreach (Cell rowCell in row.Elements<Cell>())
{
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<SharedStringItem>().Count() - 1).ToString());
cell.DataType = new EnumValue<CellValues>(CellValues.SharedString);
cell.StyleIndex = GetStyleValue(excelParams.StyleInfo);
}
protected override void MergeCells(ExcelMergeParameters excelParams)
{
if (_worksheet == null)
{
return;
}
MergeCells mergeCells;
if (_worksheet.Elements<MergeCells>().Any())
{
mergeCells = _worksheet.Elements<MergeCells>().First();
}
else
{
mergeCells = new MergeCells();
if (_worksheet.Elements<CustomSheetView>().Any())
{
_worksheet.InsertAfter(mergeCells, _worksheet.Elements<CustomSheetView>().First());
}
else
{
_worksheet.InsertAfter(mergeCells, _worksheet.Elements<SheetData>().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();
}
}
} }

View File

@ -1,130 +1,124 @@
using System; using DocumentFormat.OpenXml;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing; using DocumentFormat.OpenXml.Wordprocessing;
using PrecastConcretePlantBusinessLogic.OfficePackage.HelperEnums; using PrecastConcretePlantBusinessLogic.OfficePackage.HelperEnums;
using PrecastConcretePlantBusinessLogic.OfficePackage.HelperModels; using PrecastConcretePlantBusinessLogic.OfficePackage.HelperModels;
//using Document = DocumentFormat.OpenXml.Wordprocessing.Document; using System;
//using Text = DocumentFormat.OpenXml.Wordprocessing.Text; using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;
using Document = DocumentFormat.OpenXml.Wordprocessing.Document;
using Text = DocumentFormat.OpenXml.Wordprocessing.Text;
namespace PrecastConcretePlantBusinessLogic.OfficePackage.Implements namespace PrecastConcretePlantBusinessLogic.OfficePackage.Implements
{ {
public class SaveToWord : AbstractSaveToWord public class SaveToWord : AbstractSaveToWord
{ {
private WordprocessingDocument? _wordDocument; private WordprocessingDocument? _wordDocument;
private Body? _docBody; private Body? _docBody;
//Получение типа выравнивания private static JustificationValues GetJustificationValues(WordJustificationType type)
private static JustificationValues GetJustificationValues(WordJustificationType type) {
{ return type switch
return type switch {
{ WordJustificationType.Both => JustificationValues.Both,
WordJustificationType.Both => JustificationValues.Both, WordJustificationType.Center => JustificationValues.Center,
WordJustificationType.Center => JustificationValues.Center, _ => JustificationValues.Left,
_ => JustificationValues.Left, };
}; }
} private static SectionProperties CreateSectionProperties()
{
var properties = new SectionProperties();
//Настройки страницы var pageSize = new PageSize
private static SectionProperties CreateSectionProperties() {
{ Orient = PageOrientationValues.Portrait
var properties = new SectionProperties(); };
var pageSize = new PageSize properties.AppendChild(pageSize);
{
Orient = PageOrientationValues.Portrait
};
properties.AppendChild(pageSize); return properties;
}
private static ParagraphProperties? CreateParagraphProperties(WordTextProperties? paragraphProperties)
{
if (paragraphProperties == null)
{
return null;
}
return properties; var properties = new ParagraphProperties();
}
//Задание форматирования для абзаца properties.AppendChild(new Justification()
private static ParagraphProperties? CreateParagraphProperties(WordTextProperties? paragraphProperties) {
{ Val = GetJustificationValues(paragraphProperties.JustificationType)
if (paragraphProperties == null) });
{
return null;
}
var properties = new ParagraphProperties(); properties.AppendChild(new SpacingBetweenLines
{
LineRule = LineSpacingRuleValues.Auto
});
properties.AppendChild(new Justification() properties.AppendChild(new Indentation());
{
Val = GetJustificationValues(paragraphProperties.JustificationType)
});
properties.AppendChild(new SpacingBetweenLines var paragraphMarkRunProperties = new ParagraphMarkRunProperties();
{ if (!string.IsNullOrEmpty(paragraphProperties.Size))
LineRule = LineSpacingRuleValues.Auto {
}); paragraphMarkRunProperties.AppendChild(new FontSize { Val = paragraphProperties.Size });
}
properties.AppendChild(paragraphMarkRunProperties);
properties.AppendChild(new Indentation()); 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();
var paragraphMarkRunProperties = new ParagraphMarkRunProperties(); docParagraph.AppendChild(CreateParagraphProperties(paragraph.TextProperties));
if (!string.IsNullOrEmpty(paragraphProperties.Size))
{
paragraphMarkRunProperties.AppendChild(new FontSize { Val = paragraphProperties.Size });
}
properties.AppendChild(paragraphMarkRunProperties);
return properties; foreach (var run in paragraph.Texts)
} {
var docRun = new Run();
protected override void CreateWord(WordInfo info) var properties = new RunProperties();
{ properties.AppendChild(new FontSize { Val = run.Item2.Size });
_wordDocument = WordprocessingDocument.Create(info.FileName, WordprocessingDocumentType.Document); if (run.Item2.Bold)
MainDocumentPart mainPart = _wordDocument.AddMainDocumentPart(); {
mainPart.Document = new Document(); properties.AppendChild(new Bold());
_docBody = mainPart.Document.AppendChild(new Body()); }
} docRun.AppendChild(properties);
protected override void CreateParagraph(WordParagraph paragraph) docRun.AppendChild(new Text { Text = run.Item1, Space = SpaceProcessingModeValues.Preserve });
{
if (_docBody == null || paragraph == null)
{
return;
}
var docParagraph = new Paragraph();
docParagraph.AppendChild(CreateParagraphProperties(paragraph.TextProperties)); docParagraph.AppendChild(docRun);
}
foreach (var run in paragraph.Texts) _docBody.AppendChild(docParagraph);
{ }
var docRun = new Run(); protected override void SaveWord(WordInfo info)
{
if (_docBody == null || _wordDocument == null)
{
return;
}
_docBody.AppendChild(CreateSectionProperties());
var properties = new RunProperties(); _wordDocument.MainDocumentPart!.Document.Save();
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 }); _wordDocument.Dispose();
}
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();
}
}
} }

View File

@ -13,10 +13,10 @@ namespace PrecastConcretePlantContracts.BindingModels
public int Id { get; set; } public int Id { get; set; }
public int ClientId { get; set; } public int ClientId { get; set; }
public int ReinforcedId { get; set; } public int ReinforcedId { get; set; }
public int ImplementerId { get; set; } = 0;
public int Count { get; set; } public int Count { get; set; }
public double Sum { get; set; } public double Sum { get; set; }
public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; public int? ImplementerId { get; set; }
public OrderStatus Status { get; set; } = OrderStatus.Неизвестен;
public DateTime DateCreate { get; set; } = DateTime.Now; public DateTime DateCreate { get; set; } = DateTime.Now;
public DateTime? DateImplement { get; set; } public DateTime? DateImplement { get; set; }
} }

View File

@ -12,7 +12,8 @@ namespace PrecastConcretePlantContracts.BusinessLogicsContracts
public interface IOrderLogic public interface IOrderLogic
{ {
List<OrderViewModel>? ReadList(OrderSearchModel? model); List<OrderViewModel>? ReadList(OrderSearchModel? model);
bool CreateOrder(OrderBindingModel model); OrderViewModel? ReadElement(OrderSearchModel? model);
bool CreateOrder(OrderBindingModel model);
bool TakeOrderInWork(OrderBindingModel model); bool TakeOrderInWork(OrderBindingModel model);
bool FinishOrder(OrderBindingModel model); bool FinishOrder(OrderBindingModel model);
bool DeliveryOrder(OrderBindingModel model); bool DeliveryOrder(OrderBindingModel model);

View File

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PrecastConcretePlantContracts.BusinessLogicsContracts
{
public interface IWorkProcess
{
/// <summary>
/// Запуск работ
/// </summary>
void DoWork(IImplementerLogic implementerLogic, IOrderLogic orderLogic);
}
}

View File

@ -11,10 +11,10 @@ namespace PrecastConcretePlantContracts.SearchModels
{ {
public int? Id { get; set; } public int? Id { get; set; }
public int? ClientId { get; set; } public int? ClientId { get; set; }
public int? ImplementerId { get; set; } public int? ImplementerId { get; set; }
public DateTime? DateFrom { get; set; } public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; } public DateTime? DateTo { get; set; }
public OrderStatus? Status { get; set; } public List<OrderStatus>? Statuses { get; set; }
} }
} }

View File

@ -11,12 +11,16 @@ namespace PrecastConcretePlantContracts.ViewModels
public class ImplementerViewModel : IImplementerModel public class ImplementerViewModel : IImplementerModel
{ {
public int Id { get; set; } public int Id { get; set; }
[DisplayName("ФИО исполнителя")] [DisplayName("ФИО исполнителя")]
public string ImplementerFIO { get; set; } = string.Empty; public string ImplementerFIO { get; set; } = string.Empty;
[DisplayName("Пароль")] [DisplayName("Пароль")]
public string Password { get; set; } = string.Empty; public string Password { get; set; } = string.Empty;
[DisplayName("Опыт исполнителя")] [DisplayName("Опыт исполнителя")]
public int WorkExperience { get; set; } public int WorkExperience { get; set; }
[DisplayName("Квалификация исполнителя")] [DisplayName("Квалификация исполнителя")]
public int Qualification { get; set; } public int Qualification { get; set; }
} }

View File

@ -13,23 +13,31 @@ namespace PrecastConcretePlantContracts.ViewModels
{ {
[DisplayName("Номер")] [DisplayName("Номер")]
public int Id { get; set; } public int Id { get; set; }
public int ClientId { get; set; } public int ClientId { get; set; }
public int ImplementerId { get; set; } = 0;
[DisplayName("Клиент")] [DisplayName("Клиент")]
public string ClientFIO { get; set; } = string.Empty; public string ClientFIO { get; set; } = string.Empty;
[DisplayName("ФИО исполнителя")]
public string ImplementerFIO { get; set; } = string.Empty; public int? ImplementerId { get; set; }
public int ReinforcedId { get; set; } [DisplayName("ФИО исполнителя")]
public string? ImplementerFIO { get; set; } = string.Empty;
public int ReinforcedId { get; set; }
[DisplayName("Изделие")] [DisplayName("Изделие")]
public string ReinforcedName { get; set; } = string.Empty; public string ReinforcedName { get; set; } = string.Empty;
[DisplayName("Количество")] [DisplayName("Количество")]
public int Count { get; set; } public int Count { get; set; }
[DisplayName("Сумма")] [DisplayName("Сумма")]
public double Sum { get; set; } public double Sum { get; set; }
[DisplayName("Статус")] [DisplayName("Статус")]
public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; public OrderStatus Status { get; set; } = OrderStatus.Неизвестен;
[DisplayName("Дата создания")] [DisplayName("Дата создания")]
public DateTime DateCreate { get; set; } = DateTime.Now; public DateTime DateCreate { get; set; } = DateTime.Now;
[DisplayName("Дата выполнения")] [DisplayName("Дата выполнения")]
public DateTime? DateImplement { get; set; } public DateTime? DateImplement { get; set; }
} }

View File

@ -13,7 +13,8 @@ namespace PrecastConcretePlantDataModels.Models
int ClientId { get; } int ClientId { get; }
int Count { get; } int Count { get; }
double Sum { get; } double Sum { get; }
OrderStatus Status { get; } int? ImplementerId { get; }
OrderStatus Status { get; }
DateTime DateCreate { get; } DateTime DateCreate { get; }
DateTime? DateImplement { get; } DateTime? DateImplement { get; }
} }

View File

@ -16,7 +16,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
{ {
public List<ClientViewModel> GetFullList() public List<ClientViewModel> GetFullList()
{ {
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
return context.Clients return context.Clients
.Include(x => x.Orders) .Include(x => x.Orders)
.Select(x => x.GetViewModel) .Select(x => x.GetViewModel)
@ -31,7 +31,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
} }
if (!string.IsNullOrEmpty(model.Email)) if (!string.IsNullOrEmpty(model.Email))
{ {
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
return context.Clients return context.Clients
.Include(x => x.Orders) .Include(x => x.Orders)
.Where(x => x.Email.Contains(model.Email)) .Where(x => x.Email.Contains(model.Email))
@ -43,7 +43,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
public ClientViewModel? GetElement(ClientSearchModel model) public ClientViewModel? GetElement(ClientSearchModel model)
{ {
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
if (model.Id.HasValue) if (model.Id.HasValue)
{ {
return context.Clients return context.Clients
@ -64,7 +64,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
{ {
return null; return null;
} }
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
context.Clients.Add(newClient); context.Clients.Add(newClient);
context.SaveChanges(); context.SaveChanges();
return newClient.GetViewModel; return newClient.GetViewModel;
@ -72,7 +72,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
public ClientViewModel? Update(ClientBindingModel model) public ClientViewModel? Update(ClientBindingModel model)
{ {
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
var client = context.Clients.FirstOrDefault(x => x.Id == model.Id); var client = context.Clients.FirstOrDefault(x => x.Id == model.Id);
if (client == null) if (client == null)
{ {
@ -85,7 +85,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
public ClientViewModel? Delete(ClientBindingModel model) public ClientViewModel? Delete(ClientBindingModel model)
{ {
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
var element = context.Clients var element = context.Clients
.Include(x => x.Orders) .Include(x => x.Orders)
.FirstOrDefault(rec => rec.Id == model.Id); .FirstOrDefault(rec => rec.Id == model.Id);

View File

@ -15,7 +15,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
{ {
public List<ComponentViewModel> GetFullList() public List<ComponentViewModel> GetFullList()
{ {
using var context = new PrecastConcretePlantDataBase();//подключение к бд, далее - запросы using var context = new PrecastConcretePlantDatabase();//подключение к бд, далее - запросы
return context.Components return context.Components
.Select(x => x.GetViewModel) .Select(x => x.GetViewModel)
.ToList(); .ToList();
@ -27,7 +27,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
{ {
return new(); return new();
} }
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
return context.Components return context.Components
.Where(x => x.ComponentName.Contains(model.ComponentName)) .Where(x => x.ComponentName.Contains(model.ComponentName))
.Select(x => x.GetViewModel) .Select(x => x.GetViewModel)
@ -39,7 +39,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
{ {
return null; return null;
} }
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
return context.Components return context.Components
.FirstOrDefault(x => (!string.IsNullOrEmpty(model.ComponentName) && x.ComponentName == model.ComponentName) .FirstOrDefault(x => (!string.IsNullOrEmpty(model.ComponentName) && x.ComponentName == model.ComponentName)
|| (model.Id.HasValue && x.Id == model.Id))?.GetViewModel; || (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
@ -51,14 +51,14 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
{ {
return null; return null;
} }
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
context.Components.Add(newComponent); context.Components.Add(newComponent);
context.SaveChanges(); context.SaveChanges();
return newComponent.GetViewModel; return newComponent.GetViewModel;
} }
public ComponentViewModel? Update(ComponentBindingModel model) public ComponentViewModel? Update(ComponentBindingModel model)
{ {
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
var component = context.Components.FirstOrDefault(x => x.Id == model.Id); var component = context.Components.FirstOrDefault(x => x.Id == model.Id);
if (component == null) if (component == null)
{ {
@ -70,7 +70,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
} }
public ComponentViewModel? Delete(ComponentBindingModel model) public ComponentViewModel? Delete(ComponentBindingModel model)
{ {
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
var element = context.Components.FirstOrDefault(rec => rec.Id == model.Id); var element = context.Components.FirstOrDefault(rec => rec.Id == model.Id);
if (element != null) if (element != null)
{ {

View File

@ -0,0 +1,95 @@
using PrecastConcretePlantContracts.BindingModels;
using PrecastConcretePlantContracts.SearchModels;
using PrecastConcretePlantContracts.StoragesContracts;
using PrecastConcretePlantContracts.ViewModels;
using PrecastConcretePlantDatabaseImplement.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PrecastConcretePlantDatabaseImplement.Implements
{
public class ImplementerStorage : IImplementerStorage
{
public ImplementerViewModel? Delete(ImplementerBindingModel model)
{
using var context = new PrecastConcretePlantDatabase();
var res = context.Implementers.FirstOrDefault(x => x.Id == model.Id);
if (res != null)
{
context.Implementers.Remove(res);
context.SaveChanges();
}
return res?.GetViewModel;
}
public ImplementerViewModel? GetElement(ImplementerSearchModel model)
{
using var context = new PrecastConcretePlantDatabase();
if (model.Id.HasValue)
return context.Implementers.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel;
if (model.ImplementerFIO != null && model.Password != null)
return context.Implementers
.FirstOrDefault(x => x.ImplementerFIO.Equals(model.ImplementerFIO)
&& x.Password.Equals(model.Password))
?.GetViewModel;
if (model.ImplementerFIO != null)
return context.Implementers.FirstOrDefault(x => x.ImplementerFIO.Equals(model.ImplementerFIO))?.GetViewModel;
return null;
}
public List<ImplementerViewModel> GetFilteredList(ImplementerSearchModel model)
{
if (model == null)
{
return new();
}
if (model.Id.HasValue)
{
var res = GetElement(model);
return res != null ? new() { res } : new();
}
if (model.ImplementerFIO != null)
{
using var context = new PrecastConcretePlantDatabase();
return context.Implementers
.Where(x => x.ImplementerFIO.Equals(model.ImplementerFIO))
.Select(x => x.GetViewModel)
.ToList();
}
return new();
}
public List<ImplementerViewModel> GetFullList()
{
using var context = new PrecastConcretePlantDatabase();
return context.Implementers.Select(x => x.GetViewModel).ToList();
}
public ImplementerViewModel? Insert(ImplementerBindingModel model)
{
using var context = new PrecastConcretePlantDatabase();
var res = Implementer.Create(model);
if (res != null)
{
context.Implementers.Add(res);
context.SaveChanges();
}
return res?.GetViewModel;
}
public ImplementerViewModel? Update(ImplementerBindingModel model)
{
using var context = new PrecastConcretePlantDatabase();
var res = context.Implementers.FirstOrDefault(x => x.Id == model.Id);
if (res != null)
{
res.Update(model);
context.SaveChanges();
}
return res?.GetViewModel;
}
}
}

View File

@ -12,108 +12,115 @@ using System.Threading.Tasks;
namespace PrecastConcretePlantDatabaseImplement.Implements namespace PrecastConcretePlantDatabaseImplement.Implements
{ {
public class OrderStorage : IOrderStorage public class OrderStorage : IOrderStorage
{ {
public List<OrderViewModel> GetFullList() public List<OrderViewModel> GetFullList()
{ {
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
return context.Orders return context.Orders
.Include(x => x.Reinforced).Include(x => x.Client).Select(x => x.GetViewModel).ToList(); .Include(x => x.Reinforced).Include(x => x.Client).Include(x => x.Implementer).Select(x => x.GetViewModel).ToList();
} }
public List<OrderViewModel> GetFilteredList(OrderSearchModel model) public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
{ {
using var context = new PrecastConcretePlantDataBase(); if (model.Id.HasValue)
if (model.Id.HasValue) {
{ var result = GetElement(model);
return context.Orders return result != null ? new() { result } : new();
.Include(x => x.Reinforced) }
.Include(x => x.Client)
.Where(x => x.Id == model.Id) using var context = new PrecastConcretePlantDatabase();
.Select(x => x.GetViewModel) IQueryable<Order>? queryWhere = null;
.ToList();
} if (model.DateFrom.HasValue && model.DateTo.HasValue)
else if (model.DateFrom != null && model.DateTo != null) {
{ queryWhere = context.Orders
return context.Orders .Where(x => model.DateFrom <= x.DateCreate.Date &&
.Include(x => x.Reinforced) x.DateCreate.Date <= model.DateTo);
.Include(x => x.Client) }
.Where(x => x.DateCreate >= model.DateFrom && x.DateCreate <= model.DateTo)
.Select(x => x.GetViewModel) else if (model.Statuses != null)
.ToList(); {
} queryWhere = context.Orders.Where(x => model.Statuses.Contains(x.Status));
else if (model.ClientId.HasValue) }
{
return context.Orders else if (model.ClientId.HasValue)
.Include(x => x.Reinforced) {
.Include(x => x.Client) queryWhere = context.Orders.Where(x => x.ClientId == model.ClientId);
.Where(x => x.ClientId == model.ClientId) }
.Select(x => x.GetViewModel)
.ToList(); else
} {
else return new();
{ }
return new();
} return queryWhere
} .Include(x => x.Client)
public OrderViewModel? GetElement(OrderSearchModel model) .Include(x => x.Implementer)
{ .Select(x => x.GetViewModel)
if (!model.Id.HasValue) .ToList();
{ }
return null; public OrderViewModel? GetElement(OrderSearchModel model)
} {
using var context = new PrecastConcretePlantDataBase(); if (!model.Id.HasValue)
return context.Orders.Include(x => x.Reinforced).Include(x => x.Client).FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))?.GetViewModel; {
} return null;
public OrderViewModel? Insert(OrderBindingModel model) }
{ using var context = new PrecastConcretePlantDatabase();
var newOrder = Order.Create(model); return context.Orders.Include(x => x.Client).Include(x => x.Implementer).FirstOrDefault(x =>
if (newOrder == null) (model.Statuses == null || model.Statuses != null && model.Statuses.Contains(x.Status)) &&
{ model.ImplementerId.HasValue && x.ImplementerId == model.ImplementerId ||
return null; model.Id.HasValue && x.Id == model.Id
} )?.GetViewModel;
using var context = new PrecastConcretePlantDataBase(); }
context.Orders.Add(newOrder); public OrderViewModel? Insert(OrderBindingModel model)
context.SaveChanges(); {
return context.Orders var newOrder = Order.Create(model);
.Include(x => x.Reinforced) if (newOrder == null)
.Include(x => x.Client) {
.FirstOrDefault(x => x.Id == newOrder.Id) return null;
?.GetViewModel; }
} using var context = new PrecastConcretePlantDatabase();
public OrderViewModel? Update(OrderBindingModel model) context.Orders.Add(newOrder);
{ context.SaveChanges();
using var context = new PrecastConcretePlantDataBase(); return newOrder.GetViewModel;
var order = context.Orders.FirstOrDefault(x => x.Id == }
model.Id); public OrderViewModel? Update(OrderBindingModel model)
if (order == null) {
{ using var context = new PrecastConcretePlantDatabase();
return null;
} var order = context.Orders
order.Update(model); .Include(x => x.Reinforced)
context.SaveChanges(); .Include(x => x.Client)
return context.Orders .Include(x => x.Implementer)
.Include(x => x.Reinforced) .FirstOrDefault(x => x.Id == model.Id);
.Include(x => x.Client)
.FirstOrDefault(x => x.Id == model.Id) if (order == null)
?.GetViewModel; {
} return null;
public OrderViewModel? Delete(OrderBindingModel model) }
{
using var context = new PrecastConcretePlantDataBase(); order.Update(model);
var element = context.Orders.FirstOrDefault(rec => rec.Id == context.SaveChanges();
model.Id);
if (element != null) return order.GetViewModel;
{ }
var deletedElement = context.Orders public OrderViewModel? Delete(OrderBindingModel model)
.Include(x => x.Reinforced) {
.Include(x => x.Client) using var context = new PrecastConcretePlantDatabase();
.FirstOrDefault(x => x.Id == model.Id)
?.GetViewModel; var element = context.Orders
context.Orders.Remove(element); .Include(x => x.Reinforced)
context.SaveChanges(); .Include(x => x.Client)
return element.GetViewModel; .Include(x => x.Implementer)
} .FirstOrDefault(rec => rec.Id == model.Id);
return null;
} if (element != null)
} {
context.Orders.Remove(element);
context.SaveChanges();
return element.GetViewModel;
}
return null;
}
}
} }

View File

@ -17,7 +17,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
{ {
public List<ReinforcedViewModel> GetFullList() public List<ReinforcedViewModel> GetFullList()
{ {
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
return context.Reinforceds return context.Reinforceds
.Include(x => x.Components)//подтягивание зависимостей вместе с исходной записью(тот же join) .Include(x => x.Components)//подтягивание зависимостей вместе с исходной записью(тот же join)
.ThenInclude(x => x.Component) .ThenInclude(x => x.Component)
@ -31,7 +31,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
{ {
return new(); return new();
} }
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
return context.Reinforceds.Include(x => x.Components) return context.Reinforceds.Include(x => x.Components)
.ThenInclude(x => x.Component) .ThenInclude(x => x.Component)
.Where(x => x.ReinforcedName.Contains(model.ReinforcedName)) .Where(x => x.ReinforcedName.Contains(model.ReinforcedName))
@ -46,7 +46,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
{ {
return null; return null;
} }
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
return context.Reinforceds return context.Reinforceds
.Include(x => x.Components) .Include(x => x.Components)
.ThenInclude(x => x.Component) .ThenInclude(x => x.Component)
@ -56,7 +56,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
} }
public ReinforcedViewModel? Insert(ReinforcedBindingModel model) public ReinforcedViewModel? Insert(ReinforcedBindingModel model)
{ {
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
var newReinforced = Reinforced.Create(context, model); var newReinforced = Reinforced.Create(context, model);
if (newReinforced == null) if (newReinforced == null)
{ {
@ -68,7 +68,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
} }
public ReinforcedViewModel? Update(ReinforcedBindingModel model) public ReinforcedViewModel? Update(ReinforcedBindingModel model)
{ {
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
using var transaction = context.Database.BeginTransaction(); using var transaction = context.Database.BeginTransaction();
try try
{ {
@ -92,7 +92,7 @@ namespace PrecastConcretePlantDatabaseImplement.Implements
} }
public ReinforcedViewModel? Delete(ReinforcedBindingModel model) public ReinforcedViewModel? Delete(ReinforcedBindingModel model)
{ {
using var context = new PrecastConcretePlantDataBase(); using var context = new PrecastConcretePlantDatabase();
var element = context.Reinforceds var element = context.Reinforceds
.Include(x => x.Components) .Include(x => x.Components)
.FirstOrDefault(rec => rec.Id == model.Id); .FirstOrDefault(rec => rec.Id == model.Id);

View File

@ -11,16 +11,16 @@ using PrecastConcretePlantDatabaseImplement;
namespace PrecastConcretePlantDatabaseImplement.Migrations namespace PrecastConcretePlantDatabaseImplement.Migrations
{ {
[DbContext(typeof(PrecastConcretePlantDataBase))] [DbContext(typeof(PrecastConcretePlantDatabase))]
[Migration("20240418132942_InitialCreate")] [Migration("20240502162703_initial")]
partial class InitialCreate partial class initial
{ {
/// <inheritdoc /> /// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder) protected override void BuildTargetModel(ModelBuilder modelBuilder)
{ {
#pragma warning disable 612, 618 #pragma warning disable 612, 618
modelBuilder modelBuilder
.HasAnnotation("ReinforcedVersion", "7.0.17") .HasAnnotation("ProductVersion", "7.0.17")
.HasAnnotation("Relational:MaxIdentifierLength", 128); .HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
@ -70,6 +70,33 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
b.ToTable("Components"); b.ToTable("Components");
}); });
modelBuilder.Entity("PrecastConcretePlantDatabaseImplement.Models.Implementer", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ImplementerFIO")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Password")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Qualification")
.HasColumnType("int");
b.Property<int>("WorkExperience")
.HasColumnType("int");
b.HasKey("Id");
b.ToTable("Implementers");
});
modelBuilder.Entity("PrecastConcretePlantDatabaseImplement.Models.Order", b => modelBuilder.Entity("PrecastConcretePlantDatabaseImplement.Models.Order", b =>
{ {
b.Property<int>("Id") b.Property<int>("Id")
@ -90,6 +117,9 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
b.Property<DateTime?>("DateImplement") b.Property<DateTime?>("DateImplement")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
b.Property<int?>("ImplementerId")
.HasColumnType("int");
b.Property<int>("ReinforcedId") b.Property<int>("ReinforcedId")
.HasColumnType("int"); .HasColumnType("int");
@ -103,6 +133,8 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
b.HasIndex("ClientId"); b.HasIndex("ClientId");
b.HasIndex("ImplementerId");
b.HasIndex("ReinforcedId"); b.HasIndex("ReinforcedId");
b.ToTable("Orders"); b.ToTable("Orders");
@ -162,6 +194,10 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
.IsRequired(); .IsRequired();
b.HasOne("PrecastConcretePlantDatabaseImplement.Models.Implementer", "Implementer")
.WithMany("Orders")
.HasForeignKey("ImplementerId");
b.HasOne("PrecastConcretePlantDatabaseImplement.Models.Reinforced", "Reinforced") b.HasOne("PrecastConcretePlantDatabaseImplement.Models.Reinforced", "Reinforced")
.WithMany("Orders") .WithMany("Orders")
.HasForeignKey("ReinforcedId") .HasForeignKey("ReinforcedId")
@ -170,6 +206,8 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
b.Navigation("Client"); b.Navigation("Client");
b.Navigation("Implementer");
b.Navigation("Reinforced"); b.Navigation("Reinforced");
}); });
@ -202,6 +240,11 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
b.Navigation("ReinforcedComponents"); b.Navigation("ReinforcedComponents");
}); });
modelBuilder.Entity("PrecastConcretePlantDatabaseImplement.Models.Implementer", b =>
{
b.Navigation("Orders");
});
modelBuilder.Entity("PrecastConcretePlantDatabaseImplement.Models.Reinforced", b => modelBuilder.Entity("PrecastConcretePlantDatabaseImplement.Models.Reinforced", b =>
{ {
b.Navigation("Components"); b.Navigation("Components");

View File

@ -6,7 +6,7 @@ using Microsoft.EntityFrameworkCore.Migrations;
namespace PrecastConcretePlantDatabaseImplement.Migrations namespace PrecastConcretePlantDatabaseImplement.Migrations
{ {
/// <inheritdoc /> /// <inheritdoc />
public partial class InitialCreate : Migration public partial class initial : Migration
{ {
/// <inheritdoc /> /// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder) protected override void Up(MigrationBuilder migrationBuilder)
@ -40,6 +40,22 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
table.PrimaryKey("PK_Components", x => x.Id); table.PrimaryKey("PK_Components", x => x.Id);
}); });
migrationBuilder.CreateTable(
name: "Implementers",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ImplementerFIO = table.Column<string>(type: "nvarchar(max)", nullable: false),
Password = table.Column<string>(type: "nvarchar(max)", nullable: false),
WorkExperience = table.Column<int>(type: "int", nullable: false),
Qualification = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Implementers", x => x.Id);
});
migrationBuilder.CreateTable( migrationBuilder.CreateTable(
name: "Reinforceds", name: "Reinforceds",
columns: table => new columns: table => new
@ -63,6 +79,7 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
ClientId = table.Column<int>(type: "int", nullable: false), ClientId = table.Column<int>(type: "int", nullable: false),
Count = table.Column<int>(type: "int", nullable: false), Count = table.Column<int>(type: "int", nullable: false),
Sum = table.Column<double>(type: "float", nullable: false), Sum = table.Column<double>(type: "float", nullable: false),
ImplementerId = table.Column<int>(type: "int", nullable: true),
Status = table.Column<int>(type: "int", nullable: false), Status = table.Column<int>(type: "int", nullable: false),
DateCreate = table.Column<DateTime>(type: "datetime2", nullable: false), DateCreate = table.Column<DateTime>(type: "datetime2", nullable: false),
DateImplement = table.Column<DateTime>(type: "datetime2", nullable: true), DateImplement = table.Column<DateTime>(type: "datetime2", nullable: true),
@ -77,6 +94,11 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
principalTable: "Clients", principalTable: "Clients",
principalColumn: "Id", principalColumn: "Id",
onDelete: ReferentialAction.Cascade); onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_Orders_Implementers_ImplementerId",
column: x => x.ImplementerId,
principalTable: "Implementers",
principalColumn: "Id");
table.ForeignKey( table.ForeignKey(
name: "FK_Orders_Reinforceds_ReinforcedId", name: "FK_Orders_Reinforceds_ReinforcedId",
column: x => x.ReinforcedId, column: x => x.ReinforcedId,
@ -117,6 +139,11 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
table: "Orders", table: "Orders",
column: "ClientId"); column: "ClientId");
migrationBuilder.CreateIndex(
name: "IX_Orders_ImplementerId",
table: "Orders",
column: "ImplementerId");
migrationBuilder.CreateIndex( migrationBuilder.CreateIndex(
name: "IX_Orders_ReinforcedId", name: "IX_Orders_ReinforcedId",
table: "Orders", table: "Orders",
@ -145,6 +172,9 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "Clients"); name: "Clients");
migrationBuilder.DropTable(
name: "Implementers");
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "Components"); name: "Components");

View File

@ -10,14 +10,14 @@ using PrecastConcretePlantDatabaseImplement;
namespace PrecastConcretePlantDatabaseImplement.Migrations namespace PrecastConcretePlantDatabaseImplement.Migrations
{ {
[DbContext(typeof(PrecastConcretePlantDataBase))] [DbContext(typeof(PrecastConcretePlantDatabase))]
partial class PrecastConcretePlantDataBaseModelSnapshot : ModelSnapshot partial class PrecastConcretePlantDatabaseModelSnapshot : ModelSnapshot
{ {
protected override void BuildModel(ModelBuilder modelBuilder) protected override void BuildModel(ModelBuilder modelBuilder)
{ {
#pragma warning disable 612, 618 #pragma warning disable 612, 618
modelBuilder modelBuilder
.HasAnnotation("ReinforcedVersion", "7.0.17") .HasAnnotation("ProductVersion", "7.0.17")
.HasAnnotation("Relational:MaxIdentifierLength", 128); .HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
@ -67,6 +67,33 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
b.ToTable("Components"); b.ToTable("Components");
}); });
modelBuilder.Entity("PrecastConcretePlantDatabaseImplement.Models.Implementer", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ImplementerFIO")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Password")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Qualification")
.HasColumnType("int");
b.Property<int>("WorkExperience")
.HasColumnType("int");
b.HasKey("Id");
b.ToTable("Implementers");
});
modelBuilder.Entity("PrecastConcretePlantDatabaseImplement.Models.Order", b => modelBuilder.Entity("PrecastConcretePlantDatabaseImplement.Models.Order", b =>
{ {
b.Property<int>("Id") b.Property<int>("Id")
@ -87,6 +114,9 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
b.Property<DateTime?>("DateImplement") b.Property<DateTime?>("DateImplement")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
b.Property<int?>("ImplementerId")
.HasColumnType("int");
b.Property<int>("ReinforcedId") b.Property<int>("ReinforcedId")
.HasColumnType("int"); .HasColumnType("int");
@ -100,6 +130,8 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
b.HasIndex("ClientId"); b.HasIndex("ClientId");
b.HasIndex("ImplementerId");
b.HasIndex("ReinforcedId"); b.HasIndex("ReinforcedId");
b.ToTable("Orders"); b.ToTable("Orders");
@ -159,6 +191,10 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
.IsRequired(); .IsRequired();
b.HasOne("PrecastConcretePlantDatabaseImplement.Models.Implementer", "Implementer")
.WithMany("Orders")
.HasForeignKey("ImplementerId");
b.HasOne("PrecastConcretePlantDatabaseImplement.Models.Reinforced", "Reinforced") b.HasOne("PrecastConcretePlantDatabaseImplement.Models.Reinforced", "Reinforced")
.WithMany("Orders") .WithMany("Orders")
.HasForeignKey("ReinforcedId") .HasForeignKey("ReinforcedId")
@ -167,6 +203,8 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
b.Navigation("Client"); b.Navigation("Client");
b.Navigation("Implementer");
b.Navigation("Reinforced"); b.Navigation("Reinforced");
}); });
@ -199,6 +237,11 @@ namespace PrecastConcretePlantDatabaseImplement.Migrations
b.Navigation("ReinforcedComponents"); b.Navigation("ReinforcedComponents");
}); });
modelBuilder.Entity("PrecastConcretePlantDatabaseImplement.Models.Implementer", b =>
{
b.Navigation("Orders");
});
modelBuilder.Entity("PrecastConcretePlantDatabaseImplement.Models.Reinforced", b => modelBuilder.Entity("PrecastConcretePlantDatabaseImplement.Models.Reinforced", b =>
{ {
b.Navigation("Components"); b.Navigation("Components");

View File

@ -0,0 +1,70 @@
using PrecastConcretePlantContracts.BindingModels;
using PrecastConcretePlantContracts.ViewModels;
using PrecastConcretePlantDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PrecastConcretePlantDatabaseImplement.Models
{
public class Implementer : IImplementerModel
{
public int Id { get; private set; }
[Required]
public string ImplementerFIO { get; private set; } = string.Empty;
[Required]
public string Password { get; private set; } = string.Empty;
[Required]
public int WorkExperience { get; private set; }
[Required]
public int Qualification { get; private set; }
[ForeignKey("ImplementerId")]
public virtual List<Order> Orders { get; set; } = new();
public static Implementer? Create(ImplementerBindingModel model)
{
if (model == null)
{
return null;
}
return new Implementer()
{
Id = model.Id,
ImplementerFIO = model.ImplementerFIO,
Password = model.Password,
WorkExperience = model.WorkExperience,
Qualification = model.Qualification,
};
}
public void Update(ImplementerBindingModel model)
{
if (model == null)
{
return;
}
ImplementerFIO = model.ImplementerFIO;
Password = model.Password;
WorkExperience = model.WorkExperience;
Qualification = model.Qualification;
}
public ImplementerViewModel GetViewModel => new()
{
Id = Id,
ImplementerFIO = ImplementerFIO,
Password = Password,
WorkExperience = WorkExperience,
Qualification = Qualification,
};
}
}

View File

@ -19,7 +19,8 @@ namespace PrecastConcretePlantDatabaseImplement.Models
public int Count { get; private set; } public int Count { get; private set; }
[Required] [Required]
public double Sum { get; private set; } public double Sum { get; private set; }
[Required] public int? ImplementerId { get; set; }
[Required]
public OrderStatus Status { get; private set; } public OrderStatus Status { get; private set; }
[Required] [Required]
public DateTime DateCreate { get; private set; } public DateTime DateCreate { get; private set; }
@ -28,8 +29,9 @@ namespace PrecastConcretePlantDatabaseImplement.Models
public int ReinforcedId { get; private set; } public int ReinforcedId { get; private set; }
public virtual Reinforced Reinforced { get; set; } public virtual Reinforced Reinforced { get; set; }
public virtual Client Client { get; set; } public virtual Client Client { get; set; }
public virtual Implementer? Implementer { get; set; }
public static Order? Create(OrderBindingModel model) public static Order? Create(OrderBindingModel model)
{ {
if (model == null) if (model == null)
{ {
@ -45,7 +47,8 @@ namespace PrecastConcretePlantDatabaseImplement.Models
DateCreate = model.DateCreate, DateCreate = model.DateCreate,
DateImplement = model.DateImplement, DateImplement = model.DateImplement,
ReinforcedId = model.ReinforcedId, ReinforcedId = model.ReinforcedId,
}; ImplementerId = model.ImplementerId,
};
} }
public void Update(OrderBindingModel? model) public void Update(OrderBindingModel? model)
@ -55,21 +58,31 @@ namespace PrecastConcretePlantDatabaseImplement.Models
return; return;
} }
Status = model.Status; Status = model.Status;
DateImplement = model.DateImplement; DateImplement = model.DateImplement;
} ImplementerId = model.ImplementerId;
}
public OrderViewModel GetViewModel => new() public OrderViewModel GetViewModel
{ {
ReinforcedId = ReinforcedId, get
ReinforcedName = Reinforced.ReinforcedName, {
ClientId = ClientId, using var context = new PrecastConcretePlantDatabase();
ClientFIO = Client.ClientFIO, return new OrderViewModel
Count = Count, {
Sum = Sum, ReinforcedId = ReinforcedId,
Status = Status, ImplementerId = ImplementerId,
DateCreate = DateCreate, ImplementerFIO = Implementer?.ImplementerFIO ?? string.Empty,
DateImplement = DateImplement, ReinforcedName = context.Reinforceds.FirstOrDefault(x => x.Id == ReinforcedId)?.ReinforcedName ?? string.Empty,
Id = Id, ClientId = ClientId,
}; ClientFIO = context.Clients.FirstOrDefault(x => x.Id == ClientId)?.ClientFIO ?? string.Empty,
} Count = Count,
} Sum = Sum,
Status = Status,
DateCreate = DateCreate,
DateImplement = DateImplement,
Id = Id,
};
}
}
}
}

View File

@ -45,7 +45,7 @@ namespace PrecastConcretePlantDatabaseImplement.Models
[ForeignKey("ReinforcedId")] [ForeignKey("ReinforcedId")]
public virtual List<Order> Orders { get; set; } = new(); public virtual List<Order> Orders { get; set; } = new();
public static Reinforced Create(PrecastConcretePlantDataBase context, ReinforcedBindingModel model) public static Reinforced Create(PrecastConcretePlantDatabase context, ReinforcedBindingModel model)
{ {
return new Reinforced() return new Reinforced()
{ {
@ -73,7 +73,7 @@ namespace PrecastConcretePlantDatabaseImplement.Models
ReinforcedComponents = ReinforcedComponents ReinforcedComponents = ReinforcedComponents
}; };
//метод обновления списка связей(вместо контейнски) //метод обновления списка связей(вместо контейнски)
public void UpdateComponents(PrecastConcretePlantDataBase context, ReinforcedBindingModel model) public void UpdateComponents(PrecastConcretePlantDatabase context, ReinforcedBindingModel model)
{ {
var ReinforcedComponents = context.ReinforcedComponents var ReinforcedComponents = context.ReinforcedComponents
.Where(rec => rec.ReinforcedId == model.Id).ToList(); .Where(rec => rec.ReinforcedId == model.Id).ToList();

View File

@ -9,7 +9,7 @@ using System.Threading.Tasks;
namespace PrecastConcretePlantDatabaseImplement namespace PrecastConcretePlantDatabaseImplement
{ {
public class PrecastConcretePlantDataBase : DbContext public class PrecastConcretePlantDatabase : DbContext
{ {
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{ {
@ -24,6 +24,7 @@ namespace PrecastConcretePlantDatabaseImplement
public virtual DbSet<ReinforcedComponent> ReinforcedComponents { set; get; } public virtual DbSet<ReinforcedComponent> ReinforcedComponents { set; get; }
public virtual DbSet<Order> Orders { set; get; } public virtual DbSet<Order> Orders { set; get; }
public virtual DbSet<Client> Clients { set; get; } public virtual DbSet<Client> Clients { set; get; }
public virtual DbSet<Implementer> Implementers { set; get; }
} }
} }

View File

@ -4,7 +4,6 @@
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -15,11 +15,13 @@ namespace PrecastConcretePlantFileImplement
private readonly string OrderFileName = "Order.xml"; private readonly string OrderFileName = "Order.xml";
private readonly string ReinforcedFileName = "Reinforced.xml"; private readonly string ReinforcedFileName = "Reinforced.xml";
private readonly string ClientFileName = "Client.xml"; private readonly string ClientFileName = "Client.xml";
public List<Component> Components { get; private set; } private readonly string ImplementerFileName = "Implementer.xml";
public List<Component> Components { get; private set; }
public List<Order> Orders { get; private set; } public List<Order> Orders { get; private set; }
public List<Reinforced> Reinforceds { get; private set; } public List<Reinforced> Reinforceds { get; private set; }
public List<Client> Clients { get; private set; } public List<Client> Clients { get; private set; }
public static DataFileSingleton GetInstance() public List<Implementer> Implementers { get; private set; }
public static DataFileSingleton GetInstance()
{ {
if (instance == null) if (instance == null)
{ {
@ -31,13 +33,15 @@ namespace PrecastConcretePlantFileImplement
public void SaveReinforceds() => SaveData(Reinforceds, ReinforcedFileName, "Reinforceds", x => x.GetXElement); public void SaveReinforceds() => SaveData(Reinforceds, ReinforcedFileName, "Reinforceds", x => x.GetXElement);
public void SaveOrders() => SaveData(Orders, OrderFileName, "Orders", x => x.GetXElement); public void SaveOrders() => SaveData(Orders, OrderFileName, "Orders", x => x.GetXElement);
public void SaveClients() => SaveData(Clients, OrderFileName, "Clients", x => x.GetXElement); public void SaveClients() => SaveData(Clients, OrderFileName, "Clients", x => x.GetXElement);
private DataFileSingleton() public void SaveImplementers() => SaveData(Implementers, OrderFileName, "Implementers", x => x.GetXElement);
private DataFileSingleton()
{ {
Components = LoadData(ComponentFileName, "Component", x => Component.Create(x)!)!; Components = LoadData(ComponentFileName, "Component", x => Component.Create(x)!)!;
Reinforceds = LoadData(ReinforcedFileName, "Reinforced", x => Reinforced.Create(x)!)!; Reinforceds = LoadData(ReinforcedFileName, "Reinforced", x => Reinforced.Create(x)!)!;
Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!; Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!;
Clients = LoadData(ClientFileName, "Client", x => Client.Create(x)!)!; Clients = LoadData(ClientFileName, "Client", x => Client.Create(x)!)!;
} Implementers = LoadData(ImplementerFileName, "Implementer", x => Implementer.Create(x)!)!;
}
private static List<T>? LoadData<T>(string filename, string xmlNodeName, Func<XElement, T> selectFunction) private static List<T>? LoadData<T>(string filename, string xmlNodeName, Func<XElement, T> selectFunction)
{ {
if (File.Exists(filename)) if (File.Exists(filename))

View File

@ -0,0 +1,96 @@
using PrecastConcretePlantContracts.BindingModels;
using PrecastConcretePlantContracts.SearchModels;
using PrecastConcretePlantContracts.StoragesContracts;
using PrecastConcretePlantContracts.ViewModels;
using PrecastConcretePlantFileImplement.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PrecastConcretePlantFileImplement.Implements
{
public class ImplementerStorage : IImplementerStorage
{
private readonly DataFileSingleton _source;
public ImplementerStorage()
{
_source = DataFileSingleton.GetInstance();
}
public ImplementerViewModel? Delete(ImplementerBindingModel model)
{
var res = _source.Implementers.FirstOrDefault(x => x.Id == model.Id);
if (res != null)
{
_source.Implementers.Remove(res);
_source.SaveImplementers();
}
return res?.GetViewModel;
}
public ImplementerViewModel? GetElement(ImplementerSearchModel model)
{
if (model.Id.HasValue)
return _source.Implementers.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel;
if (model.ImplementerFIO != null && model.Password != null)
return _source.Implementers
.FirstOrDefault(x => x.ImplementerFIO.Equals(model.ImplementerFIO)
&& x.Password.Equals(model.Password))
?.GetViewModel;
if (model.ImplementerFIO != null)
return _source.Implementers.FirstOrDefault(x => x.ImplementerFIO.Equals(model.ImplementerFIO))?.GetViewModel;
return null;
}
public List<ImplementerViewModel> GetFilteredList(ImplementerSearchModel model)
{
if (model == null)
{
return new();
}
if (model.Id.HasValue)
{
var res = GetElement(model);
return res != null ? new() { res } : new();
}
if (model.ImplementerFIO != null)
{
return _source.Implementers
.Where(x => x.ImplementerFIO.Equals(model.ImplementerFIO))
.Select(x => x.GetViewModel)
.ToList();
}
return new();
}
public List<ImplementerViewModel> GetFullList()
{
return _source.Implementers.Select(x => x.GetViewModel).ToList();
}
public ImplementerViewModel? Insert(ImplementerBindingModel model)
{
model.Id = _source.Implementers.Count > 0 ? _source.Implementers.Max(x => x.Id) + 1 : 1;
var res = Implementer.Create(model);
if (res != null)
{
_source.Implementers.Add(res);
_source.SaveImplementers();
}
return res?.GetViewModel;
}
public ImplementerViewModel? Update(ImplementerBindingModel model)
{
var res = _source.Implementers.FirstOrDefault(x => x.Id == model.Id);
if (res != null)
{
res.Update(model);
_source.SaveImplementers();
}
return res?.GetViewModel;
}
}
}

View File

@ -12,102 +12,113 @@ using System.Xml.Linq;
namespace PrecastConcretePlantFileImplement.Implements namespace PrecastConcretePlantFileImplement.Implements
{ {
public class OrderStorage : IOrderStorage public class OrderStorage : IOrderStorage
{ {
private readonly DataFileSingleton source; private readonly DataFileSingleton source;
public OrderStorage() public OrderStorage()
{ {
source = DataFileSingleton.GetInstance(); source = DataFileSingleton.GetInstance();
} }
public OrderViewModel? Delete(OrderBindingModel model) public OrderViewModel? Delete(OrderBindingModel model)
{ {
var element = source.Orders.FirstOrDefault(x => x.Id == model.Id); var element = source.Orders.FirstOrDefault(x => x.Id == model.Id);
if (element != null) if (element != null)
{ {
source.Orders.Remove(element); source.Orders.Remove(element);
source.SaveOrders(); source.SaveOrders();
return ViewAddReinforcedName(element.GetViewModel); return ViewAddReinforcedName(element.GetViewModel);
} }
return null; return null;
} }
public OrderViewModel? GetElement(OrderSearchModel model) public OrderViewModel? GetElement(OrderSearchModel model)
{ {
if (!model.Id.HasValue) if (model.ImplementerId.HasValue && model.Statuses != null)
{ {
return null; return source.Orders
} .FirstOrDefault(x => x.ImplementerId == model.ImplementerId &&
var order = source.Orders.FirstOrDefault(x => x.Id == model.Id); model.Statuses.Contains(x.Status))
if (order == null) ?.GetViewModel;
{ }
return null; if (model.ImplementerId.HasValue)
} {
return ViewAddReinforcedName(order.GetViewModel); return source.Orders.FirstOrDefault(x => x.ImplementerId == model.ImplementerId)?.GetViewModel;
} }
if (!model.Id.HasValue)
{
return null;
}
var order = source.Orders.FirstOrDefault(x => x.Id == model.Id);
if (order == null)
{
return null;
}
return ViewAddReinforcedName(order.GetViewModel);
}
public List<OrderViewModel> GetFilteredList(OrderSearchModel model) public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
{ {
if (model.Id.HasValue) if (model.Id.HasValue)
{ {
return source.Orders.Where(x => x.Id == model.Id).Select(x => ViewAddReinforcedName(x.GetViewModel)).ToList(); return source.Orders.Where(x => x.Id == model.Id).Select(x => ViewAddReinforcedName(x.GetViewModel)).ToList();
} }
else if (model.DateFrom != null && model.DateTo != null) else if (model.DateFrom != null && model.DateTo != null)
{ {
return source.Orders.Where(x => x.DateCreate >= model.DateFrom && x.DateCreate <= model.DateTo).Select(x => ViewAddReinforcedName(x.GetViewModel)).ToList(); return source.Orders.Where(x => x.DateCreate >= model.DateFrom && x.DateCreate <= model.DateTo).Select(x => ViewAddReinforcedName(x.GetViewModel)).ToList();
} }
else if (model.ClientId.HasValue) else if (model.ClientId.HasValue)
{ {
return source.Orders.Where(x => x.ClientId == model.ClientId).Select(x => ViewAddReinforcedName(x.GetViewModel)).ToList(); return source.Orders.Where(x => x.ClientId == model.ClientId).Select(x => ViewAddReinforcedName(x.GetViewModel)).ToList();
} }
return new(); return new();
} }
public List<OrderViewModel> GetFullList() public List<OrderViewModel> GetFullList()
{ {
return source.Orders.Select(x => ViewAddReinforcedName(x.GetViewModel)).ToList(); return source.Orders.Select(x => ViewAddReinforcedName(x.GetViewModel)).ToList();
} }
public OrderViewModel? Insert(OrderBindingModel model) public OrderViewModel? Insert(OrderBindingModel model)
{ {
model.Id = source.Orders.Count > 0 ? source.Orders.Max(x => x.Id) + 1 : 1; model.Id = source.Orders.Count > 0 ? source.Orders.Max(x => x.Id) + 1 : 1;
var newOrder = Order.Create(model); var newOrder = Order.Create(model);
if (newOrder == null) if (newOrder == null)
{ {
return null; return null;
} }
source.Orders.Add(newOrder); source.Orders.Add(newOrder);
source.SaveOrders(); source.SaveOrders();
return ViewAddReinforcedName(newOrder.GetViewModel); return ViewAddReinforcedName(newOrder.GetViewModel);
} }
public OrderViewModel? Update(OrderBindingModel model) public OrderViewModel? Update(OrderBindingModel model)
{ {
var order = source.Orders.FirstOrDefault(x => x.Id == model.Id); var order = source.Orders.FirstOrDefault(x => x.Id == model.Id);
if (order == null) if (order == null)
{ {
return null; return null;
} }
order.Update(model); order.Update(model);
source.SaveOrders(); source.SaveOrders();
return ViewAddReinforcedName(order.GetViewModel); return ViewAddReinforcedName(order.GetViewModel);
} }
private OrderViewModel ViewAddReinforcedName(OrderViewModel model) private OrderViewModel ViewAddReinforcedName(OrderViewModel model)
{ {
var selectedReinforced = source.Reinforceds.FirstOrDefault(x => x.Id == model.ReinforcedId); var selectedReinforced = source.Reinforceds.FirstOrDefault(x => x.Id == model.ReinforcedId);
model.ReinforcedName = selectedReinforced?.ReinforcedName; model.ReinforcedName = selectedReinforced?.ReinforcedName;
return model; return model;
} }
} }
} }

View File

@ -0,0 +1,86 @@
using PrecastConcretePlantContracts.BindingModels;
using PrecastConcretePlantContracts.ViewModels;
using PrecastConcretePlantDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace PrecastConcretePlantFileImplement.Models
{
public class Implementer : IImplementerModel
{
public string ImplementerFIO { get; private set; } = string.Empty;
public string Password { get; private set; } = string.Empty;
public int WorkExperience { get; private set; }
public int Qualification { get; private set; }
public int Id { get; private set; }
public static Implementer? Create(XElement element)
{
if (element == null)
{
return null;
}
return new()
{
ImplementerFIO = element.Element("FIO")!.Value,
Password = element.Element("Password")!.Value,
Id = Convert.ToInt32(element.Attribute("Id")!.Value),
Qualification = Convert.ToInt32(element.Element("Qualification")!.Value),
WorkExperience = Convert.ToInt32(element.Element("WorkExperience")!.Value),
};
}
public static Implementer? Create(ImplementerBindingModel model)
{
if (model == null)
{
return null;
}
return new()
{
Id = model.Id,
Password = model.Password,
Qualification = model.Qualification,
ImplementerFIO = model.ImplementerFIO,
WorkExperience = model.WorkExperience,
};
}
public void Update(ImplementerBindingModel model)
{
if (model == null)
{
return;
}
Password = model.Password;
Qualification = model.Qualification;
ImplementerFIO = model.ImplementerFIO;
WorkExperience = model.WorkExperience;
}
public ImplementerViewModel GetViewModel => new()
{
Id = Id,
Password = Password,
Qualification = Qualification,
ImplementerFIO = ImplementerFIO,
WorkExperience = WorkExperience
};
public XElement GetXElement => new("Client",
new XAttribute("Id", Id),
new XElement("Password", Password),
new XElement("FIO", ImplementerFIO),
new XElement("Qualification", Qualification),
new XElement("WorkExperience", WorkExperience)
);
}
}

View File

@ -21,8 +21,8 @@ namespace PrecastConcretePlantFileImplement.Models
public int Count { get; private set; } public int Count { get; private set; }
public double Sum { get; private set; } public double Sum { get; private set; }
public int? ImplementerId { get; set; }
public OrderStatus Status { get; private set; } public OrderStatus Status { get; private set; }
public DateTime DateCreate { get; private set; } public DateTime DateCreate { get; private set; }
@ -38,8 +38,9 @@ namespace PrecastConcretePlantFileImplement.Models
{ {
ReinforcedId = model.ReinforcedId, ReinforcedId = model.ReinforcedId,
ClientId = model.ClientId, ClientId = model.ClientId,
Count = model.Count, Count = model.Count,
Sum = model.Sum, Sum = model.Sum,
ImplementerId = model.ImplementerId,
Status = model.Status, Status = model.Status,
DateCreate = model.DateCreate, DateCreate = model.DateCreate,
DateImplement = model.DateImplement, DateImplement = model.DateImplement,
@ -60,7 +61,8 @@ namespace PrecastConcretePlantFileImplement.Models
ReinforcedId = Convert.ToInt32(element.Element("ReinforcedId")!.Value), ReinforcedId = Convert.ToInt32(element.Element("ReinforcedId")!.Value),
Count = Convert.ToInt32(element.Element("Count")!.Value), Count = Convert.ToInt32(element.Element("Count")!.Value),
Sum = Convert.ToDouble(element.Element("Sum")!.Value), Sum = Convert.ToDouble(element.Element("Sum")!.Value),
Status = (OrderStatus)(Enum.Parse(typeof(OrderStatus), element.Element("Status")!.Value)), ImplementerId = Convert.ToInt32(element.Element("ImplementerId")!.Value),
Status = (OrderStatus)(Enum.Parse(typeof(OrderStatus), element.Element("Status")!.Value)),
DateCreate = Convert.ToDateTime(element.Element("DateCreate")!.Value), DateCreate = Convert.ToDateTime(element.Element("DateCreate")!.Value),
DateImplement = (dateImplement == "" || dateImplement is null) ? Convert.ToDateTime(null) : Convert.ToDateTime(dateImplement) DateImplement = (dateImplement == "" || dateImplement is null) ? Convert.ToDateTime(null) : Convert.ToDateTime(dateImplement)
}; };
@ -73,7 +75,8 @@ namespace PrecastConcretePlantFileImplement.Models
} }
Status = model.Status; Status = model.Status;
DateImplement = model.DateImplement; DateImplement = model.DateImplement;
} ImplementerId = model.ImplementerId;
}
public OrderViewModel GetViewModel => new() public OrderViewModel GetViewModel => new()
{ {
Id = Id, Id = Id,
@ -81,7 +84,8 @@ namespace PrecastConcretePlantFileImplement.Models
ReinforcedId = ReinforcedId, ReinforcedId = ReinforcedId,
Count = Count, Count = Count,
Sum = Sum, Sum = Sum,
Status = Status, ImplementerId = ImplementerId,
Status = Status,
DateCreate = DateCreate, DateCreate = DateCreate,
DateImplement = DateImplement DateImplement = DateImplement
}; };
@ -92,7 +96,8 @@ namespace PrecastConcretePlantFileImplement.Models
new XElement("ReinforcedId", ReinforcedId.ToString()), new XElement("ReinforcedId", ReinforcedId.ToString()),
new XElement("Count", Count.ToString()), new XElement("Count", Count.ToString()),
new XElement("Sum", Sum.ToString()), new XElement("Sum", Sum.ToString()),
new XElement("Status", Status.ToString()), new XElement("ImplementerId", ImplementerId),
new XElement("Status", Status.ToString()),
new XElement("DateCreate", DateCreate.ToString()), new XElement("DateCreate", DateCreate.ToString()),
new XElement("DateImplement", DateImplement.ToString())); new XElement("DateImplement", DateImplement.ToString()));
} }

View File

@ -14,13 +14,15 @@ namespace PrecastConcretePlantListImplement
public List<Order> Orders { get; set; } public List<Order> Orders { get; set; }
public List<Reinforced> Reinforceds { get; set; } public List<Reinforced> Reinforceds { get; set; }
public List<Client> Clients { get; set; } public List<Client> Clients { get; set; }
private DataListSingleton() public List<Implementer> Implementers { get; set; }
private DataListSingleton()
{ {
Components = new List<Component>(); Components = new List<Component>();
Orders = new List<Order>(); Orders = new List<Order>();
Reinforceds = new List<Reinforced>(); Reinforceds = new List<Reinforced>();
Clients = new List<Client>(); Clients = new List<Client>();
} Implementers = new List<Implementer>();
}
public static DataListSingleton GetInstance() public static DataListSingleton GetInstance()
{ {
if (_instance == null) if (_instance == null)

View File

@ -0,0 +1,131 @@
using PrecastConcretePlantContracts.BindingModels;
using PrecastConcretePlantContracts.SearchModels;
using PrecastConcretePlantContracts.StoragesContracts;
using PrecastConcretePlantContracts.ViewModels;
using PrecastConcretePlantListImplement.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PrecastConcretePlantListImplement.Implements
{
public class ImplementerStorage : IImplementerStorage
{
private readonly DataListSingleton _source;
public ImplementerStorage()
{
_source = DataListSingleton.GetInstance();
}
public ImplementerViewModel? Delete(ImplementerBindingModel model)
{
for (int i = 0; i < _source.Implementers.Count; ++i)
{
if (_source.Implementers[i].Id == model.Id)
{
var element = _source.Implementers[i];
_source.Implementers.RemoveAt(i);
return element.GetViewModel;
}
}
return null;
}
public ImplementerViewModel? GetElement(ImplementerSearchModel model)
{
foreach (var x in _source.Implementers)
{
if (model.Id.HasValue && x.Id == model.Id)
return x.GetViewModel;
if (model.ImplementerFIO != null && model.Password != null &&
x.ImplementerFIO.Equals(model.ImplementerFIO) &&
x.Password.Equals(model.Password))
return x.GetViewModel;
if (model.ImplementerFIO != null && x.ImplementerFIO.Equals(model.ImplementerFIO))
return x.GetViewModel;
}
return null;
}
public List<ImplementerViewModel> GetFilteredList(ImplementerSearchModel model)
{
if (model == null)
{
return new();
}
if (model.Id.HasValue)
{
var res = GetElement(model);
return res != null ? new() { res } : new();
}
List<ImplementerViewModel> result = new();
if (model.ImplementerFIO != null)
{
foreach (var implementer in _source.Implementers)
{
if (implementer.ImplementerFIO.Equals(model.ImplementerFIO))
{
result.Add(implementer.GetViewModel);
}
}
}
return result;
}
public List<ImplementerViewModel> GetFullList()
{
var result = new List<ImplementerViewModel>();
foreach (var implementer in _source.Implementers)
{
result.Add(implementer.GetViewModel);
}
return result;
}
public ImplementerViewModel? Insert(ImplementerBindingModel model)
{
model.Id = 1;
foreach (var implementer in _source.Implementers)
{
if (model.Id <= implementer.Id)
{
model.Id = implementer.Id + 1;
}
}
var res = Implementer.Create(model);
if (res != null)
{
_source.Implementers.Add(res);
}
return res?.GetViewModel;
}
public ImplementerViewModel? Update(ImplementerBindingModel model)
{
foreach (var implementer in _source.Implementers)
{
if (implementer.Id == model.Id)
{
implementer.Update(model);
return implementer.GetViewModel;
}
}
return null;
}
}
}

View File

@ -11,124 +11,178 @@ using System.Threading.Tasks;
namespace PrecastConcretePlantListImplement.Implements namespace PrecastConcretePlantListImplement.Implements
{ {
public class OrderStorage : IOrderStorage public class OrderStorage : IOrderStorage
{ {
private readonly DataListSingleton _source; private readonly DataListSingleton _source;
public OrderStorage() public OrderStorage()
{ {
_source = DataListSingleton.GetInstance(); _source = DataListSingleton.GetInstance();
} }
public List<OrderViewModel> GetFullList() public List<OrderViewModel> GetFullList()
{ {
var result = new List<OrderViewModel>(); var result = new List<OrderViewModel>();
foreach (var order in _source.Orders) foreach (var order in _source.Orders)
{ {
result.Add(ViewAddReinforcedName(order.GetViewModel)); result.Add(ViewAddReinforcedName(order.GetViewModel));
} }
return result; return result;
} }
public List<OrderViewModel> GetFilteredList(OrderSearchModel model) public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
{ {
var result = new List<OrderViewModel>(); var result = new List<OrderViewModel>();
if (!model.Id.HasValue && (model.DateFrom == null || model.DateTo == null)) if (!model.Id.HasValue && (model.DateFrom == null || model.DateTo == null))
{ {
return result; return result;
} }
foreach (var order in _source.Orders) foreach (var order in _source.Orders)
{ {
if (model.Id.HasValue && order.Id == model.Id) if (model.Id.HasValue && order.Id == model.Id)
{ {
result.Add(ViewAddReinforcedName(order.GetViewModel)); result.Add(ViewAddReinforcedName(order.GetViewModel));
} }
} }
if (!model.Id.HasValue) if (model.Id.HasValue)
{ {
foreach (var order in _source.Orders) foreach (var order in _source.Orders)
{ {
if (order.DateCreate >= model.DateFrom && order.DateCreate <= model.DateTo) if (model.Id.HasValue && order.Id == model.Id)
{ {
result.Add(ViewAddReinforcedName(order.GetViewModel)); result.Add(order.GetViewModel);
} }
} else if (model.ImplementerId.HasValue && order.ImplementerId == model.ImplementerId)
} {
else if (!model.ClientId.HasValue) result.Add(order.GetViewModel);
{ }
foreach (var order in _source.Orders)
{ else if (model.Statuses != null && model.Statuses.Contains(order.Status))
if (order.ClientId == model.ClientId) {
{ result.Add(order.GetViewModel);
result.Add((order.GetViewModel)); }
} }
} }
} else if (model.DateFrom != null && model.DateTo != null)
return result; {
} foreach (var order in _source.Orders)
public OrderViewModel? GetElement(OrderSearchModel model) {
{ if (order.DateCreate >= model.DateFrom && order.DateCreate <= model.DateTo)
if (!model.Id.HasValue) {
{ result.Add(order.GetViewModel);
return null; }
} }
foreach (var order in _source.Orders) }
{ else if (model.ClientId.HasValue)
if (model.Id.HasValue && order.Id == model.Id) {
{ foreach (var order in _source.Orders)
return ViewAddReinforcedName(order.GetViewModel); {
} if (order.ClientId == model.ClientId)
} {
return null; result.Add((order.GetViewModel));
} }
public OrderViewModel? Insert(OrderBindingModel model) }
{ }
model.Id = 1;
foreach (var order in _source.Orders) return result;
{ }
if (model.Id <= order.Id) public OrderViewModel? GetElement(OrderSearchModel model)
{ {
model.Id = order.Id + 1; if (!model.Id.HasValue)
} {
} return null;
var newOrder = Order.Create(model); }
if (newOrder == null) foreach (var order in _source.Orders)
{ {
return null; if (model.Id.HasValue && order.Id == model.Id)
} {
_source.Orders.Add(newOrder); return order.GetViewModel;
return ViewAddReinforcedName(newOrder.GetViewModel); }
} else if (model.ImplementerId.HasValue && model.Statuses != null &&
public OrderViewModel? Update(OrderBindingModel model) order.ImplementerId == model.ImplementerId &&
{ model.Statuses.Contains(order.Status))
foreach (var order in _source.Orders) {
{ return GetViewModel(order);
if (order.Id == model.Id) }
{
order.Update(model); else if (model.ImplementerId.HasValue &&
return ViewAddReinforcedName(order.GetViewModel); model.ImplementerId == order.ImplementerId)
} {
} return GetViewModel(order);
return null; }
} }
public OrderViewModel? Delete(OrderBindingModel model)
{ return null;
for (int i = 0; i < _source.Orders.Count; ++i) }
{ public OrderViewModel? Insert(OrderBindingModel model)
if (_source.Orders[i].Id == model.Id) {
{ model.Id = 1;
var element = _source.Orders[i]; foreach (var order in _source.Orders)
_source.Orders.RemoveAt(i); {
return ViewAddReinforcedName(element.GetViewModel); if (model.Id <= order.Id)
} {
} model.Id = order.Id + 1;
return null; }
} }
private OrderViewModel ViewAddReinforcedName(OrderViewModel model) var newOrder = Order.Create(model);
{ if (newOrder == null)
var selectedReinforced = _source.Reinforceds.Find(reinforced => reinforced.Id == model.ReinforcedId); {
if (selectedReinforced != null) return null;
{ }
model.ReinforcedName = selectedReinforced.ReinforcedName; _source.Orders.Add(newOrder);
} return ViewAddReinforcedName(newOrder.GetViewModel);
return model; }
} public OrderViewModel? Update(OrderBindingModel model)
} {
foreach (var order in _source.Orders)
{
if (order.Id == model.Id)
{
order.Update(model);
return ViewAddReinforcedName(order.GetViewModel);
}
}
return null;
}
public OrderViewModel? Delete(OrderBindingModel model)
{
for (int i = 0; i < _source.Orders.Count; ++i)
{
if (_source.Orders[i].Id == model.Id)
{
var element = _source.Orders[i];
_source.Orders.RemoveAt(i);
return ViewAddReinforcedName(element.GetViewModel);
}
}
return null;
}
private OrderViewModel ViewAddReinforcedName(OrderViewModel model)
{
var selectedReinforced = _source.Reinforceds.Find(reinforced => reinforced.Id == model.ReinforcedId);
if (selectedReinforced != null)
{
model.ReinforcedName = selectedReinforced.ReinforcedName;
}
return model;
}
private OrderViewModel GetViewModel(Order model)
{
var res = model.GetViewModel;
foreach (var reinforced in _source.Reinforceds)
{
if (reinforced.Id == model.ReinforcedId)
{
res.ReinforcedName = reinforced.ReinforcedName;
break;
}
}
foreach (var client in _source.Clients)
{
if (client.Id == res.ClientId)
{
res.ClientFIO = client.ClientFIO;
break;
}
}
return res;
}
}
} }

View File

@ -0,0 +1,60 @@
using PrecastConcretePlantContracts.BindingModels;
using PrecastConcretePlantContracts.ViewModels;
using PrecastConcretePlantDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PrecastConcretePlantListImplement.Models
{
public class Implementer : IImplementerModel
{
public int Id { get; private set; }
public string ImplementerFIO { get; private set; } = string.Empty;
public string Password { get; private set; } = string.Empty;
public int WorkExperience { get; private set; }
public int Qualification { get; private set; }
public static Implementer? Create(ImplementerBindingModel model)
{
if (model == null)
{
return null;
}
return new()
{
Id = model.Id,
Password = model.Password,
Qualification = model.Qualification,
ImplementerFIO = model.ImplementerFIO,
WorkExperience = model.WorkExperience,
};
}
public void Update(ImplementerBindingModel model)
{
if (model == null)
{
return;
}
Password = model.Password;
Qualification = model.Qualification;
ImplementerFIO = model.ImplementerFIO;
WorkExperience = model.WorkExperience;
}
public ImplementerViewModel GetViewModel => new()
{
Id = Id,
Password = Password,
Qualification = Qualification,
ImplementerFIO = ImplementerFIO,
};
}
}

View File

@ -17,7 +17,8 @@ namespace PrecastConcretePlantListImplement.Models
public int ReinforcedId { get; private set; } public int ReinforcedId { get; private set; }
public int Count { get; private set; } public int Count { get; private set; }
public double Sum { get; private set; } public double Sum { get; private set; }
public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен; public int? ImplementerId { get; private set; }
public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен;
public DateTime DateCreate { get; private set; } = DateTime.Now; public DateTime DateCreate { get; private set; } = DateTime.Now;
public DateTime? DateImplement { get; private set; } public DateTime? DateImplement { get; private set; }
public static Order? Create(OrderBindingModel? model) public static Order? Create(OrderBindingModel? model)
@ -33,7 +34,8 @@ namespace PrecastConcretePlantListImplement.Models
ReinforcedId = model.ReinforcedId, ReinforcedId = model.ReinforcedId,
Count = model.Count, Count = model.Count,
Sum = model.Sum, Sum = model.Sum,
Status = model.Status, ImplementerId = model.ImplementerId,
Status = model.Status,
DateCreate = model.DateCreate, DateCreate = model.DateCreate,
DateImplement = model.DateImplement, DateImplement = model.DateImplement,
}; };
@ -46,7 +48,8 @@ namespace PrecastConcretePlantListImplement.Models
} }
Status = model.Status; Status = model.Status;
DateImplement = model.DateImplement; DateImplement = model.DateImplement;
} ImplementerId = model.ImplementerId;
}
public OrderViewModel GetViewModel => new() public OrderViewModel GetViewModel => new()
{ {
Id = Id, Id = Id,
@ -54,7 +57,8 @@ namespace PrecastConcretePlantListImplement.Models
ReinforcedId = ReinforcedId, ReinforcedId = ReinforcedId,
Count = Count, Count = Count,
Sum = Sum, Sum = Sum,
Status = Status, ImplementerId = ImplementerId,
Status = Status,
DateCreate = DateCreate, DateCreate = DateCreate,
DateImplement = DateImplement, DateImplement = DateImplement,
}; };

View File

@ -0,0 +1,104 @@
using Microsoft.AspNetCore.Mvc;
using PrecastConcretePlantContracts.BindingModels;
using PrecastConcretePlantContracts.BusinessLogicsContracts;
using PrecastConcretePlantContracts.SearchModels;
using PrecastConcretePlantContracts.ViewModels;
using PrecastConcretePlantDataModels.Enums;
namespace PrecastConcretePlantRestApi.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class ImplementerController : Controller
{
private readonly ILogger _logger;
private readonly IOrderLogic _order;
private readonly IImplementerLogic _logic;
public ImplementerController(IOrderLogic order, IImplementerLogic logic, ILogger<ImplementerController> logger)
{
_logger = logger;
_order = order;
_logic = logic;
}
[HttpGet]
public ImplementerViewModel? Login(string login, string password)
{
try
{
return _logic.ReadElement(new ImplementerSearchModel
{
ImplementerFIO = login,
Password = password
});
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка авторизации сотрудника");
throw;
}
}
[HttpGet]
public List<OrderViewModel>? GetNewOrders()
{
try
{
return _order.ReadList(new OrderSearchModel
{
Statuses = new() { OrderStatus.Принят }
});
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка получения новых заказов");
throw;
}
}
[HttpGet]
public OrderViewModel? GetImplementerOrder(int implementerId)
{
try
{
return _order.ReadElement(new OrderSearchModel
{
ImplementerId = implementerId
});
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка получения текущего заказа исполнителя");
throw;
}
}
[HttpPost]
public void TakeOrderInWork(OrderBindingModel model)
{
try
{
_order.TakeOrderInWork(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка перевода заказа с №{Id} в работу", model.Id);
throw;
}
}
[HttpPost]
public void FinishOrder(OrderBindingModel model)
{
try
{
_order.FinishOrder(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка отметки о готовности заказа с №{Id}", model.Id);
throw;
}
}
}
}

View File

@ -0,0 +1,173 @@
namespace PrecastConcretePlantView
{
partial class FormImplementer
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
label1 = new Label();
label2 = new Label();
label3 = new Label();
label4 = new Label();
textBoxFio = new TextBox();
textBoxPassword = new TextBox();
numericUpDownWorkExperience = new NumericUpDown();
numericUpDownQualification = new NumericUpDown();
buttonCancel = new Button();
buttonSave = new Button();
((System.ComponentModel.ISupportInitialize)numericUpDownWorkExperience).BeginInit();
((System.ComponentModel.ISupportInitialize)numericUpDownQualification).BeginInit();
SuspendLayout();
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(79, 12);
label1.Name = "label1";
label1.Size = new Size(37, 15);
label1.TabIndex = 0;
label1.Text = "ФИО:";
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(69, 41);
label2.Name = "label2";
label2.Size = new Size(52, 15);
label2.TabIndex = 1;
label2.Text = "Пароль:";
//
// label3
//
label3.AutoSize = true;
label3.Location = new Point(78, 68);
label3.Name = "label3";
label3.Size = new Size(38, 15);
label3.TabIndex = 2;
label3.Text = "Стаж:";
//
// label4
//
label4.AutoSize = true;
label4.Location = new Point(25, 97);
label4.Name = "label4";
label4.Size = new Size(91, 15);
label4.TabIndex = 3;
label4.Text = "Квалификация:";
//
// textBoxFio
//
textBoxFio.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
textBoxFio.Location = new Point(127, 9);
textBoxFio.Name = "textBoxFio";
textBoxFio.Size = new Size(271, 23);
textBoxFio.TabIndex = 4;
//
// textBoxPassword
//
textBoxPassword.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
textBoxPassword.Location = new Point(127, 38);
textBoxPassword.Name = "textBoxPassword";
textBoxPassword.PasswordChar = '*';
textBoxPassword.Size = new Size(271, 23);
textBoxPassword.TabIndex = 5;
//
// numericUpDownWorkExperience
//
numericUpDownWorkExperience.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
numericUpDownWorkExperience.Location = new Point(127, 66);
numericUpDownWorkExperience.Name = "numericUpDownWorkExperience";
numericUpDownWorkExperience.Size = new Size(271, 23);
numericUpDownWorkExperience.TabIndex = 6;
//
// numericUpDownQualification
//
numericUpDownQualification.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
numericUpDownQualification.Location = new Point(127, 95);
numericUpDownQualification.Name = "numericUpDownQualification";
numericUpDownQualification.Size = new Size(271, 23);
numericUpDownQualification.TabIndex = 7;
//
// buttonCancel
//
buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonCancel.Location = new Point(309, 138);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(89, 33);
buttonCancel.TabIndex = 8;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += ButtonCancel_Click;
//
// buttonSave
//
buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonSave.Location = new Point(214, 138);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(89, 33);
buttonSave.TabIndex = 9;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += ButtonSave_Click;
//
// FormImplementer
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(410, 183);
Controls.Add(buttonSave);
Controls.Add(buttonCancel);
Controls.Add(numericUpDownQualification);
Controls.Add(numericUpDownWorkExperience);
Controls.Add(textBoxPassword);
Controls.Add(textBoxFio);
Controls.Add(label4);
Controls.Add(label3);
Controls.Add(label2);
Controls.Add(label1);
Name = "FormImplementer";
Text = "Добавление / Редактирование исполнителя";
Load += FormImplementer_Load;
((System.ComponentModel.ISupportInitialize)numericUpDownWorkExperience).EndInit();
((System.ComponentModel.ISupportInitialize)numericUpDownQualification).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label label1;
private Label label2;
private Label label3;
private Label label4;
private TextBox textBoxFio;
private TextBox textBoxPassword;
private NumericUpDown numericUpDownWorkExperience;
private NumericUpDown numericUpDownQualification;
private Button buttonCancel;
private Button buttonSave;
}
}

View File

@ -0,0 +1,109 @@
using Microsoft.Extensions.Logging;
using PrecastConcretePlantContracts.BindingModels;
using PrecastConcretePlantContracts.BusinessLogicsContracts;
using PrecastConcretePlantContracts.SearchModels;
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 PrecastConcretePlantView
{
public partial class FormImplementer : Form
{
private readonly ILogger _logger;
private readonly IImplementerLogic _logic;
private int? _id;
public int Id { set { _id = value; } }
public FormImplementer(ILogger<FormImplementer> logger, IImplementerLogic logic)
{
InitializeComponent();
_logger = logger;
_logic = logic;
}
private void FormImplementer_Load(object sender, EventArgs e)
{
if (_id.HasValue)
{
try
{
_logger.LogInformation("Получение исполнителя");
var view = _logic.ReadElement(new ImplementerSearchModel
{
Id = _id.Value
});
if (view != null)
{
textBoxFio.Text = view.ImplementerFIO;
textBoxPassword.Text = view.Password;
numericUpDownQualification.Value = view.Qualification;
numericUpDownWorkExperience.Value = view.WorkExperience;
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка получения исполнителя");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
}
private void ButtonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxPassword.Text))
{
MessageBox.Show("Заполните пароль", "Ошибка",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (string.IsNullOrEmpty(textBoxFio.Text))
{
MessageBox.Show("Заполните фио", "Ошибка",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
_logger.LogInformation("Сохранение исполнителя");
try
{
var model = new ImplementerBindingModel
{
Id = _id ?? 0,
ImplementerFIO = textBoxFio.Text,
Password = textBoxPassword.Text,
Qualification = (int)numericUpDownQualification.Value,
WorkExperience = (int)numericUpDownWorkExperience.Value,
};
var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model);
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
MessageBox.Show("Сохранение прошло успешно", "Сообщение",
MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка сохранения исполнителя");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
private void ButtonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,125 @@
namespace PrecastConcretePlantView
{
partial class FormImplementerS
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
buttonRef = new Button();
buttonDel = new Button();
buttonUpd = new Button();
buttonAdd = new Button();
dataGridView = new DataGridView();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// buttonRef
//
buttonRef.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonRef.Location = new Point(652, 263);
buttonRef.Margin = new Padding(3, 4, 3, 4);
buttonRef.Name = "buttonRef";
buttonRef.Size = new Size(166, 49);
buttonRef.TabIndex = 9;
buttonRef.Text = "Обновить";
buttonRef.UseVisualStyleBackColor = true;
buttonRef.Click += ButtonRef_Click;
//
// buttonDel
//
buttonDel.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonDel.Location = new Point(652, 211);
buttonDel.Margin = new Padding(3, 4, 3, 4);
buttonDel.Name = "buttonDel";
buttonDel.Size = new Size(166, 44);
buttonDel.TabIndex = 8;
buttonDel.Text = "Удалить";
buttonDel.UseVisualStyleBackColor = true;
buttonDel.Click += ButtonDel_Click;
//
// buttonUpd
//
buttonUpd.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonUpd.Location = new Point(652, 158);
buttonUpd.Margin = new Padding(3, 4, 3, 4);
buttonUpd.Name = "buttonUpd";
buttonUpd.Size = new Size(166, 45);
buttonUpd.TabIndex = 7;
buttonUpd.Text = "Изменить";
buttonUpd.UseVisualStyleBackColor = true;
buttonUpd.Click += ButtonUpd_Click;
//
// buttonAdd
//
buttonAdd.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonAdd.Location = new Point(652, 110);
buttonAdd.Margin = new Padding(3, 4, 3, 4);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(166, 40);
buttonAdd.TabIndex = 6;
buttonAdd.Text = "Добавить";
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += ButtonAdd_Click;
//
// dataGridView
//
dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Location = new Point(14, 16);
dataGridView.Margin = new Padding(3, 4, 3, 4);
dataGridView.Name = "dataGridView";
dataGridView.RowHeadersWidth = 51;
dataGridView.RowTemplate.Height = 25;
dataGridView.Size = new Size(632, 403);
dataGridView.TabIndex = 5;
//
// FormImplementerS
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(825, 425);
Controls.Add(buttonRef);
Controls.Add(buttonDel);
Controls.Add(buttonUpd);
Controls.Add(buttonAdd);
Controls.Add(dataGridView);
Margin = new Padding(3, 4, 3, 4);
Name = "FormImplementerS";
Text = "Просмотр списка исполнителей";
Load += FormImplementerS_Load;
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private Button buttonRef;
private Button buttonDel;
private Button buttonUpd;
private Button buttonAdd;
private DataGridView dataGridView;
}
}

View File

@ -0,0 +1,112 @@
using Microsoft.Extensions.Logging;
using PrecastConcretePlantContracts.BindingModels;
using PrecastConcretePlantContracts.BusinessLogicsContracts;
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 PrecastConcretePlantView
{
public partial class FormImplementerS : Form
{
private readonly ILogger _logger;
private readonly IImplementerLogic _logic;
public FormImplementerS(ILogger<FormImplementerS> logger, IImplementerLogic logic)
{
InitializeComponent();
_logger = logger;
_logic = logic;
}
private void FormImplementerS_Load(object sender, EventArgs e)
{
LoadData();
}
private void LoadData()
{
try
{
var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["ImplementerFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка исполнителей");
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки исполнителей");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
private void ButtonAdd_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormImplementer));
if (service is FormImplementer form)
{
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
private void ButtonUpd_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
var service = Program.ServiceProvider?.GetService(typeof(FormImplementer));
if (service is FormImplementer form)
{
form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
}
private void ButtonDel_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
if (MessageBox.Show("Удалить запись?", "Вопрос",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
int id =
Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Удаление исполнителя");
try
{
if (!_logic.Delete(new ImplementerBindingModel
{
Id = id
}))
{
throw new Exception("Ошибка при удалении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка удаления исполнителя");
MessageBox.Show(ex.Message, "Ошибка",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void ButtonRef_Click(object sender, EventArgs e)
{
LoadData();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -20,193 +20,183 @@
base.Dispose(disposing); base.Dispose(disposing);
} }
#region Windows Form Designer generated code #region Windows Form Designer generated code
/// <summary> /// <summary>
/// Required method for Designer support - do not modify /// Required method for Designer support - do not modify
/// the contents of this method with the code editor. /// the contents of this method with the code editor.
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
menuStrip1 = new MenuStrip(); menuStrip1 = new MenuStrip();
справочникToolStripMenuItem = new ToolStripMenuItem(); справочникToolStripMenuItem = new ToolStripMenuItem();
компонентыToolStripMenuItem = new ToolStripMenuItem(); компонентыToolStripMenuItem = new ToolStripMenuItem();
изделияToolStripMenuItem = new ToolStripMenuItem(); изделияToolStripMenuItem = new ToolStripMenuItem();
клиентыToolStripMenuItem = new ToolStripMenuItem(); клиентыToolStripMenuItem = new ToolStripMenuItem();
отчетыToolStripMenuItem = new ToolStripMenuItem(); исполнителиToolStripMenuItem = new ToolStripMenuItem();
списокЖБИToolStripMenuItem = new ToolStripMenuItem(); отчетыToolStripMenuItem = new ToolStripMenuItem();
жБИПоКомпонентамToolStripMenuItem = new ToolStripMenuItem(); списокЖБИToolStripMenuItem = new ToolStripMenuItem();
списокЗаказовToolStripMenuItem = new ToolStripMenuItem(); жБИПоКомпонентамToolStripMenuItem = new ToolStripMenuItem();
buttonRef = new Button(); списокЗаказовToolStripMenuItem = new ToolStripMenuItem();
buttonIssuedOrder = new Button(); запускРаботToolStripMenuItem = new ToolStripMenuItem();
buttonOrderReady = new Button(); buttonRef = new Button();
buttonTakeOrderInWork = new Button(); buttonIssuedOrder = new Button();
buttonCreateOrder = new Button(); buttonCreateOrder = new Button();
dataGridView = new DataGridView(); dataGridView = new DataGridView();
menuStrip1.SuspendLayout(); menuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout(); SuspendLayout();
// //
// menuStrip1 // menuStrip1
// //
menuStrip1.ImageScalingSize = new Size(20, 20); menuStrip1.ImageScalingSize = new Size(20, 20);
menuStrip1.Items.AddRange(new ToolStripItem[] { справочникToolStripMenuItem, отчетыToolStripMenuItem }); menuStrip1.Items.AddRange(new ToolStripItem[] { справочникToolStripMenuItem, отчетыToolStripMenuItem, запускРаботToolStripMenuItem });
menuStrip1.Location = new Point(0, 0); menuStrip1.Location = new Point(0, 0);
menuStrip1.Name = "menuStrip1"; menuStrip1.Name = "menuStrip1";
menuStrip1.Padding = new Padding(6, 3, 0, 3); menuStrip1.Padding = new Padding(6, 3, 0, 3);
menuStrip1.Size = new Size(1100, 30); menuStrip1.Size = new Size(1100, 30);
menuStrip1.TabIndex = 0; menuStrip1.TabIndex = 0;
menuStrip1.Text = "menuStrip1"; menuStrip1.Text = "menuStrip1";
// //
// справочникToolStripMenuItem // справочникToolStripMenuItem
// //
справочникToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { компонентыToolStripMenuItem, изделияToolStripMenuItem, клиентыToolStripMenuItem }); справочникToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { компонентыToolStripMenuItem, изделияToolStripMenuItem, клиентыToolStripMenuItem, исполнителиToolStripMenuItem });
справочникToolStripMenuItem.Name = "справочникToolStripMenuItem"; справочникToolStripMenuItem.Name = "справочникToolStripMenuItem";
справочникToolStripMenuItem.Size = new Size(117, 24); справочникToolStripMenuItem.Size = new Size(117, 24);
справочникToolStripMenuItem.Text = "Справочники"; справочникToolStripMenuItem.Text = "Справочники";
// //
// компонентыToolStripMenuItem // компонентыToolStripMenuItem
// //
компонентыToolStripMenuItem.Name = омпонентыToolStripMenuItem"; компонентыToolStripMenuItem.Name = омпонентыToolStripMenuItem";
компонентыToolStripMenuItem.Size = new Size(224, 26); компонентыToolStripMenuItem.Size = new Size(224, 26);
компонентыToolStripMenuItem.Text = "Компоненты"; компонентыToolStripMenuItem.Text = "Компоненты";
компонентыToolStripMenuItem.Click += КомпонентыToolStripMenuItem_Click; компонентыToolStripMenuItem.Click += КомпонентыToolStripMenuItem_Click;
// //
// изделияToolStripMenuItem // изделияToolStripMenuItem
// //
изделияToolStripMenuItem.Name = "изделияToolStripMenuItem"; изделияToolStripMenuItem.Name = "изделияToolStripMenuItem";
изделияToolStripMenuItem.Size = new Size(224, 26); изделияToolStripMenuItem.Size = new Size(224, 26);
изделияToolStripMenuItem.Text = "Изделия"; изделияToolStripMenuItem.Text = "Изделия";
изделияToolStripMenuItem.Click += ИзделияToolStripMenuItem_Click; изделияToolStripMenuItem.Click += ИзделияToolStripMenuItem_Click;
// //
// клиентыToolStripMenuItem // клиентыToolStripMenuItem
// //
клиентыToolStripMenuItem.Name = "клиентыToolStripMenuItem"; клиентыToolStripMenuItem.Name = "клиентыToolStripMenuItem";
клиентыToolStripMenuItem.Size = new Size(224, 26); клиентыToolStripMenuItem.Size = new Size(224, 26);
клиентыToolStripMenuItem.Text = "Клиенты"; клиентыToolStripMenuItem.Text = "Клиенты";
клиентыToolStripMenuItem.Click += списокКлиентовToolStripMenuItem_Click; клиентыToolStripMenuItem.Click += списокКлиентовToolStripMenuItem_Click;
// //
// отчетыToolStripMenuItem // исполнителиToolStripMenuItem
// //
отчетыToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { списокЖБИToolStripMenuItem, жБИПоКомпонентамToolStripMenuItem, списокЗаказовToolStripMenuItem }); исполнителиToolStripMenuItem.Name = сполнителиToolStripMenuItem";
отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem"; исполнителиToolStripMenuItem.Size = new Size(224, 26);
отчетыToolStripMenuItem.Size = new Size(73, 24); исполнителиToolStripMenuItem.Text = "Исполнители";
отчетыToolStripMenuItem.Text = "Отчеты"; исполнителиToolStripMenuItem.Click += исполнителиToolStripMenuItem_Click;
// //
// списокЖБИToolStripMenuItem // отчетыToolStripMenuItem
// //
списокЖБИToolStripMenuItem.Name = "списокЖБИToolStripMenuItem"; отчетыToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { списокЖБИToolStripMenuItem, жБИПоКомпонентамToolStripMenuItem, списокЗаказовToolStripMenuItem });
списокЖБИToolStripMenuItem.Size = new Size(247, 26); отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem";
списокЖБИToolStripMenuItem.Text = "Список ЖБИ"; отчетыToolStripMenuItem.Size = new Size(73, 24);
списокЖБИToolStripMenuItem.Click += списокИзделийToolStripMenuItem_Click; отчетыToolStripMenuItem.Text = "Отчеты";
// //
// жБИПоКомпонентамToolStripMenuItem // списокЖБИToolStripMenuItem
// //
жБИПоКомпонентамToolStripMenuItem.Name = "жБИПоКомпонентамToolStripMenuItem"; списокЖБИToolStripMenuItem.Name = "списокЖБИToolStripMenuItem";
жБИПоКомпонентамToolStripMenuItem.Size = new Size(247, 26); списокЖБИToolStripMenuItem.Size = new Size(247, 26);
жБИПоКомпонентамToolStripMenuItem.Text = "ЖБИ по компонентам"; списокЖБИToolStripMenuItem.Text = "Список ЖБИ";
жБИПоКомпонентамToolStripMenuItem.Click += изделияПоКомпонентамToolStripMenuItem_Click; списокЖБИToolStripMenuItem.Click += списокИзделийToolStripMenuItem_Click;
// //
// списокЗаказовToolStripMenuItem // жБИПоКомпонентамToolStripMenuItem
// //
списокЗаказовToolStripMenuItem.Name = "списокЗаказовToolStripMenuItem"; жБИПоКомпонентамToolStripMenuItem.Name = "жБИПоКомпонентамToolStripMenuItem";
списокЗаказовToolStripMenuItem.Size = new Size(247, 26); жБИПоКомпонентамToolStripMenuItem.Size = new Size(247, 26);
списокЗаказовToolStripMenuItem.Text = "Список заказов"; жБИПоКомпонентамToolStripMenuItem.Text = "ЖБИ по компонентам";
списокЗаказовToolStripMenuItem.Click += списокЗаказовToolStripMenuItem_Click; жБИПоКомпонентамToolStripMenuItem.Click += изделияПоКомпонентамToolStripMenuItem_Click;
// //
// buttonRef // списокЗаказовToolStripMenuItem
// //
buttonRef.Location = new Point(931, 273); списокЗаказовToolStripMenuItem.Name = "списокЗаказовToolStripMenuItem";
buttonRef.Name = "buttonRef"; списокЗаказовToolStripMenuItem.Size = new Size(247, 26);
buttonRef.Size = new Size(157, 54); списокЗаказовToolStripMenuItem.Text = "Список заказов";
buttonRef.TabIndex = 23; списокЗаказовToolStripMenuItem.Click += списокЗаказовToolStripMenuItem_Click;
buttonRef.Text = "Обновить список"; //
buttonRef.UseVisualStyleBackColor = true; // запускРаботToolStripMenuItem
buttonRef.Click += ButtonRef_Click; //
// запускРаботToolStripMenuItem.Name = апускРаботToolStripMenuItem";
// buttonIssuedOrder запускРаботToolStripMenuItem.Size = new Size(114, 24);
// запускРаботToolStripMenuItem.Text = "Запуск работ";
buttonIssuedOrder.Location = new Point(931, 213); запускРаботToolStripMenuItem.Click += запускРаботToolStripMenuItem_Click;
buttonIssuedOrder.Name = "buttonIssuedOrder"; //
buttonIssuedOrder.Size = new Size(157, 54); // buttonRef
buttonIssuedOrder.TabIndex = 22; //
buttonIssuedOrder.Text = "Заказ выдан"; buttonRef.Location = new Point(931, 153);
buttonIssuedOrder.UseVisualStyleBackColor = true; buttonRef.Name = "buttonRef";
buttonIssuedOrder.Click += ButtonIssuedOrder_Click; buttonRef.Size = new Size(157, 54);
// buttonRef.TabIndex = 23;
// buttonOrderReady buttonRef.Text = "Обновить список";
// buttonRef.UseVisualStyleBackColor = true;
buttonOrderReady.Location = new Point(931, 153); buttonRef.Click += ButtonRef_Click;
buttonOrderReady.Name = "buttonOrderReady"; //
buttonOrderReady.Size = new Size(157, 54); // buttonIssuedOrder
buttonOrderReady.TabIndex = 21; //
buttonOrderReady.Text = "Заказ готов"; buttonIssuedOrder.Location = new Point(931, 93);
buttonOrderReady.UseVisualStyleBackColor = true; buttonIssuedOrder.Name = "buttonIssuedOrder";
buttonOrderReady.Click += ButtonOrderReady_Click; buttonIssuedOrder.Size = new Size(157, 54);
// buttonIssuedOrder.TabIndex = 22;
// buttonTakeOrderInWork buttonIssuedOrder.Text = "Заказ выдан";
// buttonIssuedOrder.UseVisualStyleBackColor = true;
buttonTakeOrderInWork.Location = new Point(931, 93); buttonIssuedOrder.Click += ButtonIssuedOrder_Click;
buttonTakeOrderInWork.Name = "buttonTakeOrderInWork"; //
buttonTakeOrderInWork.Size = new Size(157, 54); // buttonCreateOrder
buttonTakeOrderInWork.TabIndex = 20; //
buttonTakeOrderInWork.Text = "Отдать на выполнение"; buttonCreateOrder.Location = new Point(931, 33);
buttonTakeOrderInWork.UseVisualStyleBackColor = true; buttonCreateOrder.Name = "buttonCreateOrder";
buttonTakeOrderInWork.Click += ButtonTakeOrderInWork_Click; buttonCreateOrder.Size = new Size(157, 54);
// buttonCreateOrder.TabIndex = 19;
// buttonCreateOrder buttonCreateOrder.Text = "Создать заказ";
// buttonCreateOrder.UseVisualStyleBackColor = true;
buttonCreateOrder.Location = new Point(931, 33); buttonCreateOrder.Click += ButtonCreateOrder_Click;
buttonCreateOrder.Name = "buttonCreateOrder"; //
buttonCreateOrder.Size = new Size(157, 54); // dataGridView
buttonCreateOrder.TabIndex = 19; //
buttonCreateOrder.Text = "Создать заказ"; dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
buttonCreateOrder.UseVisualStyleBackColor = true; dataGridView.Dock = DockStyle.Left;
buttonCreateOrder.Click += ButtonCreateOrder_Click; dataGridView.Location = new Point(0, 30);
// dataGridView.Name = "dataGridView";
// dataGridView dataGridView.RowHeadersWidth = 51;
// dataGridView.Size = new Size(925, 374);
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; dataGridView.TabIndex = 18;
dataGridView.Dock = DockStyle.Left; //
dataGridView.Location = new Point(0, 30); // FormMain
dataGridView.Name = "dataGridView"; //
dataGridView.RowHeadersWidth = 51; AutoScaleDimensions = new SizeF(8F, 20F);
dataGridView.Size = new Size(925, 374); AutoScaleMode = AutoScaleMode.Font;
dataGridView.TabIndex = 18; ClientSize = new Size(1100, 404);
// Controls.Add(buttonRef);
// FormMain Controls.Add(buttonIssuedOrder);
// Controls.Add(buttonCreateOrder);
AutoScaleDimensions = new SizeF(8F, 20F); Controls.Add(dataGridView);
AutoScaleMode = AutoScaleMode.Font; Controls.Add(menuStrip1);
ClientSize = new Size(1100, 404); MainMenuStrip = menuStrip1;
Controls.Add(buttonRef); Name = "FormMain";
Controls.Add(buttonIssuedOrder); Text = "Завод ЖБИ";
Controls.Add(buttonOrderReady); Load += FormMain_Load;
Controls.Add(buttonTakeOrderInWork); menuStrip1.ResumeLayout(false);
Controls.Add(buttonCreateOrder); menuStrip1.PerformLayout();
Controls.Add(dataGridView); ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
Controls.Add(menuStrip1); ResumeLayout(false);
MainMenuStrip = menuStrip1; PerformLayout();
Name = "FormMain"; }
Text = "Завод ЖБИ";
Load += FormMain_Load;
menuStrip1.ResumeLayout(false);
menuStrip1.PerformLayout();
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion #endregion
private MenuStrip menuStrip1; private MenuStrip menuStrip1;
private ToolStripMenuItem справочникToolStripMenuItem; private ToolStripMenuItem справочникToolStripMenuItem;
private ToolStripMenuItem компонентыToolStripMenuItem; private ToolStripMenuItem компонентыToolStripMenuItem;
private ToolStripMenuItem изделияToolStripMenuItem; private ToolStripMenuItem изделияToolStripMenuItem;
private Button buttonRef; private Button buttonRef;
private Button buttonIssuedOrder; private Button buttonIssuedOrder;
private Button buttonOrderReady;
private Button buttonTakeOrderInWork;
private Button buttonCreateOrder; private Button buttonCreateOrder;
private DataGridView dataGridView; private DataGridView dataGridView;
private ToolStripMenuItem отчетыToolStripMenuItem; private ToolStripMenuItem отчетыToolStripMenuItem;
@ -214,5 +204,7 @@
private ToolStripMenuItem жБИПоКомпонентамToolStripMenuItem; private ToolStripMenuItem жБИПоКомпонентамToolStripMenuItem;
private ToolStripMenuItem списокЗаказовToolStripMenuItem; private ToolStripMenuItem списокЗаказовToolStripMenuItem;
private ToolStripMenuItem клиентыToolStripMenuItem; private ToolStripMenuItem клиентыToolStripMenuItem;
} private ToolStripMenuItem запускРаботToolStripMenuItem;
private ToolStripMenuItem исполнителиToolStripMenuItem;
}
} }

View File

@ -2,6 +2,7 @@ using Microsoft.Extensions.Logging;
using PrecastConcretePlantBusinessLogic.BusinessLogics; using PrecastConcretePlantBusinessLogic.BusinessLogics;
using PrecastConcretePlantContracts.BindingModels; using PrecastConcretePlantContracts.BindingModels;
using PrecastConcretePlantContracts.BusinessLogicsContracts; using PrecastConcretePlantContracts.BusinessLogicsContracts;
using PrecastConcretePlantBusinessLogic.BusinessLogics;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -14,181 +15,154 @@ using System.Windows.Forms;
namespace PrecastConcretePlantView namespace PrecastConcretePlantView
{ {
public partial class FormMain : Form public partial class FormMain : Form
{ {
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly IOrderLogic _orderLogic; private readonly IOrderLogic _orderLogic;
private readonly IReportLogic _reportLogic; private readonly IReportLogic _reportLogic;
public FormMain(ILogger<FormMain> logger, IOrderLogic orderLogic, IReportLogic reportLogic) private readonly IWorkProcess _workProcess;
{ public FormMain(ILogger<FormMain> logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workProcess)
InitializeComponent(); {
_logger = logger; InitializeComponent();
_orderLogic = orderLogic; _logger = logger;
_reportLogic = reportLogic; _orderLogic = orderLogic;
} _reportLogic = reportLogic;
private void FormMain_Load(object sender, EventArgs e) _workProcess = workProcess;
{ }
LoadData(); private void FormMain_Load(object sender, EventArgs e)
} {
private void LoadData() LoadData();
{ }
try private void LoadData()
{ {
var list = _orderLogic.ReadList(null); try
if (list != null) {
{ var list = _orderLogic.ReadList(null);
dataGridView.DataSource = list; if (list != null)
dataGridView.Columns["ReinforcedId"].Visible = false; {
dataGridView.Columns["ClientId"].Visible = false; dataGridView.DataSource = list;
} dataGridView.Columns["ReinforcedId"].Visible = false;
_logger.LogInformation("Çàãðóçêà çàêàçîâ"); dataGridView.Columns["ClientId"].Visible = false;
} dataGridView.Columns["ImplementerId"].Visible = false;
catch (Exception ex) }
{ _logger.LogInformation("Çàãðóçêà çàêàçîâ");
_logger.LogError(ex, "Îøèáêà çàãðóçêè çàêàçîâ"); }
MessageBox.Show(ex.Message, "Îøèáêà", MessageBoxButtons.OK, MessageBoxIcon.Error); catch (Exception ex)
} {
} _logger.LogError(ex, "Îøèáêà çàãðóçêè çàêàçîâ");
private void ÊîìïîíåíòûToolStripMenuItem_Click(object sender, EventArgs e) MessageBox.Show(ex.Message, "Îøèáêà", MessageBoxButtons.OK, MessageBoxIcon.Error);
{ }
var service = Program.ServiceProvider?.GetService(typeof(FormComponentS)); }
if (service is FormComponentS form) private void ÊîìïîíåíòûToolStripMenuItem_Click(object sender, EventArgs e)
{ {
form.ShowDialog(); var service = Program.ServiceProvider?.GetService(typeof(FormComponentS));
} if (service is FormComponentS form)
} {
private void ÈçäåëèÿToolStripMenuItem_Click(object sender, EventArgs e) form.ShowDialog();
{ }
var service = Program.ServiceProvider?.GetService(typeof(FormReinforcedS)); }
if (service is FormReinforcedS form) private void ÈçäåëèÿToolStripMenuItem_Click(object sender, EventArgs e)
{ {
form.ShowDialog(); var service = Program.ServiceProvider?.GetService(typeof(FormReinforcedS));
} if (service is FormReinforcedS form)
} {
private void ButtonCreateOrder_Click(object sender, EventArgs e) form.ShowDialog();
{ }
var service = Program.ServiceProvider?.GetService(typeof(FormCreateOrder)); }
if (service is FormCreateOrder form) private void ButtonCreateOrder_Click(object sender, EventArgs e)
{ {
form.ShowDialog(); var service = Program.ServiceProvider?.GetService(typeof(FormCreateOrder));
LoadData(); if (service is FormCreateOrder form)
} {
} form.ShowDialog();
private void ButtonTakeOrderInWork_Click(object sender, EventArgs e) LoadData();
{ }
if (dataGridView.SelectedRows.Count == 1) }
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Çàêàç No{id}. Ìåíÿåòñÿ ñòàòóñ íà 'Â ðàáîòå'", id);
try
{
var operationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel
{
Id = id
});
if (!operationResult)
{
throw new Exception("Îøèáêà ïðè ñîõðàíåíèè. Äîïîëíèòåëüíàÿ èíôîðìàöèÿ â ëîãàõ.");
}
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Îøèáêà ïåðåäà÷è çàêàçà â ðàáîòó");
MessageBox.Show(ex.Message, "Îøèáêà", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void ButtonOrderReady_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Çàêàç No{id}. Ìåíÿåòñÿ ñòàòóñ íà 'Ãîòîâ'", id);
try
{
var operationResult = _orderLogic.FinishOrder(new OrderBindingModel
{
Id = id
});
if (!operationResult)
{
throw new Exception("Îøèáêà ïðè ñîõðàíåíèè. Äîïîëíèòåëüíàÿ èíôîðìàöèÿ â ëîãàõ.");
}
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Îøèáêà îòìåòêè î ãîòîâíîñòè çàêàçà");
MessageBox.Show(ex.Message, "Îøèáêà", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void ButtonIssuedOrder_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Çàêàç No{id}. Ìåíÿåòñÿ ñòàòóñ íà 'Âûäàí'", id);
try
{
var operationResult = _orderLogic.DeliveryOrder(new OrderBindingModel
{
Id = id
});
if (!operationResult)
{
throw new Exception("Îøèáêà ïðè ñîõðàíåíèè. Äîïîëíèòåëüíàÿ èíôîðìàöèÿ â ëîãàõ.");
}
_logger.LogInformation("Çàêàç No{id} âûäàí", id);
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Îøèáêà îòìåòêè î âûäà÷è çàêàçà");
MessageBox.Show(ex.Message, "Îøèáêà", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void ButtonRef_Click(object sender, EventArgs e)
{
LoadData();
}
private void ñïèñîêÈçäåëèéToolStripMenuItem_Click(object sender, EventArgs e)
{
using var dialog = new SaveFileDialog { Filter = "docx|*.docx" };
if (dialog.ShowDialog() == DialogResult.OK)
{
_reportLogic.SaveReinforcedsToWordFile(new ReportBindingModel { FileName = dialog.FileName });
MessageBox.Show("Âûïîëíåíî", "Óñïåõ", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void èçäåëèÿÏîÊîìïîíåíòàìToolStripMenuItem_Click(object sender, EventArgs e) private void ButtonIssuedOrder_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormReportReinforcedComponents)); if (dataGridView.SelectedRows.Count == 1)
if (service is FormReportReinforcedComponents form) {
{ int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
form.ShowDialog(); _logger.LogInformation("Çàêàç No{id}. Ìåíÿåòñÿ ñòàòóñ íà 'Âûäàí'", id);
} try
} {
var operationResult = _orderLogic.DeliveryOrder(new OrderBindingModel
{
Id = id
});
if (!operationResult)
{
throw new Exception("Îøèáêà ïðè ñîõðàíåíèè. Äîïîëíèòåëüíàÿ èíôîðìàöèÿ â ëîãàõ.");
}
_logger.LogInformation("Çàêàç No{id} âûäàí", id);
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Îøèáêà îòìåòêè î âûäà÷è çàêàçà");
MessageBox.Show(ex.Message, "Îøèáêà", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void ButtonRef_Click(object sender, EventArgs e)
{
LoadData();
}
private void ñïèñîêÈçäåëèéToolStripMenuItem_Click(object sender, EventArgs e)
{
using var dialog = new SaveFileDialog { Filter = "docx|*.docx" };
if (dialog.ShowDialog() == DialogResult.OK)
{
_reportLogic.SaveReinforcedsToWordFile(new ReportBindingModel { FileName = dialog.FileName });
MessageBox.Show("Âûïîëíåíî", "Óñïåõ", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void ñïèñîêÇàêàçîâToolStripMenuItem_Click(object sender, EventArgs e) private void èçäåëèÿÏîÊîìïîíåíòàìToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormReportOrders)); var service = Program.ServiceProvider?.GetService(typeof(FormReportReinforcedComponents));
if (service is FormReportOrders form) if (service is FormReportReinforcedComponents form)
{ {
form.ShowDialog(); form.ShowDialog();
} }
} }
private void ñïèñîêÊëèåíòîâToolStripMenuItem_Click(object sender, EventArgs e) private void ñïèñîêÇàêàçîâToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormClients)); var service = Program.ServiceProvider?.GetService(typeof(FormReportOrders));
if (service is FormClients form) if (service is FormReportOrders form)
{ {
form.ShowDialog(); form.ShowDialog();
} }
} }
} private void ñïèñîêÊëèåíòîâToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormClients));
if (service is FormClients form)
{
form.ShowDialog();
}
}
private void çàïóñêÐàáîòToolStripMenuItem_Click(object sender, EventArgs e)
{
_workProcess.DoWork((Program.ServiceProvider?.GetService(typeof(IImplementerLogic
)) as IImplementerLogic)!, _orderLogic);
MessageBox.Show("Ïðîöåññ îáðàáîòêè çàïóùåí", "Ñîîáùåíèå",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void èñïîëíèòåëèToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormImplementerS));
if (service is FormImplementerS form)
{
form.ShowDialog();
}
}
}
} }

View File

@ -8,6 +8,7 @@ using PrecastConcretePlantContracts.BusinessLogicsContracts;
using PrecastConcretePlantContracts.StoragesContracts; using PrecastConcretePlantContracts.StoragesContracts;
using PrecastConcretePlantDatabaseImplement.Implements; using PrecastConcretePlantDatabaseImplement.Implements;
using System; using System;
using ComputersShopBusinessLogic.BusinessLogics;
namespace PrecastConcretePlantView namespace PrecastConcretePlantView
{ {
@ -41,14 +42,17 @@ namespace PrecastConcretePlantView
services.AddTransient<IOrderStorage, OrderStorage>(); services.AddTransient<IOrderStorage, OrderStorage>();
services.AddTransient<IReinforcedStorage, ReinforcedStorage>(); services.AddTransient<IReinforcedStorage, ReinforcedStorage>();
services.AddTransient<IClientStorage, ClientStorage>(); services.AddTransient<IClientStorage, ClientStorage>();
services.AddTransient<IImplementerStorage, ImplementerStorage>();
services.AddTransient<IComponentLogic, ComponentLogic>(); services.AddTransient<IComponentLogic, ComponentLogic>();
services.AddTransient<IOrderLogic, OrderLogic>(); services.AddTransient<IOrderLogic, OrderLogic>();
services.AddTransient<IReinforcedLogic, ReinforcedLogic>(); services.AddTransient<IReinforcedLogic, ReinforcedLogic>();
services.AddTransient<IReportLogic, ReportLogic>(); services.AddTransient<IReportLogic, ReportLogic>();
services.AddTransient<IClientLogic, ClientLogic>(); services.AddTransient<IClientLogic, ClientLogic>();
services.AddTransient<IImplementerLogic, ImplementerLogic>();
services.AddTransient<IWorkProcess, WorkModelling>();
services.AddTransient<AbstractSaveToWord, SaveToWord>(); services.AddTransient<AbstractSaveToWord, SaveToWord>();
services.AddTransient<AbstractSaveToExcel, SaveToExcel>(); services.AddTransient<AbstractSaveToExcel, SaveToExcel>();
services.AddTransient<AbstractSaveToPdf, SaveToPdf>(); services.AddTransient<AbstractSaveToPdf, SaveToPdf>();
@ -62,6 +66,8 @@ namespace PrecastConcretePlantView
services.AddTransient<FormReportReinforcedComponents>(); services.AddTransient<FormReportReinforcedComponents>();
services.AddTransient<FormReportOrders>(); services.AddTransient<FormReportOrders>();
services.AddTransient<FormClients>(); services.AddTransient<FormClients>();
} services.AddTransient<FormImplementerS>();
services.AddTransient<FormImplementer>();
}
} }
} }