Ejemplo n.º 1
0
        protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService)
        {
            //if (context.GetStage() != Stage.PreValidation)
            //    return;
            var e        = context.GetContextEntity();
            var _service = new Intelbras.CRM2013.Domain.Servicos.AcessoKonvivaService(context.OrganizationName, context.IsExecutingOffline, null);

            switch (Util.Utilitario.ConverterEnum <Domain.Enum.Plugin.MessageName>(context.MessageName))
            {
            case Domain.Enum.Plugin.MessageName.Create:
            {
                Domain.Model.AcessoKonviva mAcessoKonviva = e.Parse <Domain.Model.AcessoKonviva>(context.OrganizationName, context.IsExecutingOffline, userService);

                //Adicionado verificação preEvent pra poder mudar o nome da entidade
                if (mAcessoKonviva.Contato == null)
                {
                    throw new ArgumentException("(CRM) Contato obrigatório");
                }

                Domain.Model.Contato mContato = new Intelbras.CRM2013.Domain.Servicos.ContatoService(context.OrganizationName, context.IsExecutingOffline).BuscaContato(mAcessoKonviva.Contato.Id);

                if (mContato == null)
                {
                    throw new ArgumentException("(CRM) Contato não encontrado");
                }

                if (!new AcessoExtranetContatoService(context.OrganizationName, context.IsExecutingOffline, userService).ValidarExistenciaAcessoExtranet(mAcessoKonviva.Contato.Id))
                {
                    throw new ApplicationException("(CRM) Contato não possui acesso na extranet");
                }

                if (!_service.ValidarTipoAcesso(mAcessoKonviva))
                {
                    throw new ApplicationException("(CRM) Usuários sem vínculo com a Intelbras não podem criar Acesso no Konviva com Perfil Administrador");
                }

                //Já validamos se o contato existe mesmo na service com o método validarTipoAcesso
                e.Attributes["itbc_name"] = mContato.NomeCompleto;

                if (!e.Attributes.Contains("itbc_acaocrm") || e.GetAttributeValue <bool>("itbc_acaocrm") == false)
                {
                    context.SharedVariables.Add("IntegraKonviva", true);
                }
                e.Attributes.Remove("itbc_acaocrm");

                break;
            }

            case Domain.Enum.Plugin.MessageName.Update:
            {
                Guid contatoId;
                //Domain.Model.AcessoKonviva acessoKonvivaImagem = ((Entity)context.PreEntityImages["imagem"]).Parse<Domain.Model.AcessoKonviva>(context.OrganizationName, context.IsExecutingOffline, context.UserId);
                Domain.Model.AcessoKonviva acessoKonvivaImagem  = ((Entity)context.GetContextEntityMerge("imagem")).Parse <Domain.Model.AcessoKonviva>(context.OrganizationName, context.IsExecutingOffline, context.UserId);
                Domain.Model.AcessoKonviva mAcessoKonvivaUpdate = e.Parse <Domain.Model.AcessoKonviva>(context.OrganizationName, context.IsExecutingOffline, userService);

                //Adicionado verificação preEvent pra poder mudar o nome da entidade
                if (acessoKonvivaImagem.Contato == null && mAcessoKonvivaUpdate.Contato == null)
                {
                    throw new ArgumentException("(CRM) Contato obrigatório");
                }

                if (mAcessoKonvivaUpdate.Contato == null)
                {
                    contatoId = acessoKonvivaImagem.Contato.Id;
                }
                else
                {
                    contatoId = mAcessoKonvivaUpdate.Contato.Id;
                }

                Domain.Model.Contato mContatoUpdate = new Intelbras.CRM2013.Domain.Servicos.ContatoService(context.OrganizationName, context.IsExecutingOffline).BuscaContato(contatoId);

                if (mContatoUpdate == null)
                {
                    throw new ArgumentException("(CRM) Contato não encontrado");
                }

                if (!_service.ValidarTipoAcesso(acessoKonvivaImagem))
                {
                    throw new ApplicationException("(CRM) Usuários sem vínculo com a Intelbras não podem criar Acesso no Konviva com Perfil Administrador");
                }

                //Já validamos se o contato existe mesmo na service validarTipoAcesso
                e.Attributes["itbc_name"] = mContatoUpdate.NomeCompleto;

                // SharedVariable para a Integração
                if (!e.Attributes.Contains("itbc_acaocrm") || e.GetAttributeValue <bool>("itbc_acaocrm") == false)
                {
                    context.SharedVariables.Add("IntegraKonviva", true);
                }
                e.Attributes.Remove("itbc_acaocrm");
                break;
            }
            }
        }
