public List <ActiveCustomer> SelectActiveCustomer()
        {
            using (var connection = new SqlConnection(_connectionString))
            {
                connection.Open();

                var cmd = connection.CreateCommand();
                cmd.CommandText = @"select c.CustomerId, c.FirstName, c.LastName
	                                    from Customers c;"    ;

                var reader = cmd.ExecuteReader();

                var activeCustomers = new List <ActiveCustomer>();

                while (reader.Read())
                {
                    var customer = new ActiveCustomer
                    {
                        FirstName  = reader["FirstName"].ToString(),
                        LastName   = reader["LastName"].ToString(),
                        CustomerId = int.Parse(reader["CustomerId"].ToString())
                    };

                    activeCustomers.Add(customer);
                }
                return(activeCustomers);
            }
        }
        public Product SelectProduct(ActiveCustomer activeCustomer)
        {
            var ProductList  = new List <Product>();
            var productQuery = new SelectProductsBySellerQuery();
            var products     = productQuery.SelectProductsBySeller(activeCustomer.CustomerId);

            var productsForSellerView = new View();

            productsForSellerView.AddMenuText("");
            productsForSellerView.AddMenuText($"Products for {activeCustomer.FirstName} {activeCustomer.LastName}:");

            foreach (var product in products)
            {
                ProductList.Add(product);
                productsForSellerView.AddMenuOption($"{product.Title} ");
            }
            ;
            //productsForSellerView.AddMenuText("Press 0 to go BACK.");

            Console.Write(productsForSellerView.GetFullMenu());


            int productSelected = int.Parse(Console.ReadLine().ToString());

            if (productSelected == 0)
            {
                return(null);
            }
            var selectedProduct = ProductList[productSelected - 1];

            return(ProductList.First <Product>(x => x == selectedProduct));
        }
Ejemplo n.º 3
0
        private void UppdateUi()
        {
            coboAccount.ItemsSource = null;
            coboAccount.ItemsSource = ActiveCustomer.GetMyList();

            coboCustomer.ItemsSource = null;
            coboCustomer.ItemsSource = customers;
        }
Ejemplo n.º 4
0
        private static PaginationResult <ActiveCustomer> ParseCustomerList(string houseId, IDataReader reader)
        {
            var result = new PaginationResult <ActiveCustomer>()
            {
                Data = new List <ActiveCustomer>()
            };
            var allRooms = RoomService.GetRooms(houseId);

            while (reader.Read())
            {
                var item = new ActiveCustomer
                {
                    Id           = reader["Id"].ToString(),
                    Address      = reader["Address"]?.ToString() ?? "",
                    Country      = reader["Country"]?.ToString() ?? "",
                    Email        = reader["Email"]?.ToString() ?? "",
                    Name         = reader["Name"].ToString(),
                    Phone        = reader["Phone"]?.ToString() ?? "",
                    PassportOrId = reader["passportOrId"].ToString(),
                    OrderId      = reader["OrderId"].ToString(),
                    CheckinDate  = DateTime.Parse(reader["CheckinDate"].ToString()),
                    CheckoutDate = DateTime.Parse(reader["CheckoutDate"].ToString()),
                    Rooms        = new List <Room>()
                };

                result.Data.Add(item);
            }
            reader.NextResult();
            reader.Read();
            var total = int.Parse(reader["Total"].ToString());

            result.Total = total;

            reader.NextResult();
            var roomMap = new Dictionary <string, List <string> >();

            while (reader.Read())
            {
                var orderId = reader["OrderId"].ToString();
                var roomId  = reader["RoomId"].ToString();
                if (!roomMap.ContainsKey(orderId))
                {
                    roomMap.Add(orderId, new List <string>());
                }
                roomMap[orderId].Add(roomId);
            }

            foreach (var item in result.Data)
            {
                foreach (var roomId in roomMap[item.OrderId])
                {
                    var room = allRooms.Single(r => r.Id.Equals(roomId));
                    item.Rooms.Add(room);
                }
            }

            return(result);
        }
 private void InactiveList_SelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     customer           = inactiveList.SelectedItem as ActiveCustomer;
     inactBtn.IsChecked = true;
     custDetails.Items.Clear();
     custDetails.Items.Add($"Name: {customer.ContactName}");
     custDetails.Items.Add($"ID: {customer.CustomerID}");
     custDetails.Items.Add($"City: {customer.City}");
     custDetails.Items.Add($"IsActive: {customer.IsActive}");
 }
Ejemplo n.º 6
0
        public void CreatePayment(ActiveCustomer selectedCustomer)
        {
            var db = new InsertPaymentQuery();

            var payment = new PaymentCreationModel();

            payment.Type          = GetPaymentType(selectedCustomer);
            payment.AccountNumber = GetAccountNumber();
            payment.CustomerId    = selectedCustomer.CustomerId;
            db.InsertPayment(payment.Type, payment.AccountNumber, payment.CustomerId);
        }
Ejemplo n.º 7
0
        public void CheckForIncompleteOrderShould()
        {
            CustomerManager _customerManager = new CustomerManager(_db);
            ActiveCustomer  _activeManager   = new ActiveCustomer();
            var             newCustomerId    = _customerManager.AddCustomer(new Customer("Bob", "Some Street", "City", "TN", 12345, "5555555555"));

            _activeManager.setActiveCustomerId(newCustomerId);
            var incompleteOrderId = _orderManager.CheckForIncompleteOrder();

            Assert.Null(incompleteOrderId);
        }
Ejemplo n.º 8
0
        public void CreateOrderShould()
        {
            CustomerManager _customerManager = new CustomerManager(_db);
            ActiveCustomer  _activeManager   = new ActiveCustomer();
            var             newCustomerId    = _customerManager.AddCustomer(new Customer("Ryan McCarty", "3041 Old Field Way", "Lexington", "Ky", 40513, "859-588-2850"));

            _activeManager.setActiveCustomerId(newCustomerId);
            var newOrderId = _orderManager.CreateOrder();

            Assert.IsType <int>(newOrderId);
        }
Ejemplo n.º 9
0
        public double GetProdcutPrice(ActiveCustomer selectedCustomer)
        {
            var getProductPriceView = new View();

            getProductPriceView.AddMenuText("");
            getProductPriceView.AddMenuText($"Current Active Customer: {selectedCustomer.FirstName} {selectedCustomer.LastName}");
            getProductPriceView.AddMenuText("Enter Price:");

            Console.Write(getProductPriceView.GetFullMenu());

            var productPrice = Console.ReadLine();

            return(double.Parse(productPrice));
        }
