/// <summary>
        /// Phê duyệt hồ sơ , chỉ có quyền giám đốc là có
        /// </summary>
        /// <param name="maHoSo"></param>
        /// <returns></returns>
        public ActionResult PheDuyet(string maHoSo)
        {
            if (String.IsNullOrEmpty(maHoSo)) return Json(new { msg = "Không tìm thấy mã hồ sơ" });
            var user = S4T_HaTinhBase.GetUserSession();
            if (user == null)
            {
                return RedirectToAction("Login", "Account", new { returnUrl = Request.Url.PathAndQuery });
            }
            else
            {
                // Kiểm tra quyền phê duyệt hồ sơ
                var per = CheckPermission(user);
                if (!per.isSuccess) return Content("Bạn không có quyền thực hiện chức năng này");

                var objHoSo = db.TD_HoSoDuAn.FirstOrDefault(o => o.MaHoSo == maHoSo);
                if (objHoSo == null) return Json(new { msg = "Không tìm thấy mã hồ sơ" });
                else
                {
                    try
                    {
                        var objLuongCVCuoi = db.sp_GetMaxLuongCongViecByMaHoSo(maHoSo).FirstOrDefault();
                        var luongCha_ID = objLuongCVCuoi.LuongCha_ID;
                        var sttMax = objLuongCVCuoi.STT;
                        var objLuongCV = new TD_LuongCongViec
                        {
                            Cap_ID = STTCapXuLy.DaPheDuyet,
                            LuongCha_ID = luongCha_ID,
                            MaHoSo = maHoSo,
                            NgayGui = DateTime.Now,
                            NgayHenTra = DateTime.Now,
                            NguoiGui = user.UserName,
                            NguoiNhan = user.UserName,
                            NoiDung = "Đã phê duyệt",
                            STT = sttMax + 1,
                            TrangThai = TrangThai.HoatDong
                        };
                        db.TD_LuongCongViec.Add(objLuongCV);
                        db.SaveChanges();
                        return Json(new { ok = "ok" });
                    }
                    catch (DbEntityValidationException ex)
                    {
                        var exc = new ExceptionViewer();
                        exc.GetError(ex);
                        return Json(new { msg = "Có lỗi trong quá trình xử lý" });
                    }
                }
            }
        }
        public ActionResult Forward(string maHoSo, string prefix, string ngayHenTra)
        {
            ViewBag.HideMenu = true;
            if (string.IsNullOrEmpty(maHoSo)) return Content("Không tìm thấy mã hồ sơ");
            var user = S4T_HaTinhBase.GetUserSession();
            if (user == null) return Content("Phiên đăng nhập đã hết. Mời bạn đăng nhập lại!");

            // Kiểm tra người xử lý cuối có phải người gửi
            var objLuongCVCuoi = db.sp_GetMaxLuongCongViecByMaHoSo(maHoSo).FirstOrDefault();
            if (objLuongCVCuoi == null) return Content("Không tìm thấy luồng công việc");
            if (objLuongCVCuoi.NguoiNhan != user.UserName) return Content("Bạn không phải người xử lý cuối của hồ sơ");

            var obj = new TD_LuongCongViec
            {
                LuongCha_ID = objLuongCVCuoi.LuongCongViec_ID,
                MaHoSo = maHoSo,
                Prefix = prefix
            };

            if (prefix == "Reply")
            {
                obj.NguoiNhan = objLuongCVCuoi.NguoiGui;
                obj.Cap_ID = STTCapXuLy.PhanHoi;
            }
            GetViewBag_Forward(prefix, user);
            ViewBag.NgayHenTra = ngayHenTra;

            // Lấy luồng công việc cha
            obj.LuongCha_ID = objLuongCVCuoi.LuongCha_ID == null ? obj.LuongCongViec_ID : obj.LuongCha_ID;
            obj.STT = objLuongCVCuoi.STT + 1;

            return View(obj);
        }
        public ActionResult Forward(TD_LuongCongViec obj)
        {
            if (String.IsNullOrEmpty(obj.MaHoSo)) return Content("Không tìm thấy mã hồ sơ");
            var user = S4T_HaTinhBase.GetUserSession();
            if (user == null) return RedirectToAction("Login", "Account", new { returnUrl = Request.Url.PathAndQuery });

            obj.NguoiGui = user.UserName;
            obj.NgayGui = DateTime.Now;
            obj.NgayHenTra = DateTime.Now;

            if (ModelState.IsValid)
            {
                using (var dbContextTransaction = db.Database.BeginTransaction())
                {
                    try
                    {
                        // Kiểm tra có tồn tại người nhận
                        var isNguoiNhan = db.AspNetUsers.Any(o => o.UserName.ToUpper() == obj.NguoiNhan.Trim().ToUpper());
                        if (!isNguoiNhan)
                        {
                            ModelState.AddModelError("NguoiNhan", "Không tồn tại người nhận " + obj.NguoiNhan + " trong hệ thống");
                            GetViewBag_Forward(obj.Prefix, user);
                            ViewBag.HideMenu = true;
                            return View(obj);
                        }

                        #region Cập nhật trạng thái hồ sơ cho luồng công việc
                        var objCap = GetCapXuLy(obj.NguoiNhan);
                        obj.Cap_ID = objCap == null ? STTCapXuLy.XinYKien : objCap.ThuTu.Value; // Trạng thái "Xin ý kiến" nếu không tìm thấy người trong phòng ban xử lý
                        #endregion Cập nhật trạng thái hồ sơ cho luồng công việc

                        #region Tạo luồng công việc
                        obj.TrangThai = TrangThai.HoatDong;
                        db.TD_LuongCongViec.Add(obj);
                        db.SaveChanges();
                        #endregion Tạo luồng công việc

                        #region Lưu file đính kèm theo luồng chuyển vào db
                        if (Request.Files.Count > 0)
                        {
                            var file = Request.Files[0];
                            if (file.ContentLength > 0)
                            {
                                var maxSize = 16384 * 1024; // in Byte

                                // Kiểm tra giới hạn dung lượng file upload cho phép
                                if (file.ContentLength > maxSize)
                                {
                                    ModelState.AddModelError("", "Dung lượng file vượt quá dung lượng cho phép tải lên");
                                    ViewBag.HideMenu = true;
                                    return View(obj);
                                }

                                var pathSource = ConfigurationManager.AppSettings["FolderUploadPath"];
                                if (string.IsNullOrEmpty(pathSource)) return Content("Không tìm thấy đường dẫn file");

                                // Lưu đường dẫn file theo mã hồ sơ
                                var duongDan = pathSource + "/TD_LuongCongViec_FileDinhKem/" + obj.MaHoSo;
                                if (!Directory.Exists(duongDan)) Directory.CreateDirectory(duongDan);
                                var fileName = obj.MaHoSo + "_" + obj.LuongCongViec_ID + "_" + obj.STT + "_" + User.Identity.GetUserId() + "_" + Path.GetFileName(file.FileName);

                                // Lưu file vào thư mục tạm của hệ thống
                                var path = Path.Combine(duongDan, fileName);
                                file.SaveAs(path);

                                #region Lưu đường dẫn, thông tin file vào db
                                var objFile = new TD_LuongCongViec_FileDinhKem();
                                objFile.LuongCongViec_ID = obj.LuongCongViec_ID;
                                objFile.MaHoSo = obj.MaHoSo;
                                objFile.TenFile = fileName;
                                objFile.TenHienThi = Path.GetFileName(file.FileName);
                                objFile.DuongDan = path;
                                objFile.TrangThai = TrangThai.HoatDong;
                                objFile.STT = 1;
                                db.TD_LuongCongViec_FileDinhKem.Add(objFile);
                                db.SaveChanges();

                                #endregion Lưu đường dẫn, thông tin file vào db
                            }
                        }
                        #endregion Lưu file đính kèm theo luồng chuyển vào db

                        // redirect back to the index action to show the form once again
                        ViewBag.Status = "status=\"OK\";";

                        dbContextTransaction.Commit();
                    }
                    catch (DbEntityValidationException ex)
                    {
                        ViewBag.Status = "status=\"ERROR\";";
                        dbContextTransaction.Rollback();
                        var exc = new ExceptionViewer();
                        exc.GetError(ex);
                    }
                }
            }

            GetViewBag_Forward(obj.Prefix, user);
            ViewBag.HideMenu = true;
            return View(obj);
        }
        //[ValidateAntiForgeryToken]
        public ActionResult Create(TD_HoSoDuAn tD_HoSoDuAn, List<TD_FileHoSoDinhKem> listFile)
        {
            var user = S4T_HaTinhBase.GetUserSession();
            if (user == null)
                return RedirectToAction("Login", "Account", new { returnUrl = Request.Url.PathAndQuery });

            // Kiểm tra quyền truy cập và cập nhật
            var per = CheckPermission(user);
            if (!per.isEdit)
                return Content("Bạn không có quyền thực hiện chức năng này");

            ModelState.Remove("MaHoSo");
            ModelState.Remove("TuNgay");
            ModelState.Remove("DenNgay");
            tD_HoSoDuAn.TuNgay = DateTime.Now;
            tD_HoSoDuAn.DenNgay = DateTime.Now;
            if (ModelState.IsValid)
            {
                using (var dbContextTransaction = db.Database.BeginTransaction())
                {
                    try
                    {
                        // Lưu tạm để tạo số biên nhận
                        db.TD_HoSoDuAn.Add(tD_HoSoDuAn);
                        db.SaveChanges();

                        // update lại số biên nhận
                        var maHoSo = DateTime.Now.ToString("yyyy") + DateTime.Now.ToString("MM") + tD_HoSoDuAn.LoaiDuAn_ID + tD_HoSoDuAn.HoSoDuAn_ID;
                        tD_HoSoDuAn.MaHoSo = maHoSo;
                        db.Entry(tD_HoSoDuAn).State = EntityState.Modified;

                        // Tạo luồng công việc đầu tiên là tạo mới
                        var objLuongCV = new TD_LuongCongViec
                        {
                            Cap_ID = STTCapXuLy.CapNhatHoSo,
                            MaHoSo = maHoSo,
                            NgayGui = DateTime.Now,
                            NgayHenTra = DateTime.Now,
                            NguoiGui = user.UserName,
                            NguoiNhan = user.UserName,
                            NoiDung = "Tạo mới",
                            STT = 1,
                            TrangThai = TrangThai.HoatDong
                        };
                        db.TD_LuongCongViec.Add(objLuongCV);

                        // lưu file từ thư mục tạm vào thư mục chính
                        if (Request.Files.Count == 0)
                        {
                            //return Content("Không có file"); 
                        }
                        else
                        {
                            var pathSource = ConfigurationManager.AppSettings["FolderUploadPath"];
                            if (string.IsNullOrEmpty(pathSource)) return Content("Không tìm thấy đường dẫn file");

                            //var duongDan = pathSource + "/TD_HoSoDuAn/NewUpload/" + User.Identity.GetUserId();
                            //if (!Directory.Exists(duongDan))
                            //    Directory.CreateDirectory(duongDan);

                            var duongDanVatLy = pathSource + "/TD_HoSoDuAn";
                            if (!Directory.Exists(duongDanVatLy))
                                Directory.CreateDirectory(duongDanVatLy);

                            var indexFile = 0;
                            var stt = 1;
                            for (int i = 0; i < Request.Files.Count; i++)
                            {
                                var file = Request.Files[i];
                                if (file.ContentLength > 0)
                                {
                                    // Tạo tên file lưu trên hệ thống
                                    var fileName = tD_HoSoDuAn.HoSoDuAn_ID + "_" + tD_HoSoDuAn.LoaiDuAn_ID + "_" + Guid.NewGuid().ToString() + "_" + Path.GetFileName(file.FileName);

                                    // Lưu file lên hệ thống
                                    var path = Path.Combine(duongDanVatLy, fileName);
                                    file.SaveAs(path);

                                    // Tạo object TD_FileHoSoDinhKem                                    
                                    var objFileDinhKem = new TD_FileHoSoDinhKem
                                    {
                                        DuongDan = path,
                                        SoKyHieu = listFile[indexFile].SoKyHieu,
                                        MaHoSo = maHoSo,
                                        STT = stt,
                                        TenFile = fileName,
                                        TenHienThi = Path.GetFileName(file.FileName),
                                        TrichYeu = listFile[indexFile].TrichYeu,
                                        VanBan_ID = listFile[indexFile].VanBan_ID,
                                        TrangThai = TrangThai.HoatDong
                                    };

                                    // Lưu thông tin file vào db
                                    db.TD_FileHoSoDinhKem.Add(objFileDinhKem);
                                    stt++; // Cộng số thứ tự file thêm 1 nếu đã lưu 1 file thành công
                                }
                                indexFile++;
                            }
                        }

                        db.SaveChanges();
                        dbContextTransaction.Commit();
                        return RedirectToAction("Index");
                    }
                    catch (DbEntityValidationException ex)
                    {
                        dbContextTransaction.Rollback();
                        var exc = new ExceptionViewer();
                        exc.GetError(ex);
                    }
                }
            }
            tD_HoSoDuAn.ListFile = listFile;
            GetViewBag(ViewReport.Create);
            GetModelStateError(ViewData);
            return View(tD_HoSoDuAn);
        }