public ActionResult DeleteFlexForm(int id)
        {
            List <Error> errors = new List <Error>();
            DataSource <FlexFormViewModel> source = new DataSource <FlexFormViewModel>();

            string message = "OK";

            FlexForm flexForm = _hrUnitOfWork.Repository <FlexForm>().Where(a => a.Id == id).FirstOrDefault();

            AutoMapper(new Models.AutoMapperParm
            {
                Source     = flexForm,
                ObjectName = "FlexForm",
                Transtype  = TransType.Delete
            });

            _hrUnitOfWork.PagesRepository.Remove(flexForm);

            source.Errors = SaveChanges(Language);

            if (source.Errors.Count() > 0)
            {
                return(Json(source));
            }
            else
            {
                return(Json(message));
            }
        }
        public ActionResult FlexFormDetails(FlexFormViewModel model)
        {
            List <Error> errors = new List <Error>();

            if (ModelState.IsValid)
            {
                if (ServerValidationEnabled)
                {
                    errors = _hrUnitOfWork.CompanyRepository.CheckForm(new CheckParm
                    {
                        CompanyId  = CompanyId,
                        ObjectName = "FlexForm",
                        TableName  = "FlexForms",
                        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)));
                    }
                }
            }
            else
            {
                return(Json(Models.Utils.ParseFormErrors(ModelState)));
            }


            FlexForm flexForm = new FlexForm();

            if (model.Id == 0) //Add
            {
                AutoMapper(new AutoMapperParm {
                    ObjectName = "FlexForm", Source = model, Destination = flexForm, Version = Convert.ToByte(Request.Form["version"]), Transtype = TransType.Insert
                });
                flexForm.Name        = model.FormName;
                flexForm.CreatedUser = User.Identity.Name;
                flexForm.CreatedTime = DateTime.Now;

                _hrUnitOfWork.PagesRepository.Add(flexForm);
            }
            else //Update
            {
                flexForm = _hrUnitOfWork.Repository <FlexForm>().Where(f => f.Id == model.Id).FirstOrDefault();
                AutoMapper(new AutoMapperParm {
                    ObjectName = "FlexForm", Source = model, Destination = flexForm, Transtype = TransType.Update
                });
                flexForm.Name         = model.FormName;
                flexForm.ModifiedUser = User.Identity.Name;
                flexForm.ModifiedTime = DateTime.Now;

                _hrUnitOfWork.PagesRepository.Attach(flexForm);
                _hrUnitOfWork.PagesRepository.Entry(flexForm).State = EntityState.Modified;
            }

            //FS
            List <FlexFormFS>     fieldSets = _hrUnitOfWork.Repository <FlexFormFS>().Where(f => f.FlexformId == model.Id).ToList();
            List <int>            fsIds     = fieldSets.Select(f => f.Id).ToList();
            List <FlexFormColumn> columns   = _hrUnitOfWork.Repository <FlexFormColumn>().Where(f => fsIds.Contains(f.FlexFSId)).ToList();

            //FieldSets
            foreach (var fs in model.FieldSets)
            {
                FlexFormFS flexSet = fieldSets.Where(f => f.Id == fs.Id).FirstOrDefault();
                if (fs.Id == 0) //Add
                {
                    flexSet = new FlexFormFS();
                    AutoMapper(new AutoMapperParm {
                        Source = fs, Destination = flexSet
                    });
                    flexSet.FSOrder     = fs.order;
                    flexSet.CreatedUser = User.Identity.Name;
                    flexSet.CreatedTime = DateTime.Now;
                    flexSet.Flexform    = flexForm;

                    _hrUnitOfWork.PagesRepository.Add(flexSet);
                }
                else //Update
                {
                    fs.FlexformId = model.Id;

                    AutoMapper(new AutoMapperParm {
                        Source = fs, Destination = flexSet
                    });
                    flexSet.FSOrder      = fs.order;
                    flexSet.ModifiedUser = User.Identity.Name;
                    flexSet.ModifiedTime = DateTime.Now;

                    _hrUnitOfWork.PagesRepository.Attach(flexSet);
                    _hrUnitOfWork.PagesRepository.Entry(flexSet).State = EntityState.Modified;
                }

                //Columns
                foreach (var fc in fs.Columns)
                {
                    FlexFormColumn flexCol = columns.Where(f => f.Id == fc.Id).FirstOrDefault();
                    if (fc.Id == 0) //Add
                    {
                        flexCol = new FlexFormColumn();
                        AutoMapper(new AutoMapperParm {
                            Source = fc, Destination = flexCol
                        });
                        flexCol.CreatedUser = User.Identity.Name;
                        flexCol.CreatedTime = DateTime.Now;
                        flexCol.FlexformFS  = flexSet;

                        _hrUnitOfWork.PagesRepository.Add(flexCol);
                    }
                    else //Update
                    {
                        fc.FlexFSId = fs.Id;
                        AutoMapper(new AutoMapperParm {
                            Source = fc, Destination = flexCol
                        });
                        flexCol.ModifiedUser = User.Identity.Name;
                        flexCol.ModifiedTime = DateTime.Now;

                        _hrUnitOfWork.PagesRepository.Attach(flexCol);
                        _hrUnitOfWork.PagesRepository.Entry(flexCol).State = EntityState.Modified;
                    }
                }
            }

            errors = SaveChanges(Language);

            var message = "OK";

            if (errors.Count > 0)
            {
                message = errors.First().errors.First().message;
            }
            else
            {
                message += "," + ((new JavaScriptSerializer()).Serialize(flexForm));
            }

            return(Json(message));
        }