public void VerificaVinculoProdutoVsProdutoPortifolioAlteracao(ProdutoPortfolio ProdPortfolio, ProdutoPortfolio ProdPortfolioPre) { if (ProdPortfolio.StateCode.HasValue) { if (ProdPortfolio.StateCode.Value == (int)Domain.Enum.ProdutoPortfolio.StateCode.Inativo) { return; } } if (ProdPortfolioPre.Produto == null) { throw new ArgumentException("(CRM) Erro de dados: O campo Produto obrigatório não preenchido em Portifolio do produto"); } if (ProdPortfolioPre.Portfolio == null) { throw new ArgumentException("(CRM) Erro de dados: O campo Portfolio obrigatório não preenchido em Portifolio do produto"); } if (ProdPortfolio.Produto == null) { ProdPortfolio.Produto = new Lookup(ProdPortfolioPre.Produto.Id, ProdPortfolioPre.Produto.Type); } if (ProdPortfolio.Portfolio == null) { ProdPortfolio.Portfolio = new Lookup(ProdPortfolioPre.Portfolio.Id, ProdPortfolioPre.Portfolio.Type); } Domain.Model.Portfolio portfolio = RepositoryService.Portfolio.Retrieve(ProdPortfolio.Portfolio.Id); Domain.Model.Product produto = RepositoryService.Produto.Retrieve(ProdPortfolio.Produto.Id); if (portfolio == null) { throw new ArgumentException("(CRM) Portfólio não encontrado"); } if (produto == null) { throw new ArgumentException("(CRM) Produto não encontrado"); } if (portfolio.Tipo == (int)Domain.Enum.Portfolio.Tipo.Solucao) { if (portfolio.UnidadeNegocio.Id == produto.UnidadeNegocio.Id) { throw new ArgumentException("(CRM) Para portfólios do tipo Solução a únidade de negócios do produto não pode ser igual a do portfólio."); } } else { if (portfolio.UnidadeNegocio.Id != produto.UnidadeNegocio.Id) { throw new ArgumentException("(CRM) O Produto e o Portfolio não estão na mesma Unidade de Negócio."); } } }
public void Execute(IServiceProvider serviceProvider) { var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); ITracingService trace = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); Entity Entidade = (Entity)context.InputParameters["Target"]; Domain.Model.Portfolio portfolio = Entidade.Parse <Domain.Model.Portfolio>(context.OrganizationName, context.IsExecutingOffline); if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) { switch (Util.Utilitario.ConverterEnum <Domain.Enum.Plugin.MessageName>(context.MessageName)) { case Domain.Enum.Plugin.MessageName.Create: new Intelbras.CRM2013.Domain.Servicos.PortfolioService(context.OrganizationName, context.IsExecutingOffline).VerificaDuplicidadeClassificadores(portfolio); break; case Domain.Enum.Plugin.MessageName.Update: if (context.PreEntityImages.Contains("imagem") && context.PreEntityImages["imagem"] is Entity) { var portfolioPre = ((Entity)context.PreEntityImages["imagem"]).Parse <Domain.Model.Portfolio>(context.OrganizationName, context.IsExecutingOffline); if (portfolio.Tipo.HasValue == false) { portfolio.Tipo = portfolioPre.Tipo; } if (portfolio.UnidadeNegocio == null) { portfolio.UnidadeNegocio = new SDKore.DomainModel.Lookup(portfolioPre.UnidadeNegocio.Id, SDKore.Crm.Util.Utility.GetEntityName <Intelbras.CRM2013.Domain.Model.UnidadeNegocio>()); } if (portfolio.Classificacao == null) { portfolio.Classificacao = new SDKore.DomainModel.Lookup(portfolioPre.Classificacao.Id, SDKore.Crm.Util.Utility.GetEntityName <Intelbras.CRM2013.Domain.Model.Classificacao>()); } } new Intelbras.CRM2013.Domain.Servicos.PortfolioService(context.OrganizationName, context.IsExecutingOffline).VerificaDuplicidadeClassificadores(portfolio); break; } } }