Ejemplo n.º 2
0
        public ColaboradorTreinadoCertificado DefinirPropriedades(Intelbras.Message.Helper.MSG0106 xml)
        {
            var crm = new ColaboradorTreinadoCertificado(this.Organizacao, this.IsOffline);

            #region Propriedades Crm->Xml


            if (xml.DataConclusao.HasValue)
            {
                crm.DataConclusao = xml.DataConclusao;
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "DataConclusao não enviada!";
                return(crm);
            }

            if (xml.DataValidade.HasValue)
            {
                crm.DataValidade = xml.DataValidade;
            }
            else
            {
                //Se nao enviar datavalidade adicionamos 24meses a data de conclusao
                crm.DataValidade = crm.DataConclusao.Value.AddMonths(24);
            }

            if (xml.Situacao == 1 || xml.Situacao == 0)
            {
                crm.Status = xml.Situacao;
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "Situação não enviada!";
                return(crm);
            }
            if (xml.StatusAproveitamento.HasValue)
            {
                if (xml.StatusAproveitamento != (int)Enum.ColaboradorTreinamentoCertificado.Status.Aprovado &&
                    xml.StatusAproveitamento != (int)Enum.ColaboradorTreinamentoCertificado.Status.Pendente &&
                    xml.StatusAproveitamento != (int)Enum.ColaboradorTreinamentoCertificado.Status.Reprovado)
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Status Aproveitamento não existente.";
                    return(crm);
                }

                crm.RazaoStatus = xml.StatusAproveitamento;
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "Status Aproveitamento não enviado!";
                return(crm);
            }
            if (xml.IdentificadorTreinamento.HasValue)
            {
                TreinamentoCertificacao treinamentoCertif = new Servicos.TreinamentoCertificacaoService(this.Organizacao, this.IsOffline).ObterPor(xml.IdentificadorTreinamento.Value);

                if (treinamentoCertif != null)
                {
                    crm.TreinamentoCertificado = new Lookup(treinamentoCertif.ID.Value, "");
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "IdentificadorTreinamento não cadastrado no Crm!";
                    return(crm);
                }
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "IdentificadorTreinamento não enviado!";
                return(crm);
            }

            if (!String.IsNullOrEmpty(xml.CodigoContato))
            {
                Guid contato;
                if (!Guid.TryParse(xml.CodigoContato, out contato))
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "CodigoConta inválido!";
                    return(crm);
                }

                crm.Contato = new Lookup(contato, "");

                Contato contatoObj = new Intelbras.CRM2013.Domain.Servicos.ContatoService(this.Organizacao, this.IsOffline).BuscaContato(contato);
                if (contatoObj == null)
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Contato não encontrado!";
                    return(crm);
                }
                if (!String.IsNullOrEmpty(contatoObj.NomeCompleto))
                {
                    crm.Nome = contatoObj.NomeCompleto + " em " + xml.IdentificadorTreinamento.ToString();
                }
                else if (!String.IsNullOrEmpty(contatoObj.PrimeiroNome))
                {
                    crm.Nome = contatoObj.PrimeiroNome + " em " + xml.IdentificadorTreinamento.ToString();
                }
                else
                {
                    crm.Nome = xml.IdentificadorTreinamento.ToString();
                }

                Helper.Truncate(crm.Nome, 100);

                if (contatoObj.AssociadoA != null && contatoObj.AssociadoA.Type == SDKore.Crm.Util.Utility.GetEntityName <Domain.Model.Conta>().ToLower())
                {
                    crm.Canal = new Lookup(contatoObj.AssociadoA.Id, "");
                }
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "CodigoContato não enviado!";
                return(crm);
            }

            if (xml.IdentificadorMatricula.HasValue)
            {
                crm.IdMatricula = xml.IdentificadorMatricula;
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "IdentificadorMatricula não enviado!";
                return(crm);
            }

            #endregion

            return(crm);
        }
