protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService) { switch (Util.Utilitario.ConverterEnum <Domain.Enum.Plugin.MessageName>(context.MessageName)) { case Domain.Enum.Plugin.MessageName.Create: var entidade = (Entity)context.InputParameters["Target"]; Domain.Model.Conta Conta = entidade.Parse <Domain.Model.Conta>(context.OrganizationName, context.IsExecutingOffline); #region Sharepoint if (Conta != null && !string.IsNullOrEmpty(Conta.RazaoSocial)) { new SharepointServices(context.OrganizationName, context.IsExecutingOffline, adminService).CriarDiretorio <Domain.Model.Conta>(Conta.RazaoSocial, Conta.ID.Value); } var enderecoService = new EnderecoService(context.OrganizationName, context.IsExecutingOffline, adminService); enderecoService.AtualizaEnderecosAdicionaisDaConta(Conta); #endregion break; case Domain.Enum.Plugin.MessageName.Update: var repositoryService = new Domain.Servicos.RepositoryService(context.OrganizationName, context.IsExecutingOffline, adminService); var CanalPre = ((Entity)context.PreEntityImages["imagem"]).Parse <Domain.Model.Conta>(context.OrganizationName, context.IsExecutingOffline, adminService); var CanalPost = ((Entity)context.PostEntityImages["imagem"]).Parse <Domain.Model.Conta>(context.OrganizationName, context.IsExecutingOffline, adminService); if (CanalPost.Classificacao != null && CanalPost.Classificacao.Id == SDKore.Configuration.ConfigurationManager.GetSettingValue <Guid>("Intelbras.Classificacao.Revenda")) { if ((!CanalPre.ParticipantePrograma.HasValue || CanalPre.ParticipantePrograma.Value != (int)Domain.Enum.Conta.ParticipaDoPrograma.Sim) && CanalPost.ParticipantePrograma.HasValue && CanalPost.ParticipantePrograma.Value == (int)Domain.Enum.Conta.ParticipaDoPrograma.Sim) { var entityTarget = (Entity)context.InputParameters["Target"]; var contaService = new Intelbras.CRM2013.Domain.Servicos.ContaService(context.OrganizationName, context.IsExecutingOffline, adminService); CanalPost.IntegrarNoPlugin = false; AdesaoRevenda(CanalPost, repositoryService); } } //Adesão ao programa if (CanalPre.ParticipantePrograma != (int)Domain.Enum.Conta.ParticipaDoPrograma.Sim && CanalPost.ParticipantePrograma == (int)Domain.Enum.Conta.ParticipaDoPrograma.Sim) { new Domain.Servicos.BeneficioDoCanalService(context.OrganizationName, context.IsExecutingOffline, adminService).AdesaoAoPrograma(CanalPost); var integraPontua = (new Domain.Servicos.BeneficioDoCanalService(context.OrganizationName, context.IsExecutingOffline, adminService).validaIntegraPontuaFielo(CanalPre, CanalPost)); var contatos = repositoryService.Contato.ListarAssociadosA(CanalPost.ID.ToString()); var contatoService = new Domain.Servicos.ContatoService(context.OrganizationName, context.IsExecutingOffline, adminService); foreach (var contato in contatos) { contato.IntegraIntelbrasPontua = true; contatoService.Persistir(contato); } } //Envia contatos para Fielo na troca de categoria da revenda if (CanalPre.Categoria != CanalPost.Categoria && CanalPost.Categoria.Name != "Registrada") { var contatos = repositoryService.Contato.ListarAssociadosA(CanalPost.ID.ToString()); var contatoService = new Domain.Servicos.ContatoService(context.OrganizationName, context.IsExecutingOffline, adminService); foreach (var contato in contatos) { contato.IntegraIntelbrasPontua = true; contatoService.Persistir(contato); } } //Descredenciamento ao programa if (CanalPre.ParticipantePrograma == (int)Domain.Enum.Conta.ParticipaDoPrograma.Sim && (CanalPost.ParticipantePrograma == (int)Domain.Enum.Conta.ParticipaDoPrograma.Nao || CanalPost.ParticipantePrograma == (int)Domain.Enum.Conta.ParticipaDoPrograma.Descredenciado)) { new Domain.Servicos.BeneficioDoCanalService(context.OrganizationName, context.IsExecutingOffline, adminService).DescredenciamentoAoPrograma(CanalPost); } //Envia Verba para Fielo if (CanalPost.StatusEnvioVMC == (int)Domain.Enum.Conta.StatusEnvioVMC.Enviando) { string retorno = new Domain.Servicos.VerbaVmcService(context.OrganizationName, context.IsExecutingOffline, adminService).EnviaVerbaFielo(CanalPost, CanalPost.CpfCnpj); var contaService = new Intelbras.CRM2013.Domain.Servicos.ContaService(context.OrganizationName, context.IsExecutingOffline, adminService); Conta CanalUpdate = new Conta(context.OrganizationName, context.IsExecutingOffline); CanalUpdate.ID = CanalPost.ID; if (!retorno.Contains("false")) { CanalUpdate.StatusEnvioVMC = (int)Domain.Enum.Conta.StatusEnvioVMC.Enviado; CanalUpdate.DataUltimoEnvioVMC = DateTime.Now.AddHours(3); CanalUpdate.TemDrireitoVMC = false; CanalUpdate.IntegrarNoPlugin = true; contaService.Persistir(CanalUpdate); } else { CanalUpdate.StatusEnvioVMC = (int)Domain.Enum.Conta.StatusEnvioVMC.ErroAoEnviar; CanalUpdate.TemDrireitoVMC = false; CanalUpdate.IntegrarNoPlugin = true; contaService.Persistir(CanalUpdate); } } break; } }