예제 #1
0
        protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService)
        {
            switch (Util.Utilitario.ConverterEnum <Domain.Enum.Plugin.MessageName>(context.MessageName))
            {
                #region Create

            case Domain.Enum.Plugin.MessageName.Create:

                if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
                {
                    var           entidade      = (Entity)context.InputParameters["Target"];
                    Conta         conta         = entidade.Parse <Conta>(context.OrganizationName, context.IsExecutingOffline, adminService);
                    Classificacao classificacao = new Intelbras.CRM2013.Domain.Servicos.ClassificacaoService(context.OrganizationName, context.IsExecutingOffline, adminService).BuscaClassificacao(conta.Classificacao.Id);

                    //Se estiver fazendo adesão e o proprietário for um systemuser, cria equipe

                    // Executa somente se for participante do programa
                    if (conta.ParticipantePrograma == (int)Domain.Enum.Conta.ParticipaDoPrograma.Sim)
                    {
                        //Adesao ao Programa
                        new Domain.Servicos.BeneficioDoCanalService(context.OrganizationName, context.IsExecutingOffline, adminService).AdesaoAoPrograma(conta);

                        //Integração com CRM 4.0
                        //new Intelbras.CRM2013.Domain.Servicos.CanalServices(context.OrganizationName, context.IsExecutingOffline, service).IntegracaoCRM4(conta);
                    }

                    #region SellOut


                    if (conta.Classificacao != null && conta.Classificacao.Name != null)
                    {
                        String resultString = null;
                        //Verifica se a conta é distribuidor ou revenda
                        switch (conta.Classificacao.Name)
                        {
                        case Domain.Enum.Conta.Classificacao.Dist_BoxMover:
                        case Domain.Enum.Conta.Classificacao.Dist_VAD:

                            resultString =
                                new Domain.Servicos.CanalServices(context.OrganizationName, context.IsExecutingOffline, adminService).PersistirDistribuidor(conta, context);

                            if (!string.IsNullOrEmpty(resultString))
                            {
                                throw new ArgumentException("(CRM) " + resultString);
                            }
                            break;

                        case Domain.Enum.Conta.Classificacao.Atac_Dist:
                            if (Domain.Enum.Conta.SubClassificacao.Atac_Distribuidor == conta.Subclassificacao.Name)
                            {
                                if (Domain.Enum.Conta.CategoriaConta.Completo == conta.Categoria.Name)
                                {
                                    resultString = new Domain.Servicos.CanalServices(context.OrganizationName, context.IsExecutingOffline, adminService).PersistirDistribuidor(conta, context);
                                    if (!string.IsNullOrEmpty(resultString))
                                    {
                                        throw new ArgumentException("(CRM) " + resultString);
                                    }
                                }
                            }
                            break;
                        }
                    }

                    #endregion

                    if (!conta.IntegrarNoPlugin || conta.IntegrarNoPlugin == null || conta.IntegrarNoPlugin.ToString().Equals(""))
                    {
                        new Intelbras.CRM2013.Domain.Servicos.ContaService(context.OrganizationName, context.IsExecutingOffline, adminService).IntegracaoBarramento(conta, ref entidade);
                    }

                    new Intelbras.CRM2013.Domain.Servicos.EnderecoService(context.OrganizationName, context.IsExecutingOffline, adminService).AtualizaEnderecosAdicionaisDaConta(conta);
                }

                break;

                #endregion

                #region Update

            case Domain.Enum.Plugin.MessageName.Update:
                if (context.PostEntityImages.Contains("imagem") &&
                    context.PostEntityImages["imagem"] is Entity &&
                    context.PreEntityImages.Contains("imagem") &&
                    context.PreEntityImages["imagem"] is Entity)
                {
                    var           CanalPre          = ((Entity)context.PreEntityImages["imagem"]).Parse <Conta>(context.OrganizationName, context.IsExecutingOffline, adminService);
                    var           CanalPost         = ((Entity)context.PostEntityImages["imagem"]).Parse <Conta>(context.OrganizationName, context.IsExecutingOffline, adminService);
                    Classificacao NomeClassificacao = new Intelbras.CRM2013.Domain.Servicos.ClassificacaoService(context.OrganizationName, context.IsExecutingOffline, adminService).BuscaClassificacao(CanalPost.Classificacao.Id);
                    // Valida ALteração do Atributo Forma de apuração dos Benefícios
                    if (CanalPre.ApuracaoBeneficiosCompromissos != CanalPost.ApuracaoBeneficiosCompromissos)
                    {
                        new Domain.Servicos.ContaService(context.OrganizationName, context.IsExecutingOffline, adminService).ValidaCanalApuracaoDeBeneficios(CanalPre, CanalPost);
                    }

                    #region Historico Categorias Conta
                    if (CanalPost.Categoria != null && CanalPre.Categoria != null)
                    {
                        if (CanalPre.Categoria.Id != CanalPost.Categoria.Id)
                        {
                            Intelbras.CRM2013.Domain.Servicos.RepositoryService RepositoryService = new Intelbras.CRM2013.Domain.Servicos.RepositoryService(context.OrganizationName, context.IsExecutingOffline, adminService);

                            var categoriaAtual    = RepositoryService.Categoria.Retrieve(CanalPost.Categoria.Id);
                            var categoriaAnterior = RepositoryService.Categoria.Retrieve(CanalPre.Categoria.Id);

                            var historicoCategoria = new HistoricoCategoria(context.OrganizationName, context.IsExecutingOffline, adminService);
                            historicoCategoria.Conta             = new SDKore.DomainModel.Lookup(CanalPost.ID.Value, CanalPost.RazaoSocial, SDKore.Crm.Util.Utility.GetEntityName(CanalPost));
                            historicoCategoria.CategoriaAnterior = new SDKore.DomainModel.Lookup(categoriaAnterior.ID.Value, categoriaAnterior.Nome, SDKore.Crm.Util.Utility.GetEntityName(categoriaAnterior));
                            historicoCategoria.CategoriaAtual    = new SDKore.DomainModel.Lookup(categoriaAtual.ID.Value, categoriaAtual.Nome, SDKore.Crm.Util.Utility.GetEntityName(categoriaAtual));
                            historicoCategoria.DataCriacao       = DateTime.Now;

                            RepositoryService.HistoricoCategoria.Create(historicoCategoria);
                        }
                    }
                    #endregion

                    #region SellOut

                    if (CanalPost.Classificacao != null && CanalPost.Classificacao.Name != null)
                    {
                        if (!String.IsNullOrEmpty(CanalPost.CodigoMatriz) && !String.IsNullOrEmpty(CanalPost.CpfCnpj))
                        {
                            //Verifica se a conta é distribuidor ou revenda
                            String resultString = null;
                            switch (CanalPost.Classificacao.Name)
                            {
                            case Domain.Enum.Conta.Classificacao.Dist_BoxMover:
                            case Domain.Enum.Conta.Classificacao.Dist_VAD:
                                resultString =
                                    new Domain.Servicos.CanalServices(context.OrganizationName, context.IsExecutingOffline, adminService).PersistirDistribuidor(CanalPost, context);
                                if (!string.IsNullOrEmpty(resultString))
                                {
                                    throw new ArgumentException("(CRM) " + resultString);
                                }
                                break;

                            case Domain.Enum.Conta.Classificacao.Atac_Dist:
                                if (Domain.Enum.Conta.SubClassificacao.Atac_Distribuidor == CanalPost.Subclassificacao.Name)
                                {
                                    if (Domain.Enum.Conta.CategoriaConta.Completo == CanalPost.Categoria.Name)
                                    {
                                        resultString = new Domain.Servicos.CanalServices(context.OrganizationName, context.IsExecutingOffline, adminService).PersistirDistribuidor(CanalPost, context);
                                        if (!string.IsNullOrEmpty(resultString))
                                        {
                                            throw new ArgumentException("(CRM) " + resultString);
                                        }
                                    }
                                }
                                break;
                            }
                        }
                    }
                    #endregion
                }

                break;

                #endregion

                #region SetStateDynamicEntity

            case Domain.Enum.Plugin.MessageName.SetStateDynamicEntity:

                if (context.PostEntityImages.Contains("imagem") &&
                    context.PostEntityImages["imagem"] is Entity &&
                    context.PreEntityImages.Contains("imagem") &&
                    context.PreEntityImages["imagem"] is Entity)
                {
                    var CanalPre  = ((Entity)context.PreEntityImages["imagem"]).Parse <Conta>(context.OrganizationName, context.IsExecutingOffline, adminService);
                    var CanalPost = ((Entity)context.PostEntityImages["imagem"]).Parse <Conta>(context.OrganizationName, context.IsExecutingOffline, adminService);

                    #region sellout

                    if (CanalPost.Classificacao != null && CanalPost.Classificacao.Name != null)
                    {
                        if (!String.IsNullOrEmpty(CanalPost.CodigoMatriz) && !String.IsNullOrEmpty(CanalPost.CpfCnpj))
                        {
                            String resultString = null;
                            //Verifica se a conta é distribuidor ou Atacado
                            switch (CanalPost.Classificacao.Name)
                            {
                            case Domain.Enum.Conta.Classificacao.Dist_BoxMover:
                            case Domain.Enum.Conta.Classificacao.Dist_VAD:
                                resultString = new Domain.Servicos.CanalServices(context.OrganizationName, context.IsExecutingOffline, adminService).PersistirDistribuidor(CanalPost, context);
                                if (!string.IsNullOrEmpty(resultString))
                                {
                                    throw new ArgumentException("(CRM) " + resultString);
                                }
                                break;

                            case Domain.Enum.Conta.Classificacao.Atac_Dist:
                                if (Domain.Enum.Conta.SubClassificacao.Atac_Distribuidor == CanalPost.Subclassificacao.Name)
                                {
                                    if (Domain.Enum.Conta.CategoriaConta.Completo == CanalPost.Categoria.Name)
                                    {
                                        resultString = new Domain.Servicos.CanalServices(context.OrganizationName, context.IsExecutingOffline, adminService).PersistirDistribuidor(CanalPost, context);
                                        if (!string.IsNullOrEmpty(resultString))
                                        {
                                            throw new ArgumentException("(CRM) " + resultString);
                                        }
                                    }
                                }
                                break;
                            }
                        }
                    }

                    #endregion
                }
                break;
                #endregion
            }
        }
