public IHttpActionResult Insert([FromBody] TicketMensagemRequest request) { UsuarioCliente usuarioCliente = null; AtendenteEmpresa atendenteEmpresa = null; Ticket ticket = null; List <AtendenteEmpresa> listaAtendentes = null; try { //Valida objeto if (!ModelState.IsValid) { return(BadRequest("Dados inválidos.")); } var entity = Mapper.Map <TicketMensagemRequest, TicketMensagem>(request); var pathAnexosUsuario = request.PathAnexos; ticket = _ticketBusiness.GetById(request.IdTicket); ticket.DataHoraAlteracao = DateTime.Now; ticket.DataHoraUltimaMensagem = DateTime.Now; //Se for uma mensagem interna enviada pelo suporte if (request.UserType == "S" && request.Interno) { entity.IdAtendenteEmpresa = request.IdAutor; ticket.IdStatusTicket = request.IdStatusTicket > 0 ? request.IdStatusTicket : 5; //Em Análise } else { //Se for uma mensagem enviada pelo suporte if (request.UserType == "S" && !request.Interno) { entity.IdAtendenteEmpresa = request.IdAutor; ticket.IdStatusTicket = request.IdStatusTicket > 0 ? request.IdStatusTicket : 4; //Pendente com Cliente } else { //Se for uma mensagem enviada pelo usuário cliente if (request.UserType == "C") { entity.IdUsuarioCliente = request.IdAutor; ticket.IdStatusTicket = 1; //Aguardando Atendimento } } } //Insere a nova mensagem _ticketMensagemBusiness.Insert(ref entity); if (entity.Id > 0) { //Atualiza o status do ticket, para refletir o novo momento do atendimento _ticketBusiness.UpdateStatusTicket(ticket); //Monta response _result = Ok(Retorno <TicketMensagemResponse> .Criar(true, "Inclusão Realizada Com Sucesso", Mapper.Map <TicketMensagem, TicketMensagemResponse>(entity))); if (Directory.Exists(pathAnexosUsuario)) { //Zipa todos os anexos var zipName = Arquivo.Compress(ConfigurationManager.AppSettings["CaminhoFisicoAnexo"], pathAnexosUsuario, entity.Id); //====================================== //Guarda anexo (zip) no banco de dados //====================================== var anexo = new Anexo { IdTicketMensagem = entity.Id, Nome = zipName }; _anexoBusiness.Insert(ref anexo); } //=========================================================================================== //Enviar email de confirmação de nova mensagem //=========================================================================================== var ticketResponse = _ticketBusiness.GetByIdFilled(request.IdTicket, false); if (request.UserType == "S") { usuarioCliente = _usuarioClienteBusiness.GetById(ticketResponse.UsuarioCliente.Id); atendenteEmpresa = _atendenteEmpresaBusiness.GetById(request.IdAutor); if (atendenteEmpresa.Copia) { listaAtendentes = _atendenteEmpresaBusiness.GetList(x => x.IdEmpresa == atendenteEmpresa.IdEmpresa && x.Id != atendenteEmpresa.Id).ToList(); } } else { usuarioCliente = _usuarioClienteBusiness.GetById(request.IdAutor); listaAtendentes = _atendenteEmpresaBusiness.GetAll(ticketResponse.UsuarioCliente.Cliente.IdEmpresa).ToList(); } try { _ticketMensagemBusiness.EnviarEmailConfirmacao(request, entity, ticketResponse, atendenteEmpresa, usuarioCliente, listaAtendentes); } catch (Exception) { //Monta response _result = Ok(Retorno <TicketMensagemResponse> .Criar(true, "Inclusão Realizada Com Sucesso - Email de confirmação não enviado", Mapper.Map <TicketMensagem, TicketMensagemResponse>(entity))); } //=========================================================================================== } //Retorna o response return(_result); } catch (Exception) { throw new HttpResponseException(HttpStatusCode.InternalServerError); } }
//[AllowAnonymous] public IHttpActionResult UpdateStatusTicket([FromBody] TicketUpdateStatusRequest request) { AtendenteEmpresa atendenteEmpresa = null; List <AtendenteEmpresa> listaAtendentes = null; try { //Valida objeto if (!ModelState.IsValid) { return(BadRequest("Dados inválidos.")); } var entityInDb = _ticketBusiness.GetById(request.Id); //Verifica se objeto existe if (entityInDb == null) { return(NotFound()); } entityInDb.IdStatusTicket = request.IdStatusTicket; if (request.IdStatusTicket == 1 || request.IdStatusTicket == 4 || request.IdStatusTicket == 5) { entityInDb.DataHoraFinal = null; entityInDb.DataHoraAlteracao = DateTime.Now; } if (_ticketBusiness.UpdateStatusTicket(entityInDb)) { //Recupera o ticket atualizado entityInDb = _ticketBusiness.GetById(request.Id); //Monta response _result = Ok(Retorno <Ticket> .Criar(true, "Atualização Realizada Com Sucesso", entityInDb)); //=========================================================================================== //Enviar email de atualização do atendimento //=========================================================================================== var usuarioCliente = _usuarioClienteBusiness.GetById(request.IdUsuarioCliente); var statusTicket = _statusTicketBusiness.GetById(request.IdStatusTicket); if (request.UserTypeAgent == "S") { atendenteEmpresa = _atendenteEmpresaBusiness.GetById(request.IdAtendente); if (atendenteEmpresa != null) { if (atendenteEmpresa.Copia) { listaAtendentes = _atendenteEmpresaBusiness.GetList(x => x.IdEmpresa == atendenteEmpresa.IdEmpresa && x.Id != atendenteEmpresa.Id).ToList(); } } } try { _ticketBusiness.EnviarEmailConfirmacao(request.UserTypeAgent, statusTicket, null, entityInDb, usuarioCliente, atendenteEmpresa, listaAtendentes, "update"); } catch (Exception) { //Monta response _result = Ok(Retorno <Ticket> .Criar(true, "Atualização Realizada Com Sucesso - Email de confirmação não enviado", entityInDb)); } //=========================================================================================== //Retorna o response return(_result); } else { return(BadRequest("Nenhum registro atualizado. Verifique os dados enviados.")); } } catch (Exception) { throw new HttpResponseException(HttpStatusCode.InternalServerError); } }