public void InsereProdutosporFamiliaComercial(string politicaComercialId, string familiasIds, int qtdIni, int qtdFin, double Fator)
        {
            try
            {
                FamiliaComercialService fcs      = new FamiliaComercialService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider);
                List <Product>          produtos = fcs.ProdutosPorFamilias(familiasIds);

                PoliticaComercial InfoPoliticaComercial = RepositoryService.PoliticaComercial.Retrieve(new Guid(politicaComercialId));

                foreach (Product produto in produtos)
                {
                    ProdutoPoliticaComercial prodPolCom = new ProdutoPoliticaComercial(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider);

                    prodPolCom.Produto    = new Lookup((Guid)produto.ID, "");
                    prodPolCom.QtdInicial = qtdIni;
                    prodPolCom.QtdFinal   = qtdFin;
                    prodPolCom.Nome       = InfoPoliticaComercial.Nome + " - " + produto.Nome;
                    if (produto.FamiliaProduto != null)
                    {
                        prodPolCom.FamiliaProduto = new Lookup(produto.FamiliaProduto.Id, "");
                    }

                    prodPolCom.PoliticaComercial  = new Lookup(new Guid(politicaComercialId), "");
                    prodPolCom.Fator              = Fator;
                    prodPolCom.DataInicioVigencia = InfoPoliticaComercial.DataInicio;
                    prodPolCom.DataFimVigencia    = InfoPoliticaComercial.DataFim;



                    RepositoryService.ProdutoPoliticaComercial.Create(prodPolCom);
                }
            }

            catch (Exception ex)
            {
                //trace.Trace(String.Format("EXCEPTION PLUGIN {0} {1} [{2}]", context.MessageName.ToLower(), "Account", DateTime.Now));
                //trace.Trace(SDKore.Helper.Error.GetMessageError(ex));
                throw new ArgumentException(ex.Message);
            }
        }
        public bool VerificarExistenciaPoliticaComercial(PoliticaComercial politicaComercial)
        {
            List <PoliticaComercial> lstPoliticaComercial;

            if (politicaComercial.AplicarPoliticaPara.Value == (int)Enum.PoliticaComercial.AplicarPolíticaPara.PerfilDeCanais)
            {
                if (politicaComercial.Estabelecimento == null || !politicaComercial.ID.HasValue ||
                    politicaComercial.UnidadeNegocio == null || politicaComercial.Classificacao == null || politicaComercial.Categoria == null ||
                    !politicaComercial.TipoDePolitica.HasValue || !politicaComercial.DataInicio.HasValue || !politicaComercial.DataFim.HasValue)
                {
                    throw new ArgumentException("Campos incompletos no formulário, preencha corretamente.");
                }

                lstPoliticaComercial = RepositoryService.PoliticaComercial.ListarPor(politicaComercial.Estabelecimento.Id, politicaComercial.ID, politicaComercial.UnidadeNegocio.Id, politicaComercial.Classificacao.Id, politicaComercial.Categoria.Id, politicaComercial.TipoDePolitica.Value, politicaComercial.DataInicio.Value, politicaComercial.DataFim.Value);

                if (lstPoliticaComercial.Count() > 0)
                {
                    return(true);
                }
            }

            return(false);
        }
        /// <summary>
        /// Retorna true para registro duplicado e false para nao
        /// </summary>
        /// <param name="IgnorarPoliticaPropria">True ignora o uso da politica propria e false não ignora</param>
        /// <returns></returns>
        public bool VerificarDuplicidadePoliticaRegistros(PoliticaComercial politicaComercial, List <Guid> lstRegistros, string tipoDuplicidade, Boolean IgnorarPoliticaPropria)
        {
            Guid?politicaId = IgnorarPoliticaPropria ? null : politicaComercial.ID;

            switch (tipoDuplicidade)
            {
            case "estado":
                if (!politicaComercial.TipoDePolitica.HasValue || !politicaComercial.AplicarPoliticaPara.HasValue || politicaComercial.Estabelecimento == null ||
                    politicaComercial.UnidadeNegocio == null || !politicaComercial.DataInicio.HasValue || !politicaComercial.DataFim.HasValue || politicaComercial.Classificacao == null || politicaComercial.Categoria == null || lstRegistros.Count == 0)
                {
                    throw new ArgumentException("(CRM) Dados incompletos.Necessário o preenchimento dos campos Tipo de Política,Aplicar Política Para,Estabelecimento,Unidade de Negócio,Classificação,Categoria");
                }

                if (RepositoryService.PoliticaComercial.ListarPorEstado(politicaId, politicaComercial.TipoDePolitica.Value, politicaComercial.AplicarPoliticaPara.Value, politicaComercial.Estabelecimento.Id, politicaComercial.UnidadeNegocio.Id, politicaComercial.Classificacao.Id, politicaComercial.Categoria.Id, lstRegistros, politicaComercial.DataInicio.Value, politicaComercial.DataFim.Value).Count > 0)
                {
                    return(true);
                }

                break;

            case "conta":
                if (!politicaComercial.TipoDePolitica.HasValue || !politicaComercial.AplicarPoliticaPara.HasValue || politicaComercial.Estabelecimento == null ||
                    politicaComercial.UnidadeNegocio == null || !politicaComercial.DataInicio.HasValue || !politicaComercial.DataFim.HasValue || lstRegistros.Count == 0)
                {
                    throw new ArgumentException("(CRM) Dados incompletos.Necessário o preenchimento dos campos Tipo de Política,Aplicar Política Para,Estabelecimento,Unidade de Negócio");
                }

                if (RepositoryService.PoliticaComercial.ListarPor(politicaId, politicaComercial.TipoDePolitica.Value, politicaComercial.AplicarPoliticaPara.Value, politicaComercial.Estabelecimento.Id, politicaComercial.UnidadeNegocio.Id, lstRegistros, politicaComercial.DataInicio.Value, politicaComercial.DataFim.Value).Count > 0)
                {
                    return(true);
                }

                break;
            }
            return(false);
        }