Вроде норм

This commit is contained in:
ujijrujijr 2024-05-01 17:09:02 +04:00
parent 97d1d5612a
commit 757f7921e0
9 changed files with 84 additions and 77 deletions

View File

@ -27,15 +27,26 @@ namespace ComputerShopBusinessLogic.BusinessLogics
/// Отчёт для doc/xls
/// </summary>
/// <returns></returns>
public List<ReportOrderAssemblyViewModel> GetOrderAssemblies(List<OrderSearchModel> selectedOrders) {
//!!!исправить на filteredList
return _orderStorage.GetReportWithAssembly(selectedOrders).Select(x => new ReportOrderAssemblyViewModel
{
OrderId = x.Id,
DateCreateOrder = x.DateCreate,
OrderSum = x.Sum,
public List<ReportOrderAssemblyViewModel> GetReportOrdersAssemblies(List<OrderSearchModel> selectedOrders)
{
return _orderStorage.GetOrdersAssemblies(selectedOrders);
}
/// <summary>
/// Отчёт для почты/страницы
/// </summary>
/// <returns></returns>
public List<ReportOrdersViewModel> GetReportOrdersByDates(UserSearchModel currentUser, ReportBindingModel report)
{
return _orderStorage.GetOrdersInfoByDates(currentUser, report);
}
});
public void SaveReportOrderAssembliesToWordFile(ReportBindingModel model)
{
throw new NotImplementedException();
}
public void SaveReportOrderAssembliesToExcelFile(ReportBindingModel model)
{
throw new NotImplementedException();
}
}
}

View File

@ -1,4 +1,5 @@
using ComputerShopContracts.BindingModels;
using ComputerShopContracts.SearchModels;
using ComputerShopContracts.ViewModels;
using System;
using System.Collections.Generic;
@ -14,15 +15,15 @@ namespace ComputerShopContracts.BusinessLogicContracts
/// Получение отчёта для word/excel
/// </summary>
/// <returns></returns>
List<ReportOrderAssemblyViewModel> GetOrderAssemblies();
List<ReportOrderAssemblyViewModel> GetReportOrdersAssemblies(List<OrderSearchModel> selectedOrders);
/// <summary>
/// Получение отчёта для почты
/// </summary>
/// <returns></returns>
List<ReportOrderRequestAssemblyViewModel> GetOrderRequestAssemblies();
void SaveOrderAssembliesToWordFile(ReportBindingModel model);
List<ReportOrdersViewModel> GetReportOrdersByDates(UserSearchModel currentUser, ReportBindingModel report);
void SaveReportOrderAssembliesToWordFile(ReportBindingModel model);
void SaveOrderAssembliesToExcelFile(ReportBindingModel model);
void SaveReportOrderAssembliesToExcelFile(ReportBindingModel model);
}
}

View File

@ -17,6 +17,8 @@ namespace ComputerShopContracts.StorageContracts
OrderViewModel? Insert(OrderBindingModel model);
OrderViewModel? Update(OrderBindingModel model);
OrderViewModel? Delete(OrderBindingModel model);
List<OrderViewModel> GetReportWithAssembly(List<OrderSearchModel> model);
//получение данных о заказах для отчётов
List<ReportOrderAssemblyViewModel> GetOrdersAssemblies(List<OrderSearchModel> model);
List<ReportOrdersViewModel> GetOrdersInfoByDates(UserSearchModel currentUser, ReportBindingModel report);
}
}

View File

@ -1,4 +1,5 @@
using ComputerShopDataModels.Enums;
using ComputerShopDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
@ -9,15 +10,13 @@ namespace ComputerShopContracts.ViewModels
{
public class ReportOrderAssemblyViewModel
{
//!!!мб тут хранить списки промежуточных сущностей
public int OrderId { get; set; }
public DateTime DateCreateOrder { get; set; }
public double OrderSum { get; set; }
public OrderStatus OrderStatus { get; set; }
public string AssemblyName { get; set; }
public string AssemblyCategory { get; set; }
public double AssemblyCost { get; set; }
//данные о сборках
public List<(string AssemblyName, string AssemblyCategory, double AssemblyPrice)> Assemblies { get; set; }
}
}

