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
Original file line number Diff line number Diff line change
Expand Up @@ -103,28 +103,36 @@ into result
SumOrders = r.SumOrders
});

return await Task.FromResult(report.ToList());
return await _orderRepository.ToListAsync(report);
}

var vendorQuery = from p in query
from item in p.OrderItems
select new {
item.VendorId, OrderCode = p.Code,
item.VendorId, OrderId = p.Id,
p.BillingAddress.CountryId,
item.Quantity,
item.PriceInclTax,
p.Rate
p.CurrencyRate
};

vendorQuery = vendorQuery.Where(x => x.VendorId == vendorId);

var vendorReport = (from oq in vendorQuery
group oq by oq.CountryId
//one row per order first, so an order with several vendor items is counted once
var vendorOrders = from oq in vendorQuery
group oq by new { oq.OrderId, oq.CountryId }
into result
select new {
result.Key.CountryId,
Amount = result.Sum(y => y.PriceInclTax / y.CurrencyRate)
};

var vendorReport = (from vo in vendorOrders
group vo by vo.CountryId
into result
select new {
CountryId = result.Key,
TotalOrders = result.Count(),
SumOrders = result.Sum(y => y.PriceInclTax / y.Rate)
SumOrders = result.Sum(y => y.Amount)
}
)
.OrderByDescending(x => x.SumOrders)
Expand All @@ -133,7 +141,7 @@ into result
TotalOrders = r.TotalOrders,
SumOrders = r.SumOrders
});
return await Task.FromResult(vendorReport.ToList());
return await _orderRepository.ToListAsync(vendorReport);
}


Expand All @@ -149,31 +157,31 @@ public virtual async Task<IList<OrderByTimeReportLine>> GetOrderByTimeReport(str
DateTime? endTimeUtc = null)
{
var report = new List<OrderByTimeReportLine>();
startTimeUtc ??= DateTime.MinValue;
endTimeUtc ??= DateTime.UtcNow;
var startTime = startTimeUtc ?? DateTime.MinValue;
var endDate = endTimeUtc ?? DateTime.UtcNow;

var endTime = new DateTime(endTimeUtc.Value.Year, endTimeUtc.Value.Month, endTimeUtc.Value.Day, 23, 59, 00);
var endTime = endDate.Date.AddDays(1);

var builderquery = from p in _orderRepository.Table
select p;

builderquery = builderquery.Where(o => !o.Deleted);
builderquery = builderquery.Where(o => o.CreatedOnUtc >= startTimeUtc.Value && o.CreatedOnUtc <= endTime);
builderquery = builderquery.Where(o => o.CreatedOnUtc >= startTime && o.CreatedOnUtc < endTime);

if (!string.IsNullOrEmpty(storeId))
builderquery = builderquery.Where(o => o.StoreId == storeId);

var daydiff = (endTimeUtc.Value - startTimeUtc.Value).TotalDays;
var daydiff = (endDate - startTime).TotalDays;
if (daydiff > 31)
{
var query = builderquery.GroupBy(x =>
var query = await _orderRepository.ToListAsync(builderquery.GroupBy(x =>
new { x.CreatedOnUtc.Year, x.CreatedOnUtc.Month })
.Select(g => new OrderStats {
Year = g.Key.Year,
Month = g.Key.Month,
Count = g.Count(),
Amount = g.Sum(x => x.OrderTotal * x.CurrencyRate)
}).ToList();
Amount = g.Sum(x => x.OrderTotal / x.CurrencyRate)
}));

foreach (var item in query)
report.Add(new OrderByTimeReportLine {
Expand All @@ -184,15 +192,15 @@ public virtual async Task<IList<OrderByTimeReportLine>> GetOrderByTimeReport(str
}
else
{
var query = builderquery.GroupBy(x =>
var query = await _orderRepository.ToListAsync(builderquery.GroupBy(x =>
new { x.CreatedOnUtc.Year, x.CreatedOnUtc.Month, x.CreatedOnUtc.Day })
.Select(g => new OrderStats {
Year = g.Key.Year,
Month = g.Key.Month,
Day = g.Key.Day,
Count = g.Count(),
Amount = g.Sum(x => x.OrderTotal * x.CurrencyRate)
}).ToList();
Amount = g.Sum(x => x.OrderTotal / x.CurrencyRate)
}));

foreach (var item in query)
report.Add(new OrderByTimeReportLine {
Expand All @@ -203,7 +211,7 @@ public virtual async Task<IList<OrderByTimeReportLine>> GetOrderByTimeReport(str
});
}

return await Task.FromResult(report);
return report.OrderBy(x => x.Time).ToList();
}

/// <summary>
Expand Down Expand Up @@ -299,18 +307,14 @@ public virtual async Task<OrderAverageReportLine> GetOrderAverageReportLine(stri
SumShippingExclTax = g.Sum(o => o.OrderShippingExclTax / o.CurrencyRate),
SumTax = g.Sum(o => o.OrderTax / o.CurrencyRate),
SumOrders = g.Sum(o => o.OrderTotal / o.CurrencyRate)
}).ToList();

});