Ejemplo n.º 10
0
        public void AddPaymentTypeToOrderShould()
        {
            CustomerManager    _customerManager = new CustomerManager(_db);
            ActiveCustomer     _activeManager   = new ActiveCustomer();
            PaymentTypeManager _paymentManager  = new PaymentTypeManager(_db);
            var newCustomerId = _customerManager.AddCustomer(new Customer("Bob", "Some Street", "City", "TN", 12345, "5555555555"));

            _activeManager.setActiveCustomerId(newCustomerId);
            var newPayment       = _paymentManager.CreatePaymentType(new PaymentType(newCustomerId, "Merit", "1"));
            var newOrderId       = _orderManager.CreateOrder();
            var orderWithPayment = _orderManager.AddPaymentTypeToOrder(newPayment); //the parameter passed is the id of the payment type

            Assert.True(orderWithPayment);
        }
Ejemplo n.º 11
0
        public string GetPaymentType(ActiveCustomer selectedCustomer)
        {
            var paymentOption = new View();

            paymentOption.AddMenuText("");
            paymentOption.AddMenuText($"Current Active Customer: {selectedCustomer.FirstName} {selectedCustomer.LastName}");
            paymentOption.AddMenuText("Enter the payment type:");

            Console.Write(paymentOption.GetFullMenu());

            var paymentType = Console.ReadLine();

            return(paymentType);
        }
Ejemplo n.º 12
0
        public string GetProdcutTitle(ActiveCustomer selectedCustomer)
        {
            var getProductTitleView = new View();

            getProductTitleView.AddMenuText("");
            getProductTitleView.AddMenuText($"Current Active Customer: {selectedCustomer.FirstName} {selectedCustomer.LastName}");
            getProductTitleView.AddMenuText("Enter Product Title:");

            Console.Write(getProductTitleView.GetFullMenu());

            var productTitle = Console.ReadLine();

            return(productTitle);
        }
Ejemplo n.º 13
0
        public int GetProdcutQuantity(ActiveCustomer selectedCustomer)
        {
            var getProductQuantityView = new View();

            getProductQuantityView.AddMenuText("");
            getProductQuantityView.AddMenuText($"Current Active Customer: {selectedCustomer.FirstName} {selectedCustomer.LastName}");

            getProductQuantityView.AddMenuText("Enter Quantity:");

            Console.Write(getProductQuantityView.GetFullMenu());

            var productQuantity = Console.ReadLine();

            return(int.Parse(productQuantity));
        }
        public string CustomerSubMenu(ActiveCustomer selectedCustomer)
        {
            View mainMenu = new View();

            mainMenu.AddMenuText("");
            mainMenu.AddMenuText($"Current Active Customer: {selectedCustomer.FirstName} {selectedCustomer.LastName}");
            mainMenu.AddMenuOption("Buyer Menu")
            .AddMenuOption("Seller Menu");
            //.AddMenuText("Press 0 to exit.");

            Console.Write(mainMenu.GetFullMenu());
            var userOption = Console.ReadLine();

            return(userOption);
        }
Ejemplo n.º 15
0
        public void AddProductToOrderShould()
        {
            CustomerManager    _customerManager    = new CustomerManager(_db);
            ActiveCustomer     _activeManager      = new ActiveCustomer();
            ProductManager     _productManager     = new ProductManager(_db);
            ProductTypeManager _productTypeManager = new ProductTypeManager(_db);
            var newCustomerId = _customerManager.AddCustomer(new Customer("Bob", "Some Street", "City", "TN", 12345, "5555555555"));

            _activeManager.setActiveCustomerId(newCustomerId);
            var newProductTypeId = _productTypeManager.AddProductType(new ProductType("taco"));
            var newProductId     = _productManager.CreateProduct(new Product(newProductTypeId, "taco", 25, "string description", 25, newCustomerId));
            var orderId          = _orderManager.CreateOrder();
            var orderProductId   = _orderManager.AddProductToOrder(newProductId, orderId);

            Assert.IsType <int>(orderProductId);
        }
        public string UpdateProductMenu(Product selectedProduct, ActiveCustomer selectedCustomer)
        {
            View UpdateProductMenu = new View();

            UpdateProductMenu.AddMenuText("");
            UpdateProductMenu.AddMenuText($"Current Active Customer: {selectedCustomer.FirstName} {selectedCustomer.LastName}");
            UpdateProductMenu.AddMenuOption($"Change Title '{selectedProduct.Title}'")
            .AddMenuOption($"Change Price '{selectedProduct.Price}'")
            .AddMenuOption($"Change Quantity '{selectedProduct.Quantity}'")
            .AddMenuText("Press 0 to exit.");

            Console.Write(UpdateProductMenu.GetFullMenu());
            var userOption = Console.ReadLine();

            return(userOption);
        }
Ejemplo n.º 17
0
        public void BuyerMenu(ActiveCustomer activeCustomer)
        {
            View buyerMenu = new View();

            buyerMenu.AddMenuText("");
            buyerMenu.AddMenuText($"Current Active Customer: {activeCustomer.FirstName} {activeCustomer.LastName}");
            buyerMenu.AddMenuOption("Shop")
            .AddMenuOption("Add a payment method")
            .AddMenuOption("Checkout")
            .AddMenuText("Press 0 to exit.");

            Console.Write(buyerMenu.GetFullMenu());
            var userOption = Console.ReadLine();

            OptionController(userOption, activeCustomer);
        }
Ejemplo n.º 18
0
        public string SellerMenu(ActiveCustomer selectedCustomer)
        {
            View sellerMenu = new View();

            sellerMenu.AddMenuText("");
            sellerMenu.AddMenuText($"Current Active Customer: {selectedCustomer.FirstName} {selectedCustomer.LastName}");
            sellerMenu.AddMenuOption("Add a Product")
            .AddMenuOption("Edit a Product")
            .AddMenuOption("Delete a Product")
            .AddMenuOption("View Revenue Report");
            //.AddMenuText("Press 0 to exit.");

            Console.Write(sellerMenu.GetFullMenu());
            var userOption = Console.ReadLine();

            return(userOption);
        }
