diff --git a/Directory.Packages.props b/Directory.Packages.props
index bd1bc40..e5cef7b 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -12,13 +12,13 @@
-
-
+
+
-
+
@@ -50,6 +50,6 @@
-
+
-
+
\ No newline at end of file
diff --git a/EstateReportingAPI.BusinessLogic.UnitTests/ReportQueryValidationTests.cs b/EstateReportingAPI.BusinessLogic.UnitTests/ReportQueryValidationTests.cs
index c0a3b06..e1cefd9 100644
--- a/EstateReportingAPI.BusinessLogic.UnitTests/ReportQueryValidationTests.cs
+++ b/EstateReportingAPI.BusinessLogic.UnitTests/ReportQueryValidationTests.cs
@@ -10,8 +10,8 @@ public sealed class ReportQueryValidationTests
public void ValidateDateRange_AllowsThirtyInclusiveDays()
{
ReportQueryValidation.ValidateDateRange(
- new DateTime(2026, 9, 1),
- new DateTime(2026, 9, 30))
+ new DateOnly(2026, 9, 1),
+ new DateOnly(2026, 9, 30))
.ShouldBeNull();
}
@@ -19,8 +19,8 @@ public void ValidateDateRange_AllowsThirtyInclusiveDays()
public void ValidateDateRange_RejectsMoreThanThirtyInclusiveDays()
{
ReportQueryValidation.ValidateDateRange(
- new DateTime(2026, 9, 1),
- new DateTime(2026, 10, 1))
+ new DateOnly(2026, 9, 1),
+ new DateOnly(2026, 10, 1))
.ShouldBe("date range must not exceed 30 inclusive calendar days.");
}
@@ -28,8 +28,8 @@ public void ValidateDateRange_RejectsMoreThanThirtyInclusiveDays()
public void ValidateDateRange_RejectsReversedDates()
{
ReportQueryValidation.ValidateDateRange(
- new DateTime(2026, 9, 2),
- new DateTime(2026, 9, 1))
+ new DateOnly(2026, 9, 2),
+ new DateOnly(2026, 9, 1))
.ShouldBe("startDate must be less than or equal to endDate.");
}
diff --git a/EstateReportingAPI.BusinessLogic.UnitTests/ReportingManagerExtensionsTests.cs b/EstateReportingAPI.BusinessLogic.UnitTests/ReportingManagerExtensionsTests.cs
index 27c7716..5215909 100644
--- a/EstateReportingAPI.BusinessLogic.UnitTests/ReportingManagerExtensionsTests.cs
+++ b/EstateReportingAPI.BusinessLogic.UnitTests/ReportingManagerExtensionsTests.cs
@@ -194,7 +194,7 @@ public void SettlementFiltersAndFeeGroupingsFilterAndAggregateRows()
ContractId = contractId,
ContractProductId = productId,
TransactionType = "Sale",
- TransactionDate = new DateTime(2026, 9, 1),
+ TransactionDate = new DateOnly(2026, 9, 1),
TransactionDateTime = new DateTime(2026, 9, 1),
TransactionTime = TimeSpan.Zero,
TransactionAmount = 10m,
diff --git a/EstateReportingAPI.BusinessLogic.UnitTests/ReportingManagerReportTests.cs b/EstateReportingAPI.BusinessLogic.UnitTests/ReportingManagerReportTests.cs
index 5806f56..2c31727 100644
--- a/EstateReportingAPI.BusinessLogic.UnitTests/ReportingManagerReportTests.cs
+++ b/EstateReportingAPI.BusinessLogic.UnitTests/ReportingManagerReportTests.cs
@@ -28,7 +28,7 @@ public async Task GetCalendarComparisonDates_ReturnsCalendarRows()
result.IsSuccess.ShouldBeTrue();
result.Data.Count.ShouldBe(1);
- result.Data[0].Date.ShouldBe(new DateTime(2026, 9, 1));
+ result.Data[0].Date.ShouldBe(new DateOnly(2026, 9, 1));
}
[Fact]
@@ -168,7 +168,7 @@ public async Task GetFileImportLogList_WhenNoLogs_ReturnsEmptyList()
await using TestDatabase database = await TestDatabase.CreateAsync();
var result = await database.FileImportService.GetFileImportLogList(
- new FileImportLogQueries.GetFileImportLogListQuery(EstateId, null, DateTime.Today.AddDays(-1), DateTime.Today),
+ new FileImportLogQueries.GetFileImportLogListQuery(EstateId, null, DateOnly.FromDateTime(DateTime.Today.AddDays(-1)), DateOnly.FromDateTime(DateTime.Today)),
CancellationToken.None);
result.IsSuccess.ShouldBeTrue();
@@ -183,7 +183,7 @@ public async Task GetFileImportLogList_WithFileDataBuildsHierarchicalResult()
await database.SaveAsync();
var result = await database.FileImportService.GetFileImportLogList(
- new FileImportLogQueries.GetFileImportLogListQuery(EstateId, null, DateTime.Today.AddDays(-1), DateTime.Today),
+ new FileImportLogQueries.GetFileImportLogListQuery(EstateId, null, DateOnly.FromDateTime(DateTime.Today.AddDays(-1)), DateOnly.FromDateTime(DateTime.Today)),
CancellationToken.None);
result.IsSuccess.ShouldBeTrue();
@@ -245,8 +245,8 @@ public async Task GetTransactionSummaryByMerchantReport_AverageUsesGroupedTotals
new TransactionQueries.TransactionSummaryByMerchantQuery(
EstateId,
new TransactionSummaryByMerchantRequest {
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 1)
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 1)
}),
CancellationToken.None);
@@ -268,8 +268,8 @@ public async Task GetTransactionSummaryByOperatorReport_SeparatesAuthorisedAndDe
new TransactionQueries.TransactionSummaryByOperatorQuery(
EstateId,
new TransactionSummaryByOperatorRequest {
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 1)
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 1)
}),
CancellationToken.None);
@@ -295,8 +295,8 @@ public async Task GetTransactionDetailReport_AppliesMerchantProductAndOperatorFi
new TransactionQueries.TransactionDetailReportQuery(
EstateId,
new TransactionDetailReportRequest {
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 1),
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 1),
Merchants = [20],
Products = [40],
Operators = [10]
@@ -321,8 +321,8 @@ public async Task GetTransactionDetailReport_PaginatesRowsButKeepsFullSummary()
new TransactionQueries.TransactionDetailReportQuery(
EstateId,
new TransactionDetailReportRequest {
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 1),
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 1),
PageNumber = 2,
PageSize = 2
}),
@@ -347,8 +347,8 @@ public async Task GetTransactionDetailReport_RejectsDateRangesOverThirtyDays()
new TransactionQueries.TransactionDetailReportQuery(
EstateId,
new TransactionDetailReportRequest {
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 10, 1)
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 10, 1)
}),
CancellationToken.None);
@@ -368,8 +368,8 @@ public async Task GetTransactionSummaryByOperatorReport_AppliesMerchantAndOperat
new TransactionQueries.TransactionSummaryByOperatorQuery(
EstateId,
new TransactionSummaryByOperatorRequest {
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 1),
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 1),
Merchants = [20],
Operators = [10]
}),
@@ -388,8 +388,8 @@ public async Task GetTransactionSummaryByMerchantReport_WhenNoSales_ReturnsZeroR
new TransactionQueries.TransactionSummaryByMerchantQuery(
EstateId,
new TransactionSummaryByMerchantRequest {
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 1)
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 1)
}),
CancellationToken.None);
@@ -411,8 +411,8 @@ public async Task GetTransactionSummaryByMerchantReport_PaginatesMerchantsButKee
new TransactionQueries.TransactionSummaryByMerchantQuery(
EstateId,
new TransactionSummaryByMerchantRequest {
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 1),
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 1),
PageNumber = 2,
PageSize = 1
}),
@@ -438,8 +438,8 @@ public async Task GetTransactionSummaryByOperatorReport_PaginatesOperatorsButKee
new TransactionQueries.TransactionSummaryByOperatorQuery(
EstateId,
new TransactionSummaryByOperatorRequest {
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 1),
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 1),
PageNumber = 2,
PageSize = 1
}),
@@ -462,8 +462,8 @@ public async Task GetTransactionMixSummary_WhenDateRangeIsInvalid_ReturnsFailure
new TransactionQueries.TransactionMixSummaryQuery(
EstateId,
new TransactionMixSummaryRequest {
- StartDate = new DateTime(2026, 9, 2),
- EndDate = new DateTime(2026, 9, 1),
+ StartDate = new DateOnly(2026, 9, 2),
+ EndDate = new DateOnly(2026, 9, 1),
Breakdown = TransactionMixBreakdown.Product,
Measure = TransactionMixMeasure.Count
}),
@@ -481,8 +481,8 @@ public async Task GetTransactionMixSummary_WhenBreakdownIsUnsupported_ReturnsFai
new TransactionQueries.TransactionMixSummaryQuery(
EstateId,
new TransactionMixSummaryRequest {
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 1),
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 1),
Breakdown = (TransactionMixBreakdown)999,
Measure = TransactionMixMeasure.Count
}),
@@ -548,8 +548,8 @@ public async Task GetTransactionDetailReport_IncludesFeesAndZeroFeeForUnsettledR
new TransactionQueries.TransactionDetailReportQuery(
EstateId,
new TransactionDetailReportRequest {
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 1)
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 1)
}),
CancellationToken.None);
@@ -574,8 +574,8 @@ public async Task GetTransactionDetailReport_IncludesBothDateBoundaries()
new TransactionQueries.TransactionDetailReportQuery(
EstateId,
new TransactionDetailReportRequest {
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 2)
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 2)
}),
CancellationToken.None);
@@ -590,7 +590,7 @@ public async Task GetTodaysSettlement_WhenNoSettlementRows_ReturnsZeroTotals()
await using TestDatabase database = await TestDatabase.CreateAsync();
var result = await database.SettlementService.GetTodaysSettlement(
- new SettlementQueries.TodaysSettlementQuery(EstateId, DateTime.Today.AddDays(-1)),
+ new SettlementQueries.TodaysSettlementQuery(EstateId, DateOnly.FromDateTime(DateTime.Today.AddDays(-1))),
CancellationToken.None);
result.IsSuccess.ShouldBeTrue();
@@ -654,8 +654,8 @@ public async Task GetMerchantDailyPerformanceSummary_ReturnsMetricsTopProductAnd
EstateId,
new MerchantDailyPerformanceSummaryRequest {
MerchantReportingId = 20,
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 2)
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 2)
}),
CancellationToken.None);
@@ -683,8 +683,8 @@ public async Task GetMerchantDailyPerformanceSummary_WhenNoTransactions_ReturnsB
EstateId,
new MerchantDailyPerformanceSummaryRequest {
MerchantReportingId = 20,
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 2)
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 2)
}),
CancellationToken.None);
@@ -704,8 +704,8 @@ public async Task GetMerchantDailyPerformanceSummary_RejectsDateRangesOverThirty
EstateId,
new MerchantDailyPerformanceSummaryRequest {
MerchantReportingId = 20,
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 10, 1)
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 10, 1)
}),
CancellationToken.None);
@@ -763,7 +763,7 @@ public async Task GetProductPerformanceReport_WithSalesMapsDetailsAndSummary()
await database.SaveAsync();
var result = await database.TransactionService.GetProductPerformanceReport(
- new TransactionQueries.ProductPerformanceQuery(EstateId, new DateTime(2026, 9, 1), new DateTime(2026, 9, 1)),
+ new TransactionQueries.ProductPerformanceQuery(EstateId, new DateOnly(2026, 9, 1), new DateOnly(2026, 9, 1)),
CancellationToken.None);
result.IsSuccess.ShouldBeTrue();
@@ -894,8 +894,8 @@ public async Task GetTransactionMixSummary_GroupsByStatusAndOrdersByValue()
new TransactionQueries.TransactionMixSummaryQuery(
EstateId,
new TransactionMixSummaryRequest {
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 1),
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 1),
Breakdown = TransactionMixBreakdown.Status,
Measure = TransactionMixMeasure.Value,
TopN = 1
@@ -925,8 +925,8 @@ public async Task GetTransactionMixSummary_PaginatesTransactionsAndLimitsGroups(
new TransactionQueries.TransactionMixSummaryQuery(
EstateId,
new TransactionMixSummaryRequest {
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 1),
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 1),
Breakdown = TransactionMixBreakdown.Status,
Measure = TransactionMixMeasure.Count,
TopN = 1,
@@ -953,8 +953,8 @@ public async Task GetTransactionMixSummary_RejectsTopNAboveTwenty()
new TransactionQueries.TransactionMixSummaryQuery(
EstateId,
new TransactionMixSummaryRequest {
- StartDate = new DateTime(2026, 9, 1),
- EndDate = new DateTime(2026, 9, 1),
+ StartDate = new DateOnly(2026, 9, 1),
+ EndDate = new DateOnly(2026, 9, 1),
Breakdown = TransactionMixBreakdown.Status,
Measure = TransactionMixMeasure.Count,
TopN = 21
@@ -994,7 +994,7 @@ public async Task GetProductPerformanceReport_WhenNoSales_ReturnsZeroSummary()
await using TestDatabase database = await TestDatabase.CreateAsync();
var result = await database.TransactionService.GetProductPerformanceReport(
- new TransactionQueries.ProductPerformanceQuery(EstateId, new DateTime(2026, 9, 1), new DateTime(2026, 9, 1)),
+ new TransactionQueries.ProductPerformanceQuery(EstateId, new DateOnly(2026, 9, 1), new DateOnly(2026, 9, 1)),
CancellationToken.None);
result.IsSuccess.ShouldBeTrue();
@@ -1013,8 +1013,8 @@ public async Task GetProductPerformanceReport_ReturnsPagedProductsAndFullSummary
var result = await database.TransactionService.GetProductPerformanceReport(
new TransactionQueries.ProductPerformanceQuery(
EstateId,
- new DateTime(2026, 9, 1),
- new DateTime(2026, 9, 1),
+ new DateOnly(2026, 9, 1),
+ new DateOnly(2026, 9, 1),
1,
1),
CancellationToken.None);
@@ -1151,7 +1151,7 @@ public Guid AddSale(Guid merchantId, Guid operatorId, decimal amount, DateTime d
ContractId = ContractId,
ContractProductId = ProductId,
TransactionType = "Sale",
- TransactionDate = date.Date,
+ TransactionDate = DateOnly.FromDateTime(date.Date),
TransactionDateTime = date,
TransactionTime = date.TimeOfDay,
TransactionAmount = amount,
@@ -1256,7 +1256,7 @@ public void AddBalance(Guid merchantId, decimal balance)
public void AddCalendar(DateTime date)
{
seedContext.Calendar.Add(new Db.Calendar {
- Date = date,
+ Date = DateOnly.FromDateTime(date),
DayOfWeek = date.DayOfWeek.ToString(),
DayOfWeekShort = date.DayOfWeek.ToString()[..3],
MonthNameLong = date.ToString("MMMM"),
@@ -1295,7 +1295,7 @@ public Guid AddFileImportData()
seedContext.FileImportLogs.Add(new Db.FileImportLog {
FileImportLogId = logId,
EstateId = EstateId,
- ImportLogDate = DateTime.Today,
+ ImportLogDate = DateOnly.FromDateTime(DateTime.Today),
ImportLogDateTime = DateTime.Today.AddHours(1)
});
seedContext.EstateSecurityUsers.Add(new Db.EstateSecurityUser {
@@ -1329,7 +1329,7 @@ public void AddSettlementFee(Guid transactionId, decimal feeValue)
SettlementId = settlementId,
EstateId = EstateId,
MerchantId = MerchantId,
- SettlementDate = new DateTime(2026, 9, 1),
+ SettlementDate = new DateOnly(2026, 9, 1),
ProcessingStarted = true,
IsCompleted = true,
ProcessingStartedDateTIme = new DateTime(2026, 9, 1)
diff --git a/EstateReportingAPI.BusinessLogic.UnitTests/ReportingQueryExecutorTests.cs b/EstateReportingAPI.BusinessLogic.UnitTests/ReportingQueryExecutorTests.cs
index e3345d8..d74c4e5 100644
--- a/EstateReportingAPI.BusinessLogic.UnitTests/ReportingQueryExecutorTests.cs
+++ b/EstateReportingAPI.BusinessLogic.UnitTests/ReportingQueryExecutorTests.cs
@@ -70,7 +70,7 @@ private static TransactionProcessor.Database.Entities.Calendar CreateCalendar(Da
{
return new TransactionProcessor.Database.Entities.Calendar
{
- Date = date,
+ Date = DateOnly.FromDateTime(date),
Year = year,
DayOfWeek = "Monday",
DayOfWeekShort = "Mon",
diff --git a/EstateReportingAPI.BusinessLogic.UnitTests/RequestHandlerTests.cs b/EstateReportingAPI.BusinessLogic.UnitTests/RequestHandlerTests.cs
index 6ba11c6..021d315 100644
--- a/EstateReportingAPI.BusinessLogic.UnitTests/RequestHandlerTests.cs
+++ b/EstateReportingAPI.BusinessLogic.UnitTests/RequestHandlerTests.cs
@@ -21,7 +21,7 @@ public async Task SettlementRequestHandler_ForwardsRequestAndCancellationToken()
{
var manager = new ISettlementReportingServiceImposter();
var expected = Result.Success(new TodaysSettlement());
- var request = new SettlementQueries.TodaysSettlementQuery(Guid.NewGuid(), DateTime.Today);
+ var request = new SettlementQueries.TodaysSettlementQuery(Guid.NewGuid(), DateOnly.FromDateTime(DateTime.Today));
var cancellationToken = new CancellationTokenSource().Token;
manager.GetTodaysSettlement(Arg.Any(), Arg.Any())
.Returns(Task.FromResult(expected));
@@ -152,7 +152,7 @@ public async Task EstateRequestHandler_ForwardsEstateOperatorsRequest()
public async Task FileImportLogRequestHandler_ForwardsRequest()
{
var manager = new IFileImportReportingServiceImposter();
- var request = new FileImportLogQueries.GetFileImportLogListQuery(Guid.NewGuid(), null, DateTime.Today, DateTime.Today);
+ var request = new FileImportLogQueries.GetFileImportLogListQuery(Guid.NewGuid(), null, DateOnly.FromDateTime(DateTime.Today), DateOnly.FromDateTime(DateTime.Today));
manager.GetFileImportLogList(Arg.Any(), Arg.Any())
.Returns(Task.FromResult(Result.Success(new List())));
@@ -334,7 +334,7 @@ public async Task OperatorRequestHandler_ForwardsOperatorRequest()
public async Task TransactionRequestHandler_ForwardsRequest()
{
var manager = new ITransactionReportingServiceImposter();
- var request = new TransactionQueries.ProductPerformanceQuery(Guid.NewGuid(), DateTime.Today, DateTime.Today);
+ var request = new TransactionQueries.ProductPerformanceQuery(Guid.NewGuid(), DateOnly.FromDateTime(DateTime.Today), DateOnly.FromDateTime(DateTime.Today));
manager.GetProductPerformanceReport(Arg.Any(), Arg.Any())
.Returns(Task.FromResult(Result.Success(new ProductPerformanceResponse())));
diff --git a/EstateReportingAPI.BusinessLogic.UnitTests/UnitTest1.cs b/EstateReportingAPI.BusinessLogic.UnitTests/UnitTest1.cs
index b644e82..da5d1cf 100644
--- a/EstateReportingAPI.BusinessLogic.UnitTests/UnitTest1.cs
+++ b/EstateReportingAPI.BusinessLogic.UnitTests/UnitTest1.cs
@@ -42,7 +42,7 @@ public async Task ReportingService_GetCalendarYears_YearsAreReturned(){
await context.Database.EnsureCreatedAsync();
await context.Calendar.AddRangeAsync(new Calendar{
- Date = new DateTime(2023, 1, 1),
+ Date = new DateOnly(2023, 1, 1),
DayOfWeek = "Monday",
DayOfWeekShort = "Mon",
MonthNameLong = "January",
@@ -53,7 +53,7 @@ await context.Calendar.AddRangeAsync(new Calendar{
},
new Calendar
{
- Date = new DateTime(2022, 1, 1),
+ Date = new DateOnly(2022, 1, 1),
DayOfWeek = "Monday",
DayOfWeekShort = "Mon",
MonthNameLong = "January",
@@ -64,7 +64,7 @@ await context.Calendar.AddRangeAsync(new Calendar{
},
new Calendar
{
- Date = new DateTime(2021, 1, 1),
+ Date = new DateOnly(2021, 1, 1),
DayOfWeek = "Monday",
DayOfWeekShort = "Mon",
MonthNameLong = "January",
diff --git a/EstateReportingAPI.BusinessLogic/DatabaseModels.cs b/EstateReportingAPI.BusinessLogic/DatabaseModels.cs
index 168ec81..eac0ce0 100644
--- a/EstateReportingAPI.BusinessLogic/DatabaseModels.cs
+++ b/EstateReportingAPI.BusinessLogic/DatabaseModels.cs
@@ -6,7 +6,7 @@ internal sealed class MerchantData {
public Guid MerchantId { get; init; }
public int MerchantReportingId { get; init; }
public string? Name { get; init; }
- public DateTime CreatedDateTime { get; init; }
+ public DateTimeOffset CreatedDateTime { get; init; }
public string? Reference { get; init; }
public int SettlementSchedule { get; init; }
public MerchantAddressData? AddressInfo { get; init; }
diff --git a/EstateReportingAPI.BusinessLogic/Queries/FileImportLogQueries.cs b/EstateReportingAPI.BusinessLogic/Queries/FileImportLogQueries.cs
index 7ff5b68..304afe2 100644
--- a/EstateReportingAPI.BusinessLogic/Queries/FileImportLogQueries.cs
+++ b/EstateReportingAPI.BusinessLogic/Queries/FileImportLogQueries.cs
@@ -8,7 +8,7 @@ namespace EstateReportingAPI.BusinessLogic.Queries;
[ExcludeFromCodeCoverage]
public record FileImportLogQueries
{
- public record GetFileImportLogListQuery(Guid EstateId, Guid? MerchantId, DateTime StartDate, DateTime EndDate) : IRequest>>;
+ public record GetFileImportLogListQuery(Guid EstateId, Guid? MerchantId, DateOnly StartDate, DateOnly EndDate) : IRequest>>;
public record GetFileImportLogQuery(Guid EstateId, Guid? MerchantId, Guid FileImportLogId) : IRequest>;
}
diff --git a/EstateReportingAPI.BusinessLogic/Queries/SettlementQueries.cs b/EstateReportingAPI.BusinessLogic/Queries/SettlementQueries.cs
index 04269f1..47d240d 100644
--- a/EstateReportingAPI.BusinessLogic/Queries/SettlementQueries.cs
+++ b/EstateReportingAPI.BusinessLogic/Queries/SettlementQueries.cs
@@ -7,5 +7,5 @@ namespace EstateReportingAPI.BusinessLogic.Queries;
[ExcludeFromCodeCoverage]
public record SettlementQueries {
- public record TodaysSettlementQuery(Guid EstateId, DateTime ComparisonDate) : IRequest>;
+ public record TodaysSettlementQuery(Guid EstateId, DateOnly ComparisonDate) : IRequest>;
}
\ No newline at end of file
diff --git a/EstateReportingAPI.BusinessLogic/Queries/TransactionQueries.cs b/EstateReportingAPI.BusinessLogic/Queries/TransactionQueries.cs
index 770bbda..661549e 100644
--- a/EstateReportingAPI.BusinessLogic/Queries/TransactionQueries.cs
+++ b/EstateReportingAPI.BusinessLogic/Queries/TransactionQueries.cs
@@ -12,7 +12,7 @@ public record TodaysFailedSales(Guid EstateId, DateTime ComparisonDate, String R
public record TransactionDetailReportQuery(Guid EstateId, TransactionDetailReportRequest Request) : IRequest>;
public record TransactionSummaryByMerchantQuery(Guid EstateId, TransactionSummaryByMerchantRequest Request) : IRequest>;
public record TransactionSummaryByOperatorQuery(Guid EstateId, TransactionSummaryByOperatorRequest Request) : IRequest>;
- public record ProductPerformanceQuery(Guid EstateId, DateTime StartDate, DateTime EndDate, int PageNumber = 1, int PageSize = 50) : IRequest>;
+ public record ProductPerformanceQuery(Guid EstateId, DateOnly StartDate, DateOnly EndDate, int PageNumber = 1, int PageSize = 50) : IRequest>;
public record TransactionMixSummaryQuery(Guid EstateId, TransactionMixSummaryRequest Request) : IRequest>;
public record GetRecentActivityReceiptReportQuery(Guid EstateId, GetRecentActivityReceiptReportRequest Request) : IRequest>;
public record TodaysSalesByHour(Guid estateId, DateTime comparisonDate) : IRequest>>;
diff --git a/EstateReportingAPI.BusinessLogic/ReportQueryValidation.cs b/EstateReportingAPI.BusinessLogic/ReportQueryValidation.cs
index fc563b4..40efcb6 100644
--- a/EstateReportingAPI.BusinessLogic/ReportQueryValidation.cs
+++ b/EstateReportingAPI.BusinessLogic/ReportQueryValidation.cs
@@ -5,15 +5,12 @@ namespace EstateReportingAPI.BusinessLogic;
public static class ReportQueryValidation
{
- public static string? ValidateDateRange(DateTime startDate, DateTime endDate)
+ public static string? ValidateDateRange(DateOnly startDate, DateOnly endDate)
{
- DateTime start = startDate.Date;
- DateTime end = endDate.Date;
-
- if (start > end)
+ if (startDate > endDate)
return "startDate must be less than or equal to endDate.";
- if ((end - start).TotalDays + 1 > ReportQueryLimits.MaxDateRangeDays)
+ if ((endDate.DayNumber - startDate.DayNumber) + 1 > ReportQueryLimits.MaxDateRangeDays)
return "date range must not exceed 30 inclusive calendar days.";
return null;
diff --git a/EstateReportingAPI.BusinessLogic/Services/EstateReportingService.cs b/EstateReportingAPI.BusinessLogic/Services/EstateReportingService.cs
index dbe6025..bfbb742 100644
--- a/EstateReportingAPI.BusinessLogic/Services/EstateReportingService.cs
+++ b/EstateReportingAPI.BusinessLogic/Services/EstateReportingService.cs
@@ -34,9 +34,9 @@ public async Task>> GetCalendarComparisonDates(CalendarQue
using ResolvedDbContext? resolvedContext = Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString());
await using EstateManagementContext context = resolvedContext.Context;
- DateTime today = DatePolicy.Today.ToDateTime(TimeOnly.MinValue);
- DateTime startDate = today.AddYears(-1);
- DateTime endDate = today.AddDays(-1); // yesterday
+ DateOnly today = DatePolicy.Today;
+ DateOnly startDate = today.AddYears(-1);
+ DateOnly endDate = today.AddDays(-1); // yesterday
var result = await ReportingQueryExecutor.ToListAsync(context.Calendar.Where(c => c.Date >= startDate && c.Date <= endDate).OrderByDescending(c => c.Date), cancellationToken, "Error retrieving calendar comparison dates");
@@ -73,7 +73,7 @@ public async Task>> GetCalendarDates(CalendarQueries.GetAl
await using EstateManagementContext context = resolvedContext.Context;
- var result = await ReportingQueryExecutor.ToListAsync(context.Calendar.Where(c => c.Date <= DatePolicy.Today.ToDateTime(TimeOnly.MinValue)), cancellationToken, "Error retrieving calendar dates");
+ var result = await ReportingQueryExecutor.ToListAsync(context.Calendar.Where(c => c.Date <= DatePolicy.Today), cancellationToken, "Error retrieving calendar dates");
if (result.IsFailed)
return ResultHelpers.CreateFailure(result);
@@ -104,7 +104,7 @@ public async Task>> GetCalendarYears(CalendarQueries.GetYears
using ResolvedDbContext? resolvedContext = Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString());
await using EstateManagementContext context = resolvedContext.Context;
- var result = await ReportingQueryExecutor.ToListAsync(context.Calendar.Where(c => c.Date <= DatePolicy.Today.ToDateTime(TimeOnly.MinValue)).GroupBy(c => c.Year).Select(y => y.Key), cancellationToken, "Error retrieving calendar years");
+ var result = await ReportingQueryExecutor.ToListAsync(context.Calendar.Where(c => c.Date <= DatePolicy.Today).GroupBy(c => c.Year).Select(y => y.Key), cancellationToken, "Error retrieving calendar years");
if (result.IsFailed)
return ResultHelpers.CreateFailure(result);
diff --git a/EstateReportingAPI.BusinessLogic/Services/FileImportReportingService.cs b/EstateReportingAPI.BusinessLogic/Services/FileImportReportingService.cs
index cfaca40..341d072 100644
--- a/EstateReportingAPI.BusinessLogic/Services/FileImportReportingService.cs
+++ b/EstateReportingAPI.BusinessLogic/Services/FileImportReportingService.cs
@@ -33,7 +33,7 @@ from esu in esuJoin.DefaultIfEmpty()
join m in context.Merchants on f.MerchantId equals m.MerchantId into mJoin
from m in mJoin.DefaultIfEmpty()
join fl in context.FileLines on f.FileId equals fl.FileId
- where fil.ImportLogDate >= request.StartDate.Date && fil.ImportLogDate < request.EndDate.Date.AddDays(1)
+ where fil.ImportLogDate >= request.StartDate && fil.ImportLogDate < request.EndDate.AddDays(1)
&& (request.MerchantId == null || f.MerchantId == request.MerchantId)
select new FileImportFlatData {
FileImportLogId = fil.FileImportLogId,
@@ -186,11 +186,11 @@ join o in context.Operators on c.OperatorId equals o.OperatorId
}
private sealed class FileImportFlatData {
public Guid FileImportLogId { get; init; }
- public DateTime ImportLogDateTime { get; init; }
+ public DateTimeOffset ImportLogDateTime { get; init; }
public Guid FileId { get; init; }
public string? FileName { get; init; }
public Guid? FileProfileId { get; init; }
- public DateTime DateTimeUploaded { get; init; }
+ public DateTimeOffset DateTimeUploaded { get; init; }
public Guid UserId { get; init; }
public string? UploadedBy { get; init; }
public Guid MerchantId { get; init; }
diff --git a/EstateReportingAPI.BusinessLogic/Services/SettlementReportingService.cs b/EstateReportingAPI.BusinessLogic/Services/SettlementReportingService.cs
index 498620e..a69fcb3 100644
--- a/EstateReportingAPI.BusinessLogic/Services/SettlementReportingService.cs
+++ b/EstateReportingAPI.BusinessLogic/Services/SettlementReportingService.cs
@@ -28,7 +28,7 @@ public async Task> GetTodaysSettlement(SettlementQuerie
using ResolvedDbContext? resolvedContext = Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString());
await using EstateManagementContext context = resolvedContext.Context;
- IQueryable todaySettlementData = this.BuildTodaySettlementQuery(context, DatePolicy.Today.ToDateTime(TimeOnly.MinValue));
+ IQueryable todaySettlementData = this.BuildTodaySettlementQuery(context, DatePolicy.Today);
IQueryable comparisonSettlementData = this.BuildComparisonSettlementQuery(context, request.ComparisonDate);
DatabaseProjections.SettlementGroupProjection todaySettlement = await this.GetSettlementSummary(todaySettlementData, cancellationToken);
@@ -87,14 +87,14 @@ public async Task> GetTodaysSettlement(SettlementQuerie
}
private IQueryable BuildTodaySettlementQuery(EstateManagementContext context,
- DateTime settlementDate) {
+ DateOnly settlementDate) {
IQueryable settlementData = from s in context.Settlements join f in context.MerchantSettlementFees on s.SettlementId equals f.SettlementId join t in context.TodayTransactions on f.TransactionId equals t.TransactionId where s.SettlementDate == settlementDate select new DatabaseProjections.TodaySettlementTransactionProjection { Fee = f, Txn = t };
return settlementData;
}
private IQueryable BuildComparisonSettlementQuery(EstateManagementContext context,
- DateTime settlementDate) {
- IQueryable settlementData = from s in context.Settlements join f in context.MerchantSettlementFees on s.SettlementId equals f.SettlementId join t in context.TransactionHistory on f.TransactionId equals t.TransactionId where s.SettlementDate == settlementDate.Date select new DatabaseProjections.ComparisonSettlementTransactionProjection { Fee = f, Txn = t };
+ DateOnly settlementDate) {
+ IQueryable settlementData = from s in context.Settlements join f in context.MerchantSettlementFees on s.SettlementId equals f.SettlementId join t in context.TransactionHistory on f.TransactionId equals t.TransactionId where s.SettlementDate == settlementDate select new DatabaseProjections.ComparisonSettlementTransactionProjection { Fee = f, Txn = t };
return settlementData;
}
}
diff --git a/EstateReportingAPI.BusinessLogic/Services/TransactionReportingService.cs b/EstateReportingAPI.BusinessLogic/Services/TransactionReportingService.cs
index 287d8f5..d7a5c38 100644
--- a/EstateReportingAPI.BusinessLogic/Services/TransactionReportingService.cs
+++ b/EstateReportingAPI.BusinessLogic/Services/TransactionReportingService.cs
@@ -168,7 +168,7 @@ from msf in msfJoin.DefaultIfEmpty()
// left join Settlements (msf may be null)
join s in context.Settlements on msf.SettlementId equals s.SettlementId into sJoin
from s in sJoin.DefaultIfEmpty()
- where t.TransactionType != "Logon" && t.TransactionDate >= request.StartDate.Date && t.TransactionDate < request.EndDate.Date.AddDays(1)
+ where t.TransactionType != "Logon" && t.TransactionDate >= request.StartDate && t.TransactionDate < request.EndDate.AddDays(1)
select new TransactionDetailQueryResult {
TransactionId = t.TransactionId,
TransactionDateTime = t.TransactionDateTime,
@@ -336,12 +336,12 @@ private static async Task> LoadMerchantSummary
}
private static IQueryable BuildMerchantTransactionBaseQuery(EstateManagementContext context,
- DateTime startDate,
- DateTime endDate) {
+ DateOnly startDate,
+ DateOnly endDate) {
return from t in context.Transactions
join m in context.Merchants on t.MerchantId equals m.MerchantId
join o in context.Operators on t.OperatorId equals o.OperatorId
- where t.TransactionType == "Sale" && t.TransactionDate >= startDate.Date && t.TransactionDate < endDate.Date.AddDays(1)
+ where t.TransactionType == "Sale" && t.TransactionDate >= startDate && t.TransactionDate < endDate.AddDays(1)
group t by new { t.MerchantId, m.MerchantReportingId, MerchantName = m.Name, t.OperatorId, o.OperatorReportingId }
into g
select new MerchantTransactionGroupProjection {
@@ -443,7 +443,7 @@ private static IQueryable BuildOperatorTransactionBaseQ
IQueryable query = from t in context.Transactions
join m in context.Merchants on t.MerchantId equals m.MerchantId
join o in context.Operators on t.OperatorId equals o.OperatorId
- where t.TransactionType == "Sale" && t.TransactionDate >= request.Request.StartDate.Date && t.TransactionDate < request.Request.EndDate.Date.AddDays(1)
+ where t.TransactionType == "Sale" && t.TransactionDate >= request.Request.StartDate && t.TransactionDate < request.Request.EndDate.AddDays(1)
group t by new {
t.MerchantId,
m.MerchantReportingId,
@@ -558,7 +558,7 @@ private static async Task> LoadProductPerfo
TransactionQueries.ProductPerformanceQuery request,
CancellationToken cancellationToken) {
IQueryable grandTotalAmountQuery = from t in context.Transactions
- where t.TransactionType == "Sale" && t.TransactionDate >= request.StartDate.Date && t.TransactionDate < request.EndDate.Date.AddDays(1)
+ where t.TransactionType == "Sale" && t.TransactionDate >= request.StartDate && t.TransactionDate < request.EndDate.AddDays(1)
select t.TransactionAmount;
Result grandTotalAmountResult = await ReportingQueryExecutor.SumAsync(grandTotalAmountQuery, cancellationToken);
if (grandTotalAmountResult.IsFailed)
@@ -755,7 +755,7 @@ private static IQueryable BuildRecentActivityR
join m in context.Merchants on t.MerchantId equals m.MerchantId
join o in context.Operators on t.OperatorId equals o.OperatorId
join cp in context.ContractProducts on new { t.ContractProductId, t.ContractId } equals new { cp.ContractProductId, cp.ContractId }
- where t.TransactionDate == parameters.ReportDate.ToDateTime(TimeOnly.MinValue)
+ where t.TransactionDate == parameters.ReportDate
select new RecentActivityReceiptQueryResult {
TransactionId = t.TransactionId,
TransactionDateTime = t.TransactionDateTime,
@@ -833,13 +833,13 @@ private static RecentActivityReceiptItemDto MapRecentActivityReceiptItem(RecentA
}
private static IQueryable BuildProductPerformanceQuery(EstateManagementContext context,
- DateTime startDate,
- DateTime endDate,
+ DateOnly startDate,
+ DateOnly endDate,
decimal grandTotalAmount) {
return from t in context.Transactions
join cp in context.ContractProducts on new { t.ContractProductId, t.ContractId } equals new { cp.ContractProductId, cp.ContractId }
join c in context.Contracts on t.ContractId equals c.ContractId
- where t.TransactionType == "Sale" && t.TransactionDate >= startDate.Date && t.TransactionDate < endDate.Date.AddDays(1)
+ where t.TransactionType == "Sale" && t.TransactionDate >= startDate && t.TransactionDate < endDate.AddDays(1)
group t by new { cp.ProductName, cp.ContractProductId, cp.ContractProductReportingId, c.ContractId, c.ContractReportingId }
into g
select new ProductPerformanceItemData {
@@ -929,8 +929,8 @@ private static TransactionMixSummaryResponse BuildTransactionMixSummaryResponse(
{
return new TransactionMixSummaryResponse
{
- FromDate = DateOnly.FromDateTime(request.StartDate),
- ToDate = DateOnly.FromDateTime(request.EndDate),
+ FromDate = request.StartDate,
+ ToDate = request.EndDate,
Breakdown = request.Breakdown,
Measure = request.Measure,
TotalCount = totalCount,
@@ -1024,11 +1024,9 @@ public async Task> GetMerchantDa
using ResolvedDbContext? resolvedContext = Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString());
await using EstateManagementContext context = resolvedContext.Context;
- DateTime startDate = request.Request.StartDate.Date;
- DateTime endDate = request.Request.EndDate.Date;
- int dayCount = Math.Max((endDate - startDate).Days + 1, 1);
+ int dayCount = Math.Max((request.Request.EndDate.DayNumber - request.Request.StartDate.DayNumber) + 1, 1);
- Result> groupedTransactionsResult = await LoadMerchantDailyPerformanceGroups(context, request, startDate, endDate, cancellationToken);
+ Result> groupedTransactionsResult = await LoadMerchantDailyPerformanceGroups(context, request, request.Request.StartDate, request.Request.EndDate, cancellationToken);
if (groupedTransactionsResult.IsFailed)
return ResultHelpers.CreateFailure(groupedTransactionsResult);
@@ -1039,7 +1037,7 @@ public async Task> GetMerchantDa
List metrics = BuildMerchantDailyPerformanceMetrics(groupedTransactions, dayCount);
- Result> recentSalesResult = await LoadMerchantDailyPerformanceRecentSales(context, request, startDate, endDate, cancellationToken);
+ Result> recentSalesResult = await LoadMerchantDailyPerformanceRecentSales(context, request, request.Request.StartDate, request.Request.EndDate, cancellationToken);
if (recentSalesResult.IsFailed)
return ResultHelpers.CreateFailure(recentSalesResult);
@@ -1050,21 +1048,21 @@ public async Task> GetMerchantDa
}
private IQueryable BuildTodaySalesQuery(EstateManagementContext context, DateTime now) {
- return from t in context.TodayTransactions where t.IsAuthorised && t.TransactionType == "Sale" && t.TransactionDate == now.Date && t.TransactionTime <= now.TimeOfDay select t;
+ return from t in context.TodayTransactions where t.IsAuthorised && t.TransactionType == "Sale" && t.TransactionDate == DateOnly.FromDateTime(now.Date) && t.TransactionTime <= now.TimeOfDay select t;
}
private IQueryable BuildTodaysFailedSalesQuery(EstateManagementContext context,
String responseCode,
DateTime now) {
return from t in context.TodayTransactions
- where t.IsAuthorised == false && t.TransactionType == "Sale" && t.TransactionDate == now.Date && t.TransactionTime <= now.TimeOfDay && t.ResponseCode == responseCode
+ where t.IsAuthorised == false && t.TransactionType == "Sale" && t.TransactionDate == DateOnly.FromDateTime(now.Date) && t.TransactionTime <= now.TimeOfDay && t.ResponseCode == responseCode
select t.TransactionAmount;
}
private IQueryable BuildComparisonSalesQuery(EstateManagementContext context,
DateTime comparisonDate,
DateTime now) {
- return from t in context.TransactionHistory where t.IsAuthorised && t.TransactionType == "Sale" && t.TransactionDate == comparisonDate.Date && t.TransactionTime <= now.TimeOfDay select t;
+ return from t in context.TransactionHistory where t.IsAuthorised && t.TransactionType == "Sale" && t.TransactionDate == DateOnly.FromDateTime(comparisonDate.Date) && t.TransactionTime <= now.TimeOfDay select t;
}
private IQueryable BuildComparisonFailedSalesQuery(EstateManagementContext context,
@@ -1072,7 +1070,7 @@ private IQueryable BuildComparisonFailedSalesQuery(EstateManagementCont
String responseCode,
DateTime now) {
return from t in context.TransactionHistory
- where t.IsAuthorised == false && t.TransactionType == "Sale" && t.TransactionDate == comparisonDate.Date && t.TransactionTime <= now.TimeOfDay && t.ResponseCode == responseCode
+ where t.IsAuthorised == false && t.TransactionType == "Sale" && t.TransactionDate == DateOnly.FromDateTime(comparisonDate.Date) && t.TransactionTime <= now.TimeOfDay && t.ResponseCode == responseCode
select t.TransactionAmount;
}
@@ -1117,7 +1115,7 @@ private sealed class MerchantDailyPerformanceRecentSaleProjection {
public String Operator { get; init; }
public string Status { get; init; }
public decimal Amount { get; init; }
- public DateTime TransactionDateTime { get; init; }
+ public DateTimeOffset TransactionDateTime { get; init; }
}
private static MerchantDailyPerformanceSummaryResponse BuildEmptyMerchantDailyPerformanceSummaryResponse() {
@@ -1195,8 +1193,8 @@ private static List BuildMerchantDailyPerformanceMetrics(List>> LoadMerchantDailyPerformanceGroups(EstateManagementContext context,
TransactionQueries.MerchantDailyPerformanceSummaryQuery request,
- DateTime startDate,
- DateTime endDate,
+ DateOnly startDate,
+ DateOnly endDate,
CancellationToken cancellationToken) {
IQueryable query =
from t in context.Transactions
@@ -1206,7 +1204,7 @@ join op in context.Operators on t.OperatorId equals op.OperatorId into opJoin
from op in opJoin.DefaultIfEmpty()
where t.TransactionType == "Sale"
&& t.TransactionDate >= startDate
- && t.TransactionDate < endDate.Date.AddDays(1)
+ && t.TransactionDate < endDate.AddDays(1)
&& m.MerchantReportingId == request.Request.MerchantReportingId
group t by new
{
@@ -1231,8 +1229,8 @@ into g
private async Task>> LoadMerchantDailyPerformanceRecentSales(EstateManagementContext context,
TransactionQueries.MerchantDailyPerformanceSummaryQuery request,
- DateTime startDate,
- DateTime endDate,
+ DateOnly startDate,
+ DateOnly endDate,
CancellationToken cancellationToken) {
IQueryable query =
(from t in context.Transactions
@@ -1242,7 +1240,7 @@ join op in context.Operators on t.OperatorId equals op.OperatorId into opJoin
from op in opJoin.DefaultIfEmpty()
where t.TransactionType == "Sale"
&& t.TransactionDate >= startDate
- && t.TransactionDate < endDate.Date.AddDays(1)
+ && t.TransactionDate < endDate.AddDays(1)
&& m.MerchantReportingId == request.Request.MerchantReportingId
orderby t.TransactionDateTime descending, t.TransactionId descending
select new MerchantDailyPerformanceRecentSaleProjection
@@ -1272,7 +1270,7 @@ private static List MapMerchantDailyPerformanceRecentSales
private sealed class RecentActivityReceiptQueryResult {
public Guid TransactionId { get; init; }
- public DateTime TransactionDateTime { get; init; }
+ public DateTimeOffset TransactionDateTime { get; init; }
public int MerchantReportingId { get; init; }
public string Reference { get; init; }
public string? TransactionType { get; init; }
@@ -1293,7 +1291,7 @@ private sealed class RecentActivityReceiptRequestParameters {
private sealed class TransactionDetailQueryResult {
public Guid TransactionId { get; init; }
- public DateTime TransactionDateTime { get; init; }
+ public DateTimeOffset TransactionDateTime { get; init; }
public Guid MerchantId { get; init; }
public int MerchantReportingId { get; init; }
public string? MerchantName { get; init; }
diff --git a/EstateReportingAPI.DataTrasferObjects/Contract.cs b/EstateReportingAPI.DataTrasferObjects/Contract.cs
index 65dd340..60f1c38 100644
--- a/EstateReportingAPI.DataTrasferObjects/Contract.cs
+++ b/EstateReportingAPI.DataTrasferObjects/Contract.cs
@@ -103,7 +103,7 @@ public class EstateUser
/// The email address value.
public string? EmailAddress { get; set; }
/// The created date time value.
- public DateTime CreatedDateTime { get; set; }
+ public DateTimeOffset CreatedDateTime { get; set; }
}
/// API data model describing estate operator information.
diff --git a/EstateReportingAPI.DataTrasferObjects/Merchant.cs b/EstateReportingAPI.DataTrasferObjects/Merchant.cs
index 7ead333..104a673 100644
--- a/EstateReportingAPI.DataTrasferObjects/Merchant.cs
+++ b/EstateReportingAPI.DataTrasferObjects/Merchant.cs
@@ -21,7 +21,7 @@ public class Merchant{
/// The settlement schedule value.
public Int32 SettlementSchedule { get; set; }
/// The created date time value.
- public DateTime CreatedDateTime { get; set; }
+ public DateTimeOffset CreatedDateTime { get; set; }
/// The address id value.
diff --git a/EstateReportingAPI.IntegrationTests/DatabaseHelper.cs b/EstateReportingAPI.IntegrationTests/DatabaseHelper.cs
index 6307f96..2c48ec2 100644
--- a/EstateReportingAPI.IntegrationTests/DatabaseHelper.cs
+++ b/EstateReportingAPI.IntegrationTests/DatabaseHelper.cs
@@ -80,7 +80,7 @@ public async Task AddFileImportLog(Guid estateId, DateTime importDate){
FileImportLogId = Guid.NewGuid(),
EstateId = estateId,
ImportLogDateTime = importDate,
- ImportLogDate = importDate.Date
+ ImportLogDate = DateOnly.FromDateTime(importDate.Date)
};
await this.Context.AddAsync(fil);
@@ -264,7 +264,7 @@ public async Task AddTransactionOld(DateTime dateTime,
Transaction transaction = new Transaction
{
MerchantId = merchant.MerchantId,
- TransactionDate = dateTime.Date,
+ TransactionDate = DateOnly.FromDateTime(dateTime.Date),
TransactionDateTime = dateTime,
IsCompleted = true,
AuthorisationCode = "ABCD1234",
@@ -353,7 +353,7 @@ public async Task BuildTransactionX(DateTime dateTime,
Transaction transaction = new Transaction
{
MerchantId = merchantId,
- TransactionDate = dateTime.Date,
+ TransactionDate = DateOnly.FromDateTime(dateTime.Date),
TransactionDateTime = dateTime,
IsCompleted = true,
AuthorisationCode = "ABCD1234",
@@ -663,7 +663,7 @@ public async Task AddMerchants(String estateName,
EstateId = estate.EstateId,
MerchantId = Guid.NewGuid(),
Name = merchant1.merchantName,
- LastSaleDate = merchant1.lastSaleDateTime.Date,
+ LastSaleDate = DateOnly.FromDateTime(merchant1.lastSaleDateTime.Date),
LastSaleDateTime = merchant1.lastSaleDateTime
};
await this.Context.Merchants.AddAsync(merchant);
@@ -769,7 +769,7 @@ public async Task AddMerchantSettlementFee(Guid settlementId, DateTime feeCalcul
IsAuthorised = true,
IsCompleted = true,
TransactionAmount = 1.00m,
- TransactionDate = feeCalculatedDateTime.Date,
+ TransactionDate = DateOnly.FromDateTime(feeCalculatedDateTime.Date),
TransactionDateTime = feeCalculatedDateTime,
TransactionSource = 1,
TransactionTime = feeCalculatedDateTime.TimeOfDay,
@@ -853,7 +853,7 @@ public async Task AddSettlementRecordWithFees(DateTime dateTime,
EstateId = estateId,
MerchantId = merchantId,
ProcessingStartedDateTIme = dateTime,
- SettlementDate = dateTime,
+ SettlementDate = DateOnly.FromDateTime(dateTime),
SettlementId = Guid.NewGuid(),
};
await this.Context.Settlements.AddAsync(settlementRecord, CancellationToken.None);
diff --git a/EstateReportingAPI.IntegrationTests/Extensions.cs b/EstateReportingAPI.IntegrationTests/Extensions.cs
index a919cad..22e1c33 100644
--- a/EstateReportingAPI.IntegrationTests/Extensions.cs
+++ b/EstateReportingAPI.IntegrationTests/Extensions.cs
@@ -11,7 +11,7 @@ namespace EstateReportingAPI.IntegrationTests
public static class Extensions{
public static Calendar ToCalendar(this DateTime date){
return new Calendar{
- Date = date,
+ Date = DateOnly.FromDateTime(date),
DayOfWeek = date.DayOfWeek.ToString(),
DayOfWeekShort = date.DayOfWeek.ToString().Substring(0, 3),
YearWeekNumber = $"{date.Year}{date.GetWeekNumber().ToString().PadLeft(2, '0')}",
diff --git a/EstateReportingAPI.IntegrationTests/FileImportLogsEndpointTests.cs b/EstateReportingAPI.IntegrationTests/FileImportLogsEndpointTests.cs
index 26331bb..c4dfae7 100644
--- a/EstateReportingAPI.IntegrationTests/FileImportLogsEndpointTests.cs
+++ b/EstateReportingAPI.IntegrationTests/FileImportLogsEndpointTests.cs
@@ -40,12 +40,12 @@ private void AssertFileDetailsMatchesSource(FileDetails actual,
string uploadedBy,
Guid merchantId,
string merchantName,
- DateTime uploadedAt)
+ DateTimeOffset uploadedAt)
{
actual.FileId.ShouldBe(fileId);
actual.FileName.ShouldBe(fileName);
actual.FileProfile.ShouldBe(fileProfileId.ToString());
- actual.DateTimeUploaded.ShouldBe(ToUkDateTimeOffset(uploadedAt), TimeSpan.FromSeconds(1));
+ actual.DateTimeUploaded.ShouldBe(uploadedAt, TimeSpan.FromSeconds(1));
actual.UserId.ShouldBe(userId);
actual.UploadedBy.ShouldBe(uploadedBy);
actual.MerchantId.ShouldBe(merchantId);
@@ -98,7 +98,7 @@ public async Task FileImportEndpoint_GetFileImportLogs_WithMerchantFilter_Return
var match = list.Single();
match.FileImportLogId.ShouldBe(sourceLog.FileImportLogId);
- match.ImportLogDateTime.ShouldBe(ToUkDateTimeOffset(sourceLog.ImportLogDateTime), TimeSpan.FromSeconds(1));
+ match.ImportLogDateTime.ShouldBe(sourceLog.ImportLogDateTime, TimeSpan.FromSeconds(1));
match.FileDetailsList.Count.ShouldBe(1);
var fileDetail = match.FileDetailsList.Single();
@@ -146,7 +146,7 @@ public async Task FileImportEndpoint_GetFileImportLog_WithMerchantFilter_Returns
var sourceLine = this.context.FileLines.Single(x => x.FileId == fileId);
item.FileImportLogId.ShouldBe(sourceLog.FileImportLogId);
- item.ImportLogDateTime.ShouldBe(ToUkDateTimeOffset(sourceLog.ImportLogDateTime), TimeSpan.FromSeconds(1));
+ item.ImportLogDateTime.ShouldBe(sourceLog.ImportLogDateTime, TimeSpan.FromSeconds(1));
item.FileDetailsList.Count.ShouldBe(1);
var fileDetail = item.FileDetailsList.Single();
@@ -192,7 +192,7 @@ public async Task FileImportEndpoint_GetFileImportLog_ReturnsInsertedData()
var sourceLine = this.context.FileLines.Single(x => x.FileId == fileId);
item.FileImportLogId.ShouldBe(sourceLog.FileImportLogId);
- item.ImportLogDateTime.ShouldBe(ToUkDateTimeOffset(sourceLog.ImportLogDateTime), TimeSpan.FromSeconds(1));
+ item.ImportLogDateTime.ShouldBe(sourceLog.ImportLogDateTime, TimeSpan.FromSeconds(1));
item.FileDetailsList.Count.ShouldBe(1);
var fileDetail = item.FileDetailsList.Single();
@@ -277,7 +277,7 @@ public async Task FileImportEndpoint_GetFileImportLogs_ReturnsInsertedData()
var match = list.Single();
match.FileImportLogId.ShouldBe(sourceLog.FileImportLogId);
- match.ImportLogDateTime.ShouldBe(ToUkDateTimeOffset(sourceLog.ImportLogDateTime), TimeSpan.FromSeconds(1));
+ match.ImportLogDateTime.ShouldBe(sourceLog.ImportLogDateTime, TimeSpan.FromSeconds(1));
match.FileDetailsList.Count.ShouldBe(1);
var fileDetail = match.FileDetailsList.Single();
diff --git a/EstateReportingAPI.IntegrationTests/TransactionMixSummaryEndpointTests.cs b/EstateReportingAPI.IntegrationTests/TransactionMixSummaryEndpointTests.cs
index 6d87fa7..9e2ef9c 100644
--- a/EstateReportingAPI.IntegrationTests/TransactionMixSummaryEndpointTests.cs
+++ b/EstateReportingAPI.IntegrationTests/TransactionMixSummaryEndpointTests.cs
@@ -32,7 +32,7 @@ private void AssertTransactionMixSummaryTransactionMatches(TransactionMixSummary
var product = this.context.ContractProducts.Single(p => p.ContractProductId == source.ContractProductId && p.ContractId == source.ContractId);
actual.Id.ShouldBe(source.TransactionId);
- actual.DateTime.ShouldBe(ToUkDateTimeOffset(source.TransactionDateTime));
+ actual.DateTime.ShouldBe(source.TransactionDateTime);
actual.Merchant.ShouldBe(merchant.Name);
actual.MerchantId.ShouldBe(merchant.MerchantId);
actual.MerchantReportingId.ShouldBe(merchant.MerchantReportingId);
diff --git a/EstateReportingAPI.IntegrationTests/TransactionsEndpointTests.cs b/EstateReportingAPI.IntegrationTests/TransactionsEndpointTests.cs
index 06f2636..f3614c6 100644
--- a/EstateReportingAPI.IntegrationTests/TransactionsEndpointTests.cs
+++ b/EstateReportingAPI.IntegrationTests/TransactionsEndpointTests.cs
@@ -90,7 +90,7 @@ private static void AssertDrillDownTransactionMatches(DrillDownTransaction actua
actual.Product.ShouldBe(expectedProduct);
actual.Status.ShouldBe(source.IsAuthorised ? "Successful" : "Failed");
actual.Amount.ShouldBe(source.TransactionAmount);
- actual.TransactionDateTime.ShouldBe(ToUkDateTimeOffset(source.TransactionDateTime));
+ actual.TransactionDateTime.ShouldBe(source.TransactionDateTime);
}
private static void AssertRecentActivityReceiptItemMatches(JsonElement actual,
@@ -104,7 +104,7 @@ private static void AssertRecentActivityReceiptItemMatches(JsonElement actual,
GetPropertyCaseInsensitive(actual, "operator").GetString().ShouldBe(expectedOperator);
GetPropertyCaseInsensitive(actual, "status").GetString().ShouldBe(source.IsAuthorised ? "Successful" : "Failed");
GetPropertyCaseInsensitive(actual, "amount").GetDecimal().ShouldBe(source.TransactionAmount);
- DateTimeOffset.Parse(GetPropertyCaseInsensitive(actual, "transactionDateTime").GetString()!).ShouldBe(ToUkDateTimeOffset(source.TransactionDateTime));
+ DateTimeOffset.Parse(GetPropertyCaseInsensitive(actual, "transactionDateTime").GetString()!).ShouldBe(source.TransactionDateTime);
GetPropertyCaseInsensitive(actual, "receiptReference").GetString().ShouldBe(expectedReceiptReference);
}
@@ -114,7 +114,7 @@ private void AssertTransactionDetailMatches(TransactionDetail actual, Transactio
var product = this.context.ContractProducts.Single(p => p.ContractProductId == source.ContractProductId && p.ContractId == source.ContractId);
actual.Id.ShouldBe(source.TransactionId);
- actual.DateTime.ShouldBe(ToUkDateTimeOffset(source.TransactionDateTime));
+ actual.DateTime.ShouldBe(source.TransactionDateTime);
actual.Merchant.ShouldBe(merchant.Name);
actual.MerchantId.ShouldBe(merchant.MerchantId);
actual.MerchantReportingId.ShouldBe(merchant.MerchantReportingId);
@@ -1210,16 +1210,16 @@ public async Task TransactionsEndpoint_TodaysSalesByHour_SummaryDataReturned()
await this.helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date);
var todaysReadModelRows = await this.context.TodayTransactions
- .Where(t => t.TransactionDate == todaysDateTime.Date)
- .Select(t => new { t.TransactionDateTime, t.Hour })
- .ToListAsync();
+ .Where(t => t.TransactionDate == DateOnly.FromDateTime(todaysDateTime.Date))
+ .Select(t => new { t.TransactionDateTime, t.Hour })
+ .ToListAsync();
todaysReadModelRows.ShouldNotBeEmpty();
todaysReadModelRows.ShouldAllBe(x => x.Hour == x.TransactionDateTime.Hour);
var comparisonReadModelRows = await this.context.TransactionHistory
- .Where(t => t.TransactionDate == comparisonDate.Date)
- .Select(t => new { t.TransactionDateTime, t.Hour })
- .ToListAsync();
+ .Where(t => t.TransactionDate == DateOnly.FromDateTime(comparisonDate.Date))
+ .Select(t => new { t.TransactionDateTime, t.Hour })
+ .ToListAsync();
comparisonReadModelRows.ShouldNotBeEmpty();
comparisonReadModelRows.ShouldAllBe(x => x.Hour == x.TransactionDateTime.Hour);
diff --git a/EstateReportingAPI.Models/Calendar.cs b/EstateReportingAPI.Models/Calendar.cs
index 7d03d91..73c4433 100644
--- a/EstateReportingAPI.Models/Calendar.cs
+++ b/EstateReportingAPI.Models/Calendar.cs
@@ -3,7 +3,7 @@
public class Calendar{
#region Properties
- public DateTime Date{ get; set; }
+ public DateOnly Date { get; set; }
public String DayOfWeek{ get; set; }
diff --git a/EstateReportingAPI.Models/EstateUser.cs b/EstateReportingAPI.Models/EstateUser.cs
index f161cd4..e63fd01 100644
--- a/EstateReportingAPI.Models/EstateUser.cs
+++ b/EstateReportingAPI.Models/EstateUser.cs
@@ -4,5 +4,5 @@ public class EstateUser
{
public Guid UserId { get; set; }
public string? EmailAddress { get; set; }
- public DateTime CreatedDateTime { get; set; }
+ public DateTimeOffset CreatedDateTime { get; set; }
}
\ No newline at end of file
diff --git a/EstateReportingAPI.Models/FileDetails.cs b/EstateReportingAPI.Models/FileDetails.cs
index 5f502d1..fa11150 100644
--- a/EstateReportingAPI.Models/FileDetails.cs
+++ b/EstateReportingAPI.Models/FileDetails.cs
@@ -5,7 +5,7 @@ public class FileDetails
public Guid FileId { get; set; }
public string FileName { get; set; }
public string FileProfile { get; set; }
- public DateTime DateTimeUploaded { get; set; }
+ public DateTimeOffset DateTimeUploaded { get; set; }
public Guid UserId { get; set; }
public string UploadedBy { get; set; }
public Guid MerchantId { get; set; }
diff --git a/EstateReportingAPI.Models/FileImportLog.cs b/EstateReportingAPI.Models/FileImportLog.cs
index f25ebe9..05e60f6 100644
--- a/EstateReportingAPI.Models/FileImportLog.cs
+++ b/EstateReportingAPI.Models/FileImportLog.cs
@@ -3,6 +3,6 @@
public class FileImportLog
{
public Guid FileImportLogId { get; set; }
- public DateTime ImportLogDateTime { get; set; }
+ public DateTimeOffset ImportLogDateTime { get; set; }
public List FileDetailsList { get; set; }
}
\ No newline at end of file
diff --git a/EstateReportingAPI.Models/GetRecentActivityReceiptReportResponse.cs b/EstateReportingAPI.Models/GetRecentActivityReceiptReportResponse.cs
index 3ed5eb7..13b78ec 100644
--- a/EstateReportingAPI.Models/GetRecentActivityReceiptReportResponse.cs
+++ b/EstateReportingAPI.Models/GetRecentActivityReceiptReportResponse.cs
@@ -1,6 +1,4 @@
using System;
-using System.Collections.Generic;
-
namespace EstateReportingAPI.Models;
public class GetRecentActivityReceiptReportResponse
@@ -18,6 +16,6 @@ public class RecentActivityReceiptItemDto
public string? Operator { get; set; }
public string? Status { get; set; }
public decimal Amount { get; set; }
- public DateTime TransactionDateTime { get; set; }
+ public DateTimeOffset TransactionDateTime { get; set; }
public string? ReceiptReference { get; set; }
}
diff --git a/EstateReportingAPI.Models/Merchant.cs b/EstateReportingAPI.Models/Merchant.cs
index 9aec326..e23ef78 100644
--- a/EstateReportingAPI.Models/Merchant.cs
+++ b/EstateReportingAPI.Models/Merchant.cs
@@ -9,7 +9,7 @@ public class Merchant
public String Reference { get; set; }
public Decimal Balance { get; set; }
public Int32 SettlementSchedule { get; set; }
- public DateTime CreatedDateTime { get; set; }
+ public DateTimeOffset CreatedDateTime { get; set; }
public Guid AddressId { get; set; }
public String AddressLine1 { get; set; }
diff --git a/EstateReportingAPI.Models/MerchantDailyPerformanceSummaryRequest.cs b/EstateReportingAPI.Models/MerchantDailyPerformanceSummaryRequest.cs
index db6b03a..b939c32 100644
--- a/EstateReportingAPI.Models/MerchantDailyPerformanceSummaryRequest.cs
+++ b/EstateReportingAPI.Models/MerchantDailyPerformanceSummaryRequest.cs
@@ -7,8 +7,8 @@ namespace EstateReportingAPI.Models
public class MerchantDailyPerformanceSummaryRequest
{
public Int32 MerchantReportingId { get; set; }
- public DateTime StartDate { get; set; }
- public DateTime EndDate { get; set; }
+ public DateOnly StartDate { get; set; }
+ public DateOnly EndDate { get; set; }
}
public class MerchantDailyPerformanceSummaryResponse {
@@ -39,6 +39,6 @@ public class DrillDownTransaction {
public Decimal Amount { get; set; }
- public DateTime TransactionDateTime { get; set; }
+ public DateTimeOffset TransactionDateTime { get; set; }
}
}
diff --git a/EstateReportingAPI.Models/TransactionDetail.cs b/EstateReportingAPI.Models/TransactionDetail.cs
index ed8328f..5ef1ac9 100644
--- a/EstateReportingAPI.Models/TransactionDetail.cs
+++ b/EstateReportingAPI.Models/TransactionDetail.cs
@@ -2,7 +2,7 @@
public class TransactionDetail {
public Guid Id { get; set; }
- public DateTime DateTime { get; set; }
+ public DateTimeOffset DateTime { get; set; }
public String Merchant { get; set; }
public Guid MerchantId { get; set; }
public Int32 MerchantReportingId { get; set; }
diff --git a/EstateReportingAPI.Models/TransactionDetailReportRequest.cs b/EstateReportingAPI.Models/TransactionDetailReportRequest.cs
index 9f2a6ca..012d15c 100644
--- a/EstateReportingAPI.Models/TransactionDetailReportRequest.cs
+++ b/EstateReportingAPI.Models/TransactionDetailReportRequest.cs
@@ -5,8 +5,8 @@ public class TransactionDetailReportRequest
public List? Operators { get; set; }
public List? Merchants { get; set; }
public List? Products { get; set; }
- public DateTime StartDate { get; set; }
- public DateTime EndDate { get; set; }
+ public DateOnly StartDate { get; set; }
+ public DateOnly EndDate { get; set; }
public int PageNumber { get; set; } = 1;
public int PageSize { get; set; } = 50;
}
diff --git a/EstateReportingAPI.Models/TransactionMixSummaryRequest.cs b/EstateReportingAPI.Models/TransactionMixSummaryRequest.cs
index f669476..a4fbd4d 100644
--- a/EstateReportingAPI.Models/TransactionMixSummaryRequest.cs
+++ b/EstateReportingAPI.Models/TransactionMixSummaryRequest.cs
@@ -21,8 +21,8 @@ public enum TransactionMixMeasure
public class TransactionMixSummaryRequest
{
public int? MerchantReportingId { get; set; }
- public DateTime StartDate { get; set; }
- public DateTime EndDate { get; set; }
+ public DateOnly StartDate { get; set; }
+ public DateOnly EndDate { get; set; }
public TransactionMixBreakdown Breakdown { get; set; }
public TransactionMixMeasure Measure { get; set; }
public int TopN { get; set; } = 5;
diff --git a/EstateReportingAPI.Models/TransactionMixSummaryResponse.cs b/EstateReportingAPI.Models/TransactionMixSummaryResponse.cs
index 8dfdb81..2c9c167 100644
--- a/EstateReportingAPI.Models/TransactionMixSummaryResponse.cs
+++ b/EstateReportingAPI.Models/TransactionMixSummaryResponse.cs
@@ -24,7 +24,7 @@ public class TransactionMixSummaryGroup
public class TransactionMixSummaryTransaction
{
public Guid Id { get; set; }
- public DateTime DateTime { get; set; }
+ public DateTimeOffset DateTime { get; set; }
public string? Merchant { get; set; }
public Guid MerchantId { get; set; }
public int MerchantReportingId { get; set; }
diff --git a/EstateReportingAPI.Models/TransactionSummaryByMerchantRequest.cs b/EstateReportingAPI.Models/TransactionSummaryByMerchantRequest.cs
index b814215..919dcf0 100644
--- a/EstateReportingAPI.Models/TransactionSummaryByMerchantRequest.cs
+++ b/EstateReportingAPI.Models/TransactionSummaryByMerchantRequest.cs
@@ -4,8 +4,8 @@ public class TransactionSummaryByMerchantRequest
{
public List? Operators { get; set; }
public List? Merchants { get; set; }
- public DateTime StartDate { get; set; }
- public DateTime EndDate { get; set; }
+ public DateOnly StartDate { get; set; }
+ public DateOnly EndDate { get; set; }
public int PageNumber { get; set; } = 1;
public int PageSize { get; set; } = 50;
}
diff --git a/EstateReportingAPI.Models/TransactionSummaryByOperatorRequest.cs b/EstateReportingAPI.Models/TransactionSummaryByOperatorRequest.cs
index ab4b088..ac901e3 100644
--- a/EstateReportingAPI.Models/TransactionSummaryByOperatorRequest.cs
+++ b/EstateReportingAPI.Models/TransactionSummaryByOperatorRequest.cs
@@ -4,8 +4,8 @@ public class TransactionSummaryByOperatorRequest
{
public List? Operators { get; set; }
public List? Merchants { get; set; }
- public DateTime StartDate { get; set; }
- public DateTime EndDate { get; set; }
+ public DateOnly StartDate { get; set; }
+ public DateOnly EndDate { get; set; }
public int PageNumber { get; set; } = 1;
public int PageSize { get; set; } = 50;
}
diff --git a/EstateReportingAPI/Handlers/CalenderHandler.cs b/EstateReportingAPI/Handlers/CalenderHandler.cs
index 6ae0c6d..453eacf 100644
--- a/EstateReportingAPI/Handlers/CalenderHandler.cs
+++ b/EstateReportingAPI/Handlers/CalenderHandler.cs
@@ -32,7 +32,7 @@ public static async Task GetCalendarComparisonDates(IEstateContext esta
int orderValue = 3;
foreach (Calendar d in r)
- response.Add(new ComparisonDate { Date = DateOnly.FromDateTime(d.Date), Description = d.Date.ToString("yyyy-MM-dd"), OrderValue = orderValue++ });
+ response.Add(new ComparisonDate { Date = d.Date, Description = d.Date.ToString("yyyy-MM-dd"), OrderValue = orderValue++ });
return response.OrderBy(d => d.OrderValue);
});
diff --git a/EstateReportingAPI/Handlers/FileImportHandler.cs b/EstateReportingAPI/Handlers/FileImportHandler.cs
index 44f0e55..9c6b46c 100644
--- a/EstateReportingAPI/Handlers/FileImportHandler.cs
+++ b/EstateReportingAPI/Handlers/FileImportHandler.cs
@@ -41,15 +41,15 @@ public static async Task GetFileImportLogList(IEstateContext estateCont
IMediator mediator,
CancellationToken cancellationToken)
{
- FileImportLogQueries.GetFileImportLogListQuery query = new(estateContext.EstateId, merchantId, startDate.ToDateTime(TimeOnly.MinValue), endDate.ToDateTime(TimeOnly.MinValue));
+ FileImportLogQueries.GetFileImportLogListQuery query = new(estateContext.EstateId, merchantId, startDate, endDate);
Result> result = await mediator.Send(query, cancellationToken);
return ResponseFactory.FromResult(result, r => r.Select(m => new DataTransferObjects.FileImportLog
{
FileImportLogId = m.FileImportLogId,
- ImportLogDateTime = datePolicy.ToDateTimeOffset(m.ImportLogDateTime),
+ ImportLogDateTime = m.ImportLogDateTime,
FileDetailsList = m.FileDetailsList.Select(fd => new DataTransferObjects.FileDetails {
- DateTimeUploaded = datePolicy.ToDateTimeOffset(fd.DateTimeUploaded),
+ DateTimeUploaded = fd.DateTimeUploaded,
FileId = fd.FileId,
FileName = fd.FileName,
FileProfile = fd.FileProfile,
@@ -79,10 +79,10 @@ public static async Task GetFileImportLog(IEstateContext estateContext,
return ResponseFactory.FromResult(result, r => new DataTransferObjects.FileImportLog
{
FileImportLogId = r.FileImportLogId,
- ImportLogDateTime = datePolicy.ToDateTimeOffset(r.ImportLogDateTime),
+ ImportLogDateTime = r.ImportLogDateTime,
FileDetailsList = r.FileDetailsList.Select(fd => new DataTransferObjects.FileDetails
{
- DateTimeUploaded = datePolicy.ToDateTimeOffset(fd.DateTimeUploaded),
+ DateTimeUploaded = fd.DateTimeUploaded,
FileId = fd.FileId,
FileName = Path.GetFileName(fd.FileName),
FileProfile = fd.FileProfile,
diff --git a/EstateReportingAPI/Handlers/SettlementHandler.cs b/EstateReportingAPI/Handlers/SettlementHandler.cs
index 1dea593..2b2ed0b 100644
--- a/EstateReportingAPI/Handlers/SettlementHandler.cs
+++ b/EstateReportingAPI/Handlers/SettlementHandler.cs
@@ -13,7 +13,7 @@ public static async Task TodaysSettlements(IEstateContext estateContext
[FromQuery, Description("Date used to compare today's settlements with the corresponding day (YYYY-MM-DD).") ] DateOnly comparisonDate,
IMediator mediator,
CancellationToken cancellationToken) {
- var query = new SettlementQueries.TodaysSettlementQuery(estateContext.EstateId, comparisonDate.ToDateTime(TimeOnly.MinValue));
+ var query = new SettlementQueries.TodaysSettlementQuery(estateContext.EstateId, comparisonDate);
var result = await mediator.Send(query, cancellationToken);
return ResponseFactory.FromResult(result, r => new TodaysSettlement() {
diff --git a/EstateReportingAPI/Handlers/TransactionHandler.cs b/EstateReportingAPI/Handlers/TransactionHandler.cs
index 59b5ff6..d5f508c 100644
--- a/EstateReportingAPI/Handlers/TransactionHandler.cs
+++ b/EstateReportingAPI/Handlers/TransactionHandler.cs
@@ -58,8 +58,8 @@ public static async Task TransactionDetailReport(IEstateContext estateC
BusinessLogic.ReportingDatePolicy datePolicy,
IMediator mediator, CancellationToken cancellationToken) {
string? validationError = BusinessLogic.ReportQueryValidation.ValidateDateRange(
- request.StartDate.ToDateTime(TimeOnly.MinValue),
- request.EndDate.ToDateTime(TimeOnly.MinValue))
+ request.StartDate,
+ request.EndDate)
?? BusinessLogic.ReportQueryValidation.ValidatePaging(request.PageNumber, request.PageSize)
?? BusinessLogic.ReportQueryValidation.ValidateFilterList("merchants", request.Merchants)
?? BusinessLogic.ReportQueryValidation.ValidateFilterList("operators", request.Operators)
@@ -71,8 +71,8 @@ public static async Task TransactionDetailReport(IEstateContext estateC
Merchants = request.Merchants,
Operators = request.Operators,
Products = request.Products,
- StartDate = request.StartDate.ToDateTime(TimeOnly.MinValue),
- EndDate = request.EndDate.ToDateTime(TimeOnly.MinValue),
+ StartDate = request.StartDate,
+ EndDate = request.EndDate,
PageNumber = request.PageNumber,
PageSize = request.PageSize
};
@@ -91,7 +91,7 @@ TransactionDetailReportResponse SuccessFactory (Models.TransactionDetailReportRe
},
Transactions = r.Transactions.Select(t => new TransactionDetail {
TotalFees = t.TotalFees,
- DateTime = datePolicy.ToDateTimeOffset(t.DateTime),
+ DateTime = t.DateTime,
Id = t.Id,
Merchant = t.Merchant,
Operator = t.Operator,
@@ -119,8 +119,8 @@ public static async Task TransactionSummaryByMerchantReport(IEstateCont
[FromBody] TransactionSummaryByMerchantRequest request,
IMediator mediator, CancellationToken cancellationToken) {
string? validationError = BusinessLogic.ReportQueryValidation.ValidateDateRange(
- request.StartDate.ToDateTime(TimeOnly.MinValue),
- request.EndDate.ToDateTime(TimeOnly.MinValue))
+ request.StartDate,
+ request.EndDate)
?? BusinessLogic.ReportQueryValidation.ValidatePaging(request.PageNumber, request.PageSize)
?? BusinessLogic.ReportQueryValidation.ValidateFilterList("merchants", request.Merchants)
?? BusinessLogic.ReportQueryValidation.ValidateFilterList("operators", request.Operators);
@@ -130,8 +130,8 @@ public static async Task TransactionSummaryByMerchantReport(IEstateCont
Models.TransactionSummaryByMerchantRequest queryRequest = new() {
Merchants = request.Merchants,
Operators = request.Operators,
- StartDate = request.StartDate.ToDateTime(TimeOnly.MinValue),
- EndDate = request.EndDate.ToDateTime(TimeOnly.MinValue),
+ StartDate = request.StartDate,
+ EndDate = request.EndDate,
PageNumber = request.PageNumber,
PageSize = request.PageSize
};
@@ -171,12 +171,12 @@ public static async Task ProductPerformanceReport(IEstateContext estate
CancellationToken cancellationToken) {
int requestedPageNumber = pageNumber ?? 1;
int requestedPageSize = pageSize ?? 50;
- string? validationError = BusinessLogic.ReportQueryValidation.ValidateDateRange(startDate.ToDateTime(TimeOnly.MinValue), endDate.ToDateTime(TimeOnly.MinValue))
+ string? validationError = BusinessLogic.ReportQueryValidation.ValidateDateRange(startDate, endDate)
?? BusinessLogic.ReportQueryValidation.ValidatePaging(requestedPageNumber, requestedPageSize);
if (validationError != null)
return InvalidReportQuery(validationError);
- var query = new TransactionQueries.ProductPerformanceQuery(estateContext.EstateId, startDate.ToDateTime(TimeOnly.MinValue), endDate.ToDateTime(TimeOnly.MinValue), requestedPageNumber, requestedPageSize);
+ var query = new TransactionQueries.ProductPerformanceQuery(estateContext.EstateId, startDate, endDate, requestedPageNumber, requestedPageSize);
var result = await mediator.Send(query, cancellationToken);
ProductPerformanceResponse SuccessFactory(Models.ProductPerformanceResponse r) =>
new ProductPerformanceResponse
@@ -209,8 +209,8 @@ public static async Task TransactionSummaryByOperatorReport(IEstateCont
IMediator mediator, CancellationToken cancellationToken)
{
string? validationError = BusinessLogic.ReportQueryValidation.ValidateDateRange(
- request.StartDate.ToDateTime(TimeOnly.MinValue),
- request.EndDate.ToDateTime(TimeOnly.MinValue))
+ request.StartDate,
+ request.EndDate)
?? BusinessLogic.ReportQueryValidation.ValidatePaging(request.PageNumber, request.PageSize)
?? BusinessLogic.ReportQueryValidation.ValidateFilterList("merchants", request.Merchants)
?? BusinessLogic.ReportQueryValidation.ValidateFilterList("operators", request.Operators);
@@ -221,8 +221,8 @@ public static async Task TransactionSummaryByOperatorReport(IEstateCont
{
Merchants = request.Merchants,
Operators = request.Operators,
- StartDate = request.StartDate.ToDateTime(TimeOnly.MinValue),
- EndDate = request.EndDate.ToDateTime(TimeOnly.MinValue),
+ StartDate = request.StartDate,
+ EndDate = request.EndDate,
PageNumber = request.PageNumber,
PageSize = request.PageSize
};
@@ -262,8 +262,8 @@ public static async Task TransactionMixSummary(IEstateContext estateCon
CancellationToken cancellationToken)
{
string? validationError = BusinessLogic.ReportQueryValidation.ValidateDateRange(
- request.StartDate.ToDateTime(TimeOnly.MinValue),
- request.EndDate.ToDateTime(TimeOnly.MinValue))
+ request.StartDate,
+ request.EndDate)
?? BusinessLogic.ReportQueryValidation.ValidatePaging(request.PageNumber, request.PageSize)
?? BusinessLogic.ReportQueryValidation.ValidateTopN(request.TopN);
if (validationError != null)
@@ -276,8 +276,8 @@ public static async Task TransactionMixSummary(IEstateContext estateCon
Models.TransactionMixSummaryRequest queryRequest = new()
{
MerchantReportingId = request.MerchantReportingId,
- StartDate = request.StartDate.ToDateTime(TimeOnly.MinValue),
- EndDate = request.EndDate.ToDateTime(TimeOnly.MinValue),
+ StartDate = request.StartDate,
+ EndDate = request.EndDate,
Breakdown = (Models.TransactionMixBreakdown)request.Breakdown,
Measure = (Models.TransactionMixMeasure)request.Measure,
TopN = request.TopN,
@@ -313,7 +313,7 @@ TransactionMixSummaryResponse SuccessFactory(Models.TransactionMixSummaryRespons
Transactions = r.Transactions.Select(t => new TransactionMixSummaryTransaction
{
Id = t.Id,
- DateTime = datePolicy.ToDateTimeOffset(t.DateTime),
+ DateTime = t.DateTime,
Merchant = t.Merchant,
MerchantId = t.MerchantId,
MerchantReportingId = t.MerchantReportingId,
@@ -375,7 +375,7 @@ GetRecentActivityReceiptReportResponse SuccessFactory(Models.GetRecentActivityRe
Operator = item.Operator,
Status = item.Status,
Amount = item.Amount,
- TransactionDateTime = datePolicy.ToDateTimeOffset(item.TransactionDateTime),
+ TransactionDateTime = item.TransactionDateTime,
ReceiptReference = item.ReceiptReference
}).ToList()
};
@@ -411,15 +411,15 @@ public static async Task MerchantDailyPerformanceSummary(IEstateContext
IMediator mediator, CancellationToken cancellationToken)
{
string? validationError = BusinessLogic.ReportQueryValidation.ValidateDateRange(
- request.StartDate.ToDateTime(TimeOnly.MinValue),
- request.EndDate.ToDateTime(TimeOnly.MinValue));
+ request.StartDate,
+ request.EndDate);
if (validationError != null)
return InvalidReportQuery(validationError);
TransactionQueries.MerchantDailyPerformanceSummaryQuery query = new(estateContext.EstateId, new Models.MerchantDailyPerformanceSummaryRequest {
- EndDate = request.EndDate.ToDateTime(TimeOnly.MinValue),
+ EndDate = request.EndDate,
MerchantReportingId = request.MerchantReportingId,
- StartDate = request.StartDate.ToDateTime(TimeOnly.MinValue)
+ StartDate = request.StartDate
});
Result result = await mediator.Send(query, cancellationToken);
@@ -440,7 +440,7 @@ MerchantDailyPerformanceSummaryResponse SuccessFactory(Models.MerchantDailyPerfo
Product = $"{transaction.Operator} {transaction.Product}",
Status = transaction.Status,
Amount = transaction.Amount,
- TransactionDateTime = datePolicy.ToDateTimeOffset(transaction.TransactionDateTime)
+ TransactionDateTime = transaction.TransactionDateTime
}).ToList() ?? []
};