public async Task <ActionResult> Index()
        {
            HomeViewModel model = new HomeViewModel();

            List <EndpointEntities> endpoints = await(new nuDirectApiController().GetAllEndpoints());
            List <FolderEntities>   folders   = await(new nuDirectApiController().GetAllFolders());
            List <TransferEntities> transfers = await(new nuDirectApiController().GetAllTransfers(DateTime.Now.AddDays(Convert.ToInt32(ConfigurationManager.AppSettings["DashboardDateRange"]) * -1), DateTime.Now));

            model.Endpoints = endpoints;
            model.TwentyFourHourTransfersCount = transfers.Where(x => x.Started > DateTime.Now.AddHours(-24)).Count();
            model.WaitingTransfersCount        = transfers.Where(x => x.CurrentStatus == 2).Count();
            model.CostCenterCount = folders.Select(x => x.CostCentreCode).Distinct().Count();

            StringBuilder tenHourTransfersSb = new StringBuilder();

            for (int i = 10; i > 0; i--)
            {
                tenHourTransfersSb.Append(transfers.Where(x => x.Started > DateTime.Now.AddHours(i * -1) && x.Started < DateTime.Now.AddHours((i - 1) * -1)).Count());
                tenHourTransfersSb.Append(",");
            }

            model.TenHourTransfers       = tenHourTransfersSb.ToString().TrimEnd(',');
            model.ThreeDayTransferCounts = new int[3];

            for (int i = 2; i > -1; i--)
            {
                model.ThreeDayTransferCounts[i] = transfers.Where(x => x.Started > DateTime.Now.AddDays((i + 1) * -1) && x.Started < DateTime.Now.AddDays(i * -1)).Count();
            }

            model.MostActiveCostCenters = new List <CostCenterCountModel>();
            int[] sourceFolders = transfers.Select(x => x.SourceFolderId).Distinct().ToArray();

            foreach (int i in sourceFolders)
            {
                FolderEntities currentFolder   = folders.FirstOrDefault(z => z.FolderId == i);
                int            costCenterCount = transfers.Where(x => x.SourceFolderId == i).Count();

                if (string.IsNullOrEmpty(currentFolder.CostCentreCode))
                {
                    continue;
                }

                if (model.MostActiveCostCenters.Where(x => x.CostCenterName == currentFolder.CostCentreCode).Count() == 0)
                {
                    model.MostActiveCostCenters.Add(new CostCenterCountModel()
                    {
                        CostCenterName = currentFolder.CostCentreCode, CostCenterCount = costCenterCount
                    });
                }
                else
                {
                    model.MostActiveCostCenters.FirstOrDefault(x => x.CostCenterName == currentFolder.CostCentreCode).CostCenterCount += costCenterCount;
                }
            }

            model.MostActiveCostCenters = model.MostActiveCostCenters.OrderByDescending(x => x.CostCenterCount).Take(3).ToList();

            model.TransfersByStatus    = new int[3];
            model.TransfersByStatus[0] = transfers.Where(x => x.CurrentStatus == 9).Count();
            model.TransfersByStatus[1] = transfers.Where(x => x.CurrentStatus == 2).Count();
            model.TransfersByStatus[2] = transfers.Where(x => x.CurrentStatus == 99).Count();

            return(View(model));
        }
        public async Task <ActionResult> TransfersByEntity(string StartDate, string EndDate, string EntityType)
        {
            if (string.IsNullOrEmpty(EntityType))
            {
                return(View(new List <EntityTransferCountModel>()));
            }

            List <EntityTransferCountModel> transferCounts = new List <EntityTransferCountModel>();

            List <TransferEntities> transfers = (await new nuDirectApiController().GetAllTransfers()).Where(x => x.Started > DateTime.Parse(StartDate) && x.Started < DateTime.Parse(EndDate).AddDays(1)).ToList();

            if (EntityType == "Customer")
            {
                List <CustomerEntities> customers = await new nuDirectApiController().GetAllCustomers();
                List <EndpointEntities> endpoints = await new nuDirectApiController().GetAllEndpoints();

                int[] sourceEndpoints = transfers.Select(x => x.SourceEpId).Distinct().ToArray();

                foreach (int i in sourceEndpoints)
                {
                    EndpointEntities currentEndpoint = endpoints.FirstOrDefault(z => z.EndpointId == i);
                    int endpointCount = transfers.Where(x => x.SourceEpId == i).Count();

                    if (transferCounts.Where(x => x.EntityName == currentEndpoint.customer.Company).Count() == 0)
                    {
                        transferCounts.Add(new EntityTransferCountModel()
                        {
                            EntityName = currentEndpoint.customer.Company, EntityCount = endpointCount
                        });
                    }
                    else
                    {
                        transferCounts.FirstOrDefault(x => x.EntityName == currentEndpoint.customer.Company).EntityCount += endpointCount;
                    }
                }
            }
            else if (EntityType == "CostCenter")
            {
                List <FolderEntities> folders = await new nuDirectApiController().GetAllFolders();

                int[] sourceFolders = transfers.Select(x => x.SourceFolderId).Distinct().ToArray();

                foreach (int i in sourceFolders)
                {
                    FolderEntities currentFolder = folders.FirstOrDefault(z => z.FolderId == i);
                    int            FolderCount   = transfers.Where(x => x.SourceFolderId == i).Count();

                    if (transferCounts.Where(x => x.EntityName == currentFolder.CostCentreCode).Count() == 0)
                    {
                        transferCounts.Add(new EntityTransferCountModel()
                        {
                            EntityName = currentFolder.CostCentreCode, EntityCount = FolderCount
                        });
                    }
                    else
                    {
                        transferCounts.FirstOrDefault(x => x.EntityName == currentFolder.CostCentreCode).EntityCount += FolderCount;
                    }
                }
            }
            else
            {
                List <CustomerEntities> customers = await new nuDirectApiController().GetAllCustomers();
                List <EndpointEntities> endpoints = await new nuDirectApiController().GetAllEndpoints();

                int[] sourceEndpoints = transfers.Select(x => x.SourceEpId).Distinct().ToArray();

                foreach (int i in sourceEndpoints)
                {
                    EndpointEntities currentEndpoint = endpoints.FirstOrDefault(z => z.EndpointId == i);
                    int endpointCount = transfers.Where(x => x.SourceEpId == i).Count();

                    if (transferCounts.Where(x => x.EntityName == currentEndpoint.customer.BusinessUnit).Count() == 0)
                    {
                        transferCounts.Add(new EntityTransferCountModel()
                        {
                            EntityName = currentEndpoint.customer.BusinessUnit, EntityCount = endpointCount
                        });
                    }
                    else
                    {
                        transferCounts.FirstOrDefault(x => x.EntityName == currentEndpoint.customer.BusinessUnit).EntityCount += endpointCount;
                    }
                }
            }

            return(View(transferCounts));
        }