private bool Validate(TN_DauViec obj)
 {
     ModelState.Clear();
     if (string.IsNullOrEmpty(obj.TenDauViec) || string.IsNullOrEmpty(obj.TenDauViec.Trim()))
     {
         ModelState.AddModelError("TenDauViec", "Tên đầu việc không được để trống");
     }
     if (string.IsNullOrEmpty(obj.NguoiThucHien_ID))
     {
         ModelState.AddModelError("NguoiThucHien_ID", "Người thực hiện không được để trống");
     }
     if (obj.TuNgay == null || obj.TuNgay == new DateTime())
     {
         ModelState.AddModelError("TuNgay", "Ngày bắt đầu không hợp lệ");
     }
     if (obj.DenNgay == null || obj.DenNgay == new DateTime())
     {
         ModelState.AddModelError("DenNgay", "Ngày kết thúc không hợp lệ");
     }
     //if (obj.PhamVi == null)
     //{
     //    ModelState.AddModelError("PhamVi", "Chưa chọn phạm vi công việc");
     //}
     if (string.IsNullOrEmpty(obj.NoiDung) || string.IsNullOrEmpty(obj.NoiDung.Trim()))
     {
         ModelState.AddModelError("NoiDung", "Nội dung không được để trống");
     }
     if (ModelState.IsValid)
         return true;
     else
         return false;
 }
        private dynamic GetLoaiChuyen(ApplicationUser user, TN_DauViec tN_DauViec)
        {
            var list = new List<SelectListItem>();
            if (tN_DauViec == null) return list;
            var objChuyenActiveUser = db.TN_Chuyen.FirstOrDefault(o => o.Active == 1 && o.NguoiNhan_ID == user.Id && o.LoaiChuyen == LoaiChuyen.BaoCao && o.Viec_ID == tN_DauViec.ID);

            //if (tN_DauViec.NguoiDuyet_ID.Contains(user.Id))
            if (objChuyenActiveUser != null && objChuyenActiveUser.Chuyen_ID > 0)
                list.Add(new SelectListItem() { Text = "Giao việc", Value = "0", Selected = false });

            var lstChuyen = db.TN_Chuyen.Where(o => o.Viec_ID == tN_DauViec.ID && o.Active == 1 && (o.NguoiNhan_ID.Substring(0, 36).Contains(user.Id) || o.LoaiChuyen == LoaiChuyen.XinYKien));

            if (lstChuyen != null && lstChuyen.Any())
            {
                if (lstChuyen.Where(o => o.LoaiChuyen == LoaiChuyen.BaoCao || o.LoaiChuyen == LoaiChuyen.GiaoViec) != null &&
                    lstChuyen.Where(o => o.LoaiChuyen == LoaiChuyen.BaoCao || o.LoaiChuyen == LoaiChuyen.GiaoViec).Any() &&
                    !tN_DauViec.NguoiDuyet_ID.Contains(user.Id))
                {
                    list.Add(new SelectListItem() { Text = "Giao việc", Value = "0", Selected = false });
                    list.Add(new SelectListItem() { Text = "Báo cáo", Value = "1", Selected = false });
                }

                var xyk = lstChuyen.Where(o => o.LoaiChuyen == LoaiChuyen.XinYKien && o.NguoiNhan_ID == user.Id);
                if (xyk != null && xyk.Any())
                    list.Add(new SelectListItem() { Text = "Trả lời ý kiến", Value = "3", Selected = false });
            }

            if (tN_DauViec.NguoiThucHien_ID.Contains(user.Id))
                list.Add(new SelectListItem() { Text = "Lấy ý kiến", Value = "2", Selected = false });

            return list;
        }
        public ActionResult Create(TN_DauViec obj, List<HttpPostedFileBase> fileUpload, string FileXoa, string returnUrl, string Ykien)
        {
            var user = (ApplicationUser)S4T_HaTinhBase.GetUserSession();
            if (user == null) return RedirectToAction("Login", "Account", new { returnUrl = Request.Url.PathAndQuery });

            obj.PhamVi = PhamVi.PhongBan;// make to default

            //var objCauHinh = db.Ht_ThamSoHeThong.First(o => o.MaThamSo == "SepID");
            GetViewBag();
            if (!Validate(obj))
            {
                ViewBag.returnUrl = returnUrl;
                return View(obj);
            }
            try
            {
                var path = Server.MapPath("~") + "\\Upload\\TacNghiep";
                var idDelete = string.Empty;
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                var lstName = string.Empty;
                if (fileUpload != null && fileUpload.Any())
                    foreach (var item in fileUpload)
                    {
                        if (item != null)
                        {
                            var fileName = item.FileName;
                            if (item.ContentLength > 0 && !string.IsNullOrEmpty(fileName))
                            {
                                string newPath = Path.Combine(path, fileName);
                                fileName = Path.GetFileNameWithoutExtension(newPath) + "_" + DateTime.Now.ToBinary() + "_" + Path.GetExtension(newPath);
                                newPath = Path.Combine(path, fileName);
                                item.SaveAs(newPath);
                                lstName += fileName + ";";
                            }
                        }
                    }
                obj.Display = obj.NguoiThucHien_ID;
                obj.TenNguoiThucHien = GetTenNguoiThucHien(obj.NguoiThucHien_ID);
                //obj.TenNguoiDuyet = db.AspNetUsers.FirstOrDefault(o => o.Id == obj.NguoiDuyet_ID).HoVaTen;
                obj.TenNguoiDuyet = user.HoVaTen;
                obj.NguoiTao_ID = user.Id;
                obj.NgayTao = DateTime.Now;
                if (obj.ID <= 0)
                {
                    obj.NguoiDuyet_ID = user.Id;// make to default
                    if (lstName.Length > 2)
                        obj.FileDinhKem = lstName;
                    db.TN_DauViec.Add(obj);
                }
                else
                {
                    var objOld = db.TN_DauViec.FirstOrDefault(o => o.ID == obj.ID);
                    idDelete = GetchangeAssign(objOld.NguoiThucHien_ID, obj.NguoiThucHien_ID);
                    if (!string.IsNullOrEmpty(FileXoa))
                    {
                        foreach (var item in FileXoa.Split(';'))
                        {
                            if (string.IsNullOrEmpty(item)) break;
                            objOld.FileDinhKem = objOld.FileDinhKem.Replace(item, "");
                            objOld.FileDinhKem = objOld.FileDinhKem.Replace(";;", ";");
                        }

                    }
                    objOld.FileDinhKem += lstName;

                    objOld.DenNgay = obj.DenNgay;
                    objOld.LoaiViec = obj.LoaiViec;
                    objOld.NgayTao = obj.NgayTao;
                    //objOld.NguoiDuyet_ID = obj.NguoiDuyet_ID;
                    objOld.NguoiTao_ID = obj.NguoiTao_ID;
                    objOld.NguoiThucHien_ID = obj.NguoiThucHien_ID;
                    objOld.NoiDung = obj.NoiDung;
                    objOld.Parent_ID = obj.Parent_ID;
                    //objOld.PhamVi = obj.PhamVi;
                    objOld.TenDauViec = obj.TenDauViec;
                    objOld.TenNguoiDuyet = obj.TenNguoiDuyet;
                    objOld.TienDo = obj.TienDo;
                    objOld.TenNguoiThucHien = obj.TenNguoiThucHien;
                    objOld.TuNgay = obj.TuNgay;
                    objOld.Display = obj.Display;

                    db.Entry(objOld).State = EntityState.Modified;
                }

                if (obj.Parent_ID != null)
                {
                    var parentObj = db.TN_DauViec.FirstOrDefault(o => o.ID == obj.Parent_ID);
                    var lstNguoiThucHien = db.AspNetUsers.Where(o => obj.NguoiThucHien_ID.Contains(o.Id));
                    var lstDauViecCon = db.TN_DauViec.Where(o => o.Parent_ID == obj.Parent_ID && o.ID != obj.ID);// another child

                    foreach (var item in idDelete.Split(','))//Delete Display ID in parent which delete in child.
                    {
                        if (string.IsNullOrEmpty(item) || lstDauViecCon.Where(o => o.Display.Contains(item)).Any())// null or exist work item which contain idDelete
                            continue;
                        parentObj.Display = parentObj.Display.Replace("," + item, "");
                        //parentObj.Display.Replace(item, "");
                    }

                    foreach (var item in lstNguoiThucHien)
                    {
                        if (!parentObj.NguoiThucHien_ID.Contains(item.Id))
                        {
                            if (!parentObj.Display.Contains(item.Id))
                                parentObj.Display += "," + item.Id;
                        }
                    }
                    db.Entry(parentObj).State = EntityState.Modified;
                }
                db.SaveChanges();

                var objChuyen = new TN_Chuyen();
                objChuyen.LoaiChuyen = LoaiChuyen.GiaoViec;
                objChuyen.NguoiChuyen_ID = user.Id;
                objChuyen.NguoiNhan_ID = obj.NguoiThucHien_ID;
                objChuyen.TenNguoiChuyen = user.HoVaTen;
                objChuyen.TenNguoiNhan = obj.TenNguoiThucHien;
                objChuyen.Viec_ID = obj.ID;
                objChuyen.Ykien = Ykien;
                objChuyen.Active = 1;
                objChuyen.LuongBaoCao = user.Id + ";";
                db.TN_Chuyen.Add(objChuyen);

                db.SaveChanges();
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("FileDinhKem", "Lỗi upload");
                ViewBag.returnUrl = returnUrl;
                return View(obj);
            }
            return RedirectToLocal(returnUrl);
        }
        public ActionResult Create(int? ParentID, string returnUrl)
        {
            var objCauHinh = db.Ht_ThamSoHeThong.First(o => o.MaThamSo == "SepID");
            GetViewBag();
            var user = (ApplicationUser)S4T_HaTinhBase.GetUserSession();
            if (user == null) return RedirectToAction("Login", "Account", new { returnUrl = Request.Url.PathAndQuery });

            var obj = new TN_DauViec();
            ViewBag.returnUrl = returnUrl;
            if (ParentID != null)
            {
                //ViewBag.returnUrl = "/LapKeHoach/Detail/" + ParentID;
                obj.PhamVi = PhamVi.CaNhan;
                obj.Parent_ID = ParentID;
                return View(obj);
            }

            if (objCauHinh != null && !string.IsNullOrEmpty(objCauHinh.GiaTriThamSo) && objCauHinh.GiaTriThamSo.Contains(user.Id))
            {
                return View();
            }
            obj.PhamVi = PhamVi.CaNhan;
            return View(obj);
        }