public HardwareDeSalaModel GetByIp(string ip, int idUsuario)
        {
            var _usuarioOrganizacao = new UsuarioOrganizacaoService(_context);
            var _blocoService       = new BlocoService(_context);
            var _salaService        = new SalaService(_context);

            var hardware = _context.Hardwaredesala.Where(h => h.Ip == ip).Select(h => new HardwareDeSalaModel {
                Id = h.Id, MAC = h.Mac, SalaId = h.Sala, TipoHardwareId = h.TipoHardware, Ip = h.Ip, Uuid = h.Uuid
            }).FirstOrDefault();

            if (hardware != null)
            {
                var bloco = _blocoService.GetById(_salaService.GetById(hardware.SalaId).BlocoId);
                var orgs  = _usuarioOrganizacao.GetByIdUsuario(idUsuario);

                foreach (var item in orgs)
                {
                    if (bloco.OrganizacaoId == item.OrganizacaoId)
                    {
                        return(hardware);
                    }
                }
            }

            return(null);
        }
        public bool Remove(int id)
        {
            var _blocoService = new BlocoService(_context);
            var _usuarioOrganizacaoService = new UsuarioOrganizacaoService(_context);

            try
            {
                if (_blocoService.GetByIdOrganizacao(id).Count > 0 && _usuarioOrganizacaoService.GetByIdOrganizacao(id).Count > 0)
                {
                    throw new ServiceException("Organização não pode ser removida pois ainda existem usuários ou blocos associados a ela!");
                }

                var x = _context.Organizacao.Where(o => o.Id == id).FirstOrDefault();
                if (x != null)
                {
                    _context.Remove(x);
                    return(_context.SaveChanges() == 1 ? true : false);
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            return(false);
        }
        public List <OrganizacaoModel> GetByIdUsuario(int idUsuario)
        {
            var _usuarioOrgService = new UsuarioOrganizacaoService(_context);
            var query = (from uo in _usuarioOrgService.GetByIdUsuario(idUsuario)
                         join org in GetAll() on uo.OrganizacaoId equals org.Id
                         select new OrganizacaoModel
            {
                Id = org.Id,
                Cnpj = org.Cnpj,
                RazaoSocial = org.RazaoSocial,
            }).ToList();

            return(query);
        }
        public List <BlocoModel> GetAllByIdOrganizacao(int idUsuario)
        {
            var _usuarioOrganizacao = new UsuarioOrganizacaoService(_context);

            var query = (from bl in GetAll()
                         join uo in _usuarioOrganizacao.GetByIdUsuario(idUsuario) on bl.OrganizacaoId equals uo.OrganizacaoId
                         select new BlocoModel
            {
                Id = bl.Id,
                Titulo = bl.Titulo,
                OrganizacaoId = bl.OrganizacaoId
            }).ToList();

            return(query);
        }
        public bool Remove(int id)
        {
            var plan       = new PlanejamentoService(_context);
            var particular = new SalaParticularService(_context);
            var horarios   = new HorarioSalaService(_context);
            var usuarioOrg = new UsuarioOrganizacaoService(_context);


            var x = _context.Usuario.Where(u => u.Id == id).FirstOrDefault();

            if (x != null)
            {
                //atualizar depois para escolher da qual org
                //removendo tudo associado ao usuario, pois na tela de remover irá aparecer se tem itens associados
                // se o usuario concordar, obviamente irá excluir tudo

                //planejamentos
                plan.RemoveByUsuario(x.Id);

                //salas particulares
                particular.RemoveByUsuario(x.Id);

                //reservas
                horarios.RemoveByUsuario(x.Id);

                // associacao
                usuarioOrg.RemoveByUsuario(x.Id);
                using (var transaction = _context.Database.BeginTransaction())
                {
                    try
                    {
                        _context.Remove(x);
                        transaction.Commit();
                        return(_context.SaveChanges() == 1 ? true : false);
                    }
                    catch (Exception e)
                    {
                        transaction.Rollback();
                        throw e;
                    }
                }
            }
            else
            {
                new ServiceException("Houve um erro ao remover o usuário!");
            }
            return(false);
        }
        public UsuarioViewModel Insert(UsuarioViewModel entity)
        {
            var usuario = GetByCpf(entity.UsuarioModel.Cpf);

            if (usuario != null)
            {
                throw new ServiceException("Já existe um cpf cadastrado no sistema.");
            }

            using (var transaction = _context.Database.BeginTransaction())
            {
                try
                {
                    entity.UsuarioModel.TipoUsuarioId = entity.TipoUsuarioModel.Id;

                    var usuarioAdd = SetEntity(entity.UsuarioModel);
                    _context.Add(usuarioAdd);
                    _context.SaveChanges();
                    _context.Entry(usuarioAdd).State = EntityState.Detached;
                    entity.UsuarioModel.Id           = usuarioAdd.Id;

                    IUsuarioOrganizacaoService usuarioOrgService = new UsuarioOrganizacaoService(_context);

                    usuarioOrgService.Insert
                    (
                        new UsuarioOrganizacaoModel
                    {
                        Id            = entity.OrganizacaoModel.Id,
                        OrganizacaoId = entity.OrganizacaoModel.Id,
                        UsuarioId     = entity.UsuarioModel.Id
                    }
                    );
                    _context.SaveChanges();
                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw e;
                }
            }
            return(entity);
        }
        public List <UsuarioModel> GetByIdOrganizacao(int id)
        {
            var _usuarioOrganizacaoService = new UsuarioOrganizacaoService(_context);

            var usuarioOrganizacao = _usuarioOrganizacaoService.GetByIdOrganizacao(id);
            var todosUsuarios      = GetAll();

            var query = (from usuario in todosUsuarios
                         join usuarioOrg in usuarioOrganizacao
                         on usuario.Id equals usuarioOrg.UsuarioId
                         select new UsuarioModel
            {
                Id = usuario.Id,
                Cpf = usuario.Cpf,
                Nome = usuario.Nome,
                DataNascimento = usuario.DataNascimento,
                TipoUsuarioId = usuario.TipoUsuarioId
            }).ToList();

            return(query);
        }