Ejemplo n.º 3
0
        protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService)
        {
            //if (context.GetStage() != Stage.PreValidation)
            //    return;
            var e        = context.GetContextEntity();
            var _service = new Intelbras.CRM2013.Domain.Servicos.AcessoExtranetContatoService(context.OrganizationName, context.IsExecutingOffline, null);
            var sAcessoExtranetContato = new AcessoExtranetContatoService(context.OrganizationName, context.IsExecutingOffline);

            switch (Util.Utilitario.ConverterEnum <Domain.Enum.Plugin.MessageName>(context.MessageName))
            {
                #region Create

            case Domain.Enum.Plugin.MessageName.Create:

                Domain.Model.AcessoExtranetContato acessoExtranetContatoEmail = e.Parse <Domain.Model.AcessoExtranetContato>(context.OrganizationName, context.IsExecutingOffline, userService);

                Contato contatoObj = new Intelbras.CRM2013.Domain.Servicos.ContatoService(context.OrganizationName, context.IsExecutingOffline).BuscaContato(acessoExtranetContatoEmail.Contato.Id);

                if (!string.IsNullOrEmpty(contatoObj.Email1))
                {
                    Guid idContatoEmail = new RepositoryService().AcessoExtranetContato.VerificarEmail(contatoObj.Email1);
                    if (idContatoEmail != Guid.Empty && idContatoEmail != contatoObj.Id)
                    {
                        throw new ArgumentException(string.Format("(CRM) Duplicidade encontrada, existe outro contato com acesso a extranet com o mesmo e-mail: [{0}].", contatoObj.Email1));
                    }
                    else
                    {
                        if (new Intelbras.CRM2013.Domain.Servicos.ContatoService(context.OrganizationName, context.IsExecutingOffline).ContatoPossuiTodosCamposParaIntegracao(contatoObj))
                        {
                            contatoObj.IntegrarNoBarramento = true;
                            contatoObj.Update(contatoObj);
                        }
                        else
                        {
                            throw new ArgumentException("(CRM) Acesso não pode ser criado pois Contato não possui todos os campos para integração, favor completar o cadastro do contato.");
                        }
                    }
                }
                else
                {
                    throw new ArgumentException("(CRM) Acesso não pode ser criado pois Contato não possui e-mail cadastrado, favor completar o cadastro do contato.");
                }

                break;

                #endregion
                #region Update
            case Domain.Enum.Plugin.MessageName.Update:

                var entityTargetUpdate = (Entity)context.PreEntityImages["imagem"];

                Domain.Model.AcessoExtranetContato acessoExtranetContatoEmailUpdate = entityTargetUpdate.Parse <Domain.Model.AcessoExtranetContato>(context.OrganizationName, context.IsExecutingOffline, userService);

                Contato contatoObjUpdate = new Intelbras.CRM2013.Domain.Servicos.ContatoService(context.OrganizationName, context.IsExecutingOffline).BuscaContato(acessoExtranetContatoEmailUpdate.Contato.Id);

                if (!string.IsNullOrEmpty(contatoObjUpdate.Email1))
                {
                    Guid idContatoEmail = new RepositoryService().AcessoExtranetContato.VerificarEmail(contatoObjUpdate.Email1);
                    if (idContatoEmail != Guid.Empty && idContatoEmail != contatoObjUpdate.Id)
                    {
                        throw new ArgumentException(string.Format("(CRM) Duplicidade encontrada, existe outro contato com acesso a extranet com o mesmo e-mail: [{0}].", contatoObjUpdate.Email1));
                    }
                    else
                    {
                        if (new Intelbras.CRM2013.Domain.Servicos.ContatoService(context.OrganizationName, context.IsExecutingOffline).ContatoPossuiTodosCamposParaIntegracao(contatoObjUpdate))
                        {
                            contatoObjUpdate.IntegrarNoBarramento = true;
                            contatoObjUpdate.Update(contatoObjUpdate);
                        }
                        else
                        {
                            throw new ArgumentException("(CRM) Acesso não pode ser criado pois Contato não possui todos os campos para integração, favor completar o cadastro do contato.");
                        }
                    }
                }
                else
                {
                    throw new ArgumentException("(CRM) Acesso não pode ser criado pois Contato não possui e-mail cadastrado, favor completar o cadastro do contato.");
                }

                break;

                #endregion

                #region SetStateDynamicEntity

            case Domain.Enum.Plugin.MessageName.SetStateDynamicEntity:

                var entityMerge = context.PreEntityImages["imagem"];
                Domain.Model.AcessoExtranetContato acessoExtranetContato = entityMerge.Parse <Domain.Model.AcessoExtranetContato>(context.OrganizationName, context.IsExecutingOffline, userService);

                if (acessoExtranetContato.Status == 0)
                {
                    Contato contato        = new Intelbras.CRM2013.Domain.Servicos.ContatoService(context.OrganizationName, context.IsExecutingOffline).BuscaContato(acessoExtranetContato.Contato.Id);
                    Guid    idContatoEmail = new RepositoryService().AcessoExtranetContato.VerificarEmail(contato.Email1);
                    if (idContatoEmail != Guid.Empty && idContatoEmail != contato.Id)
                    {
                        throw new ArgumentException(string.Format("(CRM) Duplicidade encontrada, existe outro contato com acesso a extranet com o mesmo e-mail: [{0}].", contato.Email1));
                    }
                    else
                    {
                        contato.IntegrarNoBarramento = true;
                        contato.Update(contato);
                    }

                    acessoExtranetContato.Status = 1;
                    sAcessoExtranetContato.IntegracaoBarramento(acessoExtranetContato);
                    e.Attributes["itbc_acaocrm"] = true;
                }
                break;

                #endregion
            }
        }
        public List <KeyValuePair <ExecuteMultipleResponse, ExecuteMultipleRequest> > AtualizarAcessosKonvivaInconsistentes(DateTime dataInicial)
        {
            var           listaDePara               = RepositoryService.DeParaDeUnidadeDoKonviva.ListarPor(new Dictionary <string, object>(), dataInicial, false);
            var           listaAcessosKonviva       = new List <AcessoKonviva>();
            var           listaAcessosKonvivaPadrao = new List <AcessoKonviva>();
            var           novaListaKonvivaUpdate    = new List <AcessoKonviva>();
            var           novaListaKonvivaAdd       = new List <AcessoKonviva>();
            var           retornosPaginacao         = new List <KeyValuePair <ExecuteMultipleResponse, ExecuteMultipleRequest> >();
            List <object> deParaUnidadesKonviva     = new List <object>();

            if (listaDePara.Count > 0)
            {
                foreach (var item in listaDePara)
                {
                    deParaUnidadesKonviva.Add(item.ID.Value);
                }
                listaAcessosKonviva = RepositoryService.AcessoKonviva.ListarPor(deParaUnidadesKonviva.ToArray());

                var aKService = new AcessoKonvivaService(RepositoryService);
                #region Correção de entradas de Acesso do Konviva que tiveram critérios alterados

                foreach (var item in listaAcessosKonviva)
                {
                    if (item.Contato != null)
                    {
                        var           contato = new ContatoService(RepositoryService).BuscaContato(item.Contato.Id);
                        AcessoKonviva akTmp   = this.ProcessaAcessoKonviva(contato, item);
                        if (akTmp != null)
                        {
                            novaListaKonvivaUpdate.Add(akTmp);
                        }
                    }
                }
                #endregion

                #region Correção de entradas de acesso padrão do Konviva, avaliando se algum dos novos critérios se enquadram

                listaDePara = RepositoryService.DeParaDeUnidadeDoKonviva.ListarPor(new Dictionary <string, object>(), dataInicial, true);
                foreach (var item in listaDePara)
                {
                    var listaMudar = new List <AcessoKonviva>();
                    if (item.Categoria != null || item.TipoDeRelacao == null)
                    {
                        listaMudar = RepositoryService.AcessoKonviva.ListarPorCriterioDeParaContas(item, this.unidadeKonvivaPadrao.Value);
                    }
                    else
                    {
                        if (item.PapelNoCanalIntelbras.HasValue)
                        {
                            listaMudar = RepositoryService.AcessoKonviva.ListarPorCriterioDeParaContatos(item, this.unidadeKonvivaPadrao.Value);
                        }
                    }

                    foreach (var itemMudar in listaMudar)
                    {
                        itemMudar.UnidadeKonviva       = item.UnidadeDoKonviva;
                        itemMudar.DeParaUnidadeKonviva = new Lookup(item.ID.Value, "");
                        novaListaKonvivaUpdate.Add(itemMudar);
                    }
                }
                #endregion

                List <AcessoKonviva> acessosTimeout = new List <AcessoKonviva>();
                for (int i = 0; i < novaListaKonvivaUpdate.Count; i += 10)
                {
                    try
                    {
                        retornosPaginacao.Add(RepositoryService.AcessoKonviva.ExecuteMultiple(novaListaKonvivaUpdate.Skip(i).Take(10).ToList(), new UpdateRequest()));
                    }
                    catch (TimeoutException e)
                    {
                        Console.WriteLine("Erro de Timeout nos seguintes GUIDs:");
                        foreach (var itemTimeout in novaListaKonvivaUpdate.Skip(i).Take(10).ToList())
                        {
                            Console.WriteLine(itemTimeout.ID.ToString());
                        }
                        Console.WriteLine("------------------------------------");
                        acessosTimeout.AddRange(novaListaKonvivaUpdate.Skip(i).Take(10).ToList());
                    }
                }
                for (int i = 0; i < acessosTimeout.Count; i += 10)
                {
                    try
                    {
                        retornosPaginacao.Add(RepositoryService.AcessoKonviva.ExecuteMultiple(acessosTimeout.Skip(i).Take(10).ToList(), new UpdateRequest()));
                    }
                    catch (TimeoutException e)
                    {
                        Console.WriteLine("Erro de Timeout nos seguintes GUIDs (2a):");
                        foreach (var itemTimeout in novaListaKonvivaUpdate.Skip(i).Take(10).ToList())
                        {
                            Console.WriteLine(itemTimeout.ID.ToString());
                        }
                        Console.WriteLine("------------------------------------");
                    }
                }
            }

            return(retornosPaginacao);
        }
