protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService) { try { switch (Util.Utilitario.ConverterEnum <Domain.Enum.Plugin.MessageName>(context.MessageName)) { #region Create case Domain.Enum.Plugin.MessageName.Create: var parameter = (Entity)context.InputParameters["Target"]; var endereco = parameter.Parse <Endereco>(context.OrganizationName, context.IsExecutingOffline, adminService); var contextCreate = context.GetContextEntity(); preencheDados(endereco, ref context, adminService); break; #endregion #region Update case Domain.Enum.Plugin.MessageName.Update: var targetUpdate = (Entity)context.InputParameters["Target"]; var enderecoUpdate = targetUpdate.Parse <Endereco>(context.OrganizationName, context.IsExecutingOffline, adminService); var entidadeComValoresFinais = (Entity)context.GetContextEntityMerge("imagem"); enderecoUpdate.IntegrarNoPlugin = entidadeComValoresFinais.GetAttributeValue <bool>("itbc_acaocrm"); enderecoUpdate.Identificacao = entidadeComValoresFinais.GetAttributeValue <string>("new_cnpj").GetOnlyNumbers(); preencheDados(enderecoUpdate, ref context, adminService); break; #endregion #region Delete case Domain.Enum.Plugin.MessageName.Delete: var image = context.PreEntityImages["imagem"]; var enderecoDelete = image.Parse <Endereco>(context.OrganizationName, context.IsExecutingOffline, adminService); enderecoDelete.StatusAtivo = false; if (enderecoDelete.IntegrarNoPlugin) { string xmlResposta = new EnderecoService(context.OrganizationName, context.IsExecutingOffline, adminService).IntegracaoBarramento(enderecoDelete); } break; #endregion } } catch (Exception ex) { throw new InvalidPluginExecutionException(ex.Message); } }
protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService) { var historicoDistribuidorService = new Domain.Servicos.HistoricoDistribuidorService(context.OrganizationName, context.IsExecutingOffline, adminService); switch (Util.Utilitario.ConverterEnum <Domain.Enum.Plugin.MessageName>(context.MessageName)) { case Domain.Enum.Plugin.MessageName.Create: var entityTargetCreate = context.GetContextEntity(); var targetCreate = entityTargetCreate.Parse <Domain.Model.HistoricoDistribuidor>(context.OrganizationName, context.IsExecutingOffline, adminService); targetCreate.Status = (int)Domain.Enum.HistoricoDistribuidor.Statecode.Ativo; historicoDistribuidorService.ValidaCamposObrigatorios(targetCreate); historicoDistribuidorService.ValidaDuplicidade(targetCreate, true); var revenda = new Domain.Servicos.ContaService(context.OrganizationName, context.IsExecutingOffline, userService).BuscaConta(targetCreate.Revenda.Id); var distribuidor = new Domain.Servicos.ContaService(context.OrganizationName, context.IsExecutingOffline, userService).BuscaConta(targetCreate.Distribuidor.Id); PreencheNome(ref entityTargetCreate, ref revenda, ref distribuidor); break; case Domain.Enum.Plugin.MessageName.Update: var entityTargetMerge = context.GetContextEntityMerge("imagem"); var entityTargetUpdate = context.GetContextEntity(); var targetUpdate = entityTargetMerge.Parse <Domain.Model.HistoricoDistribuidor>(context.OrganizationName, context.IsExecutingOffline, adminService); var entityTarget = (Entity)context.InputParameters["Target"]; var contaUp = entityTarget.Parse <Domain.Model.HistoricoDistribuidor>(context.OrganizationName, context.IsExecutingOffline, adminService); entityTargetUpdate.Attributes["itbc_datafim"] = contaUp.DataFim; if (targetUpdate.Status.Value == (int)Domain.Enum.HistoricoDistribuidor.Statecode.Ativo) { historicoDistribuidorService.ValidaCamposObrigatorios(targetUpdate); historicoDistribuidorService.ValidaDuplicidade(targetUpdate, false); } var revendaUpdate = new Domain.Servicos.ContaService(context.OrganizationName, context.IsExecutingOffline, userService).BuscaConta(targetUpdate.Revenda.Id); var distribuidorUpdate = new Domain.Servicos.ContaService(context.OrganizationName, context.IsExecutingOffline, userService).BuscaConta(targetUpdate.Distribuidor.Id); PreencheNome(ref entityTargetUpdate, ref revendaUpdate, ref distribuidorUpdate); break; } }
protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService) { var cnaeService = new Domain.Servicos.CnaeService(context.OrganizationName, context.IsExecutingOffline, adminService); switch (Util.Utilitario.ConverterEnum <Domain.Enum.Plugin.MessageName>(context.MessageName)) { case Domain.Enum.Plugin.MessageName.Create: var entityTargetCreate = context.GetContextEntity(); var cnae = entityTargetCreate.Parse <Domain.Model.CNAE>(context.OrganizationName, context.IsExecutingOffline, adminService); PreencheNome(ref cnae, ref entityTargetCreate); break; case Domain.Enum.Plugin.MessageName.Update: var entityTargetUpdate = context.GetContextEntity(); var entityMergeUpdate = context.GetContextEntityMerge("imagem"); var cnaeUpdate = entityMergeUpdate.Parse <Domain.Model.CNAE>(context.OrganizationName, context.IsExecutingOffline, adminService); PreencheNome(ref cnaeUpdate, ref entityTargetUpdate); break; } }
protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService) { try { switch (Util.Utilitario.ConverterEnum <Domain.Enum.Plugin.MessageName>(context.MessageName)) { #region Create case Domain.Enum.Plugin.MessageName.Create: var parameterCreate = (Entity)context.InputParameters["Target"]; Ocorrencia ocorrenciaCreate = parameterCreate.Parse <Ocorrencia>(context.OrganizationName, context.IsExecutingOffline, adminService); var ocorrenciaService = new OcorrenciaService(context.OrganizationName, context.IsExecutingOffline); /* * Caso a linha de contrato seja do tipo instalação e tenha valor no campo limite * caso ultrapssse o limite definido da erro, e não deixa criar a ocorrencia */ if (ocorrenciaCreate.LinhaDeContratoId != null) { RepositoryService repository = new Domain.Servicos.RepositoryService(context.OrganizationName, context.IsExecutingOffline); var linhaDeContrato = repository.LinhaDoContrato.Retrieve(ocorrenciaCreate.LinhaDeContratoId.Id); if (linhaDeContrato != null && linhaDeContrato.TipoDeOcorrencia == (int)Domain.Enum.TipoDeOcorrencia.Instalacao && linhaDeContrato.LimiteOcorrencias > 0) { var listOcorrencias = ocorrenciaService.ListarOcorrenciasPorLinhaDoContrato(ocorrenciaCreate.LinhaDeContratoId.Id); if (listOcorrencias.Count >= linhaDeContrato.LimiteOcorrencias) { throw new ArgumentException("Erro ao criar Ocorrência. Limite de instalações atingido."); } } } ocorrenciaService.Ocorrencia = ocorrenciaCreate; ocorrenciaService.Criar(); AtualizaCampos(ref parameterCreate, ocorrenciaService.Ocorrencia); if (ocorrenciaCreate.Origem != null && (ocorrenciaCreate.Origem == (int)Domain.Enum.OrigemDaOcorrencia.PortalAssistenciaTencica || ocorrenciaCreate.Origem == (int)Domain.Enum.OrigemDaOcorrencia.OSIntegrada)) { var usuario = new Guid(SDKore.Configuration.ConfigurationManager.GetSettingValue("guid_proprietario_portal_astec")); parameterCreate.Attributes["ownerid"] = new EntityReference("systemuser", usuario); } break; #endregion #region Update case Domain.Enum.Plugin.MessageName.Update: var parameterUpdate = (Entity)context.InputParameters["Target"]; var entidadeComValoresFinais = (Entity)context.GetContextEntityMerge("imagem"); Ocorrencia ocorrenciaUpdate = entidadeComValoresFinais.Parse <Ocorrencia>(context.OrganizationName, context.IsExecutingOffline, adminService); var ocorrenciaServiceUpdate = new OcorrenciaService(context.OrganizationName, context.IsExecutingOffline); if (ocorrenciaUpdate.LinhaDeContratoId != null) { RepositoryService repository = new Domain.Servicos.RepositoryService(context.OrganizationName, context.IsExecutingOffline); var linhaDeContrato = repository.LinhaDoContrato.Retrieve(ocorrenciaUpdate.LinhaDeContratoId.Id); if (linhaDeContrato != null && linhaDeContrato.TipoDeOcorrencia == (int)Domain.Enum.TipoDeOcorrencia.Instalacao && linhaDeContrato.LimiteOcorrencias > 0) { var listOcorrencias = ocorrenciaServiceUpdate.ListarOcorrenciasPorLinhaDoContrato(ocorrenciaUpdate.LinhaDeContratoId.Id); if (listOcorrencias.Count >= linhaDeContrato.LimiteOcorrencias) { var flag = true; foreach (var ocorrencia in listOcorrencias) { if (ocorrencia.Id.Equals(ocorrenciaUpdate.Id)) { flag = false; break; } } if (flag) { throw new ArgumentException("Erro ao atualizar Ocorrência. Limite de instalações atingido."); } } } } ocorrenciaServiceUpdate.Ocorrencia = ocorrenciaUpdate; ocorrenciaServiceUpdate.Atualizar(); if (parameterUpdate.Attributes.Contains("statuscode")) { ocorrenciaServiceUpdate.AtualizarValorDoServicoASTEC(); } AtualizaCampos(ref parameterUpdate, ocorrenciaServiceUpdate.Ocorrencia); break; #endregion #region SetState case Domain.Enum.Plugin.MessageName.SetStateDynamicEntity: var state = (OptionSetValue)context.InputParameters["State"]; var status = (OptionSetValue)context.InputParameters["Status"]; var parameter = context.GetContextEntity("imagem"); Ocorrencia ocorrenciaSetState = parameter.Parse <Ocorrencia>(context.OrganizationName, context.IsExecutingOffline, adminService); ocorrenciaSetState.Status = state.Value; if (status.Value == 200040) { ocorrenciaSetState.StatusDaOcorrencia = Domain.Enum.StatusDaOcorrencia.Auditoria; ocorrenciaSetState.RazaoStatus = status.Value; var ocorrenciaServiceSetState = new OcorrenciaService(context.OrganizationName, context.IsExecutingOffline); ocorrenciaServiceSetState.Ocorrencia = ocorrenciaSetState; if (context.InputParameters.Contains("Status")) { ocorrenciaServiceSetState.AtualizarValorDoServicoASTEC(); new RepositoryService(context.OrganizationName, context.IsExecutingOffline, adminService).Ocorrencia.Update(ocorrenciaServiceSetState.Ocorrencia); } } break; #endregion } } catch (Exception ex) { throw new InvalidPluginExecutionException(ex.Message); } }
protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService) { //if (context.GetStage() != Stage.PreValidation) // return; var e = context.GetContextEntity(); var _service = new Intelbras.CRM2013.Domain.Servicos.AcessoKonvivaService(context.OrganizationName, context.IsExecutingOffline, null); switch (Util.Utilitario.ConverterEnum <Domain.Enum.Plugin.MessageName>(context.MessageName)) { case Domain.Enum.Plugin.MessageName.Create: { Domain.Model.AcessoKonviva mAcessoKonviva = e.Parse <Domain.Model.AcessoKonviva>(context.OrganizationName, context.IsExecutingOffline, userService); //Adicionado verificação preEvent pra poder mudar o nome da entidade if (mAcessoKonviva.Contato == null) { throw new ArgumentException("(CRM) Contato obrigatório"); } Domain.Model.Contato mContato = new Intelbras.CRM2013.Domain.Servicos.ContatoService(context.OrganizationName, context.IsExecutingOffline).BuscaContato(mAcessoKonviva.Contato.Id); if (mContato == null) { throw new ArgumentException("(CRM) Contato não encontrado"); } if (!new AcessoExtranetContatoService(context.OrganizationName, context.IsExecutingOffline, userService).ValidarExistenciaAcessoExtranet(mAcessoKonviva.Contato.Id)) { throw new ApplicationException("(CRM) Contato não possui acesso na extranet"); } if (!_service.ValidarTipoAcesso(mAcessoKonviva)) { throw new ApplicationException("(CRM) Usuários sem vínculo com a Intelbras não podem criar Acesso no Konviva com Perfil Administrador"); } //Já validamos se o contato existe mesmo na service com o método validarTipoAcesso e.Attributes["itbc_name"] = mContato.NomeCompleto; if (!e.Attributes.Contains("itbc_acaocrm") || e.GetAttributeValue <bool>("itbc_acaocrm") == false) { context.SharedVariables.Add("IntegraKonviva", true); } e.Attributes.Remove("itbc_acaocrm"); break; } case Domain.Enum.Plugin.MessageName.Update: { Guid contatoId; //Domain.Model.AcessoKonviva acessoKonvivaImagem = ((Entity)context.PreEntityImages["imagem"]).Parse<Domain.Model.AcessoKonviva>(context.OrganizationName, context.IsExecutingOffline, context.UserId); Domain.Model.AcessoKonviva acessoKonvivaImagem = ((Entity)context.GetContextEntityMerge("imagem")).Parse <Domain.Model.AcessoKonviva>(context.OrganizationName, context.IsExecutingOffline, context.UserId); Domain.Model.AcessoKonviva mAcessoKonvivaUpdate = e.Parse <Domain.Model.AcessoKonviva>(context.OrganizationName, context.IsExecutingOffline, userService); //Adicionado verificação preEvent pra poder mudar o nome da entidade if (acessoKonvivaImagem.Contato == null && mAcessoKonvivaUpdate.Contato == null) { throw new ArgumentException("(CRM) Contato obrigatório"); } if (mAcessoKonvivaUpdate.Contato == null) { contatoId = acessoKonvivaImagem.Contato.Id; } else { contatoId = mAcessoKonvivaUpdate.Contato.Id; } Domain.Model.Contato mContatoUpdate = new Intelbras.CRM2013.Domain.Servicos.ContatoService(context.OrganizationName, context.IsExecutingOffline).BuscaContato(contatoId); if (mContatoUpdate == null) { throw new ArgumentException("(CRM) Contato não encontrado"); } if (!_service.ValidarTipoAcesso(acessoKonvivaImagem)) { throw new ApplicationException("(CRM) Usuários sem vínculo com a Intelbras não podem criar Acesso no Konviva com Perfil Administrador"); } //Já validamos se o contato existe mesmo na service validarTipoAcesso e.Attributes["itbc_name"] = mContatoUpdate.NomeCompleto; // SharedVariable para a Integração if (!e.Attributes.Contains("itbc_acaocrm") || e.GetAttributeValue <bool>("itbc_acaocrm") == false) { context.SharedVariables.Add("IntegraKonviva", true); } e.Attributes.Remove("itbc_acaocrm"); break; } } }
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 } }