фикс отчета справочников, Эгову слава и почет <3

This commit is contained in:
MorozovDanil 2024-12-16 16:57:47 +04:00
parent 885c3a103a
commit 8343749aed
3 changed files with 97 additions and 97 deletions

View File

@ -15,7 +15,7 @@ namespace ProjectRepairCompany.Forms
public partial class FormDirectoryReport : Form public partial class FormDirectoryReport : Form
{ {
private readonly IUnityContainer _container; private readonly IUnityContainer _container;
public FormDirectoryReport(UnityContainer container) public FormDirectoryReport(IUnityContainer container)
{ {
InitializeComponent(); InitializeComponent();
_container = container ?? _container = container ??

View File

@ -9,7 +9,7 @@ using System.Threading.Tasks;
namespace ProjectRepairCompany.Reports; namespace ProjectRepairCompany.Reports;
internal class DocReport public class DocReport
{ {
private readonly IStorageRepository _storageRepository; private readonly IStorageRepository _storageRepository;
private readonly IMasterRepository _masterRepository; private readonly IMasterRepository _masterRepository;
@ -18,7 +18,7 @@ internal class DocReport
private readonly ILogger<DocReport> _logger; private readonly ILogger<DocReport> _logger;
public DocReport(IMasterRepository masterRepository, IDetailRepository detailRepository, IStorageRepository storageRepository, ILogger<DocReport> logger) public DocReport(IMasterRepository masterRepository, IDetailRepository detailRepository, IStorageRepository storageRepository, ILogger<DocReport> logger)
{ {
_masterRepository = masterRepository _masterRepository = masterRepository
?? throw new ArgumentNullException(nameof(masterRepository)); ?? throw new ArgumentNullException(nameof(masterRepository));
_detailRepository = detailRepository _detailRepository = detailRepository
?? throw new ArgumentNullException(nameof(detailRepository)); ?? throw new ArgumentNullException(nameof(detailRepository));

View File

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