From e8372e02a098e852477212fe87d444047f375273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D0=BE=D0=BC=D0=B0=20=D0=9F=D0=B5=D1=80=D0=BC=D1=8F?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2?= Date: Thu, 19 Dec 2024 12:11:44 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=202=20=D0=B8=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reports/ChartReport.cs | 5 ++- .../Reports/TableReport.cs | 8 ++--- .../Repositories/IDealRepository.cs | 4 +-- .../Implementations/DealRepository.cs | 19 ++++++++--- .../Implementations/QueryBuilder.cs | 34 +++++++++++++++++++ 5 files changed, 55 insertions(+), 15 deletions(-) create mode 100644 RealEstateTransactions/RealEstateTransactions/Repositories/Implementations/QueryBuilder.cs diff --git a/RealEstateTransactions/RealEstateTransactions/Reports/ChartReport.cs b/RealEstateTransactions/RealEstateTransactions/Reports/ChartReport.cs index fa41d02..045b32c 100644 --- a/RealEstateTransactions/RealEstateTransactions/Reports/ChartReport.cs +++ b/RealEstateTransactions/RealEstateTransactions/Reports/ChartReport.cs @@ -22,7 +22,7 @@ namespace RealEstateTransactions.Reports { new PdfBuilder(filePath) .AddHeader("Доход с продажи квартир") - .AddPieChart("Проданные квартиры", GetData(dateTime)) + .AddPieChart($"Проданные квартиры {dateTime:dd.MM.yyyy}", GetData(dateTime)) .Build(); return true; } @@ -36,8 +36,7 @@ namespace RealEstateTransactions.Reports private List<(string Caption, double Value)> GetData(DateTime dateTime) { return _dealRepository - .ReadDeals() - .Where(x => x.Deal_date.Date == dateTime.Date) + .ReadDeals(dateFrom: dateTime.Date, dateTo: dateTime.Date.AddDays(1)) .Select(x => (x.Apartment_ID.ToString(), (double)x.Deal_price)) .ToList(); } diff --git a/RealEstateTransactions/RealEstateTransactions/Reports/TableReport.cs b/RealEstateTransactions/RealEstateTransactions/Reports/TableReport.cs index aeaadbd..6da62aa 100644 --- a/RealEstateTransactions/RealEstateTransactions/Reports/TableReport.cs +++ b/RealEstateTransactions/RealEstateTransactions/Reports/TableReport.cs @@ -30,7 +30,7 @@ namespace RealEstateTransactions.Reports { new ExcelBuilder(filePath) .AddHeader("Сводка по доходу от продажи квартиры", 0, 4) - .AddParagraph("за период", 0) + .AddParagraph($"за период с {startDate:dd.MM.yyyy} по {endDate:dd.MM.yyyy}", 0) .AddTable([10, 10, 10, 15], GetData(apartmentId, startDate, endDate)) .Build(); @@ -47,9 +47,7 @@ namespace RealEstateTransactions.Reports endDate) { var data = _dealRepository - .ReadDeals() - .Where(x => x.Deal_date >= startDate && x.Deal_date <= endDate && - x.Apartment_ID == apartmentId) + .ReadDeals(startDate, endDate, apartmentId) .Select(x => new { DealId = (int?)x.Id, Date = (DateTime?)x.Deal_date, DealPrice = (float?)x.Deal_price, ServicesPrice = (float?)null }) @@ -67,7 +65,7 @@ namespace RealEstateTransactions.Reports .Union( data .Select(x => new string[] { - x.DealId?.ToString() ?? string.Empty, x.Date?.ToString() ?? string.Empty, + x.DealId?.ToString("N0") ?? string.Empty, x.Date?.ToString("dd.MM.yyyy") ?? string.Empty, x.DealPrice?.ToString() ?? string.Empty, x.ServicesPrice?.ToString() ?? string.Empty})) .Union( [["Всего", "", data.Sum(x => x.DealPrice ?? 0).ToString(), diff --git a/RealEstateTransactions/RealEstateTransactions/Repositories/IDealRepository.cs b/RealEstateTransactions/RealEstateTransactions/Repositories/IDealRepository.cs index fca26ee..1f69280 100644 --- a/RealEstateTransactions/RealEstateTransactions/Repositories/IDealRepository.cs +++ b/RealEstateTransactions/RealEstateTransactions/Repositories/IDealRepository.cs @@ -4,8 +4,8 @@ namespace RealEstateTransactions.Repositories { public interface IDealRepository { - IEnumerable ReadDeals(DateTime? dateForm = null, DateTime? dateTo = null, - int? servicesID = null, int? dealID = null); + IEnumerable ReadDeals(DateTime? dateFrom = null, DateTime? dateTo = null, + int? apartmentId = null); void CreateDeal(Deal deal); diff --git a/RealEstateTransactions/RealEstateTransactions/Repositories/Implementations/DealRepository.cs b/RealEstateTransactions/RealEstateTransactions/Repositories/Implementations/DealRepository.cs index daba343..46314de 100644 --- a/RealEstateTransactions/RealEstateTransactions/Repositories/Implementations/DealRepository.cs +++ b/RealEstateTransactions/RealEstateTransactions/Repositories/Implementations/DealRepository.cs @@ -69,14 +69,22 @@ namespace RealEstateTransactions.Repositories.Implementations } } - public IEnumerable ReadDeals(DateTime? dateForm = null, DateTime? dateTo = null, - int? servicesID = null, int? dealID = null) + public IEnumerable ReadDeals(DateTime? dateFrom = null, DateTime? dateTo = null, + int? apartmentId = null) { _logger.LogInformation("Получение всех объектов"); try { + var builder = new QueryBuilder(); + if (dateFrom.HasValue) + builder.AddCondition("de.Deal_date >= @dateFrom"); + if (dateTo.HasValue) + builder.AddCondition("de.Deal_date <= @dateTo"); + if (apartmentId.HasValue) + builder.AddCondition("de.Apartment_Id = @apartmentId"); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - var selectQuery = @"SELECT + var selectQuery = $@"SELECT de.*, bu.Full_name BuyerName, sd.Deal_Id, @@ -86,7 +94,8 @@ namespace RealEstateTransactions.Repositories.Implementations FROM Deal de LEFT JOIN Buyer bu on bu.Id = de.Buyer_Id INNER JOIN Services_Deal sd on sd.Deal_Id = de.Id - LEFT JOIN Services ss on ss.Id = sd.Services_Id"; + LEFT JOIN Services ss on ss.Id = sd.Services_Id + {builder.Build()}"; var servicesDict = new Dictionary>(); var deals = connection.Query(selectQuery, @@ -100,7 +109,7 @@ namespace RealEstateTransactions.Repositories.Implementations sd.Add(servicesDeal); return deal; - }, splitOn: "Deal_Id"); + }, splitOn: "Deal_Id", param: new {dateFrom, dateTo, apartmentId}); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(deals)); return servicesDict.Select(x => diff --git a/RealEstateTransactions/RealEstateTransactions/Repositories/Implementations/QueryBuilder.cs b/RealEstateTransactions/RealEstateTransactions/Repositories/Implementations/QueryBuilder.cs new file mode 100644 index 0000000..fd3936b --- /dev/null +++ b/RealEstateTransactions/RealEstateTransactions/Repositories/Implementations/QueryBuilder.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace RealEstateTransactions.Repositories.Implementations +{ + public class QueryBuilder + { + private readonly StringBuilder _builder; + + public QueryBuilder() + { + _builder = new StringBuilder(); + } + + public QueryBuilder AddCondition(string condition) + { + if (_builder.Length > 0) _builder.Append(" AND "); + + _builder.Append(condition); + + return this; + } + + public string Build() + { + if (_builder.Length == 0) return string.Empty; + + return $"WHERE {_builder}"; + } + } +} \ No newline at end of file