public async Task <AtivoViewDto> PesquisarAtivoPorIncAsync(int incAtivo)
        {
            try
            {
                AtivoViewDto result = new AtivoViewDto();
                result = await _context.Ativos
                         .Where(ati => ati.IncAtivo == incAtivo)
                         .Include(ati => ati.SetorId)
                         .DefaultIfEmpty()
                         .Select(ati => new AtivoViewDto
                {
                    Id                        = ati.Id,
                    IncAtivo                  = ati.IncAtivo,
                    Nome                      = ati.Nome,
                    Descricao                 = ati.Descricao,
                    DataHoraCadastro          = ati.DataHoraCadastro,
                    DataHoraUltimaAtualizacao = ati.DataHoraUltimaAtualizacao,
                    StatusAtivo               = ati.StatusAtivo.Value,
                    CriticidadeAtivo          = ati.CriticidadeAtivo.Value,
                    DescricaoStatusAtivo      = result.descricaoStatusAtivoEnum(ati.StatusAtivo.Value.ToString()),
                    DescricaoCriticidadeAtivo = result.descricaoCriticidadeAtivoEnum(ati.CriticidadeAtivo.Value.ToString()),
                    SetorId                   = Guid.Parse(ati.SetorId.ToString()),
                    DescricaoSetor            = ati.Setor.IncSetor.ToString() + " - " + ati.Setor.Nome,
                }).SingleAsync();

                return(result);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public async Task <List <AtivoViewDto> > PesquisarAtivosPorSetorAsync(Guid setorId)
        {
            try
            {
                AtivoViewDto        aux         = new AtivoViewDto();
                List <AtivoViewDto> listaResult = await _context.Ativos
                                                  .Where(ati => ati.SetorId.Equals(setorId))
                                                  .Include(ativ => ativ.SetorId)
                                                  .DefaultIfEmpty()
                                                  .Select(ati => new AtivoViewDto
                {
                    Id                        = ati.Id,
                    IncAtivo                  = ati.IncAtivo,
                    Nome                      = ati.Nome,
                    Descricao                 = ati.Descricao,
                    DataHoraCadastro          = ati.DataHoraCadastro,
                    DataHoraUltimaAtualizacao = ati.DataHoraUltimaAtualizacao,
                    StatusAtivo               = ati.StatusAtivo.Value,
                    CriticidadeAtivo          = ati.CriticidadeAtivo.Value,
                    DescricaoStatusAtivo      = aux.descricaoStatusAtivoEnum(ati.StatusAtivo.Value.ToString()),
                    DescricaoCriticidadeAtivo = aux.descricaoCriticidadeAtivoEnum(ati.CriticidadeAtivo.Value.ToString()),
                    SetorId                   = Guid.Parse(ati.SetorId.ToString()),
                    DescricaoSetor            = ati.Setor.IncSetor.ToString() + " - " + ati.Setor.Nome,
                }).ToListAsync();

                return(listaResult);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public async Task <ActionResult> ExcluirAtivo(Guid ativoId)
        {
            if (!ModelState.IsValid)
            {
                return(CustomResponse(ModelState));
            }

            AtivoViewDto viewDto = await _ativoService.PesquisarAtivoPorIdAsync(ativoId);

            if (viewDto == null)
            {
                return(NotFound(new
                {
                    success = true,
                    status = 404,
                    mensagem = "O ativo informado não foi encontrado!",
                }));
            }

            await _ativoService.ExcluirAtivoAsync(ativoId);

            return(CustomResponse(new {
                mensagem = "Ativo foi excluído com sucesso!",
            }));
        }
        public async Task <ActionResult> EditarAtivo(Guid ativoId, [FromBody] AtivoPutDto ativoPutDto)
        {
            if (!ModelState.IsValid)
            {
                return(CustomResponse(ModelState));
            }

            if (ativoId != ativoPutDto.Id)
            {
                NotificarErro("Id da request diferente do Id da Entidade!");
                return(CustomResponse(ativoPutDto));
            }

            AtivoViewDto viewDto = await _ativoService.PesquisarAtivoPorIdAsync(ativoId);

            if (viewDto == null)
            {
                return(NotFound(new
                {
                    success = true,
                    status = 404,
                    mensagem = "O ativo informado não foi encontrado!",
                }));
            }

            await _ativoService.EditarAtivoAsync(ativoPutDto, viewDto);

            return(CustomResponse(new
            {
                Inc = viewDto.IncAtivo,
                mensagem = "Ativo foi editado com sucesso!",
            }));
        }
 public Ativo(AtivoPutDto ativoPutDto, AtivoViewDto viewDto)
 {
     Id                        = viewDto.Id;
     IncAtivo                  = viewDto.IncAtivo;
     Nome                      = ativoPutDto.Nome;
     Descricao                 = ativoPutDto.Descricao;
     DataHoraCadastro          = viewDto.DataHoraCadastro;
     DataHoraUltimaAtualizacao = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
     StatusAtivo               = ativoPutDto.StatusAtivo;
     CriticidadeAtivo          = ativoPutDto.CriticidadeAtivo;
     SetorId                   = ativoPutDto.SetorId;
 }
        private async Task <bool> EhListaAtivoValida(ICollection <AtivoOcorrenciaPostDto> listaAtivosDto)
        {
            int qtdAtivoPrincipal = 0;

            foreach (AtivoOcorrenciaPostDto itemAtivoDto in listaAtivosDto)
            {
                AtivoViewDto viewDto = await _ativoRepository.PesquisarAtivoPorIdAsync(itemAtivoDto.Id);

                if (viewDto == null)
                {
                    Notificar("Existe um ativo na lista com Id inexistente!");
                    return(false);
                }

                if (itemAtivoDto.Principal.Equals(true))
                {
                    qtdAtivoPrincipal++;
                }

                if (itemAtivoDto.Principal.Equals(true))
                {
                    // verificar se há ocorrencia em aberto com este ativo
                    ICollection <OcorrenciaAtivo> listaOcorrenciaAtivo = await _ocorrenciaAtivoRepository.PesquisarOcorrenciaAtivoPorAtivo(itemAtivoDto.Id);

                    if (listaOcorrenciaAtivo.Count >= 1 && !listaOcorrenciaAtivo.Contains(null))
                    {
                        Notificar("Existe uma ocorrência com mesmo ativo principal!");
                        return(false);
                    }
                }
            }

            if (qtdAtivoPrincipal == 0)
            {
                Notificar("Não existe ativo principal na ocorrência!");
                return(false);
            }

            if (qtdAtivoPrincipal > 1)
            {
                Notificar("Existem mais de um ativo principal na lista!");
                return(false);
            }



            return(true);
        }
        public async Task <ActionResult> CadastrarAtivo([FromBody] AtivoPostDto ativoPostDto)
        {
            if (!ModelState.IsValid)
            {
                return(CustomResponse(ModelState));
            }

            await _ativoService.CadastrarAtivoAsync(ativoPostDto);

            AtivoViewDto viewDto = await _ativoService.PesquisarAtivoPorIdAsync(ativoPostDto.Id);

            return(CustomResponse(new
            {
                Inc = viewDto.IncAtivo,
                mensagem = "Ativo foi cadastrado com sucesso!",
            }));
        }
        public async Task <bool> EditarAtivoAsync(AtivoPutDto ativoPutDto, AtivoViewDto viewDto)
        {
            // validação domínio
            if (!ExecutarValidacao(new AtivoPutDtoValidation(), ativoPutDto))
            {
                return(false);
            }

            // validação regra de negócio
            if (!await EhSetorValido(ativoPutDto.SetorId))
            {
                return(false);
            }

            Ativo ativo = new Ativo(ativoPutDto, viewDto);

            await _ativoRepository.EditarAsync(ativo);

            return(true);
        }
        public async Task <ActionResult> PesquisarAtivoPorInc(int incAtivo)
        {
            if (!ModelState.IsValid)
            {
                return(CustomResponse(ModelState));
            }

            AtivoViewDto viewDto = await _ativoService.PesquisarAtivoPorIncAsync(incAtivo);

            if (viewDto == null)
            {
                return(NotFound(new
                {
                    success = true,
                    status = 404,
                    mensagem = "O ativo informado não foi encontrado!",
                }));
            }

            return(CustomResponse(viewDto));
        }