/// <summary>
        /// hàm tạo bảng danh sách các món có trong hoaDonOrder
        /// </summary>
        /// <param name="hoaDon">Hóa đơn cần xem chi tiết</param>
        /// <returns>html vùng table danh sách các món trên modal</returns>
        private string taoBangChiTietHoaDon(hoaDonOrder hoaDon)
        {
            string html = "";

            html += "<table class=\"table table-hover\">";
            html += "   <thead>";
            html += "       <tr>";
            html += "           <th style=\"width:50%\">Tên món</th>";
            html += "           <th width=\"25%\">Số lượng</th>";
            html += "           <th width=\"25%\">Đơn giá</th>";
            html += "       </tr>";
            html += "   </thead>";
            html += "   <tbody>";
            //-------Lặp qua danh sách các món trong ctHoaDonTam chưa pha chế
            foreach (ctHoaDonOrder ct in hoaDon.ctHoaDonOrders.ToList())
            {
                html += "       <tr>";
                html += "           <td>";
                html += "               <img width=\"50px;\" height=\"50px;\" src=\"" + xulyDuLieu.chuyenByteHinhThanhSrcImage(ct.sanPham.hinhAnh) + "\">";
                html += "               <b>" + xulyDuLieu.traVeKyTuGoc(ct.sanPham.tenSanPham) + "</b>";
                html += "           </td>";
                html += "           <td>" + ct.soLuong.ToString() + "</td>";
                html += "           <td>" + xulyDuLieu.doiVND(ct.donGia) + "</td>";
                html += "       </tr>";
            }
            html += "   </tbody>";
            html += "</table>";
            return(html);
        }
 /// <summary>
 /// Hàm thêm mới dữ liệu cho bảng ctHoaDonOrder trong DATABASE
 /// </summary>
 /// <param name="hoaDon">Chi tiết cho hóa đơn</param>
 /// <param name="listChiTietTam">Danh sách các sản phẩm trong hóa đơn tạm</param>
 private void InsertCtHoaDonOrder(hoaDonOrder hoaDon, List <ctHoaDonTam> listChiTietTam, qlCaPheEntities db)
 {
     //--------Lặp qua danh sách ctHoaDonTam và thêm vào ctHoaDonOrder
     foreach (ctHoaDonTam ctTam in listChiTietTam.Where(c => c.trangThaiPhaChe != 4))
     {
         //-----Nếu ctHoaDonOrder đã tồn tại sản phẩm trong ctTam thì cập nhật số lượng
         ctHoaDonOrder ctAdd = hoaDon.ctHoaDonOrders.SingleOrDefault(c => c.maSanPham == ctTam.maSP);
         if (ctAdd == null)
         {
             //-------Thêm mới chi tiết
             ctAdd             = new ctHoaDonOrder();
             ctAdd.maSanPham   = ctTam.maSP;
             ctAdd.sanPham     = ctTam.sanPham;
             ctAdd.donGia      = ctTam.donGia;
             ctAdd.soLuong     = ctTam.soLuong;
             ctAdd.hoaDonOrder = hoaDon;
             db.ctHoaDonOrders.Add(ctAdd);
             db.SaveChanges();
         }
         else
         {
             //-----Cập nhật chi tiết
             ctAdd.soLuong        += ctTam.soLuong;
             db.Entry(ctAdd).State = System.Data.Entity.EntityState.Modified;
             db.SaveChanges();
         }
     }
 }
        /// <summary>
        /// Hàm tạo bill thanh toán cần in
        /// </summary>
        /// <param name="hoaDon">Hóa đơn cần hiển thị thông tin</param>
        /// <param name="cauHinh">Thông tin cấu hình của quán</param>
        /// <param name="tienMat">Số tiền khách đưa</param>
        /// <param name="tienTra">Số tiền trả lại cho khách</param>
        /// <returns></returns>
        private string scriptTaoHoaDon(hoaDonOrder hoaDon, cauHinh cauHinh, long tienMat, long tienTra)
        {
            string kq = "";

            kq += "                <div class=\"row text-center\">";
            kq += "                    <h4>" + xulyDuLieu.traVeKyTuGoc(cauHinh.tenQuan) + "</h4>";
            kq += "                    <label><i>Địa chỉ: " + xulyDuLieu.traVeKyTuGoc(cauHinh.diaChi) + "</i></label>";
            kq += "                    <label><i>ĐT: " + xulyDuLieu.traVeKyTuGoc(cauHinh.hotLine) + "</i></label><br/>";
            kq += "                    <label>*********************</label>";
            kq += "                </div>";
            kq += "                <div class=\"row\">";
            kq += "                    <h4 class=\"text-center\">HÓA ĐƠN THANH TOÁN</h4>";
            kq += "                    <p>Số TT: " + hoaDon.maHoaDon.ToString() + "</p>";
            kq += "                    <p><b>Bàn: " + xulyDuLieu.traVeKyTuGoc(hoaDon.BanChoNgoi.tenBan) + "</b> - Ngày: " + hoaDon.ngayLap.ToString() + "</p>";
            kq += "                </div>";
            kq += "                <div class=\"row\">";
            kq += "                    <table>";
            kq += "                        <thead>";
            kq += "                            <tr>";
            kq += "                                <th width=\"40%\">Tên hàng</th>";
            kq += "                                <th width=\"20%\">Đơn giá</th>";
            kq += "                                <th width=\"20%\">T.Tiền</th>";
            kq += "                            </tr>";
            kq += "                        </thead>";
            kq += "                        <tbody>";
            foreach (ctHoaDonOrder ct in hoaDon.ctHoaDonOrders.ToList())
            {
                kq += "                            <tr>";
                kq += "                                <td>" + xulyDuLieu.traVeKyTuGoc(ct.sanPham.tenSanPham) + " (x" + ct.soLuong.ToString() + ")</td>";
                kq += "                                <td>" + xulyDuLieu.doiVND(ct.donGia) + "</td>";
                kq += "                                <td>" + (ct.soLuong * ct.donGia).ToString() + "</td>";
                kq += "                            </tr>";
            }
            kq += "                        </tbody>";
            kq += "                    </table>";
            kq += "                </div>";
            kq += "                <br/>";
            kq += "                <div class=\"font-16 bold\">";
            kq += "                    <label>T.Cộng:</label>";
            kq += "                    <label class=\"pull-right\">" + xulyDuLieu.doiVND(hoaDon.tongTien) + "</label>";
            kq += "                </div>";
            kq += "                <div class=\"font-18 bold\">";
            kq += "                    <label>Tạm tính:</label>";
            kq += "                    <label class=\"pull-right\">" + xulyDuLieu.doiVND(hoaDon.tamTinh) + "</label>";
            kq += "                </div>";
            kq += "                <div class=\"font-14 bold\">";
            kq += "                    <label>Nhận tiền mặt:</label>";
            kq += "                    <label class=\"pull-right\">" + tienMat + "</label>";
            kq += "                </div>";
            kq += "                <div class=\"font-14 bold\">";
            kq += "                    <label>Tiền trả:</label>";
            kq += "                    <label class=\"pull-right\">" + tienTra + "</label>";
            kq += "                </div>";
            kq += "                <div class=\"font-11 text-center\">";
            kq += "                    <label>Cám ơn quý khách - hẹn gặp lại !!!</label>";
            kq += "                </div>";
            return(kq);
        }
        /// <summary>
        /// Hàm thêm mới 1 hóa đơn vào csdl cho bảng hoDonOrder
        /// </summary>
        /// <param name="hoaDonTam">Hóa đơn tạm để gán dữ liệu</param>
        /// <param name="db"></param>
        /// <param name="f"></param>
        private hoaDonOrder InsertHoaDonOrder(hoaDonTam hoaDonTam, qlCaPheEntities db, FormCollection f)
        {
            int         kqLuu     = 0;
            hoaDonOrder hoaDonAdd = new hoaDonOrder();

            hoaDonAdd.maBan       = hoaDonTam.maBan;
            hoaDonAdd.trangThai   = 1;//----Thiết lập trạng thái hóa đơn đã thanh toán
            hoaDonAdd.ngayLap     = DateTime.Now;
            hoaDonAdd.thoiDiemDen = hoaDonTam.thoiDiemDen;
            hoaDonAdd.nguoiPhucVu = hoaDonTam.nguoiPhucVu;
            hoaDonAdd.BanChoNgoi  = hoaDonTam.BanChoNgoi;
            hoaDonAdd.nguoiXuatHD = ((taiKhoan)Session["login"]).tenDangNhap;
            hoaDonAdd.chietKhau   = xulyDuLieu.doiChuoiSangInteger(f["txtTienChietKhau"]);
            hoaDonAdd.tongTien    = new bHoaDonTam().layTongTienSanPham(hoaDonTam);
            hoaDonAdd.tamTinh     = hoaDonAdd.tongTien - hoaDonAdd.chietKhau;
            hoaDonAdd.ghiChu      = hoaDonTam.ghiChu;
            db.hoaDonOrders.Add(hoaDonAdd);
            kqLuu = db.SaveChanges();
            return(hoaDonAdd);
        }
        /// <summary>
        /// Hàm hoàn tất thanh toán 1 hóa đơn.
        /// 1. Tạo hóa đơn order
        /// 2. Xóa hóa đơn tạm
        /// </summary>
        /// <param name="f"></param>
        /// <returns></returns>
        public ActionResult hd_ThucHienThanhToan(FormCollection f)
        {
            string    modal = ""; int kqLuu = 0;
            hoaDonTam hoaDonThanhToan = new hoaDonTam(); hoaDonOrder hoaDonAdd = new hoaDonOrder();

            if (xulyChung.duocCapNhat(idOfPage, "7"))
            {
                try
                {
                    ////--------Lấy thông tin hóa đơn
                    int             maBan = this.layMaBanTuSession();
                    qlCaPheEntities db    = new qlCaPheEntities();
                    hoaDonThanhToan = db.hoaDonTams.SingleOrDefault(s => s.maBan == maBan);
                    if (hoaDonThanhToan != null)
                    {
                        //--------Thêm vào bảng hoaDonOrder
                        hoaDonAdd = this.InsertHoaDonOrder(hoaDonThanhToan, db, f);
                        if (hoaDonAdd != null)
                        {
                            //--------Thêm vào bảng ctHoaDonOrder
                            this.InsertCtHoaDonOrder(hoaDonAdd, hoaDonThanhToan.ctHoaDonTams.ToList(), db);
                            //--------Cập nhật trạng thái hóa đơn tạm thành 3 ĐÃ thanh toán => chờ reset
                            this.UpdateHoaDonTam(hoaDonThanhToan, db);
                            xulyChung.ghiNhatKyDtb(2, "Thêm mới hóa đơn có mã \" " + hoaDonAdd.maHoaDon.ToString() + " \"");
                        }
                    }
                    modal = this.taoModalInBill(hoaDonAdd, db, f);
                }
                catch (Exception ex)
                {
                    modal = createHTML.taoThongBaoLuu(ex.Message);
                    xulyFile.ghiLoi("Class: HoaDonController - Function: hd_ThucHienThanhToan", ex.Message);
                    return(RedirectToAction("PageNotFound", "Home"));
                }
                ViewBag.ModalBill = modal;
            }
            return(View(hoaDonThanhToan));
        }
        /// <summary>
        /// Hàm tạo modal in hóa đơn sau khi đã thanh toán
        /// </summary>
        /// <param name="hoaDon"></param>
        /// <returns></returns>
        private string taoModalInBill(hoaDonOrder hoaDon, qlCaPheEntities db, FormCollection f)
        {
            string kq = ""; cauHinh cauHinh = db.cauHinhs.First(); long tienMat = xulyDuLieu.doiChuoiSangLong(f["txtTienMat"]), tienTra = xulyDuLieu.doiChuoiSangLong(f["txtTienTra"]);

            kq += "<div class=\"modal fade in\" id=\"modalInHoaDon\" tabindex=\"-1\" role=\"dialog\" style=\"display: block;\">";
            kq += "    <div class=\"modal-dialog modal-sm\" role=\"document\">";
            kq += "        <div class=\"modal-content\">";
            kq += "            <div class=\"modal-header bg-blue\">";
            kq += "                <h4 class=\"modal-title\" id=\"smallModalLabel\">IN HÓA ĐƠN</h4>";
            kq += "            </div>";
            kq += "            <div class=\"modal-body\" id=\"printBill\">";
            kq += "                <div class=\"row text-center\">";
            kq += "                    <h4>" + xulyDuLieu.traVeKyTuGoc(cauHinh.tenQuan) + "</h4>";
            kq += "                    <label><i>Địa chỉ: " + xulyDuLieu.traVeKyTuGoc(cauHinh.diaChi) + "</i></label>";
            kq += "                    <label><i>ĐT: " + xulyDuLieu.traVeKyTuGoc(cauHinh.hotLine) + "</i></label><br/>";
            kq += "                    <label>*********************</label>";
            kq += "                </div>";
            kq += "                <div class=\"row\">";
            kq += "                    <h4 class=\"text-center\">HÓA ĐƠN THANH TOÁN</h4>";
            kq += "                    <p>Số TT: " + hoaDon.maHoaDon.ToString() + "</p>";
            kq += "                    <p><b>Bàn: " + xulyDuLieu.traVeKyTuGoc(hoaDon.BanChoNgoi.tenBan) + "</b> - Ngày: " + hoaDon.ngayLap.ToString() + "</p>";
            kq += "                </div>";
            kq += "                <div class=\"row\">";
            kq += "                    <table>";
            kq += "                        <thead>";
            kq += "                            <tr>";
            kq += "                                <th width=\"40%\">Tên hàng</th>";
            kq += "                                <th width=\"20%\">Đơn giá</th>";
            kq += "                                <th width=\"20%\">T.Tiền</th>";
            kq += "                            </tr>";
            kq += "                        </thead>";
            kq += "                        <tbody>";
            foreach (ctHoaDonOrder ct in hoaDon.ctHoaDonOrders.ToList())
            {
                kq += "                            <tr>";
                kq += "                                <td>" + xulyDuLieu.traVeKyTuGoc(ct.sanPham.tenSanPham) + " (x" + ct.soLuong.ToString() + ")</td>";
                kq += "                                <td>" + xulyDuLieu.doiVND(ct.donGia).Replace("VNĐ", "") + "</td>";
                kq += "                                <td>" + xulyDuLieu.doiVND((ct.soLuong * ct.donGia)).Replace("VNĐ", "") + "</td>";
                kq += "                            </tr>";
            }
            kq += "                        </tbody>";
            kq += "                    </table>";
            kq += "                </div>";
            kq += "                <br/>";
            kq += "                <div class=\"font-16 bold\">";
            kq += "                    <label>T.Cộng:</label>";
            kq += "                    <label class=\"pull-right\">" + xulyDuLieu.doiVND(hoaDon.tongTien) + "</label>";
            kq += "                </div>";
            kq += "                <div class=\"font-18 bold\">";
            kq += "                    <label>Tạm tính:</label>";
            kq += "                    <label class=\"pull-right\">" + xulyDuLieu.doiVND(hoaDon.tamTinh) + "</label>";
            kq += "                </div>";
            kq += "                <div class=\"font-14 bold\">";
            kq += "                    <label>Nhận tiền mặt:</label>";
            kq += "                    <label class=\"pull-right\">" + xulyDuLieu.doiVND(tienMat) + "</label>";
            kq += "                </div>";
            kq += "                <div class=\"font-14 bold\">";
            kq += "                    <label>Tiền trả:</label>";
            kq += "                    <label class=\"pull-right\">" + xulyDuLieu.doiVND(tienTra) + "</label>";
            kq += "                </div>";
            kq += "                <div class=\"font-11 text-center\">";
            kq += "                    <label>Cám ơn quý khách - hẹn gặp lại !!!</label>";
            kq += "                </div>";
            kq += "            </div>";
            kq += "            <div class=\"modal-footer\">";
            kq += "<button id=\"print\" class=\"btn btn-primary waves-effect\" onclick=\"printContent('printBill');\" ><i class=\"material-icons\">print</i>In hóa đơn</button>";
            kq += "                <a href=\"/HoaDon/hd_TableHoaDonChoThanhToan\" class=\"btn btn-link waves-effect\">CLOSE</a>";
            kq += "            </div>";
            kq += "        </div>";
            kq += "    </div>";
            kq += "</div>";
            return(kq);
        }