public ActionResult Login(LoginModel model)
        {
            try
            {
//                LogHelper.Info("Login model: " + model.LoginID);
                if (string.IsNullOrEmpty(model.LoginID) || string.IsNullOrEmpty(model.Password))
                {
                    ViewBag.ErrorMessage = "Please input all field!!";
                    return(View(model));
                }
                var user = ValidateModel(model);
                if (user != null)
                {
                    var logHistoryRepo = new LogHistoryRepository();

                    var logHistory = new LogHistoryModel()
                    {
                        UserId    = model.LoginID,
                        PcBrowser = Request.Browser.Browser,
                        IpAddress = Util.IP2INT(GetIpAddress())
                    };
                    logHistoryRepo.InsertLog(logHistory);

                    var status = AppDictionary.UserStatus.FirstOrDefault(a => a.Value == user.Status.ToString()).Key;
                    if (status == "New" || status == "Reset")
                    {
                        ViewBag.Status = "ChangePassword";
                        return(View(model));
                    }
                    SetAuthorized(user, model.Remember);
                    if (Session["CurUrl"] != null)
                    {
                        return(Redirect(Session["CurUrl"].ToString()));
                    }
                    return(RedirectToAction("Index", "Home"));
                }
                ViewBag.ErrorMessage = "Login ID & Password is incorrect!";
            }
            catch (Exception ex)
            {
                LogHelper.Error("AnonymousController: UserId: " + model.LoginID + " Exception: " + ex.InnerException.Message);
                return(null);
            }
            return(View(model));
        }
        public ActionResult GetByDeptId(int deptId, string subject, string dateFrom, string dateTo, string sortdatafield, string sortorder, int pagesize, int pagenum)
        {
            var fromDate = string.IsNullOrEmpty(dateFrom) ? DateTime.MinValue : (new DateTime(int.Parse(dateFrom.Split('.')[0]), int.Parse(dateFrom.Split('.')[1]), int.Parse(dateFrom.Split('.')[2])));
            var toDate   = string.IsNullOrEmpty(dateTo) ? DateTime.MaxValue : ((new DateTime(int.Parse(dateTo.Split('.')[0]), int.Parse(dateTo.Split('.')[1]), int.Parse(dateTo.Split('.')[2]))));

            var repo  = new LogHistoryRepository();
            var list  = repo.GetAll(string.IsNullOrEmpty(subject) ? null : subject, deptId, fromDate, toDate);
            var total = list.Count();

            if (!string.IsNullOrEmpty(sortorder))
            {
                list = sortorder == "asc" ? list.OrderBy(o => o.GetType().GetProperty(sortdatafield).GetValue(o, null)) :
                       list.OrderByDescending(o => o.GetType().GetProperty(sortdatafield).GetValue(o, null));
            }
            list = list.Skip(pagesize * pagenum).Take(pagesize);

            var result = new
            {
                TotalRows = total,
                Rows      = list
            };

            return(Json(result, JsonRequestBehavior.AllowGet));
        }
        public void saveCity(City entity)
        {
            List<Commons.LogHistory> logs = null;
            Lib.Repositories.LogHistoryRepository log = new LogHistoryRepository(this.ActiveUser);

            try
            {
                context = new FDTContext();

                if (entity.Id == 0)
                {
                    context.Cities.Add(entity);
                }
                else
                {
                    //Recuperando a cidade do banco
                    var city = getCityInstanceById(entity.Id);

                    //salva o log.
                    //logs = log.getLogsHistory(period, entity, ActiveUser, "Id", "Name", Enumerations.EntityType.Period);

                    city.Name = entity.Name;
                    city.StateId = entity.StateId;
                }

                context.SaveChanges();

                if (logs != null)
                {
                    log.saveLogs(logs);
                }
            }
            catch (DbEntityValidationException ex)
            {
                //Adiciona na lista de erros os erros de DataAnnotation
                addErrorMessage(ex);
            }
            catch (Exception ex)
            {
                Log.ErrorLog.saveError("Lib.Repositories.StateCityRepository.saveCity", ex);
                throw new Exception("Lib.Repositories.StateCityRepository.saveCity - " + ex.Message, ex);
            }
        }
        /// <summary>
        /// Salva uma entidade
        /// </summary>
        /// <param name="entity">Entidade</param>
        public void save(Period entity)
        {
            List<Commons.LogHistory> logs = null;
            Lib.Repositories.LogHistoryRepository log = new LogHistoryRepository(this.ActiveUser);

            try
            {
                context = new FDTContext();

                validatePeriod(entity);

                if (entity.Id == 0)
                {
                    context.Periods.Add(entity);
                }
                else
                {
                    //Recuperando o questionário do banco
                    var period = context.Periods.Where(e => e.Id == entity.Id).FirstOrDefault();

                    //salva o log.
                    //logs = log.getLogsHistory(period, entity, ActiveUser, "Id", "Name", Enumerations.EntityType.Period);
                    period.Name = entity.Name;
                    period.FinalDate = entity.FinalDate;
                    period.InitialDate = entity.InitialDate;
                    period.ConvocationInitialDate = entity.ConvocationInitialDate;
                    period.ConvocationFinalDate = entity.ConvocationFinalDate;
                    period.Open = entity.Open;
                    period.Published = entity.Published;
                }

                context.SaveChanges();

                if (logs != null)
                {
                    log.saveLogs(logs);
                }
            }
            catch (DbEntityValidationException ex)
            {
                //Adiciona na lista de erros os erros de DataAnnotation
                addErrorMessage(ex);
            }
            catch (Exception ex)
            {
                Log.ErrorLog.saveError("Lib.Repositories.PeriodRepository.save", ex);
                throw new Exception("Lib.Repositories.PeriodRepository.save - " + ex.Message, ex);
            }
        }
        /// <summary>
        /// Salva uma entidade
        /// </summary>
        /// <param name="entity">Entidade</param>
        public void save(ResponseForm entity, bool submitForm = true)
        {
            List<Commons.LogHistory> logs = null;
            Lib.Repositories.LogHistoryRepository log = new LogHistoryRepository(this.ActiveUser);

            try
            {
                context = new FDTContext();

                if (entity.Id == 0)
                {
                    if (this.ActiveUser.UserTypeEnum == Enumerations.UserType.Entity)
                    {
                        //Cria uma submissão com status submitted
                        if (submitForm)
                        {
                            if (entity.Submits == null)
                                entity.Submits = new List<Submit>();
                            entity.Submits.Add(new Submit()
                            {
                                Date = DateTime.Now,
                                Status = (int)Lib.Enumerations.SubmitStatus.Submitted,
                                Observation = String.Empty
                            });
                        }
                    }

                    context.ResponseForms.Add(entity);
                }
                else
                {
                    var entityAux = context.ResponseForms.Include("Answers").Include("Submits").Where(e => e.Id == entity.Id).FirstOrDefault();
                    entityAux.CityId = entity.CityId;

                    if (entityAux != null)
                    {
                        //Atualiza apenas as notas e observações das perguntas\
                        entityAux.Answers.ForEach(ans =>
                        {
                            var answerUpdated = entity.Answers.Where(an => an.Id == ans.Id).FirstOrDefault();
                            if (answerUpdated != null)
                            {
                                ans.Observation = answerUpdated.Observation;
                                ans.Score = answerUpdated.Score;
                            }
                        });
                    }

                    if (this.ActiveUser.UserTypeEnum == Enumerations.UserType.Entity)
                    {
                        //Cria uma submissão com status submitted
                        if (submitForm)
                        {
                            if (entityAux.Submits == null)
                                entityAux.Submits = new List<Submit>();
                            entityAux.Submits.Add(new Submit()
                            {
                                Date = DateTime.Now,
                                Status = (int)Lib.Enumerations.SubmitStatus.Submitted,
                                Observation = String.Empty
                            });
                        }
                    }

                    //Adiciona as novas questões se houverem
                    entityAux.Answers.AddRange(entity.Answers.Where(a => a.Id == 0).ToList());
                }

                context.SaveChanges();

                //refaz os cálculos e salva novamente.
                var rf = getInstanceById(entity.Id);
                rf.calculateTotalScore();

                context.SaveChanges();

                if (logs != null)
                {
                    log.saveLogs(logs);
                }
            }
            catch (DbEntityValidationException ex)
            {
                //Adiciona na lista de erros os erros de DataAnnotation
                addErrorMessage(ex);
            }
            catch (Exception ex)
            {
                Log.ErrorLog.saveError("Lib.Repositories.ResponseFormRepository.save", ex);
                throw new Exception("Lib.Repositories.ResponseFormRepository.save - " + ex.Message, ex);
            }
        }
        /// <summary>
        /// Salva uma entidade
        /// </summary>
        /// <param name="entity">Entidade</param>
        public void save(Entities.User entity)
        {
            List<Commons.LogHistory> logs = null;
            Lib.Repositories.LogHistoryRepository log = new LogHistoryRepository(this.ActiveUser);

            try
            {
                context = new FDTContext();

                //Caso um usuário seja editado ou criado com o tipo de entidades, o usuario ativo deve ser do tipo administrador master ou administrador, caso contrário lançar exceção
                if (entity.UserTypeEnum == Enumerations.UserType.Entity)
                {
                    if (this.ActiveUser.UserTypeEnum != Enumerations.UserType.Admin && this.ActiveUser.UserTypeEnum != Enumerations.UserType.Master && this.ActiveUser.Id != entity.Id && this.ActiveUser.UserTypeEnum != Enumerations.UserType.Site)
                        throw new DbEntityValidationException(String.Format(Resources.Messages.entity_users_update_or_create_not_allowed_by, this.ActiveUser.UserType));
                }

                if (entity.Id == 0)
                {
                    //Não podem ser inseridos novos usuarios do tipo administrador master
                    if (entity.UserTypeEnum == Enumerations.UserType.Master)
                        throw new DbEntityValidationException(Resources.Messages.master_admin_creation_not_allowed);

                    //Caso o usuário novo seja um administrador, apenas outro administrador/master deve ser o criador
                    if (entity.UserTypeEnum == Enumerations.UserType.Admin)
                    {
                        if (this.ActiveUser.UserTypeEnum != Enumerations.UserType.Master)
                            throw new DbEntityValidationException(Resources.Messages.just_master_admin_can_be_create_admin_users);
                    }

                    //Caso um usuário do tipo outros seja criado, o usuário ativo deve ser do tipo SITE, ADMINISTRADOR ou ADM MASTER
                    if (entity.UserTypeEnum == Enumerations.UserType.Others)
                    {
                        if (this.ActiveUser.UserTypeEnum != Enumerations.UserType.Site && this.ActiveUser.UserTypeEnum != Enumerations.UserType.Admin && this.ActiveUser.Id != entity.Id && this.ActiveUser.UserTypeEnum != Enumerations.UserType.Master)
                            throw new DbEntityValidationException(String.Format(Resources.Messages.other_users_creation_not_allowed_by, this.ActiveUser.UserType));
                    }

                    ////Se o usuário for do tipo entidade, cria a entity com o nome do usuário
                    //if (entity.UserTypeEnum == Lib.Enumerations.UserType.Entity)
                    //{
                    //    entity.Entity = new Lib.Entities.Entity();
                    //    entity.Entity.Name = entity.Name;
                    //}

                    context.Users.Add(entity);
                }
                else
                {
                    //Caso um usuário do tipo outros seja atualizado, o usuário ativo deve ser do tipo ADMINISTRADOR, ADM MASTER ou seja ele mesmo, caso contrário lançar exceção.
                    //Adicionado o usuario ativo do tipo SITE tbm.
                    if (entity.UserTypeEnum == Enumerations.UserType.Others)
                    {
                        if (this.ActiveUser.UserTypeEnum != Enumerations.UserType.Admin && this.ActiveUser.UserTypeEnum != Enumerations.UserType.Master && this.ActiveUser.Id != entity.Id && this.ActiveUser.UserTypeEnum != Enumerations.UserType.Site)
                            throw new DbEntityValidationException(String.Format(Resources.Messages.other_users_update_not_allowed_by, this.ActiveUser.UserType));

                    }

                    //Recuperando o usuário do banco
                    var user = getInstanceById(entity.Id); //context.BaseForms.Include("BaseBlocks").Include("Period").Where(e => e.Id == entity.Id).FirstOrDefault();
                    user.Name = entity.Name;
                    user.Email = entity.Email;
                    user.Thumb = entity.Thumb;
                    user.Mime = entity.Mime;
                    user.Active = entity.Active;
                    user.Password = entity.Password;
                    user.Organization = entity.Organization;
                    user.TermsOfUse = entity.TermsOfUse;
                    user.AcceptionTermsDate = entity.AcceptionTermsDate;

                    user.Address = entity.Address;
                    user.Area = entity.Area;
                    user.CityId = entity.CityId;
                    user.CNPJ = entity.CNPJ;
                    user.ContactName = entity.ContactName;
                    user.Nature = entity.Nature;
                    user.Neighborhood = entity.Neighborhood;
                    user.Network = entity.Network;
                    user.Number = entity.Number;
                    user.Phone = entity.Phone;
                    user.Range = entity.Range;
                    user.Region = entity.Region;
                    user.WebSite = entity.WebSite;
                    user.ZipCode = entity.ZipCode;
                    user.ContactEmail = entity.ContactEmail;

                    user.Network = false;

                    if (user.UserTypeEnum == Enumerations.UserType.Entity)
                    {
                        if (!entity.Network)
                        {
                            //Não é credenciado
                            user.Network = false;
                            user.NetworkApprovedById = null;
                            user.NetworkApproved = false;
                        }
                        else
                        {
                            //É credenciada
                            user.Network = entity.Network;

                            if (!user.NetworkApproved)
                            {
                                if (entity.NetworkApproved)
                                {
                                    //foi aprovado
                                    user.NetworkApproved = entity.NetworkApproved;
                                    user.NetworkApprovedById = this.ActiveUser.Id;
                                }
                                else
                                {
                                    //Continua não aprovado
                                    user.NetworkApproved = false;
                                    user.NetworkApprovedById = null;
                                }
                            }
                            else
                            {
                                if (!entity.NetworkApproved)
                                {
                                    //Foi desaprovado
                                    user.NetworkApproved = false;
                                    user.NetworkApprovedById = null;
                                }
                            }

                        }
                    }

                    ////salva o log.
                    //logs = log.getLogsHistory(baseForm, entity, ActiveUser, "Id", "Name", Enumerations.EntityType.BaseForm);
                }

                context.SaveChanges();

                if (logs != null)
                {
                    log.saveLogs(logs);
                }
            }
            catch (DbEntityValidationException ex)
            {
                //Adiciona na lista de erros os erros de DataAnnotation
                addErrorMessage(ex);
            }
            catch (Exception ex)
            {
                Log.ErrorLog.saveError("Lib.Repositories.UserRepository.save", ex);
                throw new Exception("Lib.Repositories.UserRepository.save - " + ex.Message, ex);
            }
        }