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"));
        }
Пример #2
0
        public List <OrdersStatus> GetAllOrdersStatus()
        {
            List <OrdersStatus> results = null;

            try
            {
                using (SqlConnection cn = new SqlConnection(connectionString))
                {
                    string     query = "Select * from orders_status";
                    SqlCommand cmd   = new SqlCommand(query, cn);

                    cn.Open();

                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            if (results == null)
                            {
                                results = new List <OrdersStatus>();
                            }

                            OrdersStatus member = new OrdersStatus();

                            member.id     = (int)dr["id"];
                            member.status = (string)dr["status"];

                            results.Add(member);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            return(results);
        }
Пример #3
0
        public OrdersStatus GetOrdersStatusByStatus(string status)
        {
            OrdersStatus ordersStatus = new OrdersStatus();

            switch (status)
            {
            case COMMANDE_RECUE:
            case COMMANDE_PREPA:
            case COMMANDE_LIVRAISON:
            case COMMANDE_LIVREE:
            case COMMANDE_ANNULEE:
                List <OrdersStatus> AllOrdersStatus = GetAllOrdersStatus();
                foreach (var item in AllOrdersStatus)
                {
                    if (item.status == status)
                    {
                        ordersStatus = item;
                    }
                }
                break;
            }
            return(ordersStatus);
        }
        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"));
            }
        }
Пример #5
0
        public OrdersStatus GetOrdersStatusById(int id)
        {
            OrdersStatus result = null;

            try
            {
                using (SqlConnection cn = new SqlConnection(connectionString))
                {
                    string     query = "Select * from orders_status where id=@id";
                    SqlCommand cmd   = new SqlCommand(query, cn);
                    cmd.Parameters.AddWithValue("@id", id);

                    cn.Open();

                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        if (dr.Read())
                        {
                            if (result == null)
                            {
                                result = new OrdersStatus();
                            }

                            result.id     = (int)dr["id"];
                            result.status = (string)dr["status"];
                        }
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            return(result);
        }
        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"));
            }
        }
Пример #7
0
 public OrderWorkflow() : base()
 {
     OrdersStatus.Add(new PurchaseOrderRequest());
     OrdersStatus.Add(new PurchaseOrderStatus());
     OrdersStatus.Add(new PurchaseRequestStatus());
 }