public async Task<ActionResult> LoadDetailClaimMedical(int employeeID, int claimID)
        {
            ViewBag.typeClaim = ccm.typeClaimEmployee(string.Empty);
            string sql = "SELECT B.klaimID, seqID, claimType, relationStatus, happeningDate, relationSeqID, B.amount, B.remarks ";
                  sql += "FROM [dbo].[EmployeeClaimMedicals] A WITH (NOLOCK) ";
                  sql += "INNER JOIN [dbo].[EmployeeClaimMedicalDetails] B WITH (NOLOCK) ON B.klaimID = A.klaimID ";
                  sql += "WHERE A.klaimID = " + claimID + " AND A.employeeID = " + employeeID + "";

            DataTable dtFamilyList = cd.executeReader(sql);

            var model = new employeeClaimMedical();
            foreach (DataRow dr in dtFamilyList.Rows)
            {
                var editor = new employeeClaimMedical.employeeClaimMedicalDetail()
                {
                    amount = decimal.Parse(dr["amount"].ToString()),
                    claimType = dr["claimType"].ToString(),
                    happeningDate = DateTime.Parse(dr["happeningDate"].ToString()),
                    klaimID = int.Parse(dr[""].ToString()),
                    relationSeqID = int.Parse(dr["relationSeqID"].ToString()),
                    relationStatus = dr["relationStatus"].ToString(),
                    remarks = dr["remarks"].ToString(),
                    seqID = int.Parse(dr["seqID"].ToString())
                };
                model.claimMedicalDetail.Add(editor);
            }
            ViewBag.detailClaimMedical = model.claimMedicalDetail.ToList();

            getListFamily(employeeID.ToString());

            return PartialView("_PartialPageClaimDetail");
        }
        public async Task<ActionResult> LoadDetailClaimMedical_Client(string dataDetail, string act, int employeeID)
        {
            string[] data = dataDetail.Split('|');

            var model = new employeeClaimMedical();
            for (int i = 0; i < data.Count(); i++)
            {
                string[] value = data[i].Split(';');

                if (value[1].ToString() == "")
                    break;

                int txtSeqID_Val = int.Parse(value[1].ToString());
                string txtFamilyName_Val = value[2].ToString();
                DateTime klaimDateDetail_Val = DateTime.Parse(value[3].ToString());
                string typeClaim_Val = value[4].ToString();
                decimal amountClaims_Val = decimal.Parse(value[5].ToString());
                string descriptionClaim_Val = value[6].ToString();
                string relationStatus_Val = value[7].ToString();
                string jenisKelamin_Val = value[8].ToString();

                var editor = new employeeClaimMedical.employeeClaimMedicalDetail()
                {
                    amount = amountClaims_Val,
                    claimType = typeClaim_Val,
                    happeningDate = klaimDateDetail_Val,
                    klaimID = 0,
                    relationSeqID = txtSeqID_Val,
                    relationStatus = relationStatus_Val,
                    remarks = descriptionClaim_Val,
                    seqID = txtSeqID_Val
                };
                model.claimMedicalDetail.Add(editor);
            }
            ViewBag.detailClaimMedical = model.claimMedicalDetail.ToList();

            ViewBag.typeClaim = ccm.typeClaimEmployee(string.Empty);
            getListFamily(employeeID.ToString());
            return PartialView("_PartialPageClaimDetail");
        }
        public ActionResult Create(employeeClaimMedical employeeclaimmedical)
        {
            if (acm.cekSession() == false)
                return RedirectToAction("Logout", "Account");
            
            if (ModelState.IsValid)
            {
                bool isProposed = false;
                for (int i = 0; i < Request.Form.Count; i++)
                {
                    if (Request.Form.AllKeys.ToList()[i].Contains("hdnTypeSubmit"))
                        if (Request.Form["hdnTypeSubmit"].ToString() == "requested")
                            isProposed = true;
                }

                var file = Request.Files["linkFileData"];
                if (file != null && file.ContentLength > 0)
                {
                    var uploadDir = "~/uploads";
                    var imagePath = Path.Combine(Server.MapPath(uploadDir), file.FileName);
                    var imageUrl = Path.Combine(uploadDir, file.FileName);
                    file.SaveAs(imagePath);
                    employeeclaimmedical.linkFileData = imageUrl;
                }

                lvm = Session["sessionUserLogin"] as LoginViewModel.userLogin;
                employeeclaimmedical.createdUser = lvm.userID;
                employeeclaimmedical.createdDate = DateTime.Now;
                employeeclaimmedical.proposedStatus = isProposed;
                employeeclaimmedical.proposedDate = DateTime.Now;
                employeeclaimmedical.proposedBy = lvm.userID;
                db.employeeClaimMedicals.Add(employeeclaimmedical);
                db.SaveChanges();
                return RedirectToAction("Index","EmployeeClaimMedicalPersonal");
            }

            return View(employeeclaimmedical);
        }
        public void getListFamily(string employeeID)
        {
            string sql = "SELECT [employeeID],[sId],[name],[birthDate],[birthPlace],[education],[statusRelation],[gender] ";
                    sql += "FROM [dbo].[v_family] ";
                    sql += "WHERE [employeeID] = " + employeeID + " ORDER BY number ASC";

            DataTable dtFamilyList = cd.executeReader(sql);

            var model = new employeeClaimMedical();
            foreach (DataRow dr in dtFamilyList.Rows)
            {
                var editor = new employeeClaimMedical.familyList()
                {
                    employeeID = int.Parse(dr["employeeID"].ToString()),
                    sId = int.Parse(dr["sId"].ToString()),
                    name = dr["name"].ToString(),
                    gender = dr["gender"].ToString(),
                    birthdate = DateTime.Parse(dr["birthdate"].ToString()),
                    birthplace = dr["birthplace"].ToString(),
                    education = dr["education"].ToString(),
                    statusRelation = dr["statusRelation"].ToString(),
                };
                model.listFamily.Add(editor);
            }
            ViewBag.FamilyPopUp = model.listFamily.ToList();
        }
        public ActionResult Edit(employeeClaimMedical employeeclaimmedical)
        {
            if (acm.cekSession() == false)
                return RedirectToAction("Logout", "Account");

            lvm = Session["sessionUserLogin"] as LoginViewModel.userLogin;
            if (acm.cekValidation(Url.Action().ToString()) == false && lvm.isAdmin == false)
                return RedirectToAction("NotAuthorized", "Account", new { menu = Url.Action().ToString() });
            
            if (ModelState.IsValid)
            {
                bool isProposed = false;
                for (int i = 0; i < Request.Form.Count; i++)
                {
                    if (Request.Form.AllKeys.ToList()[i].Contains("hdnTypeSubmit"))
                        if (Request.Form["hdnTypeSubmit"].ToString() == "requested")
                            isProposed = true;
                }

                var file = Request.Files["linkFileData"];
                if (file != null && file.ContentLength > 0)
                {
                    var imagePath = Path.Combine(Server.MapPath(uploadDir), file.FileName);
                    var imageUrl = Path.Combine(uploadDir, file.FileName);
                    file.SaveAs(imagePath);
                    employeeclaimmedical.linkFileData = imageUrl;
                }
                else
                {
                    var xfile = db.employeeClaimMedicals.AsNoTracking().Where(x => x.klaimID == employeeclaimmedical.klaimID).ToList();
                    employeeclaimmedical.linkFileData = xfile[0].linkFileData;
                }

                lvm = Session["sessionUserLogin"] as LoginViewModel.userLogin;
                employeeclaimmedical.modifiedUser = lvm.userID;
                employeeclaimmedical.modifiedDate = DateTime.Now;
                employeeclaimmedical.proposedStatus = isProposed;
                employeeclaimmedical.proposedDate = DateTime.Now;
                employeeclaimmedical.proposedBy = lvm.userID;
                db.Entry(employeeclaimmedical).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(employeeclaimmedical);
        }
        public ActionResult Create(employeeClaimMedical employeeclaimmedical)
        {
            if (acm.cekSession() == false)
                return RedirectToAction("Logout", "Account");

            lvm = Session["sessionUserLogin"] as LoginViewModel.userLogin;
            if (acm.cekValidation(Url.Action().ToString()) == false && lvm.isAdmin == false)
                return RedirectToAction("NotAuthorized", "Account", new { menu = Url.Action().ToString() });

            var countChk = 0;
            for (int i = 0; i < Request.Form.Count; i++)
            {
                if (Request.Form.AllKeys.ToList()[i].Contains("txtSeqID_"))
                    countChk++;
            }

            var model = new employeeClaimMedical();
            for (int i = 0; i < countChk; i++)
            {
                int txtSeqID_Val = int.Parse(Request.Form["txtSeqID_"+(i+1)].ToString());
                string txtFamilyName_Val = Request.Form["txtFamilyName_" + (i + 1)].ToString();
                DateTime klaimDateDetail_Val = DateTime.Parse(Request.Form["klaimDateDetail_" + (i + 1)].ToString());
                string typeClaim_Val = Request.Form["typeClaim_" + (i + 1)].ToString();
                decimal amountClaims_Val = decimal.Parse(Request.Form["amountClaims_" + (i + 1)].ToString());
                string descriptionClaim_Val = Request.Form["descriptionClaim_" + (i + 1)].ToString();
                string relationStatus_Val = Request.Form["relationStatus_" + (i + 1)].ToString();
                string jenisKelamin_Val = Request.Form["jenisKelamin_" + (i + 1)].ToString();

                var editor = new employeeClaimMedical.employeeClaimMedicalDetail()
                {
                    amount = amountClaims_Val,
                    claimType = typeClaim_Val,
                    happeningDate = klaimDateDetail_Val,
                    klaimID = 0,
                    relationSeqID = txtSeqID_Val,
                    relationStatus = relationStatus_Val,
                    remarks = descriptionClaim_Val,
                    seqID = txtSeqID_Val
                };
                model.claimMedicalDetail.Add(editor);
            }
            ViewBag.detailClaimMedical = model.claimMedicalDetail.ToList();

            ViewBag.typeClaim = ccm.typeClaimEmployee(string.Empty);
            getListFamily(employeeclaimmedical.employeeID.ToString());
            
            if (ModelState.IsValid)
            {
                bool isProposed = false;
                for (int i = 0; i < Request.Form.Count; i++)
                {
                    if (Request.Form.AllKeys.ToList()[i].Contains("hdnTypeSubmit"))
                        if (Request.Form["hdnTypeSubmit"].ToString() == "requested")
                            isProposed = true;
                }

                var file = Request.Files["linkFileData"];
                if (file != null && file.ContentLength > 0)
                {
                    var imagePath = Path.Combine(Server.MapPath(uploadDir), file.FileName);
                    var imageUrl = Path.Combine(uploadDir, file.FileName);
                    file.SaveAs(imagePath);
                    employeeclaimmedical.linkFileData = imageUrl;
                }

                lvm = Session["sessionUserLogin"] as LoginViewModel.userLogin;
                employeeclaimmedical.createdUser = lvm.userID;
                employeeclaimmedical.createdDate = DateTime.Now;
                employeeclaimmedical.proposedStatus = isProposed;
                employeeclaimmedical.proposedDate = DateTime.Now;
                employeeclaimmedical.proposedBy = lvm.userID;
                db.employeeClaimMedicals.Add(employeeclaimmedical);
                db.SaveChanges();

                if (employeeclaimmedical.klaimID > 0)
                { 
                    #region insertDetail
                    for (int i = 0; i < countChk; i++)
                    {
                        int txtSeqID_Val = int.Parse(Request.Form["txtSeqID_" + (i + 1)].ToString());
                        string txtFamilyName_Val = Request.Form["txtFamilyName_" + (i + 1)].ToString();
                        DateTime klaimDateDetail_Val = DateTime.Parse(Request.Form["klaimDateDetail_" + (i + 1)].ToString());
                        string typeClaim_Val = Request.Form["typeClaim_" + (i + 1)].ToString();
                        decimal amountClaims_Val = decimal.Parse(Request.Form["amountClaims_" + (i + 1)].ToString());
                        string descriptionClaim_Val = Request.Form["descriptionClaim_" + (i + 1)].ToString();
                        string relationStatus_Val = Request.Form["relationStatus_" + (i + 1)].ToString();
                        string jenisKelamin_Val = Request.Form["jenisKelamin_" + (i + 1)].ToString();

                        var editor = new employeeClaimMedical.employeeClaimMedicalDetail()
                        {
                            amount = amountClaims_Val,
                            claimType = typeClaim_Val,
                            happeningDate = klaimDateDetail_Val,
                            klaimID = 0,
                            relationSeqID = txtSeqID_Val,
                            relationStatus = relationStatus_Val,
                            remarks = descriptionClaim_Val,
                            seqID = txtSeqID_Val
                        };
                        db.employeeClaimMedicalDetails.Add(editor);
                    }
                    #endregion

                    db.SaveChanges();
                }
                return RedirectToAction("Index");
            }

            return View(employeeclaimmedical);
        }