Лабораторная работа 8 (усложнёнка)
This commit is contained in:
parent
bb0f88f83a
commit
9d619f493f
@ -13,13 +13,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FurnitureAssemblyListImplem
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FurnitureAssemblyView", "FurnitureAssemblyView\FurnitureAssemblyView.csproj", "{77944C5A-53FC-437B-A563-E7C09C769859}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FurnitureAssemblyView", "FurnitureAssemblyView\FurnitureAssemblyView.csproj", "{77944C5A-53FC-437B-A563-E7C09C769859}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FurnitureAssemblyFileImplement", "FurnitureAssemblyFileImplement\FurnitureAssemblyFileImplement.csproj", "{2EF175D6-B6BD-442B-B81E-67E368553726}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FurnitureAssemblyFileImplement", "FurnitureAssemblyFileImplement\FurnitureAssemblyFileImplement.csproj", "{C987B2B5-56C1-434F-BBCF-6453CF6E5193}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FurnitureAssemblyDatabaseImplement", "FurnitureAssemblyDatabaseImplement\FurnitureAssemblyDatabaseImplement.csproj", "{C2302631-5038-4592-B75F-C03C3ABD510D}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FurnitureAssemblyDatabaseImplement", "FurnitureAssemblyDatabaseImplement\FurnitureAssemblyDatabaseImplement.csproj", "{D236EEDD-7AAE-40FF-BE52-B637EEA89FA6}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FurnitureAssemblyRestApi", "FurnitureAssemblyRestApi\FurnitureAssemblyRestApi.csproj", "{8F808327-C893-4F7B-ACEC-A8F960D4C2F4}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FurnitureAssemblyRestApi", "FurnitureAssemblyRestApi\FurnitureAssemblyRestApi.csproj", "{8622D3F5-AC1F-4D70-AA32-720447AB632F}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FurnitureAssemblyClientApp", "FurnitureAssemblyClientApp\FurnitureAssemblyClientApp.csproj", "{7125E0C7-C4DC-41D1-9365-06A8A7647302}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FurnitureAssemblyClientApp", "FurnitureAssemblyClientApp\FurnitureAssemblyClientApp.csproj", "{14EBC846-F344-4D99-9594-43509A3C1861}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FurnitureAssemblyShopApp", "FurnitureAssemblyShopApp\FurnitureAssemblyShopApp.csproj", "{9EC23C5C-03D2-4890-8FA0-7D42BE8802E2}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@ -47,22 +49,26 @@ Global
|
|||||||
{77944C5A-53FC-437B-A563-E7C09C769859}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{77944C5A-53FC-437B-A563-E7C09C769859}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{77944C5A-53FC-437B-A563-E7C09C769859}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{77944C5A-53FC-437B-A563-E7C09C769859}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{77944C5A-53FC-437B-A563-E7C09C769859}.Release|Any CPU.Build.0 = Release|Any CPU
|
{77944C5A-53FC-437B-A563-E7C09C769859}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{2EF175D6-B6BD-442B-B81E-67E368553726}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{C987B2B5-56C1-434F-BBCF-6453CF6E5193}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{2EF175D6-B6BD-442B-B81E-67E368553726}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{C987B2B5-56C1-434F-BBCF-6453CF6E5193}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{2EF175D6-B6BD-442B-B81E-67E368553726}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{C987B2B5-56C1-434F-BBCF-6453CF6E5193}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{2EF175D6-B6BD-442B-B81E-67E368553726}.Release|Any CPU.Build.0 = Release|Any CPU
|
{C987B2B5-56C1-434F-BBCF-6453CF6E5193}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{C2302631-5038-4592-B75F-C03C3ABD510D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{D236EEDD-7AAE-40FF-BE52-B637EEA89FA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{C2302631-5038-4592-B75F-C03C3ABD510D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{D236EEDD-7AAE-40FF-BE52-B637EEA89FA6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{C2302631-5038-4592-B75F-C03C3ABD510D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{D236EEDD-7AAE-40FF-BE52-B637EEA89FA6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{C2302631-5038-4592-B75F-C03C3ABD510D}.Release|Any CPU.Build.0 = Release|Any CPU
|
{D236EEDD-7AAE-40FF-BE52-B637EEA89FA6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{8F808327-C893-4F7B-ACEC-A8F960D4C2F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{8622D3F5-AC1F-4D70-AA32-720447AB632F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{8F808327-C893-4F7B-ACEC-A8F960D4C2F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{8622D3F5-AC1F-4D70-AA32-720447AB632F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{8F808327-C893-4F7B-ACEC-A8F960D4C2F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{8622D3F5-AC1F-4D70-AA32-720447AB632F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{8F808327-C893-4F7B-ACEC-A8F960D4C2F4}.Release|Any CPU.Build.0 = Release|Any CPU
|
{8622D3F5-AC1F-4D70-AA32-720447AB632F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{7125E0C7-C4DC-41D1-9365-06A8A7647302}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{14EBC846-F344-4D99-9594-43509A3C1861}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{7125E0C7-C4DC-41D1-9365-06A8A7647302}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{14EBC846-F344-4D99-9594-43509A3C1861}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{7125E0C7-C4DC-41D1-9365-06A8A7647302}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{14EBC846-F344-4D99-9594-43509A3C1861}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{7125E0C7-C4DC-41D1-9365-06A8A7647302}.Release|Any CPU.Build.0 = Release|Any CPU
|
{14EBC846-F344-4D99-9594-43509A3C1861}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{9EC23C5C-03D2-4890-8FA0-7D42BE8802E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{9EC23C5C-03D2-4890-8FA0-7D42BE8802E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{9EC23C5C-03D2-4890-8FA0-7D42BE8802E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{9EC23C5C-03D2-4890-8FA0-7D42BE8802E2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@ -0,0 +1,41 @@
|
|||||||
|
using FurnitureAssemblyBusinessLogic.BussinessLogic;
|
||||||
|
using FurnitureAssemblyBusinessLogic.MailWorker;
|
||||||
|
using FurnitureAssemblyBusinessLogic.OfficePackage.Implements;
|
||||||
|
using FurnitureAssemblyBusinessLogic.OfficePackage;
|
||||||
|
using FurnitureAssemblyContracts.BusinessLogicsContracts;
|
||||||
|
using FurnitureAssemblyContracts.DI;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyBusinessLogic
|
||||||
|
{
|
||||||
|
public class BusinessLogicImplementationExtension : IBusinessLogicImplementationExtension
|
||||||
|
{
|
||||||
|
public int Priority => 0;
|
||||||
|
|
||||||
|
public void RegisterServices()
|
||||||
|
{
|
||||||
|
DependencyManager.Instance.RegisterType<IWorkPieceLogic, WorkPieceLogic>();
|
||||||
|
|
||||||
|
DependencyManager.Instance.RegisterType<IOrderLogic, OrderLogic>();
|
||||||
|
DependencyManager.Instance.RegisterType<IFurnitureLogic, FurnitureLogic>();
|
||||||
|
DependencyManager.Instance.RegisterType<IReportLogic, ReportLogic>();
|
||||||
|
DependencyManager.Instance.RegisterType<IClientLogic, ClientLogic>();
|
||||||
|
DependencyManager.Instance.RegisterType<IImplementerLogic, ImplementerLogic>();
|
||||||
|
DependencyManager.Instance.RegisterType<IMessageInfoLogic, MessageInfoLogic>();
|
||||||
|
DependencyManager.Instance.RegisterType<IShopLogic, ShopLogic>();
|
||||||
|
|
||||||
|
DependencyManager.Instance.RegisterType<AbstractSaveToExcel, SaveToExcel>();
|
||||||
|
DependencyManager.Instance.RegisterType<AbstractSaveToWord, SaveToWord>();
|
||||||
|
DependencyManager.Instance.RegisterType<AbstractSaveToPdf, SaveToPdf>();
|
||||||
|
|
||||||
|
DependencyManager.Instance.RegisterType<IWorkProcess, WorkModeling>();
|
||||||
|
DependencyManager.Instance.RegisterType<AbstractMailWorker, MailKitWorker>(true);
|
||||||
|
|
||||||
|
DependencyManager.Instance.RegisterType<IBackUpLogic, BackUpLogic>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -30,12 +30,10 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
|
|
||||||
public void CreateBackUp(BackUpSaveBindingModel model)
|
public void CreateBackUp(BackUpSaveBindingModel model)
|
||||||
{
|
{
|
||||||
// Проверка наличия данных для бэкапа
|
|
||||||
if (_backUpInfo == null)
|
if (_backUpInfo == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_logger.LogDebug("Clear folder");
|
_logger.LogDebug("Clear folder");
|
||||||
@ -45,7 +43,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
|
|
||||||
if (dirInfo.Exists)
|
if (dirInfo.Exists)
|
||||||
{
|
{
|
||||||
// ЛУЧШЕ ВЫБИРАТЬ ОТДЕЛЬНО СОЗДАННУЮ ПАПКУ (Рабочий стол не использовать, поскольку с него всё удалится)
|
// ЛУЧШЕ ВЫБИРАТЬ ОТДЕЛЬНО СОЗДАННУЮ ПАПКУ (Не брать рабочий стол иначе с него всё удалится)
|
||||||
foreach (var file in dirInfo.GetFiles())
|
foreach (var file in dirInfo.GetFiles())
|
||||||
{
|
{
|
||||||
file.Delete();
|
file.Delete();
|
||||||
@ -64,7 +62,6 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
// Берём метод для сохранения
|
// Берём метод для сохранения
|
||||||
_logger.LogDebug("Get assembly");
|
_logger.LogDebug("Get assembly");
|
||||||
|
|
||||||
// Получение сборки и типов
|
|
||||||
var typeIId = typeof(IId);
|
var typeIId = typeof(IId);
|
||||||
var assembly = typeIId.Assembly;
|
var assembly = typeIId.Assembly;
|
||||||
|
|
||||||
@ -78,7 +75,6 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
|
|
||||||
_logger.LogDebug("Find {count} types", types.Length);
|
_logger.LogDebug("Find {count} types", types.Length);
|
||||||
|
|
||||||
// Перебор типов и вызов метода для сохранения данных
|
|
||||||
foreach (var type in types)
|
foreach (var type in types)
|
||||||
{
|
{
|
||||||
// Проверка на то, является ли тип интерфейсом и унаследован ли он от IId
|
// Проверка на то, является ли тип интерфейсом и унаследован ли он от IId
|
||||||
@ -93,7 +89,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
|
|
||||||
_logger.LogDebug("Call SaveToFile method for {name} type", type.Name);
|
_logger.LogDebug("Call SaveToFile method for {name} type", type.Name);
|
||||||
|
|
||||||
// Вызываем метод на выполнение (Вызываем метод типа MethodInfo)
|
// Вызываем метод на выполнение
|
||||||
method?.MakeGenericMethod(modelType).Invoke(this, new object[] { model.FolderName });
|
method?.MakeGenericMethod(modelType).Invoke(this, new object[] { model.FolderName });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,14 +19,12 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
|
|
||||||
private readonly IImplementerStorage _implementerStorage;
|
private readonly IImplementerStorage _implementerStorage;
|
||||||
|
|
||||||
// Конструктор
|
|
||||||
public ImplementerLogic(ILogger<ImplementerLogic> logger, IImplementerStorage implementerStorage)
|
public ImplementerLogic(ILogger<ImplementerLogic> logger, IImplementerStorage implementerStorage)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_implementerStorage = implementerStorage;
|
_implementerStorage = implementerStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Вывод всего отфильтрованного списка
|
|
||||||
public List<ImplementerViewModel>? ReadList(ImplementerSearchModel? model)
|
public List<ImplementerViewModel>? ReadList(ImplementerSearchModel? model)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("ReadList. ImplementerFIO:{ImplementerFIO}. Id:{Id}", model?.ImplementerFIO, model?.Id);
|
_logger.LogInformation("ReadList. ImplementerFIO:{ImplementerFIO}. Id:{Id}", model?.ImplementerFIO, model?.Id);
|
||||||
@ -45,7 +43,6 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Вывод конкретного элемента
|
|
||||||
public ImplementerViewModel? ReadElement(ImplementerSearchModel model)
|
public ImplementerViewModel? ReadElement(ImplementerSearchModel model)
|
||||||
{
|
{
|
||||||
if (model == null)
|
if (model == null)
|
||||||
@ -69,7 +66,6 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Создание работника
|
|
||||||
public bool Create(ImplementerBindingModel model)
|
public bool Create(ImplementerBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model);
|
CheckModel(model);
|
||||||
@ -84,7 +80,6 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Обновление данных о работнике
|
|
||||||
public bool Update(ImplementerBindingModel model)
|
public bool Update(ImplementerBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model);
|
CheckModel(model);
|
||||||
@ -99,7 +94,6 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Удаление работника
|
|
||||||
public bool Delete(ImplementerBindingModel model)
|
public bool Delete(ImplementerBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model, false);
|
CheckModel(model, false);
|
||||||
@ -151,7 +145,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
// Проверка на наличие квалификации
|
// Проверка на наличие квалификации
|
||||||
if (model.WorkExperience < 0)
|
if (model.WorkExperience < 0)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Указан некорректный стаж работы", nameof(model.WorkExperience));
|
throw new ArgumentNullException("Указан некоректный стаж работы", nameof(model.WorkExperience));
|
||||||
}
|
}
|
||||||
|
|
||||||
_logger.LogInformation("Implementer. ImplementerFIO:{ImplementerFIO}. Password:{Password}. " +
|
_logger.LogInformation("Implementer. ImplementerFIO:{ImplementerFIO}. Password:{Password}. " +
|
||||||
|
@ -41,7 +41,30 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
|
|
||||||
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
||||||
|
|
||||||
return list.OrderByDescending(x => x.DateDelivery).ToList();
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageInfoViewModel? IMessageInfoLogic.ReadElement(MessageInfoSearchModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(model));
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("ReadList. ClientId:{ClientId}. MessageId:{MessageId}", model.ClientId, model?.MessageId);
|
||||||
|
|
||||||
|
var element = _messageInfoStorage.GetElement(model);
|
||||||
|
|
||||||
|
if (element == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("ReadElement element not found");
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("ReadElement find. Id:{Id}", element.MessageId);
|
||||||
|
|
||||||
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Create(MessageInfoBindingModel model)
|
public bool Create(MessageInfoBindingModel model)
|
||||||
@ -55,5 +78,17 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool Update(MessageInfoBindingModel model)
|
||||||
|
{
|
||||||
|
if (_messageInfoStorage.Update(model) == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Insert operation failed");
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,20 +21,25 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
|
|
||||||
private readonly IOrderStorage _orderStorage;
|
private readonly IOrderStorage _orderStorage;
|
||||||
|
|
||||||
|
private readonly IShopLogic _shopLogic;
|
||||||
|
|
||||||
private readonly AbstractMailWorker _mailWorker;
|
private readonly AbstractMailWorker _mailWorker;
|
||||||
|
|
||||||
|
private readonly IFurnitureStorage _furnitureStorage;
|
||||||
|
|
||||||
private readonly IClientLogic _clientLogic;
|
private readonly IClientLogic _clientLogic;
|
||||||
|
|
||||||
private readonly object locker = new object();
|
private readonly object locker = new object();
|
||||||
|
|
||||||
// Конструктор
|
// Конструктор
|
||||||
public OrderLogic(ILogger<OrderLogic> logger, IOrderStorage orderStorage, AbstractMailWorker mailWorker, IClientLogic clientLogic)
|
public OrderLogic(ILogger<OrderLogic> logger, IOrderStorage orderStorage, IShopLogic shopLogic, IFurnitureStorage furnitureStorage, IClientLogic clientLogic, AbstractMailWorker mailWorker)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_orderStorage = orderStorage;
|
_orderStorage = orderStorage;
|
||||||
_mailWorker = mailWorker;
|
_shopLogic = shopLogic;
|
||||||
|
_furnitureStorage = furnitureStorage;
|
||||||
_clientLogic = clientLogic;
|
_clientLogic = clientLogic;
|
||||||
|
_mailWorker = mailWorker;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Вывод отфильтрованного списка компонентов
|
// Вывод отфильтрованного списка компонентов
|
||||||
@ -98,8 +103,8 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
|
|
||||||
if (result == null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
model.Status = OrderStatus.Неизвестен;
|
|
||||||
_logger.LogWarning("Insert operation failed");
|
_logger.LogWarning("Insert operation failed");
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,7 +175,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
throw new ArgumentNullException("Некорректный идентификатор у клиента", nameof(model.ClientId));
|
throw new ArgumentNullException("Некорректный идентификатор у клиента", nameof(model.ClientId));
|
||||||
}
|
}
|
||||||
|
|
||||||
_logger.LogInformation("Order. OrderId:{Id}. Sum:{Sum}. ClientId:{ClientId}. FurnitureId:{Id}", model.Id, model.Sum, model.ClientId, model.FurnitureId);
|
_logger.LogInformation("Order. OrderId:{Id}, Sum:{Sum}. FurnitureId:{Id}. Sum:{Sum}", model.Id, model.Sum, model.FurnitureId, model.Sum);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Обновление статуса заказа
|
// Обновление статуса заказа
|
||||||
@ -185,7 +190,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Проверка на возможность обновления статуса на следующий
|
// Проверка на возможность обновления статуса на следующий
|
||||||
if (viewModel.Status + 1 != newOrderStatus)
|
if (viewModel.Status + 1 != newOrderStatus && viewModel.Status != OrderStatus.Ожидание)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("Status update operation failed. New status " + newOrderStatus.ToString() + "incorrect");
|
_logger.LogWarning("Status update operation failed. New status " + newOrderStatus.ToString() + "incorrect");
|
||||||
return false;
|
return false;
|
||||||
@ -200,9 +205,26 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Проверка на выдачу
|
// Проверка на выдачу
|
||||||
if (model.Status == OrderStatus.Выдан)
|
if (model.Status == OrderStatus.Готов || viewModel.Status == OrderStatus.Ожидание)
|
||||||
{
|
{
|
||||||
model.DateImplement = DateTime.Now;
|
model.DateImplement = DateTime.Now;
|
||||||
|
|
||||||
|
var furniture = _furnitureStorage.GetElement(new() { Id = viewModel.FurnitureId });
|
||||||
|
|
||||||
|
if (furniture == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(furniture));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_shopLogic.AddFurnitures(furniture, viewModel.Count))
|
||||||
|
{
|
||||||
|
model.Status = OrderStatus.Ожидание;
|
||||||
|
_logger.LogWarning($"Невозможно выдать изделия, магазины переполнены. AddFurnitures operation failed. Shop is full.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
model.DateImplement = DateTime.Now;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -216,8 +238,6 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
|
|
||||||
if (result == null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
model.Status--;
|
|
||||||
|
|
||||||
_logger.LogWarning("Update operation failed");
|
_logger.LogWarning("Update operation failed");
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -20,6 +20,8 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
|
|
||||||
private readonly IOrderStorage _orderStorage;
|
private readonly IOrderStorage _orderStorage;
|
||||||
|
|
||||||
|
private readonly IShopStorage _shopStorage;
|
||||||
|
|
||||||
private readonly AbstractSaveToExcel _saveToExcel;
|
private readonly AbstractSaveToExcel _saveToExcel;
|
||||||
|
|
||||||
private readonly AbstractSaveToWord _saveToWord;
|
private readonly AbstractSaveToWord _saveToWord;
|
||||||
@ -27,12 +29,12 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
private readonly AbstractSaveToPdf _saveToPdf;
|
private readonly AbstractSaveToPdf _saveToPdf;
|
||||||
|
|
||||||
// Инициализируем поля класса через контейнер
|
// Инициализируем поля класса через контейнер
|
||||||
public ReportLogic(IFurnitureStorage furnitureStorage,
|
public ReportLogic(IFurnitureStorage furnitureStorage, IOrderStorage orderStorage, IShopStorage shopStorage,
|
||||||
IOrderStorage orderStorage, AbstractSaveToExcel saveToExcel,
|
AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf)
|
||||||
AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf)
|
|
||||||
{
|
{
|
||||||
_furnitureStorage = furnitureStorage;
|
_furnitureStorage = furnitureStorage;
|
||||||
_orderStorage = orderStorage;
|
_orderStorage = orderStorage;
|
||||||
|
_shopStorage = shopStorage;
|
||||||
|
|
||||||
_saveToExcel = saveToExcel;
|
_saveToExcel = saveToExcel;
|
||||||
_saveToWord = saveToWord;
|
_saveToWord = saveToWord;
|
||||||
@ -67,6 +69,34 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Получение списка изделий с указанием, в каких магазинах в наличии
|
||||||
|
public List<ReportShopFurnituresViewModel> GetShopFurnitures()
|
||||||
|
{
|
||||||
|
var shops = _shopStorage.GetFullList();
|
||||||
|
|
||||||
|
var list = new List<ReportShopFurnituresViewModel>();
|
||||||
|
|
||||||
|
foreach (var shop in shops)
|
||||||
|
{
|
||||||
|
var record = new ReportShopFurnituresViewModel
|
||||||
|
{
|
||||||
|
ShopName = shop.ShopName,
|
||||||
|
Furnitures = new List<(string, int)>(),
|
||||||
|
TotalCount = 0
|
||||||
|
};
|
||||||
|
|
||||||
|
foreach (var furniture in shop.ShopFurnitures)
|
||||||
|
{
|
||||||
|
record.Furnitures.Add(new(furniture.Value.Item1.FurnitureName, furniture.Value.Item2));
|
||||||
|
record.TotalCount += furniture.Value.Item2;
|
||||||
|
}
|
||||||
|
|
||||||
|
list.Add(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
// Получение списка заказов за определённый период
|
// Получение списка заказов за определённый период
|
||||||
public List<ReportOrdersViewModel> GetOrders(ReportBindingModel model)
|
public List<ReportOrdersViewModel> GetOrders(ReportBindingModel model)
|
||||||
{
|
{
|
||||||
@ -81,6 +111,20 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
}).ToList();
|
}).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Получение списка заказов за весь период
|
||||||
|
public List<ReportGroupedOrdersViewModel> GetGroupedOrders()
|
||||||
|
{
|
||||||
|
return _orderStorage.GetFullList()
|
||||||
|
.GroupBy(x => x.DateCreate.Date)
|
||||||
|
.Select(x => new ReportGroupedOrdersViewModel
|
||||||
|
{
|
||||||
|
DateCreate = x.Key,
|
||||||
|
Count = x.Count(),
|
||||||
|
Sum = x.Sum(x => x.Sum)
|
||||||
|
})
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
// Сохранение мебели в файл-Word
|
// Сохранение мебели в файл-Word
|
||||||
public void SaveFurnituresToWordFile(ReportBindingModel model)
|
public void SaveFurnituresToWordFile(ReportBindingModel model)
|
||||||
{
|
{
|
||||||
@ -92,6 +136,17 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Сохранение магазинов в файл-Word
|
||||||
|
public void SaveShopsToWordFile(ReportBindingModel model)
|
||||||
|
{
|
||||||
|
_saveToWord.CreateTable(new WordInfo
|
||||||
|
{
|
||||||
|
FileName = model.FileName,
|
||||||
|
Title = "Таблица магазинов",
|
||||||
|
Shops = _shopStorage.GetFullList()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Сохранение заготовок с указанием изделий в файл_Excel
|
// Сохранение заготовок с указанием изделий в файл_Excel
|
||||||
public void SaveFurnitureWorkPieceToExcelFile(ReportBindingModel model)
|
public void SaveFurnitureWorkPieceToExcelFile(ReportBindingModel model)
|
||||||
{
|
{
|
||||||
@ -103,6 +158,17 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Сохранение магазинов с указанием изделий в файл-Excel
|
||||||
|
public void SaveShopFurnituresToExcelFile(ReportBindingModel model)
|
||||||
|
{
|
||||||
|
_saveToExcel.CreateShopReport(new ExcelInfo
|
||||||
|
{
|
||||||
|
FileName = model.FileName,
|
||||||
|
Title = "Список магазинов",
|
||||||
|
ShopFurnitures = GetShopFurnitures()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Сохранение заказов в файл-Pdf
|
// Сохранение заказов в файл-Pdf
|
||||||
public void SaveOrdersToPdfFile(ReportBindingModel model)
|
public void SaveOrdersToPdfFile(ReportBindingModel model)
|
||||||
{
|
{
|
||||||
@ -115,5 +181,16 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
Orders = GetOrders(model)
|
Orders = GetOrders(model)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Сохранение заказов за весь период в файл-Pdf
|
||||||
|
public void SaveGroupedOrdersToPdfFile(ReportBindingModel model)
|
||||||
|
{
|
||||||
|
_saveToPdf.CreateGroupedDoc(new PdfInfo
|
||||||
|
{
|
||||||
|
FileName = model.FileName,
|
||||||
|
Title = "Список заказов",
|
||||||
|
GroupedOrders = GetGroupedOrders()
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,267 @@
|
|||||||
|
using FurnitureAssemblyContracts.BindingModels;
|
||||||
|
using FurnitureAssemblyContracts.BusinessLogicsContracts;
|
||||||
|
using FurnitureAssemblyContracts.SearchModels;
|
||||||
|
using FurnitureAssemblyContracts.StoragesContracts;
|
||||||
|
using FurnitureAssemblyContracts.ViewModels;
|
||||||
|
using FurnitureAssemblyDataModels.Models;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
||||||
|
{
|
||||||
|
// Класс, реализующий логику для магазинов
|
||||||
|
public class ShopLogic : IShopLogic
|
||||||
|
{
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
|
private readonly IShopStorage _shopStorage;
|
||||||
|
|
||||||
|
// Конструктор
|
||||||
|
public ShopLogic(ILogger<ShopLogic> logger, IShopStorage shopStorage)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_shopStorage = shopStorage;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Вывод конкретного магазина
|
||||||
|
public ShopViewModel? ReadElement(ShopSearchModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(model));
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("ReadElement. ShopName:{ShopName}. Id:{Id}", model.ShopName, model.Id);
|
||||||
|
var element = _shopStorage.GetElement(model);
|
||||||
|
|
||||||
|
if (element == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("ReadElement element not found");
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
|
||||||
|
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Вывод отфильтрованного списка компонентов
|
||||||
|
public List<ShopViewModel>? ReadList(ShopSearchModel? model)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("ReadList. ShopName:{ShopName}. Id: {Id}", model?.ShopName, model?.Id);
|
||||||
|
|
||||||
|
// list хранит весь список в случае, если model пришло со значением null на вход метода
|
||||||
|
var list = model == null ? _shopStorage.GetFullList() : _shopStorage.GetFilteredList(model);
|
||||||
|
|
||||||
|
if (list == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("ReadList return null list");
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Пополнение магазина
|
||||||
|
public bool AddFurniture(ShopSearchModel model, IFurnitureModel furniture, int count)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(model));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count <= 0)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("Количество добавляемых изделий должно быть больше 0", nameof(count));
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("AddFurniture. ShopName:{ShopName}. Id: {Id}", model?.ShopName, model?.Id);
|
||||||
|
var shop = _shopStorage.GetElement(model);
|
||||||
|
|
||||||
|
if (shop == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Add Furniture operation failed");
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shop.MaxCountFurnitures - shop.ShopFurnitures.Select(x => x.Value.Item2).Sum() < count)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("Слишком много изделий для одного магазина", nameof(count));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!shop.ShopFurnitures.ContainsKey(furniture.Id))
|
||||||
|
{
|
||||||
|
shop.ShopFurnitures[furniture.Id] = (furniture, count);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
shop.ShopFurnitures[furniture.Id] = (furniture, shop.ShopFurnitures[furniture.Id].Item2 + count);
|
||||||
|
}
|
||||||
|
|
||||||
|
_shopStorage.Update(new ShopBindingModel()
|
||||||
|
{
|
||||||
|
Id = shop.Id,
|
||||||
|
ShopName = shop.ShopName,
|
||||||
|
Address = shop.Address,
|
||||||
|
DateOpen = shop.DateOpen,
|
||||||
|
MaxCountFurnitures = shop.MaxCountFurnitures,
|
||||||
|
ShopFurnitures = shop.ShopFurnitures
|
||||||
|
});
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Создание магазина
|
||||||
|
public bool Create(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
CheckModel(model);
|
||||||
|
|
||||||
|
if (_shopStorage.Insert(model) == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Insert operation failed");
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Обновление магазина
|
||||||
|
public bool Update(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
CheckModel(model);
|
||||||
|
|
||||||
|
if (_shopStorage.Update(model) == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Update operation failed");
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Удаление магазина
|
||||||
|
public bool Delete(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
CheckModel(model, false);
|
||||||
|
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
||||||
|
|
||||||
|
if (_shopStorage.Delete(model) == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Delete operation failed");
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Проверка входного аргумента для методов Insert, Update и Delete
|
||||||
|
private void CheckModel(ShopBindingModel model, bool withParams = true)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(model));
|
||||||
|
}
|
||||||
|
|
||||||
|
// При удалении передаём как параметр false
|
||||||
|
if (!withParams)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Проверка на наличие названия магазина
|
||||||
|
if (string.IsNullOrEmpty(model.ShopName))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("Отсутствует названия магазина", nameof(model.ShopName));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Проверка на наличие адреса у магазина
|
||||||
|
if (string.IsNullOrEmpty(model.Address))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("Отсутствует адреса магазина", nameof(model.Address));
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("Shop. ShopName:{ShopName}. Address:{Address}. Id: {Id}", model.ShopName, model.Address, model.Id);
|
||||||
|
|
||||||
|
// Проверка на наличие такого же магазина в списке
|
||||||
|
var element = _shopStorage.GetElement(new ShopSearchModel
|
||||||
|
{
|
||||||
|
ShopName = model.ShopName
|
||||||
|
});
|
||||||
|
|
||||||
|
// Если элемент найден и его Id не совпадает с Id переданного объекта
|
||||||
|
if (element != null && element.Id != model.Id)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Магазин с таким названием уже есть");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public bool AddFurnitures(IFurnitureModel model, int count)
|
||||||
|
{
|
||||||
|
if (count <= 0)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("Количество добавляемых изделий должно быть больше 0", nameof(count));
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("AddFurnitures. Furniture: {Furniture}. Count: {Count}", model?.FurnitureName, count);
|
||||||
|
|
||||||
|
var capacity = _shopStorage.GetFullList().Select(x => x.MaxCountFurnitures - x.ShopFurnitures.Select(x => x.Value.Item2).Sum()).Sum() - count;
|
||||||
|
|
||||||
|
if (capacity < 0)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("AddFurnitures operation failed. Sell {count} Furnitures ", -capacity);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var shop in _shopStorage.GetFullList())
|
||||||
|
{
|
||||||
|
if (shop.MaxCountFurnitures - shop.ShopFurnitures.Select(x => x.Value.Item2).Sum() < count)
|
||||||
|
{
|
||||||
|
if (!AddFurniture(new() { Id = shop.Id }, model, shop.MaxCountFurnitures - shop.ShopFurnitures.Select(x => x.Value.Item2).Sum()))
|
||||||
|
{
|
||||||
|
_logger.LogWarning("AddFurnitures operation failed.");
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
count -= shop.MaxCountFurnitures - shop.ShopFurnitures.Select(x => x.Value.Item2).Sum();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!AddFurniture(new() { Id = shop.Id }, model, count))
|
||||||
|
{
|
||||||
|
_logger.LogWarning("AddFurnitures operation failed.");
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
count -= count;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count == 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool SellFurnitures(IFurnitureModel model, int count)
|
||||||
|
{
|
||||||
|
return _shopStorage.SellFurnitures(model, count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -20,7 +20,6 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
|
|
||||||
private IOrderLogic? _orderLogic;
|
private IOrderLogic? _orderLogic;
|
||||||
|
|
||||||
// Конструктор
|
|
||||||
public WorkModeling(ILogger<WorkModeling> logger)
|
public WorkModeling(ILogger<WorkModeling> logger)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
@ -38,18 +37,14 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var orders = _orderLogic.ReadList(new OrderSearchModel
|
var orders = _orderLogic.ReadList(new() { Status = OrderStatus.Принят });
|
||||||
|
if (orders == null)
|
||||||
{
|
{
|
||||||
Status = OrderStatus.Принят
|
_logger.LogWarning("DoWork. Orders is null or empty");
|
||||||
});
|
|
||||||
|
|
||||||
if (orders == null || orders.Count == 0)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Dowork. Orders is null or empty");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_logger.LogDebug("DoWork for {count} orders", orders.Count);
|
_logger.LogDebug("DoWork for {Count} orders", orders.Count);
|
||||||
|
|
||||||
foreach (var implementer in implementers)
|
foreach (var implementer in implementers)
|
||||||
{
|
{
|
||||||
@ -65,6 +60,43 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await Task.Run(() =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var runOrder = _orderLogic.ReadList(new OrderSearchModel
|
||||||
|
{
|
||||||
|
ImplementerId = implementer.Id,
|
||||||
|
Status = OrderStatus.Ожидание
|
||||||
|
});
|
||||||
|
|
||||||
|
if (runOrder == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var order in runOrder)
|
||||||
|
{
|
||||||
|
_logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, order.Id);
|
||||||
|
_orderLogic.FinishOrder(new OrderBindingModel
|
||||||
|
{
|
||||||
|
Id = order.Id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Заказа может не быть, просто игнорируем ошибку
|
||||||
|
catch (InvalidOperationException ex)
|
||||||
|
{
|
||||||
|
_logger.LogWarning(ex, "Error try get work");
|
||||||
|
}
|
||||||
|
// Может возникнуть иная ошибка, тогда просто заканчиваем выполнение имитации
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Error while do work");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
await RunOrderInWork(implementer);
|
await RunOrderInWork(implementer);
|
||||||
|
|
||||||
await Task.Run(() =>
|
await Task.Run(() =>
|
||||||
@ -82,27 +114,25 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
ImplementerId = implementer.Id
|
ImplementerId = implementer.Id
|
||||||
});
|
});
|
||||||
|
|
||||||
// Работу работаем, делаем-делаем
|
// делаем работу
|
||||||
Thread.Sleep(implementer.WorkExperience * order.Count);
|
Thread.Sleep(implementer.WorkExperience * order.Count);
|
||||||
|
|
||||||
_logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, order.Id);
|
_logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, order.Id);
|
||||||
|
|
||||||
_orderLogic.FinishOrder(new OrderBindingModel
|
_orderLogic.FinishOrder(new OrderBindingModel
|
||||||
{
|
{
|
||||||
Id = order.Id
|
Id = order.Id,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Усёёё отдыхаем
|
// Отдыхаем
|
||||||
Thread.Sleep(implementer.Qualification);
|
Thread.Sleep(implementer.Qualification);
|
||||||
}
|
}
|
||||||
|
// Кто-то мог уже перехватить заказ, игнорируем ошибку
|
||||||
// Игнорируем ошибку, если с заказом что-то случится
|
|
||||||
catch (InvalidOperationException ex)
|
catch (InvalidOperationException ex)
|
||||||
{
|
{
|
||||||
_logger.LogWarning(ex, "Error try get work");
|
_logger.LogWarning(ex, "Error try get work");
|
||||||
}
|
}
|
||||||
|
// Заканчиваем выполнение имитации в случае иной ошибки
|
||||||
// В случае ошибки прервём выполнение имитации работы
|
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex, "Error while do work");
|
_logger.LogError(ex, "Error while do work");
|
||||||
@ -112,7 +142,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ищем заказ, который уже во всю в работе (вдруг прервали исполнителя)
|
// Ищем заказ, которые уже в работе (вдруг исполнителя прервали)
|
||||||
private async Task RunOrderInWork(ImplementerViewModel implementer)
|
private async Task RunOrderInWork(ImplementerViewModel implementer)
|
||||||
{
|
{
|
||||||
if (_orderLogic == null || implementer == null)
|
if (_orderLogic == null || implementer == null)
|
||||||
@ -133,7 +163,7 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_logger.LogDebug("DoWork {Id} back to order {Order}", implementer.Id, runOrder.Id);
|
_logger.LogDebug("DoWork. Worker {Id} back to order {Order}", implementer.Id, runOrder.Id);
|
||||||
|
|
||||||
// Доделываем работу
|
// Доделываем работу
|
||||||
Thread.Sleep(implementer.WorkExperience * runOrder.Count);
|
Thread.Sleep(implementer.WorkExperience * runOrder.Count);
|
||||||
@ -145,17 +175,15 @@ namespace FurnitureAssemblyBusinessLogic.BussinessLogic
|
|||||||
Id = runOrder.Id
|
Id = runOrder.Id
|
||||||
});
|
});
|
||||||
|
|
||||||
// Отдыхаем, хватит работы
|
// Отдыхаем
|
||||||
Thread.Sleep(implementer.Qualification);
|
Thread.Sleep(implementer.Qualification);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Заказа может не быть, просто игнорируем ошибку
|
// Заказа может не быть, просто игнорируем ошибку
|
||||||
catch (InvalidOperationException ex)
|
catch (InvalidOperationException ex)
|
||||||
{
|
{
|
||||||
_logger.LogWarning(ex, "Error try get work");
|
_logger.LogWarning(ex, "Error try get work");
|
||||||
}
|
}
|
||||||
|
// Может возникнуть иная ошибка, тогда просто заканчиваем выполнение имитации
|
||||||
// Просто возникнет тупая ошибка, тогда заканчиваем выполнение имитации
|
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex, "Error while do work");
|
_logger.LogError(ex, "Error while do work");
|
||||||
|
@ -8,13 +8,18 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="DocumentFormat.OpenXml" Version="2.20.0" />
|
<PackageReference Include="DocumentFormat.OpenXml" Version="2.20.0" />
|
||||||
<PackageReference Include="MailKit" Version="4.0.0" />
|
<PackageReference Include="MailKit" Version="4.5.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
|
||||||
<PackageReference Include="PDFsharp-MigraDoc-GDI" Version="1.50.5147" />
|
<PackageReference Include="PDFsharp-MigraDoc-GDI" Version="1.50.5147" />
|
||||||
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\FurnitureAssemblyContracts\FurnitureAssemblyContracts.csproj" />
|
<ProjectReference Include="..\FurnitureAssemblyContracts\FurnitureAssemblyContracts.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
|
<Exec Command="copy /Y "$(TargetDir)*.dll" "$(SolutionDir)BusinessLogicImplementationExtensions\*.dll"" />
|
||||||
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -86,6 +86,81 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage
|
|||||||
SaveExcel(info);
|
SaveExcel(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void CreateShopReport(ExcelInfo info)
|
||||||
|
{
|
||||||
|
CreateExcel(info);
|
||||||
|
|
||||||
|
InsertCellInWorksheet(new ExcelCellParameters
|
||||||
|
{
|
||||||
|
ColumnName = "A",
|
||||||
|
RowIndex = 1,
|
||||||
|
Text = info.Title,
|
||||||
|
StyleInfo = ExcelStyleInfoType.Title
|
||||||
|
});
|
||||||
|
|
||||||
|
MergeCells(new ExcelMergeParameters
|
||||||
|
{
|
||||||
|
CellFromName = "A1",
|
||||||
|
CellToName = "C1"
|
||||||
|
});
|
||||||
|
|
||||||
|
uint rowIndex = 2;
|
||||||
|
|
||||||
|
foreach (var sm in info.ShopFurnitures)
|
||||||
|
{
|
||||||
|
InsertCellInWorksheet(new ExcelCellParameters
|
||||||
|
{
|
||||||
|
ColumnName = "A",
|
||||||
|
RowIndex = rowIndex,
|
||||||
|
Text = sm.ShopName,
|
||||||
|
StyleInfo = ExcelStyleInfoType.Text
|
||||||
|
});
|
||||||
|
|
||||||
|
rowIndex++;
|
||||||
|
|
||||||
|
foreach (var (Furniture, Count) in sm.Furnitures)
|
||||||
|
{
|
||||||
|
InsertCellInWorksheet(new ExcelCellParameters
|
||||||
|
{
|
||||||
|
ColumnName = "B",
|
||||||
|
RowIndex = rowIndex,
|
||||||
|
Text = Furniture,
|
||||||
|
StyleInfo = ExcelStyleInfoType.TextWithBorder
|
||||||
|
});
|
||||||
|
|
||||||
|
InsertCellInWorksheet(new ExcelCellParameters
|
||||||
|
{
|
||||||
|
ColumnName = "C",
|
||||||
|
RowIndex = rowIndex,
|
||||||
|
Text = Count.ToString(),
|
||||||
|
StyleInfo = ExcelStyleInfoType.TextWithBorder
|
||||||
|
});
|
||||||
|
|
||||||
|
rowIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
InsertCellInWorksheet(new ExcelCellParameters
|
||||||
|
{
|
||||||
|
ColumnName = "A",
|
||||||
|
RowIndex = rowIndex,
|
||||||
|
Text = "Итого",
|
||||||
|
StyleInfo = ExcelStyleInfoType.Text
|
||||||
|
});
|
||||||
|
|
||||||
|
InsertCellInWorksheet(new ExcelCellParameters
|
||||||
|
{
|
||||||
|
ColumnName = "C",
|
||||||
|
RowIndex = rowIndex,
|
||||||
|
Text = sm.TotalCount.ToString(),
|
||||||
|
StyleInfo = ExcelStyleInfoType.Text
|
||||||
|
});
|
||||||
|
|
||||||
|
rowIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
SaveExcel(info);
|
||||||
|
}
|
||||||
|
|
||||||
// Создание Excel-файла
|
// Создание Excel-файла
|
||||||
protected abstract void CreateExcel(ExcelInfo info);
|
protected abstract void CreateExcel(ExcelInfo info);
|
||||||
|
|
||||||
|
@ -58,6 +58,36 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage
|
|||||||
SavePdf(info);
|
SavePdf(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void CreateGroupedDoc(PdfInfo info)
|
||||||
|
{
|
||||||
|
CreatePdf(info);
|
||||||
|
|
||||||
|
CreateParagraph(new PdfParagraph { Text = info.Title, Style = "NormalTitle", ParagraphAlignment = PdfParagraphAlignmentType.Center });
|
||||||
|
|
||||||
|
CreateTable(new List<string> { "3cm", "3cm", "3cm" });
|
||||||
|
|
||||||
|
CreateRow(new PdfRowParameters
|
||||||
|
{
|
||||||
|
Texts = new List<string> { "Дата заказа", "Количество заказов", "Сумма" },
|
||||||
|
Style = "NormalTitle",
|
||||||
|
ParagraphAlignment = PdfParagraphAlignmentType.Center
|
||||||
|
});
|
||||||
|
|
||||||
|
foreach (var order in info.GroupedOrders)
|
||||||
|
{
|
||||||
|
CreateRow(new PdfRowParameters
|
||||||
|
{
|
||||||
|
Texts = new List<string> { order.DateCreate.ToShortDateString(), order.Count.ToString(), order.Sum.ToString() },
|
||||||
|
Style = "Normal",
|
||||||
|
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateParagraph(new PdfParagraph { Text = $"Итого: {info.GroupedOrders.Sum(x => x.Sum)}\t", Style = "Normal", ParagraphAlignment = PdfParagraphAlignmentType.Center });
|
||||||
|
|
||||||
|
SavePdf(info);
|
||||||
|
}
|
||||||
|
|
||||||
/// Создание Pdf-файла
|
/// Создание Pdf-файла
|
||||||
protected abstract void CreatePdf(PdfInfo info);
|
protected abstract void CreatePdf(PdfInfo info);
|
||||||
|
|
||||||
|
@ -44,12 +44,64 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage
|
|||||||
SaveWord(info);
|
SaveWord(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void CreateTable(WordInfo info)
|
||||||
|
{
|
||||||
|
CreateWord(info);
|
||||||
|
|
||||||
|
CreateParagraph(new WordParagraph
|
||||||
|
{
|
||||||
|
Texts = new List<(string, WordTextProperties)> { (info.Title, new WordTextProperties { Bold = true, Size = "24" }) },
|
||||||
|
TextProperties = new WordTextProperties
|
||||||
|
{
|
||||||
|
Size = "24",
|
||||||
|
JustificationType = WordJustificationType.Center
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
List<List<(string, WordTextProperties)>> rowList = new()
|
||||||
|
{
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
new("Название", new WordTextProperties { Bold = true, Size = "24" } ),
|
||||||
|
new("Адрес", new WordTextProperties { Bold = true, Size = "24" } ),
|
||||||
|
new("Дата открытия", new WordTextProperties { Bold = true, Size = "24" } )
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
foreach (var shop in info.Shops)
|
||||||
|
{
|
||||||
|
List<(string, WordTextProperties)> cellList = new()
|
||||||
|
{
|
||||||
|
new(shop.ShopName, new WordTextProperties { Size = "24" }),
|
||||||
|
new(shop.Address, new WordTextProperties { Size = "24" }),
|
||||||
|
new(shop.DateOpen.ToShortDateString(), new WordTextProperties { Size = "24"})
|
||||||
|
};
|
||||||
|
|
||||||
|
rowList.Add(cellList);
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateTable(new WordParagraph
|
||||||
|
{
|
||||||
|
RowTexts = rowList,
|
||||||
|
TextProperties = new WordTextProperties
|
||||||
|
{
|
||||||
|
Size = "24",
|
||||||
|
JustificationType = WordJustificationType.Center
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
SaveWord(info);
|
||||||
|
}
|
||||||
|
|
||||||
// Создание Doc-файла
|
// Создание Doc-файла
|
||||||
protected abstract void CreateWord(WordInfo info);
|
protected abstract void CreateWord(WordInfo info);
|
||||||
|
|
||||||
// Создание абзаца с текстом
|
// Создание абзаца с текстом
|
||||||
protected abstract void CreateParagraph(WordParagraph paragraph);
|
protected abstract void CreateParagraph(WordParagraph paragraph);
|
||||||
|
|
||||||
|
// Создание таблицы
|
||||||
|
protected abstract void CreateTable(WordParagraph paragraph);
|
||||||
|
|
||||||
// Сохранение файла
|
// Сохранение файла
|
||||||
protected abstract void SaveWord(WordInfo info);
|
protected abstract void SaveWord(WordInfo info);
|
||||||
}
|
}
|
||||||
|
@ -18,5 +18,8 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
|
|||||||
|
|
||||||
// Список заготовок по изделиям
|
// Список заготовок по изделиям
|
||||||
public List<ReportFurnitureWorkPieceViewModel> FurnitureWorkPieces { get; set; } = new();
|
public List<ReportFurnitureWorkPieceViewModel> FurnitureWorkPieces { get; set; } = new();
|
||||||
|
|
||||||
|
// Список магазинов с изделиями
|
||||||
|
public List<ReportShopFurnituresViewModel> ShopFurnitures { get; set; } = new();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,5 +20,8 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
|
|||||||
|
|
||||||
// Перечень заказов за указанный период для вывода/сохранения
|
// Перечень заказов за указанный период для вывода/сохранения
|
||||||
public List<ReportOrdersViewModel> Orders { get; set; } = new();
|
public List<ReportOrdersViewModel> Orders { get; set; } = new();
|
||||||
|
|
||||||
|
// Перечень заказов за весь период для вывода и сохранения
|
||||||
|
public List<ReportGroupedOrdersViewModel> GroupedOrders { get; set; } = new();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,10 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
|
|||||||
|
|
||||||
public string Title { get; set; } = string.Empty;
|
public string Title { get; set; } = string.Empty;
|
||||||
|
|
||||||
// Cписок заготовок для вывода и сохранения
|
// Список заготовок для вывода и сохранения
|
||||||
public List<FurnitureViewModel> Furnitures { get; set; } = new();
|
public List<FurnitureViewModel> Furnitures { get; set; } = new();
|
||||||
|
|
||||||
|
// Список магазинов для вывода и сохранения
|
||||||
|
public List<ShopViewModel> Shops { get; set; } = new();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,9 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
|
|||||||
// Набор текстов в абзаце (для случая, если в абзаце текст разных стилей)
|
// Набор текстов в абзаце (для случая, если в абзаце текст разных стилей)
|
||||||
public List<(string, WordTextProperties)> Texts { get; set; } = new();
|
public List<(string, WordTextProperties)> Texts { get; set; } = new();
|
||||||
|
|
||||||
// Cвойства параграфа, если они есть
|
// Свойства параграфа, если они есть
|
||||||
public WordTextProperties? TextProperties { get; set; }
|
public WordTextProperties? TextProperties { get; set; }
|
||||||
|
|
||||||
|
public List<List<(string, WordTextProperties)>> RowTexts { get; set; } = new();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -184,11 +184,8 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage.Implements
|
|||||||
};
|
};
|
||||||
|
|
||||||
var stylesheetExtensionList = new StylesheetExtensionList();
|
var stylesheetExtensionList = new StylesheetExtensionList();
|
||||||
var stylesheetExtension1 = new StylesheetExtension()
|
|
||||||
{
|
|
||||||
Uri = "{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}"
|
|
||||||
};
|
|
||||||
|
|
||||||
|
var stylesheetExtension1 = new StylesheetExtension() { Uri = "{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" };
|
||||||
stylesheetExtension1.AddNamespaceDeclaration("x14", "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main");
|
stylesheetExtension1.AddNamespaceDeclaration("x14", "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main");
|
||||||
stylesheetExtension1.Append(new SlicerStyles()
|
stylesheetExtension1.Append(new SlicerStyles()
|
||||||
{
|
{
|
||||||
@ -331,6 +328,7 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage.Implements
|
|||||||
};
|
};
|
||||||
|
|
||||||
row.InsertBefore(newCell, refCell);
|
row.InsertBefore(newCell, refCell);
|
||||||
|
|
||||||
cell = newCell;
|
cell = newCell;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,10 +73,7 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage.Implements
|
|||||||
|
|
||||||
if (!string.IsNullOrEmpty(paragraphProperties.Size))
|
if (!string.IsNullOrEmpty(paragraphProperties.Size))
|
||||||
{
|
{
|
||||||
paragraphMarkRunProperties.AppendChild(new FontSize
|
paragraphMarkRunProperties.AppendChild(new FontSize { Val = paragraphProperties.Size });
|
||||||
{
|
|
||||||
Val = paragraphProperties.Size
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
properties.AppendChild(paragraphMarkRunProperties);
|
properties.AppendChild(paragraphMarkRunProperties);
|
||||||
@ -127,11 +124,7 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage.Implements
|
|||||||
|
|
||||||
docRun.AppendChild(properties);
|
docRun.AppendChild(properties);
|
||||||
|
|
||||||
docRun.AppendChild(new Text
|
docRun.AppendChild(new Text { Text = run.Item1, Space = SpaceProcessingModeValues.Preserve });
|
||||||
{
|
|
||||||
Text = run.Item1,
|
|
||||||
Space = SpaceProcessingModeValues.Preserve
|
|
||||||
});
|
|
||||||
|
|
||||||
docParagraph.AppendChild(docRun);
|
docParagraph.AppendChild(docRun);
|
||||||
}
|
}
|
||||||
@ -155,5 +148,75 @@ namespace FurnitureAssemblyBusinessLogic.OfficePackage.Implements
|
|||||||
|
|
||||||
_wordDocument.Dispose();
|
_wordDocument.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void CreateTable(WordParagraph paragraph)
|
||||||
|
{
|
||||||
|
if (_docBody == null || paragraph == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Table table = new Table();
|
||||||
|
|
||||||
|
var tableProp = new TableProperties();
|
||||||
|
|
||||||
|
tableProp.AppendChild(new TableLayout { Type = TableLayoutValues.Fixed });
|
||||||
|
tableProp.AppendChild(new TableBorders(
|
||||||
|
new TopBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
|
||||||
|
new LeftBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
|
||||||
|
new RightBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
|
||||||
|
new BottomBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
|
||||||
|
new InsideHorizontalBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
|
||||||
|
new InsideVerticalBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 }
|
||||||
|
));
|
||||||
|
tableProp.AppendChild(new TableWidth { Type = TableWidthUnitValues.Auto });
|
||||||
|
|
||||||
|
table.AppendChild(tableProp);
|
||||||
|
|
||||||
|
TableGrid tableGrid = new TableGrid();
|
||||||
|
|
||||||
|
for (int j = 0; j < paragraph.RowTexts[0].Count; ++j)
|
||||||
|
{
|
||||||
|
tableGrid.AppendChild(new GridColumn() { Width = "3000" });
|
||||||
|
}
|
||||||
|
|
||||||
|
table.AppendChild(tableGrid);
|
||||||
|
|
||||||
|
for (int i = 0; i < paragraph.RowTexts.Count; ++i)
|
||||||
|
{
|
||||||
|
TableRow docRow = new TableRow();
|
||||||
|
|
||||||
|
for (int j = 0; j < paragraph.RowTexts[i].Count; ++j)
|
||||||
|
{
|
||||||
|
var docParagraph = new Paragraph();
|
||||||
|
|
||||||
|
docParagraph.AppendChild(CreateParagraphProperties(paragraph.RowTexts[i][j].Item2));
|
||||||
|
|
||||||
|
var docRun = new Run();
|
||||||
|
|
||||||
|
var properties = new RunProperties();
|
||||||
|
|
||||||
|
properties.AppendChild(new FontSize { Val = paragraph.RowTexts[i][j].Item2.Size });
|
||||||
|
|
||||||
|
if (paragraph.RowTexts[i][j].Item2.Bold)
|
||||||
|
{
|
||||||
|
properties.AppendChild(new Bold());
|
||||||
|
}
|
||||||
|
|
||||||
|
docRun.AppendChild(properties);
|
||||||
|
|
||||||
|
docRun.AppendChild(new Text { Text = paragraph.RowTexts[i][j].Item1, Space = SpaceProcessingModeValues.Preserve });
|
||||||
|
|
||||||
|
docParagraph.AppendChild(docRun);
|
||||||
|
TableCell docCell = new TableCell();
|
||||||
|
docCell.AppendChild(docParagraph);
|
||||||
|
docRow.AppendChild(docCell);
|
||||||
|
}
|
||||||
|
|
||||||
|
table.AppendChild(docRow);
|
||||||
|
}
|
||||||
|
|
||||||
|
_docBody.AppendChild(table);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,9 @@ namespace FurnitureAssemblyClientApp
|
|||||||
// Поле, хранящее клиента, которого необходимо авторизовать
|
// Поле, хранящее клиента, которого необходимо авторизовать
|
||||||
public static ClientViewModel? Client { get; set; } = null;
|
public static ClientViewModel? Client { get; set; } = null;
|
||||||
|
|
||||||
|
// Для пагинации
|
||||||
|
public static int CurrentPage { get; set; } = 0;
|
||||||
|
|
||||||
public static void Connect(IConfiguration configuration)
|
public static void Connect(IConfiguration configuration)
|
||||||
{
|
{
|
||||||
_client.BaseAddress = new Uri(configuration["IPAddress"]);
|
_client.BaseAddress = new Uri(configuration["IPAddress"]);
|
||||||
|
@ -3,6 +3,7 @@ using FurnitureAssemblyContracts.BindingModels;
|
|||||||
using FurnitureAssemblyContracts.ViewModels;
|
using FurnitureAssemblyContracts.ViewModels;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace FurnitureAssemblyClientApp.Controllers
|
namespace FurnitureAssemblyClientApp.Controllers
|
||||||
{
|
{
|
||||||
@ -174,7 +175,6 @@ namespace FurnitureAssemblyClientApp.Controllers
|
|||||||
|
|
||||||
// Для работы с письмами
|
// Для работы с письмами
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[HttpGet]
|
|
||||||
public IActionResult Mails()
|
public IActionResult Mails()
|
||||||
{
|
{
|
||||||
if (APIClient.Client == null)
|
if (APIClient.Client == null)
|
||||||
@ -184,5 +184,48 @@ namespace FurnitureAssemblyClientApp.Controllers
|
|||||||
|
|
||||||
return View(APIClient.GetRequest<List<MessageInfoViewModel>>($"api/client/getmessages?clientId={APIClient.Client.Id}"));
|
return View(APIClient.GetRequest<List<MessageInfoViewModel>>($"api/client/getmessages?clientId={APIClient.Client.Id}"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Возвращает кортеж с таблицой в html, текущей страницей писем, выключать ли кнопку пред. страницы, выключать ли кнопку след. страницы
|
||||||
|
[HttpGet]
|
||||||
|
public Tuple<string?, string?, bool, bool>? SwitchPage(bool isNext)
|
||||||
|
{
|
||||||
|
if (isNext)
|
||||||
|
{
|
||||||
|
APIClient.CurrentPage++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (APIClient.CurrentPage == 1)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
APIClient.CurrentPage--;
|
||||||
|
}
|
||||||
|
|
||||||
|
var res = APIClient.GetRequest<List<MessageInfoViewModel>>($"api/client/getmessages?clientId={APIClient.Client!.Id}&page={APIClient.CurrentPage}");
|
||||||
|
|
||||||
|
if (isNext && (res == null || res.Count == 0))
|
||||||
|
{
|
||||||
|
APIClient.CurrentPage--;
|
||||||
|
|
||||||
|
return Tuple.Create<string?, string?, bool, bool>(null, null, APIClient.CurrentPage != 1, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder htmlTable = new();
|
||||||
|
|
||||||
|
foreach (var mail in res)
|
||||||
|
{
|
||||||
|
htmlTable.Append("<tr>" +
|
||||||
|
$"<td>{mail.DateDelivery}</td>" +
|
||||||
|
$"<td>{mail.Subject}</td>" +
|
||||||
|
$"<td>{mail.Body}</td>" +
|
||||||
|
"<td>" + (mail.IsRead ? "Прочитано" : "Непрочитано") + "</td>" +
|
||||||
|
$"<td>{mail.Answer}</td>" +
|
||||||
|
"</tr>");
|
||||||
|
}
|
||||||
|
|
||||||
|
return Tuple.Create<string?, string?, bool, bool>(htmlTable.ToString(), APIClient.CurrentPage.ToString(), APIClient.CurrentPage != 1, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
@ -7,7 +7,6 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.16" />
|
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
"windowsAuthentication": false,
|
"windowsAuthentication": false,
|
||||||
"anonymousAuthentication": true,
|
"anonymousAuthentication": true,
|
||||||
"iisExpress": {
|
"iisExpress": {
|
||||||
"applicationUrl": "http://localhost:24381",
|
"applicationUrl": "http://localhost:44103",
|
||||||
"sslPort": 44337
|
"sslPort": 44394
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profiles": {
|
"profiles": {
|
||||||
@ -12,7 +12,7 @@
|
|||||||
"commandName": "Project",
|
"commandName": "Project",
|
||||||
"dotnetRunMessages": true,
|
"dotnetRunMessages": true,
|
||||||
"launchBrowser": true,
|
"launchBrowser": true,
|
||||||
"applicationUrl": "https://localhost:7046;http://localhost:5147",
|
"applicationUrl": "https://localhost:7218;http://localhost:5100",
|
||||||
"environmentVariables": {
|
"environmentVariables": {
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,11 @@
|
|||||||
@using FurnitureAssemblyContracts.ViewModels
|
@{
|
||||||
|
|
||||||
@model List<MessageInfoViewModel>
|
|
||||||
|
|
||||||
@{
|
|
||||||
ViewData["Title"] = "Mails";
|
ViewData["Title"] = "Mails";
|
||||||
}
|
}
|
||||||
|
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<h1 class="display-4">Заказы</h1>
|
<h1 class="display-4">Письма</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
@{
|
|
||||||
if (Model == null)
|
|
||||||
{
|
|
||||||
<h3 class="display-4">Авторизируйтесь</h3>
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@ -28,24 +18,67 @@
|
|||||||
<th>
|
<th>
|
||||||
Текст
|
Текст
|
||||||
</th>
|
</th>
|
||||||
|
<th>
|
||||||
|
Статус
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Ответ
|
||||||
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody id="mails-table-body">
|
||||||
@foreach (var item in Model)
|
|
||||||
{
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
@Html.DisplayFor(modelItem => item.DateDelivery)
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
@Html.DisplayFor(modelItem => item.Subject)
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
@Html.DisplayFor(modelItem => item.Body)
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
}
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
}
|
<ul class="pagination justify-content-center">
|
||||||
|
<li id="prev-page" class="page-item">
|
||||||
|
<a class="page-link" href="#" aria-label="Previous">
|
||||||
|
<span aria-hidden="true">«</span>
|
||||||
|
<span class="sr-only">Предыдущая</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="page-item">
|
||||||
|
<a id="current-page" class="page-link"></a>
|
||||||
|
</li>
|
||||||
|
<li id="next-page" class="page-item">
|
||||||
|
<a class="page-link" href="#" aria-label="Next">
|
||||||
|
<span aria-hidden="true">»</span>
|
||||||
|
<span class="sr-only">Следующая</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function onClicked(isNext) {
|
||||||
|
$.ajax({
|
||||||
|
method: "GET",
|
||||||
|
url: "/Home/SwitchPage",
|
||||||
|
data: { isNext: isNext },
|
||||||
|
success: function (result) {
|
||||||
|
if (result != null) {
|
||||||
|
|
||||||
|
if (result.item1 != null && result.item2 != null) {
|
||||||
|
$("#mails-table-body").html(result.item1);
|
||||||
|
$("#current-page").text(result.item2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result.item3)
|
||||||
|
$("#prev-page").removeClass("page-item disabled");
|
||||||
|
else
|
||||||
|
$("#prev-page").addClass("page-item disabled");
|
||||||
|
|
||||||
|
if (result.item4)
|
||||||
|
$("#next-page").removeClass("page-item disabled");
|
||||||
|
else
|
||||||
|
$("#next-page").addClass("page-item disabled");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Чтобы в первый раз загрузить данные и попасть на первую страницу
|
||||||
|
onClicked(true);
|
||||||
|
$("#prev-page").on('click', () => onClicked(false));
|
||||||
|
$("#next-page").on('click', () => onClicked(true));
|
||||||
|
</script>
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
<title>@ViewData["Title"] - FurnitureAssemblyClientApp</title>
|
<title>@ViewData["Title"] - FurnitureAssemblyClientApp</title>
|
||||||
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
|
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
|
||||||
<link rel="stylesheet" href="~/css/site.css" />
|
<link rel="stylesheet" href="~/css/site.css" />
|
||||||
|
<link rel="stylesheet" href="~/FurnitureAssemblyClientApp.styles.css" asp-append-version="true" />
|
||||||
<script src="~/lib/jquery/dist/jquery.min.js"></script>
|
<script src="~/lib/jquery/dist/jquery.min.js"></script>
|
||||||
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
|
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
|
||||||
<script src="~/js/site.js" asp-append-version="true"></script>
|
<script src="~/js/site.js" asp-append-version="true"></script>
|
||||||
@ -26,10 +27,10 @@
|
|||||||
<a class="nav-link text-dark" asparea="" asp-controller="Home" asp-action="Index">Заказы</a>
|
<a class="nav-link text-dark" asparea="" asp-controller="Home" asp-action="Index">Заказы</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link text-dark" asparea="" asp-controller="Home" asp-action="Privacy">Личные данные</a>
|
<a class="nav-link text-dark" asparea="" asp-controller="Home" asp-action="Mails">Письма</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link text-dark" asparea="" asp-controller="Home" asp-action="Mails">Письма</a>
|
<a class="nav-link text-dark" asparea="" asp-controller="Home" asp-action="Privacy">Личные данные</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link text-dark" asparea="" asp-controller="Home" asp-action="Enter">Вход</a>
|
<a class="nav-link text-dark" asparea="" asp-controller="Home" asp-action="Enter">Вход</a>
|
||||||
|
@ -11,13 +11,14 @@ namespace FurnitureAssemblyContracts.Attributes
|
|||||||
public class ColumnAttribute : Attribute
|
public class ColumnAttribute : Attribute
|
||||||
{
|
{
|
||||||
public ColumnAttribute(string title = "", bool visible = true, int width = 0,
|
public ColumnAttribute(string title = "", bool visible = true, int width = 0,
|
||||||
GridViewAutoSize gridViewAutoSize = GridViewAutoSize.None, bool isUseAutoSize = false)
|
GridViewAutoSize gridViewAutoSize = GridViewAutoSize.None, bool isUseAutoSize = false, string format = "")
|
||||||
{
|
{
|
||||||
Title = title;
|
Title = title;
|
||||||
Visible = visible;
|
Visible = visible;
|
||||||
Width = width;
|
Width = width;
|
||||||
GridViewAutoSize = gridViewAutoSize;
|
GridViewAutoSize = gridViewAutoSize;
|
||||||
IsUseAutoSize = isUseAutoSize;
|
IsUseAutoSize = isUseAutoSize;
|
||||||
|
Format = format;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Title { get; private set; }
|
public string Title { get; private set; }
|
||||||
@ -29,5 +30,7 @@ namespace FurnitureAssemblyContracts.Attributes
|
|||||||
public GridViewAutoSize GridViewAutoSize { get; private set; }
|
public GridViewAutoSize GridViewAutoSize { get; private set; }
|
||||||
|
|
||||||
public bool IsUseAutoSize { get; private set; }
|
public bool IsUseAutoSize { get; private set; }
|
||||||
|
|
||||||
|
public string Format { get; private set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,5 +23,9 @@ namespace FurnitureAssemblyContracts.BindingModels
|
|||||||
public string Subject { get; set; } = string.Empty;
|
public string Subject { get; set; } = string.Empty;
|
||||||
|
|
||||||
public string Body { get; set; } = string.Empty;
|
public string Body { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public bool IsRead { get; set; } = false;
|
||||||
|
|
||||||
|
public string? Answer { get; set; } = string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
using FurnitureAssemblyDataModels.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyContracts.BindingModels
|
||||||
|
{
|
||||||
|
// Реализация сущности "Магазин"
|
||||||
|
public class ShopBindingModel : IShopModel
|
||||||
|
{
|
||||||
|
public string ShopName { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public string Address { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public DateTime DateOpen { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
|
public Dictionary<int, (IFurnitureModel, int)> ShopFurnitures { get; set; } = new();
|
||||||
|
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
public int MaxCountFurnitures { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -14,6 +14,10 @@ namespace FurnitureAssemblyContracts.BusinessLogicsContracts
|
|||||||
{
|
{
|
||||||
List<MessageInfoViewModel>? ReadList(MessageInfoSearchModel? model);
|
List<MessageInfoViewModel>? ReadList(MessageInfoSearchModel? model);
|
||||||
|
|
||||||
|
MessageInfoViewModel? ReadElement(MessageInfoSearchModel model);
|
||||||
|
|
||||||
bool Create(MessageInfoBindingModel model);
|
bool Create(MessageInfoBindingModel model);
|
||||||
|
|
||||||
|
bool Update(MessageInfoBindingModel model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,16 +13,31 @@ namespace FurnitureAssemblyContracts.BusinessLogicsContracts
|
|||||||
// Получение списка заготовок с указанием, в каких изделиях используются
|
// Получение списка заготовок с указанием, в каких изделиях используются
|
||||||
List<ReportFurnitureWorkPieceViewModel> GetFurnitureWorkPiece();
|
List<ReportFurnitureWorkPieceViewModel> GetFurnitureWorkPiece();
|
||||||
|
|
||||||
|
//Получение списка мороженых с указанием, в каких магазинах в наличии
|
||||||
|
List<ReportShopFurnituresViewModel> GetShopFurnitures();
|
||||||
|
|
||||||
// Получение списка заказов за определённый период
|
// Получение списка заказов за определённый период
|
||||||
List<ReportOrdersViewModel> GetOrders(ReportBindingModel model);
|
List<ReportOrdersViewModel> GetOrders(ReportBindingModel model);
|
||||||
|
|
||||||
|
//Получение списка заказов за весь период
|
||||||
|
List<ReportGroupedOrdersViewModel> GetGroupedOrders();
|
||||||
|
|
||||||
// Сохранение изделий в файл-Word
|
// Сохранение изделий в файл-Word
|
||||||
void SaveFurnituresToWordFile(ReportBindingModel model);
|
void SaveFurnituresToWordFile(ReportBindingModel model);
|
||||||
|
|
||||||
|
//Сохранение магазинов в виде таблицы в файл-Word
|
||||||
|
void SaveShopsToWordFile(ReportBindingModel model);
|
||||||
|
|
||||||
// Сохранение заготовок с указанием изделий в файл-Excel
|
// Сохранение заготовок с указанием изделий в файл-Excel
|
||||||
void SaveFurnitureWorkPieceToExcelFile(ReportBindingModel model);
|
void SaveFurnitureWorkPieceToExcelFile(ReportBindingModel model);
|
||||||
|
|
||||||
|
//Сохранение магазинов с указанием мороженых в файл-Excel
|
||||||
|
void SaveShopFurnituresToExcelFile(ReportBindingModel model);
|
||||||
|
|
||||||
// Сохранение заказов в файл-Pdf
|
// Сохранение заказов в файл-Pdf
|
||||||
void SaveOrdersToPdfFile(ReportBindingModel model);
|
void SaveOrdersToPdfFile(ReportBindingModel model);
|
||||||
|
|
||||||
|
//Сохранение заказов за весь период в файл-Pdf
|
||||||
|
void SaveGroupedOrdersToPdfFile(ReportBindingModel model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
using FurnitureAssemblyContracts.BindingModels;
|
||||||
|
using FurnitureAssemblyContracts.SearchModels;
|
||||||
|
using FurnitureAssemblyContracts.ViewModels;
|
||||||
|
using FurnitureAssemblyDataModels.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyContracts.BusinessLogicsContracts
|
||||||
|
{
|
||||||
|
// Бизнес-логика для магазина
|
||||||
|
public interface IShopLogic
|
||||||
|
{
|
||||||
|
List<ShopViewModel>? ReadList(ShopSearchModel? model);
|
||||||
|
|
||||||
|
ShopViewModel? ReadElement(ShopSearchModel model);
|
||||||
|
|
||||||
|
bool Create(ShopBindingModel model);
|
||||||
|
|
||||||
|
bool Update(ShopBindingModel model);
|
||||||
|
|
||||||
|
bool Delete(ShopBindingModel model);
|
||||||
|
|
||||||
|
bool AddFurniture(ShopSearchModel model, IFurnitureModel furniture, int count);
|
||||||
|
|
||||||
|
bool SellFurnitures(IFurnitureModel model, int count);
|
||||||
|
|
||||||
|
bool AddFurnitures(IFurnitureModel model, int count);
|
||||||
|
}
|
||||||
|
}
|
@ -9,7 +9,7 @@ namespace FurnitureAssemblyContracts.BusinessLogicsContracts
|
|||||||
// Интерфейс для класса, имитирующего работу
|
// Интерфейс для класса, имитирующего работу
|
||||||
public interface IWorkProcess
|
public interface IWorkProcess
|
||||||
{
|
{
|
||||||
// Запуск работы
|
// Запуск работ
|
||||||
void DoWork(IImplementerLogic implementerLogic, IOrderLogic orderLogic);
|
void DoWork(IImplementerLogic implementerLogic, IOrderLogic orderLogic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace FurnitureAssemblyContracts.DI
|
namespace FurnitureAssemblyContracts.DI
|
||||||
{
|
{
|
||||||
// Менеджер для работы с зависимостями
|
/// Менеджер для работы с зависимостями
|
||||||
public class DependencyManager
|
public class DependencyManager
|
||||||
{
|
{
|
||||||
private readonly IDependencyContainer _dependencyManager;
|
private readonly IDependencyContainer _dependencyManager;
|
||||||
@ -31,7 +31,7 @@ namespace FurnitureAssemblyContracts.DI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Инициализация библиотек, в которых идут установки зависимостей
|
// Иницализация библиотек, в которых идут установки зависомстей
|
||||||
public static void InitDependency()
|
public static void InitDependency()
|
||||||
{
|
{
|
||||||
var ext = ServiceProviderLoader.GetImplementationExtensions();
|
var ext = ServiceProviderLoader.GetImplementationExtensions();
|
||||||
@ -41,8 +41,18 @@ namespace FurnitureAssemblyContracts.DI
|
|||||||
throw new ArgumentNullException("Отсутствуют компоненты для загрузки зависимостей по модулям");
|
throw new ArgumentNullException("Отсутствуют компоненты для загрузки зависимостей по модулям");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Регистрируем зависимости
|
// Регистрируем зависимости хранилищ
|
||||||
ext.RegisterServices();
|
ext.RegisterServices();
|
||||||
|
|
||||||
|
var extBusiness = ServiceProviderLoader.GetBusinessLogicImplementationExtensions();
|
||||||
|
|
||||||
|
if (extBusiness == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("Отсутствуют компоненты для загрузки зависимостей по модулям");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Регистрируем зависимости бизнес-логики
|
||||||
|
extBusiness.RegisterServices();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Регистрация логгера
|
// Регистрация логгера
|
||||||
@ -54,7 +64,8 @@ namespace FurnitureAssemblyContracts.DI
|
|||||||
// Добавление зависимости
|
// Добавление зависимости
|
||||||
public void RegisterType<T>(bool isSingle = false) where T : class => _dependencyManager.RegisterType<T>(isSingle);
|
public void RegisterType<T>(bool isSingle = false) where T : class => _dependencyManager.RegisterType<T>(isSingle);
|
||||||
|
|
||||||
// Получение класса со всеми зависимостями
|
// Получение класса со всеми зависмостями
|
||||||
public T Resolve<T>() => _dependencyManager.Resolve<T>();
|
public T Resolve<T>() => _dependencyManager.Resolve<T>();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyContracts.DI
|
||||||
|
{
|
||||||
|
public interface IBusinessLogicImplementationExtension
|
||||||
|
{
|
||||||
|
public int Priority { get; }
|
||||||
|
|
||||||
|
// Регистрация сервисов
|
||||||
|
public void RegisterServices();
|
||||||
|
}
|
||||||
|
}
|
@ -10,17 +10,16 @@ namespace FurnitureAssemblyContracts.DI
|
|||||||
// Интерфейс установки зависимости между элементами
|
// Интерфейс установки зависимости между элементами
|
||||||
public interface IDependencyContainer
|
public interface IDependencyContainer
|
||||||
{
|
{
|
||||||
// Регистрация логгера
|
//Регистрация логгера
|
||||||
void AddLogging(Action<ILoggingBuilder> configure);
|
void AddLogging(Action<ILoggingBuilder> configure);
|
||||||
|
|
||||||
// Добавление зависимости
|
//Добавление зависимости
|
||||||
void RegisterType<T, U>(bool isSingle) where U : class, T where T :
|
void RegisterType<T, U>(bool isSingle) where U : class, T where T : class;
|
||||||
class;
|
|
||||||
|
|
||||||
// Добавление зависимости
|
//Добавление зависимости
|
||||||
void RegisterType<T>(bool isSingle) where T : class;
|
void RegisterType<T>(bool isSingle) where T : class;
|
||||||
|
|
||||||
// Получение класса со всеми зависимостями
|
//Получение класса со всеми зависимостями
|
||||||
T Resolve<T>();
|
T Resolve<T>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,6 @@ namespace FurnitureAssemblyContracts.DI
|
|||||||
{
|
{
|
||||||
_serviceCollection.AddTransient<T, U>();
|
_serviceCollection.AddTransient<T, U>();
|
||||||
}
|
}
|
||||||
|
|
||||||
_serviceProvider = null;
|
_serviceProvider = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,7 +47,6 @@ namespace FurnitureAssemblyContracts.DI
|
|||||||
{
|
{
|
||||||
_serviceCollection.AddTransient<T>();
|
_serviceCollection.AddTransient<T>();
|
||||||
}
|
}
|
||||||
|
|
||||||
_serviceProvider = null;
|
_serviceProvider = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,7 +56,6 @@ namespace FurnitureAssemblyContracts.DI
|
|||||||
{
|
{
|
||||||
_serviceProvider = _serviceCollection.BuildServiceProvider();
|
_serviceProvider = _serviceCollection.BuildServiceProvider();
|
||||||
}
|
}
|
||||||
|
|
||||||
return _serviceProvider.GetService<T>()!;
|
return _serviceProvider.GetService<T>()!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,5 +57,51 @@ namespace FurnitureAssemblyContracts.DI
|
|||||||
|
|
||||||
return $"{directory?.FullName}\\ImplementationExtensions";
|
return $"{directory?.FullName}\\ImplementationExtensions";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static IBusinessLogicImplementationExtension? GetBusinessLogicImplementationExtensions()
|
||||||
|
{
|
||||||
|
IBusinessLogicImplementationExtension? source = null;
|
||||||
|
|
||||||
|
var files = Directory.GetFiles(TryGetBusinessLogicImplementationExtensionsFolder(), "*.dll", SearchOption.AllDirectories);
|
||||||
|
|
||||||
|
foreach (var file in files.Distinct())
|
||||||
|
{
|
||||||
|
Assembly asm = Assembly.LoadFrom(file);
|
||||||
|
|
||||||
|
foreach (var t in asm.GetExportedTypes())
|
||||||
|
{
|
||||||
|
if (t.IsClass && typeof(IBusinessLogicImplementationExtension).IsAssignableFrom(t))
|
||||||
|
{
|
||||||
|
if (source == null)
|
||||||
|
{
|
||||||
|
source = (IBusinessLogicImplementationExtension)Activator.CreateInstance(t)!;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var newSource = (IBusinessLogicImplementationExtension)Activator.CreateInstance(t)!;
|
||||||
|
|
||||||
|
if (newSource.Priority > source.Priority)
|
||||||
|
{
|
||||||
|
source = newSource;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string TryGetBusinessLogicImplementationExtensionsFolder()
|
||||||
|
{
|
||||||
|
var directory = new DirectoryInfo(Directory.GetCurrentDirectory());
|
||||||
|
|
||||||
|
while (directory != null && !directory.GetDirectories("BusinessLogicImplementationExtensions", SearchOption.AllDirectories).Any(x => x.Name == "BusinessLogicImplementationExtensions"))
|
||||||
|
{
|
||||||
|
directory = directory.Parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $"{directory?.FullName}\\BusinessLogicImplementationExtensions";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ namespace FurnitureAssemblyContracts.DI
|
|||||||
public void RegisterType<T>(bool isSingle) where T : class
|
public void RegisterType<T>(bool isSingle) where T : class
|
||||||
{
|
{
|
||||||
_container.RegisterType<T>(isSingle ? TypeLifetime.Singleton : TypeLifetime.Transient);
|
_container.RegisterType<T>(isSingle ? TypeLifetime.Singleton : TypeLifetime.Transient);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public T Resolve<T>()
|
public T Resolve<T>()
|
||||||
|
@ -8,8 +8,8 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
|
||||||
<PackageReference Include="Unity" Version="5.10.0" />
|
<PackageReference Include="Unity" Version="5.11.10" />
|
||||||
<PackageReference Include="Unity.Microsoft.Logging" Version="5.10.0" />
|
<PackageReference Include="Unity.Microsoft.Logging" Version="5.11.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -13,6 +13,8 @@ namespace FurnitureAssemblyContracts.SearchModels
|
|||||||
|
|
||||||
public string? Email { get; set; }
|
public string? Email { get; set; }
|
||||||
|
|
||||||
|
public string? ClientFIO { get; set; }
|
||||||
|
|
||||||
public string? Password { get; set; }
|
public string? Password { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,5 +12,9 @@ namespace FurnitureAssemblyContracts.SearchModels
|
|||||||
public string? MessageId { get; set; }
|
public string? MessageId { get; set; }
|
||||||
|
|
||||||
public int? ClientId { get; set; }
|
public int? ClientId { get; set; }
|
||||||
|
|
||||||
|
public int? Page { get; set; }
|
||||||
|
|
||||||
|
public int? PageSize { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyContracts.SearchModels
|
||||||
|
{
|
||||||
|
// Для поиска сущности "Магазин"
|
||||||
|
public class ShopSearchModel
|
||||||
|
{
|
||||||
|
// Для поиска по идентификатору
|
||||||
|
public int? Id { get; set; }
|
||||||
|
|
||||||
|
// Для поиска по названию
|
||||||
|
public string? ShopName { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -19,5 +19,7 @@ namespace FurnitureAssemblyContracts.StoragesContracts
|
|||||||
MessageInfoViewModel? GetElement(MessageInfoSearchModel model);
|
MessageInfoViewModel? GetElement(MessageInfoSearchModel model);
|
||||||
|
|
||||||
MessageInfoViewModel? Insert(MessageInfoBindingModel model);
|
MessageInfoViewModel? Insert(MessageInfoBindingModel model);
|
||||||
|
|
||||||
|
MessageInfoViewModel? Update(MessageInfoBindingModel model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,30 @@
|
|||||||
|
using FurnitureAssemblyContracts.BindingModels;
|
||||||
|
using FurnitureAssemblyContracts.SearchModels;
|
||||||
|
using FurnitureAssemblyContracts.ViewModels;
|
||||||
|
using FurnitureAssemblyDataModels.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyContracts.StoragesContracts
|
||||||
|
{
|
||||||
|
// Класс для хранилища магазинов
|
||||||
|
public interface IShopStorage
|
||||||
|
{
|
||||||
|
List<ShopViewModel> GetFullList();
|
||||||
|
|
||||||
|
List<ShopViewModel> GetFilteredList(ShopSearchModel model);
|
||||||
|
|
||||||
|
ShopViewModel? GetElement(ShopSearchModel model);
|
||||||
|
|
||||||
|
ShopViewModel? Insert(ShopBindingModel model);
|
||||||
|
|
||||||
|
ShopViewModel? Update(ShopBindingModel model);
|
||||||
|
|
||||||
|
ShopViewModel? Delete(ShopBindingModel model);
|
||||||
|
|
||||||
|
bool SellFurnitures(IFurnitureModel model, int count);
|
||||||
|
}
|
||||||
|
}
|
@ -18,7 +18,7 @@ namespace FurnitureAssemblyContracts.ViewModels
|
|||||||
[Column(title: "ФИО клиента", width: 150)]
|
[Column(title: "ФИО клиента", width: 150)]
|
||||||
public string ClientFIO { get; set; } = string.Empty;
|
public string ClientFIO { get; set; } = string.Empty;
|
||||||
|
|
||||||
[Column(title: "Логин (эл. почта)", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
|
[Column(title: "Логин (электронная почта)", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
|
||||||
public string Email { get; set; } = string.Empty;
|
public string Email { get; set; } = string.Empty;
|
||||||
|
|
||||||
[Column(title: "Пароль", width: 150)]
|
[Column(title: "Пароль", width: 150)]
|
||||||
|
@ -18,7 +18,7 @@ namespace FurnitureAssemblyContracts.ViewModels
|
|||||||
[Column(title: "Название изделия", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
|
[Column(title: "Название изделия", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
|
||||||
public string FurnitureName { get; set; } = string.Empty;
|
public string FurnitureName { get; set; } = string.Empty;
|
||||||
|
|
||||||
[Column(title: "Цена", width: 150)]
|
[Column(title: "Цена", width: 150, format: "0.00")]
|
||||||
public double Price { get; set; }
|
public double Price { get; set; }
|
||||||
|
|
||||||
[Column(visible: false)]
|
[Column(visible: false)]
|
||||||
|
@ -24,13 +24,19 @@ namespace FurnitureAssemblyContracts.ViewModels
|
|||||||
[Column(title: "Отправитель", width: 150)]
|
[Column(title: "Отправитель", width: 150)]
|
||||||
public string SenderName { get; set; } = string.Empty;
|
public string SenderName { get; set; } = string.Empty;
|
||||||
|
|
||||||
[Column(title: "Дата отправки", width: 150)]
|
[Column(title: "Дата отправки", width: 150, format: "D")]
|
||||||
public DateTime DateDelivery { get; set; } = DateTime.Now;
|
public DateTime DateDelivery { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
[Column(title: "Заголовок", width: 150)]
|
[Column(title: "Заголовок", width: 150)]
|
||||||
public string Subject { get; set; } = string.Empty;
|
public string Subject { get; set; } = string.Empty;
|
||||||
|
|
||||||
[Column(title: "Текст", width: 150)]
|
[DisplayName("Текст")]
|
||||||
public string Body { get; set; } = string.Empty;
|
public string Body { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
[DisplayName("Прочитано")]
|
||||||
|
public bool IsRead { get; set; } = false;
|
||||||
|
|
||||||
|
[DisplayName("Ответ")]
|
||||||
|
public string? Answer { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,16 +37,16 @@ namespace FurnitureAssemblyContracts.ViewModels
|
|||||||
[Column(title: "Количество", width: 150)]
|
[Column(title: "Количество", width: 150)]
|
||||||
public int Count { get; set; }
|
public int Count { get; set; }
|
||||||
|
|
||||||
[Column(title: "Сумма", width: 150)]
|
[Column(title: "Сумма", width: 150, format: "0.00")]
|
||||||
public double Sum { get; set; }
|
public double Sum { get; set; }
|
||||||
|
|
||||||
[Column(title: "Статус", width: 150)]
|
[Column(title: "Статус", width: 150)]
|
||||||
public OrderStatus Status { get; set; } = OrderStatus.Неизвестен;
|
public OrderStatus Status { get; set; } = OrderStatus.Неизвестен;
|
||||||
|
|
||||||
[Column(title: "Дата создания", width: 150)]
|
[Column(title: "Дата создания", width: 150, format: "D")]
|
||||||
public DateTime DateCreate { get; set; } = DateTime.Now;
|
public DateTime DateCreate { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
[Column(title: "Дата выполнения", width: 150)]
|
[Column(title: "Дата выполнения", width: 150, format: "f")]
|
||||||
public DateTime? DateImplement { get; set; }
|
public DateTime? DateImplement { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyContracts.ViewModels
|
||||||
|
{
|
||||||
|
public class ReportGroupedOrdersViewModel
|
||||||
|
{
|
||||||
|
public DateTime DateCreate { get; set; }
|
||||||
|
|
||||||
|
public int Count { get; set; }
|
||||||
|
|
||||||
|
public double Sum { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyContracts.ViewModels
|
||||||
|
{
|
||||||
|
public class ReportShopFurnituresViewModel
|
||||||
|
{
|
||||||
|
public string ShopName { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public int TotalCount { get; set; }
|
||||||
|
|
||||||
|
public List<(string Furniture, int Count)> Furnitures { get; set; } = new();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
using FurnitureAssemblyContracts.Attributes;
|
||||||
|
using FurnitureAssemblyDataModels.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyContracts.ViewModels
|
||||||
|
{
|
||||||
|
// Класс для отображения пользователю информации о магазинах
|
||||||
|
public class ShopViewModel
|
||||||
|
{
|
||||||
|
[Column(visible: false)]
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[Column(title: "Название магазина", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
|
||||||
|
public string ShopName { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
[Column(title: "Адрес магазина", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
|
||||||
|
public string Address { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
[Column(title: "Дата открытия", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true, format: "f")]
|
||||||
|
public DateTime DateOpen { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
|
[Column(visible: false)]
|
||||||
|
public Dictionary<int, (IFurnitureModel, int)> ShopFurnitures { get; set; } = new();
|
||||||
|
|
||||||
|
[Column(title: "Вместимость магазина", gridViewAutoSize: GridViewAutoSize.DisplayedCells, isUseAutoSize: true)]
|
||||||
|
public int MaxCountFurnitures { get; set; }
|
||||||
|
|
||||||
|
[Column(visible: false)]
|
||||||
|
public List<Tuple<string, int>>? FurnitureCount { get; set; } = new();
|
||||||
|
}
|
||||||
|
}
|
@ -15,7 +15,7 @@ namespace FurnitureAssemblyContracts.ViewModels
|
|||||||
[Column(visible: false)]
|
[Column(visible: false)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
[Column(title: "Название заготовки", width: 150)]
|
[Column(title: "Название заготовки", width: 150, format: "0.00")]
|
||||||
public string WorkPieceName { get; set; } = string.Empty;
|
public string WorkPieceName { get; set; } = string.Empty;
|
||||||
|
|
||||||
[Column(title: "Цена", width: 150)]
|
[Column(title: "Цена", width: 150)]
|
||||||
|
@ -17,6 +17,8 @@ namespace FurnitureAssemblyDataModels.Enums
|
|||||||
|
|
||||||
Готов = 2,
|
Готов = 2,
|
||||||
|
|
||||||
Выдан = 3
|
Выдан = 3,
|
||||||
|
|
||||||
|
Ожидание = 4
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -20,5 +20,9 @@ namespace FurnitureAssemblyDataModels.Models
|
|||||||
string Subject { get; }
|
string Subject { get; }
|
||||||
|
|
||||||
string Body { get; }
|
string Body { get; }
|
||||||
|
|
||||||
|
public bool IsRead { get; }
|
||||||
|
|
||||||
|
public string Answer { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyDataModels.Models
|
||||||
|
{
|
||||||
|
// Интерфейс сущности "Магазин"
|
||||||
|
public interface IShopModel : IId
|
||||||
|
{
|
||||||
|
// Название магазина
|
||||||
|
string ShopName { get; }
|
||||||
|
|
||||||
|
// Адрес магазина
|
||||||
|
string Address { get; }
|
||||||
|
|
||||||
|
// Дата открытия магазина
|
||||||
|
DateTime DateOpen { get; }
|
||||||
|
|
||||||
|
//максимальное кол-во изделий в магазине
|
||||||
|
int MaxCountFurnitures { get; }
|
||||||
|
|
||||||
|
// Изделия в магазине
|
||||||
|
Dictionary<int, (IFurnitureModel, int)> ShopFurnitures { get; }
|
||||||
|
}
|
||||||
|
}
|
@ -27,6 +27,8 @@ namespace FurnitureAssemblyDatabaseImplement
|
|||||||
|
|
||||||
DependencyManager.Instance.RegisterType<IFurnitureStorage, FurnitureStorage>();
|
DependencyManager.Instance.RegisterType<IFurnitureStorage, FurnitureStorage>();
|
||||||
|
|
||||||
|
DependencyManager.Instance.RegisterType<IShopStorage, ShopStorage>();
|
||||||
|
|
||||||
DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
|
DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ namespace FurnitureAssemblyDatabaseImplement
|
|||||||
{
|
{
|
||||||
if (optionsBuilder.IsConfigured == false)
|
if (optionsBuilder.IsConfigured == false)
|
||||||
{
|
{
|
||||||
optionsBuilder.UseSqlServer(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=FurnitureAssemblyDatabase;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True");
|
optionsBuilder.UseSqlServer(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=FurnitureAssemblyDatabaseFull;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True");
|
||||||
}
|
}
|
||||||
|
|
||||||
base.OnConfiguring(optionsBuilder);
|
base.OnConfiguring(optionsBuilder);
|
||||||
@ -28,6 +28,10 @@ namespace FurnitureAssemblyDatabaseImplement
|
|||||||
|
|
||||||
public virtual DbSet<Order> Orders { set; get; }
|
public virtual DbSet<Order> Orders { set; get; }
|
||||||
|
|
||||||
|
public virtual DbSet<Shop> Shops { set; get; }
|
||||||
|
|
||||||
|
public virtual DbSet<ShopFurniture> ShopFurnitures { get; set; }
|
||||||
|
|
||||||
public virtual DbSet<Client> Clients { set; get; }
|
public virtual DbSet<Client> Clients { set; get; }
|
||||||
|
|
||||||
public virtual DbSet<Implementer> Implementers { set; get; }
|
public virtual DbSet<Implementer> Implementers { set; get; }
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
@ -20,10 +20,6 @@
|
|||||||
<ProjectReference Include="..\FurnitureAssemblyDataModels\FurnitureAssemblyDataModels.csproj" />
|
<ProjectReference Include="..\FurnitureAssemblyDataModels\FurnitureAssemblyDataModels.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Folder Include="Migrations\" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
<Exec Command="copy /Y "$(TargetDir)*.dll" "$(SolutionDir)ImplementationExtensions\*.dll"" />
|
<Exec Command="copy /Y "$(TargetDir)*.dll" "$(SolutionDir)ImplementationExtensions\*.dll"" />
|
||||||
</Target>
|
</Target>
|
||||||
|
@ -19,34 +19,18 @@ namespace FurnitureAssemblyDatabaseImplement.Implements
|
|||||||
using var context = new FurnitureAssemblyDatabase();
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
if (model.Id.HasValue)
|
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.ImplementerFIO != null)
|
|
||||||
{
|
|
||||||
using var context = new FurnitureAssemblyDatabase();
|
|
||||||
|
|
||||||
return context.Implementers
|
return context.Implementers
|
||||||
.Where(x => x.ImplementerFIO.Contains(model.ImplementerFIO))
|
.Include(x => x.Orders)
|
||||||
.Select(x => x.GetViewModel)
|
.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id)
|
||||||
.ToList();
|
?.GetViewModel;
|
||||||
|
}
|
||||||
|
else if (!string.IsNullOrEmpty(model.ImplementerFIO) && !string.IsNullOrEmpty(model.Password))
|
||||||
|
{
|
||||||
|
return context.Implementers
|
||||||
|
.Include(x => x.Orders)
|
||||||
|
.FirstOrDefault(x => (x.ImplementerFIO == model.ImplementerFIO && x.Password == model.Password))
|
||||||
|
?.GetViewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new();
|
return new();
|
||||||
@ -56,52 +40,92 @@ namespace FurnitureAssemblyDatabaseImplement.Implements
|
|||||||
{
|
{
|
||||||
using var context = new FurnitureAssemblyDatabase();
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
return context.Implementers.Select(x => x.GetViewModel).ToList();
|
return context.Implementers
|
||||||
|
.Include(x => x.Orders)
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ImplementerViewModel> GetFilteredList(ImplementerSearchModel model)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(model.ImplementerFIO))
|
||||||
|
{
|
||||||
|
return new();
|
||||||
|
}
|
||||||
|
|
||||||
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
|
return context.Implementers
|
||||||
|
.Include(x => x.Orders)
|
||||||
|
.Where(x => x.ImplementerFIO.Contains(model.ImplementerFIO))
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImplementerViewModel? Insert(ImplementerBindingModel model)
|
public ImplementerViewModel? Insert(ImplementerBindingModel model)
|
||||||
{
|
{
|
||||||
using var context = new FurnitureAssemblyDatabase();
|
var newImplementer = Implementer.Create(model);
|
||||||
|
|
||||||
var res = Implementer.Create(model);
|
if (newImplementer == null)
|
||||||
|
|
||||||
if (res != null)
|
|
||||||
{
|
{
|
||||||
context.Implementers.Add(res);
|
return null;
|
||||||
context.SaveChanges();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return res?.GetViewModel;
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
|
context.Implementers.Add(newImplementer);
|
||||||
|
context.SaveChanges();
|
||||||
|
|
||||||
|
return context.Implementers
|
||||||
|
.Include(x => x.Orders)
|
||||||
|
.FirstOrDefault(x => x.Id == newImplementer.Id)
|
||||||
|
?.GetViewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImplementerViewModel? Update(ImplementerBindingModel model)
|
public ImplementerViewModel? Update(ImplementerBindingModel model)
|
||||||
{
|
{
|
||||||
using var context = new FurnitureAssemblyDatabase();
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
var res = context.Implementers.FirstOrDefault(x => x.Id == model.Id);
|
var order = context.Implementers
|
||||||
|
.Include(x => x.Orders)
|
||||||
|
.FirstOrDefault(x => x.Id == model.Id);
|
||||||
|
|
||||||
if (res != null)
|
if (order == null)
|
||||||
{
|
{
|
||||||
res.Update(model);
|
return null;
|
||||||
context.SaveChanges();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return res?.GetViewModel;
|
order.Update(model);
|
||||||
|
context.SaveChanges();
|
||||||
|
|
||||||
|
return context.Implementers
|
||||||
|
.Include(x => x.Orders)
|
||||||
|
.FirstOrDefault(x => x.Id == model.Id)
|
||||||
|
?.GetViewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImplementerViewModel? Delete(ImplementerBindingModel model)
|
public ImplementerViewModel? Delete(ImplementerBindingModel model)
|
||||||
{
|
{
|
||||||
using var context = new FurnitureAssemblyDatabase();
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
var res = context.Implementers.FirstOrDefault(x => x.Id == model.Id);
|
var element = context.Implementers
|
||||||
|
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||||
|
|
||||||
if (res != null)
|
if (element != null)
|
||||||
{
|
{
|
||||||
context.Implementers.Remove(res);
|
// для отображения КОРРЕКТНОЙ ViewModel-и
|
||||||
|
var deletedElement = context.Implementers
|
||||||
|
.Include(x => x.Orders)
|
||||||
|
.FirstOrDefault(x => x.Id == model.Id)
|
||||||
|
?.GetViewModel;
|
||||||
|
|
||||||
|
context.Implementers.Remove(element);
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
|
|
||||||
|
return deletedElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
return res?.GetViewModel;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ namespace FurnitureAssemblyDatabaseImplement.Implements
|
|||||||
using var context = new FurnitureAssemblyDatabase();
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
return context.Messages
|
return context.Messages
|
||||||
.FirstOrDefault(x => (x.MessageId == model.MessageId))
|
.FirstOrDefault(x => (x.MessageId.Equals(model.MessageId)))
|
||||||
?.GetViewModel;
|
?.GetViewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,10 +32,26 @@ namespace FurnitureAssemblyDatabaseImplement.Implements
|
|||||||
{
|
{
|
||||||
using var context = new FurnitureAssemblyDatabase();
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
return context.Messages
|
var list = new List<MessageInfoViewModel>();
|
||||||
|
|
||||||
|
if (model.ClientId.HasValue)
|
||||||
|
{
|
||||||
|
list = context.Messages
|
||||||
.Where(x => x.ClientId.HasValue && x.ClientId == model.ClientId)
|
.Where(x => x.ClientId.HasValue && x.ClientId == model.ClientId)
|
||||||
.Select(x => x.GetViewModel)
|
.Select(x => x.GetViewModel).ToList();
|
||||||
.ToList();
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
list = context.Messages
|
||||||
|
.Select(x => x.GetViewModel).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(model.Page.HasValue && model.PageSize.HasValue))
|
||||||
|
{
|
||||||
|
return list.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
return list.Skip((model.Page.Value - 1) * model.PageSize.Value).Take(model.PageSize.Value).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<MessageInfoViewModel> GetFullList()
|
public List<MessageInfoViewModel> GetFullList()
|
||||||
@ -63,5 +79,25 @@ namespace FurnitureAssemblyDatabaseImplement.Implements
|
|||||||
|
|
||||||
return newMessage.GetViewModel;
|
return newMessage.GetViewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MessageInfoViewModel? Update(MessageInfoBindingModel model)
|
||||||
|
{
|
||||||
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
|
var message = context.Messages
|
||||||
|
.FirstOrDefault(x => x.MessageId.Equals(model.MessageId));
|
||||||
|
|
||||||
|
if (message == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
message.Update(model);
|
||||||
|
context.SaveChanges();
|
||||||
|
|
||||||
|
return context.Messages
|
||||||
|
.FirstOrDefault(x => x.MessageId.Equals(model.MessageId))
|
||||||
|
?.GetViewModel;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,36 +16,48 @@ namespace FurnitureAssemblyDatabaseImplement.Implements
|
|||||||
{
|
{
|
||||||
public OrderViewModel? GetElement(OrderSearchModel model)
|
public OrderViewModel? GetElement(OrderSearchModel model)
|
||||||
{
|
{
|
||||||
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
|
if (model.ImplementerId.HasValue && model.Status.HasValue)
|
||||||
|
{
|
||||||
|
return context.Orders
|
||||||
|
.Include(x => x.Furniture).Include(x => x.Client).Include(x => x.Implementer)
|
||||||
|
.FirstOrDefault(x => x.ImplementerId == model.ImplementerId && x.Status == model.Status)
|
||||||
|
?.GetViewModel;
|
||||||
|
}
|
||||||
|
if (model.ImplementerId.HasValue)
|
||||||
|
{
|
||||||
|
return context.Orders
|
||||||
|
.Include(x => x.Furniture).Include(x => x.Client).Include(x => x.Implementer)
|
||||||
|
.FirstOrDefault(x => x.ImplementerId == model.ImplementerId)?.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
if (!model.Id.HasValue)
|
if (!model.Id.HasValue)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
return context.Orders
|
||||||
using var context = new FurnitureAssemblyDatabase();
|
.Include(x => x.Furniture).Include(x => x.Client).Include(x => x.Implementer)
|
||||||
|
.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id)?.GetViewModel;
|
||||||
return context.Orders.Include(x => x.Furniture)
|
|
||||||
.Include(x => x.Client).Include(x => x.Implementer)
|
|
||||||
.FirstOrDefault(x => (model.Status == null || model.Status != null && model.Status.Equals(x.Status)) &&
|
|
||||||
(model.ImplementerId.HasValue && x.ImplementerId == model.ImplementerId) ||
|
|
||||||
(model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
|
public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
|
||||||
{
|
{
|
||||||
using var context = new FurnitureAssemblyDatabase();
|
|
||||||
|
|
||||||
if (!model.Id.HasValue && !model.DateFrom.HasValue && !model.DateTo.HasValue && !model.ClientId.HasValue && model.Status == null)
|
if (!model.Id.HasValue && !model.DateFrom.HasValue && !model.DateTo.HasValue && !model.ClientId.HasValue && model.Status == null)
|
||||||
{
|
{
|
||||||
return new();
|
return new();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
return context.Orders
|
return context.Orders
|
||||||
.Where(x => x.Id == model.Id || model.DateFrom <= x.DateCreate && x.DateCreate <= model.DateTo ||
|
.Where(x => x.Id == model.Id || model.DateFrom <= x.DateCreate && x.DateCreate <= model.DateTo ||
|
||||||
x.ClientId == model.ClientId || model.Status.Equals(x.Status))
|
x.ClientId == model.ClientId || model.Status.Equals(x.Status))
|
||||||
.Include(x => x.Furniture).Include(x => x.Client)
|
.Include(x => x.Furniture)
|
||||||
.Include(x => x.Implementer).Select(x => x.GetViewModel)
|
.Include(x => x.Client)
|
||||||
|
.Include(x => x.Implementer)
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<OrderViewModel> GetFullList()
|
public List<OrderViewModel> GetFullList()
|
||||||
@ -53,8 +65,7 @@ namespace FurnitureAssemblyDatabaseImplement.Implements
|
|||||||
using var context = new FurnitureAssemblyDatabase();
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
return context.Orders.Include(x => x.Furniture).Include(x => x.Client)
|
return context.Orders.Include(x => x.Furniture).Include(x => x.Client)
|
||||||
.Include(x => x.Implementer)
|
.Include(x => x.Implementer).Select(x => x.GetViewModel).ToList();
|
||||||
.Select(x => x.GetViewModel).ToList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public OrderViewModel? Insert(OrderBindingModel model)
|
public OrderViewModel? Insert(OrderBindingModel model)
|
||||||
@ -67,7 +78,6 @@ namespace FurnitureAssemblyDatabaseImplement.Implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
using var context = new FurnitureAssemblyDatabase();
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
context.Orders.Add(newOrder);
|
context.Orders.Add(newOrder);
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
|
|
||||||
@ -78,11 +88,7 @@ namespace FurnitureAssemblyDatabaseImplement.Implements
|
|||||||
public OrderViewModel? Update(OrderBindingModel model)
|
public OrderViewModel? Update(OrderBindingModel model)
|
||||||
{
|
{
|
||||||
using var context = new FurnitureAssemblyDatabase();
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
var order = context.Orders
|
var order = context.Orders.FirstOrDefault(x => x.Id == model.Id);
|
||||||
.Include(x => x.Furniture)
|
|
||||||
.Include(x => x.Client)
|
|
||||||
.Include(x => x.Implementer)
|
|
||||||
.FirstOrDefault(x => x.Id == model.Id);
|
|
||||||
|
|
||||||
if (order == null)
|
if (order == null)
|
||||||
{
|
{
|
||||||
@ -92,24 +98,23 @@ namespace FurnitureAssemblyDatabaseImplement.Implements
|
|||||||
order.Update(model);
|
order.Update(model);
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
|
|
||||||
return context.Orders
|
return context.Orders.Include(x => x.Furniture).Include(x => x.Client)
|
||||||
.Include(x => x.Furniture)
|
.Include(x => x.Implementer).FirstOrDefault(x => x.Id == model.Id)?.GetViewModel;
|
||||||
.Include(x => x.Client)
|
|
||||||
.Include(x => x.Implementer)
|
|
||||||
.FirstOrDefault(x => x.Id == model.Id)
|
|
||||||
?.GetViewModel;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public OrderViewModel? Delete(OrderBindingModel model)
|
public OrderViewModel? Delete(OrderBindingModel model)
|
||||||
{
|
{
|
||||||
using var context = new FurnitureAssemblyDatabase();
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
var element = context.Orders.FirstOrDefault(rec => rec.Id == model.Id);
|
var element = context.Orders.Include(x => x.Furniture).Include(x => x.Client)
|
||||||
|
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||||
|
|
||||||
if (element != null)
|
if (element != null)
|
||||||
{
|
{
|
||||||
// для более корректного отображения модели
|
// для отображения корректной ViewModel-и
|
||||||
var deletedElement = context.Orders.Include(x => x.Furniture).Include(x => x.Client)
|
var deletedElement = context.Orders
|
||||||
.Include(x => x.Implementer).FirstOrDefault(x => x.Id == model.Id)?.GetViewModel;
|
.Include(x => x.Furniture)
|
||||||
|
.Include(x => x.Client).Include(x => x.Implementer)
|
||||||
|
.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel;
|
||||||
|
|
||||||
context.Orders.Remove(element);
|
context.Orders.Remove(element);
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
|
@ -0,0 +1,179 @@
|
|||||||
|
using FurnitureAssemblyContracts.BindingModels;
|
||||||
|
using FurnitureAssemblyContracts.SearchModels;
|
||||||
|
using FurnitureAssemblyContracts.StoragesContracts;
|
||||||
|
using FurnitureAssemblyContracts.ViewModels;
|
||||||
|
using FurnitureAssemblyDatabaseImplement.Models;
|
||||||
|
using FurnitureAssemblyDataModels.Models;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyDatabaseImplement.Implements
|
||||||
|
{
|
||||||
|
public class ShopStorage : IShopStorage
|
||||||
|
{
|
||||||
|
public List<ShopViewModel> GetFullList()
|
||||||
|
{
|
||||||
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
|
return context.Shops
|
||||||
|
.Include(x => x.Furnitures)
|
||||||
|
.ThenInclude(x => x.Furniture)
|
||||||
|
.ToList()
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ShopViewModel> GetFilteredList(ShopSearchModel model)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(model.ShopName))
|
||||||
|
{
|
||||||
|
return new();
|
||||||
|
}
|
||||||
|
|
||||||
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
|
return context.Shops
|
||||||
|
.Include(x => x.Furnitures)
|
||||||
|
.ThenInclude(x => x.Furniture)
|
||||||
|
.Where(x => x.ShopName.Contains(model.ShopName))
|
||||||
|
.ToList()
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShopViewModel? GetElement(ShopSearchModel model)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(model.ShopName) && !model.Id.HasValue)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
|
return context.Shops
|
||||||
|
.Include(x => x.Furnitures)
|
||||||
|
.ThenInclude(x => x.Furniture)
|
||||||
|
.FirstOrDefault(x => (!string.IsNullOrEmpty(model.ShopName) && x.ShopName == model.ShopName) ||
|
||||||
|
(model.Id.HasValue && x.Id == model.Id))
|
||||||
|
?.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShopViewModel? Insert(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
var newShop = Shop.Create(context, model);
|
||||||
|
|
||||||
|
if (newShop == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
context.Shops.Add(newShop);
|
||||||
|
context.SaveChanges();
|
||||||
|
|
||||||
|
return newShop.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShopViewModel? Update(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
using var transaction = context.Database.BeginTransaction();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var shop = context.Shops.FirstOrDefault(rec => rec.Id == model.Id);
|
||||||
|
|
||||||
|
if (shop == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
shop.Update(model);
|
||||||
|
context.SaveChanges();
|
||||||
|
shop.UpdateFurnitures(context, model);
|
||||||
|
transaction.Commit();
|
||||||
|
|
||||||
|
return shop.GetViewModel;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
transaction.Rollback();
|
||||||
|
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShopViewModel? Delete(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
|
||||||
|
var element = context.Shops
|
||||||
|
.Include(x => x.Furnitures)
|
||||||
|
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||||
|
|
||||||
|
if (element != null)
|
||||||
|
{
|
||||||
|
context.Shops.Remove(element);
|
||||||
|
context.SaveChanges();
|
||||||
|
|
||||||
|
return element.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool SellFurnitures(IFurnitureModel model, int count)
|
||||||
|
{
|
||||||
|
using var context = new FurnitureAssemblyDatabase();
|
||||||
|
using var transaction = context.Database.BeginTransaction();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var shops = context.ShopFurnitures
|
||||||
|
.Include(x => x.Shop)
|
||||||
|
.ToList()
|
||||||
|
.Where(rec => rec.FurnitureId == model.Id);
|
||||||
|
|
||||||
|
if (shops == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var shop in shops)
|
||||||
|
{
|
||||||
|
if (shop.Count < count)
|
||||||
|
{
|
||||||
|
count -= shop.Count;
|
||||||
|
shop.Count = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
shop.Count = shop.Count - count;
|
||||||
|
count -= count;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count == 0)
|
||||||
|
{
|
||||||
|
context.SaveChanges();
|
||||||
|
transaction.Commit();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
transaction.Rollback();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
transaction.Rollback();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -12,7 +12,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|||||||
namespace FurnitureAssemblyDatabaseImplement.Migrations
|
namespace FurnitureAssemblyDatabaseImplement.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(FurnitureAssemblyDatabase))]
|
[DbContext(typeof(FurnitureAssemblyDatabase))]
|
||||||
[Migration("20240518234238_InitialCreate")]
|
[Migration("20240518232845_InitialCreate")]
|
||||||
partial class InitialCreate
|
partial class InitialCreate
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@ -128,6 +128,9 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
b.Property<string>("MessageId")
|
b.Property<string>("MessageId")
|
||||||
.HasColumnType("nvarchar(450)");
|
.HasColumnType("nvarchar(450)");
|
||||||
|
|
||||||
|
b.Property<string>("Answer")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.Property<string>("Body")
|
b.Property<string>("Body")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasColumnType("nvarchar(max)");
|
.HasColumnType("nvarchar(max)");
|
||||||
@ -138,6 +141,9 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
b.Property<DateTime>("DateDelivery")
|
b.Property<DateTime>("DateDelivery")
|
||||||
.HasColumnType("datetime2");
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<bool>("IsRead")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
b.Property<string>("SenderName")
|
b.Property<string>("SenderName")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasColumnType("nvarchar(max)");
|
.HasColumnType("nvarchar(max)");
|
||||||
@ -196,6 +202,59 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
b.ToTable("Orders");
|
b.ToTable("Orders");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.Shop", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<string>("Address")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<DateTime>("DateOpen")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<int>("MaxCountFurnitures")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<string>("ShopName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Shops");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.ShopFurniture", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<int>("Count")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<int>("FurnitureId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<int>("ShopId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("FurnitureId");
|
||||||
|
|
||||||
|
b.HasIndex("ShopId");
|
||||||
|
|
||||||
|
b.ToTable("ShopFurnitures");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.WorkPiece", b =>
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.WorkPiece", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
@ -259,7 +318,7 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("FurnitureAssemblyDatabaseImplement.Models.Implementer", "Implementer")
|
b.HasOne("FurnitureAssemblyDatabaseImplement.Models.Implementer", "Implementer")
|
||||||
.WithMany("Order")
|
.WithMany("Orders")
|
||||||
.HasForeignKey("ImplementerId");
|
.HasForeignKey("ImplementerId");
|
||||||
|
|
||||||
b.Navigation("Client");
|
b.Navigation("Client");
|
||||||
@ -269,6 +328,25 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
b.Navigation("Implementer");
|
b.Navigation("Implementer");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.ShopFurniture", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("FurnitureAssemblyDatabaseImplement.Models.Furniture", "Furniture")
|
||||||
|
.WithMany("Shops")
|
||||||
|
.HasForeignKey("FurnitureId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("FurnitureAssemblyDatabaseImplement.Models.Shop", "Shop")
|
||||||
|
.WithMany("Furnitures")
|
||||||
|
.HasForeignKey("ShopId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Furniture");
|
||||||
|
|
||||||
|
b.Navigation("Shop");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.Client", b =>
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.Client", b =>
|
||||||
{
|
{
|
||||||
b.Navigation("Messages");
|
b.Navigation("Messages");
|
||||||
@ -280,12 +358,19 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
{
|
{
|
||||||
b.Navigation("Orders");
|
b.Navigation("Orders");
|
||||||
|
|
||||||
|
b.Navigation("Shops");
|
||||||
|
|
||||||
b.Navigation("WorkPieces");
|
b.Navigation("WorkPieces");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.Implementer", b =>
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.Implementer", b =>
|
||||||
{
|
{
|
||||||
b.Navigation("Order");
|
b.Navigation("Orders");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.Shop", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Furnitures");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.WorkPiece", b =>
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.WorkPiece", b =>
|
@ -56,6 +56,22 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
table.PrimaryKey("PK_Implementers", x => x.Id);
|
table.PrimaryKey("PK_Implementers", x => x.Id);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Shops",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<int>(type: "int", nullable: false)
|
||||||
|
.Annotation("SqlServer:Identity", "1, 1"),
|
||||||
|
ShopName = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
||||||
|
Address = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
||||||
|
DateOpen = table.Column<DateTime>(type: "datetime2", nullable: false),
|
||||||
|
MaxCountFurnitures = table.Column<int>(type: "int", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Shops", x => x.Id);
|
||||||
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "WorkPieces",
|
name: "WorkPieces",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
@ -76,10 +92,12 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
{
|
{
|
||||||
MessageId = table.Column<string>(type: "nvarchar(450)", nullable: false),
|
MessageId = table.Column<string>(type: "nvarchar(450)", nullable: false),
|
||||||
ClientId = table.Column<int>(type: "int", nullable: true),
|
ClientId = table.Column<int>(type: "int", nullable: true),
|
||||||
|
IsRead = table.Column<bool>(type: "bit", nullable: false),
|
||||||
SenderName = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
SenderName = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
||||||
DateDelivery = table.Column<DateTime>(type: "datetime2", nullable: false),
|
DateDelivery = table.Column<DateTime>(type: "datetime2", nullable: false),
|
||||||
Subject = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
Subject = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
||||||
Body = table.Column<string>(type: "nvarchar(max)", nullable: false)
|
Body = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
||||||
|
Answer = table.Column<string>(type: "nvarchar(max)", nullable: true)
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
@ -128,6 +146,33 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
principalColumn: "Id");
|
principalColumn: "Id");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "ShopFurnitures",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<int>(type: "int", nullable: false)
|
||||||
|
.Annotation("SqlServer:Identity", "1, 1"),
|
||||||
|
ShopId = table.Column<int>(type: "int", nullable: false),
|
||||||
|
FurnitureId = table.Column<int>(type: "int", nullable: false),
|
||||||
|
Count = table.Column<int>(type: "int", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_ShopFurnitures", x => x.Id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_ShopFurnitures_Furnitures_FurnitureId",
|
||||||
|
column: x => x.FurnitureId,
|
||||||
|
principalTable: "Furnitures",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_ShopFurnitures_Shops_ShopId",
|
||||||
|
column: x => x.ShopId,
|
||||||
|
principalTable: "Shops",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "FurnitureWorkPieces",
|
name: "FurnitureWorkPieces",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
@ -184,6 +229,16 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
name: "IX_Orders_ImplementerId",
|
name: "IX_Orders_ImplementerId",
|
||||||
table: "Orders",
|
table: "Orders",
|
||||||
column: "ImplementerId");
|
column: "ImplementerId");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_ShopFurnitures_FurnitureId",
|
||||||
|
table: "ShopFurnitures",
|
||||||
|
column: "FurnitureId");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_ShopFurnitures_ShopId",
|
||||||
|
table: "ShopFurnitures",
|
||||||
|
column: "ShopId");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@ -198,17 +253,23 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Orders");
|
name: "Orders");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "ShopFurnitures");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "WorkPieces");
|
name: "WorkPieces");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Clients");
|
name: "Clients");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Implementers");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Furnitures");
|
name: "Furnitures");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Implementers");
|
name: "Shops");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -125,6 +125,9 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
b.Property<string>("MessageId")
|
b.Property<string>("MessageId")
|
||||||
.HasColumnType("nvarchar(450)");
|
.HasColumnType("nvarchar(450)");
|
||||||
|
|
||||||
|
b.Property<string>("Answer")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.Property<string>("Body")
|
b.Property<string>("Body")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasColumnType("nvarchar(max)");
|
.HasColumnType("nvarchar(max)");
|
||||||
@ -135,6 +138,9 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
b.Property<DateTime>("DateDelivery")
|
b.Property<DateTime>("DateDelivery")
|
||||||
.HasColumnType("datetime2");
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<bool>("IsRead")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
b.Property<string>("SenderName")
|
b.Property<string>("SenderName")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasColumnType("nvarchar(max)");
|
.HasColumnType("nvarchar(max)");
|
||||||
@ -193,6 +199,59 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
b.ToTable("Orders");
|
b.ToTable("Orders");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.Shop", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<string>("Address")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<DateTime>("DateOpen")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<int>("MaxCountFurnitures")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<string>("ShopName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Shops");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.ShopFurniture", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<int>("Count")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<int>("FurnitureId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<int>("ShopId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("FurnitureId");
|
||||||
|
|
||||||
|
b.HasIndex("ShopId");
|
||||||
|
|
||||||
|
b.ToTable("ShopFurnitures");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.WorkPiece", b =>
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.WorkPiece", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
@ -256,7 +315,7 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("FurnitureAssemblyDatabaseImplement.Models.Implementer", "Implementer")
|
b.HasOne("FurnitureAssemblyDatabaseImplement.Models.Implementer", "Implementer")
|
||||||
.WithMany("Order")
|
.WithMany("Orders")
|
||||||
.HasForeignKey("ImplementerId");
|
.HasForeignKey("ImplementerId");
|
||||||
|
|
||||||
b.Navigation("Client");
|
b.Navigation("Client");
|
||||||
@ -266,6 +325,25 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
b.Navigation("Implementer");
|
b.Navigation("Implementer");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.ShopFurniture", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("FurnitureAssemblyDatabaseImplement.Models.Furniture", "Furniture")
|
||||||
|
.WithMany("Shops")
|
||||||
|
.HasForeignKey("FurnitureId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("FurnitureAssemblyDatabaseImplement.Models.Shop", "Shop")
|
||||||
|
.WithMany("Furnitures")
|
||||||
|
.HasForeignKey("ShopId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Furniture");
|
||||||
|
|
||||||
|
b.Navigation("Shop");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.Client", b =>
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.Client", b =>
|
||||||
{
|
{
|
||||||
b.Navigation("Messages");
|
b.Navigation("Messages");
|
||||||
@ -277,12 +355,19 @@ namespace FurnitureAssemblyDatabaseImplement.Migrations
|
|||||||
{
|
{
|
||||||
b.Navigation("Orders");
|
b.Navigation("Orders");
|
||||||
|
|
||||||
|
b.Navigation("Shops");
|
||||||
|
|
||||||
b.Navigation("WorkPieces");
|
b.Navigation("WorkPieces");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.Implementer", b =>
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.Implementer", b =>
|
||||||
{
|
{
|
||||||
b.Navigation("Order");
|
b.Navigation("Orders");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.Shop", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Furnitures");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.WorkPiece", b =>
|
modelBuilder.Entity("FurnitureAssemblyDatabaseImplement.Models.WorkPiece", b =>
|
||||||
|
@ -36,7 +36,7 @@ namespace FurnitureAssemblyDatabaseImplement.Models
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if(_furnitureWorkPieces == null)
|
if (_furnitureWorkPieces == null)
|
||||||
{
|
{
|
||||||
_furnitureWorkPieces = WorkPieces
|
_furnitureWorkPieces = WorkPieces
|
||||||
.ToDictionary(recPC => recPC.WorkPieceId, recPC => (recPC.WorkPiece as IWorkPieceModel, recPC.Count));
|
.ToDictionary(recPC => recPC.WorkPieceId, recPC => (recPC.WorkPiece as IWorkPieceModel, recPC.Count));
|
||||||
@ -53,6 +53,9 @@ namespace FurnitureAssemblyDatabaseImplement.Models
|
|||||||
[ForeignKey("FurnitureId")]
|
[ForeignKey("FurnitureId")]
|
||||||
public virtual List<Order> Orders { get; set; } = new();
|
public virtual List<Order> Orders { get; set; } = new();
|
||||||
|
|
||||||
|
[ForeignKey("FurnitureId")]
|
||||||
|
public virtual List<ShopFurniture> Shops { get; set; } = new();
|
||||||
|
|
||||||
public static Furniture Create(FurnitureAssemblyDatabase context, FurnitureBindingModel model)
|
public static Furniture Create(FurnitureAssemblyDatabase context, FurnitureBindingModel model)
|
||||||
{
|
{
|
||||||
return new Furniture()
|
return new Furniture()
|
||||||
@ -82,14 +85,11 @@ namespace FurnitureAssemblyDatabaseImplement.Models
|
|||||||
FurnitureWorkPieces = FurnitureWorkPieces
|
FurnitureWorkPieces = FurnitureWorkPieces
|
||||||
};
|
};
|
||||||
|
|
||||||
Dictionary<int, (IWorkPieceModel, int)> IFurnitureModel.FurnitureWorkPieces => throw new NotImplementedException();
|
|
||||||
|
|
||||||
|
|
||||||
public void UpdateWorkPieces(FurnitureAssemblyDatabase context, FurnitureBindingModel model)
|
public void UpdateWorkPieces(FurnitureAssemblyDatabase context, FurnitureBindingModel model)
|
||||||
{
|
{
|
||||||
var furnitureWorkPieces = context.FurnitureWorkPieces.Where(rec => rec.FurnitureId == model.Id).ToList();
|
var furnitureWorkPieces = context.FurnitureWorkPieces.Where(rec => rec.FurnitureId == model.Id).ToList();
|
||||||
|
|
||||||
if(furnitureWorkPieces != null && furnitureWorkPieces.Count > 0)
|
if (furnitureWorkPieces != null && furnitureWorkPieces.Count > 0)
|
||||||
{
|
{
|
||||||
// удалили те, которых нет в модели
|
// удалили те, которых нет в модели
|
||||||
context.FurnitureWorkPieces.RemoveRange(furnitureWorkPieces.Where(rec => !model.FurnitureWorkPieces.ContainsKey(rec.FurnitureId)));
|
context.FurnitureWorkPieces.RemoveRange(furnitureWorkPieces.Where(rec => !model.FurnitureWorkPieces.ContainsKey(rec.FurnitureId)));
|
||||||
@ -107,13 +107,13 @@ namespace FurnitureAssemblyDatabaseImplement.Models
|
|||||||
|
|
||||||
var furniture = context.Furnitures.First(x => x.Id == Id);
|
var furniture = context.Furnitures.First(x => x.Id == Id);
|
||||||
|
|
||||||
foreach(var pc in model.FurnitureWorkPieces)
|
foreach (var fwp in model.FurnitureWorkPieces)
|
||||||
{
|
{
|
||||||
context.FurnitureWorkPieces.Add(new FurnitureWorkPiece
|
context.FurnitureWorkPieces.Add(new FurnitureWorkPiece
|
||||||
{
|
{
|
||||||
Furniture = furniture,
|
Furniture = furniture,
|
||||||
WorkPiece = context.WorkPieces.First(x => x.Id == pc.Key),
|
WorkPiece = context.WorkPieces.First(x => x.Id == fwp.Key),
|
||||||
Count = pc.Value.Item2
|
Count = fwp.Value.Item2
|
||||||
});
|
});
|
||||||
|
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
|
@ -34,9 +34,9 @@ namespace FurnitureAssemblyDatabaseImplement.Models
|
|||||||
[DataMember]
|
[DataMember]
|
||||||
public int Qualification { get; set; }
|
public int Qualification { get; set; }
|
||||||
|
|
||||||
// Для реализации связи один ко многим с заказами
|
//для реализации связи один ко многим с заказами
|
||||||
[ForeignKey("ImplementerId")]
|
[ForeignKey("ImplementerId")]
|
||||||
public virtual List<Order> Order { get; set; } = new();
|
public virtual List<Order> Orders { get; set; } = new();
|
||||||
|
|
||||||
public static Implementer? Create(ImplementerBindingModel model)
|
public static Implementer? Create(ImplementerBindingModel model)
|
||||||
{
|
{
|
||||||
|
@ -21,16 +21,28 @@ namespace FurnitureAssemblyDatabaseImplement.Models
|
|||||||
[DataMember]
|
[DataMember]
|
||||||
public string MessageId { get; set; } = string.Empty;
|
public string MessageId { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
[DataMember]
|
||||||
public int? ClientId { get; set; }
|
public int? ClientId { get; set; }
|
||||||
|
|
||||||
|
public bool IsRead { get; private set; } = false;
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
[DataMember]
|
||||||
public string SenderName { get; set; } = string.Empty;
|
public string SenderName { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
[DataMember]
|
||||||
public DateTime DateDelivery { get; set; } = DateTime.Now;
|
public DateTime DateDelivery { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
[DataMember]
|
||||||
public string Subject { get; set; } = string.Empty;
|
public string Subject { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
[DataMember]
|
||||||
public string Body { get; set; } = string.Empty;
|
public string Body { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public string? Answer { get; private set; } = string.Empty;
|
||||||
|
|
||||||
public virtual Client? Client { get; set; }
|
public virtual Client? Client { get; set; }
|
||||||
|
|
||||||
public static MessageInfo? Create(MessageInfoBindingModel model)
|
public static MessageInfo? Create(MessageInfoBindingModel model)
|
||||||
@ -47,10 +59,23 @@ namespace FurnitureAssemblyDatabaseImplement.Models
|
|||||||
SenderName = model.SenderName,
|
SenderName = model.SenderName,
|
||||||
Body = model.Body,
|
Body = model.Body,
|
||||||
DateDelivery = model.DateDelivery,
|
DateDelivery = model.DateDelivery,
|
||||||
Subject = model.Subject
|
Subject = model.Subject,
|
||||||
|
IsRead = model.IsRead,
|
||||||
|
Answer = model.Answer
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Update(MessageInfoBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
IsRead = model.IsRead;
|
||||||
|
Answer = model.Answer;
|
||||||
|
}
|
||||||
|
|
||||||
public MessageInfoViewModel GetViewModel => new()
|
public MessageInfoViewModel GetViewModel => new()
|
||||||
{
|
{
|
||||||
MessageId = MessageId,
|
MessageId = MessageId,
|
||||||
@ -58,7 +83,9 @@ namespace FurnitureAssemblyDatabaseImplement.Models
|
|||||||
SenderName = SenderName,
|
SenderName = SenderName,
|
||||||
Body = Body,
|
Body = Body,
|
||||||
DateDelivery = DateDelivery,
|
DateDelivery = DateDelivery,
|
||||||
Subject = Subject
|
Subject = Subject,
|
||||||
|
IsRead = IsRead,
|
||||||
|
Answer = Answer
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,132 @@
|
|||||||
|
using FurnitureAssemblyContracts.BindingModels;
|
||||||
|
using FurnitureAssemblyContracts.ViewModels;
|
||||||
|
using FurnitureAssemblyDataModels.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyDatabaseImplement.Models
|
||||||
|
{
|
||||||
|
public class Shop : IShopModel
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string ShopName { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string Address { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public DateTime DateOpen { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public int MaxCountFurnitures { get; set; }
|
||||||
|
|
||||||
|
private Dictionary<int, (IFurnitureModel, int)>? _shopFurnitures = null;
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public Dictionary<int, (IFurnitureModel, int)> ShopFurnitures
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_shopFurnitures == null)
|
||||||
|
{
|
||||||
|
_shopFurnitures = new();
|
||||||
|
|
||||||
|
Furnitures.ForEach(x =>
|
||||||
|
{
|
||||||
|
if (_shopFurnitures.ContainsKey(x.FurnitureId))
|
||||||
|
{
|
||||||
|
_shopFurnitures[x.FurnitureId] = (x.Furniture as IFurnitureModel, _shopFurnitures[x.FurnitureId].Item2 + x.Count);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_shopFurnitures[x.FurnitureId] = (x.Furniture as IFurnitureModel, x.Count);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return _shopFurnitures;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[ForeignKey("ShopId")]
|
||||||
|
public virtual List<ShopFurniture> Furnitures { get; set; } = new();
|
||||||
|
|
||||||
|
public static Shop? Create(FurnitureAssemblyDatabase context, ShopBindingModel model)
|
||||||
|
{
|
||||||
|
return new Shop()
|
||||||
|
{
|
||||||
|
Id = model.Id,
|
||||||
|
ShopName = model.ShopName,
|
||||||
|
Address = model.Address,
|
||||||
|
DateOpen = model.DateOpen,
|
||||||
|
Furnitures = model.ShopFurnitures.Select(x => new ShopFurniture
|
||||||
|
{
|
||||||
|
Furniture = context.Furnitures.First(y => y.Id == x.Key),
|
||||||
|
Count = x.Value.Item2
|
||||||
|
}).ToList(),
|
||||||
|
MaxCountFurnitures = model.MaxCountFurnitures
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
ShopName = model.ShopName;
|
||||||
|
Address = model.Address;
|
||||||
|
DateOpen = model.DateOpen;
|
||||||
|
MaxCountFurnitures = model.MaxCountFurnitures;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShopViewModel GetViewModel => new()
|
||||||
|
{
|
||||||
|
Id = Id,
|
||||||
|
ShopName = ShopName,
|
||||||
|
Address = Address,
|
||||||
|
DateOpen = DateOpen,
|
||||||
|
MaxCountFurnitures = MaxCountFurnitures,
|
||||||
|
ShopFurnitures = ShopFurnitures
|
||||||
|
};
|
||||||
|
|
||||||
|
public void UpdateFurnitures(FurnitureAssemblyDatabase context, ShopBindingModel model)
|
||||||
|
{
|
||||||
|
var shopFurnitures = context.ShopFurnitures.Where(rec => rec.ShopId == model.Id).ToList();
|
||||||
|
|
||||||
|
if (shopFurnitures != null && shopFurnitures.Count > 0)
|
||||||
|
{ // удалили те, которых нет в модели
|
||||||
|
context.ShopFurnitures.RemoveRange(shopFurnitures.Where(rec => !model.ShopFurnitures.ContainsKey(rec.FurnitureId)));
|
||||||
|
context.SaveChanges();
|
||||||
|
|
||||||
|
// обновили количество у существующих записей
|
||||||
|
foreach (var _shopFurnitures in shopFurnitures)
|
||||||
|
{
|
||||||
|
_shopFurnitures.Count = model.ShopFurnitures[_shopFurnitures.FurnitureId].Item2;
|
||||||
|
model.ShopFurnitures.Remove(_shopFurnitures.FurnitureId);
|
||||||
|
}
|
||||||
|
|
||||||
|
context.SaveChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
var shop = context.Shops.First(x => x.Id == Id);
|
||||||
|
|
||||||
|
foreach (var sm in model.ShopFurnitures)
|
||||||
|
{
|
||||||
|
context.ShopFurnitures.Add(new ShopFurniture
|
||||||
|
{
|
||||||
|
Shop = shop,
|
||||||
|
Furniture = context.Furnitures.First(x => x.Id == sm.Key),
|
||||||
|
Count = sm.Value.Item2
|
||||||
|
});
|
||||||
|
|
||||||
|
context.SaveChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
_shopFurnitures = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyDatabaseImplement.Models
|
||||||
|
{
|
||||||
|
public class ShopFurniture
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public int ShopId { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public int FurnitureId { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public int Count { get; set; }
|
||||||
|
|
||||||
|
public virtual Shop Shop { get; set; } = new();
|
||||||
|
|
||||||
|
public virtual Furniture Furniture { get; set; } = new();
|
||||||
|
}
|
||||||
|
}
|
@ -32,7 +32,7 @@ namespace FurnitureAssemblyDatabaseImplement.Models
|
|||||||
|
|
||||||
public static WorkPiece? Create(WorkPieceBindingModel model)
|
public static WorkPiece? Create(WorkPieceBindingModel model)
|
||||||
{
|
{
|
||||||
if(model == null)
|
if (model == null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -57,7 +57,7 @@ namespace FurnitureAssemblyDatabaseImplement.Models
|
|||||||
|
|
||||||
public void Update(WorkPieceBindingModel model)
|
public void Update(WorkPieceBindingModel model)
|
||||||
{
|
{
|
||||||
if(model == null)
|
if (model == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,8 @@ namespace FurnitureAssemblyFileImplement
|
|||||||
|
|
||||||
private readonly string FurnitureFileName = "Furniture.xml";
|
private readonly string FurnitureFileName = "Furniture.xml";
|
||||||
|
|
||||||
|
private readonly string ShopFileName = "Shop.xml";
|
||||||
|
|
||||||
private readonly string ClientFileName = "Client.xml";
|
private readonly string ClientFileName = "Client.xml";
|
||||||
|
|
||||||
private readonly string ImplementerFileName = "Implementer.xml";
|
private readonly string ImplementerFileName = "Implementer.xml";
|
||||||
@ -30,6 +32,8 @@ namespace FurnitureAssemblyFileImplement
|
|||||||
|
|
||||||
public List<Furniture> Furnitures { get; private set; }
|
public List<Furniture> Furnitures { get; private set; }
|
||||||
|
|
||||||
|
public List<Shop> Shops { get; private set; }
|
||||||
|
|
||||||
public List<Client> Clients { get; private set; }
|
public List<Client> Clients { get; private set; }
|
||||||
|
|
||||||
public List<Implementer> Implementers { get; private set; }
|
public List<Implementer> Implementers { get; private set; }
|
||||||
@ -52,20 +56,23 @@ namespace FurnitureAssemblyFileImplement
|
|||||||
|
|
||||||
public void SaveOrders() => SaveData(Orders, OrderFileName, "Orders", x => x.GetXElement);
|
public void SaveOrders() => SaveData(Orders, OrderFileName, "Orders", x => x.GetXElement);
|
||||||
|
|
||||||
|
public void SaveShops() => SaveData(Shops, ShopFileName, "Shops", x => x.GetXElement);
|
||||||
|
|
||||||
public void SaveClients() => SaveData(Clients, ClientFileName, "Clients", x => x.GetXElement);
|
public void SaveClients() => SaveData(Clients, ClientFileName, "Clients", x => x.GetXElement);
|
||||||
|
|
||||||
public void SaveImplementers() => SaveData(Implementers, ImplementerFileName, "Implementers", x => x.GetXElement);
|
public void SaveImplementers() => SaveData(Orders, ImplementerFileName, "Implementers", x => x.GetXElement);
|
||||||
|
|
||||||
public void SaveMessages() => SaveData(Messages, MessageFileName, "Messages", x => x.GetXElement);
|
public void SaveMessages() => SaveData(Messages, MessageFileName, "Messages", x => x.GetXElement);
|
||||||
|
|
||||||
|
|
||||||
private DataFileSingleton()
|
private DataFileSingleton()
|
||||||
{
|
{
|
||||||
WorkPieces = LoadData(WorkPieceFileName, "WorkPiece", x => WorkPiece.Create(x)!)!;
|
WorkPieces = LoadData(WorkPieceFileName, "WorkPiece", x => WorkPiece.Create(x)!)!;
|
||||||
Furnitures = LoadData(FurnitureFileName, "Furniture", x => Furniture.Create(x)!)!;
|
Furnitures = LoadData(FurnitureFileName, "Furniture", x => Furniture.Create(x)!)!;
|
||||||
Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!;
|
Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!;
|
||||||
|
Shops = LoadData(ShopFileName, "Shop", x => Shop.Create(x)!)!;
|
||||||
|
Implementers = LoadData(ImplementerFileName, "Impleneter", x => Implementer.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)!)!;
|
|
||||||
Messages = LoadData(MessageFileName, "Messages", x => MessageInfo.Create(x)!)!;
|
Messages = LoadData(MessageFileName, "Messages", x => MessageInfo.Create(x)!)!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +28,8 @@ namespace FurnitureAssemblyFileImplement
|
|||||||
|
|
||||||
DependencyManager.Instance.RegisterType<IFurnitureStorage, FurnitureStorage>();
|
DependencyManager.Instance.RegisterType<IFurnitureStorage, FurnitureStorage>();
|
||||||
|
|
||||||
|
DependencyManager.Instance.RegisterType<IShopStorage, ShopStorage>();
|
||||||
|
|
||||||
DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
|
DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,100 +13,72 @@ namespace FurnitureAssemblyFileImplement.Implements
|
|||||||
{
|
{
|
||||||
public class ImplementerStorage : IImplementerStorage
|
public class ImplementerStorage : IImplementerStorage
|
||||||
{
|
{
|
||||||
private readonly DataFileSingleton source;
|
private readonly DataFileSingleton _source;
|
||||||
|
|
||||||
public ImplementerStorage()
|
public ImplementerStorage()
|
||||||
{
|
{
|
||||||
source = DataFileSingleton.GetInstance();
|
_source = DataFileSingleton.GetInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImplementerViewModel? GetElement(ImplementerSearchModel model)
|
public ImplementerViewModel? GetElement(ImplementerSearchModel model)
|
||||||
{
|
{
|
||||||
if (model.Id.HasValue)
|
if (model.Id.HasValue) return _source.Implementers.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel;
|
||||||
return source.Implementers
|
if (model.ImplementerFIO != null && model.Password != null) return _source.Implementers.FirstOrDefault(x => x.ImplementerFIO.Equals(model.ImplementerFIO) && x.Password.Equals(model.Password))?.GetViewModel;
|
||||||
.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel;
|
if (model.ImplementerFIO != null) return _source.Implementers.FirstOrDefault(x => x.ImplementerFIO.Equals(model.ImplementerFIO))?.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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<ImplementerViewModel> GetFullList()
|
|
||||||
{
|
|
||||||
return source.Implementers.Select(x => x.GetViewModel).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<ImplementerViewModel> GetFilteredList(ImplementerSearchModel model)
|
public List<ImplementerViewModel> GetFilteredList(ImplementerSearchModel model)
|
||||||
{
|
{
|
||||||
if (model == null)
|
if (model == null)
|
||||||
{
|
{
|
||||||
return new();
|
return new();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (model.ImplementerFIO != null)
|
if (model.ImplementerFIO != null)
|
||||||
{
|
{
|
||||||
return source.Implementers
|
return _source.Implementers
|
||||||
.Where(x => x.ImplementerFIO.Contains(model.ImplementerFIO))
|
.Where(x => x.ImplementerFIO.Contains(model.ImplementerFIO))
|
||||||
.Where(x => x.Id == model.Id)
|
|
||||||
.Select(x => x.GetViewModel)
|
.Select(x => x.GetViewModel)
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
return new();
|
return new();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<ImplementerViewModel> GetFullList()
|
||||||
|
{
|
||||||
|
return _source.Implementers.Select(x => x.GetViewModel).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
public ImplementerViewModel? Insert(ImplementerBindingModel model)
|
public ImplementerViewModel? Insert(ImplementerBindingModel model)
|
||||||
{
|
{
|
||||||
model.Id = source.Implementers.Count > 0 ? source.Implementers.Max(x => x.Id) + 1 : 1;
|
model.Id = _source.Implementers.Count > 0 ? _source.Implementers.Max(x => x.Id) + 1 : 1;
|
||||||
|
var res = Implementer.Create(model);
|
||||||
var newImplementer = Implementer.Create(model);
|
if (res != null)
|
||||||
|
|
||||||
if (newImplementer == null)
|
|
||||||
{
|
{
|
||||||
return null;
|
_source.Implementers.Add(res);
|
||||||
|
_source.SaveImplementers();
|
||||||
}
|
}
|
||||||
|
return res?.GetViewModel;
|
||||||
source.Implementers.Add(newImplementer);
|
|
||||||
source.SaveImplementers();
|
|
||||||
|
|
||||||
return newImplementer.GetViewModel;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImplementerViewModel? Update(ImplementerBindingModel model)
|
public ImplementerViewModel? Update(ImplementerBindingModel model)
|
||||||
{
|
{
|
||||||
var implementer = source.Implementers.FirstOrDefault(x => x.Id == model.Id);
|
var res = _source.Implementers.FirstOrDefault(x => x.Id == model.Id);
|
||||||
|
if (res != null)
|
||||||
if (implementer == null)
|
|
||||||
{
|
{
|
||||||
return null;
|
res.Update(model);
|
||||||
|
_source.SaveImplementers();
|
||||||
}
|
}
|
||||||
|
return res?.GetViewModel;
|
||||||
implementer.Update(model);
|
|
||||||
source.SaveImplementers();
|
|
||||||
|
|
||||||
return implementer.GetViewModel;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImplementerViewModel? Delete(ImplementerBindingModel model)
|
public ImplementerViewModel? Delete(ImplementerBindingModel model)
|
||||||
{
|
{
|
||||||
var element = source.Implementers.FirstOrDefault(x => x.Id == model.Id);
|
var res = _source.Implementers.FirstOrDefault(x => x.Id == model.Id);
|
||||||
|
if (res != null)
|
||||||
if (element != null)
|
|
||||||
{
|
{
|
||||||
source.Implementers.Remove(element);
|
_source.Implementers.Remove(res);
|
||||||
source.SaveImplementers();
|
_source.SaveImplementers();
|
||||||
|
|
||||||
return element.GetViewModel;
|
|
||||||
}
|
}
|
||||||
|
return res?.GetViewModel;
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,64 +13,62 @@ namespace FurnitureAssemblyFileImplement.Implements
|
|||||||
{
|
{
|
||||||
public class MessageInfoStorage : IMessageInfoStorage
|
public class MessageInfoStorage : IMessageInfoStorage
|
||||||
{
|
{
|
||||||
private readonly DataFileSingleton source;
|
private readonly DataFileSingleton _source;
|
||||||
|
|
||||||
public MessageInfoStorage()
|
public MessageInfoStorage()
|
||||||
{
|
{
|
||||||
source = DataFileSingleton.GetInstance();
|
_source = DataFileSingleton.GetInstance();
|
||||||
}
|
|
||||||
|
|
||||||
public List<MessageInfoViewModel> GetFullList()
|
|
||||||
{
|
|
||||||
return source.Messages.Select(x => GetViewModel(x)).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<MessageInfoViewModel> GetFilteredList(MessageInfoSearchModel model)
|
|
||||||
{
|
|
||||||
if (!model.ClientId.HasValue)
|
|
||||||
{
|
|
||||||
return source.Messages
|
|
||||||
.Select(x => GetViewModel(x))
|
|
||||||
.ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
return source.Messages
|
|
||||||
.Where(x => x.ClientId == model.ClientId)
|
|
||||||
.Select(x => GetViewModel(x))
|
|
||||||
.ToList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageInfoViewModel? GetElement(MessageInfoSearchModel model)
|
public MessageInfoViewModel? GetElement(MessageInfoSearchModel model)
|
||||||
{
|
{
|
||||||
if (!model.ClientId.HasValue)
|
if (model.MessageId != null)
|
||||||
{
|
{
|
||||||
|
return _source.Messages.FirstOrDefault(x => x.MessageId == model.MessageId)?.GetViewModel;
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return source.Messages.FirstOrDefault(x => (model.ClientId.HasValue && x.ClientId == model.ClientId))?.GetViewModel;
|
public List<MessageInfoViewModel> GetFilteredList(MessageInfoSearchModel model)
|
||||||
|
{
|
||||||
|
var res = _source.Messages
|
||||||
|
.Where(x => !model.ClientId.HasValue || x.ClientId == model.ClientId)
|
||||||
|
.Select(x => x.GetViewModel);
|
||||||
|
if (!(model.Page.HasValue && model.PageSize.HasValue))
|
||||||
|
{
|
||||||
|
return res.ToList();
|
||||||
|
}
|
||||||
|
return res.Skip((model.Page.Value - 1) * model.PageSize.Value).Take(model.PageSize.Value).ToList();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MessageInfoViewModel> GetFullList()
|
||||||
|
{
|
||||||
|
return _source.Messages
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageInfoViewModel? Insert(MessageInfoBindingModel model)
|
public MessageInfoViewModel? Insert(MessageInfoBindingModel model)
|
||||||
{
|
{
|
||||||
model.MessageId = source.Messages.Count > 0 ? Convert.ToString(source.Messages.Count + 1) : "1";
|
|
||||||
|
|
||||||
var newMessage = MessageInfo.Create(model);
|
var newMessage = MessageInfo.Create(model);
|
||||||
|
|
||||||
if (newMessage == null)
|
if (newMessage == null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
_source.Messages.Add(newMessage);
|
||||||
source.Messages.Add(newMessage);
|
_source.SaveMessages();
|
||||||
source.SaveOrders();
|
return newMessage.GetViewModel;
|
||||||
|
|
||||||
return GetViewModel(newMessage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Для загрузки названий и имён в заказ
|
public MessageInfoViewModel? Update(MessageInfoBindingModel model)
|
||||||
private MessageInfoViewModel GetViewModel(MessageInfo message)
|
|
||||||
{
|
{
|
||||||
return message.GetViewModel;
|
var res = _source.Messages.FirstOrDefault(x => x.MessageId.Equals(model.MessageId));
|
||||||
|
if (res != null)
|
||||||
|
{
|
||||||
|
res.Update(model);
|
||||||
|
_source.SaveMessages();
|
||||||
|
}
|
||||||
|
return res?.GetViewModel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,12 +28,21 @@ namespace FurnitureAssemblyFileImplement.Implements
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (model.ImplementerId.HasValue && model.Status != null)
|
if (model.ImplementerId.HasValue && model.Status.HasValue)
|
||||||
return source.Orders.FirstOrDefault(x => x.ImplementerId == model.ImplementerId && model.Status
|
{
|
||||||
.Equals(x.Status))?.GetViewModel;
|
|
||||||
|
|
||||||
return source.Orders
|
return source.Orders
|
||||||
.FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
|
.FirstOrDefault(x => x.ImplementerId == model.ImplementerId && x.Status == model.Status)
|
||||||
|
?.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (model.ImplementerId.HasValue)
|
||||||
|
{
|
||||||
|
return source.Orders
|
||||||
|
.FirstOrDefault(x => x.ImplementerId == model.ImplementerId)
|
||||||
|
?.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
return source.Orders.FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
|
public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
|
||||||
@ -54,7 +63,7 @@ namespace FurnitureAssemblyFileImplement.Implements
|
|||||||
return source.Orders.Select(x => GetViewModel(x)).ToList();
|
return source.Orders.Select(x => GetViewModel(x)).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Для загрузки названий изделия и исполнителя в заказе
|
// Для загрузки названий изделия в заказе
|
||||||
private OrderViewModel GetViewModel(Order order)
|
private OrderViewModel GetViewModel(Order order)
|
||||||
{
|
{
|
||||||
var viewModel = order.GetViewModel;
|
var viewModel = order.GetViewModel;
|
||||||
@ -104,7 +113,7 @@ namespace FurnitureAssemblyFileImplement.Implements
|
|||||||
{
|
{
|
||||||
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;
|
||||||
}
|
}
|
||||||
@ -119,7 +128,7 @@ namespace FurnitureAssemblyFileImplement.Implements
|
|||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
source.Orders.Remove(order);
|
source.Orders.Remove(order);
|
||||||
source.SaveOrders();
|
source.SaveOrders();
|
||||||
|
@ -0,0 +1,139 @@
|
|||||||
|
using FurnitureAssemblyContracts.BindingModels;
|
||||||
|
using FurnitureAssemblyContracts.SearchModels;
|
||||||
|
using FurnitureAssemblyContracts.StoragesContracts;
|
||||||
|
using FurnitureAssemblyContracts.ViewModels;
|
||||||
|
using FurnitureAssemblyDataModels.Models;
|
||||||
|
using FurnitureAssemblyFileImplement.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyFileImplement.Implements
|
||||||
|
{
|
||||||
|
// Реализация интерфейса хранилища магазинов
|
||||||
|
public class ShopStorage : IShopStorage
|
||||||
|
{
|
||||||
|
private readonly DataFileSingleton _source;
|
||||||
|
|
||||||
|
public ShopStorage()
|
||||||
|
{
|
||||||
|
_source = DataFileSingleton.GetInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ShopViewModel> GetFullList()
|
||||||
|
{
|
||||||
|
return _source.Shops.Select(x => x.GetViewModel).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ShopViewModel> GetFilteredList(ShopSearchModel model)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(model.ShopName))
|
||||||
|
{
|
||||||
|
return new();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _source.Shops.Where(x => x.ShopName.Contains(model.ShopName))
|
||||||
|
.Select(x => x.GetViewModel).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShopViewModel? GetElement(ShopSearchModel model)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(model.ShopName) && !model.Id.HasValue)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _source.Shops.FirstOrDefault(x => (!string.IsNullOrEmpty(model.ShopName) && x.ShopName == model.ShopName)
|
||||||
|
|| (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShopViewModel? Insert(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
model.Id = _source.Shops.Count > 0 ? _source.Shops.Max(x => x.Id) + 1 : 1;
|
||||||
|
|
||||||
|
var newShop = Shop.Create(model);
|
||||||
|
|
||||||
|
if (newShop == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
_source.Shops.Add(newShop);
|
||||||
|
_source.SaveShops();
|
||||||
|
|
||||||
|
return newShop.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShopViewModel? Update(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
var shop = _source.Shops.FirstOrDefault(x => x.ShopName.Contains(model.ShopName) || x.Id == model.Id);
|
||||||
|
|
||||||
|
if (shop == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
shop.Update(model);
|
||||||
|
_source.SaveShops();
|
||||||
|
|
||||||
|
return shop.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShopViewModel? Delete(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
var element = _source.Shops.FirstOrDefault(x => x.Id == model.Id);
|
||||||
|
|
||||||
|
if (element != null)
|
||||||
|
{
|
||||||
|
_source.Shops.Remove(element);
|
||||||
|
_source.SaveShops();
|
||||||
|
|
||||||
|
return element.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool SellFurnitures(IFurnitureModel model, int count)
|
||||||
|
{
|
||||||
|
if (_source.Shops.Select(x => x.ShopFurnitures.FirstOrDefault(x => x.Key == model.Id).Value.Item2).Sum() < count)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var list = _source.Shops.Where(x => x.ShopFurnitures.ContainsKey(model.Id));
|
||||||
|
|
||||||
|
foreach (var shop in list)
|
||||||
|
{
|
||||||
|
if (shop.ShopFurnitures[model.Id].Item2 < count)
|
||||||
|
{
|
||||||
|
count -= shop.ShopFurnitures[model.Id].Item2;
|
||||||
|
shop.ShopFurnitures[model.Id] = (shop.ShopFurnitures[model.Id].Item1, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
shop.ShopFurnitures[model.Id] = (shop.ShopFurnitures[model.Id].Item1, shop.ShopFurnitures[model.Id].Item2 - count);
|
||||||
|
count -= count;
|
||||||
|
}
|
||||||
|
|
||||||
|
Update(new()
|
||||||
|
{
|
||||||
|
ShopName = shop.ShopName,
|
||||||
|
Address = shop.Address,
|
||||||
|
DateOpen = shop.DateOpen,
|
||||||
|
MaxCountFurnitures = shop.MaxCountFurnitures,
|
||||||
|
ShopFurnitures = shop.ShopFurnitures
|
||||||
|
});
|
||||||
|
|
||||||
|
if (count == 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -29,23 +29,6 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
[DataMember]
|
[DataMember]
|
||||||
public int Qualification { get; private set; }
|
public int Qualification { get; private set; }
|
||||||
|
|
||||||
public static Implementer? Create(ImplementerBindingModel model)
|
|
||||||
{
|
|
||||||
if (model == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Implementer()
|
|
||||||
{
|
|
||||||
Id = model.Id,
|
|
||||||
Password = model.Password,
|
|
||||||
ImplementerFIO = model.ImplementerFIO,
|
|
||||||
Qualification = model.Qualification,
|
|
||||||
WorkExperience = model.WorkExperience
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Implementer? Create(XElement element)
|
public static Implementer? Create(XElement element)
|
||||||
{
|
{
|
||||||
if (element == null)
|
if (element == null)
|
||||||
@ -53,13 +36,30 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Implementer()
|
return new()
|
||||||
{
|
{
|
||||||
Id = Convert.ToInt32(element.Attribute("Id")!.Value),
|
Id = Convert.ToInt32(element.Attribute("Id")!.Value),
|
||||||
|
ImplementerFIO = element.Element("FIO")!.Value,
|
||||||
Password = element.Element("Password")!.Value,
|
Password = element.Element("Password")!.Value,
|
||||||
ImplementerFIO = element.Element("ImplementerFIO")!.Value,
|
|
||||||
Qualification = Convert.ToInt32(element.Element("Qualification")!.Value),
|
Qualification = Convert.ToInt32(element.Element("Qualification")!.Value),
|
||||||
WorkExperience = Convert.ToInt32(element.Element("WorkExperience")!.Value)
|
WorkExperience = Convert.ToInt32(element.Element("WorkExperience")!.Value),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Implementer? Create(ImplementerBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new()
|
||||||
|
{
|
||||||
|
Id = model.Id,
|
||||||
|
ImplementerFIO = model.ImplementerFIO,
|
||||||
|
Password = model.Password,
|
||||||
|
Qualification = model.Qualification,
|
||||||
|
WorkExperience = model.WorkExperience,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,9 +70,8 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Id = model.Id;
|
|
||||||
Password = model.Password;
|
|
||||||
ImplementerFIO = model.ImplementerFIO;
|
ImplementerFIO = model.ImplementerFIO;
|
||||||
|
Password = model.Password;
|
||||||
Qualification = model.Qualification;
|
Qualification = model.Qualification;
|
||||||
WorkExperience = model.WorkExperience;
|
WorkExperience = model.WorkExperience;
|
||||||
}
|
}
|
||||||
@ -80,17 +79,17 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
public ImplementerViewModel GetViewModel => new()
|
public ImplementerViewModel GetViewModel => new()
|
||||||
{
|
{
|
||||||
Id = Id,
|
Id = Id,
|
||||||
Password = Password,
|
|
||||||
ImplementerFIO = ImplementerFIO,
|
ImplementerFIO = ImplementerFIO,
|
||||||
|
Password = Password,
|
||||||
Qualification = Qualification,
|
Qualification = Qualification,
|
||||||
WorkExperience = WorkExperience
|
|
||||||
};
|
};
|
||||||
|
|
||||||
public XElement GetXElement => new("Order",
|
public XElement GetXElement => new("Client",
|
||||||
new XAttribute("Id", Id),
|
new XAttribute("Id", Id),
|
||||||
|
new XElement("FIO", ImplementerFIO),
|
||||||
new XElement("Password", Password),
|
new XElement("Password", Password),
|
||||||
new XElement("ImplementerFIO", ImplementerFIO),
|
|
||||||
new XElement("Qualification", Qualification),
|
new XElement("Qualification", Qualification),
|
||||||
new XElement("WorkExperience", WorkExperience));
|
new XElement("WorkExperience", WorkExperience)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.Serialization;
|
using System.Runtime.Serialization;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
|
|
||||||
@ -15,7 +14,8 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
[DataContract]
|
[DataContract]
|
||||||
public class MessageInfo : IMessageInfoModel
|
public class MessageInfo : IMessageInfoModel
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
[DataMember]
|
||||||
|
public int Id { get; private set; }
|
||||||
|
|
||||||
[DataMember]
|
[DataMember]
|
||||||
public string MessageId { get; private set; } = string.Empty;
|
public string MessageId { get; private set; } = string.Empty;
|
||||||
@ -23,6 +23,8 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
[DataMember]
|
[DataMember]
|
||||||
public int? ClientId { get; private set; }
|
public int? ClientId { get; private set; }
|
||||||
|
|
||||||
|
public bool IsRead { get; private set; } = false;
|
||||||
|
|
||||||
[DataMember]
|
[DataMember]
|
||||||
public string SenderName { get; private set; } = string.Empty;
|
public string SenderName { get; private set; } = string.Empty;
|
||||||
|
|
||||||
@ -32,9 +34,11 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
[DataMember]
|
[DataMember]
|
||||||
public string Subject { get; private set; } = string.Empty;
|
public string Subject { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
[DataMember]
|
||||||
public string Body { get; private set; } = string.Empty;
|
public string Body { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
public string? Answer { get; private set; } = string.Empty;
|
||||||
|
|
||||||
public static MessageInfo? Create(MessageInfoBindingModel model)
|
public static MessageInfo? Create(MessageInfoBindingModel model)
|
||||||
{
|
{
|
||||||
if (model == null)
|
if (model == null)
|
||||||
@ -49,7 +53,9 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
SenderName = model.SenderName,
|
SenderName = model.SenderName,
|
||||||
Body = model.Body,
|
Body = model.Body,
|
||||||
Subject = model.Subject,
|
Subject = model.Subject,
|
||||||
DateDelivery = model.DateDelivery
|
DateDelivery = model.DateDelivery,
|
||||||
|
IsRead = model.IsRead,
|
||||||
|
Answer = model.Answer
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,7 +73,9 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
SenderName = element.Element("SenderName")!.Value,
|
SenderName = element.Element("SenderName")!.Value,
|
||||||
Body = element.Element("Body")!.Value,
|
Body = element.Element("Body")!.Value,
|
||||||
Subject = element.Element("Subject")!.Value,
|
Subject = element.Element("Subject")!.Value,
|
||||||
DateDelivery = Convert.ToDateTime(element.Element("DateDelivery")!.Value)
|
DateDelivery = Convert.ToDateTime(element.Element("DateDelivery")!.Value),
|
||||||
|
IsRead = Convert.ToBoolean(element.Element("IsRead")!.Value),
|
||||||
|
Answer = element.Element("Answer")!.Value
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,6 +92,9 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
Body = model.Body;
|
Body = model.Body;
|
||||||
Subject = model.Subject;
|
Subject = model.Subject;
|
||||||
DateDelivery = model.DateDelivery;
|
DateDelivery = model.DateDelivery;
|
||||||
|
IsRead = model.IsRead;
|
||||||
|
Answer = model.Answer;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageInfoViewModel GetViewModel => new()
|
public MessageInfoViewModel GetViewModel => new()
|
||||||
@ -93,7 +104,9 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
SenderName = SenderName,
|
SenderName = SenderName,
|
||||||
Body = Body,
|
Body = Body,
|
||||||
Subject = Subject,
|
Subject = Subject,
|
||||||
DateDelivery = DateDelivery
|
DateDelivery = DateDelivery,
|
||||||
|
IsRead = IsRead,
|
||||||
|
Answer = Answer
|
||||||
};
|
};
|
||||||
|
|
||||||
public XElement GetXElement => new("MessageInfo",
|
public XElement GetXElement => new("MessageInfo",
|
||||||
@ -102,6 +115,8 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
new XElement("SenderName", SenderName),
|
new XElement("SenderName", SenderName),
|
||||||
new XElement("Body", Body),
|
new XElement("Body", Body),
|
||||||
new XElement("Subject", Subject),
|
new XElement("Subject", Subject),
|
||||||
new XElement("DateDelivery", DateDelivery.ToString()));
|
new XElement("DateDelivery", DateDelivery.ToString()),
|
||||||
|
new XElement("IsRead", IsRead),
|
||||||
|
new XElement("Answer", Answer));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
public int ClientId { get; private set; }
|
public int ClientId { get; private set; }
|
||||||
|
|
||||||
[DataMember]
|
[DataMember]
|
||||||
public int? ImplementerId { get; private set; }
|
public int? ImplementerId { get; set; }
|
||||||
|
|
||||||
[DataMember]
|
[DataMember]
|
||||||
public int Count { get; private set; }
|
public int Count { get; private set; }
|
||||||
@ -76,7 +76,7 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
Id = Convert.ToInt32(element.Attribute("Id")!.Value),
|
Id = Convert.ToInt32(element.Attribute("Id")!.Value),
|
||||||
FurnitureId = Convert.ToInt32(element.Element("FurnitureId")!.Value),
|
FurnitureId = Convert.ToInt32(element.Element("FurnitureId")!.Value),
|
||||||
ClientId = Convert.ToInt32(element.Attribute("Id")!.Value),
|
ClientId = Convert.ToInt32(element.Attribute("Id")!.Value),
|
||||||
ImplementerId = Convert.ToInt32(element.Attribute("ImplementerId")!.Value),
|
ImplementerId = Convert.ToInt32(element.Element("ImplementerId")!.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),
|
Status = (OrderStatus)Enum.Parse(typeof(OrderStatus), element.Element("Status")!.Value),
|
||||||
@ -93,6 +93,7 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImplementerId = model.ImplementerId;
|
||||||
Status = model.Status;
|
Status = model.Status;
|
||||||
DateImplement = model.DateImplement;
|
DateImplement = model.DateImplement;
|
||||||
}
|
}
|
||||||
@ -103,6 +104,7 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
FurnitureId = FurnitureId,
|
FurnitureId = FurnitureId,
|
||||||
ClientId = ClientId,
|
ClientId = ClientId,
|
||||||
ImplementerId = ImplementerId,
|
ImplementerId = ImplementerId,
|
||||||
|
ImplementerFIO = DataFileSingleton.GetInstance().Implementers.FirstOrDefault(x => x.Id == ImplementerId)?.ImplementerFIO ?? string.Empty,
|
||||||
Count = Count,
|
Count = Count,
|
||||||
Sum = Sum,
|
Sum = Sum,
|
||||||
Status = Status,
|
Status = Status,
|
||||||
@ -114,7 +116,7 @@ namespace FurnitureAssemblyFileImplement.Models
|
|||||||
new XAttribute("Id", Id),
|
new XAttribute("Id", Id),
|
||||||
new XElement("FurnitureId", FurnitureId.ToString()),
|
new XElement("FurnitureId", FurnitureId.ToString()),
|
||||||
new XElement("ClientId", ClientId.ToString()),
|
new XElement("ClientId", ClientId.ToString()),
|
||||||
new XElement("ImplementerId", ImplementerId.ToString()),
|
new XElement("ImplementerId", ImplementerId),
|
||||||
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("Status", Status.ToString()),
|
||||||
|
111
FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Shop.cs
Normal file
111
FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Shop.cs
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
using FurnitureAssemblyContracts.BindingModels;
|
||||||
|
using FurnitureAssemblyContracts.ViewModels;
|
||||||
|
using FurnitureAssemblyDataModels.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyFileImplement.Models
|
||||||
|
{
|
||||||
|
// Класс, реализующий интерфейс модели магазина
|
||||||
|
public class Shop : IShopModel
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
public string ShopName { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public string Address { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public DateTime DateOpen { get; set; }
|
||||||
|
|
||||||
|
public int MaxCountFurnitures { get; set; }
|
||||||
|
|
||||||
|
public Dictionary<int, int> countFurniture { get; private set; } = new();
|
||||||
|
|
||||||
|
public Dictionary<int, (IFurnitureModel, int)> _furnitures = null;
|
||||||
|
|
||||||
|
public Dictionary<int, (IFurnitureModel, int)> ShopFurnitures
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_furnitures == null)
|
||||||
|
{
|
||||||
|
var source = DataFileSingleton.GetInstance();
|
||||||
|
_furnitures = countFurniture.ToDictionary(x => x.Key, y => ((source.Furnitures.FirstOrDefault(z => z.Id == y.Key) as IFurnitureModel)!, y.Value));
|
||||||
|
}
|
||||||
|
|
||||||
|
return _furnitures;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Shop? Create(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new Shop()
|
||||||
|
{
|
||||||
|
Id = model.Id,
|
||||||
|
ShopName = model.ShopName,
|
||||||
|
Address = model.Address,
|
||||||
|
DateOpen = model.DateOpen,
|
||||||
|
MaxCountFurnitures = model.MaxCountFurnitures,
|
||||||
|
countFurniture = model.ShopFurnitures.ToDictionary(x => x.Key, x => x.Value.Item2)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
public static Shop? Create(XElement element)
|
||||||
|
|
||||||
|
{
|
||||||
|
if (element == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new Shop()
|
||||||
|
{
|
||||||
|
Id = Convert.ToInt32(element.Attribute("Id")!.Value),
|
||||||
|
ShopName = element.Element("ShopName")!.Value,
|
||||||
|
Address = element.Element("Address")!.Value,
|
||||||
|
DateOpen = Convert.ToDateTime(element.Element("DateOpen")!.Value),
|
||||||
|
MaxCountFurnitures = Convert.ToInt32(element.Element("MaxCountFurnitures")!.Value),
|
||||||
|
countFurniture = element.Element("Furnitures")!.Elements("Furnitures").ToDictionary(x => Convert.ToInt32(x.Element("Key")?.Value), x => Convert.ToInt32(x.Element("Value")?.Value))
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update(ShopBindingModel? model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ShopName = model.ShopName;
|
||||||
|
Address = model.Address;
|
||||||
|
DateOpen = model.DateOpen;
|
||||||
|
MaxCountFurnitures = model.MaxCountFurnitures;
|
||||||
|
countFurniture = model.ShopFurnitures.ToDictionary(x => x.Key, x => x.Value.Item2);
|
||||||
|
_furnitures = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShopViewModel GetViewModel => new()
|
||||||
|
{
|
||||||
|
Id = Id,
|
||||||
|
ShopName = ShopName,
|
||||||
|
Address = Address,
|
||||||
|
DateOpen = DateOpen,
|
||||||
|
MaxCountFurnitures = MaxCountFurnitures,
|
||||||
|
ShopFurnitures = ShopFurnitures
|
||||||
|
};
|
||||||
|
public XElement GetXElement => new("Shop",
|
||||||
|
new XAttribute("Id", Id),
|
||||||
|
new XElement("ShopName", ShopName),
|
||||||
|
new XElement("Address", Address),
|
||||||
|
new XElement("DateOpen", DateOpen.ToString()),
|
||||||
|
new XElement("MaxCountFurnitures", MaxCountFurnitures.ToString()),
|
||||||
|
new XElement("Furnitures", countFurniture.Select(x => new XElement("Furnitures",
|
||||||
|
new XElement("Key", x.Key),
|
||||||
|
new XElement("Value", x.Value))).ToArray()));
|
||||||
|
}
|
||||||
|
}
|
@ -21,7 +21,10 @@ namespace FurnitureAssemblyListImplement
|
|||||||
// Список для хранения заказов
|
// Список для хранения заказов
|
||||||
public List<Order> Orders { get; set; }
|
public List<Order> Orders { get; set; }
|
||||||
|
|
||||||
// Список для хранения клиентов
|
// Список для хранения Магазинов
|
||||||
|
public List<Shop> Shops { get; set; }
|
||||||
|
|
||||||
|
// Список для хранения Клиентов
|
||||||
public List<Client> Clients { get; set; }
|
public List<Client> Clients { get; set; }
|
||||||
|
|
||||||
// Список для хранения исполнителей
|
// Список для хранения исполнителей
|
||||||
@ -35,6 +38,7 @@ namespace FurnitureAssemblyListImplement
|
|||||||
WorkPiece = new List<WorkPiece>();
|
WorkPiece = new List<WorkPiece>();
|
||||||
Furnitures = new List<Furniture>();
|
Furnitures = new List<Furniture>();
|
||||||
Orders = new List<Order>();
|
Orders = new List<Order>();
|
||||||
|
Shops = new List<Shop>();
|
||||||
Clients = new List<Client>();
|
Clients = new List<Client>();
|
||||||
Implementers = new List<Implementer>();
|
Implementers = new List<Implementer>();
|
||||||
MessageInfos = new List<MessageInfo>();
|
MessageInfos = new List<MessageInfo>();
|
||||||
@ -42,7 +46,7 @@ namespace FurnitureAssemblyListImplement
|
|||||||
|
|
||||||
public static DataListSingleton GetInstance()
|
public static DataListSingleton GetInstance()
|
||||||
{
|
{
|
||||||
if (_instance == null)
|
if(_instance == null)
|
||||||
{
|
{
|
||||||
_instance = new DataListSingleton();
|
_instance = new DataListSingleton();
|
||||||
}
|
}
|
||||||
|
@ -11,4 +11,8 @@
|
|||||||
<ProjectReference Include="..\FurnitureAssemblyDataModels\FurnitureAssemblyDataModels.csproj" />
|
<ProjectReference Include="..\FurnitureAssemblyDataModels\FurnitureAssemblyDataModels.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
|
<Exec Command="copy /Y "$(TargetDir)*.dll" "$(SolutionDir)ImplementationExtensions\*.dll"" />
|
||||||
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -13,76 +13,81 @@ namespace FurnitureAssemblyListImplement.Implements
|
|||||||
{
|
{
|
||||||
public class MessageInfoStorage : IMessageInfoStorage
|
public class MessageInfoStorage : IMessageInfoStorage
|
||||||
{
|
{
|
||||||
// Поле для работы со списком изделий
|
|
||||||
private readonly DataListSingleton _source;
|
private readonly DataListSingleton _source;
|
||||||
|
|
||||||
public MessageInfoStorage()
|
public MessageInfoStorage()
|
||||||
{
|
{
|
||||||
_source = DataListSingleton.GetInstance();
|
_source = DataListSingleton.GetInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<MessageInfoViewModel> GetFullList()
|
public MessageInfoViewModel? GetElement(MessageInfoSearchModel model)
|
||||||
{
|
{
|
||||||
var result = new List<MessageInfoViewModel>();
|
foreach (var message in _source.MessageInfos)
|
||||||
|
|
||||||
foreach (var messageInfo in _source.MessageInfos)
|
|
||||||
{
|
{
|
||||||
result.Add(messageInfo.GetViewModel);
|
if (model.MessageId != null && model.MessageId.Equals(message.MessageId))
|
||||||
|
return message.GetViewModel;
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<MessageInfoViewModel> GetFilteredList(MessageInfoSearchModel model)
|
public List<MessageInfoViewModel> GetFilteredList(MessageInfoSearchModel model)
|
||||||
{
|
{
|
||||||
var result = new List<MessageInfoViewModel>();
|
List<MessageInfoViewModel> result = new();
|
||||||
|
foreach (var item in _source.MessageInfos)
|
||||||
|
{
|
||||||
|
if (item.ClientId.HasValue && item.ClientId == model.ClientId)
|
||||||
|
{
|
||||||
|
result.Add(item.GetViewModel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(model.MessageId))
|
if (!(model.Page.HasValue && model.PageSize.HasValue))
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
if (model.Page * model.PageSize >= result.Count)
|
||||||
foreach (var messageInfo in _source.MessageInfos)
|
|
||||||
{
|
{
|
||||||
if (messageInfo.ClientId == model.ClientId)
|
return null;
|
||||||
{
|
|
||||||
result.Add(messageInfo.GetViewModel);
|
|
||||||
}
|
}
|
||||||
|
List<MessageInfoViewModel> filteredResult = new();
|
||||||
|
for (var i = (model.Page.Value - 1) * model.PageSize.Value; i < model.Page.Value * model.PageSize.Value; i++)
|
||||||
|
{
|
||||||
|
filteredResult.Add(result[i]);
|
||||||
|
}
|
||||||
|
return filteredResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<MessageInfoViewModel> GetFullList()
|
||||||
|
{
|
||||||
|
List<MessageInfoViewModel> result = new();
|
||||||
|
foreach (var item in _source.MessageInfos)
|
||||||
|
{
|
||||||
|
result.Add(item.GetViewModel);
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageInfoViewModel? GetElement(MessageInfoSearchModel model)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(model.MessageId))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var messageInfo in _source.MessageInfos)
|
|
||||||
{
|
|
||||||
if (messageInfo.MessageId == model.MessageId)
|
|
||||||
{
|
|
||||||
return messageInfo.GetViewModel;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MessageInfoViewModel? Insert(MessageInfoBindingModel model)
|
public MessageInfoViewModel? Insert(MessageInfoBindingModel model)
|
||||||
{
|
{
|
||||||
var newMessage = MessageInfo.Create(model);
|
var newMessage = MessageInfo.Create(model);
|
||||||
|
|
||||||
if (newMessage == null)
|
if (newMessage == null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
_source.MessageInfos.Add(newMessage);
|
_source.MessageInfos.Add(newMessage);
|
||||||
|
|
||||||
return newMessage.GetViewModel;
|
return newMessage.GetViewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MessageInfoViewModel? Update(MessageInfoBindingModel model)
|
||||||
|
{
|
||||||
|
foreach (var message in _source.MessageInfos)
|
||||||
|
{
|
||||||
|
if (message.MessageId.Equals(model.MessageId))
|
||||||
|
{
|
||||||
|
message.Update(model);
|
||||||
|
return message.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ namespace FurnitureAssemblyListImplement.Implements
|
|||||||
{
|
{
|
||||||
var result = new List<OrderViewModel>();
|
var result = new List<OrderViewModel>();
|
||||||
|
|
||||||
foreach(var order in _source.Orders)
|
foreach (var order in _source.Orders)
|
||||||
{
|
{
|
||||||
result.Add(GetViewModel(order));
|
result.Add(GetViewModel(order));
|
||||||
}
|
}
|
||||||
@ -41,12 +41,19 @@ namespace FurnitureAssemblyListImplement.Implements
|
|||||||
{
|
{
|
||||||
var result = new List<OrderViewModel>();
|
var result = new List<OrderViewModel>();
|
||||||
|
|
||||||
if (!model.Id.HasValue)
|
if (!model.Id.HasValue && model.DateFrom.HasValue && model.DateTo.HasValue)
|
||||||
{
|
{
|
||||||
return result;
|
foreach (var order in _source.Orders)
|
||||||
|
{
|
||||||
|
if (order.DateCreate >= model.DateFrom && order.DateCreate <= model.DateTo)
|
||||||
|
{
|
||||||
|
result.Add(GetViewModel(order));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (model.ClientId.HasValue)
|
return result;
|
||||||
|
}
|
||||||
|
else if (model.ClientId.HasValue)
|
||||||
{
|
{
|
||||||
foreach (var order in _source.Orders)
|
foreach (var order in _source.Orders)
|
||||||
{
|
{
|
||||||
@ -55,17 +62,27 @@ namespace FurnitureAssemblyListImplement.Implements
|
|||||||
result.Add(GetViewModel(order));
|
result.Add(GetViewModel(order));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (model.DateFrom.HasValue && model.DateTo.HasValue)
|
return result;
|
||||||
|
}
|
||||||
|
else if (model.Status.HasValue)
|
||||||
{
|
{
|
||||||
foreach (var order in _source.Orders)
|
foreach (var order in _source.Orders)
|
||||||
{
|
{
|
||||||
if (order.Id == model.Id || model.DateFrom <= order.DateCreate && order.DateCreate <= model.DateTo)
|
if (order.Status == model.Status)
|
||||||
{
|
{
|
||||||
result.Add(GetViewModel(order));
|
result.Add(GetViewModel(order));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var order in _source.Orders)
|
||||||
|
{
|
||||||
|
if (order.Id == model.Id)
|
||||||
|
{
|
||||||
|
result.Add(GetViewModel(order));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -90,7 +107,7 @@ namespace FurnitureAssemblyListImplement.Implements
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Метод для записи названия изделия на форме с заказами и исполнителя
|
// Метод для записи названия изделия на форме с заказами
|
||||||
private OrderViewModel GetViewModel(Order order)
|
private OrderViewModel GetViewModel(Order order)
|
||||||
{
|
{
|
||||||
var viewModel = order.GetViewModel;
|
var viewModel = order.GetViewModel;
|
||||||
@ -124,6 +141,7 @@ namespace FurnitureAssemblyListImplement.Implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return viewModel;
|
return viewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,143 @@
|
|||||||
|
using FurnitureAssemblyContracts.BindingModels;
|
||||||
|
using FurnitureAssemblyContracts.SearchModels;
|
||||||
|
using FurnitureAssemblyContracts.StoragesContracts;
|
||||||
|
using FurnitureAssemblyContracts.ViewModels;
|
||||||
|
using FurnitureAssemblyDataModels.Models;
|
||||||
|
using FurnitureAssemblyListImplement.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyListImplement.Implements
|
||||||
|
{
|
||||||
|
// Класс, реализующий интерфейс хранилища магазинов
|
||||||
|
public class ShopStorage : IShopStorage
|
||||||
|
{
|
||||||
|
// Поле для работы со списком магазинов
|
||||||
|
private readonly DataListSingleton _source;
|
||||||
|
|
||||||
|
// Получение в конструкторе объекта DataListSingleton
|
||||||
|
public ShopStorage()
|
||||||
|
{
|
||||||
|
_source = DataListSingleton.GetInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Получение элемента из списка заготовок
|
||||||
|
public ShopViewModel? GetElement(ShopSearchModel model)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(model.ShopName) && !model.Id.HasValue)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var shop in _source.Shops)
|
||||||
|
{
|
||||||
|
if ((!string.IsNullOrEmpty(model.ShopName) && shop.ShopName == model.ShopName) || (model.Id.HasValue && shop.Id == model.Id))
|
||||||
|
{
|
||||||
|
return shop.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Получение отфильтрованного списка заказов
|
||||||
|
public List<ShopViewModel> GetFilteredList(ShopSearchModel model)
|
||||||
|
{
|
||||||
|
var result = new List<ShopViewModel>();
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(model.ShopName))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var shop in _source.Shops)
|
||||||
|
{
|
||||||
|
if (shop.ShopName.Contains(model.ShopName))
|
||||||
|
{
|
||||||
|
result.Add(shop.GetViewModel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Получение полного списка заготовок
|
||||||
|
public List<ShopViewModel> GetFullList()
|
||||||
|
{
|
||||||
|
var result = new List<ShopViewModel>();
|
||||||
|
|
||||||
|
foreach (var shop in _source.Shops)
|
||||||
|
{
|
||||||
|
result.Add(shop.GetViewModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// При создании магазина определяем для него новый id: ищем max id и прибавляем к нему 1
|
||||||
|
public ShopViewModel? Insert(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
model.Id = 1;
|
||||||
|
|
||||||
|
foreach (var shop in _source.Shops)
|
||||||
|
{
|
||||||
|
if (model.Id <= shop.Id)
|
||||||
|
{
|
||||||
|
model.Id = shop.Id + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var newShop = Shop.Create(model);
|
||||||
|
|
||||||
|
if (newShop == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
_source.Shops.Add(newShop);
|
||||||
|
|
||||||
|
return newShop.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Обновление магазина
|
||||||
|
public ShopViewModel? Update(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
foreach (var shop in _source.Shops)
|
||||||
|
{
|
||||||
|
if (shop.Id == model.Id)
|
||||||
|
{
|
||||||
|
shop.Update(model);
|
||||||
|
|
||||||
|
return shop.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Удаление магазина
|
||||||
|
public ShopViewModel? Delete(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < _source.Shops.Count; ++i)
|
||||||
|
{
|
||||||
|
if (_source.Shops[i].Id == model.Id)
|
||||||
|
{
|
||||||
|
var element = _source.Shops[i];
|
||||||
|
_source.Shops.RemoveAt(i);
|
||||||
|
|
||||||
|
return element.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool SellFurnitures(IFurnitureModel model, int count)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -27,6 +27,8 @@ namespace FurnitureAssemblyListImplement
|
|||||||
|
|
||||||
DependencyManager.Instance.RegisterType<IFurnitureStorage, FurnitureStorage>();
|
DependencyManager.Instance.RegisterType<IFurnitureStorage, FurnitureStorage>();
|
||||||
|
|
||||||
|
DependencyManager.Instance.RegisterType<IShopStorage, ShopStorage>();
|
||||||
|
|
||||||
DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
|
DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,6 @@ using FurnitureAssemblyContracts.ViewModels;
|
|||||||
using FurnitureAssemblyDataModels.Models;
|
using FurnitureAssemblyDataModels.Models;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -18,6 +17,8 @@ namespace FurnitureAssemblyListImplement.Models
|
|||||||
|
|
||||||
public int? ClientId { get; private set; }
|
public int? ClientId { get; private set; }
|
||||||
|
|
||||||
|
public bool IsRead { get; private set; }
|
||||||
|
|
||||||
public string SenderName { get; private set; } = string.Empty;
|
public string SenderName { get; private set; } = string.Empty;
|
||||||
|
|
||||||
public DateTime DateDelivery { get; private set; } = DateTime.Now;
|
public DateTime DateDelivery { get; private set; } = DateTime.Now;
|
||||||
@ -26,6 +27,8 @@ namespace FurnitureAssemblyListImplement.Models
|
|||||||
|
|
||||||
public string Body { get; private set; } = string.Empty;
|
public string Body { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
public string? Answer { get; private set; } = string.Empty;
|
||||||
|
|
||||||
// Метод для создания объекта от класса-компонента на основе класса-BindingModel
|
// Метод для создания объекта от класса-компонента на основе класса-BindingModel
|
||||||
public static MessageInfo? Create(MessageInfoBindingModel? model)
|
public static MessageInfo? Create(MessageInfoBindingModel? model)
|
||||||
{
|
{
|
||||||
@ -41,7 +44,9 @@ namespace FurnitureAssemblyListImplement.Models
|
|||||||
SenderName = model.SenderName,
|
SenderName = model.SenderName,
|
||||||
DateDelivery = model.DateDelivery,
|
DateDelivery = model.DateDelivery,
|
||||||
Subject = model.Subject,
|
Subject = model.Subject,
|
||||||
Body = model.Body
|
Body = model.Body,
|
||||||
|
IsRead = model.IsRead,
|
||||||
|
Answer = model.Answer
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,6 +64,9 @@ namespace FurnitureAssemblyListImplement.Models
|
|||||||
DateDelivery = model.DateDelivery;
|
DateDelivery = model.DateDelivery;
|
||||||
Subject = model.Subject;
|
Subject = model.Subject;
|
||||||
Body = model.Body;
|
Body = model.Body;
|
||||||
|
IsRead = model.IsRead;
|
||||||
|
Answer = model.Answer;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Метод для создания объекта класса ViewModel на основе данных объекта класса-компонента
|
// Метод для создания объекта класса ViewModel на основе данных объекта класса-компонента
|
||||||
@ -69,7 +77,9 @@ namespace FurnitureAssemblyListImplement.Models
|
|||||||
SenderName = SenderName,
|
SenderName = SenderName,
|
||||||
DateDelivery = DateDelivery,
|
DateDelivery = DateDelivery,
|
||||||
Subject = Subject,
|
Subject = Subject,
|
||||||
Body = Body
|
Body = Body,
|
||||||
|
IsRead = IsRead,
|
||||||
|
Answer = Answer
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,71 @@
|
|||||||
|
using FurnitureAssemblyContracts.BindingModels;
|
||||||
|
using FurnitureAssemblyContracts.ViewModels;
|
||||||
|
using FurnitureAssemblyDataModels.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyListImplement.Models
|
||||||
|
{
|
||||||
|
// Класс, реализующий интерфейс модели магазина
|
||||||
|
public class Shop : IShopModel
|
||||||
|
{
|
||||||
|
// Методы set сделали приватными, чтобы исключить неразрешённые манипуляции
|
||||||
|
public string ShopName { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
public string Address { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
public DateTime DateOpen { get; private set; }
|
||||||
|
|
||||||
|
public int Id { get; private set; }
|
||||||
|
|
||||||
|
public int MaxCountFurnitures { get; set; }
|
||||||
|
|
||||||
|
public Dictionary<int, (IFurnitureModel, int)> ShopFurnitures { get; private set; } =
|
||||||
|
new Dictionary<int, (IFurnitureModel, int)>();
|
||||||
|
|
||||||
|
// Метод для создания объекта от класса-компонента на основе класса-BindingModel
|
||||||
|
public static Shop? Create(ShopBindingModel? model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Shop()
|
||||||
|
{
|
||||||
|
Id = model.Id,
|
||||||
|
ShopName = model.ShopName,
|
||||||
|
Address = model.Address,
|
||||||
|
DateOpen = model.DateOpen,
|
||||||
|
ShopFurnitures = model.ShopFurnitures
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Метод изменения существующего объекта
|
||||||
|
public void Update(ShopBindingModel? model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ShopName = model.ShopName;
|
||||||
|
Address = model.Address;
|
||||||
|
DateOpen = model.DateOpen;
|
||||||
|
ShopFurnitures = model.ShopFurnitures;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Метод для создания объекта класса ViewModel на основе данных объекта класса-компонента
|
||||||
|
public ShopViewModel GetViewModel => new()
|
||||||
|
{
|
||||||
|
Id = Id,
|
||||||
|
ShopName = ShopName,
|
||||||
|
Address = Address,
|
||||||
|
DateOpen = DateOpen,
|
||||||
|
ShopFurnitures = ShopFurnitures
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -17,6 +17,8 @@ namespace FurnitureAssemblyRestApi.Controllers
|
|||||||
|
|
||||||
private readonly IMessageInfoLogic _mailLogic;
|
private readonly IMessageInfoLogic _mailLogic;
|
||||||
|
|
||||||
|
public int pageSize = 3;
|
||||||
|
|
||||||
public ClientController(IClientLogic logic, ILogger<ClientController> logger, IMessageInfoLogic mailLogic)
|
public ClientController(IClientLogic logic, ILogger<ClientController> logger, IMessageInfoLogic mailLogic)
|
||||||
{
|
{
|
||||||
_logic = logic;
|
_logic = logic;
|
||||||
@ -74,13 +76,15 @@ namespace FurnitureAssemblyRestApi.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public List<MessageInfoViewModel>? GetMessages(int clientId)
|
public List<MessageInfoViewModel>? GetMessages(int clientId, int page)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return _mailLogic.ReadList(new MessageInfoSearchModel
|
return _mailLogic.ReadList(new MessageInfoSearchModel
|
||||||
{
|
{
|
||||||
ClientId = clientId
|
ClientId = clientId,
|
||||||
|
Page = page,
|
||||||
|
PageSize = pageSize
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -0,0 +1,112 @@
|
|||||||
|
using FurnitureAssemblyContracts.BindingModels;
|
||||||
|
using FurnitureAssemblyContracts.BusinessLogicsContracts;
|
||||||
|
using FurnitureAssemblyContracts.SearchModels;
|
||||||
|
using FurnitureAssemblyContracts.ViewModels;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyRestApi.Controllers
|
||||||
|
{
|
||||||
|
[Route("api/[controller]/[action]")]
|
||||||
|
[ApiController]
|
||||||
|
public class ShopController : Controller
|
||||||
|
{
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
|
private readonly IShopLogic _shop;
|
||||||
|
|
||||||
|
public ShopController(ILogger<ShopController> logger, IShopLogic shopLogic)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_shop = shopLogic;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public List<ShopViewModel>? GetShopList()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
List<ShopViewModel> shops = _shop.ReadList(null);
|
||||||
|
for (int i = 0; i < shops.Count; i++)
|
||||||
|
shops[i].FurnitureCount = shops[i].ShopFurnitures.Values.ToList().Select(x => (x.Item1.FurnitureName, x.Item2).ToTuple()).ToList();
|
||||||
|
return shops;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка получения списка магазинов");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public ShopViewModel? GetShop(int shopId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return _shop.ReadElement(new ShopSearchModel
|
||||||
|
{
|
||||||
|
Id = shopId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка получения магазина по id={Id}", shopId);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void CreateShop(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_shop.Create(model);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка создания магазина");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void UpdateShop(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_shop.Update(model);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка обновления магазина");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void DeleteShop(ShopBindingModel model)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_shop.Delete(model);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка удаления магазина");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[HttpPost]
|
||||||
|
public void SupplyFurnituresToShop(Tuple<ShopSearchModel, FurnitureBindingModel, int> shop_furniture)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_shop.AddFurniture(shop_furniture.Item1, shop_furniture.Item2, shop_furniture.Item3);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка пополнения магазина");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
@ -18,17 +18,19 @@ builder.Logging.AddLog4Net("log4net.config");
|
|||||||
builder.Services.AddTransient<IClientStorage, ClientStorage>();
|
builder.Services.AddTransient<IClientStorage, ClientStorage>();
|
||||||
builder.Services.AddTransient<IOrderStorage, OrderStorage>();
|
builder.Services.AddTransient<IOrderStorage, OrderStorage>();
|
||||||
builder.Services.AddTransient<IFurnitureStorage, FurnitureStorage>();
|
builder.Services.AddTransient<IFurnitureStorage, FurnitureStorage>();
|
||||||
|
builder.Services.AddTransient<IShopStorage, ShopStorage>();
|
||||||
builder.Services.AddTransient<IImplementerStorage, ImplementerStorage>();
|
builder.Services.AddTransient<IImplementerStorage, ImplementerStorage>();
|
||||||
builder.Services.AddTransient<IMessageInfoStorage, MessageInfoStorage>();
|
builder.Services.AddTransient<IMessageInfoStorage, MessageInfoStorage>();
|
||||||
|
|
||||||
builder.Services.AddTransient<IOrderLogic, OrderLogic>();
|
builder.Services.AddTransient<IOrderLogic, OrderLogic>();
|
||||||
builder.Services.AddTransient<IClientLogic, ClientLogic>();
|
builder.Services.AddTransient<IClientLogic, ClientLogic>();
|
||||||
builder.Services.AddTransient<IFurnitureLogic, FurnitureLogic>();
|
builder.Services.AddTransient<IFurnitureLogic, FurnitureLogic>();
|
||||||
|
builder.Services.AddTransient<IShopLogic, ShopLogic>();
|
||||||
builder.Services.AddTransient<IImplementerLogic, ImplementerLogic>();
|
builder.Services.AddTransient<IImplementerLogic, ImplementerLogic>();
|
||||||
builder.Services.AddTransient<IMessageInfoLogic, MessageInfoLogic>();
|
builder.Services.AddTransient<IMessageInfoLogic, MessageInfoLogic>();
|
||||||
|
|
||||||
builder.Services.AddSingleton<AbstractMailWorker, MailKitWorker>();
|
|
||||||
|
|
||||||
|
builder.Services.AddSingleton<AbstractMailWorker, MailKitWorker>();
|
||||||
|
|
||||||
builder.Services.AddControllers();
|
builder.Services.AddControllers();
|
||||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
},
|
},
|
||||||
"dotnetRunMessages": true,
|
"dotnetRunMessages": true,
|
||||||
"applicationUrl": "https://localhost:7159;http://localhost:5159"
|
"applicationUrl": "https://localhost:7199;http://localhost:5159"
|
||||||
},
|
},
|
||||||
"IIS Express": {
|
"IIS Express": {
|
||||||
"commandName": "IISExpress",
|
"commandName": "IISExpress",
|
||||||
@ -24,8 +24,8 @@
|
|||||||
"windowsAuthentication": false,
|
"windowsAuthentication": false,
|
||||||
"anonymousAuthentication": true,
|
"anonymousAuthentication": true,
|
||||||
"iisExpress": {
|
"iisExpress": {
|
||||||
"applicationUrl": "http://localhost:25080",
|
"applicationUrl": "http://localhost:46342",
|
||||||
"sslPort": 44382
|
"sslPort": 44378
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
66
FurnitureAssembly/FurnitureAssemblyShopApp/APIClient.cs
Normal file
66
FurnitureAssembly/FurnitureAssemblyShopApp/APIClient.cs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using System.Net.Http.Headers;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyShopApp
|
||||||
|
{
|
||||||
|
public static class APIClient
|
||||||
|
{
|
||||||
|
private static readonly HttpClient _client = new();
|
||||||
|
|
||||||
|
public static bool isAuth { get; private set; } = false;
|
||||||
|
|
||||||
|
public static string ConfigPassword { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
public static bool Login(string password)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(password))
|
||||||
|
{
|
||||||
|
throw new Exception("Enter the password");
|
||||||
|
}
|
||||||
|
|
||||||
|
return isAuth = password.Equals(ConfigPassword);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Connect(IConfiguration configuration)
|
||||||
|
{
|
||||||
|
ConfigPassword = configuration["Password"];
|
||||||
|
|
||||||
|
_client.BaseAddress = new Uri(configuration["IPAddress"]);
|
||||||
|
_client.DefaultRequestHeaders.Accept.Clear();
|
||||||
|
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static T? GetRequest<T>(string requestUrl)
|
||||||
|
{
|
||||||
|
var response = _client.GetAsync(requestUrl);
|
||||||
|
|
||||||
|
var result = response.Result.Content.ReadAsStringAsync().Result;
|
||||||
|
|
||||||
|
if (response.Result.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
return JsonConvert.DeserializeObject<T>(result);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new Exception(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void PostRequest<T>(string requestUrl, T model)
|
||||||
|
{
|
||||||
|
var json = JsonConvert.SerializeObject(model);
|
||||||
|
|
||||||
|
var data = new StringContent(json, Encoding.UTF8, "application/json");
|
||||||
|
|
||||||
|
var response = _client.PostAsync(requestUrl, data);
|
||||||
|
|
||||||
|
var result = response.Result.Content.ReadAsStringAsync().Result;
|
||||||
|
|
||||||
|
if (!response.Result.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
throw new Exception(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,160 @@
|
|||||||
|
using FurnitureAssemblyContracts.BindingModels;
|
||||||
|
using FurnitureAssemblyContracts.SearchModels;
|
||||||
|
using FurnitureAssemblyContracts.ViewModels;
|
||||||
|
using FurnitureAssemblyShopApp.Models;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
namespace FurnitureAssemblyShopApp.Controllers
|
||||||
|
{
|
||||||
|
public class HomeController : Controller
|
||||||
|
{
|
||||||
|
private readonly ILogger<HomeController> _logger;
|
||||||
|
|
||||||
|
public HomeController(ILogger<HomeController> logger)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IActionResult Index()
|
||||||
|
{
|
||||||
|
if (!APIClient.isAuth)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(APIClient.GetRequest<List<ShopViewModel>>($"api/shop/getshoplist"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public IActionResult Privacy()
|
||||||
|
{
|
||||||
|
if (!APIClient.isAuth)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
|
}
|
||||||
|
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult Enter()
|
||||||
|
{
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void Enter(string password)
|
||||||
|
{
|
||||||
|
if (!APIClient.Login(password))
|
||||||
|
{
|
||||||
|
throw new Exception("Wrong password");
|
||||||
|
}
|
||||||
|
|
||||||
|
Response.Redirect("Index");
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult Create()
|
||||||
|
{
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void Create(string shopname, string address, DateTime DateOpening, int count)
|
||||||
|
{
|
||||||
|
if (!APIClient.isAuth)
|
||||||
|
{
|
||||||
|
throw new Exception("Как вы сюда попали? Сюда могут входить только избранные");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count <= 0)
|
||||||
|
{
|
||||||
|
throw new Exception("Максимальное количество товаров должно быть больше либо равно 0");
|
||||||
|
}
|
||||||
|
|
||||||
|
APIClient.PostRequest("api/shop/createshop", new ShopBindingModel
|
||||||
|
{
|
||||||
|
ShopName = shopname,
|
||||||
|
MaxCountFurnitures = count,
|
||||||
|
Address = address,
|
||||||
|
DateOpen = DateOpening
|
||||||
|
});
|
||||||
|
|
||||||
|
Response.Redirect("Index");
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult Delete()
|
||||||
|
{
|
||||||
|
ViewBag.Shops = APIClient.GetRequest<List<ShopViewModel>>("api/shop/getshoplist");
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void Delete(int shop)
|
||||||
|
{
|
||||||
|
if (!APIClient.isAuth)
|
||||||
|
{
|
||||||
|
throw new Exception("Как вы сюда попали? Сюда могут входить только авторизованные");
|
||||||
|
}
|
||||||
|
|
||||||
|
APIClient.PostRequest($"api/shop/deleteshop", new ShopBindingModel { Id = shop });
|
||||||
|
|
||||||
|
Response.Redirect("Index");
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult Update()
|
||||||
|
{
|
||||||
|
ViewBag.Shops = APIClient.GetRequest<List<ShopViewModel>>("api/shop/getshoplist");
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void Update(int shop, string shopname, string address, DateTime DateOpening, int count)
|
||||||
|
{
|
||||||
|
if (!APIClient.isAuth)
|
||||||
|
{
|
||||||
|
throw new Exception("Как вы сюда попали? Сюда могут входить только избранные");
|
||||||
|
}
|
||||||
|
|
||||||
|
APIClient.PostRequest($"api/shop/updateshop", new ShopBindingModel
|
||||||
|
{
|
||||||
|
Id = shop,
|
||||||
|
ShopName = shopname,
|
||||||
|
Address = address,
|
||||||
|
DateOpen = DateOpening,
|
||||||
|
MaxCountFurnitures = count
|
||||||
|
});
|
||||||
|
|
||||||
|
Response.Redirect("Index");
|
||||||
|
}
|
||||||
|
|
||||||
|
public IActionResult Supply()
|
||||||
|
{
|
||||||
|
ViewBag.Shops = APIClient.GetRequest<List<ShopViewModel>>("api/shop/getshoplist");
|
||||||
|
ViewBag.Furnitures = APIClient.GetRequest<List<FurnitureViewModel>>("api/main/getfurniturelist");
|
||||||
|
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void Supply(int shopId, int furnitureId, int count)
|
||||||
|
{
|
||||||
|
if (!APIClient.isAuth)
|
||||||
|
{
|
||||||
|
throw new Exception("Как вы сюда попали? Сюда могут входить только авторизованные");
|
||||||
|
}
|
||||||
|
|
||||||
|
APIClient.PostRequest($"api/shop/supplyfurniturestoshop", (new ShopSearchModel { Id = shopId }, new FurnitureBindingModel { Id = furnitureId }, count));
|
||||||
|
|
||||||
|
Response.Redirect("Index");
|
||||||
|
}
|
||||||
|
|
||||||
|
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
||||||
|
public IActionResult Error()
|
||||||
|
{
|
||||||
|
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\FurnitureAssemblyContracts\FurnitureAssemblyContracts.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
@ -0,0 +1,9 @@
|
|||||||
|
namespace FurnitureAssemblyShopApp.Models
|
||||||
|
{
|
||||||
|
public class ErrorViewModel
|
||||||
|
{
|
||||||
|
public string? RequestId { get; set; }
|
||||||
|
|
||||||
|
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
|
||||||
|
}
|
||||||
|
}
|
31
FurnitureAssembly/FurnitureAssemblyShopApp/Program.cs
Normal file
31
FurnitureAssembly/FurnitureAssemblyShopApp/Program.cs
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
using FurnitureAssemblyShopApp;
|
||||||
|
|
||||||
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
||||||
|
// Add services to the container.
|
||||||
|
builder.Services.AddControllersWithViews();
|
||||||
|
|
||||||
|
var app = builder.Build();
|
||||||
|
|
||||||
|
APIClient.Connect(builder.Configuration);
|
||||||
|
|
||||||
|
// Configure the HTTP request pipeline.
|
||||||
|
if (!app.Environment.IsDevelopment())
|
||||||
|
{
|
||||||
|
app.UseExceptionHandler("/Home/Error");
|
||||||
|
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
|
||||||
|
app.UseHsts();
|
||||||
|
}
|
||||||
|
|
||||||
|
app.UseHttpsRedirection();
|
||||||
|
app.UseStaticFiles();
|
||||||
|
|
||||||
|
app.UseRouting();
|
||||||
|
|
||||||
|
app.UseAuthorization();
|
||||||
|
|
||||||
|
app.MapControllerRoute(
|
||||||
|
name: "default",
|
||||||
|
pattern: "{controller=Home}/{action=Index}/{id?}");
|
||||||
|
|
||||||
|
app.Run();
|
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"iisSettings": {
|
||||||
|
"windowsAuthentication": false,
|
||||||
|
"anonymousAuthentication": true,
|
||||||
|
"iisExpress": {
|
||||||
|
"applicationUrl": "http://localhost:34897",
|
||||||
|
"sslPort": 44369
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"profiles": {
|
||||||
|
"FurnitureAssemblyShopApp": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"dotnetRunMessages": true,
|
||||||
|
"launchBrowser": true,
|
||||||
|
"applicationUrl": "https://localhost:7072;http://localhost:5171",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"IIS Express": {
|
||||||
|
"commandName": "IISExpress",
|
||||||
|
"launchBrowser": true,
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user