Ejemplo n.º 1
0
        public async Task <IActionResult> Post([FromBody] RegistroEventoPedidoFornecedor model)
        {
            string fornecedorLogado = this.ObterUsuarioLogado();

            if (!this._pedidoService.VerificarFornecedorResponsavelPorPedido(fornecedorLogado, model.ChavePedidoFornecedor))
            {
                return(Forbid());
            }

            EventoPedidoFornecedorRegistrado eventoCriado = await this._pedidoService.RegistrarEvento(fornecedorLogado, model);

            return(Ok(eventoCriado));
        }
Ejemplo n.º 2
0
        private async Task NotificarEnvolvidosProcesso(RegistroEventoPedidoFornecedor evento, Pedido p)
        {
            List <Pessoa> pessoasNotificar = new List <Pessoa>();

            pessoasNotificar.Add(this._pessoaRepository.RecuperarPorId(p.IdCliente));
            if (p.IdVendedor.HasValue)
            {
                pessoasNotificar.Add(this._pessoaRepository.RecuperarPorId(p.IdFornecedor));
            }

            foreach (var pessoa in pessoasNotificar)
            {
                string mensagemNotificacao = $"PUC Loja Informa - Pedido { p.Id.ToString("00000000") }: {this._pedidoRepository.ObterMensagemStatus((int)evento.Status)}";
                if (!string.IsNullOrEmpty(pessoa.Telefone))
                {
                    await this._smsNotificador.Notificar($"+{pessoa.Telefone}", mensagemNotificacao);
                }

                this._emailNotificador.Notificar(pessoa.Email, "PUC Loja Informa", mensagemNotificacao);
            }
        }
Ejemplo n.º 3
0
        public async Task <EventoPedidoFornecedorRegistrado> RegistrarEvento(string fornecedorAutenticado, RegistroEventoPedidoFornecedor evento)
        {
            //Recuperar o pedido em questão.
            Pedido p = this._pedidoRepository.RecuperarPorChaveFornecedor(fornecedorAutenticado, evento.ChavePedidoFornecedor);

            if (p == null)
            {
                throw new BusinessException("Pedido inválido para registrar evento.");
            }

            if (evento.Status <= p.Status)
            {
                throw new BusinessException("Impossível atualizar o status de um pedido para um status mais antigo.");
            }

            EventoPedidoFornecedorRegistrado eventoRegistrado;

            using (var ts = new TransactionScope())
            {
                //Gerar novo item no histórico de atualizações do pedido.
                int idEventoCriado = this._pedidoRepository.RegistrarEvento(p.Id, (int)evento.Status, evento.InformacoesAdicionais);

                //Atualizar o status.
                this._pedidoRepository.AtualizarStatus(p.Id, (int)evento.Status);

                ts.Complete();

                eventoRegistrado = new EventoPedidoFornecedorRegistrado();
                eventoRegistrado.IdEventoPedidoRegistrado = idEventoCriado;
                eventoRegistrado.ChavePedidoFornecedor    = evento.ChavePedidoFornecedor;
            }

            if (eventoRegistrado != null)
            {
                await NotificarEnvolvidosProcesso(evento, p);
            }

            return(eventoRegistrado);
        }