ПИбд-22 Морозов Д.В. Лабораторная 3 #8

Closed
MorozovDanil wants to merge 16 commits from LabWork№3 into LabWork№2
3 changed files with 57 additions and 99 deletions
Showing only changes of commit a6f82f8bd2 - Show all commits

View File

@ -1,106 +1,64 @@
//using Microsoft.Extensions.Logging;
//using ProjectRepairCompany.Entities;
//using ProjectRepairCompany.Repositories;
//using ProjectRepairCompany.Repositories.Implementations;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView;
using Microsoft.Extensions.Logging;
using ProjectRepairCompany.Entities;
using ProjectRepairCompany.Repositories;
using ProjectRepairCompany.Repositories.Implementations;
using System;
using System.Collections.Generic;
using System.Linq;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView;
//namespace ProjectRepairCompany.Reports;
namespace ProjectRepairCompany.Reports;
//internal class TableReport
//{
// private readonly IStorageDetailRepository _storageDetailRepository;
// private readonly IOrderRepository _orderRepository;
// private readonly ILogger<TableReport> _logger;
internal class TableReport
{
private readonly IStorageDetailRepository _storageDetailRepository;
private readonly IOrderRepository _orderRepository;
private readonly ILogger<TableReport> _logger;
// internal static readonly string[] item = { "Деталь", "Дата", "Количество пришло", "Количество ушло" };
internal static readonly string[] item = { "Деталь", "Дата", "Количество пришло", "Количество ушло" };
// public TableReport(IStorageDetailRepository storageDetailRepository, IOrderRepository orderRepository, ILogger<TableReport> logger)
// {
// _storageDetailRepository = storageDetailRepository ?? throw new ArgumentNullException(nameof(storageDetailRepository));
// _orderRepository = orderRepository ?? throw new ArgumentNullException(nameof(orderRepository));
// _logger = logger ?? throw new ArgumentNullException(nameof(logger));
// }
public TableReport(IStorageDetailRepository storageDetailRepository, IOrderRepository orderRepository, ILogger<TableReport> logger)
{
_storageDetailRepository = storageDetailRepository ?? throw new ArgumentNullException(nameof(storageDetailRepository));
_orderRepository = orderRepository ?? throw new ArgumentNullException(nameof(orderRepository));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
// public bool CreateTable(string filePath, int detailId, DateTime startDate, DateTime endDate)
// {
// try
// {
// new ExcelBuilder(filePath)
// .AddHeader("Сводка по движению деталей", 1, 4)
// .AddParagraph($"за период с {startDate:dd.MM.yyyy} по {endDate:dd.MM.yyyy}", 1)
// .AddTable(new[] { 20, 15, 15, 15 }, GetData(detailId, startDate, endDate))
// .Build();
// return true;
// }
// catch (Exception ex)
// {
// _logger.LogError(ex, "Ошибка при формировании документа");
// return false;
// }
// }
public bool CreateTable(string filePath, int detailId, DateTime startDate, DateTime endDate)
{
try
{
new ExcelBuilder(filePath)
.AddHeader("Сводка по движению деталей", 1, 4)
.AddParagraph($"за период с {startDate:dd.MM.yyyy} по {endDate:dd.MM.yyyy}", 1)
.AddTable(new[] { 20, 15, 15, 15 }, GetData(detailId, startDate, endDate))
.Build();
return true;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при формировании документа");
return false;
}
}
// private List<string[]> GetData(int detailId, DateTime startDate, DateTime endDate)
// {
// // Получаем данные о пополнении склада
// var storageData = _storageDetailRepository
// .ReadStorageDetails()
// .Where(x => x.SupplyDate >= startDate && x.SupplyDate <= endDate && x.DetailId == detailId)
// .Select(x => new
// {
// x.DetailId,
// Date = x.SupplyDate, // Дата поступления
// CountIn = x.DetailCount, // Количество пришло
// CountOut = (int?)null // Нет исходящих
// })
// .OrderBy(x => x.Date); // Сортировка по дате поступления
private List<string[]> GetData(int detailId, DateTime startDate, DateTime endDate)
{
// Получаем данные о пополнении склада
var data = _orderRepository
.ReadOrders()
.Where(x => x.OrderDate >= startDate && x.OrderDate <= endDate && x.OrderDetails.Any(y => y.DetailId == detailId))
.Select(x => new
{
x.OrderDetail,
Date = x.SupplyDate, // Дата поступления
CountIn = x.DetailCount, // Количество пришло
CountOut = (int?)null // Нет исходящих
})
.OrderBy(x => x.Date); // Сортировка по дате поступления
// // Получаем данные о заказах
// var orderData = _orderRepository
// .ReadOrders()
// .Where(x => x.DateIssue >= startDate && x.DateIssue <= endDate)
// .SelectMany(x => x.OrderDetails) // Извлекаем все детали из заказов
// .Where(orderDetail => orderDetail.DetailId == detailId)
// .Select(orderDetail => new
// {
// DetailId = orderDetail.DetailId,
// Date = orderDetail.Order.DateIssue, // Дата заказа
// CountIn = (int?)null, // Нет поступлений
// CountOut = orderDetail.DetailCount // Количество ушло
// })
// .OrderBy(x => x.Date); // Сортировка по дате заказа
// // Объединяем данные из двух источников
// var combinedData = storageData
// .Union(orderData)
// .OrderBy(x => x.Date) // Сортируем все данные по дате
// .ToList();
// // Формируем итоговую таблицу
// var result = new List<string[]> { item }
// .Union(combinedData.Select(x => new string[]
// {
// x.DetailId.ToString(), // Деталь
// x.Date.ToString("dd.MM.yyyy"), // Дата
// x.CountIn?.ToString() ?? string.Empty, // Количество пришло
// x.CountOut?.ToString() ?? string.Empty // Количество ушло
// }))
// .Union(new[]
// {
// new string[]
// {
// "Всего",
// "",
// combinedData.Sum(x => x.CountIn ?? 0).ToString(), // Суммируем все поступления
// combinedData.Sum(x => x.CountOut ?? 0).ToString() // Суммируем все исходящие
// }
// })
// .ToList();
// return result;
// }
}
@ -109,4 +67,4 @@
//}
}

View File

@ -9,7 +9,7 @@ namespace ProjectRepairCompany.Repositories;
public interface IOrderRepository
{
IEnumerable<Order> ReadOrders();
IEnumerable<Order> ReadOrders(DateTime? dateForm = null, DateTime? dateTo = null, int? masterId = null);
Order ReadOrderById(int id);
void CreateOrder(Order order);
void DeleteOrder(int id);

View File

@ -98,7 +98,7 @@ public class OrderRepository : IOrderRepository
public IEnumerable<Order> ReadOrders()
public IEnumerable<Order> ReadOrders(DateTime? dateForm = null, DateTime? dateTo = null, int? masterId = null)
{
_logger.LogInformation("Получение всех объектов");
try