Skip to content

Commit b1fb14e

Browse files
refactor getproductperformance
1 parent a40d612 commit b1fb14e

3 files changed

Lines changed: 42 additions & 40 deletions

File tree

EstateReportingAPI.BusinessLogic/ReportingManager.cs

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -572,46 +572,6 @@ private Decimal SafeDivide(Decimal number, Int32 divisor)
572572
return number / divisor;
573573
}
574574

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

EstateReportingAPI.BusinessLogic/ReportingManagerExtensions.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,21 @@ public static IQueryable<TransactionHistory> ApplyMerchantFilter(this IQueryable
2121
return query.Where(t => merchantReportingIds.Contains(t.MerchantReportingId)).AsQueryable();
2222
}
2323

24+
public static IQueryable<TodayTransaction> ApplyProductFilter(this IQueryable<TodayTransaction> query, List<int> productReportingIds)
25+
{
26+
if (productReportingIds == null || productReportingIds.Count == 0)
27+
return query;
28+
29+
return query.Where(t => productReportingIds.Contains(t.ContractProductReportingId)).AsQueryable();
30+
}
31+
32+
public static IQueryable<TransactionHistory> ApplyProductFilter(this IQueryable<TransactionHistory> query, List<int> productReportingIds)
33+
{
34+
if (merchantReportingIds == null || productReportingIds.Count == 0)
35+
return query;
36+
37+
return query.Where(t => productReportingIds.Contains(t.ContractProductReportingId)).AsQueryable();
38+
}
2439

2540
public static IQueryable<DatabaseProjections.FeeTransactionProjection> ApplyMerchantFilter(this IQueryable<DatabaseProjections.FeeTransactionProjection> query,
2641
EstateManagementContext context,

EstateReportingAPI.BusinessLogic/ReportingManagerRefactored.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,33 @@ public async Task<TodaysSales> GetMerchantPerformance(Guid estateId, DateTime co
142142
return response;
143143
}
144144

145+
public async Task<TodaysSales> GetProductPerformance(Guid estateId, DateTime comparisonDate, List<Int32> productReportingIds, CancellationToken cancellationToken)
146+
{
147+
using ResolvedDbContext<EstateManagementContext>? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString());
148+
await using EstateManagementContext context = resolvedContext.Context;
149+
150+
// First we need to get a value of todays sales
151+
IQueryable<TodayTransaction> todaysSalesQuery = BuildTodaySalesQuery(context);
152+
IQueryable<TransactionHistory> comparisonSalesQuery = BuildComparisonSalesQuery(context, comparisonDate);
153+
154+
todaysSalesQuery = todaysSalesQuery.ApplyProductFilter(productReportingIds);
155+
comparisonSalesQuery = comparisonSalesQuery.ApplyProductFilter(productReportingIds);
156+
157+
TodaysSales response = new TodaysSales
158+
{
159+
ComparisonSalesCount = await comparisonSalesQuery.CountAsync(cancellationToken),
160+
ComparisonSalesValue = await comparisonSalesQuery.SumAsync(t => t.TransactionAmount, cancellationToken),
161+
TodaysSalesCount = await todaysSalesQuery.CountAsync(cancellationToken),
162+
TodaysSalesValue = await todaysSalesQuery.SumAsync(t => t.TransactionAmount, cancellationToken),
163+
};
164+
response.ComparisonAverageSalesValue =
165+
SafeDivide(response.ComparisonSalesValue, response.ComparisonSalesCount);
166+
response.TodaysAverageSalesValue =
167+
SafeDivide(response.TodaysSalesValue, response.TodaysSalesCount);
168+
169+
return response;
170+
}
171+
145172
}
146173

147174
public class DatabaseProjections {

0 commit comments

Comments
 (0)