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)); }
private void UppdateUi() { coboAccount.ItemsSource = null; coboAccount.ItemsSource = ActiveCustomer.GetMyList(); coboCustomer.ItemsSource = null; coboCustomer.ItemsSource = customers; }
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}"); }
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); }
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); }
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); }
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)); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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(); }
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; } }
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)); }
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)); } }