public void RetornoDWKaSubFamilia(int ano, int trimestre)
        {
            List <MetadaUnidade> lstMetadaUnidade = RepositoryService.MetadaUnidade.ListarMetas(ano);

            if (lstMetadaUnidade.Count == 0)
            {
                return;
            }

            DataTable dtMetaCanal = RepositoryService.PotencialdoKAporSubfamilia.ListarMetaTrimestreDW(ano, trimestre, lstMetadaUnidade);

            foreach (DataRow item in dtMetaCanal.Rows)
            {
                UnidadeNegocio    mUnidadeNegocio    = RepositoryService.UnidadeNegocio.ObterPorChaveIntegracao(item["CD_Unidade_Negocio"].ToString());
                Contato           mContato           = RepositoryService.Contato.ObterPor(item["CD_representante"].ToString());
                Segmento          mSegmento          = RepositoryService.Segmento.ObterPor(item["cd_segmento"].ToString());
                FamiliaProduto    mFamiliaProduto    = RepositoryService.FamiliaProduto.ObterPor(item["CD_familia"].ToString());
                SubfamiliaProduto mSubfamiliaProduto = RepositoryService.SubfamiliaProduto.ObterPor(item["CD_subfamilia"].ToString());

                if (mUnidadeNegocio != null && mContato != null && mSegmento != null && mFamiliaProduto != null && mSubfamiliaProduto != null)
                {
                    PotencialdoKAporSubfamilia mPotencialdoKAporSubfamilia = RepositoryService.PotencialdoKAporSubfamilia
                                                                             .Obter(mUnidadeNegocio.ID.Value, mContato.ID.Value, ano, trimestre, mSegmento.ID.Value, mFamiliaProduto.ID.Value, mSubfamiliaProduto.ID.Value);

                    if (mPotencialdoKAporSubfamilia != null)
                    {
                        mPotencialdoKAporSubfamilia.PotencialRealizado = decimal.Parse(item["vlr"].ToString());
                        RepositoryService.PotencialdoKAporSubfamilia.Update(mPotencialdoKAporSubfamilia);
                    }
                }
            }
        }
        public void Criar(PotencialdoKAporSubfamilia mPotencialdoKAporSubfamilia, List <Model.OrcamentoDetalhado> lstOrcamentoDetalhado, Guid representanteId, int numTrimestre)
        {
            PotencialdoKAporProduto mPotencialdoKAporProduto = null;

            var lstOrcamentoporSegSubFamilia = (from x in lstOrcamentoDetalhado
                                                group x by string.Format("{0}/{1}/{2}/{3}", x.Segmento.Id, x.Familia.Id, x.SubFamilia.Id, x.Produto.Id));

            foreach (var OrcaProduto in lstOrcamentoporSegSubFamilia)
            {
                mPotencialdoKAporSubfamilia = RepositoryService.PotencialdoKAporSubfamilia.Retrieve(mPotencialdoKAporSubfamilia.ID.Value);
                if (OrcaProduto.First().Produto.Id != Guid.Empty)
                {
                    var tempProduto = RepositoryService.PotencialdoKAporProduto.Obter(representanteId, OrcaProduto.First().Produto.Id, OrcaProduto.First().SubFamilia.Id, mPotencialdoKAporSubfamilia.ID.Value, (int)mPotencialdoKAporSubfamilia.Trimestre);

                    if (tempProduto == null)
                    {
                        mPotencialdoKAporProduto           = new PotencialdoKAporProduto(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider);
                        mPotencialdoKAporProduto.ID        = Guid.NewGuid();
                        mPotencialdoKAporProduto.Ano       = mPotencialdoKAporSubfamilia.Ano;
                        mPotencialdoKAporProduto.Trimestre = numTrimestre;
                        mPotencialdoKAporProduto.Produto   = new Lookup(OrcaProduto.First().Produto.Id, SDKore.Crm.Util.Utility.GetEntityName <Model.Product>());
                        mPotencialdoKAporProduto.PotencialdoKAporSubfamilia = new Lookup(mPotencialdoKAporSubfamilia.ID.Value, SDKore.Crm.Util.Utility.GetEntityName <Model.PotencialdoKAporSubfamilia>());
                        mPotencialdoKAporProduto.Nome = OrcaProduto.First().Produto.Name;
                        mPotencialdoKAporProduto.KAouRepresentante = new Lookup(representanteId, SDKore.Crm.Util.Utility.GetEntityName <Model.Contato>());

                        RepositoryService.PotencialdoKAporProduto.Create(mPotencialdoKAporProduto);
                        ServiceMetaDetalhadadoKAporProduto.Criar(mPotencialdoKAporProduto);
                    }
                }
            }
        }
        public List <PotencialdoKAporSubfamilia> ListarValoresPorUnidadeNegocio(Guid unidadeNegocioId, int ano, Domain.Enum.OrcamentodaUnidade.Trimestres trimestre)
        {
            var lista = new List <PotencialdoKAporSubfamilia>();

            string fetch = @"<fetch aggregate='true' no-lock='true' returntotalrecordcount='true' >
                              <entity name='itbc_metadokaporproduto' >
                                <attribute name='itbc_metaplanejada' alias='valor_planejado' aggregate='sum' />
                                <attribute name='itbc_metarealizada' alias='valor_realizado' aggregate='sum' />
                                <link-entity name='itbc_metadokaporsubfamilia' from='itbc_metadokaporsubfamiliaid' to='itbc_metadokaporsubfamiliaid' link-type='inner' alias='sub' >
                                  <attribute name='itbc_metadokaporsubfamiliaid' alias='id' groupby='true' />
                                  <filter type='and' >
                                    <condition attribute='itbc_ano' operator='eq' value='{0}' />
                                    <condition attribute='itbc_unidadedenegocioid' operator='eq' value='{1}' />
                                    <condition attribute='itbc_trimestre' operator='eq' value='{2}' />
                                  </filter>
                                </link-entity>
                              </entity>
                            </fetch>";


            fetch = string.Format(fetch, ano, unidadeNegocioId, (int)trimestre);

            var retrieveMultiple = new RetrieveMultipleRequest()
            {
                Query = new FetchExpression(fetch)
            };

            EntityCollection collection = ((RetrieveMultipleResponse)this.Execute(retrieveMultiple)).EntityCollection;

            foreach (var item in collection.Entities)
            {
                var potencialSubfamilia = new PotencialdoKAporSubfamilia(OrganizationName, IsOffline, Provider)
                {
                    ID = (Guid)((AliasedValue)(item.Attributes["id"])).Value,
                    PotencialPlanejado = ((Money)((AliasedValue)item.Attributes["valor_planejado"]).Value).Value,
                    PotencialRealizado = ((Money)((AliasedValue)item.Attributes["valor_realizado"]).Value).Value
                };

                lista.Add(potencialSubfamilia);
            }

            return(lista);
        }
        public void Criar(PotencialdoKAporFamilia mPotencialdoKAporFamilia, List <Model.OrcamentoDetalhado> lstOrcamentoDetalhado, Guid representanteId, int numTrimestre)
        {
            PotencialdoKAporSubfamilia mPotencialdoKAporSubfamilia = null;

            var lstOrcamentoporSegSubFamilia = (from x in lstOrcamentoDetalhado
                                                group x by string.Format("{0}/{1}/{2}", x.Segmento.Id, x.Familia.Id, x.SubFamilia.Id));

            foreach (var OrcaSegSubFamilia in lstOrcamentoporSegSubFamilia)
            {
                mPotencialdoKAporFamilia = RepositoryService.PotencialdoKAporFamilia.Retrieve(mPotencialdoKAporFamilia.ID.Value);
                PotencialdoKAporSubfamilia tempSubFamilia = RepositoryService.PotencialdoKAporSubfamilia.Obterpor(representanteId, OrcaSegSubFamilia.First().Familia.Id, mPotencialdoKAporFamilia.ID.Value, OrcaSegSubFamilia.First().Segmento.Id, OrcaSegSubFamilia.First().SubFamilia.Id, mPotencialdoKAporFamilia.Trimestre.HasValue ? mPotencialdoKAporFamilia.Trimestre.Value : int.MinValue);
                if (tempSubFamilia == null)
                {
                    mPotencialdoKAporSubfamilia    = new PotencialdoKAporSubfamilia(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider);
                    mPotencialdoKAporSubfamilia.ID = Guid.NewGuid();
                    mPotencialdoKAporSubfamilia.UnidadedeNegocio = mPotencialdoKAporFamilia.UnidadedeNegocio;
                    mPotencialdoKAporSubfamilia.Ano                     = mPotencialdoKAporFamilia.Ano;
                    mPotencialdoKAporSubfamilia.Trimestre               = numTrimestre;
                    mPotencialdoKAporSubfamilia.Segmento                = new Lookup(OrcaSegSubFamilia.First().Segmento.Id, SDKore.Crm.Util.Utility.GetEntityName <Model.Segmento>());
                    mPotencialdoKAporSubfamilia.FamiliadeProduto        = new Lookup(OrcaSegSubFamilia.First().Familia.Id, SDKore.Crm.Util.Utility.GetEntityName <Model.FamiliaProduto>());
                    mPotencialdoKAporSubfamilia.SubfamiliadeProduto     = new Lookup(OrcaSegSubFamilia.First().SubFamilia.Id, SDKore.Crm.Util.Utility.GetEntityName <Model.SubfamiliaProduto>());
                    mPotencialdoKAporSubfamilia.PotencialdoKAporFamilia = new Lookup(mPotencialdoKAporFamilia.ID.Value, SDKore.Crm.Util.Utility.GetEntityName <Model.PotencialdoKAporFamilia>());
                    mPotencialdoKAporSubfamilia.Nome                    = (mPotencialdoKAporFamilia.Nome + " - " + OrcaSegSubFamilia.First().SubFamilia.Name).Length > 99 ? (mPotencialdoKAporFamilia.Nome + " - " + OrcaSegSubFamilia.First().SubFamilia.Name).Substring(1, 99) : (mPotencialdoKAporFamilia.Nome + " - " + OrcaSegSubFamilia.First().SubFamilia.Name);
                    mPotencialdoKAporSubfamilia.KAouRepresentante       = new Lookup(representanteId, SDKore.Crm.Util.Utility.GetEntityName <Model.Contato>());
                    RepositoryService.PotencialdoKAporSubfamilia.Create(mPotencialdoKAporSubfamilia);
                }

                if (tempSubFamilia != null)
                {
                    ServicePotencialdoKAporProduto.Criar(tempSubFamilia, OrcaSegSubFamilia.ToList(), representanteId, numTrimestre);
                }
                else
                {
                    ServicePotencialdoKAporProduto.Criar(mPotencialdoKAporSubfamilia, OrcaSegSubFamilia.ToList(), representanteId, numTrimestre);
                }
            }
        }