var item2 = query.Count > 0
? query.FirstOrDefault()
: new OrderAverageReportLine {
CountOrders = 0,
SumShippingExclTax = 0,
SumTax = 0,
SumOrders = 0
};
return await Task.FromResult(item2);
return await _orderRepository.FirstOrDefaultAsync(query) ?? new OrderAverageReportLine {
CountOrders = 0,
SumShippingExclTax = 0,
SumTax = 0,
SumOrders = 0
};
}

/// <summary>
Expand Down Expand Up @@ -446,23 +450,22 @@ from item in p.OrderItems
item.ProductId,
item.Quantity,
item.PriceInclTax,
p.Rate
p.CurrencyRate
};

if (!string.IsNullOrEmpty(vendorId)) query = query.Where(x => x.VendorId == vendorId);

var queryItem = query.GroupBy(x => new { x.ProductId }).Select(x => new BestsellersReportLine {
ProductId = x.Key.ProductId,
TotalAmount = x.Sum(y => y.PriceInclTax / y.Rate),
TotalAmount = x.Sum(y => y.PriceInclTax / y.CurrencyRate),
TotalQuantity = x.Sum(y => y.Quantity)
});

var queryItemOrdered = orderBy == 1
? queryItem.OrderByDescending(x => x.TotalQuantity).ToList()
: queryItem.OrderByDescending(x => x.TotalAmount).ToList();
? queryItem.OrderByDescending(x => x.TotalQuantity).ThenBy(x => x.ProductId)
: queryItem.OrderByDescending(x => x.TotalAmount).ThenBy(x => x.ProductId);

var result = new PagedList<BestsellersReportLine>(queryItemOrdered, pageIndex, pageSize);
return await Task.FromResult(result);
return await _orderRepository.PagedAsync(queryItemOrdered, pageIndex, pageSize);
}


Expand All @@ -489,9 +492,9 @@ group o by 1
into g
select new ReportPeriodOrder { Amount = g.Sum(x => x.OrderTotal / x.CurrencyRate), Count = g.Count() };

var report = query.FirstOrDefault() ?? new ReportPeriodOrder();
var report = await _orderRepository.FirstOrDefaultAsync(query) ?? new ReportPeriodOrder();
report.Date = date;
return await Task.FromResult(report);
return report;
}


Expand All @@ -518,9 +521,9 @@ into g
if (recordsToReturn > 0)
product = product.Take(recordsToReturn);

var report = product.ToList();
var report = await _productAlsoPurchasedRepository.ToListAsync(product.Select(x => x.ProductId));

return await Task.FromResult(report.Select(reportLine => reportLine.ProductId).ToArray());
return report.ToArray();
}

/// <summary>
Expand Down Expand Up @@ -548,11 +551,12 @@ public virtual async Task<IPagedList<Product>> ProductsNeverSold(string storeId
createdToUtc.Value >= order.CreatedOnUtc &&
!order.Deleted
from orderItem in order.OrderItems
select new { orderItem.ProductId }).ToList().Distinct().Select(x => x.ProductId);
select orderItem.ProductId).Distinct();
var soldProductIds = await _orderRepository.ToListAsync(query);

var qproducts = from p in _productRepository.Table
orderby p.Name
where !query.Contains(p.Id) &&
where !soldProductIds.Contains(p.Id) &&
//include only simple products
p.ProductTypeId == ProductType.SimpleProduct &&
(vendorId == "" || p.VendorId == vendorId) &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,14 @@ public class CustomerReportService : ICustomerReportService
/// </summary>
/// <param name="customerRepository">Customer repository</param>
/// <param name="orderRepository">Order repository</param>
/// <param name="dateTimeService">Date time helper</param>
/// <param name="groupService">group service</param>
public CustomerReportService(IRepository<Customer> customerRepository,
IRepository<Order> orderRepository,
IGroupService groupService,
IDateTimeService dateTimeService)
IGroupService groupService)
{
_customerRepository = customerRepository;
_orderRepository = orderRepository;
_groupService = groupService;
_dateTimeService = dateTimeService;
}

#endregion
Expand All @@ -42,7 +39,6 @@ public CustomerReportService(IRepository<Customer> customerRepository,
private readonly IRepository<Customer> _customerRepository;
private readonly IRepository<Order> _orderRepository;
private readonly IGroupService _groupService;
private readonly IDateTimeService _dateTimeService;

#endregion

Expand Down Expand Up @@ -96,8 +92,8 @@ into g
OrderCount = g.Count()
};
query2 = orderBy switch {
1 => query2.OrderByDescending(x => x.OrderTotal),
2 => query2.OrderByDescending(x => x.OrderCount),
1 => query2.OrderByDescending(x => x.OrderTotal).ThenBy(x => x.CustomerId),
2 => query2.OrderByDescending(x => x.OrderCount).ThenBy(x => x.CustomerId),
_ => throw new ArgumentException("Wrong orderBy parameter", nameof(orderBy))
};

Expand All @@ -113,25 +109,33 @@ into g
from item in p.OrderItems
select new {
item.VendorId,
p.CustomerId, OrderCode = p.Code,
item.Quantity,
p.CustomerId, OrderId = p.Id,
item.PriceInclTax,
p.Rate
p.CurrencyRate
};

