public JsonResult GetUsage(string SubscriptionId, DateTime? StartDate = null, DateTime? EndDate = null, string Granularity = "daily", bool ShowDetails = false, int Count = 1000)
{
if (!StartDate.HasValue)
StartDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
if (!EndDate.HasValue)
EndDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
if (resellerService.rateCard.Meters == null)
resellerService.rateCard = crestService.GetRateCard();
UsageRecord usage = crestService.GetUsage(SubscriptionId, StartDate.Value, EndDate.Value, Granularity, ShowDetails, Count);
List<UsageItemViewModel> usageItems = new List<UsageItemViewModel>();
if (ShowDetails)
{
foreach (UsageItem i in usage.items.OrderBy(x => x.meter_category).ThenBy(x => x.meter_sub_category).ThenBy(x => x.meter_name))
{
usageItems.Add(new UsageItemViewModel { item = i, meter = GetMeter(i.meter_id) });
}
}
else
{
IEnumerable<IGrouping<string, UsageItem>> query = usage.items.OrderBy(x => x.meter_category).ThenBy(x => x.meter_sub_category).ThenBy(x => x.meter_name).GroupBy(i => i.meter_id, i => i);
foreach (IGrouping<string, UsageItem> itemGroup in query)
{
UsageItem u = itemGroup.FirstOrDefault();
u.quantity = itemGroup.Sum(x => x.quantity);
u.usage_start_time = itemGroup.Min(d => d.usage_start_time);
u.usage_end_time = itemGroup.Max(d => d.usage_end_time);
usageItems.Add(new UsageItemViewModel { item = u, meter = GetMeter(itemGroup.Key) });
}
}
return Json(new { Result = "OK", Records = usageItems, TotalRecordCount = usageItems.Count });
}