View File

@ -1,25 +0,0 @@
using ComputerShopDataModels.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ComputerShopContracts.ViewModels
{
public class ReportOrderRequestAssemblyViewModel
{
//!!!мб тут хранить списки промежуточных сущностей
public int OrderID { get; set; }
public DateTime DateCreateOrder { get; set; }
public double OrderSum { get; set; }
public OrderStatus OrderStatus { get; set; }
public int RequestId { get; set; }
public string ClientFIO { get; set; }
public DateTime DateRequest { get; set; }
public string AssemblyName { get; set; }
public string AssemblyCategory { get; set; }
public double AssemblyCost { get; set; }
}
}

View File

@ -0,0 +1,23 @@
using ComputerShopDataModels.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ComputerShopContracts.ViewModels
{
public class ReportOrdersViewModel
{
public int OrderId { get; set; }
public DateTime DateCreateOrder { get; set; }
public double OrderSum { get; set; }
public OrderStatus OrderStatus { get; set; }
//данные заявок
public List<(int RequestId, string ClientFIO, DateTime DateRequest)> Requests { get; set; }
//данные сборок
public List<(string AssemblyName, string AssemblyCategory, double AssemblyPrice)> Assemblies { get; set; }
}
}

View File

@ -3,6 +3,7 @@ using ComputerShopContracts.SearchModels;
using ComputerShopContracts.StorageContracts;
using ComputerShopContracts.ViewModels;
using ComputerShopDatabaseImplement.Models;
using ComputerShopDataModels.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using System;
@ -72,8 +73,8 @@ namespace ComputerShopDatabaseImplement.Implements
.ToList();
}
//получение данных для отчёта сборок по выбранным заказам
public List<ReportOrderAssemblyViewModel> GetReportWithAssembly(List<OrderSearchModel> selectedModels)
//получение данных сборок по выбранным заказам для отчёта (doc/xls)
public List<ReportOrderAssemblyViewModel> GetOrdersAssemblies(List<OrderSearchModel> selectedModels)
{
using var context = new ComputerShopDatabase();
//id заказов, которые выбрал пользователь
@ -84,30 +85,6 @@ namespace ComputerShopDatabaseImplement.Implements
.ThenInclude(x => x.Request)
.ThenInclude(x => x.Assembly)
.Where(x => id_of_selected_models.Contains(x.Id) && x.Requests.Any(r => r.Request.Assembly != null))
context.Orders
.Where(x => id_of_selected_models.Contains(x.Id) && x.Requests.Any(r => r.Request.Assembly != null))
foreach (var selectedModel in selectedModels)
{
//заказ, у которого должна быть сборка
var order = context.Orders.FirstOrDefault(x => x.Id == selectedModel.Id && x.Requests.Any(r => r.Request.Assembly != null));
//если у заказа нет сборки, то его не надо обрабатывать
if (order == null)
{
continue;
}
}
var ordersWithAssemblies = selectedModels
//возвращение тех заказов, кот. принадлежат пользователю и кот. имеют сборку в соответствующей заявке
return context.Orders
.Where(x => x.UserId == model.UserId && x.Requests.Any(r => r.Request.Assembly != null))
.Include(x => x.Requests)
.ThenInclude(x => x.Request)
.ThenInclude(x => x.Assembly)
.ToList()
.Select(x => new ReportOrderAssemblyViewModel
{
@ -115,9 +92,28 @@ namespace ComputerShopDatabaseImplement.Implements
DateCreateOrder = x.DateCreate,
OrderSum = x.Sum,
OrderStatus = x.Status,
AssemblyName = x.Requests.FirstOrDefault(r => r.Request.Assembly != null)?.Request.Assembly.AssemblyName,
Assemblies = x.Requests.Select(r => (r.Request.Assembly.AssemblyName, r.Request.Assembly.Category, r.Request.Assembly.Price)).ToList(),
})
.ToList();
}
//получение заказов (все, что создал сам пользователь) за период с расшифровкой по заявкам и сборкам для отчёта (почта/страница)
public List<ReportOrdersViewModel> GetOrdersInfoByDates(UserSearchModel currentUser, ReportBindingModel report)
{
using var context = new ComputerShopDatabase();
return context.Orders.Include(x => x.Requests)
.ThenInclude(x => x.Request)
.ThenInclude(x => x.Assembly)
.Where(x => x.UserId == currentUser.Id && x.DateCreate >= report.DateFrom && x.DateCreate <= report.DateTo)
.ToList()
.Select(x => new ReportOrdersViewModel
{
OrderId = x.Id,
DateCreateOrder = x.DateCreate,
OrderSum = x.Sum,
OrderStatus = x.Status,
Requests = x.Requests.Select(r => (r.Request.Id, r.Request.ClientFIO, r.Request.DateRequest)).ToList(),
Assemblies = x.Requests.Select(r => (r.Request.Assembly.AssemblyName, r.Request.Assembly.Category, r.Request.Assembly.Price)).ToList(),
})
.ToList();
}

