private double GetPrepaidSalesSummaryTotal(DateRange range)
        {
            const int reportId = 43;
            const string columnName = "GrSalesTOT";

            var data =  GetSalesSummaryData(reportId, range);

            return GetSalesSummaryTotal(data, columnName);
        }
        private Dictionary<int, double> GetPrepaidSalesSummaryTotalByMonth(SummaryRange startRange, SummaryRange lastRange)
        {
            const int reportId = 64;
            const string columnName = "GrSalesTOT";
            const string dateColumName = "date";
            var totalsByMonth = new Dictionary<int, double>();

            var startDate = Utils.GetFirst_LastDayRange(startRange).StartDate;
            var endDate = Utils.GetFirst_LastDayRange(lastRange).EndDate;

            var range = new DateRange
            {
                StartDate = startDate,
                EndDate = endDate
            };

            var data = GetSalesSummaryData(reportId, range).ToList();

            var months = GetMonthInits(range).ToList();

            foreach(var month in months)
            {
                var currentData = data.Where(row => DateTime.Parse(row[dateColumName].ToString()).IsBetween(month));

                var total = GetSalesSummaryTotal(currentData, columnName);

                totalsByMonth.Add(month.Month, total);
            }
            return totalsByMonth;
        }
        private Dictionary<int, double> GetMerchantServicesSalesSummaryTotalByMonth(SummaryRange startRange, SummaryRange lastRange)
        {
            const int reportId = 49;
            const string columnName = "tot_commission";

            var totalsByMonth = new Dictionary<int, double>();

            var startDate = Utils.GetFirst_LastDayRange(startRange).StartDate;
            var endDate = Utils.GetFirst_LastDayRange(lastRange).EndDate;

            var range = new DateRange
            {
                StartDate = startDate,
                EndDate = endDate
            };

            var data =  GetSalesSummaryData(reportId, range).ToList();

            var months = GetMonthInits(range).ToList();

            for (int i = 0; i < Math.Min(data.Count(),months.Count()); i++)
            {
                var currentData = new List<Dictionary<string, object>> { data[i] };

                var total = GetSalesSummaryTotal(currentData, columnName);

                totalsByMonth.Add(months[i].Month, total);
            }
            return totalsByMonth;
        }
        private IEnumerable<DateTime> GetMonthInits(DateRange range)
        {
            var currentDate = range.StartDate;

            while (currentDate < range.EndDate)
            {
                yield return currentDate;

                currentDate = currentDate.AddMonths(1);
            }
        }
        private double GetMerchantServicesSalesSummaryTotal(DateRange range)
        {
            const int reportId = 49;
            const string columnName = "tot_commission";

            var data =  GetSalesSummaryData(reportId, range);

            return GetSalesSummaryTotal(data, columnName);
        }
 private IEnumerable<Argument> GetDateFilterArguments(int reportId,DateRange range)
 {
     return GetDateFilterArguments(reportId, range.StartDate.ToString(), range.EndDate.ToString());
 }
        private UserReportInfoModel GetUserReportInfoModelForSalesSummary(int reportId, DateRange range)
        {
            var args = GetSalesSummaryArguments(reportId, range);

            var userReportInfoModel = new UserReportInfoModel
            {
                Args = args,
                ReportId = reportId,
                UserId = GetLoggedUserId()
            };

            return userReportInfoModel;
        }
        private IEnumerable<Dictionary<string, object>> GetSalesSummaryData(int reportId,DateRange range)
        {
            var executeReportRequestInfo = Utils.GetRequestInfo(Method.POST, "/api/Report/RunUserReport");

            var parameters = GetUserReportInfoModelForSalesSummary(reportId, range);

            var executionResponse = _webClient.Execute<List<Dictionary<string, object>>>(new JsonSerializer().Serialize(parameters), ApiUrls.API_KEY, ApiUrls.API_SECRET, executeReportRequestInfo);

            return executionResponse;
        }
        private IEnumerable<Argument> GetSalesSummaryArguments(int reportId, DateRange range)
        {
            var argumentsResult = new List<Argument>();

            var report = GetUserReport(reportId, GetLoggedUserId());

            var idParameter = report.Parameters.FirstOrDefault(p => p.Name.IsIdParameter());

            if (!idParameter.IsNull())
                argumentsResult.Add(new Argument(idParameter.Name, GetLoggedUserId()));

            var dateArguments = GetDateFilterArguments(reportId, range);

            argumentsResult.AddRange(dateArguments);

            return argumentsResult;
        }