public void EnviarEmailConfirmacao(TicketMensagemRequest request,
                                    TicketMensagem ticketMensagem,
                                    TicketResponse ticket,
                                    AtendenteEmpresa atendenteEmpresa,
                                    UsuarioCliente usuarioCliente,
                                    List <AtendenteEmpresa> listaAtendentes)
 {
     //Se for mensagem enviada pelo atendimento (suporte) e interno
     if (request.UserType == "S" && request.Interno)
     {
         //Se for nova mensagem interna criada pelo suporte
         Emailer.EnviarEmailInterno(ticket, ticketMensagem, atendenteEmpresa, listaAtendentes);
     }
     else
     {
         if (request.UserType == "S" && !request.Interno)
         {
             //Se for nova mensagem (não interna) criada pelo suporte
             Emailer.EnviarEmailNovaMensagemCliente(ticket, ticketMensagem);
         }
         else
         {
             if (request.UserType == "C")
             {
                 //Se for nova mensagem criada pelo cliente
                 Emailer.EnviarEmailNovaMensagemSuporte(ticket, ticketMensagem, usuarioCliente, listaAtendentes);
             }
         }
     }
 }
Example #2
0
        public IHttpActionResult Update(int id, [FromBody] TicketMensagemRequest request)
        {
            try
            {
                //Valida objeto
                if (!ModelState.IsValid)
                {
                    return(BadRequest("Dados inválidos."));
                }

                var entityInDb = _ticketMensagemBusiness.GetById(id);

                //Verifica se objeto existe
                if (entityInDb == null)
                {
                    return(NotFound());
                }

                //Mapeio os dados do dto para o objeto recuperado do banco, atualizando os dados do objeto do banco
                Mapper.Map(request, entityInDb);

                if (_ticketMensagemBusiness.Update(entityInDb))
                {
                    //Monta response
                    _result = Ok(Retorno <TicketMensagem> .Criar(true, "Atualização Realizada Com Sucesso", entityInDb));

                    //Retorna o response
                    return(_result);
                }
                else
                {
                    return(BadRequest("Nenhum registro atualizado. Verifique os dados enviados."));
                }
            }
            catch (Exception)
            {
                throw new HttpResponseException(HttpStatusCode.InternalServerError);
            }
        }
Example #3
0
        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);
            }
        }