Точно работает. Осталось только сдать

This commit is contained in:
Tonb73 2024-12-08 15:47:59 +03:00
parent 5cdff1d212
commit 73cd12f5f0
3 changed files with 22 additions and 15 deletions

View File

@ -99,6 +99,7 @@
buttonMakeReport.TabIndex = 13;
buttonMakeReport.Text = "Сформировать";
buttonMakeReport.UseVisualStyleBackColor = true;
buttonMakeReport.Click += buttonMakeReport_Click;
//
// buttonSelectFilePath
//
@ -108,6 +109,7 @@
buttonSelectFilePath.TabIndex = 12;
buttonSelectFilePath.Text = "..";
buttonSelectFilePath.UseVisualStyleBackColor = true;
buttonSelectFilePath.Click += buttonSelectFilePath_Click;
//
// dateTimePickerDateBegin
//

View File

@ -17,7 +17,7 @@ namespace ProjectTourAgency.Forms;
public partial class FormExcelReport : Form
{
private readonly IUnityContainer _container;
public FormExcelReport(IUnityContainer container, ITourRepository tourRepository )
public FormExcelReport(IUnityContainer container, ITourRepository tourRepository)
{
InitializeComponent();
_container = container ??

View File

@ -30,7 +30,7 @@ namespace ProjectTourAgency.Reports
try
{
new ExcelBuilder(filePath)
.AddHeader("Сводка по движению корма", 0, 4)
.AddHeader("Сводка по клиентам тура", 0, 4)
.AddParagraph("за период", 0)
.AddTable(new[] { 10, 10, 15, 15 }, GetData(tourId, startDate, endDate))
.Build();
@ -45,7 +45,6 @@ namespace ProjectTourAgency.Reports
private List<string[]> GetData(int tourId, DateTime startDate, DateTime endDate)
{
var tourData = _tourRepository.ReadTours()
.Where(x => x.DepartureDate >= startDate && x.DepartureDate <= endDate && x.ClientTours.Any(y => y.TourId == tourId))
.SelectMany(x => x.ClientTours
@ -57,10 +56,8 @@ namespace ProjectTourAgency.Reports
CountOut = (int?)y.Cost
}));
var clientIds = tourData.Select(x => x.ClientId).Distinct().ToList();
var addMoneyData = _addMoneyRepository.ReadAddMoneys()
.Where(x => x.Date >= startDate && x.Date <= endDate && clientIds.Contains(x.ClientId))
.Select(x => new {
@ -70,24 +67,32 @@ namespace ProjectTourAgency.Reports
CountOut = (int?)null
});
var data = tourData
.Union(addMoneyData)
.GroupBy(x => new { x.ClientId, x.Date }) // Группируем по ClientId и Date
.Select(g => new {
ClientId = g.Key.ClientId,
Date = g.Key.Date,
CountIn = g.Sum(x => x.CountIn ?? 0), // Суммируем пополнения
CountOut = g.Sum(x => x.CountOut ?? 0) // Суммируем списания
})
.OrderBy(x => x.Date);
return new List<string[]>() { item }
.Union(data.Select(x => new string[] {
x.ClientId.ToString(),
x.Date.ToString(),
x.CountIn?.ToString() ?? string.Empty,
x.CountOut?.ToString() ?? string.Empty }))
x.ClientId.ToString(),
x.Date.ToString("yyyy-MM-dd"), // Форматируем дату
x.CountIn.ToString(),
x.CountOut.ToString()
}))
.Union(new[] { new string[] {
"Всего",
"",
data.Sum(x => x.CountIn ?? 0).ToString(),
data.Sum(x => x.CountOut ?? 0).ToString()
}})
"Всего",
"",
data.Sum(x => x.CountIn).ToString(),
data.Sum(x => x.CountOut).ToString()
}})
.ToList();
}
}
}