Models & Logic fix

This commit is contained in:
devil_1nc 2023-05-20 00:08:47 +04:00
parent 1283b13869
commit 3ba667323d
15 changed files with 375 additions and 85 deletions

View File

@ -1,7 +1,10 @@
using ComputerShopContracts.BindingModels;
using ComputerShopContracts.BusinessLogicContracts;
using ComputerShopContracts.SearchModels;
using ComputerShopContracts.StorageContracts;
using ComputerShopContracts.ViewModels;
using ComputerShopDataModels.Enums;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
@ -12,29 +15,87 @@ namespace ComputerShopBusinessLogic.BusinessLogics
{
public class EquipmentReceivingLogic : IEquipmentReceivingLogic
{
private readonly ILogger _logger;
private readonly IEquipmentReceivingStorage _receivingStorage;
public EquipmentReceivingLogic(ILogger<PurchaseLogic> logger, IEquipmentReceivingStorage receivingStorage)
{
_logger = logger;
_receivingStorage = receivingStorage;
}
public List<EquipmentReceivingViewModel>? ReadList(EquipmentReceivingSearchModel? model)
{
throw new NotImplementedException();
var list = model == null ? _receivingStorage.GetFullList() : _receivingStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("ReadList return null list");
return null;
}
return list;
}
public bool CreateOrder(EquipmentReceivingBindingModel model)
public bool Create(EquipmentReceivingBindingModel model)
{
throw new NotImplementedException();
CheckModel(model);
if (model.Status != EquipmentReceivingStatus.Неизвестен)
{
_logger.LogWarning("Insert operation failed. Receiving status incorrect.");
return false;
}
model.Status = EquipmentReceivingStatus.Ожидается;
if (_receivingStorage.Insert(model) == null)
{
model.Status = EquipmentReceivingStatus.Неизвестен;
_logger.LogWarning("Insert operation failed");
return false;
}
return true;
}
public bool TakeOrderInWork(EquipmentReceivingBindingModel model)
{
throw new NotImplementedException();
return StatusUpdate(model, EquipmentReceivingStatus.Ожидается);
}
public bool FinishOrder(EquipmentReceivingBindingModel model)
public bool Finish(EquipmentReceivingBindingModel model)
{
return StatusUpdate(model, EquipmentReceivingStatus.Получено);
}
private void CheckModel(EquipmentReceivingBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
if (!withParams)
{
return;
}
}
public bool StatusUpdate(EquipmentReceivingBindingModel model, EquipmentReceivingStatus newStatus)
{
CheckModel(model);
if (model.Status + 1 != newStatus)
{
_logger.LogWarning("Status update to " + newStatus.ToString() + " operation failed. Order status incorrect.");
return false;
}
model.Status = newStatus;
if (model.Status == EquipmentReceivingStatus.Получено) model.DateImplement = DateTime.Now;
if (_receivingStorage.Update(model) == null)
{
model.Status--;
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
public bool TakeInWork(EquipmentReceivingBindingModel model)
{
throw new NotImplementedException();
}
public bool DeliveryOrder(EquipmentReceivingBindingModel model)
{
throw new NotImplementedException();
}
}
}

View File

@ -1,7 +1,10 @@
using ComputerShopContracts.BindingModels;
using ComputerShopContracts.BusinessLogicContracts;
using ComputerShopContracts.SearchModels;
using ComputerShopContracts.StorageContracts;
using ComputerShopContracts.ViewModels;
using ComputerShopDataModels.Enums;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
@ -12,44 +15,152 @@ namespace ComputerShopBusinessLogic.BusinessLogics
{
public class OrderLogic : IOrderLogic
{
private readonly ILogger _logger;
private readonly IOrderStorage _orderStorage;
private readonly IAssemblyStorage _assemblyStorage;
public OrderLogic(ILogger<ComponentLogic> logger, IOrderStorage orderStorage, IAssemblyStorage assemblyStorage)
{
_logger = logger;
_orderStorage = orderStorage;
_assemblyStorage = assemblyStorage;
}
public bool CreateOrder(OrderBindingModel model)
{
throw new NotImplementedException();
}
public bool Delete(ComponentBindingModel model)
CheckModel(model);
if (_orderStorage.Insert(model) == null)
{
throw new NotImplementedException();
_logger.LogWarning("Insert operation failed");
return false;
}
public bool DeliveryOrder(OrderBindingModel model)
{
throw new NotImplementedException();
return true;
}
public bool FinishOrder(OrderBindingModel model)
{
throw new NotImplementedException();
}
public OrderViewModel? ReadElement(OrderSearchModel model)
{
throw new NotImplementedException();
}
public List<OrderViewModel>? ReadList(OrderSearchModel? model)
{
throw new NotImplementedException();
_logger.LogInformation("ReadList. Orderid:{ Id}", model?.Id);
var list = model == null ? _orderStorage.GetFullList() : _orderStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("ReadList return null list");
return null;
}
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
public bool Update(OrderBindingModel model)
{
CheckModel(model);
if (_orderStorage.Update(model) == null)
{
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
public bool Delete(OrderBindingModel model)
{
CheckModel(model, false);
_logger.LogInformation("Delete. Id:{Id}", model.Id);
if (_orderStorage.Delete(model) == null)
{
_logger.LogWarning("Delete operation failed");
return false;
}
return true;
}
public bool TakeOrderInWork(OrderBindingModel model)
{
throw new NotImplementedException();
return StatusUpdate(model, OrderStatus.Выполняется);
}
public bool Update(ComponentBindingModel model)
public bool DeliveryOrder(OrderBindingModel model)
{
throw new NotImplementedException();
return StatusUpdate(model, OrderStatus.Выдан);
}
public bool FinishOrder(OrderBindingModel model)
{
return StatusUpdate(model, OrderStatus.Готов);
}
public bool StatusUpdate(OrderBindingModel model, OrderStatus _newStatus)
{
var viewModel = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id });
if (viewModel == null)
{
throw new ArgumentNullException(nameof(model));
}
if (viewModel.Status + 1 != _newStatus)
{
_logger.LogWarning("Status update to " + _newStatus.ToString() + " operation failed. Order status incorrect.");
return false;
}
model.Status = _newStatus;
if (model.Status == OrderStatus.Выдан) model.DateImplement = DateTime.Now;
else
{
model.DateImplement = viewModel.DateImplement;
}
CheckModel(model, false);
if (_orderStorage.Update(model) == null)
{
model.Status--;
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
private void CheckModel(OrderBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
if (!withParams)
{
return;
}
if (model.ClientId < 0)
{
throw new ArgumentNullException("Некорректный идентификатор у клиента", nameof(model.ClientId));
}
if (model.Sum <= 0)
{
throw new ArgumentNullException("Сумма заказа должна быть больше 0", nameof(model.Sum));
}
_logger.LogInformation("Order. OrderID:{Id}. Sum:{ Sum}. ClientId: { ClientId}", model.Id, model.Sum, model.ClientId);
}
public bool AddAssembly(OrderSearchModel model, AssemblySearchModel assemblymodel, int amount)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
_logger.LogInformation("AddAssemblyToOrder. AssemblyName:{AssemblyName}.Id:{ Id}", assemblymodel.AssemblyName, model.Id);
var element = _orderStorage.GetElement(model);
var assembly = _assemblyStorage.GetElement(assemblymodel);
if (element == null || assembly == null)
{
return false;
}
_logger.LogInformation("AddAssemblyToOrder find. Id:{Id}", element.Id);
element.AssemblyOrders[assembly.Id] = (assembly, amount);
_orderStorage.Update(new()
{
Id = element.Id,
Status = element.Status,
Sum = element.Sum + assembly.Price * amount,
ClientId = element.ClientId,
AssemblyOrders = element.AssemblyOrders
});
return true;
}
}
}

View File

@ -1,7 +1,10 @@
using ComputerShopContracts.BindingModels;
using ComputerShopContracts.BusinessLogicContracts;
using ComputerShopContracts.SearchModels;
using ComputerShopContracts.StorageContracts;
using ComputerShopContracts.ViewModels;
using ComputerShopDataModels.Enums;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
@ -12,29 +15,33 @@ namespace ComputerShopBusinessLogic.BusinessLogics
{
public class SupplyLogic : ISupplyLogic
{
private readonly ILogger _logger;
private readonly ISupplyStorage _supplyStorage;
public SupplyLogic(ILogger logger, ISupplyStorage supplyStorage)
{
_logger = logger;
_supplyStorage = supplyStorage;
}
public bool Create(SupplyBindingModel model)
{
throw new NotImplementedException();
}
public bool CreateOrder(PurchaseBindingModel model)
CheckModel(model);
if (_supplyStorage.Insert(model) == null)
{
throw new NotImplementedException();
_logger.LogWarning("Insert operation failed");
return false;
}
return true;
}
public bool Delete(SupplyBindingModel model)
{
throw new NotImplementedException();
}
public bool DeliveryOrder(PurchaseBindingModel model)
CheckModel(model, false);
_logger.LogInformation("Delete. Id:{Id}", model.Id);
if (_supplyStorage.Delete(model) == null)
{
throw new NotImplementedException();
_logger.LogWarning("Delete operation failed");
return false;
}
public bool FinishOrder(PurchaseBindingModel model)
{
throw new NotImplementedException();
return true;
}
public SupplyViewModel? ReadElement(SupplySearchModel model)
@ -44,17 +51,66 @@ namespace ComputerShopBusinessLogic.BusinessLogics
public List<SupplyViewModel>? ReadList(SupplySearchModel? model)
{
throw new NotImplementedException();
}
public bool TakeOrderInWork(PurchaseBindingModel model)
_logger.LogInformation("ReadList. Supplyid:{ Id}", model?.Id);
var list = model == null ? _supplyStorage.GetFullList() : _supplyStorage.GetFilteredList(model);
if (list == null)
{
throw new NotImplementedException();
_logger.LogWarning("ReadList return null list");
return null;
}
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
public bool TakeInWork(SupplyBindingModel model)
{
return StatusUpdate(model, SupplyStatus.Отправляется);
}
public bool Finish(SupplyBindingModel model)
{
return StatusUpdate(model, SupplyStatus.Отправлено);
}
public bool Update(SupplyBindingModel model)
{
throw new NotImplementedException();
}
private void CheckModel(SupplyBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
if (!withParams)
{
return;
}
}
public bool StatusUpdate(SupplyBindingModel model, SupplyStatus _newStatus)
{
var viewModel = _supplyStorage.GetElement(new SupplySearchModel { Id = model.Id });
if (viewModel == null)
{
throw new ArgumentNullException(nameof(model));
}
if (viewModel.Status + 1 != _newStatus)
{
_logger.LogWarning("Status update to " + _newStatus.ToString() + " operation failed. Order status incorrect.");
return false;
}
model.Status = _newStatus;
if (model.Status == SupplyStatus.Отправлено) model.DateImplement = DateTime.Now;
else
{
model.DateImplement = viewModel.DateImplement;
}
CheckModel(model, false);
if (_supplyStorage.Update(model) == null)
{
model.Status--;
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
}
}

View File

@ -18,6 +18,17 @@ namespace ComputerShopContracts.BindingModels
public DateTime DateCreate { get; set; }
public DateTime? DateImplement { get; set; } = DateTime.Now;
public int ClientId { get; set; }
public Dictionary<int, (IAssemblyModel, int)> AssemblyOrders
{
get;
set;
} = new();
public Dictionary<int, IOrderModel> SupplyOrders
{
get;
set;
} = new();
}
}

View File

@ -11,6 +11,7 @@ namespace ComputerShopContracts.BindingModels
public class SupplyBindingModel : ISupplyModel
{
public int Id { get; set; }
public int ReceivingId { get; set; }
public SupplyStatus Status { get; set; } = SupplyStatus.Неизвестен;
public DateTime DateCreate { get; set; } = DateTime.Now;

View File

@ -12,9 +12,8 @@ namespace ComputerShopContracts.BusinessLogicContracts
public interface IEquipmentReceivingLogic
{
List<EquipmentReceivingViewModel>? ReadList(EquipmentReceivingSearchModel? model);
bool CreateOrder(EquipmentReceivingBindingModel model);
bool TakeOrderInWork(EquipmentReceivingBindingModel model);
bool FinishOrder(EquipmentReceivingBindingModel model);
bool DeliveryOrder(EquipmentReceivingBindingModel model);
bool Create(EquipmentReceivingBindingModel model);
bool TakeInWork(EquipmentReceivingBindingModel model);
bool Finish(EquipmentReceivingBindingModel model);
}
}

View File

@ -12,12 +12,12 @@ namespace ComputerShopContracts.BusinessLogicContracts
public interface IOrderLogic
{
List<OrderViewModel>? ReadList(OrderSearchModel? model);
OrderViewModel? ReadElement(OrderSearchModel model);
bool CreateOrder(OrderBindingModel model);
bool Update(ComponentBindingModel model);
bool Delete(ComponentBindingModel model);
bool Update(OrderBindingModel model);
bool Delete(OrderBindingModel model);
bool TakeOrderInWork(OrderBindingModel model);
bool FinishOrder(OrderBindingModel model);
bool DeliveryOrder(OrderBindingModel model);
bool AddAssembly(OrderSearchModel ordermodel, AssemblySearchModel model, int amount);
}
}

