Exemplo n.º 1
0
        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;
            }
        }