private StateCityRepository()
 {
     //this.context = context;
     context = new FDTContext();
 }
        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);
            }
        }
 public StateCityRepository(Lib.Entities.User activeUser)
 {
     this.ActiveUser = activeUser;
     context = new FDTContext();
 }
        /// <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);
            }
        }
 private PeriodRepository()
 {
     //this.context = context;
     context = new FDTContext();
 }
        /// <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);
            }
        }
 public PeriodRepository(Lib.Entities.User activeUser)
 {
     this.ActiveUser = activeUser;
     context = new FDTContext();
 }
 private ResponseFormRepository()
 {
     //this.context = context;
     context = new FDTContext();
 }
 public ResponseFormRepository(Lib.Entities.User activeUser)
 {
     this.ActiveUser = activeUser;
     context = new FDTContext();
 }
        /// <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);
            }
        }
 private UserRepository()
 {
     //this.context = context;
     context = new FDTContext();
 }
        /// <summary>
        /// Salva uma entidade do tipo master
        /// </summary>
        /// <param name="entity">Entidade</param>
        public void createUserMaster(Entities.User entity)
        {
            try
            {
                context = new FDTContext();

                if (entity.Id == 0)
                {
                    context.Users.Add(entity);
                    context.SaveChanges();
                }
            }
            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);
            }
        }