Ejemplo n.º 5
0
        public Oportunidade DefinirPropriedades2(Intelbras.Message.Helper.MSG0268 xml, ClientePotencial ClientePotencial)
        {
            #region Propriedades Crm->Xml

            var crm2 = new Servicos.RepositoryService().Oportunidade.BuscarPor(ClientePotencial);

            if (crm2 != null)
            {
                crm2.IntegrarNoPlugin = true;

                crm2.NumeroProjeto = ClientePotencial.NumeroProjeto;

                if (!String.IsNullOrEmpty(xml.CodigoRevenda) && xml.CodigoRevenda.Length == 36)
                {
                    if ((crm2.RevendaIntegrador == null) || (crm2.RevendaIntegrador.Id.ToString() != xml.CodigoRevenda))
                    {
                        crm2.RevendaIntegrador = new Lookup(new Guid(xml.CodigoRevenda), "");
                    }
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "CodigoRevenda não enviado ou fora do padrão (Guid).";
                    return(crm2);
                }

                Contato executivo = new Intelbras.CRM2013.Domain.Servicos.ContatoService(this.Organizacao, this.IsOffline).BuscaContato(new Guid(xml.CodigoExecutivo));
                if (executivo != null)
                {
                    if ((crm2.Executivo == null) || (crm2.Executivo.Id != executivo.ID.Value))
                    {
                        crm2.Executivo = new Lookup(executivo.ID.Value, "");
                    }
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "CodigoExecutivo não encontrado no Crm.";
                    return(crm2);
                }

                if (xml.DataEnvioCotacao.HasValue)
                {
                    crm2.DataEnvioCotacao = xml.DataEnvioCotacao;
                }
                else
                {
                    crm2.DataEnvioCotacao = null;
                }

                if (xml.TeveReuniao.HasValue)
                {
                    crm2.TeveReuniao = xml.TeveReuniao;
                }
                else
                {
                    crm2.TeveReuniao = (Int32)this.PreencherAtributoVazio("int");
                }

                if (xml.DataReuniao.HasValue)
                {
                    crm2.DataReuniao = xml.DataReuniao;
                }
                else
                {
                    crm2.DataReuniao = null;
                }

                if (xml.DataEstimativaAprovacao.HasValue)
                {
                    crm2.DataEstimativaAprovacao = xml.DataEstimativaAprovacao;
                }
                else
                {
                    crm2.DataEstimativaAprovacao = null;
                }

                if (xml.PropostaAprovada.HasValue)
                {
                    crm2.PropostaAprovada = xml.PropostaAprovada;
                }
                else
                {
                    crm2.PropostaAprovada = (Int32)PreencherAtributoVazio("int");
                }

                if (xml.DataAprovacao.HasValue)
                {
                    crm2.DataAprovacao = xml.DataAprovacao;
                }
                else
                {
                    crm2.DataAprovacao = null;
                }

                if (xml.DataEnvioPedidos.HasValue)
                {
                    crm2.DataEnvioPedidos = xml.DataEnvioPedidos;
                }
                else
                {
                    crm2.DataEnvioPedidos = null;
                }

                if (xml.PedidosFaturados.HasValue)
                {
                    crm2.PedidosFaturados = xml.PedidosFaturados;
                }
                else
                {
                    crm2.PedidosFaturados = 993520001;
                }

                #endregion

                return(crm2);
            }
            return(null);
        }
