/// <summary>
 /// hàm thực hiện thêm chi tiết công thức vào database
 /// </summary>
 /// <param name="maCongThuc"></param>
 private void themChiTietVaoDatabase(int maCongThuc, qlCaPheEntities db)
 {
     try
     {
         //------lấy danh sách các chi tiết trong session
         cartCongThuc cart = (cartCongThuc)Session["congThuc"];
         //------Lặp qua từng phần tử có trong list và thêm vào database
         foreach (ctCongThuc ct in cart.getList())
         {
             ctCongThuc ctThem = new ctCongThuc();
             //----Vì mã ct và ctThem khác nhau nên cần gán lại giá trị
             ctThem.buocSo     = ct.buocSo;
             ctThem.ghiChu     = ct.ghiChu;
             ctThem.hanhDong   = ct.hanhDong;
             ctThem.maCongThuc = maCongThuc;
             if (ct.maNguyenLieu != 0) //---Kiểm tra, nếu có nguyên liệu thì thêm các thuộc tính của nguyên liệu
             {
                 ctThem.maNguyenLieu      = ct.maNguyenLieu;
                 ctThem.soLuongNguyenLieu = ct.soLuongNguyenLieu;
                 ctThem.donViSuDung       = ct.donViSuDung;
             }
             //----Thêm vào database
             db.ctCongThucs.Add(ctThem);
             db.SaveChanges();
         }
     }
     catch (Exception ex)
     {
         xulyFile.ghiLoi("Class CongThucController - Function: themChiTietVaoDatabase", ex.Message);
     }
 }
 void Session_Start(object sender, EventArgs e)
 {
     //--Tạo session object chứa chi tiết công thức pha chế
     Session["congThuc"] = new cartCongThuc();
     //--Tạo session object chứa thông tin chi tiết phiếu nhập kho
     Session["ctNhapKho"] = new cartNhapKho();
     //--Tạo session object chứa thông tin chi tiết của hóa đơn tạm
     Session["hoaDonTam"] = new cartHoaDonTam();
     //--Tạo session lưu đường dẫn và request
     Session["urlAction"] = "";
     //--Tạo session object chứa thông tin chi tiết phiếu xuất kho
     Session["ctXuatKho"] = new cartXuatKho();
     //--Tạo session object chứa thông tin nguyên liệu cần kiểm kho
     Session["truocKiemKho"] = new cartKiemKho();
     //--Tạo session object chứa thông tin nguyên liệu đã kiểm
     Session["sauKiemKho"] = new cartKiemKho();
     //--Tạo session chứa danh sách các trang được phép truy cập
     Session["quyenHan"] = new cartQuyenHan();
     //--Tạo session chứa thông tin chi tiết điều phối
     Session["dieuPhoi"] = new cartDieuPhoi();
     //--Tạo session chứa object các mục tiêu chưa đánh giá
     Session["chuaDanhGia"] = new cartMucTieu();
     //--Tạo session chứa object các mục tiêu đã đánh giá
     Session["daDanhGia"] = new cartDanhGia();
     //--Tạo session object chứa thông tin người dùng đăng nhập hệ thống
     Session["login"] = new taiKhoan();
     //--Tạo session object chứa các bàn đã đặt
     Session["datBan"] = new cartDatBan();
 }
        /// <summary>
        /// Hàm thiết kế bảng DANH SÁCH CHI TIẾT, NGUYÊN LIỆU SỬ DỤNG, TỔNG TIỀN NGUYÊN LIỆU được lấy từ Session
        /// </summary>
        /// <returns>htmlBangChiTiet|htmlBangNguyenLieuSuDung</returns>
        public string taoBangChiTietVaNguyenLieuSuDungTuSession()
        {
            cartCongThuc cart = (cartCongThuc)Session["congThuc"];
            string       kq   = "";

            kq += "<table class=\"table table-hover\">";
            kq += "     <thead>";
            kq += "         <tr>";//------Tạo tiêu đề bảng
            kq += "             <th>Bước</th><th>Hành động</th><th>Tên nguyên liệu</th><th>Số lượng</th><th>Đơn vị</th><td>Chức năng</td>";
            kq += "         </tr>";
            kq += "     </thead>";
            kq += "     <tbody>";
            try
            {
                foreach (ctCongThuc ct in cart.getList().OrderBy(c => c.buocSo))
                {
                    kq += "     <tr>";
                    kq += "         <th scope=\"row\">" + ct.buocSo.ToString() + "</th>";
                    kq += "         <td>" + xulyDuLieu.traVeKyTuGoc(ct.hanhDong) + "</td>";
                    //---------Lấy tên nguyên liệu đã chọn
                    nguyenLieu nl = ct.nguyenLieu;
                    if (nl != null)
                    {
                        kq += "     <td>" + xulyDuLieu.traVeKyTuGoc(nl.tenNguyenLieu) + "</td>";
                    }
                    else
                    {
                        kq += "     <td></td>";
                    }
                    kq += "         <td>" + ct.soLuongNguyenLieu + "</td>";
                    kq += "         <td>" + xulyDuLieu.traVeKyTuGoc(ct.donViSuDung) + "</td>";
                    kq += "         <td>";
                    kq += "             <div class=\"btn-group open\">";
                    kq += "                 <button type=\"button\" class=\"btn btn-primary dropdown-toggle\" data-toggle=\"dropdown\" aria-expanded=\"true\">Chức năng <span class=\"caret\"></span></button>";
                    kq += "                 <ul class=\"dropdown-menu\" role=\"menu\">";
                    kq += "                     <li><a class=\"col-blue waves-effect waves-block suaBuoc\" maCt=\"" + ct.maChiTiet.ToString() + "\">";
                    kq += "                             <i class=\"material-icons\">mode_edit</i>Sửa bước";
                    kq += "                         </a></li>";
                    kq += "                     <li><a class=\"col-red waves-effect waves-block xoaBuoc\" maCt=\"" + ct.maChiTiet.ToString() + "\">";
                    kq += "                             <i class=\"material-icons\">delete</i>Xoá bước";
                    kq += "                         </a></li>";
                    kq += "                 </ul>";
                    kq += "             </div>";
                    kq += "         </td>";
                    kq += "     </tr>";
                }
            }
            catch (Exception ex)
            {
                xulyFile.ghiLoi("Class CongThucController - Function: taoBangChiTietTuSession", ex.Message);
            }
            kq += "     </tbody>";
            kq += "</table>";
            //Trả vê chuỗi htmlBangDanhSachCacBuoc|bảng danh sách nguyên liệu|tongGiaNguyenLieu
            return(kq + "|" + this.taoBangNguyenLieuSuDung() + "|" + xulyDuLieu.doiVND(cart.getTotalPriceNguyenLieu()));
        }
        /// <summary>
        /// Hàm thực hiện xóa 1 bước trong Session
        /// </summary>
        /// <param name="maCt">Mã chi tiết công thức cần xóa</param>
        /// <returns>Bảng danh sách các bước còn lại trong session</returns>
        public string xoaMotBuoc(int maCt)
        {
            cartCongThuc cart = (cartCongThuc)Session["congThuc"];

            if (maCt > 0)
            {
                //-------Lấy công thức cần xóa có trong cart
                ctCongThuc ctXoa = cart.getList().SingleOrDefault(c => c.maChiTiet == maCt);
                if (ctXoa != null)
                {
                    cart.removeItem(ctXoa.maChiTiet);
                    Session["congThuc"] = cart;
                }
            }
            //-----Trả về chuỗi bao gồm htmlTablBangDanhSachBuoc|BangDanhSachNguyenLieu|TongTienNguyenLieu
            return(this.taoBangChiTietVaNguyenLieuSuDungTuSession());
        }
        /// <summary>
        /// Hàm thực hiện lấy thông tin chi tiết rồi đổ dữ liệu lên giao diện khi người dùng click vào chỉnh sửa chi tiết
        /// </summary>
        /// <param name="maCt"></param>
        /// <returns>Trả về chuỗi dữ liệu trong chi tiết theo dạng
        /// buocSo|hanhDong|ghiChu|soLuongSuDung|donViSuDung|maChiTiet|maNguyenLieuVaHinhAnh</returns>
        public string doDuLieuChiTietLenView(int maCt)
        {
            string       kq    = "";
            cartCongThuc cart  = (cartCongThuc)Session["congThuc"];
            ctCongThuc   ctSua = cart.getItem(maCt);;

            if (ctSua != null)
            {
                string imgAndID = "";
                if (ctSua.nguyenLieu != null) //-----Kiểm tra xem có nguyên liệu để gán hình và mã nguyên liệu cập nhật
                {
                    //------Tạo chuỗi hiện hình nguyên liệu nếu bước có nguyên liệu.
                    imgAndID += "<img id=\"hinhNguyenLieu\" class='img img-responsive img-thumbnail'";
                    imgAndID += "src=\"" + xulyDuLieu.chuyenByteHinhThanhSrcImage(ctSua.nguyenLieu.hinhAnh) + "\" width=\"250px\" height=\"auto\" />";
                    imgAndID += "<input id=\"maNguyenLieuDaChon\" type=\"hidden\" value=\"" + ctSua.maNguyenLieu.ToString() + "\" />";
                }
                kq += ctSua.buocSo.ToString() + "|" + xulyDuLieu.traVeKyTuGoc(ctSua.hanhDong) + "|" + xulyDuLieu.traVeKyTuGoc(ctSua.ghiChu) + "|" + ctSua.soLuongNguyenLieu.ToString() + "|" + xulyDuLieu.traVeKyTuGoc(ctSua.donViSuDung) + "|" + ctSua.maChiTiet.ToString() + "|" + imgAndID;
            }
            return(kq);
        }
        /// <summary>
        /// hàm tạo bảng danh sách nguyên liệu đã dùng và gán vào tag có id...
        /// </summary>
        /// <returns>Các dòng trong bảng</returns>
        public string taoBangNguyenLieuSuDung()
        {
            cartCongThuc cart = (cartCongThuc)Session["congThuc"];
            string       kq   = "";
            int          stt  = 1;

            foreach (ctCongThuc ct in cart.getListNguyenLieu())
            {
                if (ct.maNguyenLieu > 0) //Nếu bước đang duyệt có nguyên liệu thì hiện bảng
                {
                    kq += "<tr>";
                    kq += "     <th scope=\"row\">" + stt.ToString() + "</th>";
                    kq += "     <td>" + xulyDuLieu.traVeKyTuGoc(ct.nguyenLieu.tenNguyenLieu) + "</td>";
                    kq += "     <td>" + ct.soLuongNguyenLieu.ToString() + "</td>";
                    kq += "</tr>";
                }
                stt++;
            }
            return(kq);
        }
        /// <summary>
        /// Hàm thực hiện ajax thêm các bước vào bảng và thực hiện lấy danh sách các bước có trong cart đổ lên giao diện
        /// </summary>
        /// <returns>Trả vê chuỗi htmlBangDanhSachCacBuoc|bảng danh sách nguyên liệu|tongGiaNguyenLieu</returns>
        public string themChiTietVaTraVeBang(string duLieu)
        {
            cartCongThuc cart = (cartCongThuc)Session["congThuc"];

            try
            {
                ctCongThuc chiTietAdd = new ctCongThuc();
                this.layDuLieuTuViewChiTiet(chiTietAdd, duLieu);
                //------Thêm chi tiết vào session
                cart.addCart(chiTietAdd);
                //-----Cập nhật lại session
                Session["congThuc"] = cart;
            }
            catch (Exception ex)
            {
                xulyFile.ghiLoi("Class CongThucController - Function: themChiTietVaTraVeBang", ex.Message);
            }
            //Trả vê chuỗi htmlBangDanhSachCacBuoc|bảng danh sách nguyên liệu|tongGiaNguyenLieu
            return(taoBangChiTietVaNguyenLieuSuDungTuSession());
        }
        /// <summary>
        /// Hàm thực hiện chỉnh sửa lại bước trong session
        /// </summary>
        /// <param name="maCt">Mã chi tiết để xác định chi tiết cần sửa</param>
        /// <param name="duLieu">Chuỗi chứa dữ liệu chỉnh sửa có dang: maNguyenLieu|buocSo|soLuong|donVi|hanhDong|ghiChu</param>
        /// <returns>Trả vê chuỗi htmlBangDanhSachCacBuoc|bảng danh sách nguyên liệu|tongGiaNguyenLieu</returns>
        public string chinhSuaBuoc(string duLieu, int maCt)
        {
            cartCongThuc cart = (cartCongThuc)Session["congThuc"];

            try
            {
                //-----Lấy ra 1 phần tử trong session với điều kiện.....
                ctCongThuc chiTietSua = cart.getItem(maCt);
                this.layDuLieuTuViewChiTiet(chiTietSua, duLieu);
                //----Xóa bước cũ trong session và tạo lại
                cart.removeItem(maCt);
                chiTietSua.maChiTiet = maCt;
                cart.addCart(chiTietSua);
                //------Cập nhật lại session
                Session["congThuc"] = cart;
            }
            catch (Exception ex)
            {
                xulyFile.ghiLoi("Class CongThucController - Function: chinhSuaBuoc", ex.Message);
            }
            return(taoBangChiTietVaNguyenLieuSuDungTuSession());
        }
 /// <summary>
 /// Hàm tạo giao diện chỉnh sửa công thức
 /// </summary>
 /// <param name="maCongThuc"></param>
 /// <returns></returns>
 public ActionResult ct_ChinhSuaCongThuc()
 {
     this.resetData();
     try
     {
         string param = xulyChung.nhanThamSoTrongSession();
         if (param.Length > 0)
         {
             int             maCongThuc = xulyDuLieu.doiChuoiSangInteger(param);
             qlCaPheEntities db         = new qlCaPheEntities();
             congThucPhaChe  ctSua      = db.congThucPhaChes.SingleOrDefault(c => c.maCongThuc == maCongThuc);
             if (ctSua != null)
             {
                 this.doDuLieuCongThucLenView(ctSua, db);
                 //------Gán dữ liệu trong bảng chi tiết vào session
                 cartCongThuc cart = (cartCongThuc)Session["congThuc"];
                 foreach (ctCongThuc ct in db.ctCongThucs.ToList().Where(c => c.maCongThuc == ctSua.maCongThuc))
                 {
                     cart.addCart(ct);
                     Session["congThuc"] = cart;
                 }
                 xulyChung.ghiNhatKyDtb(1, "Chỉnh sửa công thức pha chế của \" " + xulyDuLieu.traVeKyTuGoc(ctSua.sanPham.tenSanPham) + " \"");
             }
         }
         else
         {
             throw new Exception("không nhận được tham số");
         }
     }
     catch (Exception ex)
     {
         xulyFile.ghiLoi("Class CongThucController - Function: ct_ChinhSuaCongThuc_Get", ex.Message);
         return(RedirectToAction("PageNotFound", "Home"));
     }
     return(View());
 }