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 } }
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 } }