Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 0 additions & 38 deletions EstateReportingAPI.BusinessLogic/ReportingManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -552,44 +552,6 @@ public async Task<List<TopBottomData>> GetTopBottomData(Guid estateId, TopBottom
return await queryable.Take(resultCount).ToListAsync(cancellationToken);
}

public async Task<TodaysSales> GetMerchantPerformance(Guid estateId, DateTime comparisonDate, List<Int32> merchantReportingIds, CancellationToken cancellationToken){
using ResolvedDbContext<EstateManagementContext>? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString());
await using EstateManagementContext context = resolvedContext.Context;

// First we need to get a value of todays sales
var todaysSalesQuery = (from t in context.TodayTransactions
where t.IsAuthorised && t.TransactionType == "Sale"
&& t.TransactionDate == DateTime.Now.Date
&& t.TransactionTime <= DateTime.Now.TimeOfDay
select t);

var comparisonSalesQuery = (from t in context.TransactionHistory
where t.IsAuthorised && t.TransactionType == "Sale"
&& t.TransactionDate == comparisonDate
&& t.TransactionTime <= DateTime.Now.TimeOfDay
select t);


if (merchantReportingIds.Any()){
todaysSalesQuery = todaysSalesQuery.Where(t => merchantReportingIds.Contains(t.MerchantReportingId));
comparisonSalesQuery = comparisonSalesQuery.Where(t => merchantReportingIds.Contains(t.MerchantReportingId));
}

TodaysSales response = new TodaysSales
{
ComparisonSalesCount = comparisonSalesQuery.Count(),
ComparisonSalesValue = comparisonSalesQuery.Sum(t => t.TransactionAmount),
TodaysSalesCount = todaysSalesQuery.Count(),
TodaysSalesValue = todaysSalesQuery.Sum(t => t.TransactionAmount),
};
response.ComparisonAverageSalesValue =
SafeDivide(response.ComparisonSalesValue, response.ComparisonSalesCount);
response.TodaysAverageSalesValue =
SafeDivide(response.TodaysSalesValue, response.TodaysSalesCount);

return response;
}

private Int32 SafeDivide(Int32 number, Int32 divisor)
{
if (divisor == 0)
Expand Down
18 changes: 18 additions & 0 deletions EstateReportingAPI.BusinessLogic/ReportingManagerExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,27 @@
using EstateReportingAPI.Models;
using TransactionProcessor.Database.Contexts;
using TransactionProcessor.Database.Entities.Summary;

namespace EstateReportingAPI.BusinessLogic;

public static class ReportingManagerExtensions{
public static IQueryable<TodayTransaction> ApplyMerchantFilter(this IQueryable<TodayTransaction> query, List<int> merchantReportingIds)
{
if (merchantReportingIds == null || merchantReportingIds.Count == 0)
return query;

return query.Where(t => merchantReportingIds.Contains(t.MerchantReportingId)).AsQueryable();
}

public static IQueryable<TransactionHistory> ApplyMerchantFilter(this IQueryable<TransactionHistory> query, List<int> merchantReportingIds)
{
if (merchantReportingIds == null || merchantReportingIds.Count == 0)
return query;

return query.Where(t => merchantReportingIds.Contains(t.MerchantReportingId)).AsQueryable();
}


public static IQueryable<DatabaseProjections.FeeTransactionProjection> ApplyMerchantFilter(this IQueryable<DatabaseProjections.FeeTransactionProjection> query,
EstateManagementContext context,
List<int> merchantIds)
Expand Down
37 changes: 37 additions & 0 deletions EstateReportingAPI.BusinessLogic/ReportingManagerRefactored.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using System.Threading.Tasks;
using TransactionProcessor.Database.Contexts;
using TransactionProcessor.Database.Entities;
using TransactionProcessor.Database.Entities.Summary;
using Merchant = TransactionProcessor.Database.Entities.Merchant;
using Operator = TransactionProcessor.Database.Entities.Operator;

Expand Down Expand Up @@ -42,6 +43,14 @@ join product in context.ContractProducts on txn.ContractProductId equals product
};
}

private IQueryable<TodayTransaction> BuildTodaySalesQuery(EstateManagementContext context) {
return from t in context.TodayTransactions where t.IsAuthorised && t.TransactionType == "Sale" && t.TransactionDate == DateTime.Now.Date && t.TransactionTime <= DateTime.Now.TimeOfDay select t;
}

private IQueryable<TransactionHistory> BuildComparisonSalesQuery(EstateManagementContext context, DateTime comparisonDate) {
return from t in context.TransactionHistory where t.IsAuthorised && t.TransactionType == "Sale" && t.TransactionDate == comparisonDate && t.TransactionTime <= DateTime.Now.TimeOfDay select t;
}

public async Task<List<UnsettledFee>> GetUnsettledFees(Guid estateId, DateTime startDate, DateTime endDate, List<Int32> merchantIds, List<Int32> operatorIds, List<Int32> productIds, GroupByOption? groupByOption, CancellationToken cancellationToken)
{

Expand Down Expand Up @@ -105,6 +114,34 @@ public async Task<List<TransactionResult>> TransactionSearch(Guid estateId, Tran
return results;
}

public async Task<TodaysSales> GetMerchantPerformance(Guid estateId, DateTime comparisonDate, List<Int32> merchantReportingIds, CancellationToken cancellationToken)
{
using ResolvedDbContext<EstateManagementContext>? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString());
await using EstateManagementContext context = resolvedContext.Context;

// First we need to get a value of todays sales
IQueryable<TodayTransaction> todaysSalesQuery = BuildTodaySalesQuery(context);
IQueryable<TransactionHistory> comparisonSalesQuery = BuildComparisonSalesQuery(context, comparisonDate);

todaysSalesQuery = todaysSalesQuery.ApplyMerchantFilter(merchantReportingIds);
comparisonSalesQuery = comparisonSalesQuery.ApplyMerchantFilter(merchantReportingIds);

// Build the response
TodaysSales response = new TodaysSales
{
ComparisonSalesCount = await comparisonSalesQuery.CountAsync(cancellationToken),
ComparisonSalesValue = await comparisonSalesQuery.SumAsync(t => t.TransactionAmount, cancellationToken),
TodaysSalesCount = await todaysSalesQuery.CountAsync(cancellationToken),
TodaysSalesValue = await todaysSalesQuery.SumAsync(t => t.TransactionAmount, cancellationToken),
};
response.ComparisonAverageSalesValue =
SafeDivide(response.ComparisonSalesValue, response.ComparisonSalesCount);
response.TodaysAverageSalesValue =
SafeDivide(response.TodaysSalesValue, response.TodaysSalesCount);

return response;
}

}

public class DatabaseProjections {
Expand Down
Loading