public ItemValueUrl GetTodayTransactions(int agentId, sp_report_portfolio_summary_totals_Result itemsCounts)
        {
            var todayTransactions = itemsCounts != null ? itemsCounts.TodayTransactions : 0;

                var result = new Dictionary<string, string>
                {
                    {"All Merchants", todayTransactions.ToString("C")}
                };
                var resultUrls = new Dictionary<string, string>
                {
                    {"All Merchants", "/PrepaidReports/TodayTransactions"}
                };

                return new ItemValueUrl(result, resultUrls);
        }
        public ItemValueUrl GetPrepaidAccounts(int agentId, sp_report_portfolio_summary_totals_Result itemsCounts)
        {
            var prepaidActives = itemsCounts != null ? itemsCounts.PrepaidAccounts_Actives : 0;
                var prepaidInactive = itemsCounts != null ? itemsCounts.PrepaidAccounts_inactives : 0;

                var result = new Dictionary<string, string>
                {
                    {"Actives", prepaidActives.ToString()},
                    {"Inactives", prepaidInactive.ToString()}
                };
                var resultUrls = new Dictionary<string, string>
                {
                    {"Actives", "PrepaidReports/PortfolioSummary?status=1"},
                    {"Inactives", "PrepaidReports/PortfolioSummary?status=0"}
                };

                return new ItemValueUrl(result, resultUrls);
        }
        public ItemValueUrl GetPrepaidSalesSummary(int agentId, sp_report_portfolio_summary_totals_Result itemsCounts, DateTime startDate, DateTime endDate)
        {
            var prepaidSales = itemsCounts != null ? itemsCounts.GrSalesTOT : 0;
                var ippTransactions = itemsCounts != null ? itemsCounts.BillPayment : 0;
                var commission = itemsCounts != null ? itemsCounts.Running_Commission : 0;

                var beginDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1);

                var result = new Dictionary<string, string>
                {
                    {"Total Prepaid", prepaidSales.ToString("C")},
                    {"Total BillPayment", ippTransactions.ToString("C")},
                    {"Running Commission", commission.ToString("C")}
                };
                var resultUrls = new Dictionary<string, string>
                {
                    {"Total Prepaid", "PrepaidReports/SalesSummary?startDate="+ startDate.ToString("d") +"&endDate=" + endDate.Date.ToString("d")},
                    {"Total BillPayment", "PrepaidReports/IppBrowser?startDate="+ startDate.ToString("d") +"&endDate=" + endDate.Date.ToString("d")},
                    {"Running Commission", "PrepaidReports/ReportAgentSummary?startDate=" + startDate.ToString("d") +"&endDate=" + endDate.Date.ToString("d")}
                };

                return new ItemValueUrl(result, resultUrls);
        }
        public ItemValueUrl GetMerchantServicesSalesSummary(int agentId, sp_report_portfolio_summary_totals_Result itemsCounts, DateTime startDate, DateTime endDate)
        {
            var commissionsVM = itemsCounts != null ? itemsCounts.MSCommissionsVISAMCAME : 0;
            var commissionsOthers = itemsCounts != null ? itemsCounts.MSCommissionsOthers : 0;
            var commissionsTotals = itemsCounts != null ? itemsCounts.MSCommissionsTotal : 0;

            var result = new Dictionary<string, string>
            {
                {"Visa/ MC/ Amex", commissionsVM.ToString("C")},
                {"Others", commissionsOthers.ToString("C")},
                {"Total", commissionsTotals.ToString("C")}
            };

            endDate = DateTime.Today.Date;

            var resultUrls = new Dictionary<string, string>
            {
                {"Visa/ MC/ Amex", "/MerchantServicesReports/MsComissionSummaryForVisaMasterCard?agentId="+ agentId +"&startDate="+startDate.ToString("MM/dd/yyyy")+"&endDate=" + endDate.ToString("MM/dd/yyyy")},

                {"Others", "/MerchantServicesReports/MsComissionSummaryForOthers?agentId="+ agentId +"&startDate="+startDate.ToString("MM/dd/yyyy")+"&endDate=" + endDate.ToString("MM/dd/yyyy")},
                {"Total", "/MerchantServicesReports/MsComissionSummaryTotal?agentId="+ agentId +"&startDate="+startDate.ToString("MM/dd/yyyy")+"&endDate=" + endDate.ToString("MM/dd/yyyy")}
            };

            return new ItemValueUrl(result, resultUrls);
        }
        public ItemValueUrl GetMerchantServicesApplicationStatus(int agentId, sp_report_portfolio_summary_totals_Result itemsCounts)
        {
            var approvedAccounts = itemsCounts != null ? itemsCounts.MSApplicationsApproved : 0;
            var pendingAccounts = itemsCounts != null ? itemsCounts.MSApplicationsPending : 0;
            var cancelledAccounts = itemsCounts != null ? itemsCounts.MSApplicationsCanceled : 0;

            var result = new Dictionary<string, string>
            {
                {"Approved", approvedAccounts.ToString()},
                {"Pending", pendingAccounts.ToString()},
                {"Cancelled", cancelledAccounts.ToString()}
            };
            var resultUrls = new Dictionary<string, string>
            {
                {"Approved", "MerchantServicesReports/MsAccountStatus?status=0"},
                {"Pending", "MerchantServicesReports/MsAccountStatus?status=1"},
                {"Cancelled", "MerchantServicesReports/MsAccountStatus?status=2"}
            };

            return new ItemValueUrl(result, resultUrls);
        }
        public ItemValueUrl GetAccountsWithAlerts(int agentId, sp_report_portfolio_summary_totals_Result itemsCounts)
        {
            var accountsInCompliance = itemsCounts != null ? itemsCounts.AccountsInAlert_incompliance : 0;
                var suspendedAccounts = itemsCounts != null ? itemsCounts.AccountsInAlert_suspended: 0;
                var closedAccountsWithBalance = itemsCounts != null ? itemsCounts.AccountsInAlert_closedwithbalance : 0;

                var result = new Dictionary<string, string>
                {
                    {"In Compliance", accountsInCompliance.ToString()},
                    {"Suspended", suspendedAccounts.ToString()},
                    {"Closed with Balance", closedAccountsWithBalance.ToString()}
                };
                var resultUrls = new Dictionary<string, string>
                {
                    {"In Compliance", "/PrepaidReports/PortfolioSummary?alertsMode=1&status=4"},
                    {"Suspended", "/PrepaidReports/PortfolioSummary?alertsMode=1&status=2"},
                    {"Closed with Balance", "/PrepaidReports/PortfolioSummary?alertsMode=1&status=3"}
                };

                return new ItemValueUrl(result, resultUrls);
        }
        private object[] GetMethodParametersValues(MethodInfo function, int agentId, sp_report_portfolio_summary_totals_Result itemsCounts, string remark)
        {
            var functionParameters = function.GetParameters();

            var paramsResult = new ArrayList();

            if(functionParameters.Any(p=> p.ParameterType == typeof(int)))
                paramsResult.Add(agentId);

            paramsResult.Add(itemsCounts);

            if (functionParameters.Any(p => p.ParameterType == typeof (DateTime)))
            {
                 var dateRange = Helper.GetFirst_LastDayRange(remark);

                    if (dateRange != null)
                        paramsResult.AddRange(new ArrayList { dateRange.StartDate, dateRange.EndDate });
            }

            return paramsResult.ToArray();
        }
        private ItemValueUrl GetDashboardConfigItems(DashboardItem dashboardConfig, int agentId, sp_report_portfolio_summary_totals_Result itemsCounts)
        {
            try
            {
                var function = GetType().GetMethod(dashboardConfig.ItemsFunction);

                var parameters = GetMethodParametersValues(function, agentId, itemsCounts, dashboardConfig.Remark);

                var items = function.Invoke(this, parameters) as ItemValueUrl;

                return items;
            }
            catch (Exception exception)
            {
                return new ItemValueUrl();
            }
        }