/// <summary>
        /// Binds the edit fa.
        /// </summary>
        /// <param name="masterId">The master identifier.</param>
        /// <returns></returns>
        private async Task<FAREditRequestViewModel> BindEditFA(int masterId)
        {
            FAREditRequestViewModel farRequest = new FAREditRequestViewModel();
            var master = await MasterRepository.SingleAsync(masterId);

            if (master != null)
            {
                farRequest.Analyst = master.Analyst;
                farRequest.BUId = master.BUId;
                farRequest.FARNumber = master.Number;
                farRequest.FailureDesc = master.FailureDesc;
                farRequest.FailureOriginId = master.FailureOriginId;
                farRequest.FailureRate = master.FailureRate;
                farRequest.FailureTypeId = master.FailureTypeId;
                farRequest.Id = masterId;
                farRequest.InitialReportTargetDate = master.InitialReportTargetDate;
                farRequest.FinalReportTargetDate = master.FinalReportTargetDate;
                farRequest.OriginId = master.OriginId;
                farRequest.PriorityId = master.PriorityId;
                farRequest.Product = master.Product;
                farRequest.RefNo = master.RefNo;
                farRequest.RequestDate = master.RequestDate;
                farRequest.Requestor = master.Requestor;
                farRequest.SamplesArriveDate = master.SamplesArriveDate;
                farRequest.StatusId = master.StatusId;
                farRequest.Customer = master.Customer;
                farRequest.LabSiteId = master.LabSiteId;
                farRequest.Submitted = master.Submitted;
                farRequest.Site = this.Site;
                farRequest.LastUpdate = master.LastUpdate;
            }
            farRequest.Users = (await UserRepository.GetAllAsync()).Where(w => w.RoleId == (int)RoleType.ANALYST);
            farRequest.Origins = await OriginRepository.GetAllAsync();
            farRequest.Status = await StatusRepository.GetAllAsync();
            farRequest.BUs = await BuRepository.GetAllAsync();
            farRequest.FailureTypes = await FailureTypeRepository.GetAllAsync();
            farRequest.FailureOrigins = await FailureOriginRepository.GetAllAsync();
            farRequest.Priorities = await PriorityRepository.GetAllAsync();
            farRequest.ReasonClose = await ReasonFARCloseRepository.GetAllAsync();
            farRequest.LabSites = await LabSiteRepository.GetAllAsync();
            farRequest.Rates = await RatingRep.GetAllAsync();

            //Get all files in folder master with id
            string folderMaster = System.IO.Path.Combine(Server.MapPath("~/Upload"), masterId.ToString().PadLeft(10, '0'));
            if (System.IO.Directory.Exists(folderMaster))
            {
                string[] files = System.IO.Directory.GetFiles(folderMaster);
                string json = string.Empty;
                foreach (string file in files)
                {
                    json += "<a href=" + Url.Action("DownloadTemp", "Upload", new { id = masterId, file = System.IO.Path.GetFileName(file) }) + ">" + System.IO.Path.GetFileName(file) + "</a>" + "<br/>";
                }
                farRequest.Reports = json;
            }

            if (farRequest.Reports == null)
                farRequest.Reports = String.Empty;

            farRequest.EnableSubmit = ProcessHisRep.CheckExistProcess(masterId);
            return farRequest;
        }
        public async Task<JsonResult> ReEditFA(int id, FAREditRequestViewModel farRequest, string btnSubmit)
        {
            var bind = await BindEditFA(id);

            #region Execute button Recall
            if (btnSubmit == "Recall")
            {
                //Find master by id
                var master = MasterRepository.Single(id);
                master.Submitted = false;
                var updateResult = MasterRepository.Update(master);
                if (updateResult == Model.SaveResult.SUCCESS)
                {
                    Response.StatusCode = (int)HttpStatusCode.OK;
                    return new JsonResult
                    {
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                        Data = new { code = "RE01" }
                    };
                }
                else
                {
                    Response.StatusCode = (int)HttpStatusCode.BadRequest;
                    return new JsonResult
                    {
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                        Data = new { code = "RE02" }
                    };
                }
            }
            #endregion

            bool isSubmit = false;
            farRequest.Id = id;
            switch (btnSubmit)
            {
                case "Save":
                    break;
                case "Submit":
                    isSubmit = ProcessHisRep.CheckExistProcess(id);
                    break;
            }

            #region button Save or Submit execute
            FARMasterDto add = new FARMasterDto
            {
                Id = id,
                Number = farRequest.FARNumber,
                OriginId = farRequest.OriginId,
                Requestor = farRequest.Requestor,
                RefNo = farRequest.RefNo,
                FailureTypeId = farRequest.FailureTypeId,
                FailureOriginId = farRequest.FailureOriginId,
                FailureRate = farRequest.FailureRate,
                RequestDate = farRequest.RequestDate,
                SamplesArriveDate = null,
                PriorityId = farRequest.PriorityId,
                BUId = farRequest.BUId,
                Product = farRequest.Product,
                LabSiteId = farRequest.LabSiteId,
                InitialReportTargetDate = farRequest.InitialReportTargetDate,
                FinalReportTargetDate = farRequest.FinalReportTargetDate,
                FailureDesc = farRequest.FailureDesc,
                Analyst = bind.Analyst,
                StatusId = farRequest.StatusId,
                Customer = farRequest.Customer,
                Comments = String.Empty,
                LastUpdatedBy = this.CurrentName,
                Submitted = isSubmit,
            };

            var result = await MasterRepository.UpdateAsync(add);
            if (result == Model.SaveResult.SUCCESS)
            {
                if (isSubmit)
                {
                    string emailToAddress = GetManagers();
                    string emailSubject = "New FA Request";
                    string ebody = "FA Number: " + farRequest.FARNumber + " has been added to your queue. Please login to FA DB for your review and Analyst assignment.";
                    string emailBody = string.Format("{0}<br><br>{1}", ebody, DateTime.Now.ToShortDateString());
                    try
                    {
                        Mail.Send(emailToAddress, emailSubject, ebody);
                    }
                    catch (Exception ex)
                    {
                        LogService.Error(ex.Message, ex);
                    }
                }

                Response.StatusCode = (int)HttpStatusCode.OK;
                if (btnSubmit == "Submit")
                {
                    if (isSubmit)
                    {
                        return new JsonResult
                        {
                            JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                            Data = new { code = "SB01" }
                        };
                    }
                    else
                    {
                        return new JsonResult
                        {
                            JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                            Data = new { code = "SB02" }
                        };
                    }
                }

                if (btnSubmit == "Save")
                {
                    return new JsonResult
                    {
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                        Data = new { code = "SV01" }
                    };
                }
            }
            #endregion

            Response.StatusCode = (int)HttpStatusCode.BadRequest;
            return new JsonResult
            {
                JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                Data = new { code = "04" }
            };
        }