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)); }
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); } }
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); }