Esempio n. 1
0
        public ActionResult TotalByVendor(DateTime?startDate, DateTime?endDate)
        {
            const int defaultResultSize = 1000;
            var       viewModel         = TotalByWorkgroupViewModel.Create(startDate, endDate, false);

            if (startDate == null || endDate == null)
            {
                Message = "Select a start date and an end date then click apply to view report.";

                return(View(viewModel));
            }

            //Grab all workgroups for this user
            var allWorkgroups = _workgroupService.LoadAdminWorkgroups(true).ToList();

            //Get every order that matches these workgroups
            var matchingOrders = _searchService.GetOrdersByWorkgroups(allWorkgroups, startDate.Value, endDate.Value, defaultResultSize);

            if (matchingOrders.Count == defaultResultSize)
            {
                Message = "Max size of 1000 reached. Please adjust filters.";
            }
            var workgroupCounts = new List <OrderTotals>();

            foreach (var workgroup in allWorkgroups)
            {
                if (workgroup.IsActive && !workgroup.Administrative)
                {
                    var orders = matchingOrders.AsQueryable().Where(a => a.WorkgroupId == workgroup.Id);

                    foreach (var order in orders)
                    {
                        var orderTotal = workgroupCounts.FirstOrDefault(a => a.Vendor == order.Vendor);

                        if (orderTotal == null)
                        {
                            orderTotal                 = new OrderTotals();
                            orderTotal.Vendor          = order.Vendor;
                            orderTotal.InitiatedOrders = 0;
                            orderTotal.DeniedOrders    = 0;
                            orderTotal.CanceledOrders  = 0;
                            orderTotal.CompletedOrders = 0;
                            orderTotal.PendingOrders   = 0;

                            workgroupCounts.Add(orderTotal);
                        }
                        orderTotal.InitiatedOrders++;
                        switch (order.StatusId)
                        {
                        case OrderStatusCode.Codes.Denied:
                            orderTotal.DeniedOrders++;
                            break;

                        case OrderStatusCode.Codes.Cancelled:
                            orderTotal.CanceledOrders++;
                            break;

                        case OrderStatusCode.Codes.Complete:
                        case OrderStatusCode.Codes.CompleteNotUploadedKfs:
                            orderTotal.CompletedOrders++;
                            break;

                        default:
                            orderTotal.PendingOrders++;
                            break;
                        }
                    }
                }
            }

            viewModel.WorkgroupCounts = workgroupCounts.OrderBy(a => a.Vendor);

            var columnPreferences =
                _repositoryFactory.ColumnPreferencesRepository.GetNullableById(CurrentUser.Identity.Name) ??
                new ColumnPreferences(CurrentUser.Identity.Name);

            ViewBag.DataTablesPageSize = columnPreferences.DisplayRows;

            return(View(viewModel));
        }
Esempio n. 2
0
        public ActionResult TotalByPrimaryOrg(DateTime?startDate, DateTime?endDate)
        {
            const int defaultResultSize = 1000;
            var       viewModel         = TotalByWorkgroupViewModel.Create(startDate, endDate, false);

            if (startDate == null || endDate == null)
            {
                Message = "Select a start date and an end date then click apply to view report.";

                return(View(viewModel));
            }

            //Grab all workgroups for this user as well as related primary orgs
            var allWorkgroups             = _workgroupService.LoadAdminWorkgroups(true).ToList();
            var workgroupIds              = allWorkgroups.Select(x => x.Id).ToArray();
            var workgroupsWithPrimaryOrgs =
                _repositoryFactory.WorkgroupRepository.Queryable.Where(x => workgroupIds.Contains(x.Id))
                .Select(x => new { Workgroup = x, Primary = x.PrimaryOrganization }).ToList();

            //Get every order that matches these workgroups
            var matchingOrders = _searchService.GetOrdersByWorkgroups(allWorkgroups, startDate.Value, endDate.Value, defaultResultSize);

            if (matchingOrders.Count == defaultResultSize)
            {
                Message = "Max size of 1000 reached. Please adjust filters.";
            }
            var workgroupCounts = new List <OrderTotals>();

            foreach (var workgroup in allWorkgroups)
            {
                if (workgroup.IsActive && !workgroup.Administrative)
                {
                    var orderTotal =
                        workgroupCounts.FirstOrDefault(a => a.PrimaryOrg == workgroup.PrimaryOrganization.Name);
                    if (orderTotal == null)
                    {
                        orderTotal            = new OrderTotals();
                        orderTotal.PrimaryOrg =
                            workgroupsWithPrimaryOrgs.Single(x => x.Workgroup.Id == workgroup.Id).Primary.Name;
                        orderTotal.InitiatedOrders = 0;
                        orderTotal.DeniedOrders    = 0;
                        orderTotal.CanceledOrders  = 0;
                        orderTotal.CompletedOrders = 0;
                        orderTotal.PendingOrders   = 0;

                        workgroupCounts.Add(orderTotal);
                    }

                    orderTotal.InitiatedOrders += matchingOrders.AsQueryable().Count(a => a.WorkgroupId == workgroup.Id);
                    orderTotal.DeniedOrders    +=
                        matchingOrders.AsQueryable()
                        .Count(a => a.WorkgroupId == workgroup.Id && a.StatusId == OrderStatusCode.Codes.Denied);
                    orderTotal.CanceledOrders +=
                        matchingOrders.AsQueryable()
                        .Count(a => a.WorkgroupId == workgroup.Id && a.StatusId == OrderStatusCode.Codes.Cancelled);
                    orderTotal.CompletedOrders +=
                        matchingOrders.AsQueryable()
                        .Count(
                            a =>
                            a.WorkgroupId == workgroup.Id &&
                            (a.StatusId == OrderStatusCode.Codes.Complete ||
                             a.StatusId == OrderStatusCode.Codes.CompleteNotUploadedKfs));
                    orderTotal.PendingOrders +=
                        matchingOrders.AsQueryable()
                        .Count(
                            a =>
                            a.WorkgroupId == workgroup.Id &&
                            (a.StatusId == OrderStatusCode.Codes.Approver ||
                             a.StatusId == OrderStatusCode.Codes.AccountManager ||
                             a.StatusId == OrderStatusCode.Codes.Purchaser ||
                             a.StatusId == OrderStatusCode.Codes.Requester ||
                             a.StatusId == OrderStatusCode.Codes.ConditionalApprover));
                }
            }

            viewModel.WorkgroupCounts = workgroupCounts.OrderBy(a => a.PrimaryOrg);

            var columnPreferences =
                _repositoryFactory.ColumnPreferencesRepository.GetNullableById(CurrentUser.Identity.Name) ??
                new ColumnPreferences(CurrentUser.Identity.Name);

            ViewBag.DataTablesPageSize = columnPreferences.DisplayRows;

            return(View(viewModel));
        }