Ejemplo n.º 19
0
        public static List <ActiveCustomer> GetCustomerCheckoutByDate(string houseId, DateTime date)
        {
            return(SqlHelper.ExecuteReader(ConfigManager.ConnectionString, CommandType.StoredProcedure,
                                           SP_CUSTOMER_SELECT_CHECKOUT_BY_DATE,
                                           new[]
            {
                new SqlParameter("@houseId", houseId),
                new SqlParameter("@date", date)
            }, reader =>
            {
                var list = new List <ActiveCustomer>();
                var allRooms = RoomService.GetRooms(houseId);
                while (reader.Read())
                {
                    var item = new ActiveCustomer
                    {
                        Id = reader["Id"].ToString(),
                        Address = reader["Address"]?.ToString() ?? "",
                        Country = reader["Country"]?.ToString() ?? "",
                        Email = reader["Email"]?.ToString() ?? "",
                        Name = reader["Name"].ToString(),
                        Phone = reader["Phone"]?.ToString() ?? "",
                        PassportOrId = reader["passportOrId"].ToString(),
                        Rooms = new List <Room>(),
                        OrderId = reader["OrderId"].ToString(),
                        CheckinDate = DateTime.Parse(reader["CheckinDate"].ToString()),
                        CheckoutDate = DateTime.Parse(reader["CheckoutDate"].ToString())
                    };
                    var roomId = reader["RoomId"].ToString();
                    var activeItem = list.FirstOrDefault(c => c.Id == item.Id);
                    if (activeItem == null)
                    {
                        item.Rooms.Add(allRooms.Single(r => r.Id == roomId));
                        list.Add(item);
                    }
                    else
                    {
                        activeItem.Rooms.Add(allRooms.Single(r => r.Id == roomId));
                    }
                }

                return list;
            }));
        }
        public void RunRevenueReport(ActiveCustomer activeCustomer)
        {
            var revenueReport = new ReportView();
            var db            = new SelectClosedOrdersByCustomerQuery();

            var orders = db.SelectOrderByCustomer(activeCustomer.CustomerId);


            //Add title
            revenueReport.AddReportTitleLine("Revenue Report", $"{activeCustomer.FirstName} {activeCustomer.LastName}");


            //get each item for each order
            var orderIndex = 0;

            foreach (CompletedOrder currentOrder in orders)
            {
                //if not the first record
                if (orderIndex > 0)
                {
                    //check if it's a new order
                    var previousOrderId = orders[orderIndex - 1].OrderId;
                    if (previousOrderId != currentOrder.OrderId)
                    {
                        //add the order line
                        revenueReport.AddReportSection($"Order Number: {currentOrder.OrderId}");
                        revenueReport.AddColumnHeaders("Product", "Quantity", "Total");
                    }
                }
                else // first order
                {
                    revenueReport.AddReportSection($"Order Number: {currentOrder.OrderId}");
                    revenueReport.AddColumnHeaders("Product", "Quantity", "Total");
                }
                //add the line item
                revenueReport.AddReportLineItem(currentOrder.ProductName, currentOrder.Quantity, currentOrder.ProductTotal);
                //increment the order count
                orderIndex++;
            }
            Console.WriteLine(revenueReport.GetFullMenu());
            Console.ReadLine();
        }
Ejemplo n.º 21
0
        private void OptionController(string userInput, ActiveCustomer activeCustomer)
        {
            var input = Convert.ToChar(userInput);

            switch (input)
            {
            case '1':                                        //Shop
                var shopView  = new AvailableProductsView(); //class
                var findOrder = new FindOrdersQuery();
                var orderId   = findOrder.FindOpenOrderByCustomerId(activeCustomer.CustomerId);

                do
                {
                    var selectedProduct = shopView.AvailableProducts(activeCustomer);

                    if (orderId == 0)
                    {
                        var newOrder = new CreateOrderQuery();
                        orderId = newOrder.CreateOrder(activeCustomer.CustomerId);
                    }

                    var productOrder = new AddProductToProductOrderQuery();
                    productOrder.AddProductToProductOrder(selectedProduct.ProductId, orderId);
                }while (shopView.productSelection != 0);

                break;

            case '2':
                var paymentView = new PaymentView();
                paymentView.CreatePayment(activeCustomer);
                BuyerMenu(activeCustomer);
                break;

            case '3':     //Checkout
            //TODO: Add Checkout function

            default:     //Default for Buyer Menu
                break;
            }
        }
Ejemplo n.º 22
0
        public Product AvailableProducts(ActiveCustomer activeCustomer)
        {
            var buyerMenu    = new BuyerMenuView();
            var ProductList  = new List <Product>();
            var productQuery = new AvailableProductsQuery();
            var products     = productQuery.GetAvailableProducts(activeCustomer.CustomerId);

            var availableProducts = new View();

            availableProducts.AddMenuText("");
            availableProducts.AddMenuText("Products available for purchase:");

            foreach (var product in products)
            {
                ProductList.Add(product);
                availableProducts.AddMenuOption($"{product.Title}");
            }
            ;

            availableProducts.AddMenuText("Press 0 to go BACK.");

            Console.Write(availableProducts.GetFullMenu());

            int productSelected = int.Parse(Console.ReadLine().ToString());

            productSelection = productSelected;

            if (productSelection == 0)
            {
                buyerMenu.BuyerMenu(activeCustomer);
            }

            var selectedProduct = ProductList[productSelected - 1];

            selectedProduct.Quantity--;

            return(ProductList.First <Product>(x => x == selectedProduct));
        }
