public IActionResult Deliver()
        {
            int                 orderid             = int.Parse(Request.Form["orderid"]);
            Order               order               = ordersManager.GetOrderById(orderid);
            OrdersStatus        orderStatus         = ordersStatusManager.GetOrdersStatusByStatus(OrdersStatusManager.COMMANDE_LIVREE);
            OrdersStatusHistory ordersStatusHistory = new OrdersStatusHistory {
                order = order, created_at = new DateTime(), ordersStatus = orderStatus
            };

            ordersStatusHistoryManager.AddOrdersStatusHistory(ordersStatusHistory);
            HttpContext.Session.SetInt32("deliveredOrder", 1);
            return(RedirectToAction("MyDeliveries", "Orders"));
        }
        public IActionResult Cancel()
        {
            string nom     = Request.Form["nom"];
            string prenom  = Request.Form["prenom"];
            int    orderid = int.Parse(Request.Form["orderid"]);
            Order  order   = ordersManager.GetOrderById(orderid);

            // on compare le nom et le prénom de la commande avec ceux saisis
            if (order.customer.full_name.ToLower() == (prenom + " " + nom).ToLower())
            {
                OrdersStatus        orderStatus         = ordersStatusManager.GetOrdersStatusByStatus(OrdersStatusManager.COMMANDE_ANNULEE);
                OrdersStatusHistory ordersStatusHistory = new OrdersStatusHistory {
                    order = order, created_at = new DateTime(), ordersStatus = orderStatus
                };
                ordersStatusHistoryManager.AddOrdersStatusHistory(ordersStatusHistory);
                HttpContext.Session.SetInt32("deletedOrder", 1);
                return(RedirectToAction("MyOrders", "Orders"));
            }
            else
            {
                HttpContext.Session.SetInt32("wrongInfos", 1);
                return(RedirectToAction("Cancel", "Orders"));
            }
        }
Example #3
0
 public OrdersStatusHistory AddOrdersStatusHistory(OrdersStatusHistory ordersStatusHistory)
 {
     return(OrdersStatusHistoryDB.AddOrdersStatusHistory(ordersStatusHistory));
 }
        public IActionResult Confirm()
        {
            int orderid = (int)HttpContext.Session.GetInt32("orderid").GetValueOrDefault();
            int hours   = int.Parse(Request.Form["livraisonHeures"]);
            int minutes = int.Parse(Request.Form["livraisonMinutes"]);

            //System.Diagnostics.Debug.WriteLine("---------------> hours = " + hours);
            //System.Diagnostics.Debug.WriteLine("---------------> minutes = " + minutes);
            DateTime deliveryTime = new DateTime(
                DateTime.Now.Year,
                DateTime.Now.Month,
                DateTime.Now.Day,
                hours,
                minutes,
                0,
                0,
                DateTime.Now.Kind);

            Order order = ordersManager.GetOrderById(orderid);

            // On doit retrouver le restaurant de la commande pour savoir la ville où
            // chercher un livreur
            List <OrderDish> orderDishes = orderDishesManager.GetOrderDishByOrderId(order.id);
            int cityId = orderDishes[0].dish.restaurant.city.id;
            //System.Diagnostics.Debug.WriteLine("---------------> cityid = " + cityId);
            // On doit trouver un livreur dispo pour cette commande
            // critères : 1. la ville (le livreur doit être dans la même)
            //            2. la date de livraison souhaitée (le livreur ne doit pas avoir
            //                plus de 5 commandes à livrer dans les 30mn
            int count = 0;
            List <Deliverer> deliverers     = deliverersManager.GetDeliverersForCity(cityId);
            bool             canOrder       = false;
            Deliverer        finalDeliverer = new Deliverer();

            if (deliverers.Count > 0) // si 0, c'est qu'on a pas pu trouver de livreur
            {
                foreach (var deliverer in deliverers)
                {
                    List <Order> orders = ordersManager.GetOrdersForDelivererInTimespan(deliverer.id, deliveryTime);

                    if (orders.Count > 0)
                    {
                        foreach (var o in orders)
                        {
                            OrdersStatusHistory ordersStatusHistory = ordersStatusHistoryManager.GetCurrentOrderStatusHistoryForOrder(o.id);
                            if (ordersStatusHistory.ordersStatus.status == OrdersStatusManager.COMMANDE_RECUE ||
                                ordersStatusHistory.ordersStatus.status == OrdersStatusManager.COMMANDE_PREPA ||
                                ordersStatusHistory.ordersStatus.status == OrdersStatusManager.COMMANDE_LIVRAISON)
                            {
                                count++;
                            }
                        }

                        // One courier cannot have more than 5 orders to deliver every 30 minutes
                        if (count > MAX_ORDER_PER_DELIVERER)
                        {
                            HttpContext.Session.SetString("orderError", "Tout les livreurs sont occupés !");
                            canOrder = false;
                        }
                        else
                        {
                            HttpContext.Session.SetString("orderError", "");
                            finalDeliverer = deliverer;
                            canOrder       = true;
                        }
                    }
                    else
                    {
                        HttpContext.Session.SetString("orderError", "");
                        finalDeliverer = deliverer;
                        canOrder       = true;
                    }
                }
            }
            else
            {
                //System.Diagnostics.Debug.WriteLine("---------------> counta = " + count);
                HttpContext.Session.SetString("orderError", "Pas de livreurs pour cette ville !");
                canOrder = false;
            }

            if (canOrder)
            {
                System.Diagnostics.Debug.WriteLine("---------------> deliverer name = " + finalDeliverer.full_name);
                System.Diagnostics.Debug.WriteLine("---------------> deliveryTime = " + deliveryTime.ToString());
                order.deliverer = finalDeliverer;
                order.delivery_time_requested = deliveryTime;
                ordersManager.UpdateOrder(order);
                OrdersStatus        orderStatus         = ordersStatusManager.GetOrdersStatusByStatus(OrdersStatusManager.COMMANDE_RECUE);
                OrdersStatusHistory ordersStatusHistory = new OrdersStatusHistory {
                    order = order, created_at = new DateTime(), ordersStatus = orderStatus
                };
                ordersStatusHistoryManager.AddOrdersStatusHistory(ordersStatusHistory);

                // On considère que la commande est directement en cours de livraison, on fait progresser les statuts
                // commande reçue -> en cours de prépa
                orderStatus         = ordersStatusManager.GetOrdersStatusByStatus(OrdersStatusManager.COMMANDE_PREPA);
                ordersStatusHistory = new OrdersStatusHistory {
                    order = order, created_at = new DateTime(), ordersStatus = orderStatus
                };
                ordersStatusHistoryManager.AddOrdersStatusHistory(ordersStatusHistory);
                // en cours de prépa -> en cours de livraison
                orderStatus         = ordersStatusManager.GetOrdersStatusByStatus(OrdersStatusManager.COMMANDE_LIVRAISON);
                ordersStatusHistory = new OrdersStatusHistory {
                    order = order, created_at = new DateTime(), ordersStatus = orderStatus
                };
                ordersStatusHistoryManager.AddOrdersStatusHistory(ordersStatusHistory);

                HttpContext.Session.Remove("orderid");
                HttpContext.Session.Remove("cityid");

                return(RedirectToAction("MyOrders", "Orders"));
            }
            else
            {
                return(RedirectToAction("DisplayCart", "Orders"));
            }
        }
