public JObject PutDelivringComplete([FromBody] OrderFullInfo ofi)
        {
            FastFoodEntities db     = new FastFoodEntities();
            JObject          jRes   = new JObject();
            TORDER           torder = db.TORDERs.FirstOrDefault(o => o.id_order == ofi.id_order);

            if (torder.order_code == ofi.order_code)
            {
                torder.order_state       = OrderStates.order_has_been_delivered;
                torder.delivery_state    = 100;
                torder.received_datetime = DateTime.Now;

                db.SaveChanges();

                jRes.Add(new JProperty("Error", false));
                jRes.Add(new JProperty("MessageTitele", "Success"));
                jRes.Add(new JProperty("Message", "The delivery was successful."));
            }
            else
            {
                jRes.Add(new JProperty("Error", true));
                jRes.Add(new JProperty("MessageTitele", "Failed"));
                jRes.Add(new JProperty("Message", "The order code is incorrect (You will get the order code from the clients when you give them the orders)."));
            }

            return(jRes);
        }
        public bool DeleteOrder(int id_order)
        {
            // khassni nzidt JWT checking bach ghir mol l'order howa lli i9der imse7ha

            FastFoodEntities db = new FastFoodEntities();

            TORDER torder = db.TORDERs.FirstOrDefault(o => o.id_order == id_order && o.order_state == OrderStates.choosing_food);

            if (torder != null)
            {
                //bach n7yed lmochkil d Delete cascade

                List <ORDER_CONTENT> listOC = db.ORDER_CONTENT.Where(oc => oc.id_order == id_order).ToList();
                listOC.ForEach(oc => db.ORDER_CONTENT.Remove(oc));
                db.SaveChanges();

                List <GEOLOCATION> listGeo = db.GEOLOCATIONs.Where(oc => oc.id_order == id_order).ToList();
                listGeo.ForEach(g => db.GEOLOCATIONs.Remove(g));
                db.SaveChanges();

                db.TORDERs.Remove(torder);
                db.SaveChanges();
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public JObject PutDeliveryManCancelDeliverinAnOrder([FromBody] OrderFullInfo ofi)
        {
            JObject jRes = new JObject();

            try
            {
                FastFoodEntities db = new FastFoodEntities();

                TORDER torder = db.TORDERs.FirstOrDefault(o => o.id_order == ofi.id_order);
                if (torder != null)
                {
                    torder.id_delivery_man = null;
                    torder.order_state     = OrderStates.order_to_deliver;
                    db.SaveChanges();

                    jRes.Add(new JProperty("Error", false));
                    jRes.Add(new JProperty("MessageTitele", "Canceled"));
                    jRes.Add(new JProperty("Message", "Canceled."));
                }
                else
                {
                    jRes.Add(new JProperty("Error", true));
                    jRes.Add(new JProperty("MessageTitele", "Failed"));
                    jRes.Add(new JProperty("Message", "Failed, try again."));
                }
            }
            catch (Exception e)
            {
                jRes.Add(new JProperty("Error", true));
                jRes.Add(new JProperty("MessageTitele", "Failed"));
                jRes.Add(new JProperty("Message", "Failed, try again."));
            }

            return(jRes);
        }
        public OrderFullInfo NewOrder([FromBody] Client c)
        {
            // khassni nzidt JWT checking

            FastFoodEntities db = new FastFoodEntities();

            TORDER torder = new TORDER();

            torder.order_state = OrderStates.choosing_food;
            torder.id_client   = c.id_client;

            db.TORDERs.Add(torder);
            db.SaveChanges();

            OrderFullInfo order = new OrderFullInfo();

            order.id_order          = torder.id_order;
            order.order_state       = torder.order_state;
            order.latitude          = torder.latitude;
            order.longitude         = torder.longitude;
            order.order_datetime    = torder.order_datetime;
            order.order_code        = torder.order_code;
            order.delivery_state    = torder.delivery_state;
            order.received_datetime = torder.received_datetime;
            order.id_delivery_man   = torder.id_delivery_man;
            order.id_client         = torder.id_client;

            order.delivery_man = new Delivery_man();
            order.client       = ClientDAO.GetClient(torder.id_client);

            return(order);
        }
        public OrderFullInfo GetClientOrderFullInfoById(int id_order)
        {
            FastFoodEntities db = new FastFoodEntities();

            // khasni n nsift JWT o n checkeh

            TORDER torder = db.TORDERs.FirstOrDefault(o => o.id_order == id_order);


            OrderFullInfo orderFullInfo = new OrderFullInfo();

            if (torder != null)
            {
                orderFullInfo.id_order          = torder.id_order;
                orderFullInfo.order_state       = torder.order_state;
                orderFullInfo.latitude          = torder.latitude;
                orderFullInfo.longitude         = torder.longitude;
                orderFullInfo.order_datetime    = torder.order_datetime;
                orderFullInfo.order_code        = torder.order_code;
                orderFullInfo.delivery_state    = torder.delivery_state;
                orderFullInfo.received_datetime = torder.received_datetime;
                orderFullInfo.id_delivery_man   = torder.id_delivery_man;
                orderFullInfo.id_client         = torder.id_client;
                orderFullInfo.client            = new Client()
                {
                    id_client         = torder.CLIENT.id_client,
                    firstname         = torder.CLIENT.firstname,
                    lastname          = torder.CLIENT.lastname,
                    gender            = torder.CLIENT.gender,
                    email             = torder.CLIENT.email,
                    password          = "",
                    phone             = torder.CLIENT.phone,
                    photo             = torder.CLIENT.photo,
                    confirmation_code = torder.CLIENT.confirmation_code
                };
            }


            if (orderFullInfo.id_delivery_man != null)
            {
                orderFullInfo.delivery_man = DeliveryManDAO.GetDeliveryMan((int)orderFullInfo.id_delivery_man);
            }

            List <Geolocation> geolocations = GeolocationDAO.GetOrderGeolocations(orderFullInfo.id_order);

            if (geolocations != null)
            {
                orderFullInfo.geolocations = geolocations;
            }

            List <Order_content> orderContents = OrderContentDAO.GetOrderContents(orderFullInfo.id_order);

            if (orderContents != null)
            {
                orderFullInfo.order_contents = orderContents;
            }

            return(orderFullInfo);
        }
        public TOrder GetOrderById(int id_order)
        {
            FastFoodEntities db = new FastFoodEntities();

            // khasni n nsift JWT o n checkeh

            TORDER torder = db.TORDERs.FirstOrDefault(o => o.id_order == id_order);

            TOrder order = new TOrder();

            order.id_order          = torder.id_order;
            order.order_state       = torder.order_state;
            order.latitude          = torder.latitude;
            order.longitude         = torder.longitude;
            order.order_datetime    = torder.order_datetime;
            order.order_code        = torder.order_code;
            order.delivery_state    = torder.delivery_state;
            order.received_datetime = torder.received_datetime;
            order.id_delivery_man   = torder.id_delivery_man;
            order.id_client         = torder.id_client;

            return(order);
        }
        public JObject PutDeliveryManWillDeliverAnOrder([FromBody] OrderFullInfo ofi)
        {
            JObject jRes = new JObject();

            try
            {
                FastFoodEntities db = new FastFoodEntities();

                TORDER torder = db.TORDERs.FirstOrDefault(o => o.id_delivery_man == ofi.id_delivery_man && o.order_state == OrderStates.order_on_the_way);
                if (torder != null)
                {
                    jRes.Add(new JProperty("Error", true));
                    jRes.Add(new JProperty("MessageTitele", "Failed"));
                    jRes.Add(new JProperty("Message", "You have already an order to deliver it first."));
                }
                else
                {
                    torder = db.TORDERs.FirstOrDefault(o => o.id_order == ofi.id_order);

                    torder.id_delivery_man = ofi.id_delivery_man;
                    torder.order_state     = OrderStates.order_on_the_way;
                    db.SaveChanges();

                    jRes.Add(new JProperty("Error", false));
                    jRes.Add(new JProperty("MessageTitele", "Success"));
                    jRes.Add(new JProperty("Message", "Go deliver it."));
                }
            }
            catch (Exception e)
            {
                jRes.Add(new JProperty("Error", true));
                jRes.Add(new JProperty("MessageTitele", "Failed"));
                jRes.Add(new JProperty("Message", "Failed, try again."));
            }

            return(jRes);
        }
        public JObject ConfirmOrder([FromBody] OrderFullInfo ofi)
        {
            // khasni n nsift JWT o n checkeh

            JObject jRes = new JObject();

            try
            {
                FastFoodEntities db = new FastFoodEntities();

                TORDER torder = db.TORDERs.FirstOrDefault(o => o.id_order == ofi.id_order);

                if (torder != null)
                {
                    torder.latitude       = ofi.latitude;
                    torder.longitude      = ofi.longitude;
                    torder.order_state    = OrderStates.order_to_deliver;
                    torder.order_code     = MyHelper.GenerateRandomNumber(111111, 999999).ToString();
                    torder.order_datetime = DateTime.Now;

                    db.SaveChanges();

                    jRes.Add(new JProperty("message", true));
                }
                else
                {
                    jRes.Add(new JProperty("message", false));
                }
            }
            catch (Exception e)
            {
                jRes.Add(new JProperty("message", false));
            }

            return(jRes);
        }