View File

@ -16,9 +16,7 @@ namespace ComputerShopContracts.BusinessLogicContracts
bool Create(SupplyBindingModel model);
bool Update(SupplyBindingModel model);
bool Delete(SupplyBindingModel model);
bool CreateOrder(PurchaseBindingModel model);
bool TakeOrderInWork(PurchaseBindingModel model);
bool FinishOrder(PurchaseBindingModel model);
bool DeliveryOrder(PurchaseBindingModel model);
bool TakeInWork(SupplyBindingModel model);
bool Finish(SupplyBindingModel model);
}
}

View File

@ -19,6 +19,16 @@ namespace ComputerShopContracts.ViewModels
[DisplayName("Дата создания")]
public DateTime DateCreate { get; set; } = DateTime.Now;
public Dictionary<int, (IAssemblyModel, int)> AssemblyOrders
{
get;
set;
} = new();
public Dictionary<int, ISupplyModel> SupplyOrders
{
get;
set;
} = new();
[DisplayName("Дата выполнения")]
@ -26,5 +36,9 @@ namespace ComputerShopContracts.ViewModels
[DisplayName("Номер")]
public int Id { get; set; }
public int ClientId { get; set; }
[DisplayName("ФИО клиента")]
public string ClientFIO { get; set; } = string.Empty;
}
}

