public ActionResult WorkFlow(string source, int sourceid)
        {
            var reqestwf = _hrUnitOfWork.LeaveRepository.ReadRequestWF(sourceid, source, Language);

            if (reqestwf == null)
            {
                reqestwf          = new RequestWfFormViewModel();
                reqestwf.Source   = source;
                reqestwf.SourceId = sourceid;
                reqestwf.Roles    = _hrUnitOfWork.LeaveRepository.GetOrgChartRoles(Language);
                reqestwf.Diagrams = _hrUnitOfWork.Repository <Diagram>().Select(a => new FormDropDown {
                    id = a.Id, name = a.Name
                }).ToList();
            }

            ViewBag.HeirTypeList = new SelectList(new List <FormDropDown> {
                new FormDropDown {
                    id = 1, name = MsgUtils.Instance.Trls("Org Chart")
                },
                new FormDropDown {
                    id = 2, name = MsgUtils.Instance.Trls("Org Chart Hierarchy")
                },
                new FormDropDown {
                    id = 3, name = MsgUtils.Instance.Trls("Position Hierarchy")
                },
                new FormDropDown {
                    id = 4, name = MsgUtils.Instance.Trls("Direct Manager Hierarchy")
                }
            }, "id", "name", reqestwf.HeirType);

            ViewBag.WaitAction = new SelectList(new List <FormDropDown> {
                new FormDropDown {
                    id = 1, name = MsgUtils.Instance.Trls("Foreword to next step")
                },
                new FormDropDown {
                    id = 2, name = MsgUtils.Instance.Trls("Back to previous step")
                },
                new FormDropDown {
                    id = 3, name = MsgUtils.Instance.Trls("Back to requester")
                }
            }, "id", "name", reqestwf.TimeOutAction);

            return(PartialView("_WorkFlow", reqestwf));
        }
        public ActionResult RequestDetails(RequestWfFormViewModel model, OptionsViewModel moreInfo, WfRoleWfVM grid1)
        {
            List <Error> errors = new List <Error>();

            if (ModelState.IsValid)
            {
                if (ServerValidationEnabled)
                {
                    errors = _hrUnitOfWork.SiteRepository.CheckForm(new CheckParm
                    {
                        CompanyId  = CompanyId,
                        ObjectName = "RequestWfs",
                        TableName  = "RequestWf",
                        Columns    = Models.Utils.GetColumnViews(ModelState.Where(a => !a.Key.Contains('.'))),
                        Culture    = Language
                    });

                    if (errors.Count() > 0)
                    {
                        foreach (var e in errors)
                        {
                            foreach (var errorMsg in e.errors)
                            {
                                ModelState.AddModelError(errorMsg.field, errorMsg.message);
                            }
                        }

                        return(Json(Models.Utils.ParseFormErrors(ModelState)));
                    }
                }

                RequestWf record;
                //insert
                if (model.Id == 0)
                {
                    record = new RequestWf();
                    AutoMapper(new Models.AutoMapperParm
                    {
                        Destination = record,
                        Source      = model,
                        ObjectName  = "RequestWfs",
                        Options     = moreInfo,
                        Transtype   = TransType.Insert
                    });

                    record.CreatedUser = UserName;
                    record.CreatedTime = DateTime.Now;
                    if (model.HeirType != 3)
                    {
                        record.Hierarchy = null;
                    }

                    _hrUnitOfWork.LeaveRepository.Add(record);
                }
                //update
                else
                {
                    record = _hrUnitOfWork.Repository <RequestWf>().FirstOrDefault(a => a.Id == model.Id);
                    AutoMapper(new Models.AutoMapperParm
                    {
                        Destination = record,
                        Source      = model,
                        ObjectName  = "RequestWfs",
                        Version     = 0,
                        Options     = moreInfo,
                        Transtype   = TransType.Update
                    });
                    record.ModifiedTime = DateTime.Now;
                    record.ModifiedUser = UserName;
                    if (model.HeirType != 3)
                    {
                        record.Hierarchy = null;
                    }
                    _hrUnitOfWork.LeaveRepository.Attach(record);
                    _hrUnitOfWork.LeaveRepository.Entry(record).State = EntityState.Modified;
                }

                errors = SaveGrid1(grid1, ModelState.Where(a => a.Key.Contains("grid1")), record);
                if (errors.Count > 0)
                {
                    return(Json(errors.First().errors.First().message));
                }

                errors = SaveChanges(Language);
                if (errors.Count > 0)
                {
                    return(Json(errors.First().errors.First().message));
                }

                model.Id = record.Id;

                // clear cache
                Response.RemoveOutputCacheItem(Url.Action("WorkFlow", "LeaveType"));

                return(Json("OK," + ((new JavaScriptSerializer()).Serialize(model))));
            }

            return(Json(Models.Utils.ParseFormErrors(ModelState)));
        }