Skip to content

Commit cdcce31

Browse files
refactor get operator performance
1 parent b1fb14e commit cdcce31

3 files changed

Lines changed: 44 additions & 40 deletions

File tree

EstateReportingAPI.BusinessLogic/ReportingManager.cs

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -571,45 +571,6 @@ private Decimal SafeDivide(Decimal number, Int32 divisor)
571571

572572
return number / divisor;
573573
}
574-
575-
public async Task<TodaysSales> GetOperatorPerformance(Guid estateId, DateTime comparisonDate, List<Int32> operatorReportingIds, CancellationToken cancellationToken){
576-
using ResolvedDbContext<EstateManagementContext>? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString());
577-
await using EstateManagementContext context = resolvedContext.Context;
578-
579-
// First we need to get a value of todays sales
580-
var todaysSalesQuery = (from t in context.TodayTransactions
581-
where t.IsAuthorised && t.TransactionType == "Sale"
582-
&& t.TransactionDate == DateTime.Now.Date
583-
&& t.TransactionTime <= DateTime.Now.TimeOfDay
584-
select t);
585-
586-
var comparisonSalesQuery = (from t in context.TransactionHistory
587-
where t.IsAuthorised && t.TransactionType == "Sale"
588-
&& t.TransactionDate == comparisonDate
589-
&& t.TransactionTime <= DateTime.Now.TimeOfDay
590-
select t);
591-
592-
593-
if (operatorReportingIds.Any())
594-
{
595-
todaysSalesQuery = todaysSalesQuery.Where(t => operatorReportingIds.Contains(t.OperatorReportingId));
596-
comparisonSalesQuery = comparisonSalesQuery.Where(t => operatorReportingIds.Contains(t.OperatorReportingId));
597-
}
598-
599-
TodaysSales response = new TodaysSales
600-
{
601-
ComparisonSalesCount = comparisonSalesQuery.Count(),
602-
ComparisonSalesValue = comparisonSalesQuery.Sum(t => t.TransactionAmount),
603-
TodaysSalesCount = todaysSalesQuery.Count(),
604-
TodaysSalesValue = todaysSalesQuery.Sum(t => t.TransactionAmount),
605-
};
606-
response.ComparisonAverageSalesValue =
607-
SafeDivide(response.ComparisonSalesValue, response.ComparisonSalesCount);
608-
response.TodaysAverageSalesValue =
609-
SafeDivide(response.TodaysSalesValue, response.TodaysSalesCount);
610-
611-
return response;
612-
}
613574

614575
public async Task<List<Merchant>> GetMerchants(Guid estateId,
615576
CancellationToken cancellationToken) {

EstateReportingAPI.BusinessLogic/ReportingManagerExtensions.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,28 @@ public static IQueryable<TodayTransaction> ApplyProductFilter(this IQueryable<To
3131

3232
public static IQueryable<TransactionHistory> ApplyProductFilter(this IQueryable<TransactionHistory> query, List<int> productReportingIds)
3333
{
34-
if (merchantReportingIds == null || productReportingIds.Count == 0)
34+
if (productReportingIds == null || productReportingIds.Count == 0)
3535
return query;
3636

3737
return query.Where(t => productReportingIds.Contains(t.ContractProductReportingId)).AsQueryable();
3838
}
3939

40+
public static IQueryable<TodayTransaction> ApplyOperatorFilter(this IQueryable<TodayTransaction> query, List<int> operatorReportingIds)
41+
{
42+
if (operatorReportingIds == null || operatorReportingIds.Count == 0)
43+
return query;
44+
45+
return query.Where(t => operatorReportingIds.Contains(t.OperatorReportingId)).AsQueryable();
46+
}
47+
48+
public static IQueryable<TransactionHistory> ApplyOperatorFilter(this IQueryable<TransactionHistory> query, List<int> operatorReportingIds)
49+
{
50+
if (operatorReportingIds == null || operatorReportingIds.Count == 0)
51+
return query;
52+
53+
return query.Where(t => operatorReportingIds.Contains(t.OperatorReportingId)).AsQueryable();
54+
}
55+
4056
public static IQueryable<DatabaseProjections.FeeTransactionProjection> ApplyMerchantFilter(this IQueryable<DatabaseProjections.FeeTransactionProjection> query,
4157
EstateManagementContext context,
4258
List<int> merchantIds)

EstateReportingAPI.BusinessLogic/ReportingManagerRefactored.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,33 @@ public async Task<TodaysSales> GetProductPerformance(Guid estateId, DateTime com
169169
return response;
170170
}
171171

172+
public async Task<TodaysSales> GetOperatorPerformance(Guid estateId, DateTime comparisonDate, List<Int32> operatorReportingIds, CancellationToken cancellationToken)
173+
{
174+
using ResolvedDbContext<EstateManagementContext>? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString());
175+
await using EstateManagementContext context = resolvedContext.Context;
176+
177+
// First we need to get a value of todays sales
178+
IQueryable<TodayTransaction> todaysSalesQuery = BuildTodaySalesQuery(context);
179+
IQueryable<TransactionHistory> comparisonSalesQuery = BuildComparisonSalesQuery(context, comparisonDate);
180+
181+
todaysSalesQuery = todaysSalesQuery.ApplyOperatorFilter(operatorReportingIds);
182+
comparisonSalesQuery = comparisonSalesQuery.ApplyOperatorFilter(operatorReportingIds);
183+
184+
TodaysSales response = new TodaysSales
185+
{
186+
ComparisonSalesCount = await comparisonSalesQuery.CountAsync(cancellationToken),
187+
ComparisonSalesValue = await comparisonSalesQuery.SumAsync(t => t.TransactionAmount, cancellationToken),
188+
TodaysSalesCount = await todaysSalesQuery.CountAsync(cancellationToken),
189+
TodaysSalesValue = await todaysSalesQuery.SumAsync(t => t.TransactionAmount, cancellationToken),
190+
};
191+
response.ComparisonAverageSalesValue =
192+
SafeDivide(response.ComparisonSalesValue, response.ComparisonSalesCount);
193+
response.TodaysAverageSalesValue =
194+
SafeDivide(response.TodaysSalesValue, response.TodaysSalesCount);
195+
196+
return response;
197+
}
198+
172199
}
173200

174201
public class DatabaseProjections {

0 commit comments

Comments
 (0)