View File

@ -22,22 +22,13 @@ namespace ComputerShopContracts.ViewModels
[DisplayName("Номер")]
public int Id { get; set; }
[DisplayName("Номер получения")]
public int ReceivingId { get; set; }
public Dictionary<int, IOrderModel> SupplyOrders
{
get;
set;
} = new();
public int? ReceivingId { get; set; }
}
}

View File

@ -7,6 +7,7 @@ namespace ComputerShopDataModels.Models
SupplyStatus Status { get; }
DateTime DateCreate { get; }
DateTime? DateImplement { get; }
int ReceivingId { get; }
Dictionary<int, IOrderModel> SupplyOrders { get; }
}
}

View File

@ -21,7 +21,11 @@ namespace ComputerShopDatabaseImplement.Implements
return null;
}
using var context = new ComputerShopDatabase();
return context.Purchases.Include(x => x.Component).FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
return context.Purchases.Include(x => x.Component)
.FirstOrDefault(x =>
(model.Id.HasValue && x.Id ==
model.Id))
?.GetViewModel;
}
public List<PurchaseViewModel> GetFilteredList(PurchaseSearchModel model)

View File

@ -38,7 +38,7 @@ namespace ComputerShopDatabaseImplement.Implements
using var context = new ComputerShopDatabase();
return context.Supplies
.Include(x => x.Orders)
.ThenInclude(x => x.Order)
.ThenInclude(x => x.Order).Include(x => x.Receiving)
.FirstOrDefault(x =>
(model.Id.HasValue && x.Id ==
model.Id))
@ -56,6 +56,7 @@ namespace ComputerShopDatabaseImplement.Implements
return context.Supplies
.Include(x => x.Orders)
.ThenInclude(x => x.Order)
.Include(x => x.Receiving)
.Where(x => x.Id == model.Id)
.ToList()
.Select(x => x.GetViewModel)
@ -64,6 +65,7 @@ namespace ComputerShopDatabaseImplement.Implements
return context.Supplies
.Include(x => x.Orders)
.ThenInclude(x => x.Order)
.Include(x => x.Receiving)
.Include(x => x.ComponentSupplies)
.ThenInclude(x => x.Component)
.Where(x => x.ComponentSupplies.Any(x => x.ComponentId == model.ComponentId))
@ -78,6 +80,7 @@ namespace ComputerShopDatabaseImplement.Implements
return context.Supplies
.Include(x => x.Orders)
.ThenInclude(x => x.Order)
.Include(x => x.Receiving)
.ToList()
.Select(x => x.GetViewModel)
.ToList();
@ -94,6 +97,7 @@ namespace ComputerShopDatabaseImplement.Implements
context.Supplies.Add(newProduct);
context.SaveChanges();
return newProduct.GetViewModel;
}
public SupplyViewModel? Update(SupplyBindingModel model)

