Exemple #1
0
        public Email AdicionarEmailEntradaServico(ConfiguracaoContasEmails configuracaoContaEmail,
                                                  Email emailPai, IEnumerable <AtividadeParteEnvolvida> partesEnvolvidas, IEnumerable <EmailAnexo> anexos,
                                                  string endereco, string assunto, string html, string texto, string uIdEmail, string messageId,
                                                  DateTime criadoEm, string nomeCliente, string identificadorEmail)
        {
            var    retorno         = new Email();
            var    gerarProtocolo  = configuracaoContaEmail.Fila.GerarProtocoloNaEntradaDeEmail ?? false;
            var    criadoPorUserId = "";
            long?  atendimentoId   = null;
            string protocolo       = null;

            var usuarioAdm = _usuarioServico.ObterPorEmail("*****@*****.**");

            if (usuarioAdm != null)
            {
                criadoPorUserId = usuarioAdm.Id;
            }
            else
            {
                retorno.ValidationResult.Add(
                    new ValidationError(
                        "Não foi informado o usuario (Criado Por) e também não possui usuario padrão cadastrado ([email protected])"));
                return(retorno);
            }

            if (gerarProtocolo)
            {
                var atendimento = _atendimentoServico.AdicionarNovoAtendimento(null, criadoPorUserId, null);
                if (!atendimento.ValidationResult.IsValid)
                {
                    retorno.ValidationResult = atendimento.ValidationResult;
                    return(retorno);
                }
                atendimentoId = atendimento.Id;
                protocolo     = atendimento.Protocolo;
            }

            if (emailPai == null)
            {
                emailPai = new Email();
            }

            if (emailPai.Atividade == null)
            {
                emailPai.Atividade = new Atividade();
            }

            retorno = AdicionarEmail(criadoPorUserId, emailPai.Atividade.ResponsavelPorUserId, criadoEm,
                                     emailPai.Atividade.OcorrenciaId, emailPai.Atividade.ContratoId, atendimentoId,
                                     emailPai.Atividade.PessoasFisicasId, emailPai.Atividade.PessoasJuridicasId,
                                     emailPai.Atividade.PotenciaisClientesId, emailPai.Atividade.Id, assunto,
                                     string.Format("E-mail importado pelo serviço em {0}", DateTime.Now), endereco, html, texto, messageId,
                                     uIdEmail, "E", assunto, emailPai.Id > 0 ? emailPai.Id : (long?)null, configuracaoContaEmail.Id,
                                     (int)configuracaoContaEmail.FilasId, partesEnvolvidas, anexos, null, identificadorEmail);

            if (!retorno.ValidationResult.IsValid)
            {
                return(retorno);
            }

            var enviarEmailResposta = configuracaoContaEmail.Fila.EnviarEmailComProtocoloGerado ?? false;

            if (!enviarEmailResposta)
            {
                return(retorno);
            }
            if (!configuracaoContaEmail.Fila.EmailModeloEnvioProtocoloEmailsModeloId.HasValue)
            {
                return(retorno);
            }

            var htmlModelo =
                _emailModelServico.ObterPorId(
                    (int)configuracaoContaEmail.Fila.EmailModeloEnvioProtocoloEmailsModeloId);

            if (htmlModelo == null)
            {
                return(retorno);
            }

            html = htmlModelo.Html.Replace("[PROTOCOLO]", protocolo);
            html = html.Replace("[NOME_CLIENTE]", !string.IsNullOrEmpty(nomeCliente) ? nomeCliente : "");

            var partesEnvolvidasResposta = (from envolvido in partesEnvolvidas
                                            where envolvido.TipoParteEnvolvida == TipoParteEnvolvida.Remetente.Value
                                            select
                                            new AtividadeParteEnvolvida(envolvido.Email, envolvido.Nome, TipoParteEnvolvida.Destinatario.Value))
                                           .ToList();

            if (configuracaoContaEmail.Fila.ContaParaDisparoDeEmailConfiguracaoContasEmailsId.HasValue)
            {
                var contaDisparo =
                    _configuracaoContaEmailServico.ObterPorId(
                        (int)configuracaoContaEmail.Fila.ContaParaDisparoDeEmailConfiguracaoContasEmailsId);
                if (contaDisparo != null)
                {
                    if (contaDisparo.Id > 0)
                    {
                        partesEnvolvidasResposta.Add(new AtividadeParteEnvolvida(contaDisparo.Email,
                                                                                 contaDisparo.Descricao, TipoParteEnvolvida.Remetente.Value));
                    }
                }
            }
            else
            {
                partesEnvolvidasResposta.Add(new AtividadeParteEnvolvida(configuracaoContaEmail.Email,
                                                                         configuracaoContaEmail.Descricao, TipoParteEnvolvida.Remetente.Value));
            }

            var  filaEnvioEmailComum = _filaServico.ObterFilasPorNome("ENVIO_EMAIL_COMUM");
            long?respostaFilaId      = null;

            if (filaEnvioEmailComum.Any())
            {
                respostaFilaId = filaEnvioEmailComum.FirstOrDefault().Id;
            }

            var retornoResposta = AdicionarEmail(criadoPorUserId, null, null, null, null, atendimentoId,
                                                 emailPai.Atividade.PessoasFisicasId, emailPai.Atividade.PessoasJuridicasId,
                                                 emailPai.Atividade.PotenciaisClientesId, null, "Resposta Automatica",
                                                 string.Format("E-mail respondido pelo serviço em {0}", DateTime.Now), endereco, html, null,
                                                 null, null, "S", "Resposta Automática", null, configuracaoContaEmail.Id,
                                                 respostaFilaId.HasValue ? (int)respostaFilaId : (int)configuracaoContaEmail.FilasId,
                                                 partesEnvolvidasResposta, new List <EmailAnexo>(), null, identificadorEmail);

            return(retorno);
        }