diff --git a/EstateReportingAPI/Controllers/FactTransactionsController.cs b/EstateReportingAPI/Controllers/FactTransactionsController.cs new file mode 100644 index 0000000..115f193 --- /dev/null +++ b/EstateReportingAPI/Controllers/FactTransactionsController.cs @@ -0,0 +1,76 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System.Diagnostics.CodeAnalysis; + +namespace EstateReportingAPI.Controllers +{ + using System.Collections.Specialized; + using DataTrasferObjects; + using EstateManagement.Database.Contexts; + using System.Web; + using Microsoft.IdentityModel.Protocols; + using Shared.EntityFramework; + + [ExcludeFromCodeCoverage] + [Route(FactTransactionsController.ControllerRoute)] + [ApiController] + public class FactTransactionsController : ControllerBase + { + #region Others + + /// + /// The controller name + /// + public const String ControllerName = "transactions"; + + /// + /// The controller route + /// + private const String ControllerRoute = "api/facts/" + FactTransactionsController.ControllerName; + + #endregion + + private readonly IDbContextFactory ContextFactory; + + public FactTransactionsController(IDbContextFactory contextFactory){ + this.ContextFactory = contextFactory; + } + + private const String ConnectionStringIdentifier = "EstateReportingReadModel"; + + [HttpGet] + [Route("todayssales")] + public async Task TodaysSales([FromHeader] Guid estateId, [FromQuery] DateTime comparisonDate, CancellationToken cancellationToken) + { + EstateManagementGenericContext? context = await this.ContextFactory.GetContext(estateId, FactTransactionsController.ConnectionStringIdentifier, cancellationToken); + + // TODO: this code will be refactored once there is a decimal value in either the Transactions table or the TransactionsAdditionalRequestData + // https://github.com/TransactionProcessing/EstateManagement/issues/403 + // First we need to get a value of todays sales + List todaysSales = (from t in context.Transactions + join r in context.TransactionsAdditionalRequestData on t.TransactionReportingId equals r.TransactionReportingId + where t.IsAuthorised && t.TransactionType == "Sale" + && t.TransactionDate == DateTime.Now.Date + && t.TransactionTime <= DateTime.Now.TimeOfDay + && r.Amount != null + select r.Amount).ToList(); + + List comparisonSales = (from t in context.Transactions + join r in context.TransactionsAdditionalRequestData on t.TransactionReportingId equals r.TransactionReportingId + where t.IsAuthorised && t.TransactionType == "Sale" + && t.TransactionDate == comparisonDate + && t.TransactionTime <= DateTime.Now.TimeOfDay + && r.Amount != null + select r.Amount).ToList(); + + var response = new{ + TodaysSalesValue = todaysSales.Sum(Decimal.Parse), + TodaysSalesCount = todaysSales.Count, + ComparisonSales = comparisonSales.Sum(Decimal.Parse), + ComparisonSalesCount = comparisonSales.Count() + }; + + return this.Ok(response); + } + } +}