View File

@ -64,9 +64,9 @@ namespace ComputerShopDatabaseImplement.Models
}
//отдельный метод изменения стоимости заказа (+ или -) на стоимость сборки внутри заявки (после действий с заявками, кот. привязаны к заказу)
public void ChangeSum(double cost_of_assembly, bool justUpdate = false)
public void ChangeSum(double price_of_assembly, bool justUpdate = false)
{
Sum += cost_of_assembly;
Sum += price_of_assembly;
}
public OrderViewModel GetViewModel => new()

View File

@ -95,7 +95,7 @@ namespace ComputerShopDatabaseImplement.Models
{
var currentRequest = context.Requests.First(x => x.Id == Id);
//стоимость сборки, связанной с заявкой (или 0, если заявка не связана со сборкой)
double cost_of_assembly = (currentRequest.Assembly.Price != null) ? currentRequest.Assembly.Price : 0;
double price_of_assembly = (currentRequest.Assembly.Price != null) ? currentRequest.Assembly.Price : 0;
var requestOrders = context.RequestOrders.Where(x => x.RequestId == model.Id).ToList();
@ -108,7 +108,7 @@ namespace ComputerShopDatabaseImplement.Models
context.RequestOrders.Remove(delOrder);
var order = context.Orders.First(x => x.Id == delOrder.OrderId);
//вычитание из стоимости соответствующего заказа стоимость соответствующей сборки
order.ChangeSum(-cost_of_assembly);
order.ChangeSum(-price_of_assembly);
context.SaveChanges();
}
}
@ -123,7 +123,7 @@ namespace ComputerShopDatabaseImplement.Models
Order = order
});
//увеличение стоимости заказа, с которым связываем заявку, на стоимость сборки
order.ChangeSum(cost_of_assembly);
order.ChangeSum(price_of_assembly);
context.SaveChanges();
}
_requestOrders = null;
@ -134,7 +134,7 @@ namespace ComputerShopDatabaseImplement.Models
public void ConnectAssembly(ComputerShopDatabase context, RequestBindingModel model)
{
//стоимость старой сборки (или 0, если её не было)
double cost_of_old_assembly = (Assembly.Price != null) ? Assembly.Price : 0;
double price_of_old_assembly = (Assembly.Price != null) ? Assembly.Price : 0;
AssemblyId = model.AssemblyId;
Assembly = context.Assemblies.First(x => x.Id == model.AssemblyId);
@ -143,7 +143,7 @@ namespace ComputerShopDatabaseImplement.Models
{
var connectedOrder = context.Orders.First(x => x.Id == request_order.Key);
//вычитание из стоимости заказа старой сборки
connectedOrder.ChangeSum(-cost_of_old_assembly);
connectedOrder.ChangeSum(-price_of_old_assembly);
//прибавление стоимости новой сборки
connectedOrder.ChangeSum(Assembly.Price);
context.SaveChanges();