Ejemplo n.º 6
0
        public ClientePotencial DefinirPropriedades(Intelbras.Message.Helper.MSG0268 xml)
        {
            var crm = new Model.ClientePotencial(this.Organizacao, this.IsOffline);

            #region Propriedades Crm->Xml

            crm.IntegrarNoPlugin = true;

            if (!String.IsNullOrEmpty(xml.NumeroProjeto))
            {
                ClientePotencial cliente = new Servicos.LeadService(this.Organizacao, this.IsOffline).ObterPorNumeroProjeto(xml.NumeroProjeto);
                if (cliente != null)
                {
                    crm.NumeroProjeto   = xml.NumeroProjeto;
                    crm.StatusValidacao = cliente.StatusValidacao;
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "NumeroProjeto informado não existe para ser atualizado.";
                    return(crm);
                }
            }

            if (!String.IsNullOrEmpty(xml.CodigoClientePotencial))
            {
                crm.ID = new Guid(xml.CodigoClientePotencial);
            }
            else
            {
                crm.RazaoStatus = 993520003;

                originadoExtranet = true;
            }

            if (!String.IsNullOrEmpty(xml.CodigoRevenda) && xml.CodigoRevenda.Length == 36)
            {
                crm.RevendaIntegrador = new Lookup(new Guid(xml.CodigoRevenda), "");
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "CodigoRevenda não enviado ou fora do padrão (Guid).";
                return(crm);
            }

            if (!String.IsNullOrEmpty(xml.CodigoDistribuidor) && xml.CodigoDistribuidor.Length == 36)
            {
                crm.Distribuidor = new Lookup(new Guid(xml.CodigoDistribuidor), "");
            }

            Contato executivo = new Intelbras.CRM2013.Domain.Servicos.ContatoService(this.Organizacao, this.IsOffline).BuscaContato(new Guid(xml.CodigoExecutivo));
            if (executivo != null)
            {
                crm.Executivo = new Lookup(executivo.ID.Value, "");
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "CodigoExecutivo não encontrado no Crm.";
                return(crm);
            }

            if (!String.IsNullOrEmpty(xml.CNPJCliente))
            {
                crm.Cnpj = Intelbras.CRM2013.Domain.Servicos.Helper.FormatarCnpj(xml.CNPJCliente);
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "CNPJCliente não enviado.";
                return(crm);
            }

            if (!String.IsNullOrEmpty(xml.RazaoSocial))
            {
                crm.NomeDaEmpresa = xml.RazaoSocial;
                crm.Topico        = xml.RazaoSocial;
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "RazaoSocial não enviado.";
                return(crm);
            }

            if (!String.IsNullOrEmpty(xml.NomeContatoCliente))
            {
                crm.NomeCompletoDoContato = xml.NomeContatoCliente;

                if (xml.NomeContatoCliente.Contains(" "))
                {
                    crm.PrimeiroNomeDoContato = xml.NomeContatoCliente.Substring(0, xml.NomeContatoCliente.IndexOf(' '));
                    crm.SobreNomeDoContato    = xml.NomeContatoCliente.Substring(xml.NomeContatoCliente.IndexOf(' ') + 1, (xml.NomeContatoCliente.Length - xml.NomeContatoCliente.IndexOf(' ') - 1));
                }
                else
                {
                    crm.PrimeiroNomeDoContato = xml.NomeContatoCliente;
                }
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "NomeContatoCliente não enviado.";
                return(crm);
            }

            if (!String.IsNullOrEmpty(xml.TelefoneContatoCliente))
            {
                crm.TelefoneComercial = xml.TelefoneContatoCliente;
                crm.TelefoneCelular   = xml.TelefoneContatoCliente;
            }

            if (!String.IsNullOrEmpty(xml.EmailContatoCliente))
            {
                crm.Email = xml.EmailContatoCliente;
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "EmailContatoCliente não enviado.";
                return(crm);
            }

            if (xml.TipoProjeto.HasValue)
            {
                crm.TipoProjeto = xml.TipoProjeto;
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "TipoProjeto não enviado.";
                return(crm);
            }

            if (xml.EnvolverEngenharia.HasValue)
            {
                if (xml.EnvolverEngenharia.Value == 993520000)
                {
                    crm.EnvolverEngenharia = true;
                }
                else
                {
                    crm.EnvolverEngenharia = false;
                }
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "EnvolverEngenharia não enviado.";
                return(crm);
            }

            if (xml.ReceitaEstimada.HasValue)
            {
                crm.ValorEstimado = (decimal)xml.ReceitaEstimada;
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "ReceitaEstimada não enviado.";
                return(crm);
            }

            if (xml.DataPrevisaoFechamento.HasValue)
            {
                crm.DataEstimada = (DateTime)xml.DataPrevisaoFechamento;

                crm.DataProximaInteracao = DateTime.Now.AddDays(30);
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "DataPrevisaoFechamento não enviado.";
                return(crm);
            }

            if (!String.IsNullOrEmpty(xml.CodigoUnidadeNegocio))
            {
                UnidadeNegocio unidadeNegocio = new Servicos.UnidadeNegocioService(this.Organizacao, this.IsOffline).BuscaUnidadeNegocioPorChaveIntegracao(xml.CodigoUnidadeNegocio);
                if (unidadeNegocio != null)
                {
                    crm.UnidadeNegocio = new Lookup(unidadeNegocio.Id, "");
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "CodigoUnidadeNegocio não enencontrado no CRM.";
                    return(crm);
                }
            }


            if (!String.IsNullOrEmpty(xml.DescricaoProjeto))
            {
                crm.Descricao = xml.DescricaoProjeto;
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "DescricaoProjeto não enviado ou fora do padrão (Guid).";
                return(crm);
            }

            if (xml.CotacaoEnviada.HasValue)
            {
                crm.CotacaoEnviada = xml.CotacaoEnviada;
            }

            if (xml.TipoSolucao.HasValue)
            {
                crm.TipoSolucao = xml.TipoSolucao;
            }
            else
            {
                crm.AddNullProperty("TipoSolucao");
            }

            if (xml.PossivelDuplicidade.HasValue)
            {
                crm.PossivelDuplicidade = (bool)xml.PossivelDuplicidade;
            }

            #endregion

            #region Endereco
            crm.Endereco1CEP    = xml.EnderecoClienteFinal.CEP;
            crm.Endereco1Rua    = xml.EnderecoClienteFinal.Logradouro;
            crm.Endereco1Numero = xml.EnderecoClienteFinal.Numero;
            if (!String.IsNullOrEmpty(xml.EnderecoClienteFinal.Complemento))
            {
                crm.Endereco1Complemento = xml.EnderecoClienteFinal.Complemento;
            }
            crm.Endereco1Bairro = xml.EnderecoClienteFinal.Bairro;
            //Cidade
            if (!String.IsNullOrEmpty(xml.EnderecoClienteFinal.Cidade))
            {
                Municipio cidade = new Intelbras.CRM2013.Domain.Servicos.MunicipioServices(this.Organizacao, this.IsOffline).BuscaCidade(xml.EnderecoClienteFinal.Cidade);

                if (cidade != null && cidade.ID.HasValue)
                {
                    crm.Endereco1Municipioid = new Lookup(cidade.ID.Value, "");
                    crm.Endereco1Municipio   = cidade.Nome;
                }
            }

            //Estado
            if (!String.IsNullOrEmpty(xml.EnderecoClienteFinal.Estado))
            {
                Estado estado = new Intelbras.CRM2013.Domain.Servicos.EstadoServices(this.Organizacao, this.IsOffline).BuscaEstado(xml.EnderecoClienteFinal.Estado);

                if (estado != null && estado.ID.HasValue)
                {
                    crm.Endereco1Estadoid = new Lookup(estado.ID.Value, "");
                }
            }

            //Pais
            if (!String.IsNullOrEmpty(xml.EnderecoClienteFinal.Pais))
            {
                Pais Pais = new Intelbras.CRM2013.Domain.Servicos.PaisServices(this.Organizacao, this.IsOffline).BuscaPais(xml.EnderecoClienteFinal.Pais);

                if (Pais != null && Pais.ID.HasValue)
                {
                    crm.Endereco1Pais = new Lookup(Pais.ID.Value, "");
                }
            }
            #endregion

            return(crm);
        }
