protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService) { switch (context.GetMessageName()) { case PluginBase.MessageName.Update: if (context.PostEntityImages.Contains("imagem") && context.PostEntityImages["imagem"] is Entity && context.PreEntityImages.Contains("imagem") && context.PreEntityImages["imagem"] is Entity) { var ContatoPre = ((Entity)context.PreEntityImages["imagem"]).Parse <Contato>(context.OrganizationName, context.IsExecutingOffline, adminService); var ContatoPos = ((Entity)context.PostEntityImages["imagem"]).Parse <Contato>(context.OrganizationName, context.IsExecutingOffline, adminService); var contatoService = new ContatoService(context.OrganizationName, context.IsExecutingOffline, adminService); var contaService = new ContaService(context.OrganizationName, context.IsExecutingOffline, adminService); //Atualização de Treinamento new BeneficioDoCanalService(context.OrganizationName, context.IsExecutingOffline, adminService).MudarEmpresa(ContatoPos); #region Integração if (context.Depth > 1) { return; } //Valida se contato tem acesso a Extranet e está sem e-mail if (string.IsNullOrEmpty(ContatoPos.Email1)) { ValidaEmailAcessoEXtranet(ContatoPos); } if (!ContatoPos.IntegrarNoPlugin && contatoService.ContatoPossuiTodosCamposParaIntegracao(ContatoPos) && (bool)ContatoPos.IntegrarNoBarramento) { Guid idContatoEmail = new RepositoryService().AcessoExtranetContato.VerificarEmail(ContatoPos.Email1); if (idContatoEmail != Guid.Empty && idContatoEmail != ContatoPos.Id) { throw new ArgumentException(string.Format("(CRM) Duplicidade encontrada, existe outro contato com acesso a extranet com o mesmo e-mail: [{0}].", ContatoPos.Email1)); } string xmlResposta = contatoService.IntegracaoBarramento(ContatoPos); } //Caso ele mude a associação tem que resetar o perfil do Konviva //E consequentemente mudar a Unidade do Konviva if (ContatoPre.AssociadoA == null && ContatoPos.AssociadoA != null || (ContatoPre.AssociadoA != null && ContatoPos.AssociadoA != null && ContatoPre.AssociadoA.Id != ContatoPos.AssociadoA.Id) || ContatoPre.AssociadoA != null && ContatoPos.AssociadoA == null) { Guid?guidTmp = ContatoPos.AssociadoA == null ? Guid.Empty : ContatoPos.AssociadoA.Id; guidTmp = guidTmp == Guid.Empty ? null : guidTmp; var acessoKonvivaService = new AcessoKonvivaService(context.OrganizationName, context.IsExecutingOffline, adminService); var acessoExtranetContatoService = new AcessoExtranetContatoService(context.OrganizationName, context.IsExecutingOffline, adminService); acessoKonvivaService.MudarCanal(ContatoPos, guidTmp); acessoExtranetContatoService.MudarCanal(ContatoPos.ID.Value, guidTmp, ContatoPos.IntegrarNoPlugin); if (ContatoPos.AssociadoA == null) { contatoService.AlteraTipoRelacao(ContatoPos); } } if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) { var entidade = context.GetContextEntity(); Object papelCanalTmp = null; if (entidade.Attributes.Contains("itbc_papelnocanal") && entidade.Attributes.TryGetValue("itbc_papelnocanal", out papelCanalTmp) && papelCanalTmp != null) { if (ContatoPos.AssociadoA == null || entidade.GetAttributeValue <OptionSetValue>("itbc_papelnocanal").Value == (int)Intelbras.CRM2013.Domain.Enum.Contato.PapelNoCanal.Representante) { var postImage = (Entity)context.PostEntityImages["imagem"]; postImage = UpdateImage(postImage, entidade); ContatoPos = postImage.Parse <Contato>(context.OrganizationName, context.IsExecutingOffline, adminService); var aKService = new AcessoKonvivaService(context.OrganizationName, context.IsExecutingOffline, adminService); AcessoKonviva acessoKonviva = aKService.ObterPorContato(ContatoPos.ID.Value, Domain.Enum.StateCode.Ativo); if (acessoKonviva != null) { acessoKonviva = new DeParaDeUnidadeDoKonvivaService(context.OrganizationName, context.IsExecutingOffline, adminService).ObterUnidadeKonvivaDeParaCom(acessoKonviva, null, ContatoPos); aKService.Persistir(acessoKonviva); } } } } if ((ContatoPos.Email1 != ContatoPre.Email1) && ContatoPos.AcessoAoPortal == true && ContatoPos.Login != null) { if (ContatoPre.Email1 == string.Empty) { (new RepositoryService(context.OrganizationName, context.IsExecutingOffline)).Contato.EnviaEmailAcessoPortalCorporativo(ContatoPos); } (new RepositoryService(context.OrganizationName, context.IsExecutingOffline)).Contato.UpdateEmailFBA(ContatoPos); } //new Domain.Services.PortalFidelidade().RemoverUsuarioDoSharepoint(contato); //if (contato.ParticipaFidelidade.HasValue && contato.ParticipaFidelidade.Value) //{ // new Domain.Services.PortalFidelidade().AdicionarAoGrupoSharePoint(contato); //} #endregion } break; } }