public ActionResult Create(SalaAuxModel salaModel)
        {
            var usuario = _usuarioService.RetornLoggedUser((ClaimsIdentity)User.Identity);

            ViewBag.Organizacoes = _organizacaoService.GetByIdUsuario(usuario.UsuarioModel.Id);
            ViewBag.BlocoList    = _blocoService.GetByIdOrganizacao(salaModel.OrganizacaoId);
            ViewBag.TipoHardware = _tipoHardwareService.GetAll();

            try
            {
                if (ModelState.IsValid)
                {
                    if (_salaService.InsertSalaWithHardwares(salaModel, usuario.UsuarioModel.Id))
                    {
                        TempData["mensagemSucesso"] = "Sala inserida com sucesso!"; return(View());
                    }
                    else
                    {
                        TempData["mensagemErro"] = "Houve um problema ao inserir sala!";
                    }
                }
            }
            catch (ServiceException se)
            {
                TempData["mensagemErro"] = se.Message;
            }
            return(View(salaModel));
        }
        public ActionResult Edit(int id, SalaAuxModel salaModel)
        {
            ViewBag.BlocoList    = _blocoService.GetByIdOrganizacao(salaModel.OrganizacaoId);
            ViewBag.Organizacoes = _organizacaoService.GetByIdUsuario(_usuarioService.RetornLoggedUser((ClaimsIdentity)User.Identity).UsuarioModel.Id);
            try
            {
                if (ModelState.IsValid)
                {
                    if (_salaService.Update(new SalaModel {
                        Id = salaModel.Sala.Id, BlocoId = salaModel.Sala.BlocoId, Titulo = salaModel.Sala.Titulo
                    }))
                    {
                        TempData["mensagemSucesso"] = "Sala atualizada com sucesso!";
                    }
                    else
                    {
                        TempData["mensagemErro"] = "Houve um problema ao atualizar sala, tente novamente em alguns minutos!";
                    }
                }
            }
            catch (ServiceException se)
            {
                TempData["mensagemErro"] = se.Message;
            }

            return(View(salaModel));
        }
        public bool InsertSalaWithHardwares(SalaAuxModel sala, int idUsuario)
        {
            using (var transaction = _context.Database.BeginTransaction())
            {
                try
                {
                    var salaInserida = Insert(new SalaModel {
                        Id = sala.Sala.Id, Titulo = sala.Sala.Titulo, BlocoId = sala.Sala.BlocoId
                    });
                    if (salaInserida == null)
                    {
                        throw new ServiceException("Houve um problema ao cadastrar sala, tente novamente em alguns minutos!");
                    }

                    var _monitoramentoService = new MonitoramentoService(_context);
                    _monitoramentoService.Insert(new MonitoramentoModel {
                        Luzes = false, ArCondicionado = false, SalaId = salaInserida.Id
                    });

                    if (sala.HardwaresSala.Count > 0)
                    {
                        var _hardwareDeSalaService = new HardwareDeSalaService(_context);

                        foreach (var item in sala.HardwaresSala)
                        {
                            if (_hardwareDeSalaService.GetByMAC(item.MAC, idUsuario) != null)
                            {
                                throw new ServiceException("Já existe um dispositivos com o endereço MAC " + item.MAC + " informado, corrija e tente novamente!");
                            }

                            if (item.TipoHardwareId.Id == TipoHardwareModel.CONTROLADOR_DE_SALA && _hardwareDeSalaService.GetByIp(item.Ip, idUsuario) != null)
                            {
                                throw new ServiceException("Já existe um dispositivos com o endereço IP  " + item.Ip + "  informado, corrija e tente novamente!");
                            }

                            _hardwareDeSalaService.Insert(new HardwareDeSalaModel {
                                MAC = item.MAC, SalaId = salaInserida.Id, TipoHardwareId = item.TipoHardwareId.Id, Ip = item.Ip
                            }, idUsuario);
                        }

                        transaction.Commit();
                        return(true);
                    }
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    throw;
                }
            }

            return(true);
        }