예제 #1
0
        public async Task <IActionResult> AdicionarSolicitacao([FromBody] AdicionarSolicitacaoRequest request)
        {
            try
            {
                string usuarioClaims = _httpContextAccessor.HttpContext.User.FindFirst("Usuario").Value;
                AutenticarUsuarioResponse usuarioResponse = JsonConvert.DeserializeObject <AutenticarUsuarioResponse>(usuarioClaims);

                var response = _serviceSolicitacao.AdicionarSolicitacao(request, usuarioResponse.Id);

                return(await ResponseAsync(response, _serviceSolicitacao));
            }
            catch (System.Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
예제 #2
0
        public AdicionarSolicitacaoResponse AdicionarSolicitacao(AdicionarSolicitacaoRequest request, Guid idUsuario)
        {
            if (request == null)
            {
                AddNotification("Resquest", "Invalido");
                return(null);
            }


            if (request.CnpjFornecedor == null)
            {
                AddNotification("Fornecedor", "Invalido");
                return(null);
            }

            var cliente = _repositoryUsuario.ObterPorId(idUsuario);

            if (_repositorySolicitacao.Existe(x => x.IdExternoSolicitacao == request.IdExternoSolicitacao &&
                                              x.EmpresaSolicitante.Id == idUsuario))
            {
                AddNotification("Id Externo", "Já existe uma solicitação desta empresa com este Id");
                return(null);
            }

            if (cliente.ClienteOuFornecedor == Enums.EnumClienteOuFornecedor.Fornecedor)
            {
                AddNotification("Usuario", "O mesmo tem que esta cadastrado como cliente, para realizar uma solicitação");
                return(null);
            }

            var solicitacao = new Entities.Solicitacao(cliente, request.IdExternoSolicitacao, request.CodigoProduto, request.Descricao,
                                                       request.PrevisaoTerminoEstoque, request.QuantidadeSolicitada,
                                                       request.Observacao, request.DataValidade);

            AddNotifications(solicitacao);

            solicitacao = _repositorySolicitacao.Adicionar(solicitacao);

            var grupoFornecedor = new List <GrupoFornecedor>();

            foreach (var item in request.CnpjFornecedor)
            {
                var fornecedor = _repositoryUsuario.ObterPor(x => x.CnpjCpf.Equals(item));

                if (fornecedor == null)
                {
                    AddNotification("Fornecedor", "Não encontrado");
                    return(null);
                }

                if (fornecedor.ClienteOuFornecedor == Enums.EnumClienteOuFornecedor.Cliente)
                {
                    AddNotification("cnpjFornecedor", "O mesmo tem que esta cadastrado como Fornedor, para realizar uma solicitação");
                    return(null);
                }

                if (fornecedor != null)
                {
                    grupoFornecedor.Add(new Entities.GrupoFornecedor(fornecedor, solicitacao));
                }
            }

            AddNotifications(grupoFornecedor);

            if (IsInvalid())
            {
                return(null);
            }

            if (grupoFornecedor.Count > 0)
            {
                _repositoryGrupoFornecedor.AdicionarLista(grupoFornecedor);
            }
            else
            {
                AddNotification("Fornecedor", "É necessário informar Fornecedor já cadastrado");
                return(null);
            }


            return(new AdicionarSolicitacaoResponse(solicitacao.Id, request.IdExternoSolicitacao));
        }