public void updateCollaborators(List<long> userIdsToAdd, List<long> userIdsToRemove, long periodId, long cityId)
        {
            var group = context.Groups.Include("Collaborators").Where(c => c.CityId == cityId && c.PeriodId == periodId).FirstOrDefault();
            if (group != null)
            {
                //Removendo os calaboradores
                group.Collaborators.RemoveAll(c => userIdsToRemove.Contains(c.Id));

                //Adicionando os colaboradores
                userIdsToAdd.ForEach(uid =>
                    {
                        var user = context.Users.Where(u => u.Id == uid).FirstOrDefault();

                        if (user != null)
                        {
                            if (user.isEntityAccreditedAndAppoved())
                            {
                                group.Collaborators.Add(user);
                            }
                        }
                    });
            }
            else
            {
                var newGroup = new Group()
                {
                    CityId = cityId,
                    PeriodId = periodId,
                    ResponsableId = null,
                    Collaborators = new List<User>()
                };

                //Adicionando os colaboradores
                userIdsToAdd.ForEach(uid =>
                {
                    var user = context.Users.Where(u => u.Id == uid).FirstOrDefault();

                    if (user != null)
                    {
                        if (user.isEntityAccreditedAndAppoved())
                        {
                            newGroup.Collaborators.Add(user);
                        }
                    }
                });

                //Grupo não existe, cria um novo
                context.Groups.Add(newGroup);
            }

            context.SaveChanges();
        }
        /// <summary>
        /// Aprova a solicitação de responabilidade ou colaboração de uma determinada entidade para um município
        /// </summary>
        /// <param name="userId">Código do usuário (Entidade credenciada)</param>
        /// <param name="periodId">Código do Período a qual a entidade será colaborada ou responsável</param>
        /// <param name="cityId">Código do município</param>
        /// <param name="requestType">Se responsável ou colaboradora pelo município</param>
        public bool approveRequest(long userId, long periodId, long cityId, Enumerations.RequestType requestType)
        {
            try
            {
                var user = context.Users.Where(u => u.Id == userId).FirstOrDefault();

                if (user != null)
                {
                    //Verifica se a entidade é credenciada e aprovada
                    if (user.isEntityAccreditedAndAppoved())
                    {
                        if (requestType == Enumerations.RequestType.RESPONSABLE)
                        {
                            var group = context.Groups.Where(c => c.CityId == cityId && c.PeriodId == periodId).FirstOrDefault();
                            if (group != null)
                            {
                                //Alterando o responsável pelo o usuário
                                group.ResponsableId = userId;

                            }
                            else
                            {
                                //Grupo não existe, cria um novo
                                context.Groups.Add(new Group()
                                {
                                    CityId = cityId,
                                    PeriodId = periodId,
                                    ResponsableId = userId
                                });
                            }

                            context.SaveChanges();
                            return true;
                        }
                        else if (requestType == Enumerations.RequestType.COLLABORATOR)
                        {
                            var group = context.Groups.Include("Collaborators").Where(c => c.CityId == cityId && c.PeriodId == periodId).FirstOrDefault();
                            if (group != null)
                            {
                                //Alterando o responsável pelo o usuário
                                group.Collaborators.Add(user);

                            }
                            else
                            {
                                var newGroup = new Group()
                                {
                                    CityId = cityId,
                                    PeriodId = periodId,
                                    ResponsableId = null,
                                    Collaborators = new List<User>()
                                };

                                newGroup.Collaborators.Add(user);

                                //Grupo não existe, cria um novo
                                context.Groups.Add(newGroup);
                            }

                            context.SaveChanges();
                            return true;
                        }
                    }
                }
                return false;
            }
            catch (DbEntityValidationException ex)
            {
                //Adiciona na lista de erros os erros de DataAnnotation
                addErrorMessage(ex);
            }
            catch (Exception ex)
            {
                Log.ErrorLog.saveError("Lib.Repositories.UserRepository.approveRequest", ex);
                throw new Exception("Lib.Repositories.UserRepository.approveRequest - " + ex.Message, ex);
            }

            return false;
        }