Ejemplo n.º 23
0
        static void Main(string[] args)
        {
            var mainMenu = new MainView();

            var run = true;

            while (run)
            {
                //MAIN MENU
                string userInput = mainMenu.MainMenu();
                char   input     = Convert.ToChar(userInput);

                switch (input)
                {
                case '0':
                    run = false;
                    break;

                case '1':                         //"Add Customer"
                    var newCreateCustomer = new NewCustomerView();

                    var customerFirstName = newCreateCustomer.GetFirstName();
                    var customerLastName  = newCreateCustomer.GetLastName();
                    var customerStreet    = newCreateCustomer.GetStreet();
                    var customerCity      = newCreateCustomer.GetCity();
                    var customerState     = newCreateCustomer.GetState();
                    var customerZip       = newCreateCustomer.GetZip();
                    var customerPhone     = newCreateCustomer.GetPhone();
                    var customerEmail     = newCreateCustomer.GetEmail();

                    var customerInfo = new InsertCustomerQuery();
                    customerInfo.InsertCustomer(customerFirstName, customerLastName, customerStreet, customerCity, customerState, customerZip, customerPhone, customerEmail);

                    break;

                case '2':                         //"Select Customer"

                    var viewAllCustomers = new AllCustomersView();
                    _selectedCustomer = viewAllCustomers.SelectActiveCustomer();

                    var activeCustomerQuery = new SelectActiveCustomerQuery();
                    var activeCustomers     = activeCustomerQuery.SelectActiveCustomer();

                    // BUY AND SELL SUB MENU
                    var customerSubMenu = new CustomerSubMenuView();
                    var userOption      = customerSubMenu.CustomerSubMenu(_selectedCustomer);
                    var userRole        = Convert.ToChar(userOption);

                    switch (userRole)
                    {
                    case '1':                                     //Buyer Menu
                        var buyerMenu = new BuyerMenuView();
                        buyerMenu.BuyerMenu(_selectedCustomer);

                        break;

                    case '2':                                     //Seller Menu
                        var    sellerMenu  = new SellerMenuView();
                        string sellerInput = sellerMenu.SellerMenu(_selectedCustomer);
                        var    sellerChar  = Convert.ToChar(sellerInput);

                        switch (sellerChar)
                        {
                        case '1':                                                //Add Product
                            var addProductView  = new CreateProductView();
                            var customerId      = (_selectedCustomer.CustomerId);
                            var productTitle    = addProductView.GetProdcutTitle(_selectedCustomer);
                            var productPrice    = addProductView.GetProdcutPrice(_selectedCustomer);
                            var productQuantity = addProductView.GetProdcutQuantity(_selectedCustomer);
                            var addProduct      = new InsertProductQuery();
                            var newProduct      = addProduct.InsertProduct(customerId, productTitle, productPrice, productQuantity);
                            break;

                        case '2':                                                 //Edit Product
                            var viewAllProductsForSeller = new AllProductsForSellerView();
                            var selectedProduct          = viewAllProductsForSeller.SelectProduct(_selectedCustomer);
                            var updateProductView        = new UpdateProductView();

                            var updateProduct   = updateProductView.UpdateProductMenu(selectedProduct, _selectedCustomer);
                            var productSelected = Convert.ToChar(updateProduct);

                            switch (productSelected)
                            {
                            case '1':
                                var title = updateProductView.UpdateTitle();
                                var updateProductTitleQuery = new UpdateProductQueries();
                                var executeUpdateTitle      = updateProductTitleQuery.UpdateProductTitle(selectedProduct.ProductId, title);
                                break;

                            case '2':
                                var price = updateProductView.UpdatePrice();
                                var updateProductPriceQuery = new UpdateProductQueries();
                                var executeUpdatePrice      = updateProductPriceQuery.UpdateProductPrice(selectedProduct.ProductId, price);
                                break;

                            case '3':
                                var quantity = updateProductView.UpdateQuantity();
                                var updateProductQuantityQuery = new UpdateProductQueries();
                                var executeUpdateQuantity      = updateProductQuantityQuery.UpdateProductQuantity(selectedProduct.ProductId, quantity);
                                break;

                            default:                                                             //Default for Update Product Menu
                                break;
                            }
                            break;

                        case '3':                                                 //Delete Product
                            viewAllProductsForSeller = new AllProductsForSellerView();
                            var productToDelete      = viewAllProductsForSeller.SelectProduct(_selectedCustomer);
                            var deleteProduct        = new DeleteProductQuery();
                            var executeDeleteProduct = deleteProduct.DeleteProduct(productToDelete.ProductId);

                            break;

                        case '4':             //Revenue Report
                            var revenueReportView = new RevenueReportView();
                            revenueReportView.RunRevenueReport(_selectedCustomer);
                            break;

                        default:                                                 //Default for Seller Menu
                            break;
                        }

                        break;

                    default:                                     //Default for BUY/SELL Menu
                        break;
                    }

                    break;

                default:                         //Default for Main Menu
                    break;
                }
            }
        }
        public async Task <ActionResult> GetOverview(DateTime?startDate, DateTime?endDate, DateTime?trackUnitStartDate, DateTime?trackUnitEndDate, string venueCode, string contactPersonId, string selectMachine, int?trackUnitHours, bool?trackUnitCurrentRentals, bool?trackUnitClosedRentals, bool?trackUnitPendingDeliveries, bool?trackUnitPendingCollections)
        {
            if (!ActiveCustomer.showOverview)
            {
                return(HttpNotFound());
            }
            // *** Populate session variables with new valuespassed in
            if (startDate.HasValue)
            {
                Session["StartDate"] = startDate.Value;
            }
            if (endDate.HasValue)
            {
                Session["EndDate"] = endDate.Value;
            }
            if (trackUnitStartDate.HasValue)
            {
                Session["TrackUnitStartDate"] = trackUnitStartDate;
            }
            if (trackUnitEndDate.HasValue)
            {
                Session["TrackUnitEndDate"] = trackUnitEndDate;
            }
            if (trackUnitHours.HasValue)
            {
                Session["TrackUnitHours"] = trackUnitHours;
            }
            if (venueCode != null)
            {
                Session["venueCode"] = venueCode;
            }
            if (contactPersonId != null)
            {
                Session["contactPersonId"] = contactPersonId;
            }
            if (trackUnitCurrentRentals.HasValue && trackUnitCurrentRentals.Value == true)
            {
                Session["TrackUnitCurrentRentals"] = true;
            }
            else
            {
                Session["TrackUnitCurrentRentals"] = false;
            }
            if (trackUnitClosedRentals.HasValue && trackUnitClosedRentals.Value == true)
            {
                Session["TrackUnitClosedRentals"] = true;
            }
            else
            {
                Session["TrackUnitClosedRentals"] = false;
            }
            if (trackUnitPendingDeliveries.HasValue && trackUnitPendingDeliveries.Value == true)
            {
                Session["TrackUnitPendingDeliveries"] = true;
            }
            else
            {
                Session["TrackUnitPendingDeliveries"] = false;
            }
            if (trackUnitPendingCollections.HasValue && trackUnitPendingCollections.Value == true)
            {
                Session["TrackUnitPendingCollections"] = true;
            }
            else
            {
                Session["TrackUnitPendingCollections"] = false;
            }

            if (selectMachine != null)
            {
                if (selectMachine == "-1")
                {
                    Session["SelectedMachine"] = null;
                }
                else
                {
                    Session["SelectedMachine"] = selectMachine;
                }
            }

            // *** Populate the model with basic info about customer, and filters passed in
            OverviewViewModel model = new OverviewViewModel();
            var userCustomers       = (await db.GetUserCustomers(User.Identity.GetUserId())).Select(x => new { CustomerKey = x.CustomerKey, CustomerName = String.Format("{0} ({1})", x.Name, x.City), CustomerCurrency = x.currency });

            model.userCustomers  = new SelectList(userCustomers, "CustomerKey", "CustomerName", "CustomerCurrency");
            model.accountManager = await db.GetAccountManagerDetails(this.ActiveCustomer);

            model.customerSelected            = this.ActiveCustomer.CustomerKey;
            model.StartDate                   = DateTime.Today.AddMonths(-1);
            model.EndDate                     = DateTime.Today.AddMonths(1);
            model.TrackUnitStartDate          = DateTime.Today.AddMonths(-1);
            model.TrackUnitEndDate            = DateTime.Today.AddMonths(1);
            model.TrackUnitHours              = 120;
            model.TrackUnitCurrentRentals     = (bool)Session["TrackUnitCurrentRentals"];
            model.TrackUnitClosedRentals      = (bool)Session["TrackUnitClosedRentals"];
            model.TrackUnitPendingDeliveries  = (bool)Session["TrackUnitPendingDeliveries"];
            model.TrackUnitPendingCollections = (bool)Session["TrackUnitPendingCollections"];

            if (Session["StartDate"] != null && Session["EndDate"] != null)
            {
                model.StartDate = (DateTime)Session["StartDate"];
                model.EndDate   = (DateTime)Session["EndDate"];
            }
            else
            {
                Session["StartDate"] = model.StartDate;
                Session["EndDate"]   = model.EndDate;
            }

            if (Session["TrackUnitStartDate"] != null && Session["TrackUnitEndDate"] != null)
            {
                model.TrackUnitStartDate = (DateTime)Session["TrackUnitStartDate"];
                model.TrackUnitEndDate   = (DateTime)Session["TrackUnitEndDate"];
            }
            else
            {
                Session["TrackUnitStartDate"] = model.TrackUnitStartDate;
                Session["TrackUnitEndDate"]   = model.TrackUnitEndDate;
            }

            if (Session["TrackUnitHours"] != null)
            {
                model.TrackUnitHours = (int)Session["TrackUnitHours"];
            }
            else
            {
                Session["TrackUnitHours"] = model.TrackUnitHours;
            }

            if (!string.IsNullOrWhiteSpace((string)Session["venueCode"]))
            {
                model.venueCodeSelected = (string)Session["venueCode"];
            }
            else
            {
                Session["venueCode"] = model.venueCodeSelected = "";
            }

            if (!string.IsNullOrWhiteSpace((string)Session["contactPersonId"]))
            {
                model.contactPersonIdSelected = (string)Session["contactPersonId"];
            }
            else
            {
                Session["contactPersonId"] = model.contactPersonIdSelected = "";
            }

            if (!string.IsNullOrWhiteSpace((string)Session["SelectedMachine"]))
            {
                model.selectedMachineSerial = (string)Session["SelectedMachine"];
            }
            else
            {
                Session["SelectedMachine"] = model.selectedMachineSerial = "";
            }

            // *** Orders, Venues and Order Statuses ***
            DateTime minDate;

            if (model.TrackUnitStartDate < model.StartDate)
            {
                minDate = model.TrackUnitStartDate;
            }
            else
            {
                minDate = model.StartDate;
            }

            if (DateTime.Today < minDate)
            {
                minDate = DateTime.Today;
            }

            DateTime maxDate;

            if (model.TrackUnitEndDate > model.EndDate)
            {
                maxDate = model.TrackUnitEndDate;
            }
            else
            {
                maxDate = model.EndDate;
            }

            if (DateTime.Today > maxDate)
            {
                maxDate = DateTime.Today;
            }

            IEnumerable <RentalOrder> fullOrders = await ActiveCustomer.GetRentalOrders(new RentalsDAL(), minDate, maxDate);

            IEnumerable <RentalOrder> orders = fullOrders.Where(i => i.DateOnHire.Date <= model.EndDate.Date && ((!i.DateOffHire.HasValue || i.DateOffHire.Value.Date >= model.StartDate)));

            IEnumerable <RentalOrder> fuelConsumptionPerMachineOrders = fullOrders.Where(i => i.DateOnHire.Date <= model.TrackUnitEndDate.Date && ((!i.DateOffHire.HasValue || i.DateOffHire.Value.Date >= model.TrackUnitStartDate.Date)));

            IEnumerable <RentalOrder> onSiteMachineOrders = fullOrders.Where(i => i.DateOnHire.Date <= DateTime.Today && ((!i.DateOffHire.HasValue || i.DateOffHire.Value.Date >= DateTime.Today)));

            IEnumerable <RentalOrder> filteredOrders = orders;

            List <string> projectVenueCodes = new List <string>();

            IdentityUser userPrefs = (await new ROLWeb.Models.UserStore().FindByIdAsync(User.Identity.GetUserId()));

            if (userPrefs.ShowProjectMachines)
            {
                foreach (RentalOrder order in filteredOrders)
                {
                    if (!projectVenueCodes.Contains(order.RorVenueCode) && order.ContactPersonId == userPrefs.ContactPersonId)
                    {
                        projectVenueCodes.Add(order.RorVenueCode);
                    }
                }
                if (projectVenueCodes.Count() > 0)
                {
                    filteredOrders = filteredOrders.Where(i => projectVenueCodes.Contains(i.RorVenueCode));
                }
            }

            // Populate list of venues based on ALL orders
            var venueCheck = new List <String>();

            model.Venues = filteredOrders
                           .Select <RentalOrder, Venue>(x =>
                                                        new Venue
            {
                DeliveryName = x.DeliveryName,
                DeliveryCity = x.DeliveryCity,
                RorVenueCode = x.RorVenueCode
            })
                           .Distinct()
                           .OrderByDescending(x => venueCheck.Contains(x.RorVenueCode))
                           .ThenBy(y => y.DeliveryName);

            if (projectVenueCodes.Count() > 0)
            {
                model.Venues = model.Venues.Where(i => projectVenueCodes.Contains(i.RorVenueCode));
            }

            // Then filter the orders to only those in the current venue
            if (!string.IsNullOrWhiteSpace(model.venueCodeSelected))
            {
                filteredOrders = filteredOrders.Where(i => i.RorVenueCode == model.venueCodeSelected);
            }

            model.orderContactPeople = new SelectList(filteredOrders.GroupBy(i => i.ContactPersonId).Select(i => i.First()), "ContactPersonId", "ContactPerson");

            if (!string.IsNullOrWhiteSpace(model.contactPersonIdSelected))
            {
                filteredOrders = filteredOrders.Where(i => i.ContactPersonId == model.contactPersonIdSelected);
            }

            string[] CurrentRentalCodes = Models.Rentals.OrderStatus.GetOrderStatusID("CurrentRentals", ActiveCustomer.DatabaseName);

            // Get the count of extras on rent
            model.extrasOnRent = filteredOrders.Where(i => i.ItemGroupId == "31900" && CurrentRentalCodes.Contains(i.OrderStatusId)).Count();

            // Get a list of statuses that exist withn the filterd list of orders remove extras that are on rent
            model.orderStatus = filteredOrders.Where(i => !(i.ItemGroupId == "31900" && CurrentRentalCodes.Contains(i.OrderStatusId))).GroupBy(x => x.OrderStatusId).Select(y => new OrderStatusCount {
                OrderStatusId = y.Key, numOrders = y.Count()
            });

            // *** Cost Overview, exchange rates ***

            IEnumerable <ExchangeRate> exchangeRates = db.GetExchangeRates();

            model.ExchangeRate = exchangeRates.Where(i => i.CountryCode == ActiveCustomer.currency.ToUpper()).FirstOrDefault();

            if (model.ExchangeRate == null)
            {
                model.ExchangeRate = new ExchangeRate()
                {
                    CountryCode = "EUR",
                    EuroRate    = 1m
                };
            }

            model.CostMultiplierElectric = 1m;
            model.CostMultiplierDiesel   = 1m;
            model.CostMultiplierHybrid   = 1m;

            if (ActiveCustomer.currency.ToLower() == "eur")
            {
                model.CurrencySymbol         = "€";
                model.CostMultiplierElectric = 1m;
                if (ActiveCustomer.CompanyId == "140")
                {
                    model.CostMultiplierDiesel = 1.8m;
                }
                else
                {
                    model.CostMultiplierDiesel = 1m;
                }
                model.CostMultiplierHybrid = 1m;
            }
            else if (ActiveCustomer.currency.ToLower() == "dkk")
            {
                model.CurrencySymbol         = "KR";
                model.CostMultiplierDiesel   = 13.98m;
                model.CostMultiplierElectric = 2.3m;
                model.CostMultiplierHybrid   = 1m;
            }
            else if (ActiveCustomer.currency.ToLower() == "sek")
            {
                model.CurrencySymbol         = "SEK";
                model.CostMultiplierDiesel   = 18m;
                model.CostMultiplierElectric = 2.5m;
                model.CostMultiplierHybrid   = 1m;
            }
            else if (ActiveCustomer.currency.ToLower() == "nok")
            {
                model.CurrencySymbol         = "NOK";
                model.CostMultiplierDiesel   = 15m;
                model.CostMultiplierElectric = 2.5m;
                model.CostMultiplierHybrid   = 1m;
            }
            else if (ActiveCustomer.currency.ToLower() == "pln")
            {
                model.CurrencySymbol         = "PLN";
                model.CostMultiplierDiesel   = 1.21m;
                model.CostMultiplierElectric = 1m;
                model.CostMultiplierHybrid   = 1m;
            }
            else if (ActiveCustomer.currency.ToLower() == "gbp")
            {
                model.CurrencySymbol         = "£";
                model.CostMultiplierDiesel   = model.ExchangeRate.EuroRate;
                model.CostMultiplierElectric = model.ExchangeRate.EuroRate;
                model.CostMultiplierHybrid   = model.ExchangeRate.EuroRate;
            }
            else
            {
                model.CurrencySymbol = "€";
            }


            if (ActiveCustomer.showOverviewCosts)
            {
                if (string.IsNullOrWhiteSpace(model.venueCodeSelected))
                {
                    if (ActiveCustomer.showChildBRInvoices)
                    {
                        if (ActiveCustomer.useInvoiceAccount)
                        {
                            model.rentalCosts = await db.GetRentalCostsInvoiceAccountChildBR(this.ActiveCustomer, model.StartDate, model.EndDate);

                            model.rentalCostsLastYear = await db.GetRentalCostsInvoiceAccountChildBR(this.ActiveCustomer, model.StartDate.AddYears(-1), model.EndDate.AddYears(-1));
                        }
                        else
                        {
                            model.rentalCosts = await db.GetRentalCostsOrderAccountChildBR(this.ActiveCustomer, model.StartDate, model.EndDate);

                            model.rentalCostsLastYear = await db.GetRentalCostsOrderAccountChildBR(this.ActiveCustomer, model.StartDate.AddYears(-1), model.EndDate.AddYears(-1));
                        }
                    }
                    else
                    {
                        if (ActiveCustomer.useInvoiceAccount)
                        {
                            model.rentalCosts = await db.GetRentalCostsInvoiceAccount(this.ActiveCustomer, model.StartDate, model.EndDate);

                            model.rentalCostsLastYear = await db.GetRentalCostsInvoiceAccount(this.ActiveCustomer, model.StartDate.AddYears(-1), model.EndDate.AddYears(-1));
                        }
                        else
                        {
                            model.rentalCosts = await db.GetRentalCostsOrderAccount(this.ActiveCustomer, model.StartDate, model.EndDate);

                            model.rentalCostsLastYear = await db.GetRentalCostsOrderAccount(this.ActiveCustomer, model.StartDate.AddYears(-1), model.EndDate.AddYears(-1));
                        }
                    }
                }
                else
                {
                    model.rentalCosts = await db.GetRentalCostsInvoiceVenueAccount(this.ActiveCustomer, model.StartDate, model.EndDate);

                    model.rentalCosts = model.rentalCosts.Where(i => i.RorVenueCode == model.venueCodeSelected);

                    model.rentalCostsLastYear = await db.GetRentalCostsInvoiceVenueAccount(this.ActiveCustomer, model.StartDate.AddYears(-1), model.EndDate.AddYears(-1));

                    model.rentalCostsLastYear = model.rentalCosts.Where(i => i.RorVenueCode == model.venueCodeSelected);
                }
            }

            // *** Response Time ***
            Task GetCustKPIs = new Task(() =>
            {
                if (ActiveCustomer.showOverviewResponseTime || ActiveCustomer.showOverviewMachinesNotInUse)
                {
                    if (string.IsNullOrEmpty(model.venueCodeSelected))
                    {
                        if (projectVenueCodes.Count() > 0)
                        {
                            IEnumerable <CustTRWKPIs> allKPIs = db.GetDWHCustVenuTRWKPIs(ActiveCustomer.DatabaseName, ActiveCustomer.CompanyId, ActiveCustomer.CustomerId, model.venueCodeSelected, model.StartDate, model.EndDate);

                            List <CustTRWKPIs> projectVenueKPIs = allKPIs.Where(i => projectVenueCodes.Contains(i.venuecode)).ToList();

                            List <decimal> resolutionTime = projectVenueKPIs.Where(i => i.avgResolutionTime.HasValue).Select(i => i.avgResolutionTime.Value).ToList();

                            List <decimal> responseTime = projectVenueKPIs.Where(i => i.avgResponseTime.HasValue).Select(i => i.avgResponseTime.Value).ToList();

                            if (projectVenueKPIs.Count > 0)
                            {
                                CustTRWKPIs custTRWKPIs = new CustTRWKPIs()
                                {
                                    companyid              = projectVenueKPIs.First().companyid,
                                    customerid             = projectVenueKPIs.First().customerid,
                                    venuecode              = projectVenueKPIs.First().venuecode,
                                    machineCount           = projectVenueKPIs.Sum(rec => rec.machineCount),
                                    avgResolutionTime      = resolutionTime.Sum(rec => rec),
                                    avgResponseTime        = responseTime.Sum(rec => rec),
                                    firstDayBreakdownCount = projectVenueKPIs.Sum(rec => rec.firstDayBreakdownCount),
                                    onTimeDeliveryCount    = projectVenueKPIs.Sum(rec => rec.onTimeDeliveryCount),
                                    totalDeliveryCount     = projectVenueKPIs.Sum(rec => rec.totalDeliveryCount),
                                    upTimePerc             = projectVenueKPIs.Sum(rec => rec.upTimePerc) / projectVenueKPIs.Count(),
                                    solvedByPhoneCount     = projectVenueKPIs.Sum(rec => rec.solvedByPhoneCount)
                                };

                                if (resolutionTime.Count() > 0)
                                {
                                    custTRWKPIs.avgResolutionTime /= resolutionTime.Count();
                                }

                                if (responseTime.Count() > 0)
                                {
                                    custTRWKPIs.avgResponseTime /= responseTime.Count();
                                }

                                model.ResponseTimeKPI = custTRWKPIs;
                            }

                            var allPickupTimes          = db.GetDWHCustTRWKPI_pickUpTime(ActiveCustomer.DatabaseName, ActiveCustomer.CompanyId, ActiveCustomer.CustomerId, model.StartDate, model.EndDate);
                            model.CustTRWKPI_pickUpTime = allPickupTimes.FirstOrDefault();
                        }
                        else
                        {
                            var allKPIs                 = db.GetDWHCustTRWKPIs(ActiveCustomer.DatabaseName, ActiveCustomer.CompanyId, ActiveCustomer.CustomerId, model.StartDate, model.EndDate);
                            model.ResponseTimeKPI       = allKPIs.FirstOrDefault();
                            var allPickupTimes          = db.GetDWHCustTRWKPI_pickUpTime(ActiveCustomer.DatabaseName, ActiveCustomer.CompanyId, ActiveCustomer.CustomerId, model.StartDate, model.EndDate);
                            model.CustTRWKPI_pickUpTime = allPickupTimes.FirstOrDefault();
                        }
                    }
                    else
                    {
                        var allKPIs           = db.GetDWHCustVenuTRWKPIs(ActiveCustomer.DatabaseName, ActiveCustomer.CompanyId, ActiveCustomer.CustomerId, model.venueCodeSelected, model.StartDate, model.EndDate);
                        model.ResponseTimeKPI = allKPIs.FirstOrDefault(i => i.venuecode == model.venueCodeSelected);

                        var allPickupTimes          = db.GetDWHCustVenuTRWKPI_pickUpTime(ActiveCustomer.DatabaseName, ActiveCustomer.CompanyId, model.venueCodeSelected, ActiveCustomer.CustomerId, model.StartDate, model.EndDate);
                        model.CustTRWKPI_pickUpTime = allPickupTimes.FirstOrDefault();
                    }

                    if (model.ResponseTimeKPI == null)
                    {
                        model.ResponseTimeKPI = new CustTRWKPIs();
                        model.ResponseTimeKPI.avgResponseTime   = 0.0m;
                        model.ResponseTimeKPI.avgResolutionTime = 0.0m;
                    }
                    if (model.ResponseTimeKPI.avgResponseTime == null)
                    {
                        model.ResponseTimeKPI.avgResponseTime = 0.0m;
                    }
                    if (model.ResponseTimeKPI.avgResolutionTime == null)
                    {
                        model.ResponseTimeKPI.avgResolutionTime = 0.0m;
                    }

                    if (model.CustTRWKPI_pickUpTime == null)
                    {
                        model.CustTRWKPI_pickUpTime = new CustTRWKPI_pickUpTime();
                        model.CustTRWKPI_pickUpTime.avgPickupTime = 0.0m;
                    }
                    if (model.CustTRWKPI_pickUpTime.avgPickupTime == null)
                    {
                        model.CustTRWKPI_pickUpTime.avgPickupTime = 0.0m;
                    }

                    //If the active customer is French recalculate the On time delivery KPI
                    if (ActiveCustomer.CompanyId == "140")
                    {
                        model.ResponseTimeKPI.totalDeliveryCount = filteredOrders.Where(i => i.DateOnHire < DateTime.Now).Count();
                    }
                }
            });

            GetCustKPIs.Start();

            // *** Per machine data ***

            Task PerMachineData = new Task(() =>
            {
                model.FuelConsumptionPerMachine = db.GetDWHCustConsPerMachine(ActiveCustomer.DatabaseName, ActiveCustomer.CompanyId, ActiveCustomer.CustomerId, model.TrackUnitStartDate, model.TrackUnitEndDate);

                if (model.TrackUnitCurrentRentals || model.TrackUnitClosedRentals || model.TrackUnitPendingDeliveries || model.TrackUnitPendingCollections)
                {
                    model.TrackUnitRentalCodes = new List <string>();

                    if (model.TrackUnitCurrentRentals == true)
                    {
                        model.TrackUnitRentalCodes.Add(Models.Rentals.OrderStatus.GetOrderStatusID_String("CurrentRentals", ActiveCustomer.DatabaseName));
                    }
                    if (model.TrackUnitClosedRentals == true)
                    {
                        model.TrackUnitRentalCodes.Add(Models.Rentals.OrderStatus.GetOrderStatusID_String("ClosedRentals", ActiveCustomer.DatabaseName));
                    }
                    if (model.TrackUnitPendingDeliveries == true)
                    {
                        model.TrackUnitRentalCodes.Add(Models.Rentals.OrderStatus.GetOrderStatusID_String("PendingDeliveries", ActiveCustomer.DatabaseName));
                    }
                    if (model.TrackUnitPendingCollections == true)
                    {
                        model.TrackUnitRentalCodes.Add(Models.Rentals.OrderStatus.GetOrderStatusID_String("PendingCollections", ActiveCustomer.DatabaseName));
                    }

                    string[] fuelConsumptionPerMachineInventTransIds = fuelConsumptionPerMachineOrders.Where(i => model.TrackUnitRentalCodes.Contains(i.OrderStatusId) && model.FuelConsumptionPerMachine.Select(n => n.inventtransid).Contains(i.InventTransId)).Select(i => i.InventTransId).ToArray();

                    model.FuelConsumptionPerMachine = model.FuelConsumptionPerMachine.Where(i => fuelConsumptionPerMachineInventTransIds.Contains(i.inventtransid));

                    if (!string.IsNullOrWhiteSpace(model.contactPersonIdSelected))
                    {
                        //Bind contactpersonid to matching orders and fuelconsumptions
                        foreach (FuelConsumption machine in model.FuelConsumptionPerMachine)
                        {
                            foreach (RentalOrder order in fuelConsumptionPerMachineOrders)
                            {
                                if (machine.inventtransid == order.InventTransId)
                                {
                                    machine.ContactPersonId = order.ContactPersonId;
                                }
                            }
                        }

                        //Filter to machines with matching contact person id
                        model.FuelConsumptionPerMachine = model.FuelConsumptionPerMachine.Where(i => i.ContactPersonId == model.contactPersonIdSelected);
                    }
                }

                if (projectVenueCodes.Count() > 0)
                {
                    model.FuelConsumptionPerMachine = model.FuelConsumptionPerMachine.Where(i => projectVenueCodes.Contains(i.rorvenuecode));
                }

                if (!string.IsNullOrEmpty(model.venueCodeSelected))
                {
                    model.FuelConsumptionPerMachine = model.FuelConsumptionPerMachine.Where(i => i.rorvenuecode == model.venueCodeSelected).ToList();
                }

                var duplicateMachines = model.FuelConsumptionPerMachine.Where(i => model.FuelConsumptionPerMachine.Where(x => x.inventtransid == i.inventtransid).Count() > 1).GroupBy(n => n.inventtransid);

                List <FuelConsumption> nonDuplicateMachines = model.FuelConsumptionPerMachine.Where(i => model.FuelConsumptionPerMachine.Where(x => x.inventtransid == i.inventtransid).Count() < 2).ToList();

                List <FuelConsumption> summedDuplicates = new List <FuelConsumption>();

                foreach (var inventTransitIdGroup in duplicateMachines)
                {
                    FuelConsumption summedDupplicate      = inventTransitIdGroup.First();
                    summedDupplicate.machineconsumption   = inventTransitIdGroup.Sum(i => i.machineconsumption);
                    summedDupplicate.machineEmission      = inventTransitIdGroup.Sum(i => i.machineEmission);
                    summedDupplicate.machineFuelCost      = inventTransitIdGroup.Sum(i => i.machineFuelCost);
                    summedDupplicate.machinerunningHourM1 = inventTransitIdGroup.Sum(i => i.machinerunningHourM1);
                    summedDupplicate.lastActiveDate       = inventTransitIdGroup.Max(i => i.lastActiveDate);

                    summedDuplicates.Add(summedDupplicate);
                }

                model.FuelConsumptionPerMachine = nonDuplicateMachines.Concat(summedDuplicates);

                //Create list of machine types to populate the overview dropdown
                model.SelectMachines =
                    model.FuelConsumptionPerMachine.Select(i => new SelectMachine()
                {
                    Code = i.serialNumber, Name = i.machineType, FleetNumber = i.fleetNumber
                })
                    .OrderBy(i => i.Name);

                // Filter results based on selected machine type
                if (model.selectedMachineSerial != "")
                {
                    model.FuelConsumptionPerMachine = model.FuelConsumptionPerMachine.Where(i => i.serialNumber == model.selectedMachineSerial).ToList();
                }
            });

            PerMachineData.Start();
            PerMachineData.Wait();

            // *** Machines not in Use ***
            if (ActiveCustomer.showOverviewMachinesNotInUse)
            {
                try
                {
                    var user         = (await new ROLWeb.Models.UserStore().FindByIdAsync(User.Identity.GetUserId()));
                    int daysNotInUse = user.MachinesNotInUseDays;
                    model.MachinesNotInUseHours = daysNotInUse * 24;

                    //Dashboard V1.0 Definition
                    if (ActiveCustomer.overviewVersion == null || ActiveCustomer.overviewVersion == "1")
                    {
                        var customers        = orders.Select(x => x.CustAccount).Distinct();
                        int machinesNotInUse = 0;
                        foreach (string customer in customers)
                        {
                            var machines       = db.GetMachinesNotInUse(this.ActiveCustomer.DatabaseName, this.ActiveCustomer, daysNotInUse.ToString());
                            var ordersMachines = orders.Join(machines, x => new { x.CustAccount, x.SalesId, x.ObjectId }, y => new { CustAccount = customer, y.SalesId, y.ObjectId }, (ord, mac) => ord);
                            machinesNotInUse += ordersMachines.Count();
                        }
                        model.MachinesNotInUse = machinesNotInUse;
                    }

                    //Dashboard V2.0 Definition
                    if (ActiveCustomer.overviewVersion == "2")
                    {
                        //Get required data
                        model.MachinesNotInUse = 0;
                        model.OnSiteMachines   = db.GetDWHMachineOnSite(ActiveCustomer);

                        if (!string.IsNullOrWhiteSpace(model.contactPersonIdSelected))
                        {
                            onSiteMachineOrders = onSiteMachineOrders.Where(i => i.ContactPersonId == model.contactPersonIdSelected);
                        }

                        //Remove OnSiteMachines with no LastActive date
                        model.OnSiteMachines = model.OnSiteMachines.Where(i => i.lastActiveDate.HasValue && i.lastActiveDate != Convert.ToDateTime("1900-01-01")).ToList();

                        IEnumerable <TrackUnitData> units = await rentals_db.GetTrackUnitData();

                        //Filter out machines past the users active hours selection
                        //units = units.Where(i => i.GpsFixTime > DateTime.Now.AddHours(-model.TrackUnitHours));

                        //Remove machines which dont have matching order details
                        List <string> onSiteMachineOrderSerialNumbers = onSiteMachineOrders.Select(i => i.ObjectId).ToList();
                        model.OnSiteMachines = model.OnSiteMachines.Where(i => onSiteMachineOrderSerialNumbers.Contains(i.serialNumber)).ToList();

                        //Remove machines which dont have track unit data

                        List <string> trackUnitSerialNumbers = units.Select(i => i.ReferenceNumber).ToList();
                        model.OnSiteMachines = model.OnSiteMachines.Where(x => trackUnitSerialNumbers.Contains(x.serialNumber)).ToList();

                        //Filter out non venue machines
                        if (!string.IsNullOrWhiteSpace(model.venueCodeSelected))
                        {
                            model.OnSiteMachines = model.OnSiteMachines.Where(i => i.rorvenuecode == model.venueCodeSelected).ToList();
                        }

                        //Filter out non project machines
                        if (projectVenueCodes.Count() > 0)
                        {
                            model.OnSiteMachines = model.OnSiteMachines.Where(i => projectVenueCodes.Contains(i.rorvenuecode)).ToList();
                        }

                        //Count Machines in use

                        foreach (var machine in model.OnSiteMachines)
                        {
                            if (Convert.ToDateTime(machine.lastActiveDate) < DateTime.Now.AddHours(-model.TrackUnitHours) || Convert.ToDateTime(machine.lastActiveDate).Date == DateTime.Now.AddDays(1).Date)
                            {
                                model.MachinesNotInUse++;
                            }
                        }

                        //Apply Track Unit Data
                        model.OnSiteMachines.ForEach(i => i.Process(onSiteMachineOrders.First(x => x.ObjectId == i.serialNumber)));
                        model.OnSiteMachines = model.ProcessOnSiteMachines(model.OnSiteMachines, units);
                        model.MachinesInUse  = model.OnSiteMachines.Count() - model.MachinesNotInUse;
                        if (model.OnSiteMachines == null)
                        {
                            model.OnSiteMachines = new List <OnSiteMachine>();
                        }
                    }
                }
                catch (Exception e)
                {
                    model.OnSiteMachines = new List <OnSiteMachine>();
                    model.MachinesInUse  = 0;
                }
            }
            else
            {
                model.OnSiteMachines = new List <OnSiteMachine>();
            }

            // *** Energy Consumption and CO2 emissions ***
            var consumptionTotals = new List <FuelConsumptionAndEmission>();

            if (ActiveCustomer.showOverviewEnergyConsumption || ActiveCustomer.showOverviewCO2Emissions)
            {
                var machines_GroupedByFuelType = model.FuelConsumptionPerMachine.GroupBy(i => i.fueltype);
                foreach (var machineGroup in machines_GroupedByFuelType)
                {
                    if (!string.IsNullOrWhiteSpace(machineGroup.First().fueltype))
                    {
                        consumptionTotals.Add(new FuelConsumptionAndEmission()
                        {
                            fueltype             = machineGroup.First().fueltype,
                            machineconsumption   = machineGroup.Sum(i => i.machineconsumption),
                            custaccount          = ActiveCustomer.CustomerId,
                            machineEmission      = machineGroup.Sum(i => i.machineEmission),
                            machineFuelCost      = machineGroup.Sum(i => i.machineFuelCost),
                            machinerunningHourM1 = machineGroup.Sum(i => i.machinerunningHourM1),
                            unit = machineGroup.First().unit
                        });
                    }
                }
            }
            model.ConsumptionTotals = consumptionTotals;
            GetCustKPIs.Wait();
            if (ActiveCustomer.overviewVersion == null)
            {
                return(PartialView("_Overview_1", model));
            }
            else
            {
                return(PartialView("_Overview_" + ActiveCustomer.overviewVersion, model));
            }
        }