Guarantor: Models/Logic/ReportViews fixes.
This commit is contained in:
parent
ee3f2ff447
commit
81454cabe4
@ -99,9 +99,8 @@ namespace ComputerStoreBusinessLogic.BusinessLogic
|
|||||||
if (string.IsNullOrEmpty(model.Name)) { throw new ArgumentNullException("Invalid product's name", nameof(model)); }
|
if (string.IsNullOrEmpty(model.Name)) { throw new ArgumentNullException("Invalid product's name", nameof(model)); }
|
||||||
if (model.Price <= 0) { throw new ArgumentNullException("Invalid product's price", nameof(model)); }
|
if (model.Price <= 0) { throw new ArgumentNullException("Invalid product's price", nameof(model)); }
|
||||||
if (string.IsNullOrEmpty(model.EmployeeID.ToString())) { throw new ArgumentNullException("Invalid Product's employee ID", nameof(model)); }
|
if (string.IsNullOrEmpty(model.EmployeeID.ToString())) { throw new ArgumentNullException("Invalid Product's employee ID", nameof(model)); }
|
||||||
if (string.IsNullOrEmpty(model.ConsignmentID.ToString())) { throw new ArgumentNullException("Invalid Product's consignment ID", nameof(model)); }
|
|
||||||
|
|
||||||
_logger.LogInformation("Product. ConsignmentID: {ConsignmentID}. EmployeeID: {EmployeeID}. product:{product}. Cost:{ Cost}. ID: { ID} ",model.ConsignmentID,model.EmployeeID, model.Name, model.Price, model.ID);
|
_logger.LogInformation("Product. EmployeeID: {EmployeeID}. product:{product}. Cost:{ Cost}. ID: { ID} ",model.EmployeeID, model.Name, model.Price, model.ID);
|
||||||
|
|
||||||
var element = _productStorage.GetElement(new ProductSearchModel
|
var element = _productStorage.GetElement(new ProductSearchModel
|
||||||
{
|
{
|
||||||
|
@ -14,54 +14,78 @@ namespace ComputerStoreBusinessLogic.BusinessLogic
|
|||||||
{
|
{
|
||||||
private readonly IPCStorage _pcStorage;
|
private readonly IPCStorage _pcStorage;
|
||||||
private readonly IProductStorage _productStorage;
|
private readonly IProductStorage _productStorage;
|
||||||
|
private readonly IConsignmentStorage _consignmentStorage;
|
||||||
|
private readonly IRequestStorage _requestStorage;
|
||||||
|
|
||||||
public ReportLogic(IPCStorage pcStorage, IProductStorage productStorage)
|
public ReportLogic(IPCStorage pcStorage, IProductStorage productStorage, IConsignmentStorage consignmentStorage, IRequestStorage requestStorage)
|
||||||
{
|
{
|
||||||
_pcStorage = pcStorage;
|
_pcStorage = pcStorage;
|
||||||
_productStorage = productStorage;
|
_productStorage = productStorage;
|
||||||
|
_consignmentStorage = consignmentStorage;
|
||||||
|
_requestStorage = requestStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ReportRequestComponentViewModel> GetPCs()
|
public List<ReportRequestComponentViewModel> GetPCs()
|
||||||
{
|
{
|
||||||
var pcs = _pcStorage.GetFullList();
|
var pcs = _pcStorage.GetFullList();
|
||||||
var list = new List<ReportRequestComponentViewModel>();
|
var list = new List<ReportRequestComponentViewModel>();
|
||||||
|
var requests = _requestStorage.GetFullList();
|
||||||
foreach (var pc in pcs)
|
foreach (var pc in pcs)
|
||||||
{
|
{
|
||||||
var record = new ReportRequestComponentViewModel
|
var record = new ReportRequestComponentViewModel
|
||||||
{
|
{
|
||||||
PCName = pc.Name,
|
PCName = pc.Name,
|
||||||
Components = new List<(string Component, int count)>(),
|
Components = new List<(string Component, int count)>(),
|
||||||
|
Requests = new List<int>(),
|
||||||
TotalAmount = 0
|
TotalAmount = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
foreach (var request in requests)
|
||||||
|
{
|
||||||
|
record.Requests.Add(request.RequestProducts.FirstOrDefault(x => x.ID == pc.ID).Select(x => x.ID));
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var component in pc.PCComponents)
|
foreach (var component in pc.PCComponents)
|
||||||
{
|
{
|
||||||
record.Components.Add(new(component.Value.Item1.Name, component.Value.Item2));
|
record.Components.Add(new(component.Value.Item1.Name, component.Value.Item2));
|
||||||
record.TotalAmount += component.Value.Item2;
|
|
||||||
}
|
}
|
||||||
|
record.TotalAmount = record.Requests.Count;
|
||||||
list.Add(record);
|
list.Add(record);
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ReportConsignmentComponentViewModel> GetProducts()
|
public List<ReportProductComponentViewModel> GetProducts()
|
||||||
{
|
{
|
||||||
var products = _productStorage.GetFullList();
|
var products = _productStorage.GetFullList();
|
||||||
var list = new List<ReportConsignmentComponentViewModel>();
|
var list = new List<ReportProductComponentViewModel>();
|
||||||
|
var consignments = _consignmentStorage.GetFullList();
|
||||||
|
|
||||||
|
|
||||||
foreach (var product in products)
|
foreach (var product in products)
|
||||||
{
|
{
|
||||||
var record = new ReportConsignmentComponentViewModel
|
var record = new ReportProductComponentViewModel
|
||||||
{
|
{
|
||||||
ProductName = product.Name,
|
ProductName = product.Name,
|
||||||
Components = new List<(string Component, int count)>(),
|
Components = new List<(string Component, int count)>(),
|
||||||
|
Consignments = new List<int>(),
|
||||||
TotalAmount = 0
|
TotalAmount = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
foreach (var consignment in consignments)
|
||||||
|
{
|
||||||
|
record.Consignments.Add(consignment.ConsignmentProducts.FirstOrDefault(x => x.ID == product.ID).Select(x => x.ID));
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var component in product.ProductComponents)
|
foreach (var component in product.ProductComponents)
|
||||||
{
|
{
|
||||||
record.Components.Add(new(component.Value.Item1.Name, component.Value.Item2));
|
record.Components.Add(new(component.Value.Item1.Name, component.Value.Item2));
|
||||||
record.TotalAmount += component.Value.Item2;
|
|
||||||
}
|
}
|
||||||
|
record.TotalAmount = record.Consignments.Count;
|
||||||
list.Add(record);
|
list.Add(record);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,6 @@ namespace ComputerStoreContracts.BindingModels
|
|||||||
public double Price { get; set; }
|
public double Price { get; set; }
|
||||||
|
|
||||||
public int EmployeeID { get; set; }
|
public int EmployeeID { get; set; }
|
||||||
public int ConsignmentID { get; set; }
|
|
||||||
|
|
||||||
public Dictionary<int, (IComponentModel, int)> ProductComponents { get; set; } = new();
|
public Dictionary<int, (IComponentModel, int)> ProductComponents { get; set; } = new();
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ namespace ComputerStoreContracts.BusinessLogicContracts
|
|||||||
{
|
{
|
||||||
public interface IReportLogic
|
public interface IReportLogic
|
||||||
{
|
{
|
||||||
List<ReportConsignmentComponentViewModel> GetProducts();
|
List<ReportProductComponentViewModel> GetProducts();
|
||||||
List<ReportRequestComponentViewModel> GetPCs();
|
List<ReportRequestComponentViewModel> GetPCs();
|
||||||
|
|
||||||
void SaveProductsToExcelFile(ReportBindingModel model);
|
void SaveProductsToExcelFile(ReportBindingModel model);
|
||||||
|
@ -10,7 +10,6 @@ namespace ComputerStoreContracts.SearchModels
|
|||||||
{
|
{
|
||||||
public int? ID { get; set; }
|
public int? ID { get; set; }
|
||||||
public string? Name { get; set; }
|
public string? Name { get; set; }
|
||||||
public int? ConsignmentID { get; set; }
|
|
||||||
public int? EmployeeID { get; set; }
|
public int? EmployeeID { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,9 +23,6 @@ namespace ComputerStoreContracts.ViewModels
|
|||||||
[DisplayName("Employee's username")]
|
[DisplayName("Employee's username")]
|
||||||
public string EmployeeUsername { get; set; } = string.Empty;
|
public string EmployeeUsername { get; set; } = string.Empty;
|
||||||
|
|
||||||
[DisplayName("Consignment ID")]
|
|
||||||
public int ConsignmentID { get; set; }
|
|
||||||
|
|
||||||
public Dictionary<int, (IComponentModel, int)> ProductComponents { get; set; } = new();
|
public Dictionary<int, (IComponentModel, int)> ProductComponents { get; set; } = new();
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,10 +6,12 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace ComputerStoreContracts.ViewModels
|
namespace ComputerStoreContracts.ViewModels
|
||||||
{
|
{
|
||||||
public class ReportConsignmentComponentViewModel
|
public class ReportProductComponentViewModel
|
||||||
{
|
{
|
||||||
public string ProductName { get; set; } = string.Empty;
|
public string ProductName { get; set; } = string.Empty;
|
||||||
public int TotalAmount { get; set; }
|
public int TotalAmount { get; set; }
|
||||||
public List<(string Component, int count)> Components { get; set; } = new List<(string Component, int count)>();
|
public List<(string Component, int count)> Components { get; set; } = new List<(string Component, int count)>();
|
||||||
|
|
||||||
|
public List<int> Consignments { get; set; } = new List<int>();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -11,5 +11,6 @@ namespace ComputerStoreContracts.ViewModels
|
|||||||
public string PCName { get; set; } = string.Empty;
|
public string PCName { get; set; } = string.Empty;
|
||||||
public int TotalAmount { get; set; }
|
public int TotalAmount { get; set; }
|
||||||
public List<(string Component, int count)> Components { get; set; } = new List<(string Component, int count)> ();
|
public List<(string Component, int count)> Components { get; set; } = new List<(string Component, int count)> ();
|
||||||
|
public List<int> Requests { get; set; } = new List<int> ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,6 @@ namespace ComputerStoreDataModels.Models
|
|||||||
public string Name { get; }
|
public string Name { get; }
|
||||||
public double Price { get; }
|
public double Price { get; }
|
||||||
public int EmployeeID { get; }
|
public int EmployeeID { get; }
|
||||||
public int ConsignmentID { get; }
|
|
||||||
Dictionary<int,(IComponentModel,int)> ProductComponents { get; }
|
Dictionary<int,(IComponentModel,int)> ProductComponents { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,6 @@ namespace ComputerStoreDatabaseImplement
|
|||||||
public virtual DbSet<PC> PCs { get; set; }
|
public virtual DbSet<PC> PCs { get; set; }
|
||||||
public virtual DbSet<Employee> Employees { get; set; }
|
public virtual DbSet<Employee> Employees { get; set; }
|
||||||
public virtual DbSet<RequestComponent> RequestComponents { get; set; }
|
public virtual DbSet<RequestComponent> RequestComponents { get; set; }
|
||||||
public virtual DbSet<ConsignmentComponent> ConsignmentComponents { get; set; }
|
public virtual DbSet<ProductComponent> ConsignmentComponents { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ namespace ComputerStoreDatabaseImplement.Models
|
|||||||
public double Price { get; private set; }
|
public double Price { get; private set; }
|
||||||
|
|
||||||
[ForeignKey("ComponentID")]
|
[ForeignKey("ComponentID")]
|
||||||
public virtual List<ConsignmentComponent> ConsignmentComponents { get; private set; } = new();
|
public virtual List<ProductComponent> ConsignmentComponents { get; private set; } = new();
|
||||||
|
|
||||||
[ForeignKey("ComponentID")]
|
[ForeignKey("ComponentID")]
|
||||||
public virtual List<RequestComponent> RequestComponents { get; private set; } = new();
|
public virtual List<RequestComponent> RequestComponents { get; private set; } = new();
|
||||||
|
@ -91,8 +91,8 @@ namespace ComputerStoreDatabaseImplement.Models
|
|||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
foreach(var updateComponent in pcComponents)
|
foreach(var updateComponent in pcComponents)
|
||||||
{
|
{
|
||||||
updateComponent.Count = model.PCComponents[updateComponent.ID].Item2;
|
updateComponent.Count = model.PCComponents[updateComponent.PCID].Item2;
|
||||||
model.PCComponents.Remove(updateComponent.ID);
|
model.PCComponents.Remove(updateComponent.PCID);
|
||||||
}
|
}
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
}
|
}
|
||||||
|
@ -25,26 +25,27 @@ namespace ComputerStoreDatabaseImplement.Models
|
|||||||
[Required]
|
[Required]
|
||||||
public int EmployeeID { get; private set; }
|
public int EmployeeID { get; private set; }
|
||||||
|
|
||||||
[Required]
|
|
||||||
public int ConsignmentID { get; private set; }
|
|
||||||
|
|
||||||
private Dictionary<int, (IComponentModel, int)>? _consignmentComponents = null;
|
private Dictionary<int, (IComponentModel, int)>? _productComponents = null;
|
||||||
|
|
||||||
[NotMapped]
|
[NotMapped]
|
||||||
public Dictionary<int, (IComponentModel, int)> ProductComponents
|
public Dictionary<int, (IComponentModel, int)> ProductComponents
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if(_consignmentComponents == null)
|
if(_productComponents == null)
|
||||||
{
|
{
|
||||||
_consignmentComponents = Components.ToDictionary(recPC => recPC.ComponentID, recPC => (recPC.Component as IComponentModel, recPC.Count));
|
_productComponents = Components.ToDictionary(recPC => recPC.ComponentID, recPC => (recPC.Component as IComponentModel, recPC.Count));
|
||||||
}
|
}
|
||||||
return _consignmentComponents;
|
return _productComponents;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[ForeignKey("ProductID")]
|
[ForeignKey("ProductID")]
|
||||||
public virtual List<ConsignmentComponent> Components { get; set; } = new();
|
public virtual List<ProductComponent> Components { get; set; } = new();
|
||||||
|
|
||||||
|
[ForeignKey("ProductID")]
|
||||||
|
public virtual List<Consignment> Consignments { get; set; } = new();
|
||||||
|
|
||||||
public virtual Employee Employee { get; set; }
|
public virtual Employee Employee { get; set; }
|
||||||
public static Product Create(ComputerStoreDatabase context, ProductBindingModel model)
|
public static Product Create(ComputerStoreDatabase context, ProductBindingModel model)
|
||||||
@ -55,8 +56,7 @@ namespace ComputerStoreDatabaseImplement.Models
|
|||||||
Name = model.Name,
|
Name = model.Name,
|
||||||
Price = model.Price,
|
Price = model.Price,
|
||||||
EmployeeID = model.EmployeeID,
|
EmployeeID = model.EmployeeID,
|
||||||
ConsignmentID = model.ConsignmentID,
|
Components = model.ProductComponents.Select(x => new ProductComponent
|
||||||
Components = model.ProductComponents.Select(x => new ConsignmentComponent
|
|
||||||
{
|
{
|
||||||
Component = context.Components.First(y => y.ID == x.Key),
|
Component = context.Components.First(y => y.ID == x.Key),
|
||||||
Count = x.Value.Item2
|
Count = x.Value.Item2
|
||||||
@ -77,16 +77,15 @@ namespace ComputerStoreDatabaseImplement.Models
|
|||||||
Price = Price,
|
Price = Price,
|
||||||
EmployeeID = EmployeeID,
|
EmployeeID = EmployeeID,
|
||||||
EmployeeUsername = Employee.Username,
|
EmployeeUsername = Employee.Username,
|
||||||
ConsignmentID = ConsignmentID,
|
|
||||||
ProductComponents = ProductComponents
|
ProductComponents = ProductComponents
|
||||||
};
|
};
|
||||||
|
|
||||||
public void UpdateComponents(ComputerStoreDatabase context, ProductBindingModel model)
|
public void UpdateComponents(ComputerStoreDatabase context, ProductBindingModel model)
|
||||||
{
|
{
|
||||||
var productComponents = context.ConsignmentComponents.Where(rec => rec.ProductID == model.ID && rec.ConsignmentID == model.ConsignmentID).ToList();
|
var productComponents = context.ConsignmentComponents.Where(rec => rec.ProductID == model.ID).ToList();
|
||||||
if(productComponents != null && productComponents.Count > 0)
|
if(productComponents != null && productComponents.Count > 0)
|
||||||
{
|
{
|
||||||
context.ConsignmentComponents.RemoveRange(productComponents.Where(rec => !model.ProductComponents.ContainsKey(rec.ComponentID) && rec.ConsignmentID == model.ConsignmentID));
|
context.ConsignmentComponents.RemoveRange(productComponents.Where(rec => !model.ProductComponents.ContainsKey(rec.ComponentID)));
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
foreach(var updateComponent in productComponents)
|
foreach(var updateComponent in productComponents)
|
||||||
{
|
{
|
||||||
@ -99,16 +98,15 @@ namespace ComputerStoreDatabaseImplement.Models
|
|||||||
var product = context.Products.First(x => x.ID == ID);
|
var product = context.Products.First(x => x.ID == ID);
|
||||||
foreach(var pc in model.ProductComponents)
|
foreach(var pc in model.ProductComponents)
|
||||||
{
|
{
|
||||||
context.ConsignmentComponents.Add(new ConsignmentComponent
|
context.ConsignmentComponents.Add(new ProductComponent
|
||||||
{
|
{
|
||||||
Product = product,
|
Product = product,
|
||||||
Component = context.Components.First(x => x.ID == pc.Key),
|
Component = context.Components.First(x => x.ID == pc.Key),
|
||||||
Consignment = context.Consignments.First(x => x.ID == model.ConsignmentID),
|
|
||||||
Count = pc.Value.Item2
|
Count = pc.Value.Item2
|
||||||
});
|
});
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
}
|
}
|
||||||
_consignmentComponents = null;
|
_productComponents = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,13 +7,10 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace ComputerStoreDatabaseImplement.Models
|
namespace ComputerStoreDatabaseImplement.Models
|
||||||
{
|
{
|
||||||
public class ConsignmentComponent
|
public class ProductComponent
|
||||||
{
|
{
|
||||||
public int ID { get; set; }
|
public int ID { get; set; }
|
||||||
|
|
||||||
[Required]
|
|
||||||
public int ConsignmentID { get; set; }
|
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
public int ComponentID { get; set; }
|
public int ComponentID { get; set; }
|
||||||
|
|
||||||
@ -25,8 +22,6 @@ namespace ComputerStoreDatabaseImplement.Models
|
|||||||
|
|
||||||
public virtual Product Product { get; set; } = new();
|
public virtual Product Product { get; set; } = new();
|
||||||
public virtual Component Component { get; set; } = new();
|
public virtual Component Component { get; set; } = new();
|
||||||
public virtual Consignment Consignment { get; set; } = new();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user