vendorQuery = vendorQuery.Where(x => x.VendorId == vendorId);

var vendorQueryGroup = from co in vendorQuery
group co by co.CustomerId
//one row per order first, so an order with several vendor items is counted once
var vendorOrders = from co in vendorQuery
group co by new { co.OrderId, co.CustomerId }
into g
select new {
g.Key.CustomerId,
Amount = g.Sum(x => x.PriceInclTax / x.CurrencyRate)
};

var vendorQueryGroup = from vo in vendorOrders
group vo by vo.CustomerId
into g
select new {
CustomerId = g.Key,
OrderTotal = g.Sum(x => x.PriceInclTax / x.Rate),
OrderTotal = g.Sum(x => x.Amount),
OrderCount = g.Count()
};
vendorQueryGroup = orderBy switch {
1 => vendorQueryGroup.OrderByDescending(x => x.OrderTotal),
2 => vendorQueryGroup.OrderByDescending(x => x.OrderCount),
1 => vendorQueryGroup.OrderByDescending(x => x.OrderTotal).ThenBy(x => x.CustomerId),
2 => vendorQueryGroup.OrderByDescending(x => x.OrderCount).ThenBy(x => x.CustomerId),
_ => throw new ArgumentException("Wrong orderBy parameter", nameof(orderBy))
};

Expand All @@ -151,7 +155,7 @@ into g
/// <returns>Number of registered customers</returns>
public virtual async Task<int> GetRegisteredCustomersReport(string storeId, int days)
{
var date = _dateTimeService.ConvertToUserTime(DateTime.Now).AddDays(-days);
var date = DateTime.UtcNow.AddDays(-days);

var registeredCustomerGroup =
await _groupService.GetCustomerGroupBySystemName(SystemCustomerGroupNames.Registered);
Expand All @@ -165,8 +169,7 @@ public virtual async Task<int> GetRegisteredCustomersReport(string storeId, int
c.CreatedOnUtc >= date
//&& c.CreatedOnUtc <= DateTime.UtcNow
select c;
var count = query.Count();
return count;
return await _customerRepository.CountAsync(query);
}


Expand All @@ -183,33 +186,36 @@ public virtual async Task<IList<CustomerByTimeReportLine>> GetCustomerByTimeRepo

{
var report = new List<CustomerByTimeReportLine>();
startTimeUtc ??= DateTime.MinValue;
endTimeUtc ??= DateTime.UtcNow;
var startTime = startTimeUtc ?? DateTime.MinValue;
var endDate = endTimeUtc ?? DateTime.UtcNow;

var endTime = new DateTime(endTimeUtc.Value.Year, endTimeUtc.Value.Month, endTimeUtc.Value.Day, 23, 59, 00);
var endTime = endDate.Date.AddDays(1);
var builderquery = from p in _customerRepository.Table
select p;

var customergroup = await _groupService.GetCustomerGroupBySystemName(SystemCustomerGroupNames.Registered);
if (customergroup == null)
return report;

var customerGroupRegister = customergroup.Id;
builderquery = builderquery.Where(o => !o.Deleted);
builderquery = builderquery.Where(o => o.CreatedOnUtc >= startTimeUtc.Value && o.CreatedOnUtc <= endTime);
builderquery = builderquery.Where(o => o.CreatedOnUtc >= startTime && o.CreatedOnUtc < endTime);
builderquery = builderquery.Where(o => o.Groups.Any(y => y == customerGroupRegister));
if (!string.IsNullOrEmpty(storeId))
builderquery = builderquery.Where(o => o.StoreId == storeId);

var daydiff = (endTimeUtc.Value - startTimeUtc.Value).TotalDays;
var daydiff = (endDate - startTime).TotalDays;
if (daydiff > 31)
{
var query = builderquery.GroupBy(x => new {
var query = await _customerRepository.ToListAsync(builderquery.GroupBy(x => new {
x.CreatedOnUtc.Year,
x.CreatedOnUtc.Month
})
.Select(g => new CustomerStats {
Year = g.Key.Year,
Month = g.Key.Month,
Count = g.Count()
}).ToList();
}));
foreach (var item in query)
report.Add(new CustomerByTimeReportLine {
Time = item.Year + "-" + item.Month.ToString().PadLeft(2, '0'),
Expand All @@ -218,14 +224,14 @@ public virtual async Task<IList<CustomerByTimeReportLine>> GetCustomerByTimeRepo
}
else
{
var query = builderquery.GroupBy(x =>
var query = await _customerRepository.ToListAsync(builderquery.GroupBy(x =>
new { x.CreatedOnUtc.Year, x.CreatedOnUtc.Month, x.CreatedOnUtc.Day })
.Select(g => new CustomerStats {
Year = g.Key.Year,
Month = g.Key.Month,
Day = g.Key.Day,
Count = g.Count()
}).ToList();
}));
foreach (var item in query)
report.Add(new CustomerByTimeReportLine {
Time = item.Year + "-" + item.Month.ToString().PadLeft(2, '0') + "-" +
Expand Down
Loading
Loading