View File

@ -24,9 +24,42 @@ namespace ComputerShopDatabaseImplement.Models
public DateTime? DateImplement { get; private set; }
[ForeignKey("OrderId")]
public virtual List<SupplyOrder> SupplyOrders { get; set; } = new();
public virtual List<SupplyOrder> Supplies { get; set; } = new();
private Dictionary<int, IOrderModel>? _supplyOrders = null;
[ForeignKey("OrderId")]
public virtual List<AssemblyOrder> Assemblies { get; set; } = new();
private Dictionary<int, (IOrderModel, int)>? _assemblyOrders = null;
[NotMapped]
public Dictionary<int, (IOrderModel, int)> AssemblyOrders
{
get
{
if (_assemblyOrders == null)
{
_assemblyOrders = Assemblies
.ToDictionary(recPC => recPC.AssemblyId, recPC =>
(recPC.Order as IOrderModel, recPC.Count));
}
return _assemblyOrders;
}
}
[NotMapped]
public Dictionary<int, IOrderModel> SupplyOrders
{
get
{
if (_supplyOrders == null)
{
_supplyOrders = Supplies
.ToDictionary(recPC => recPC.SupplyId, recPC =>
(recPC.Order as IOrderModel));
}
return _supplyOrders;
}
}
[Required]
public int ClientId { get; set; }
public static Order? Create(OrderBindingModel model)
@ -42,6 +75,7 @@ namespace ComputerShopDatabaseImplement.Models
Status = model.Status,
DateCreate = model.DateCreate,
DateImplement = model.DateImplement,
ClientId = model.ClientId
};
}
public static Order Create(OrderViewModel model)
@ -53,6 +87,7 @@ namespace ComputerShopDatabaseImplement.Models
Status = model.Status,
DateCreate = model.DateCreate,
DateImplement = model.DateImplement,
ClientId = model.ClientId
};
}
public void Update(OrderBindingModel model)
@ -71,6 +106,7 @@ namespace ComputerShopDatabaseImplement.Models
Status = Status,
DateCreate = DateCreate,
DateImplement = DateImplement,
ClientId = ClientId
};
}
}

View File

@ -26,6 +26,8 @@ namespace ComputerShopDatabaseImplement.Models
public int OrderId { get; set; }
public int ReceivingId { get; set; }
public virtual EquipmentReceiving Receiving { get; set; }
private Dictionary<int, IOrderModel>? _supplyOrders =
null;
[NotMapped]
@ -54,6 +56,7 @@ namespace ComputerShopDatabaseImplement.Models
Status = model.Status,
DateCreate = model.DateCreate,
DateImplement = model.DateImplement,
Receiving = model.Receiving,
Orders = model.SupplyOrders.Select(x => new
SupplyOrder
{