Ejemplo n.º 7
0
        public string Executar(string mensagem, string numeroMensagem, Domain.Model.Usuario usuario)
        {
            var xml = this.CarregarMensagem <Pollux.MSG0169>(mensagem);

            try
            {
                Validacao(xml);

                Guid itemFilaGuid;
                if (!String.IsNullOrEmpty(xml.CodigoItemFila) && !Guid.TryParse(xml.CodigoItemFila, out itemFilaGuid))
                {
                    throw new ArgumentException("(CRM) Código item fila em formato inválido.");
                }

                Guid contatoGuid;
                if (!Guid.TryParse(xml.CodigoContato, out contatoGuid))
                {
                    throw new ArgumentException("(CRM) Guid do código do contato em formato inválido.");
                }

                Contato contato = new Intelbras.CRM2013.Domain.Servicos.ContatoService(this.Organizacao, this.IsOffline).BuscaContato(contatoGuid);

                if (contato == null)
                {
                    throw new ArgumentException("(CRM) Contato não encontrado.");
                }

                Fila fila = new Intelbras.CRM2013.Domain.Servicos.FilaServices(this.Organizacao, this.IsOffline).BuscaFilaPorNome(xml.NomeFilaAtendimento);

                if (fila == null)
                {
                    throw new ArgumentException("(CRM) Fila de atendimento não encontrada.");
                }

                Guid referenteA;

                if (xml.Referente == SDKore.Crm.Util.Utility.GetEntityName <Pedido>())
                {
                    Pedido pedido = new Intelbras.CRM2013.Domain.Servicos.PedidoService(this.Organizacao, this.IsOffline).BuscaPedidoEMS(xml.NumeroPedido);

                    if (pedido == null)
                    {
                        throw new ArgumentException("(CRM) Pedido não encontrado.");
                    }

                    referenteA = pedido.ID.Value;
                }
                else
                {
                    if (!Guid.TryParse(xml.CodigoObjeto, out referenteA))
                    {
                        throw new ArgumentException("(CRM) Não foi possível conversa o campo 'CodigoObjeto'.");
                    }
                }


                Email email = new Email(this.Organizacao, this.IsOffline);

                email.De         = new Lookup[1];
                email.De[0]      = new Lookup(contato.ID.Value, "contact");
                email.Para       = new Lookup[1];
                email.Para[0]    = new Lookup(fila.ID.Value, "queue");
                email.Assunto    = xml.Assunto;
                email.Mensagem   = xml.DescricaoEmail;
                email.ReferenteA = new Lookup(referenteA, xml.Referente);
                email.Direcao    = xml.Direcao.Value == 1;

                email.ID = new RepositoryService().Email.Create(email);

                new RepositoryService().Email.AlterarStatus(email.ID.Value, xml.StatusEmail.Value);

                ItemFila itemFila = new ItemFila(this.Organizacao, this.IsOffline);
                itemFila.Fila        = new Lookup(fila.ID.Value, "queue");
                itemFila.Objeto      = new Lookup(email.ID.Value, "email");
                itemFila.RazaoStatus = 1;


                itemFila.ID = new RepositoryService().ItemFila.Create(itemFila);

                resultadoPersistencia.Sucesso  = true;
                resultadoPersistencia.Mensagem = "Integração realizada com sucesso!";
                retorno.Add("CodigoItemFila", itemFila.ID.Value.ToString());
                retorno.Add("Resultado", resultadoPersistencia);
                return(CriarMensagemRetorno <Pollux.MSG0169R1>(numeroMensagem, retorno));
            }
            catch (Exception e)
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = SDKore.Helper.Error.Handler(e);
                retorno.Add("Resultado", resultadoPersistencia);
                return(CriarMensagemRetorno <Pollux.MSG0169R1>(numeroMensagem, retorno));
            }
        }
