public bool Remove(int id)
        {
            var _hardwareSalaService = new HardwareDeSalaService(_context);
            var _minhaSalaService    = new SalaParticularService(_context);
            var _horarioSalaService  = new HorarioSalaService(_context);
            var _planejamentoService = new PlanejamentoService(_context);

            try
            {
                if (_hardwareSalaService.GetByIdSala(id).Count == 0 && _minhaSalaService.GetByIdSala(id).Count == 0 &&
                    _horarioSalaService.GetByIdSala(id).Count == 0 && _planejamentoService.GetByIdSala(id).Count == 0)
                {
                    var x = _context.Sala.Where(s => s.Id == id).FirstOrDefault();
                    if (x != null)
                    {
                        _context.Remove(x);
                        return(_context.SaveChanges() == 1);
                    }
                }
                else
                {
                    throw new ServiceException("Essa sala nao pode ser removida pois existem outros registros associados a ela!");
                }
            }
            catch (Exception e) { throw e; }

            return(false);
        }
        public bool MonitorarSala(int idUsuario, MonitoramentoModel model)
        {
            if (model.SalaParticular)
            {
                var _salaParticular = new SalaParticularService(_context);
                if (_salaParticular.GetByIdUsuarioAndIdSala(idUsuario, model.SalaId) == null)
                {
                    throw new ServiceException("Houve um problema e o monitoramento não pode ser finalizado, por favor tente novamente mais tarde!");
                }
            }
            else
            {
                var _horarioSalaService = new HorarioSalaService(_context);
                if (!_horarioSalaService.VerificaSeEstaEmHorarioAula(idUsuario, model.SalaId))
                {
                    throw new ServiceException("Você não está no horário reservado para monitorar essa sala!");
                }
            }

            if (!EnviarComandosMonitoramento(model))
            {
                throw new ServiceException("Não foi possível concluir seu monitoramento pois não foi possível estabelecer conexão com a sala!");
            }

            return(Update(model));
        }
        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);
        }
        private bool InsertReservasPlanejamento(PlanejamentoModel planejamento)
        {
            try
            {
                var _horarioSalaService = new HorarioSalaService(_context);
                var dataCorrente        = planejamento.DataInicio;
                var addDays             = 1;

                while (dataCorrente >= planejamento.DataInicio && dataCorrente <= planejamento.DataFim)
                {
                    if (((int)dataCorrente.DayOfWeek) == PlanejamentoViewModel.GetCodigoDia(planejamento.DiaSemana))
                    {
                        _horarioSalaService.Insert(
                            new HorarioSalaModel
                        {
                            HorarioFim    = planejamento.HorarioFim,
                            HorarioInicio = planejamento.HorarioInicio,
                            SalaId        = planejamento.SalaId,
                            UsuarioId     = planejamento.UsuarioId,
                            Objetivo      = planejamento.Objetivo,
                            Planejamento  = planejamento.Id,
                            Situacao      = HorarioSalaModel.SITUACAO_APROVADA,
                            Data          = dataCorrente
                        });

                        addDays = 7;
                    }

                    dataCorrente = dataCorrente.AddDays(addDays);
                }

                return(true);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        public bool Remove(int id, bool excluiReservas)
        {
            using (var transaction = _context.Database.BeginTransaction())
            {
                try
                {
                    var _reservaContext = new HorarioSalaService(_context);

                    if (excluiReservas)
                    {
                        _reservaContext.RemoveByIdPlanejamento(id);
                    }
                    else
                    {
                        _reservaContext.UpdateColumnPlanejamentoForNull(id);
                    }

                    var x = _context.Planejamento.Where(th => th.Id == id).FirstOrDefault();
                    if (x != null)
                    {
                        _context.Remove(x);
                        var save = _context.SaveChanges() == 1 ? true : false;
                        transaction.Commit();
                        return(save);
                    }
                    else
                    {
                        throw new ServiceException("Algo deu errado, tente novamente em alguns minutos.");
                    }
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw e;
                }
            }
        }