예제 #1
0
        /// <summary>
        /// This method determines which basket to give the order to.
        ///
        /// Test Case:  Req-8, Req-9, Req-11
        /// </summary>
        /// <param name="delivery_location">Object containing the delivery location</param>
        /// <param name="order_id">The related order id</param>
        /// <returns>KeyValuePair: basket_id, distance to customer</returns>
        private KeyValuePair <int, int> FindAvailableBasket(LocationCoordinates delivery_location, int order_id)
        {
            int basket_id    = 0;
            int min_distance = 9999;
            // KeyValuePair - Key = bsaket_id; Value = location_cell_id
            var basketList  = new List <KeyValuePair <int, int> >();
            var basket      = new BasketDAL();
            var locationDAL = new LocationDAL();

            basketList = basket.BasketHasStock(order_id);

            // get basket that is closest to delivery location
            foreach (KeyValuePair <int, int> kvp in basketList)
            {
                var basket_location = locationDAL.GetLocationCell(kvp.Value);
                int basket_distance = locationDAL.CalculateDistanceToCustomer(delivery_location.x, delivery_location.y, basket_location.x_coord, basket_location.y_coord);
                if (basket_distance < min_distance)
                {
                    min_distance = basket_distance;
                    basket_id    = kvp.Key;
                }
            }
            return(new KeyValuePair <int, int>(basket_id, min_distance));
        }
예제 #2
0
        /// <summary>
        /// This method returns the list of orders for the basket that have not yet been delivered
        ///
        /// Test Case:   Req-9
        /// </summary>
        /// <param name="basket_id">The basket id requesting list</param>
        /// <returns>List of undelivered CustOrder(s)</returns>
        public List <CustOrder> GetUndeliveredBasketOrders(int basket_id)
        {
            List <CustOrder> orderList = new List <CustOrder>();
            var locDAL = new LocationDAL();

            using (SqlConnection conn = new SqlConnection(defaultConnection))
            {
                string query = "select co.order_id, co.customer_id, co.location_id, l.bay, l.row_no, l.seat_no, co.total_price, co.basket_id, " +
                               "co.expected_delivery_time, co.actual_delivery_time, co.submit_ts, co.vendor_accepted_ts, " +
                               "co.delivered_ts, co.order_notes, co.feedback_stars, co.feedback_notes, co.vendor_notes " +
                               "from cust_order co inner join  Location l on co.location_id	= l.location_id " +
                               "where co.basket_id = @basket_id and co.delivered_ts is null";

                using (SqlCommand myCmd = new SqlCommand(query, conn))
                {
                    SqlDataReader dr = null;
                    conn.Open();
                    myCmd.Parameters.AddWithValue("@basket_id", basket_id);
                    dr = myCmd.ExecuteReader();

                    while (dr.Read())
                    {
                        CustOrder cust_order = new CustOrder();

                        if (util.IsNumeric(dr["order_id"].ToString().Trim()))
                        {
                            cust_order.order_id = int.Parse(dr["order_id"].ToString().Trim());
                        }
                        if (util.IsNumeric(dr["customer_id"].ToString().Trim()))
                        {
                            cust_order.customer_id = int.Parse(dr["customer_id"].ToString().Trim());
                            cust_order.customer    = GetCustomerName(int.Parse(dr["customer_id"].ToString().Trim()));
                        }
                        if (util.IsNumeric(dr["location_id"].ToString().Trim()))
                        {
                            cust_order.location_id = int.Parse(dr["location_id"].ToString().Trim());
                        }
                        cust_order.bay     = dr["bay"].ToString().Trim();
                        cust_order.row_no  = dr["row_no"].ToString().Trim();
                        cust_order.seat_no = dr["seat_no"].ToString().Trim();
                        if (util.IsNumeric(dr["total_price"].ToString().Trim()))
                        {
                            cust_order.total_price = decimal.Parse(dr["total_price"].ToString().Trim());
                        }
                        if (util.IsNumeric(dr["basket_id"].ToString().Trim()))
                        {
                            cust_order.basket_id = int.Parse(dr["basket_id"].ToString().Trim());
                        }
                        if (util.IsNumeric(dr["expected_delivery_time"].ToString().Trim()))
                        {
                            cust_order.expected_delivery_time = int.Parse(dr["expected_delivery_time"].ToString().Trim());
                        }
                        if (util.IsNumeric(dr["actual_delivery_time"].ToString().Trim()))
                        {
                            cust_order.actual_delivery_time = int.Parse(dr["actual_delivery_time"].ToString().Trim());
                        }
                        if (util.IsDate(dr["submit_ts"].ToString().Trim()))
                        {
                            cust_order.submit_ts = DateTime.Parse(dr["submit_ts"].ToString().Trim());
                        }
                        if (util.IsDate(dr["vendor_accepted_ts"].ToString().Trim()))
                        {
                            cust_order.vendor_accepted_ts = DateTime.Parse(dr["vendor_accepted_ts"].ToString().Trim());
                        }
                        if (util.IsDate(dr["delivered_ts"].ToString().Trim()))
                        {
                            cust_order.delivered_ts = DateTime.Parse(dr["delivered_ts"].ToString().Trim());
                        }
                        if (util.IsNumeric(dr["feedback_stars"].ToString().Trim()))
                        {
                            cust_order.feedback_stars = int.Parse(dr["feedback_stars"].ToString().Trim());
                        }
                        cust_order.order_notes    = dr["order_notes"].ToString().Trim();
                        cust_order.feedback_notes = dr["feedback_notes"].ToString().Trim();
                        cust_order.vendor_notes   = dr["vendor_notes"].ToString().Trim();

                        cust_order.order_items = GetOrderItems(cust_order.order_id);

                        orderList.Add(cust_order);
                    }
                    return(orderList);
                }
            }
        }