This commit is contained in:
platoff aeeee 2024-05-22 10:14:48 +04:00
parent b724bcb977
commit de4b7c8c07
61 changed files with 593 additions and 379 deletions

View File

@ -12,12 +12,14 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyBusinessLogic.BussinessLogic
{
// Класс, реализующий логику для клиентов
public class ClientLogic : IClientLogic
{
private readonly ILogger _logger;
private readonly IClientStorage _clientStorage;
// Конструктор
public ClientLogic(ILogger<ClientLogic> logger, IClientStorage clientStorage)
{
_logger = logger;
@ -28,6 +30,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
{
_logger.LogInformation("ReadList. Email:{Email}. Id:{Id}", model?.Email, model?.Id);
// list хранит весь список в случае, если model пришло со значением null на вход метода
var list = model == null ? _clientStorage.GetFullList() : _clientStorage.GetFilteredList(model);
if (list == null)
@ -108,24 +111,33 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
return true;
}
// Проверка входного аргумента для методов Insert, Update и Delete
private void CheckModel(ClientBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
// При удалении передаём как параметр false
if (!withParams)
{
return;
}
// Проверка на наличие Фамилии Имени и Отчества
if (string.IsNullOrEmpty(model.ClientFIO))
{
throw new ArgumentNullException("Отсутствие ФИО в учётной записи", nameof(model.ClientFIO));
}
// Проверка на наличие эл. почты
if (string.IsNullOrEmpty(model.Email))
{
throw new ArgumentNullException("Отсутствие эл. почты в учётной записи (логина)", nameof(model.Email));
}
// Проверка на наличие пароля
if (string.IsNullOrEmpty(model.Password))
{
throw new ArgumentNullException("Отсутствие пароля в учётной записи", nameof(model.Password));
@ -133,11 +145,13 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
_logger.LogInformation("Client. ClientFIO:{ClientFIO}. Email:{Email}. Id:{Id} ", model.ClientFIO, model.Email, model.Id);
// Для проверка на наличие такого же аккаунта
var element = _clientStorage.GetElement(new ClientSearchModel
{
Email = model.Email
});
// Если элемент найден и его Id не совпадает с Id переданного объекта
if (element != null && element.Id != model.Id)
{
throw new InvalidOperationException("Аккаунт с таким логином уже есть");

View File

@ -13,22 +13,26 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyBusinessLogic.BussinessLogic
{
// Класс, реализующий логику для заказов
public class OrderLogic : IOrderLogic
{
private readonly ILogger _logger;
private readonly IOrderStorage _orderStorage;
// Конструктор
public OrderLogic(ILogger<OrderLogic> logger, IOrderStorage orderStorage)
{
_logger = logger;
_orderStorage = orderStorage;
}
// Вывод отфильтрованного списка компонентов
public List<OrderViewModel>? ReadList(OrderSearchModel? model)
{
_logger.LogInformation("ReadList. Id:{Id}", model?.Id);
// list хранит весь список в случае, если model пришло со значением null на вход метода
var list = model == null ? _orderStorage.GetFullList() : _orderStorage.GetFilteredList(model);
if(list == null)
@ -43,6 +47,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
return list;
}
// Создание чека
public bool CreateOrder(OrderBindingModel model)
{
CheckModel(model);
@ -80,6 +85,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
return StatusUpdate(model, OrderStatus.Выдан);
}
// Проверка на пустоту входного параметра
private void CheckModel(OrderBindingModel model, bool withParams = true)
{
if (model == null)
@ -87,27 +93,37 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
throw new ArgumentNullException(nameof(model));
}
// При удалении параметру withParams передаём false
if (!withParams)
{
return;
}
// Проверка на наличие товаров в заказе
if(model.Count <= 0)
{
throw new ArgumentNullException("В заказе не может быть 0 изделий", nameof(model.Count));
}
// Проверка на наличие нормальной суммарной стоимости чека
if(model.Sum <= 0)
{
throw new ArgumentNullException("Суммарная стоимость заказа должна быть больше 0", nameof(model.Sum));
}
// Проверка корректности id у изделий
if(model.FurnitureId < 0)
{
throw new ArgumentNullException("Некорректный id у изделия", nameof(model.FurnitureId));
}
// Проверка корректности дат
if(model.DateCreate > model.DateImplement)
{
throw new InvalidOperationException("Дата создания должна быть более ранней, нежели дата завершения");
}
// Проверка на клиента
if (model.ClientId < 0)
{
throw new ArgumentNullException("Некорректный идентификатор у клиента", nameof(model.ClientId));
@ -116,15 +132,18 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
_logger.LogInformation("Order. OrderId:{Id}. Sum:{Sum}. ClientId:{ClientId}. FurnitureId:{Id}", model.Id, model.Sum, model.ClientId, model.FurnitureId);
}
// Обновление статуса заказа
public bool StatusUpdate(OrderBindingModel model, OrderStatus newOrderStatus)
{
var viewModel = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id });
// Если не смогли найти указанный заказ по его Id
if(viewModel == null)
{
throw new ArgumentNullException(nameof(model));
}
// Проверка на возможность обновления статуса на следующий
if(viewModel.Status + 1 != newOrderStatus)
{
_logger.LogWarning("Status update operation failed. New status " + newOrderStatus.ToString() + "incorrect");
@ -133,6 +152,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
model.Status = newOrderStatus;
// Проверка на выдачу
if(model.Status == OrderStatus.Выдан)
{
model.DateImplement = DateTime.Now;
@ -144,6 +164,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
CheckModel(model, false);
// Финальная проверка на возможность обновления
if(_orderStorage.Update(model) == null)
{
model.Status--;

View File

@ -1,10 +1,10 @@
using FurnitureAssemblyContracts.BindingModels;
using FurnitureAssemblyBusinessLogic.OfficePackage;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
using FurnitureAssemblyContracts.BindingModels;
using FurnitureAssemblyContracts.BusinessLogicsContracts;
using FurnitureAssemblyContracts.SearchModels;
using FurnitureAssemblyContracts.StoragesContracts;
using FurnitureAssemblyContracts.ViewModels;
using FurnitureAssemblyBusinessLogic.OfficePackage;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
using System;
using System.Collections.Generic;
using System.Linq;
@ -13,6 +13,7 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyBusinessLogic.BussinessLogic
{
// Реализация бизнес-логики отчётов
public class ReportLogic : IReportLogic
{
private readonly IFurnitureStorage _furnitureStorage;
@ -25,6 +26,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
private readonly AbstractSaveToPdf _saveToPdf;
// Инициализируем поля класса через контейнер
public ReportLogic(IFurnitureStorage furnitureStorage,
IOrderStorage orderStorage, AbstractSaveToExcel saveToExcel,
AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf)
@ -37,7 +39,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
_saveToPdf = saveToPdf;
}
// Получение списка компонент с указанием, в каких изделиях используются
public List<ReportFurnitureWorkPieceViewModel> GetFurnitureWorkPiece()
{
var furnitures = _furnitureStorage.GetFullList();
@ -65,6 +67,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
return list;
}
// Получение списка заказов за определённый период
public List<ReportOrdersViewModel> GetOrders(ReportBindingModel model)
{
return _orderStorage.GetFilteredList(new OrderSearchModel { DateFrom = model.DateFrom, DateTo = model.DateTo })
@ -78,6 +81,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
}).ToList();
}
// Сохранение мебели в файл-Word
public void SaveFurnituresToWordFile(ReportBindingModel model)
{
_saveToWord.CreateDoc(new WordInfo
@ -87,6 +91,8 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
Furnitures = _furnitureStorage.GetFullList()
});
}
// Сохранение заготовок с указанием изделий в файл_Excel
public void SaveFurnitureWorkPieceToExcelFile(ReportBindingModel model)
{
_saveToExcel.CreateReport(new ExcelInfo
@ -97,6 +103,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
});
}
// Сохранение заказов в файл-Pdf
public void SaveOrdersToPdfFile(ReportBindingModel model)
{
_saveToPdf.CreateDoc(new PdfInfo

View File

@ -10,6 +10,7 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage
{
public abstract class AbstractSaveToExcel
{
// Создание отчета. Описание методов ниже
public void CreateReport(ExcelInfo info)
{
CreateExcel(info);
@ -85,12 +86,16 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage
SaveExcel(info);
}
// Создание Excel-файла
protected abstract void CreateExcel(ExcelInfo info);
// Добавляем новую ячейку в лист
protected abstract void InsertCellInWorksheet(ExcelCellParameters excelParams);
// Объединение ячеек
protected abstract void MergeCells(ExcelMergeParameters excelParams);
// Сохранение файла
protected abstract void SaveExcel(ExcelInfo info);
}
}

View File

@ -1,16 +1,16 @@
using System;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
namespace FurnitureAssemblyBusinessLogic.OfficePackage
{
public abstract class AbstractSaveToPdf
{
// Публичный метод создания документа. Описание методов ниже
public void CreateDoc(PdfInfo info)
{
CreatePdf(info);
@ -57,11 +57,20 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage
SavePdf(info);
}
protected abstract void CreatePdf(PdfInfo info);
protected abstract void CreateParagraph(PdfParagraph paragraph);
protected abstract void CreateTable(List<string> columns);
protected abstract void CreateRow(PdfRowParameters rowParameters);
protected abstract void SavePdf(PdfInfo info);
/// Создание Pdf-файла
protected abstract void CreatePdf(PdfInfo info);
/// Создание параграфа с текстом
protected abstract void CreateParagraph(PdfParagraph paragraph);
/// Создание таблицы
protected abstract void CreateTable(List<string> columns);
/// Создание и заполнение строки
protected abstract void CreateRow(PdfRowParameters rowParameters);
/// Сохранение файла
protected abstract void SavePdf(PdfInfo info);
}
}

View File

@ -1,20 +1,21 @@
using System;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
namespace FurnitureAssemblyBusinessLogic.OfficePackage
{
public abstract class AbstractSaveToWord
{
// Метод создания документа
public void CreateDoc(WordInfo info)
{
CreateWord(info);
// Создание ряда абзацев
CreateParagraph(new WordParagraph
{
Texts = new List<(string, WordTextProperties)> { (info.Title, new WordTextProperties { Bold = true, Size = "24", }) },
@ -25,6 +26,7 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage
}
});
// Заполнение абзацев текстом
foreach (var furniture in info.Furnitures)
{
CreateParagraph(new WordParagraph
@ -42,9 +44,13 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage
SaveWord(info);
}
// Создание Doc-файла
protected abstract void CreateWord(WordInfo info);
protected abstract void CreateParagraph(WordParagraph paragraph);
protected abstract void SaveWord(WordInfo info);
// Создание абзаца с текстом
protected abstract void CreateParagraph(WordParagraph paragraph);
// Сохранение файла
protected abstract void SaveWord(WordInfo info);
}
}

View File

@ -6,12 +6,16 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums
{
// Вспомогательное перечисление для оформления excel
public enum ExcelStyleInfoType
{
// Заголовок
Title,
// Просто текст
Text,
// Текст в рамке
TextWithBorder
}
}

View File

@ -6,12 +6,16 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums
{
// Вспомогательное перечисление для оформления pdf документа
public enum PdfParagraphAlignmentType
{
// Либо по центру
Center,
// Либо с левого края
Left,
// Либо с правого края
Right
}
}

View File

@ -6,10 +6,13 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums
{
// Вспомогательное перечисление для настройки формата word документа
public enum WordJustificationType
{
// Выравниваем либо по центру
Center,
// Либо на всю ширину
Both
}
}

View File

@ -1,19 +1,28 @@
using System;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
{
// Информация по ячейке в таблице excel
public class ExcelCellParameters
{
// Название колонки
public string ColumnName { get; set; } = string.Empty;
public uint RowIndex { get; set; }
public string Text { get; set; } = string.Empty;
public string CellReference => $"{ColumnName}{RowIndex}";
public ExcelStyleInfoType StyleInfo { get; set; }
// Строка
public uint RowIndex { get; set; }
// Тект в ячейке
public string Text { get; set; } = string.Empty;
// Геттер для того, чтобы не искать каждый раз
public string CellReference => $"{ColumnName}{RowIndex}";
// В каком стиле выводить информацию
public ExcelStyleInfoType StyleInfo { get; set; }
}
}

View File

@ -7,11 +7,16 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
{
// Информация по excel файлу, который хотим создать
public class ExcelInfo
{
// Название файла
public string FileName { get; set; } = string.Empty;
public string Title { get; set; } = string.Empty;
public List<ReportFurnitureWorkPieceViewModel> FurnitureWorkPieces { get; set; } = new();
// Заголовок
public string Title { get; set; } = string.Empty;
// Список заготовок по изделиям
public List<ReportFurnitureWorkPieceViewModel> FurnitureWorkPieces { get; set; } = new();
}
}

View File

@ -6,6 +6,7 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
{
// Информация для объединения ячеек
public class ExcelMergeParameters
{
public string CellFromName { get; set; } = string.Empty;

View File

@ -7,6 +7,7 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
{
// Общая информация по pdf файлу
public class PdfInfo
{
public string FileName { get; set; } = string.Empty;

View File

@ -1,12 +1,13 @@
using System;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
{
// Информация п параграфу в pdf документе
public class PdfParagraph
{
public string Text { get; set; } = string.Empty;

View File

@ -1,12 +1,13 @@
using System;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
{
// Информация по параметрам строк таблицы
public class PdfRowParameters
{
// Набор текстов

View File

@ -7,6 +7,7 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
{
// Общая информация по документу
public class WordInfo
{
public string FileName { get; set; } = string.Empty;

View File

@ -6,10 +6,13 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
{
// Модель параграфов, которые есть в тексте
public class WordParagraph
{
// Набор текстов в абзаце (для случая, если в абзаце текст разных стилей)
public List<(string, WordTextProperties)> Texts { get; set; } = new();
public WordTextProperties? TextProperties { get; set; }
//свойства параграфа, если они есть
public WordTextProperties? TextProperties { get; set; }
}
}

View File

@ -7,6 +7,7 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
{
// Модель свойств текста, которые нам нужны в Word документе
public class WordTextProperties
{
// Размер текста

View File

@ -1,18 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DocumentFormat.OpenXml.Office2010.Excel;
using DocumentFormat.OpenXml.Office2010.Excel;
using DocumentFormat.OpenXml.Office2013.Excel;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using DocumentFormat.OpenXml;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FurnitureAssemblyBusinessLogic.OfficePackage.Implements
{
// Реализация абстрактного класса создания Excel документа
public class SaveToExcel : AbstractSaveToExcel
{
private SpreadsheetDocument? _spreadsheetDocument;

View File

@ -11,6 +11,7 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyBusinessLogic.OfficePackage.Implements
{
// Реализация абстрактного класса создания Pdf документа
public class SaveToPdf : AbstractSaveToPdf
{
private Document? _document;

View File

@ -8,10 +8,10 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DocumentFormat.OpenXml.Vml;
namespace FurnitureAssemblyBusinessLogic.OfficePackage.Implements
{
// Реализация абстрактного класса сохранения в Word документ
public class SaveToWord : AbstractSaveToWord
{
private WordprocessingDocument? _wordDocument;
@ -122,8 +122,6 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage.Implements
if (run.Item2.Bold)
{
// properties.AppendChild(new Italic());
properties.AppendChild(new Bold());
}
@ -141,7 +139,7 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage.Implements
_docBody.AppendChild(docParagraph);
}
// сохранение документа
// Метод сохранения документа
protected override void SaveWord(WordInfo info)
{
if (_docBody == null || _wordDocument == null)
@ -149,10 +147,10 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage.Implements
return;
}
// вставляем инфу по секциям (настройка страницы)
// Вставляем информацию по секциям (смотри, что является входным параметром)
_docBody.AppendChild(CreateSectionProperties());
// сохраняем
// Сохраняем документ
_wordDocument.MainDocumentPart!.Document.Save();
_wordDocument.Dispose();

View File

@ -15,6 +15,7 @@ namespace FurnitureAssemblyClientApp.Controllers
_logger = logger;
}
// Через API клиента Get-запросом получается список его собственных заказов
public IActionResult Index()
{
if (APIClient.Client == null)
@ -24,6 +25,7 @@ namespace FurnitureAssemblyClientApp.Controllers
return View(APIClient.GetRequest<List<OrderViewModel>>($"api/main/getorders?clientId={APIClient.Client.Id}"));
}
// Получение данных Get-ом
[HttpGet]
public IActionResult Privacy()
{
@ -34,6 +36,7 @@ namespace FurnitureAssemblyClientApp.Controllers
return View(APIClient.Client);
}
// Изменение данных Post-ом
[HttpPost]
public void Privacy(string login, string password, string fio)
{
@ -71,12 +74,14 @@ namespace FurnitureAssemblyClientApp.Controllers
});
}
// Открытие Vieхи
[HttpGet]
public IActionResult Enter()
{
return View();
}
// Отправляем указанные данные на проверку
[HttpPost]
public void Enter(string login, string password)
{
@ -95,12 +100,14 @@ namespace FurnitureAssemblyClientApp.Controllers
Response.Redirect("Index");
}
// Открытие Vieхи
[HttpGet]
public IActionResult Register()
{
return View();
}
// Post-запрос по созданию нового пользователя
[HttpPost]
public void Register(string login, string password, string fio)
{
@ -116,11 +123,13 @@ namespace FurnitureAssemblyClientApp.Controllers
Password = password
});
// Переход на вкладку "Enter", чтобы пользователь сразу смог зайти
Response.Redirect("Enter");
return;
}
// Создание заказа. Получаем и передаём список изделий во View
[HttpGet]
public IActionResult Create()
{
@ -129,6 +138,7 @@ namespace FurnitureAssemblyClientApp.Controllers
return View();
}
// Создание заказа Post-запросом
[HttpPost]
public void Create(int furniture, int count)
{
@ -153,6 +163,7 @@ namespace FurnitureAssemblyClientApp.Controllers
Response.Redirect("Index");
}
// Подсчёт стоимости заказа
[HttpPost]
public double Calc(int count, int furniture)
{

View File

@ -26,7 +26,6 @@ a {
.border-top {
border-top: 1px solid #e5e5e5;
}
.border-bottom {
border-bottom: 1px solid #e5e5e5;
}

View File

@ -1,17 +1,21 @@
using System;
using FurnitureAssemblyDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FurnitureAssemblyDataModels.Models;
namespace FurnitureAssemblyContracts.BindingModels
{
// Реализация сущности "Клиент"
public class ClientBindingModel : IClientModel
{
public int Id { get; set; }
public string ClientFIO { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty;
public string Password { get; set; } = string.Empty;
}
}

View File

@ -12,10 +12,10 @@ namespace FurnitureAssemblyContracts.BindingModels
{
public int Id { get; set; }
public int FurnitureId { get; set; }
public int ClientId { get; set; }
public int FurnitureId { get; set; }
public int Count { get; set; }
public double Sum { get; set; }

View File

@ -6,6 +6,7 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyContracts.BindingModels
{
// Реализация сущности "Отчёт"
public class ReportBindingModel
{
public string FileName { get; set; } = string.Empty;

View File

@ -1,6 +1,6 @@
using FurnitureAssemblyContracts.BindingModels;
using FurnitureAssemblyContracts.ViewModels;
using FurnitureAssemblyContracts.SearchModels;
using FurnitureAssemblyContracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
@ -9,12 +9,17 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyContracts.BusinessLogicsContracts
{
// Бизнес-логика для клиентов
public interface IClientLogic
{
List<ClientViewModel>? ReadList(ClientSearchModel? model);
ClientViewModel? ReadElement(ClientSearchModel model);
List<ClientViewModel> ReadList(ClientSearchModel? model);
ClientViewModel? ReadElement(ClientSearchModel? model);
bool Create(ClientBindingModel model);
bool Update(ClientBindingModel model);
bool Delete(ClientBindingModel model);
}
}

View File

@ -10,15 +10,19 @@ namespace FurnitureAssemblyContracts.BusinessLogicsContracts
{
public interface IReportLogic
{
// Получение списка заготовок с указанием, в каких изделиях используются
List<ReportFurnitureWorkPieceViewModel> GetFurnitureWorkPiece();
// Получение списка заказов за определённый период
List<ReportOrdersViewModel> GetOrders(ReportBindingModel model);
// Сохранение изделий в файл-Word
void SaveFurnituresToWordFile(ReportBindingModel model);
// Сохранение заготовок с указанием изделий в файл-Excel
void SaveFurnitureWorkPieceToExcelFile(ReportBindingModel model);
// Сохранение заказов в файл-Pdf
void SaveOrdersToPdfFile(ReportBindingModel model);
}
}

View File

@ -6,11 +6,13 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyContracts.SearchModels
{
// Модель для поиска клиента
public class ClientSearchModel
{
public int? Id { get; set; }
public string? ClientFIO { get; set; }
public string? Email { get; set; }
public string? Password { get; set; }
}
}

View File

@ -9,10 +9,15 @@ namespace FurnitureAssemblyContracts.SearchModels
// Для поиска сущности "Заказ"
public class OrderSearchModel
{
// для поиска по идентификатору
public int? Id { get; set; }
// для поиска по клиенту
public int? ClientId { get; set; }
// Два поля для возможности производить выборку
public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set;}
public int? ClientId { get; set; }
}
}

View File

@ -9,6 +9,7 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyContracts.StoragesContracts
{
// Класс для хранилища клиентов
public interface IClientStorage
{
List<ClientViewModel> GetFullList();

View File

@ -9,6 +9,7 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyContracts.StoragesContracts
{
// Класс для хранилища заказов
public interface IOrderStorage
{
List<OrderViewModel> GetFullList();

View File

@ -1,20 +1,24 @@
using System;
using FurnitureAssemblyDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FurnitureAssemblyDataModels.Models;
namespace FurnitureAssemblyContracts.ViewModels
{
// Класс для отображения информации о клиентах
public class ClientViewModel : IClientModel
{
public int Id { get; set; }
[DisplayName("ФИО клиента")]
public string ClientFIO { get; set; } = string.Empty;
[DisplayName("Логин (эл. почта)")]
public string Email { get; set; } = string.Empty;
[DisplayName("Пароль")]
public string Password { get; set; } = string.Empty;
}

View File

@ -8,11 +8,11 @@ namespace FurnitureAssemblyContracts.ViewModels
{
public class ReportFurnitureWorkPieceViewModel
{
public string FurnitureName { get; set; } = string.Empty;
public int TotalCount { get; set; }
public List<(string WorkPiece, int Count)> WorkPieces { get; set; } = new();
// Список кортежей
public List<(string WorkPiece, int Count)> WorkPieces { get; set; } = new();
}
}

View File

@ -6,10 +6,13 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyDataModels.Models
{
// Интерфейс, отвечающий за клиента
public interface IClientModel : IId
{
string ClientFIO { get; }
string Email { get; }
string Password { get; }
}
}

View File

@ -14,7 +14,8 @@ namespace FurnitureAssemblyDatabaseImplement
{
if (optionsBuilder.IsConfigured == false)
{
optionsBuilder.UseSqlServer(@"Data Source=WIN-N21FHIN3LLR\SQLEXPRESS;Initial Catalog=FurnitureAssemblyDatabase;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True");
optionsBuilder.UseSqlServer(@"Data Source=WIN-N21FHIN3LLR\SQLEXPRESS;Initial Catalog=FurnitureAssemblyDatabase2;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True");
}
base.OnConfiguring(optionsBuilder);
}

View File

@ -60,7 +60,7 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
column: x => x.FurnitureId,
principalTable: "Furnitures",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
onDelete: ReferentialAction.NoAction);
});
migrationBuilder.CreateTable(

View File

@ -28,7 +28,7 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
column: "ClientId",
principalTable: "Clients",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
onDelete: ReferentialAction.NoAction);
}
/// <inheritdoc />

View File

@ -11,6 +11,7 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyFileImplement.Implements
{
// Реализация интерфейса хранилища изделий
public class FurnitureStorage : IFurnitureStorage
{
private readonly DataFileSingleton source;

View File

@ -11,6 +11,7 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyFileImplement.Implements
{
// Реализация интерфейса хранилища заказов
public class OrderStorage : IOrderStorage
{
private readonly DataFileSingleton source;
@ -49,6 +50,7 @@ namespace FurnitureAssemblyFileImplement.Implements
return source.Orders.Select(x => GetViewModel(x)).ToList();
}
// Для загрузки названий изделия в заказе
private OrderViewModel GetViewModel(Order order)
{
var viewModel = order.GetViewModel;

View File

@ -11,6 +11,7 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyFileImplement.Implements
{
// Реализация интерфейса хранилища заготовок
public class WorkPieceStorage : IWorkPieceStorage
{
private readonly DataFileSingleton source;

View File

@ -10,6 +10,7 @@ using System.Xml.Linq;
namespace FurnitureAssemblyFileImplement.Models
{
// Класс, реализующий интерфейс модели изделия
public class Furniture : IFurnitureModel
{
public int Id { get; private set; }

View File

@ -11,6 +11,7 @@ using System.Xml.Linq;
namespace FurnitureAssemblyFileImplement.Models
{
// Класс, реализующий интерфейс модели заказа
public class Order : IOrderModel
{
public int Id { get; private set; }

View File

@ -10,6 +10,7 @@ using System.Xml.Linq;
namespace FurnitureAssemblyFileImplement.Models
{
// Класс, реализующий интерфейс модели заготовки
public class WorkPiece : IWorkPieceModel
{
public int Id { get; private set; }

View File

@ -7,15 +7,21 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyListImplement
{
// Класс для списков, в которых будет храниться информация при работе приложения
public class DataListSingleton
{
private static DataListSingleton? _instance;
// Список для хранения заготовок
public List<WorkPiece> WorkPiece { get; set; }
// Список для хранения изделий
public List<Furniture> Furnitures { get; set; }
// Список для хранения заказов
public List<Order> Orders { get; set; }
// Список для хранения клиентов
public List<Client> Clients { get; set; }
public DataListSingleton()

View File

@ -13,6 +13,7 @@ namespace FurnitureAssemblyListImplement.Implements
{
public class ClientStorage : IClientStorage
{
// Поле для работы со списком клиентов
private readonly DataListSingleton _source;
public ClientStorage()

View File

@ -11,15 +11,19 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyListImplement.Implements
{
// Класс, реализующий интерфейс хранилища заказов
public class OrderStorage : IOrderStorage
{
// Поле для работы со списком заказов
private readonly DataListSingleton _source;
// Получение в конструкторе объекта DataListSingleton
public OrderStorage()
{
_source = DataListSingleton.GetInstance();
}
// Получение полного списка заготовок
public List<OrderViewModel> GetFullList()
{
var result = new List<OrderViewModel>();
@ -32,6 +36,7 @@ namespace FurnitureAssemblyListImplement.Implements
return result;
}
// Получение отфильтрованного списка заказов
public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
{
var result = new List<OrderViewModel>();
@ -66,6 +71,7 @@ namespace FurnitureAssemblyListImplement.Implements
return result;
}
// Получение элемента из списка заказов
public OrderViewModel? GetElement(OrderSearchModel model)
{
if (!model.Id.HasValue)
@ -84,6 +90,7 @@ namespace FurnitureAssemblyListImplement.Implements
return null;
}
// Метод для записи названия изделия на форме с заказами
private OrderViewModel GetViewModel(Order order)
{
var viewModel = order.GetViewModel;
@ -110,6 +117,7 @@ namespace FurnitureAssemblyListImplement.Implements
return viewModel;
}
// При создании заказа определяем для него новый id: ищем max id и прибавляем к нему 1
public OrderViewModel? Insert(OrderBindingModel model)
{
model.Id = 1;
@ -134,6 +142,7 @@ namespace FurnitureAssemblyListImplement.Implements
return GetViewModel(newOrder);
}
// Обновление заказа
public OrderViewModel? Update(OrderBindingModel model)
{
foreach (var order in _source.Orders)
@ -149,6 +158,7 @@ namespace FurnitureAssemblyListImplement.Implements
return null;
}
// Удаление заказа
public OrderViewModel? Delete(OrderBindingModel model)
{
for (int i = 0; i < _source.Orders.Count; i++)

View File

@ -11,6 +11,7 @@ namespace FurnitureAssemblyListImplement.Models
{
public class Client : IClientModel
{
// Методы set делаем приватным, чтобы исключить неразрешённые манипуляции
public int Id { get; private set; }
public string ClientFIO { get; private set; } = string.Empty;
@ -19,6 +20,7 @@ namespace FurnitureAssemblyListImplement.Models
public string Password { get; private set; } = string.Empty;
// Метод для создания объекта от класса-компонента на основе класса-BindingModel
public static Client? Create(ClientBindingModel? model)
{
if (model == null)
@ -35,6 +37,7 @@ namespace FurnitureAssemblyListImplement.Models
};
}
// Метод изменения существующего объекта
public void Update(ClientBindingModel? model)
{
if (model == null)
@ -46,6 +49,8 @@ namespace FurnitureAssemblyListImplement.Models
Email = model.Email;
Password = model.Password;
}
// Метод для создания объекта класса ViewModel на основе данных объекта класса-компонента
public ClientViewModel GetViewModel => new()
{
Id = Id,

View File

@ -11,8 +11,10 @@ using System.Threading.Tasks;
namespace FurnitureAssemblyListImplement.Models
{
// Класс, реализующий интерфейс модели заказа
public class Order : IOrderModel
{
// Методы set сделали приватными, чтобы исключить неразрешённые манипуляции
public int Id { get; private set; }
public int ClientId { get; private set; }
@ -49,6 +51,7 @@ namespace FurnitureAssemblyListImplement.Models
};
}
// Метод изменения существующего объекта
public void Update(OrderBindingModel? model)
{
if(model == null)
@ -59,6 +62,7 @@ namespace FurnitureAssemblyListImplement.Models
DateImplement = model.DateImplement;
}
// Метод для создания объекта класса ViewModel на основе данных объекта класса-компонента
public OrderViewModel GetViewModel => new()
{
Id = Id,

View File

@ -1,6 +1,6 @@
namespace FurnitureAssemblyView
{
partial class Клиенты
partial class FormClients
{
/// <summary>
/// Required designer variable.
@ -37,17 +37,20 @@
// dataGridView
//
this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView.Location = new System.Drawing.Point(12, 12);
this.dataGridView.Location = new System.Drawing.Point(10, 9);
this.dataGridView.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.dataGridView.Name = "dataGridView";
this.dataGridView.RowTemplate.Height = 25;
this.dataGridView.Size = new System.Drawing.Size(503, 257);
this.dataGridView.RowHeadersWidth = 51;
this.dataGridView.RowTemplate.Height = 29;
this.dataGridView.Size = new System.Drawing.Size(509, 320);
this.dataGridView.TabIndex = 0;
//
// buttonDelete
//
this.buttonDelete.Location = new System.Drawing.Point(521, 128);
this.buttonDelete.Location = new System.Drawing.Point(558, 26);
this.buttonDelete.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.buttonDelete.Name = "buttonDelete";
this.buttonDelete.Size = new System.Drawing.Size(102, 32);
this.buttonDelete.Size = new System.Drawing.Size(109, 22);
this.buttonDelete.TabIndex = 1;
this.buttonDelete.Text = "Удалить";
this.buttonDelete.UseVisualStyleBackColor = true;
@ -55,25 +58,27 @@
//
// buttonRef
//
this.buttonRef.Location = new System.Drawing.Point(521, 44);
this.buttonRef.Location = new System.Drawing.Point(558, 77);
this.buttonRef.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.buttonRef.Name = "buttonRef";
this.buttonRef.Size = new System.Drawing.Size(102, 32);
this.buttonRef.Size = new System.Drawing.Size(109, 22);
this.buttonRef.TabIndex = 2;
this.buttonRef.Text = "Обновить";
this.buttonRef.UseVisualStyleBackColor = true;
this.buttonRef.Click += new System.EventHandler(this.ButtonRef_Click);
//
// Клиенты
// FormClients
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(653, 290);
this.ClientSize = new System.Drawing.Size(700, 338);
this.Controls.Add(this.buttonRef);
this.Controls.Add(this.buttonDelete);
this.Controls.Add(this.dataGridView);
this.Name = "Клиенты";
this.Text = "FormClients";
this.Load += new System.EventHandler(this.FormClients_Load);
this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.Name = "FormClients";
this.Text = "Клиенты";
this.Click += new System.EventHandler(this.FormClients_Load);
((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
this.ResumeLayout(false);

View File

@ -12,18 +12,18 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace FurnitureAssemblyView
{
public partial class Клиенты : Form
public partial class FormClients : Form
{
private readonly ILogger _logger;
private readonly IClientLogic _clientLogic;
public Клиенты(ILogger<Клиенты> logger, IClientLogic clientLogic)
public FormClients(ILogger<FormClients> logger, IClientLogic clientLogic)
{
InitializeComponent();
_logger = logger;
_clientLogic = clientLogic;
}

View File

@ -36,6 +36,8 @@
this.textBoxSum = new System.Windows.Forms.TextBox();
this.buttonSave = new System.Windows.Forms.Button();
this.buttonCancel = new System.Windows.Forms.Button();
this.labelClient = new System.Windows.Forms.Label();
this.comboBoxClient = new System.Windows.Forms.ComboBox();
this.SuspendLayout();
//
// labelFurniture
@ -50,7 +52,7 @@
// labelCount
//
this.labelCount.AutoSize = true;
this.labelCount.Location = new System.Drawing.Point(21, 52);
this.labelCount.Location = new System.Drawing.Point(21, 86);
this.labelCount.Name = "labelCount";
this.labelCount.Size = new System.Drawing.Size(75, 15);
this.labelCount.TabIndex = 1;
@ -59,7 +61,7 @@
// labelSum
//
this.labelSum.AutoSize = true;
this.labelSum.Location = new System.Drawing.Point(21, 85);
this.labelSum.Location = new System.Drawing.Point(21, 118);
this.labelSum.Name = "labelSum";
this.labelSum.Size = new System.Drawing.Size(48, 15);
this.labelSum.TabIndex = 2;
@ -68,16 +70,15 @@
// comboBoxFurniture
//
this.comboBoxFurniture.FormattingEnabled = true;
this.comboBoxFurniture.Location = new System.Drawing.Point(127, 15);
this.comboBoxFurniture.Location = new System.Drawing.Point(145, 16);
this.comboBoxFurniture.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.comboBoxFurniture.Name = "comboBoxFurniture";
this.comboBoxFurniture.Size = new System.Drawing.Size(244, 23);
this.comboBoxFurniture.TabIndex = 3;
this.comboBoxFurniture.SelectedIndexChanged += new System.EventHandler(this.ComboBoxFurniture_SelectedIndexChanged);
//
// textBoxCount
//
this.textBoxCount.Location = new System.Drawing.Point(127, 49);
this.textBoxCount.Location = new System.Drawing.Point(145, 83);
this.textBoxCount.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.textBoxCount.Name = "textBoxCount";
this.textBoxCount.Size = new System.Drawing.Size(244, 23);
@ -86,7 +87,7 @@
//
// textBoxSum
//
this.textBoxSum.Location = new System.Drawing.Point(127, 82);
this.textBoxSum.Location = new System.Drawing.Point(145, 116);
this.textBoxSum.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.textBoxSum.Name = "textBoxSum";
this.textBoxSum.Size = new System.Drawing.Size(244, 23);
@ -94,31 +95,49 @@
//
// buttonSave
//
this.buttonSave.Location = new System.Drawing.Point(186, 116);
this.buttonSave.Location = new System.Drawing.Point(201, 149);
this.buttonSave.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.buttonSave.Name = "buttonSave";
this.buttonSave.Size = new System.Drawing.Size(82, 22);
this.buttonSave.TabIndex = 6;
this.buttonSave.Text = "Сохранить";
this.buttonSave.UseVisualStyleBackColor = true;
this.buttonSave.Click += new System.EventHandler(this.ButtonSave_Click);
//
// buttonCancel
//
this.buttonCancel.Location = new System.Drawing.Point(274, 116);
this.buttonCancel.Location = new System.Drawing.Point(298, 149);
this.buttonCancel.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(82, 22);
this.buttonCancel.TabIndex = 7;
this.buttonCancel.Text = "Отмена";
this.buttonCancel.UseVisualStyleBackColor = true;
this.buttonCancel.Click += new System.EventHandler(this.ButtonCancel_Click);
//
// labelClient
//
this.labelClient.AutoSize = true;
this.labelClient.Location = new System.Drawing.Point(21, 52);
this.labelClient.Name = "labelClient";
this.labelClient.Size = new System.Drawing.Size(60, 15);
this.labelClient.TabIndex = 8;
this.labelClient.Text = "Заказчик:";
//
// comboBoxClient
//
this.comboBoxClient.FormattingEnabled = true;
this.comboBoxClient.Location = new System.Drawing.Point(145, 50);
this.comboBoxClient.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.comboBoxClient.Name = "comboBoxClient";
this.comboBoxClient.Size = new System.Drawing.Size(244, 23);
this.comboBoxClient.TabIndex = 9;
//
// FormCreateOrder
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(384, 157);
this.ClientSize = new System.Drawing.Size(419, 192);
this.Controls.Add(this.comboBoxClient);
this.Controls.Add(this.labelClient);
this.Controls.Add(this.buttonCancel);
this.Controls.Add(this.buttonSave);
this.Controls.Add(this.textBoxSum);
@ -130,7 +149,6 @@
this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.Name = "FormCreateOrder";
this.Text = "Заказ";
this.Load += new System.EventHandler(this.FormCreateOrder_Load);
this.ResumeLayout(false);
this.PerformLayout();
@ -146,5 +164,7 @@
private TextBox textBoxSum;
private Button buttonSave;
private Button buttonCancel;
private Label labelClient;
private ComboBox comboBoxClient;
}
}

View File

@ -1,7 +1,6 @@
using FurnitureAssemblyContracts.BindingModels;
using FurnitureAssemblyContracts.BusinessLogicsContracts;
using FurnitureAssemblyContracts.SearchModels;
using FurnitureAssemblyDataModels.Models;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
@ -32,6 +31,7 @@ namespace FurnitureAssemblyView
_logger = logger;
_logicFurniture = logicFurniture;
_logicOrder = logicOrder;
_logicClient = logicClient;
}
private void FormCreateOrder_Load(object sender, EventArgs e)
@ -50,6 +50,14 @@ namespace FurnitureAssemblyView
comboBoxFurniture.DataSource = list;
comboBoxFurniture.SelectedItem = null;
}
if(listClients != null)
{
comboBoxClient.DisplayMember = "ClientFIO";
comboBoxClient.ValueMember = "Id";
comboBoxClient.DataSource = listClients;
comboBoxClient.SelectedItem = null;
}
}
catch (Exception ex)
{
@ -111,6 +119,13 @@ namespace FurnitureAssemblyView
return;
}
if (comboBoxClient.SelectedValue == null)
{
MessageBox.Show("Выберите заказчика", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
_logger.LogInformation("Создание заказа");
try
@ -118,6 +133,7 @@ namespace FurnitureAssemblyView
var operationResult = _logicOrder.CreateOrder(new OrderBindingModel
{
FurnitureId = Convert.ToInt32(comboBoxFurniture.SelectedValue),
ClientId = Convert.ToInt32(comboBoxClient.SelectedValue),
Count = Convert.ToInt32(textBoxCount.Text),
Sum = Convert.ToDouble(textBoxSum.Text)
});

View File

@ -56,26 +56,25 @@
this.dataGridView.Name = "dataGridView";
this.dataGridView.RowHeadersWidth = 51;
this.dataGridView.RowTemplate.Height = 29;
this.dataGridView.Size = new System.Drawing.Size(794, 302);
this.dataGridView.Size = new System.Drawing.Size(820, 302);
this.dataGridView.TabIndex = 0;
//
// buttonCreateOrder
//
this.buttonCreateOrder.Location = new System.Drawing.Point(820, 27);
this.buttonCreateOrder.Location = new System.Drawing.Point(887, 50);
this.buttonCreateOrder.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.buttonCreateOrder.Name = "buttonCreateOrder";
this.buttonCreateOrder.Size = new System.Drawing.Size(178, 34);
this.buttonCreateOrder.Size = new System.Drawing.Size(206, 34);
this.buttonCreateOrder.TabIndex = 1;
this.buttonCreateOrder.Text = "Создать заказ";
this.buttonCreateOrder.UseVisualStyleBackColor = true;
this.buttonCreateOrder.Click += new System.EventHandler(this.ButtonCreateOrder_Click);
//
// buttonTakeOrderInWork
//
this.buttonTakeOrderInWork.Location = new System.Drawing.Point(820, 65);
this.buttonTakeOrderInWork.Location = new System.Drawing.Point(887, 107);
this.buttonTakeOrderInWork.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.buttonTakeOrderInWork.Name = "buttonTakeOrderInWork";
this.buttonTakeOrderInWork.Size = new System.Drawing.Size(178, 36);
this.buttonTakeOrderInWork.Size = new System.Drawing.Size(206, 36);
this.buttonTakeOrderInWork.TabIndex = 2;
this.buttonTakeOrderInWork.Text = "Отдать на выполнение";
this.buttonTakeOrderInWork.UseVisualStyleBackColor = true;
@ -83,10 +82,10 @@
//
// buttonOrderReady
//
this.buttonOrderReady.Location = new System.Drawing.Point(820, 105);
this.buttonOrderReady.Location = new System.Drawing.Point(887, 165);
this.buttonOrderReady.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.buttonOrderReady.Name = "buttonOrderReady";
this.buttonOrderReady.Size = new System.Drawing.Size(178, 31);
this.buttonOrderReady.Size = new System.Drawing.Size(206, 31);
this.buttonOrderReady.TabIndex = 3;
this.buttonOrderReady.Text = "Заказ готов";
this.buttonOrderReady.UseVisualStyleBackColor = true;
@ -94,10 +93,10 @@
//
// buttonIssuedOrder
//
this.buttonIssuedOrder.Location = new System.Drawing.Point(820, 140);
this.buttonIssuedOrder.Location = new System.Drawing.Point(887, 217);
this.buttonIssuedOrder.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.buttonIssuedOrder.Name = "buttonIssuedOrder";
this.buttonIssuedOrder.Size = new System.Drawing.Size(178, 33);
this.buttonIssuedOrder.Size = new System.Drawing.Size(206, 33);
this.buttonIssuedOrder.TabIndex = 4;
this.buttonIssuedOrder.Text = "Заказ выдан";
this.buttonIssuedOrder.UseVisualStyleBackColor = true;
@ -105,10 +104,10 @@
//
// buttonRefresh
//
this.buttonRefresh.Location = new System.Drawing.Point(820, 177);
this.buttonRefresh.Location = new System.Drawing.Point(887, 269);
this.buttonRefresh.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.buttonRefresh.Name = "buttonRefresh";
this.buttonRefresh.Size = new System.Drawing.Size(178, 29);
this.buttonRefresh.Size = new System.Drawing.Size(206, 29);
this.buttonRefresh.TabIndex = 5;
this.buttonRefresh.Text = "Обновить";
this.buttonRefresh.UseVisualStyleBackColor = true;
@ -124,7 +123,7 @@
this.menuStrip.Location = new System.Drawing.Point(0, 0);
this.menuStrip.Name = "menuStrip";
this.menuStrip.Padding = new System.Windows.Forms.Padding(5, 2, 0, 2);
this.menuStrip.Size = new System.Drawing.Size(1015, 24);
this.menuStrip.Size = new System.Drawing.Size(1135, 24);
this.menuStrip.TabIndex = 6;
this.menuStrip.Text = "menuStrip";
//
@ -140,16 +139,14 @@
// workPieceToolStripMenuItem
//
this.workPieceToolStripMenuItem.Name = "workPieceToolStripMenuItem";
this.workPieceToolStripMenuItem.Size = new System.Drawing.Size(130, 22);
this.workPieceToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.workPieceToolStripMenuItem.Text = "Заготовки";
this.workPieceToolStripMenuItem.Click += new System.EventHandler(this.WorkPieceToolStripMenuItem_Click);
//
// furnitureToolStripMenuItem
//
this.furnitureToolStripMenuItem.Name = "furnitureToolStripMenuItem";
this.furnitureToolStripMenuItem.Size = new System.Drawing.Size(130, 22);
this.furnitureToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.furnitureToolStripMenuItem.Text = "Изделия";
this.furnitureToolStripMenuItem.Click += new System.EventHandler(this.FurnitureToolStripMenuItem_Click);
//
// reportsToolStripMenuItem
//
@ -159,26 +156,26 @@
this.ordersToolStripMenuItem});
this.reportsToolStripMenuItem.Name = "reportsToolStripMenuItem";
this.reportsToolStripMenuItem.Size = new System.Drawing.Size(60, 20);
this.reportsToolStripMenuItem.Text = "Отчеты";
this.reportsToolStripMenuItem.Text = "Отчёты";
//
// workPiecesToolStripMenuItem
//
this.workPiecesToolStripMenuItem.Name = "workPiecesToolStripMenuItem";
this.workPiecesToolStripMenuItem.Size = new System.Drawing.Size(218, 22);
this.workPiecesToolStripMenuItem.Text = "Список компонентов";
this.workPiecesToolStripMenuItem.Size = new System.Drawing.Size(203, 22);
this.workPiecesToolStripMenuItem.Text = "Список заготовок";
this.workPiecesToolStripMenuItem.Click += new System.EventHandler(this.WorkPiecesToolStripMenuItem_Click);
//
// workPieceFurnituresToolStripMenuItem
//
this.workPieceFurnituresToolStripMenuItem.Name = "workPieceFurnituresToolStripMenuItem";
this.workPieceFurnituresToolStripMenuItem.Size = new System.Drawing.Size(218, 22);
this.workPieceFurnituresToolStripMenuItem.Text = "Компоненты по изделиям";
this.workPieceFurnituresToolStripMenuItem.Size = new System.Drawing.Size(203, 22);
this.workPieceFurnituresToolStripMenuItem.Text = "Заготовки по изделиям";
this.workPieceFurnituresToolStripMenuItem.Click += new System.EventHandler(this.WorkPieceFurnituresToolStripMenuItem_Click);
//
// ordersToolStripMenuItem
//
this.ordersToolStripMenuItem.Name = "ordersToolStripMenuItem";
this.ordersToolStripMenuItem.Size = new System.Drawing.Size(218, 22);
this.ordersToolStripMenuItem.Size = new System.Drawing.Size(203, 22);
this.ordersToolStripMenuItem.Text = "Список заказов";
this.ordersToolStripMenuItem.Click += new System.EventHandler(this.OrdersToolStripMenuItem_Click);
//
@ -201,7 +198,7 @@
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1015, 338);
this.ClientSize = new System.Drawing.Size(1135, 338);
this.Controls.Add(this.buttonRefresh);
this.Controls.Add(this.buttonIssuedOrder);
this.Controls.Add(this.buttonOrderReady);

View File

@ -1,5 +1,4 @@
using FurnitureAssemblyBusinessLogic.BussinessLogic;
using FurnitureAssemblyContracts.BindingModels;
using FurnitureAssemblyContracts.BindingModels;
using FurnitureAssemblyContracts.BusinessLogicsContracts;
using FurnitureAssemblyDataModels.Enums;
using Microsoft.Extensions.Logging;
@ -20,6 +19,7 @@ namespace FurnitureAssemblyView
private readonly ILogger _logger;
private readonly IOrderLogic _orderLogic;
private readonly IReportLogic _reportLogic;
public FormMain(ILogger<FormMain> logger, IOrderLogic orderLogic, IReportLogic reportLogic)
@ -29,7 +29,6 @@ namespace FurnitureAssemblyView
_logger = logger;
_orderLogic = orderLogic;
_reportLogic = reportLogic;
}
private void FormMain_Load(object sender, EventArgs e)
@ -49,7 +48,9 @@ namespace FurnitureAssemblyView
{
dataGridView.DataSource = list;
dataGridView.Columns["FurnitureId"].Visible = false;
dataGridView.Columns["ClientId"].Visible = false;
dataGridView.Columns["FurnitureName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["ClientFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка заказов");
@ -182,11 +183,6 @@ namespace FurnitureAssemblyView
}
}
private void ButtonRef_Click(object sender, EventArgs e)
{
LoadData();
}
private void WorkPiecesToolStripMenuItem_Click(object sender, EventArgs e)
{
using var dialog = new SaveFileDialog { Filter = "docx|*.docx" };
@ -221,11 +217,17 @@ namespace FurnitureAssemblyView
form.ShowDialog();
}
}
private void ButtonRef_Click(object sender, EventArgs e)
{
LoadData();
}
private void ClientsToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(Клиенты));
var service = Program.ServiceProvider?.GetService(typeof(FormClients));
if (service is Клиенты form)
if (service is FormClients form)
{
form.ShowDialog();
}

View File

@ -1,7 +1,6 @@
using FurnitureAssemblyBusinessLogic.BussinessLogic;
using FurnitureAssemblyBusinessLogic.OfficePackage;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
using FurnitureAssemblyBusinessLogic.OfficePackage.Implements;
using FurnitureAssemblyBusinessLogic.OfficePackage;
using FurnitureAssemblyContracts.BusinessLogicsContracts;
using FurnitureAssemblyContracts.StoragesContracts;
using FurnitureAssemblyDatabaseImplement.Implements;
@ -15,7 +14,9 @@ namespace FurnitureAssemblyView
internal static class Program
{
private static ServiceProvider? _serviceProvider;
public static ServiceProvider? ServiceProvider => _serviceProvider;
/// <summary>
/// The main entry point for the application.
/// </summary>
@ -42,11 +43,13 @@ namespace FurnitureAssemblyView
services.AddTransient<IWorkPieceStorage, WorkPieceStorage>();
services.AddTransient<IOrderStorage, OrderStorage>();
services.AddTransient<IFurnitureStorage, FurnitureStorage>();
services.AddTransient<IClientStorage, ClientStorage>();
services.AddTransient<IWorkPieceLogic, WorkPieceLogic>();
services.AddTransient<IOrderLogic, OrderLogic>();
services.AddTransient<IFurnitureLogic, FurnitureLogic>();
services.AddTransient<IReportLogic, ReportLogic>();
services.AddTransient<IClientLogic, ClientLogic>();
services.AddTransient<AbstractSaveToExcel, SaveToExcel>();
services.AddTransient<AbstractSaveToWord, SaveToWord>();
@ -61,6 +64,7 @@ namespace FurnitureAssemblyView
services.AddTransient<FormFurnitureWorkPiece>();
services.AddTransient<FormReportFurnitureWorkPieces>();
services.AddTransient<FormReportOrders>();
services.AddTransient<FormClients>();
}
}
}