예제 #2
0
        protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService)
        {
            var contaService = new Intelbras.CRM2013.Domain.Servicos.ContaService(context.OrganizationName, context.IsExecutingOffline, adminService);

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

                var e     = (Entity)context.InputParameters["Target"];
                var conta = e.Parse <Domain.Model.Conta>(context.OrganizationName, context.IsExecutingOffline, adminService);
                if (e.Contains("itbc_cpfoucnpj") && conta.CpfCnpj != null)
                {
                    if (contaService.BuscaContaPorCpfCnpj(conta.CpfCnpj, conta.TipoConstituicao.Value) != null)
                    {
                        throw new ArgumentException("(CRM) Ja Existe uma Conta com esse mesmo CPF/CNPJ.");
                    }
                    if (conta.TipoConstituicao != (int)Domain.Enum.Conta.TipoConstituicao.Estrangeiro)
                    {
                        e.Attributes["new_sem_masc_cnpj_cpf"] = conta.CpfCnpj.GetOnlyNumbers();
                        e.Attributes["itbc_cpfoucnpj"]        = conta.CpfCnpj.InputMask();
                    }
                }
                else
                {
                    throw new ArgumentException("(CRM) Campo CPF ou CNPJ não esta preenchido.");
                }

                PreenchimentoDeCampos(ref context, adminService);

                if (conta.AssistenciaTecnica == null)
                {
                    e.Attributes["itbc_isastec"] = false;
                }

                //Atualiza endereço Padrão
                if (conta.EnderecoPadrao == "e")
                {
                    e.Attributes["new_altera_endereco_padrao"] = "n";
                }

                break;
                #endregion

                #region Update

            case Domain.Enum.Plugin.MessageName.Update:
                PreenchimentoDeCampos(ref context, adminService);
                var entityTarget      = (Entity)context.InputParameters["Target"];
                var entityPre         = context.PreEntityImages["imagem"];
                var entityMerge       = context.GetContextEntityMerge("imagem");
                var canalMerge        = ((Entity)entityMerge).Parse <Domain.Model.Conta>(context.OrganizationName, context.IsExecutingOffline, adminService);
                var canalPre          = new Domain.Servicos.CanalServices(context.OrganizationName, context.IsExecutingOffline, adminService).ObterCanalPorId(canalMerge.ID.Value);
                var repositoryService = new Domain.Servicos.RepositoryService(context.OrganizationName, context.IsExecutingOffline, adminService);
                var contaUp           = entityTarget.Parse <Domain.Model.Conta>(context.OrganizationName, context.IsExecutingOffline, adminService);

                if (entityTarget.Contains("itbc_cpfoucnpj") && (canalPre.CpfCnpj.GetOnlyNumbers() != canalMerge.CpfCnpj.GetOnlyNumbers() || canalMerge.TipoConstituicao == (int)Domain.Enum.Conta.TipoConstituicao.Estrangeiro))
                {
                    if (contaService.BuscaOutraContaPorCpfCnpj(contaUp.CpfCnpj, contaUp.ID.Value, canalMerge.TipoConstituicao.Value) != null)
                    {
                        throw new ArgumentException("(CRM) Ja Existe uma Conta com esse mesmo CPF/CNPJ.");
                    }
                    entityTarget.Attributes["new_sem_masc_cnpj_cpf"] = contaUp.CpfCnpj.GetOnlyNumbers();
                }

                foreach (var item in entityTarget.Attributes)
                {
                    entityMerge.Attributes[item.Key] = item.Value;
                }

                if (canalMerge.AssistenciaTecnica == null)
                {
                    entityTarget.Attributes["itbc_isastec"] = false;
                }

                //Atualiza endereço Padrão
                if (canalMerge.EnderecoPadrao == "e")
                {
                    new Intelbras.CRM2013.Domain.Servicos.EnderecoService(context.OrganizationName, context.IsExecutingOffline, adminService).AtualizaEnderecosAdicionaisDaConta(canalMerge);
                    entityTarget.Attributes["new_altera_endereco_padrao"] = "n";
                }

                //Atualizando informações de endereço
                entityTarget.Attributes["address1_line1"]  = canalMerge.Endereco1Rua;
                entityTarget.Attributes["address1_city"]   = canalMerge.Endereco1Cidade;
                entityTarget.Attributes["address2_city"]   = canalMerge.Endereco1Cidade;
                entityTarget.Attributes["address1_county"] = canalMerge.Endereco1Bairro;
                entityTarget.Attributes["address2_county"] = canalMerge.Endereco2Bairro;

                entityTarget.Attributes["address1_stateorprovince"] = canalMerge.Endereco1Estado;
                entityTarget.Attributes["new_sem_masc_cnpj_cpf"]    = canalMerge.CpfCnpj.GetOnlyNumbers();

                if (canalMerge.Classificacao != null && canalMerge.Classificacao.Id == SDKore.Configuration.ConfigurationManager.GetSettingValue <Guid>("Intelbras.Classificacao.Revenda"))
                {
                    if ((!canalPre.ParticipantePrograma.HasValue || canalPre.ParticipantePrograma.Value != (int)Domain.Enum.Conta.ParticipaDoPrograma.Sim) && canalMerge.ParticipantePrograma.HasValue && canalMerge.ParticipantePrograma.Value == (int)Domain.Enum.Conta.ParticipaDoPrograma.Sim)
                    {
                        canalMerge.IntegrarNoPlugin = true;
                    }
                }

                //Valida Credenciamento
                if (canalMerge.Classificacao != null && canalMerge.Classificacao.Id != SDKore.Configuration.ConfigurationManager.GetSettingValue <Guid>("Intelbras.Classificacao.Revenda"))
                {
                    if (canalPre.ParticipantePrograma.HasValue &&
                        canalMerge.ParticipantePrograma.HasValue &&
                        canalPre.ParticipantePrograma.Value != (int)Domain.Enum.Conta.ParticipaDoPrograma.Sim &&
                        canalMerge.ParticipantePrograma.Value == (int)Domain.Enum.Conta.ParticipaDoPrograma.Sim)
                    {
                        new Domain.Servicos.BeneficioDoCanalService(context.OrganizationName, context.IsExecutingOffline, adminService).validaAdesaoaoPrograma(canalMerge);
                        entityTarget.Attributes["itbc_integraintelbraspontua"] = true;
                        canalMerge.IntegraIntelbrasPontua = true;
                    }
                }

                //Envia conta para Fielo
                var IntegraPontua = (new Domain.Servicos.BeneficioDoCanalService(context.OrganizationName, context.IsExecutingOffline, adminService).validaIntegraPontuaFielo(canalPre, canalMerge));
                entityTarget.Attributes["itbc_integraintelbraspontua"] = IntegraPontua;
                canalMerge.IntegraIntelbrasPontua = IntegraPontua;

                // Valida Descredenciamento ao programa
                if (canalPre.ParticipantePrograma.HasValue &&
                    canalMerge.ParticipantePrograma.HasValue &&
                    canalPre.ParticipantePrograma.Value == (int)Domain.Enum.Conta.ParticipaDoPrograma.Sim &&
                    (canalMerge.ParticipantePrograma.Value == (int)Domain.Enum.Conta.ParticipaDoPrograma.Nao ||
                     canalMerge.ParticipantePrograma.Value == (int)Domain.Enum.Conta.ParticipaDoPrograma.Descredenciado))
                {
                    // Se usuário tentando descredenciar.
                    if (context.Depth == 1)
                    {
                        new Domain.Servicos.BeneficioDoCanalService(context.OrganizationName, context.IsExecutingOffline, adminService).ValidarDescredenciamentoAoPrograma(canalMerge);
                        entityTarget.Attributes["itbc_integraintelbraspontua"] = true;
                        canalMerge.IntegraIntelbrasPontua = true;
                    }
                }

                //Envia Verba para Fielo
                if (canalMerge.StatusEnvioVMC == (int)Domain.Enum.Conta.StatusEnvioVMC.AguardandoEnvio)
                {
                    entityTarget.Attributes["itbc_statusenviovmc"] = (int)Domain.Enum.Conta.StatusEnvioVMC.Enviando;
                    canalMerge.IntegrarNoPlugin = true;
                }

                if (!canalMerge.IntegrarNoPlugin || canalMerge.IntegrarNoPlugin == null || canalMerge.IntegrarNoPlugin.ToString().Equals(""))
                {
                    contaService.IntegracaoBarramento(canalMerge, ref entityTarget);
                }

                break;

                #endregion
            }
        }