Example #5
0
        public void SimuScenario()
        {
            Console.WriteLine("--------------------------------------------------------");
            Console.WriteLine("Simulating scenario");
            Console.WriteLine("--------------------------------------------------------");
            string User = "******";
            string Pwd  = "Pass1234";

            // Connexion
            Console.WriteLine($"Authenticating user {User} with password {Pwd}.");
            Customer c = customersManager.CheckAuthentication(User, Pwd);

            if (c != null)
            {
                Console.WriteLine($"Successfully authenticated user {c.username}.");
                Console.WriteLine("Listing avalaible restaurants.");
                // Listing des restaurants disponibles
                Restaurant selectedRestaurant = new Restaurant();
                foreach (Restaurant r in restaurantsManager.GetAllRestaurants())
                {
                    Console.WriteLine("\t" + r.merchant_name);
                    // On sélectionne arbitrairement un restaurant pour ce scénario
                    if (r.merchant_name == "Fish from Valais")
                    {
                        selectedRestaurant = r;
                    }
                }
                Console.WriteLine("User selects \"Fish from Valais\".");
                Console.WriteLine("Listing avalaible dishes for selected restaurant.");

                // Listing des plats du restaurant choisi
                Dish selectedDish = new Dish();
                foreach (Dish d in dishesManager.GetAllDishesForRestaurant(selectedRestaurant.id))
                {
                    Console.WriteLine("\t" + d.name + " - " + d.price);
                    if (d.name == "Cheeseburger")
                    {
                        selectedDish = d;
                    }
                }

                // Création d'une nouvelle commande "vide"
                Console.WriteLine("Creating a new order");
                Order order = new Order();
                order.customer  = c;
                order.deliverer = deliverersManager.GetDelivererById(2);
                order.delivery_time_requested = DateTime.Now.AddHours(4);
                order = ordersManager.AddOrder(order);
                Console.WriteLine($"Created order id {order.id}");

                // On ajoute les plats voulus à la commande
                Console.WriteLine("Adding dishes to the order");
                OrderDish orderDish = new OrderDish();
                orderDish.order    = order;
                orderDish.dish     = selectedDish;
                orderDish.quantity = 2;
                orderDish          = orderDishesManager.AddOrderDish(orderDish);
                Console.WriteLine($"Added {orderDish.quantity} {orderDish.dish.name} to the order");

                int total = 0;
                foreach (var od in orderDishesManager.GetOrderDishByOrderId(orderDish.order.id))
                {
                    total += od.dish.price * od.quantity;
                }
                Console.WriteLine($"Total amount : {total}");

                Console.WriteLine("Adding history info for the order");
                OrdersStatusHistory ordersStatusHistory = new OrdersStatusHistory();
                ordersStatusHistory.order        = orderDish.order;
                ordersStatusHistory.created_at   = DateTime.Now; // TODO à voir si on peut le mettre par défaut au lieu de le rajouter
                ordersStatusHistory.ordersStatus = ordersStatusManager.GetOrdersStatusById(1);
                ordersStatusHistory = ordersStatusHistoryManager.AddOrdersStatusHistory(ordersStatusHistory);
                Console.WriteLine("Current order status : " + ordersStatusHistoryManager.GetCurrentOrderStatusHistoryForOrder(order.id).ordersStatus.status);
            }
            else
            {
                Console.WriteLine($"Could not authenticate user {User}.");
            }

            Console.WriteLine("--------------------------------------------------------");
            Console.WriteLine("End of simulation");
            Console.WriteLine("--------------------------------------------------------");
        }