//商品加到购物车
        protected void ImageButtonBuy_Click(object sender, ImageClickEventArgs e)
        {
            string str = ((DropDownList)DetailsView1.Rows[5].Cells[1].FindControl("DropDownList1")).SelectedItem.Text;//取出dish名字
            int quota = Convert.ToInt32(str); //数量,类型转下
            DishQuota dishQuota = new DishQuota(Guid.NewGuid(), dish.name, dish.price, quota, "");
            delivery.AddDish(dishQuota);//把new的dish放到session里 的delivery ,相当于加入购物车了
            Session["Delivery"] = delivery; //delivery  放到session

            Response.Write("<Script>alert('Dish is added to your shopping cart')</script>");//提示用户,加入成功
        }
        //把点的菜 记录下来到对应的table的reservation,传的是table name ,dish是记录到reservation的
        //然后跳转会manager主页
        protected void ButtonSubmit_Click(object sender, EventArgs e)
        {
            foreach (GridViewRow r in GridView1.Rows)
            {
                string quotaStr = ((DropDownList)(r.Cells[5].FindControl("DropDownList1"))).SelectedItem.Text.ToString();
                if (quotaStr == "0")
                { }
                else
                {
                    string dishName = r.Cells[0].Text;
                    double price = Convert.ToDouble(r.Cells[2].Text.Substring(1));
                    int quota = Convert.ToInt32(quotaStr);

                    DishQuota dishQuota = new DishQuota(Guid.NewGuid(), dishName, price, quota, "");
                    manager.AddDish(tableName, dishQuota);
                }
            }
            Response.Redirect(ConfigurationManager.AppSettings["ManagerMain"]);
        }
        protected void ButtonSubmit_Click(object sender, EventArgs e)
        {
            List<DishQuota> dishQuotaList = new List<DishQuota>();

            foreach (GridViewRow r in GridView1.Rows)
            {
                //这个相当于购物车的内容了,这里还可以添加,删除东西
                string quotaStr = ((DropDownList)(r.Cells[5].FindControl("DropDownList1"))).SelectedItem.Text.ToString(); //吧数量取出来
                if (quotaStr == "0")
                { } //不用处理
                else
                {
                    string dishName = r.Cells[0].Text; //名字取出来
                    double price = Convert.ToDouble(r.Cells[2].Text.Substring(1));//价格
                    int quota = Convert.ToInt32(quotaStr);//数量的数据类型转换下

                    DishQuota dishQuota = new DishQuota(Guid.NewGuid(), dishName, price, quota, "");//实例化一个dish
                    dishQuotaList.Add(dishQuota);//放到list
                }
            }

            if (dishQuotaList.Count != 0)//list 有东西
            {
                if (Session["Delivery"] != null)  //delivery 在session已经有
                {
                    ((Delivery)Session["Delivery"]).dishQuotaList = dishQuotaList; //设置session里的delivery的list为刚刚设置的list
                }
                else
                {
                    Delivery delivery = new Delivery(); //new 一个delivery
                    delivery.dishQuotaList = dishQuotaList;

                    Session["Delivery"] = delivery;  //把new的放到sesion
                }
                Response.Redirect(ConfigurationManager.AppSettings["NewDelivery"]); //转到填写用户信息的页面
            }
            else
            {
                Response.Write("<Script>alert('no dishes is selected!')</script>"); //list空的,错误提示

            }
        }
        public static List<Delivery> GetAllHistoryDelivery()
        {
            List<Delivery> deliveryList = new List<Delivery>();
            DataContextDataContext dc = new DataContextDataContext();

            ISingleResult<select_all_history_deliveryResult> rs = dc.select_all_history_delivery();
            foreach (select_all_history_deliveryResult r in rs)
            {
                List<DishQuota> dishQuotaLish = new List<DishQuota>();

                ISingleResult<get_dishquota_by_deliveryResult> rs2 = dc.get_dishquota_by_delivery(r.id);
                foreach (get_dishquota_by_deliveryResult r2 in rs2)
                {
                    double price = 0;
                    ISingleResult<get_dish_by_nameResult> rs3 = dc.get_dish_by_name(r2.dish_name);
                    foreach (get_dish_by_nameResult r3 in rs3)
                    {
                        price = (double)r3.price;
                    }

                    DishQuota dishQuota = new DishQuota(r2.id, r2.dish_name, price, (int)r2.quota, r2.note);
                    dishQuotaLish.Add(dishQuota);
                }

                Delivery delivery = new Delivery(
                    (Guid)r.id,
                    r.user_from,
                    r.customer_name,
                    r.phone,
                    r.address,
                    (DateTime)r.commit_time,
                    (DateTime)r.delivery_time,
                    (DeliveryState)r.state,
                    dishQuotaLish);

                deliveryList.Add(delivery);
            }

            return deliveryList;
        }
        public void AddDish(DishQuota pDishQuota)
        {
            dishQuotaList.Add(pDishQuota);

            DataContextDataContext dc = new DataContextDataContext();
            dc.insert_reservation_dish(pDishQuota.id, id, pDishQuota.dishName, pDishQuota.quota,pDishQuota.note);
        }
        public static List<Reservation> GetAllHistoryReservation()
        {
            List<Reservation> reservationList = new List<Reservation>();

            DataContextDataContext dc = new DataContextDataContext();
            ISingleResult<select_all_history_reservationResult> rs = dc.select_all_history_reservation();
            foreach (select_all_history_reservationResult r in rs)
            {
                List<DishQuota> dishQuotaList = new List<DishQuota>();

                ISingleResult<get_dishquota_by_reservationResult> rs2 = dc.get_dishquota_by_reservation(r.id);
                foreach (get_dishquota_by_reservationResult r2 in rs2)
                {
                    double price = 0;
                    ISingleResult<get_dish_by_nameResult> rs3 = dc.get_dish_by_name(r2.dish_name);
                    foreach (get_dish_by_nameResult r3 in rs3)
                    {
                        price = (double)r3.price;
                    }

                    DishQuota dishQuota = new DishQuota(r2.id, r2.dish_name, price, (int)r2.quato, r2.note);
                    dishQuotaList.Add(dishQuota);
                }

                Reservation reservation = new Reservation(
                    r.id,
                    r.user_from,
                    r.customer_name,
                    r.phone,
                    (DateTime)r.arrive_time,
                    r.table_name,
                    (int)r.seat,
                    (ReservationType)r.type,
                    (ReservationState)r.state,
                    dishQuotaList);
                reservationList.Add(reservation);
            }

            return reservationList;
        }
        //Function: search reservations by keyword
        //Remarks: if the keyword == null, return all the records
        public List<Reservation> SearchReservationMatch(string keyword)
        {
            List<Reservation> reservationList = new List<Reservation>();

            if (keyword == null)
            { keyword = "%"; }  //search all the records
            else
            { }
            DataContextDataContext dc = new DataContextDataContext();
            ISingleResult<search_current_reservation_by_keywordResult> rs = dc.search_current_reservation_by_keyword(keyword);
            foreach (search_current_reservation_by_keywordResult r in rs)
            {
                List<DishQuota> dishQuotaList = new List<DishQuota>();

                ISingleResult<get_dishquota_by_reservationResult> rs2 = dc.get_dishquota_by_reservation(r.id);
                foreach (get_dishquota_by_reservationResult r2 in rs2)
                {
                    double price = 0;
                    ISingleResult<get_dish_by_nameResult> rs3 = dc.get_dish_by_name(r2.dish_name);
                    foreach (get_dish_by_nameResult r3 in rs3)
                    {
                        price = (double)r3.price;
                    }

                    DishQuota tDishQuota = new DishQuota(r2.id, r2.dish_name, price, (int)r2.quato, r2.note);
                    dishQuotaList.Add(tDishQuota);
                }

                Reservation reservation = new Reservation(
                    r.id,
                    r.user_from,
                    r.customer_name,
                    r.phone,
                    (DateTime)r.arrive_time,
                    r.table_name,
                    (int)r.seat,
                    (ReservationType)r.type,
                    (ReservationState)r.state,
                    dishQuotaList);
                reservationList.Add(reservation);
            }
            return reservationList;
        }
 //$就餐的时候,在相应的reservation里面把dish加进去
 public void AddDish(string pTableName, DishQuota pDishQuota)
 {
     foreach (SysTable t in Restaurant.tableList)
     {
         if (t.name == pTableName)
         {
             t.GetReservation().AddDish(pDishQuota);
         }
         else
         {}
     }
 }
 public void AddDish(DishQuota pDishQuota)
 {
     dishQuotaList.Add(pDishQuota);
 }
        //Function: initiate all the tables with states, by querying the db
        ////从数据库把桌子信息读出来,带着当前的状态
        public static void InitAllTable()
        {
            tableList = new List<SysTable>();

            DataContextDataContext dc = new DataContextDataContext();
            ISingleResult<select_all_tableResult> rs = dc.select_all_table();
            foreach (select_all_tableResult r in rs)
            {
                Reservation reservation = null;

                ISingleResult<get_current_reservation_by_tableResult> rs2 = dc.get_current_reservation_by_table(r.name);
                foreach (get_current_reservation_by_tableResult r2 in rs2)
                {
                    List<DishQuota> dishQuotaList = new List<DishQuota>();

                    ISingleResult<get_dishquota_by_reservationResult> rs3 = dc.get_dishquota_by_reservation(r2.id);
                    foreach (get_dishquota_by_reservationResult r3 in rs3)
                    {
                        double price = 0;
                        ISingleResult<get_dish_by_nameResult> rs4 = dc.get_dish_by_name(r3.dish_name);
                        foreach (get_dish_by_nameResult r4 in rs4)
                        {
                            price = (double)r4.price;
                        }

                        DishQuota dishQuota = new DishQuota((Guid)r3.id, r3.dish_name, price, (int)r3.quato, r3.note);
                        dishQuotaList.Add(dishQuota);
                    }

                    reservation = new Reservation(
                    r2.id,
                    r2.user_from,
                    r2.customer_name,
                    r2.phone,
                    (DateTime)r2.arrive_time,
                    r2.table_name,
                    (int)r2.seat,
                    (ReservationType)r2.type,
                    (ReservationState)r2.state,
                    dishQuotaList);
                }

                //only one reservation is bound to a table in a certain time
                //  in exact this foreach loop, not outside
                SysTable table = new SysTable(
                (Guid)r.id,
                r.name,
                (int)r.seat,
                r.pict_path,
                (TableState)r.current_state
                );
                table.SetReservation(reservation);
                tableList.Add(table);
            }
        }
        public static List<Reservation> GetReservationByDurationAndUser(DateTime pBeginTime, DateTime pEndTime, string pUserFrom)
        {
            List<Reservation> reservationList = new List<Reservation>();

            DataContextDataContext dc = new DataContextDataContext();
            ISingleResult<select_reservation_by_duration_and_userResult> rs = dc.select_reservation_by_duration_and_user((DateTime?)pBeginTime, (DateTime?)pEndTime, pUserFrom);
            foreach (select_reservation_by_duration_and_userResult r in rs)
            {
                List<DishQuota> dishQuotaList = new List<DishQuota>();

                ISingleResult<get_dishquota_by_reservationResult> rs2 = dc.get_dishquota_by_reservation(r.id);
                foreach (get_dishquota_by_reservationResult r2 in rs2)
                {
                    double price = 0;
                    ISingleResult<get_dish_by_nameResult> rs3 = dc.get_dish_by_name(r2.dish_name);
                    foreach (get_dish_by_nameResult r3 in rs3)
                    {
                        price = (double)r3.price;
                    }

                    DishQuota tDishQuota = new DishQuota(r2.id, r2.dish_name, price, (int)r2.quato, r2.note);
                    dishQuotaList.Add(tDishQuota);
                }

                Reservation reservation = new Reservation(
                    r.id,
                    r.user_from,
                    r.customer_name,
                    r.phone,
                    (DateTime)r.arrive_time,
                    r.table_name,
                    (int)r.seat,
                    (ReservationType)r.type,
                    (ReservationState)r.state,
                    dishQuotaList);
                reservationList.Add(reservation);
            }
            return reservationList;
        }