CSP_Web.Controllers.SubscriptionController.GetUsage C# (CSharp) Method

GetUsage() public method

public GetUsage ( string SubscriptionId, System.DateTime StartDate = null, System.DateTime EndDate = null, string Granularity = "daily", bool ShowDetails = false, int Count = 1000 ) : System.Web.Mvc.JsonResult
SubscriptionId string
StartDate System.DateTime
EndDate System.DateTime
Granularity string
ShowDetails bool
Count int
return System.Web.Mvc.JsonResult
        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 });
        }