From 73d1ed0be669a53db0ab883f7cffce944a393e87 Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Wed, 6 Sep 2023 21:46:35 +0100 Subject: [PATCH] Todays Settlement API --- .../Controllers/FactSettlementController.cs | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 EstateReportingAPI/Controllers/FactSettlementController.cs diff --git a/EstateReportingAPI/Controllers/FactSettlementController.cs b/EstateReportingAPI/Controllers/FactSettlementController.cs new file mode 100644 index 0000000..c7c464a --- /dev/null +++ b/EstateReportingAPI/Controllers/FactSettlementController.cs @@ -0,0 +1,76 @@ +using EstateManagement.Database.Contexts; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System.Diagnostics.CodeAnalysis; + +namespace EstateReportingAPI.Controllers +{ + using Shared.EntityFramework; + + [ExcludeFromCodeCoverage] + [Route(FactSettlementsController.ControllerRoute)] + [ApiController] + public class FactSettlementsController : ControllerBase + { + #region Others + + /// + /// The controller name + /// + public const String ControllerName = "settlements"; + + /// + /// The controller route + /// + private const String ControllerRoute = "api/facts/" + FactSettlementsController.ControllerName; + + #endregion + + private readonly IDbContextFactory ContextFactory; + + public FactSettlementsController(IDbContextFactory contextFactory) + { + this.ContextFactory = contextFactory; + } + + private const String ConnectionStringIdentifier = "EstateReportingReadModel"; + + [HttpGet] + [Route("todayssettlement")] + public async Task TodaysSettlement([FromHeader] Guid estateId, [FromQuery] DateTime comparisonDate, CancellationToken cancellationToken) + { + EstateManagementGenericContext? context = await this.ContextFactory.GetContext(estateId, FactSettlementsController.ConnectionStringIdentifier, cancellationToken); + + // First we need to get a value of todays sales + Decimal todaysSettlement = (from s in context.Settlements + join f in context.MerchantSettlementFees on s.SettlementReportingId equals f.SettlementReportingId + where f.IsSettled && s.SettlementDate == DateTime.Now.Date + select f.CalculatedValue).Sum(); + + Int32 todaysSettlementCount = (from s in context.Settlements + join f in context.MerchantSettlementFees on s.SettlementReportingId equals f.SettlementReportingId + where f.IsSettled && s.SettlementDate == DateTime.Now.Date + select f.CalculatedValue).Count(); + + Decimal comparisonSettlement = (from s in context.Settlements + join f in context.MerchantSettlementFees on s.SettlementReportingId equals f.SettlementReportingId + where f.IsSettled && s.SettlementDate == comparisonDate + select f.CalculatedValue).Sum(); + + Int32 comparisonSettlementCount = (from s in context.Settlements + join f in context.MerchantSettlementFees on s.SettlementReportingId equals f.SettlementReportingId + where f.IsSettled && s.SettlementDate == comparisonDate + select f.CalculatedValue).Count(); + + var response = new + { + TodaysSettlementValue = todaysSettlement, + TodaysSettlementCount = todaysSettlementCount, + ComparisonSettlement = comparisonSettlement, + ComparisonSettlementCount = comparisonSettlementCount + }; + + return this.Ok(response); + } + } +}