Ejemplo n.º 8
0
        public RelacionamentoCanal DefinirPropriedades(Intelbras.Message.Helper.MSG0137 xml)
        {
            var crm = new RelacionamentoCanal(this.Organizacao, this.IsOffline);

            #region Propriedades Crm->Xml

            crm.IntegrarNoPlugin = true;

            if (!String.IsNullOrEmpty(xml.CodigoRelacionamentoCanal))
            {
                crm.ID = new Guid(xml.CodigoRelacionamentoCanal);
            }

            if (!String.IsNullOrEmpty(xml.Nome))
            {
                crm.Nome = xml.Nome;
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "Nome não enviado.";
                return(crm);
            }
            if (!String.IsNullOrEmpty(xml.CodigoConta) && xml.CodigoConta.Length == 36)
            {
                crm.Canal = new Lookup(new Guid(xml.CodigoConta), "");
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "CodigoConta não enviado ou fora do padrão (Guid).";
                return(crm);
            }
            Contato keyAccount = new Intelbras.CRM2013.Domain.Servicos.ContatoService(this.Organizacao, this.IsOffline).BuscaContatoPorCodigoRepresentante(xml.CodigoRepresentante.ToString());
            if (keyAccount != null)
            {
                crm.KeyAccount = new Lookup(keyAccount.ID.Value, "");
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "keyAccount não encontrado no Crm.";
                return(crm);
            }

            Usuario assistente = new Intelbras.CRM2013.Domain.Servicos.UsuarioService(this.Organizacao, this.IsOffline).BuscaPorCodigoAssistente(xml.CodigoAssistente);
            if (assistente != null)
            {
                crm.Assistente = new Lookup(assistente.ID.Value, "");
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "Assistente não encontrado no Crm.";
                return(crm);
            }

            if (!String.IsNullOrEmpty(xml.CodigoSupervisor) && xml.CodigoSupervisor.Length == 36)
            {
                crm.Supervisor = new Lookup(new Guid(xml.CodigoSupervisor), "");
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "Supervisor não encontrado no Crm.";
                return(crm);
            }
            if (crm.DataInicial.HasValue)
            {
                xml.DataInicial = crm.DataInicial.Value.ToLocalTime();
            }

            if (crm.DataFinal.HasValue)
            {
                xml.DataFinal = crm.DataFinal.Value.ToLocalTime();
            }

            crm.Status = xml.Situacao;

            #endregion

            return(crm);
        }