public List <MetadoCanal> ListarValoresPorUnidadeNegocio(Guid unidadeNegocioId, int ano) { var lista = new List <MetadoCanal>(); string fetch = @"<fetch aggregate='true' no-lock='true' > <entity name='itbc_metatrimestrecanal' > <attribute name='itbc_metaplanejada' alias='valor_planejado' aggregate='sum' /> <attribute name='itbc_metarealizada' alias='valor_realizado' aggregate='sum' /> <link-entity name='itbc_metadocanal' from='itbc_metadocanalid' to='itbc_metadocanalid' > <attribute name='itbc_metadocanalid' alias='id' groupby='true' /> <filter type='and' > <condition attribute='itbc_ano' operator='eq' value='{0}' /> <condition attribute='itbc_unidadedenegocioid' operator='eq' value='{1}' /> </filter> </link-entity> </entity> </fetch>"; fetch = string.Format(fetch, ano, unidadeNegocioId); var retrieveMultiple = new RetrieveMultipleRequest() { Query = new FetchExpression(fetch) }; EntityCollection collection = ((RetrieveMultipleResponse)this.Execute(retrieveMultiple)).EntityCollection; foreach (var item in collection.Entities) { var meta = new MetadoCanal(OrganizationName, IsOffline, Provider) { ID = (Guid)((AliasedValue)(item.Attributes["id"])).Value, MetaPlanejada = ((Money)((AliasedValue)item.Attributes["valor_planejado"]).Value).Value, MetaRealizada = ((Money)((AliasedValue)item.Attributes["valor_realizado"]).Value).Value }; lista.Add(meta); } return(lista); }
public void RetornoDWMetaCanalManualProdutoDetalhado(int ano, int trimestre) { List <MetadaUnidade> lstMetadaUnidade = RepositoryService.MetadaUnidade.ListarMetas(ano); if (lstMetadaUnidade.Count == 0) { return; } DataTable dtMetaCanalProdDetalhado = RepositoryService.MetaDetalhadadoCanalporProduto.ListarMetaCanalManualDetalhadoProdutoDW(ano, trimestre, lstMetadaUnidade); foreach (DataRow item in dtMetaCanalProdDetalhado.Rows) { UnidadeNegocio mUnidadeNegocio = RepositoryService.UnidadeNegocio.ObterPorChaveIntegracao(item["CD_Unidade_Negocio"].ToString()); Conta mConta = RepositoryService.Conta.ObterCanal(item["CD_Emitente"].ToString()); if (mUnidadeNegocio != null && mConta != null) { MetadoCanal mMetadoCanal = RepositoryService.MetadoCanal.ObterPor(mUnidadeNegocio.ID.Value, trimestre, mConta.ID.Value, ano); if (mMetadoCanal != null) { MetaDetalhadadoCanalporProduto mMetaDetalhadadoCanalporProduto = RepositoryService.MetaDetalhadadoCanalporProduto .ObterManual(trimestre, ano, mConta.ID.Value, mMetadoCanal.ID.Value, Convert.ToInt32(item["cd_mes"].ToString()), mUnidadeNegocio.ID.Value); if (mMetaDetalhadadoCanalporProduto != null) { mMetaDetalhadadoCanalporProduto.MetaRealizada = decimal.Parse(item["vlr"].ToString()); mMetaDetalhadadoCanalporProduto.QtdeRealizada = decimal.Parse(item["qtde"].ToString()); RepositoryService.MetaDetalhadadoCanalporProduto.Update(mMetaDetalhadadoCanalporProduto); } } } } }
public void CriarManual(MetadoCanal mMetadoCanal, Trimestre trimestre) { try { MetaDetalhadadoCanalporProduto mMetaDetalhadadoCanalporProduto; mMetaDetalhadadoCanalporProduto = RepositoryService.MetaDetalhadadoCanalporProduto.ListarPorManual(mMetadoCanal.Canal.Id, (int)trimestre.Mes1); if (mMetaDetalhadadoCanalporProduto == null) { mMetaDetalhadadoCanalporProduto = new MetaDetalhadadoCanalporProduto(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline); } mMetaDetalhadadoCanalporProduto.Ano = mMetadoCanal.Ano; mMetaDetalhadadoCanalporProduto.Trimestre = (int)trimestre.trimestre; mMetaDetalhadadoCanalporProduto.Mes = (int)trimestre.Mes1; mMetaDetalhadadoCanalporProduto.MetaPlanejada = trimestre.Mes1Vlr.HasValue ? trimestre.Mes1Vlr.Value : 0; mMetaDetalhadadoCanalporProduto.Canal = new Lookup(mMetadoCanal.Canal.Id, SDKore.Crm.Util.Utility.GetEntityName <Conta>()); mMetaDetalhadadoCanalporProduto.MetadoCanal = new Lookup(mMetadoCanal.ID.Value, SDKore.Crm.Util.Utility.GetEntityName <MetadoCanal>()); mMetaDetalhadadoCanalporProduto.MetadoCanal = mMetadoCanal.UnidadedeNegocio; if (!mMetaDetalhadadoCanalporProduto.ID.HasValue) { RepositoryService.MetaDetalhadadoCanalporProduto.Create(mMetaDetalhadadoCanalporProduto); } else { RepositoryService.MetaDetalhadadoCanalporProduto.Update(mMetaDetalhadadoCanalporProduto); } mMetaDetalhadadoCanalporProduto = RepositoryService.MetaDetalhadadoCanalporProduto.ListarPorManual(mMetadoCanal.Canal.Id, (int)trimestre.Mes2); if (mMetaDetalhadadoCanalporProduto == null) { mMetaDetalhadadoCanalporProduto = new MetaDetalhadadoCanalporProduto(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline); } mMetaDetalhadadoCanalporProduto.Ano = mMetadoCanal.Ano; mMetaDetalhadadoCanalporProduto.Trimestre = (int)trimestre.trimestre; mMetaDetalhadadoCanalporProduto.Mes = (int)trimestre.Mes2; mMetaDetalhadadoCanalporProduto.MetaPlanejada = trimestre.Mes2Vlr.HasValue ? trimestre.Mes2Vlr : 0; mMetaDetalhadadoCanalporProduto.Canal = new Lookup(mMetadoCanal.Canal.Id, SDKore.Crm.Util.Utility.GetEntityName <Conta>()); mMetaDetalhadadoCanalporProduto.MetadoCanal = new Lookup(mMetadoCanal.ID.Value, SDKore.Crm.Util.Utility.GetEntityName <MetadoCanal>()); mMetaDetalhadadoCanalporProduto.MetadoCanal = mMetadoCanal.UnidadedeNegocio; if (!mMetaDetalhadadoCanalporProduto.ID.HasValue) { RepositoryService.MetaDetalhadadoCanalporProduto.Create(mMetaDetalhadadoCanalporProduto); } else { RepositoryService.MetaDetalhadadoCanalporProduto.Update(mMetaDetalhadadoCanalporProduto); } mMetaDetalhadadoCanalporProduto = RepositoryService.MetaDetalhadadoCanalporProduto.ListarPorManual(mMetadoCanal.Canal.Id, (int)trimestre.Mes3); if (mMetaDetalhadadoCanalporProduto == null) { mMetaDetalhadadoCanalporProduto = new MetaDetalhadadoCanalporProduto(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline); } mMetaDetalhadadoCanalporProduto.Ano = mMetadoCanal.Ano; mMetaDetalhadadoCanalporProduto.Trimestre = (int)trimestre.trimestre; mMetaDetalhadadoCanalporProduto.Mes = (int)trimestre.Mes3; mMetaDetalhadadoCanalporProduto.MetaPlanejada = trimestre.Mes3Vlr.HasValue ? trimestre.Mes3Vlr : 0; mMetaDetalhadadoCanalporProduto.Canal = new Lookup(mMetadoCanal.Canal.Id, SDKore.Crm.Util.Utility.GetEntityName <Conta>()); mMetaDetalhadadoCanalporProduto.MetadoCanal = new Lookup(mMetadoCanal.ID.Value, SDKore.Crm.Util.Utility.GetEntityName <MetadoCanal>()); mMetaDetalhadadoCanalporProduto.MetadoCanal = mMetadoCanal.UnidadedeNegocio; if (!mMetaDetalhadadoCanalporProduto.ID.HasValue) { RepositoryService.MetaDetalhadadoCanalporProduto.Create(mMetaDetalhadadoCanalporProduto); } else { RepositoryService.MetaDetalhadadoCanalporProduto.Update(mMetaDetalhadadoCanalporProduto); } } catch (Exception ex) { throw new ArgumentException("(CRM) Ocorreu erro ao gerar Detalhe meta manual, contate o administrator.", ex); } }
///////////////////// CASO DE USO 2 e 3 APURAÇÃO DE BENEFICIO E COMPROMISSO POR FILIAL E POR MATRIZ public void MonitoramntoAutomaticoParaApuracaoDeCompromissosEBaneficiosPorFilialEMatriz() { Trace = new SDKore.Helper.Trace("MonitoramentoAutomatico"); mensagemLog = new List <string>(); string dataProc = DateTime.Now.ToString() + " - "; #region Validando Parametros if (StatusCompromissoCumprido == null) { throw new ApplicationException("A execução do monitoramento foi interrompida, não foi encontrado o Status do Compromisso: " + Intelbras.CRM2013.Domain.Enum.CompromissoCanal.StatusCompromisso.Cumprido); } if (StatusCompromissoNaoCumprido == null) { throw new ApplicationException("A execução do monitoramento foi interrompida, não foi encontrado o Status do Compromisso: " + Intelbras.CRM2013.Domain.Enum.CompromissoCanal.StatusCompromisso.Nao_Cumprido); } ParametroGlobal dataTimestre = ParametroGlobal.ListarParamGlobalPorTipoParam((int)Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.DatasTrimestre).FirstOrDefault(); if (dataTimestre == null) { throw new ApplicationException("A execução do monitoramento foi interrompida, o parâmetro global não foi encontrado ou está preenchido com valores incorretos."); } CompromissosDoPrograma compProgMeta = CompromissoDoCanal.BuscarCompromissoDoPrograma((int)Intelbras.CRM2013.Domain.Enum.CompromissoPrograma.Codigo.MetaTrimestral); if (compProgMeta == null) { throw new ApplicationException("Não foi possível encontrar o compromisso do programa de MetasTrimestrais"); } CompromissosDoPrograma compromissoTecnicoTreinadoCertificado = CompromissoDoCanal.BuscarCompromissoDoPrograma((int)Intelbras.CRM2013.Domain.Enum.CompromissoPrograma.Codigo.TecnicoTreinadoCertificado); if (compromissoTecnicoTreinadoCertificado == null) { throw new ApplicationException("Compromisso tecnico treinado certificado não encontrado"); } CompromissosDoPrograma compProgLinhaCorte = CompromissoDoCanal.BuscarCompromissoDoPrograma((int)Intelbras.CRM2013.Domain.Enum.CompromissoPrograma.Codigo.LinhaCorteTrimestral); if (compProgLinhaCorte == null) { throw new ApplicationException("Não foi possível encontrar o compromisso do programa de Linhas de cortes"); } #endregion DateTime ultimoDiaDoUltimoTrimestre = new SDKore.Helper.DateTimeHelper().UltimoDiaDoUltimoTrimestre(); int ano = ultimoDiaDoUltimoTrimestre.Year; int trimestre = (ultimoDiaDoUltimoTrimestre.Month - 1) / 3 + 1; var trimestreOrcamentodaUnidade = Helper.ConverterTrimestreOrcamentoUnidade(trimestre); // Obtem lista de canais matriz ou filial // (CASO USO 2: STEP 2) List <Conta> lstContas = ContaService.ListarContasParticipantesMAtrizEFilial(); // (CASO USO 2: STEP 2) foreach (Conta canal in lstContas) { if (canal.TipoConta == (int)Enum.Conta.MatrizOuFilial.Filial && canal.ApuracaoBeneficiosCompromissos == (int)Enum.Conta.ApuracaoDeBeneficiosECompromissos.Centralizada_Na_Matriz) { continue; } // LISTA DE CATEGORIAS DO CANAL // (CASO USO 2: STEP 4) List <CategoriasCanal> lstCat = CategoriaCanal.ListarPor(canal.ID, null); // caso seja um canal matriz obtem lista de suas filiais // (CASO USO 2: STEP 4) List <Conta> listaFiliais = ContaService.ListarContasFiliaisPorMatriz(canal.ID.Value); listaFiliais = listaFiliais.Where(x => x.ParticipantePrograma.HasValue && x.ParticipantePrograma.Value == (int)Enum.Conta.ParticipaDoPrograma.Sim).ToList(); // refina lista de unidade de negocio por categoria // (CASO USO 2: STEP 4) List <Guid> unidadesDeNegocio = this.RefinaUnidadeNegocio(lstCat); // (CASO USO 2: STEP 5 INICIANDO) foreach (var unNeg in unidadesDeNegocio) { HistoricoCompraCanal histCanal = new HistoricoCompraCanal(OrganizationName, isOffline); MetadoCanal metaCanal = new MetadoCanal(OrganizationName, isOffline); decimal valorHistorico = 0, metaPlanejada = 0; CompromissosDoCanal compCanal = CompromissoDoCanal.BuscarCompromissoCanal(compProgMeta.ID.Value, unNeg, canal.ID.Value); if (compCanal == null) { continue; } // SE FOR UM CANAL CENTRALIZADO NA MATRI OBTEM SUAS FILIAIS // ESSA INTERAÇÃO GARANTE QUE NO CASO DE UM CANAL SER UMA MATRIZ, O CASO USO 3: STEP 6,7,8 SERA ORRETAMENTE CONTEMPLADO // VISTO QUE O VALOR DO HISTORICO ESTA SENDO SOMADO CASO HAJA FILIAIS PARA O CANAL CORRENTE foreach (Intelbras.CRM2013.Domain.Model.Conta filial in listaFiliais) { if (canal.TipoConta == (int)Enum.Conta.MatrizOuFilial.Matriz && canal.ApuracaoBeneficiosCompromissos == (int)Enum.Conta.ApuracaoDeBeneficiosECompromissos.Por_Filiais) { continue; } List <CategoriasCanal> lstCatFiliais = CategoriaCanal.ListarPor(filial.ID, null); foreach (var categoria in lstCatFiliais) { if (categoria.UnidadeNegocios != null && categoria.UnidadeNegocios.Id == unNeg) { histCanal = null; metaCanal = null; // (CASO USO 3: STEP 6) hISTORICO DE COMPRA DAS FILIAIS, CASO CANAL SEJA CENTRALIZADO NA MATRI histCanal = RepositoryService.HistoricoCompraCanal.ObterPor(categoria.UnidadeNegocios.Id, (int)trimestreOrcamentodaUnidade, ano, filial.ID.Value); // so soma se for diferente do proprio canal pois posteriormente é somado o canal corrente if (histCanal != null && histCanal.Valor.HasValue) { valorHistorico += histCanal.Valor.Value; } } } } #region VALIDANDO BENEFICIO DE META x HISTORICO // EM CASO DE MATRIZ O VALOR DO HISTORICO É CALCULADO PARA TODAS A FILIAIS // (CASO USO 3: STEP 6) histCanal = RepositoryService.HistoricoCompraCanal.ObterPor(unNeg, (int)trimestreOrcamentodaUnidade, ano, canal.ID.Value); // (CASO USO 2: STEP 6) e // (CASO USO 3: STEP 9) metaCanal = MetaDoCanal.ObterPor(unNeg, (int)trimestreOrcamentodaUnidade, canal.ID.Value, ano); Trace.Add(dataProc + "Obter Meta do Canal - Un [{0}] Trimeste [{1}] Canal [{2}] Ano [{3}] Encontrou? [{4}]", unNeg, trimestre, canal.ID.Value, ano, (metaCanal != null)); if (metaCanal == null || !metaCanal.MetaPlanejada.HasValue || metaCanal.MetaPlanejada.Value == 0) { UnidadeNegocio un = RepositoryService.UnidadeNegocio.Retrieve(unNeg); string mensagem = string.Format("Não foi possível obter a Meta do Canal para Canal [{0}] e Unidade de Negócio [{1}]", canal.CodigoMatriz, un.Nome); this.AtualizarCompromissoCanalInconsistente(mensagem, compCanal, canal); } else { if (histCanal != null && histCanal.Valor.HasValue) { valorHistorico += histCanal.Valor.Value; } // (CASO USO 2: STEP 7) ou // (CASO USO 3: STEP 10) #region CALCULO DE HITORICO X META E BAIXA EM COMPROMISSO metaPlanejada = metaCanal.MetaPlanejada.Value; StatusCompromissos statusCompromissoMeta = (valorHistorico >= metaPlanejada) ? StatusCompromissoCumprido : StatusCompromissoNaoCumprido; if (statusCompromissoMeta != null) { compCanal.StatusCompromisso = new Lookup(statusCompromissoMeta.ID.Value, ""); compCanal.Validade = DateTime.Now.Date.AddMonths(3); CompromissoDoCanal.Atualizar(compCanal); } #endregion } #endregion #region VALIDANDO BENEFICIO DE LINHA DE CORTE valorHistorico = 0; decimal linhaCorte = 0; Lookup estadoCanal = canal.Endereco1Estadoid; Lookup classCanal = canal.Classificacao; StatusCompromissos statusComp = null; // compromisso do canal para linha de corte CompromissosDoCanal compCanalLinCorte = CompromissoDoCanal.BuscarCompromissoCanal(compProgLinhaCorte.ID.Value, unNeg, canal.ID.Value); #region VALIDAÇÕES PARA LOG if (compCanal == null) { InserirLog(dataProc + "Não foi possível encontrar o compromisso do canal de Linha de Corte para o canal : " + canal.ID.Value.ToString()); } if (canal.Endereco1Estadoid == null) { InserirLog(dataProc + "Monitoramento de linhas de corte não realizado para o canal : " + canal.ID.Value.ToString() + " Estado do canal não preenchido."); } if (canal.Classificacao == null) { InserirLog(dataProc + "Monitoramento de linhas de corte não realizado para o canal : " + canal.ID.Value.ToString() + " Classificação do canal não preenchido."); } #endregion #region PARA AS FILIAIS DA MATRIZ // EM CASO DE MATRIZ O VALOR DO HISTORICO X LINHA DE CORTE É CALCULADO PARA TODAS A FILIAIS // (CASO USO 3: STEP 6) foreach (Intelbras.CRM2013.Domain.Model.Conta filial in listaFiliais) { if (canal.TipoConta == (int)Enum.Conta.MatrizOuFilial.Matriz && canal.ApuracaoBeneficiosCompromissos == (int)Enum.Conta.ApuracaoDeBeneficiosECompromissos.Por_Filiais) { continue; } histCanal = null; CRM2013.Domain.Model.Estado estado = new Intelbras.CRM2013.Domain.Model.Estado(this.OrganizationName, this.isOffline); CRM2013.Domain.Model.Municipio municipio = new Intelbras.CRM2013.Domain.Model.Municipio(this.OrganizationName, this.isOffline); CRM2013.Domain.Model.Categoria _categoriaCanal = new Intelbras.CRM2013.Domain.Model.Categoria(this.OrganizationName, this.isOffline); List <Guid> lstUnidade = new List <Guid>(); List <CategoriasCanal> lstCatFiliais = new List <CategoriasCanal>(); if (canal.Endereco1Municipioid == null) { InserirLogFormat("O Município do Canal [{0}] não está preenchido.", canal.CodigoMatriz); } // (CASO USO 3: STEP 6) histCanal = RepositoryService.HistoricoCompraCanal.ObterPor(unNeg, (int)trimestreOrcamentodaUnidade, ano, filial.ID.Value); if (histCanal != null && histCanal.Valor.HasValue) { valorHistorico += histCanal.Valor.Value; } lstCatFiliais = CategoriaCanal.ListarPor(filial.ID, null); foreach (var categoria in lstCatFiliais) { if (categoria.UnidadeNegocios != null && categoria.UnidadeNegocios.Id == unNeg) { // (CASO USO 3: STEP 12) if (classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Dist_BoxMover || classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Dist_VAD) { lstUnidade = new List <Guid>(); lstUnidade.Add(categoria.UnidadeNegocios.Id); estado.ID = estadoCanal.Id; // (CASO USO 3: STEP 11) MUNICIPIO DO CANAL municipio = new Intelbras.CRM2013.Domain.Servicos.EnderecoServices(this.OrganizationName, this.isOffline).ObterMunicipio(canal.Endereco1Municipioid.Id); List <LinhaCorteDistribuidor> listaLinhaCorte = LinhaCorteService.ListarLinhadeCorteDistribuidor(lstUnidade, estado, municipio.CapitalOuInterior); //(CASO USO 3: STEP 14) if (listaLinhaCorte == null || listaLinhaCorte.Count == 0) { InserirLog(dataProc + "Linha de corte não encontrada para a filial: " + filial.CodigoMatriz); continue; } foreach (var item in listaLinhaCorte) { //(CASO USO 3: STEP 12) //Se achar mais de uma linha de corte, verifica se o campo capitalOuInterior é igual ao valor do municipio ligado ao canal if ((listaLinhaCorte.Count > 1 && item.CapitalOuInterior == municipio.CapitalOuInterior) || listaLinhaCorte.Count == 1) { linhaCorte += item.LinhaCorteTrimestral.Value; } //(CASO USO 3: STEP 14) if (!item.LinhaCorteTrimestral.HasValue) { InserirLog(dataProc + "Linha de corte não encontrada para a filial : " + filial.ID.Value.ToString()); } //this.AtualizarCompromissoCanalInconsistente("Linha de corte não possui valor para a filial : : " + filial.ID.Value.ToString() + " do canal : ", compCanal, canal); } } //SE FOR REVENDA TRANSACIONAL OU RELACIONAL // (CASO USO 3: STEP 17) if (classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Rev_Rel || classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Rev_Trans) { foreach (var item in lstCat) { lstUnidade = new List <Guid>(); lstUnidade.Add(unNeg); _categoriaCanal.ID = item.ID; List <LinhaCorteRevenda> listaLinhaCorteRevenda = LinhaCorteService.ListarLinhadeCorteRevenda(lstUnidade, _categoriaCanal); //(CASO USO 3: STEP 14) if (listaLinhaCorteRevenda == null || listaLinhaCorteRevenda.Count == 0) { InserirLog(dataProc + "Linha de corte não encontrada para a filial : " + filial.ID.Value.ToString()); } //this.AtualizarCompromissoCanalInconsistente("Linha de corte não encontrada para a filial : " + filial.ID.Value.ToString() + " do canal : ", compCanal, canal); foreach (var _linhaCorteRevenda in listaLinhaCorteRevenda) { //(CASO USO 3: STEP 19) if (!_linhaCorteRevenda.LinhaCorteTrimestral.HasValue) { InserirLog(dataProc + "Linha de corte não encontrada para a filial : " + filial.ID.Value.ToString()); } //this.AtualizarCompromissoCanalInconsistente("Linha de corte não possui valor para a filial : : " + filial.ID.Value.ToString() + " do canal : ", compCanal, canal); linhaCorte += _linhaCorteRevenda.LinhaCorteTrimestral.Value; } } } } } } #endregion // OBTEM HISTORICO DE CANAL histCanal = RepositoryService.HistoricoCompraCanal.ObterPor(unNeg, (int)trimestreOrcamentodaUnidade, ano, canal.ID.Value); // SE TIVER HISTORICO SOMA COM VARIAVEL SOMADORA valorHistorico if (histCanal != null && histCanal.Valor.HasValue) { valorHistorico += histCanal.Valor.Value; } #region BOXMOVER OU VAD //(CASO USO 2: STEP 11) if (classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Dist_BoxMover || classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Dist_VAD) { LinhaCorteDistribuidor objLinhaCorte = (LinhaCorteDistribuidor)LinhaCorteService.ObterLinhaCorte(unNeg, estadoCanal.Id, null, "distribuidor"); if (objLinhaCorte == null || objLinhaCorte.LinhaCorteTrimestral == null) { InserirLog(dataProc + "Linha de corte não encontrada para a canal : " + canal.ID.Value.ToString()); } //this.AtualizarCompromissoCanalInconsistente("Linha de corte não encontrada para o canal : ", compCanal, canal); if (!objLinhaCorte.LinhaCorteTrimestral.HasValue) { InserirLog(dataProc + "Linha de corte não encontrada para a canal : " + canal.ID.Value.ToString()); } //this.AtualizarCompromissoCanalInconsistente("Linha de corte não possui valor para o canal : ", compCanal, canal); linhaCorte += objLinhaCorte.LinhaCorteTrimestral.Value; } #endregion #region RELACIONAL OU TRANSACIONAL //(CASO USO 2: STEP 11) if (classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Rev_Rel || classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Rev_Trans) { foreach (var item in lstCat) { LinhaCorteRevenda objLinhaCorteRevenda = (LinhaCorteRevenda)LinhaCorteService.ObterLinhaCorte(unNeg, null, item.Categoria.Id, "revenda"); if (objLinhaCorteRevenda == null || objLinhaCorteRevenda.LinhaCorteTrimestral == null) { InserirLog(dataProc + "Linha de corte não encontrada para a canal : " + canal.ID.Value.ToString()); } //this.AtualizarCompromissoCanalInconsistente("Linha de corte não encontrada para o canal : ", compCanal, canal); if (!objLinhaCorteRevenda.LinhaCorteTrimestral.HasValue) { InserirLog(dataProc + "Linha de corte não encontrada para a canal : " + canal.ID.Value.ToString()); } //this.AtualizarCompromissoCanalInconsistente("Linha de corte não possui valor para o canal : ", compCanal, canal); linhaCorte += objLinhaCorteRevenda.LinhaCorteTrimestral.Value; } } #endregion #region CALCULO DE HISTORICO X LINHA DE CORTE statusComp = (valorHistorico >= linhaCorte) ? StatusCompromissoCumprido : StatusCompromissoNaoCumprido; compCanalLinCorte.StatusCompromisso = new Lookup(statusComp.ID.Value, ""); compCanalLinCorte.Validade = DateTime.Now.Date.AddMonths(3); CompromissoDoCanal.Atualizar(compCanalLinCorte); #endregion #endregion #region VALIDANDO TREINAMENTO // ESTE CASO DE USO ATENDE O 2 E O 3 POIS AMBOS IDEPENDEM DE MATRIZ OU FILIAL // E O MESMO DEVE SER REFERENCIADO PELO CANAL EM QUESTÃO CompromissosDoCanal compTreinamento = CompromissoDoCanal.BuscarCompromissoCanal(compromissoTecnicoTreinadoCertificado.ID.Value, unNeg, canal.ID.Value); if (compTreinamento == null) { continue; } //(CASO USO 2: STEP 12) List <TreinamentoCanal> lstTreinamentoCanal = RepositoryService.TreinamentoCanal.ListarPor(null, null, compTreinamento.ID.Value); StatusCompromissos statusCompromissoTreinamento = StatusCompromissoCumprido; //(CASO USO 2: STEP 13) foreach (TreinamentoCanal _treinamentocanal in lstTreinamentoCanal) { if (_treinamentocanal.StatusCompromisso.Name == Enum.TreinamentoCanal.StatusCompromisso.Nao_Cumprido) { statusCompromissoTreinamento = StatusCompromissoNaoCumprido; break; } } compTreinamento.StatusCompromisso = new Lookup(statusCompromissoTreinamento.ID.Value, ""); compTreinamento.Validade = DateTime.Now.Date.AddMonths(3); CompromissoDoCanal.Atualizar(compTreinamento); #endregion Trace.SaveClear(); } } #region MANDA EMAIL DE LOG StringBuilder sb = new StringBuilder(); foreach (string item in mensagemLog) { sb.AppendLine(item); } EnviaEmailDeLog("Monitoramnto Automatico"); #endregion }
public void Criar(Model.MetadaUnidadeporTrimestre mMetadaUnidadeporTrimestre, MetadoCanal mMetadoCanal, List <Model.OrcamentoDetalhado> lstOrcamentoDetalhado) { MetadoCanalporSegmento mMetadoCanalporSegmento; var lstOrcamentoporSegmento = (from x in lstOrcamentoDetalhado group x by string.Format("{0}", x.Segmento.Id)); foreach (var OrcaSegmento in lstOrcamentoporSegmento) { //mMetadoCanalporSegmento = RepositoryService.MetadoCanalporSegmento.Obter(mMetadaUnidadeporTrimestre.MetadaUnidade.Id, OrcaSegmento.First().Canal.Id, mMetadaUnidadeporTrimestre.Trimestre.Value, OrcaSegmento.First().Segmento.Id); mMetadoCanalporSegmento = RepositoryService.MetadoCanalporSegmento.Obter(mMetadaUnidadeporTrimestre.UnidadedeNegocio.Id, OrcaSegmento.First().Canal.Id, mMetadaUnidadeporTrimestre.Ano.Value, mMetadaUnidadeporTrimestre.Trimestre.Value, OrcaSegmento.First().Segmento.Id); if (mMetadoCanalporSegmento == null) { mMetadoCanalporSegmento = new MetadoCanalporSegmento(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider); mMetadoCanalporSegmento.ID = Guid.NewGuid(); mMetadoCanalporSegmento.Nome = mMetadaUnidadeporTrimestre.Nome + " - " + OrcaSegmento.First().Segmento.Name; mMetadoCanalporSegmento.UnidadedeNegocio = mMetadaUnidadeporTrimestre.UnidadedeNegocio; mMetadoCanalporSegmento.Ano = mMetadaUnidadeporTrimestre.Ano;// mOrcamentodaUnidade.Ano; mMetadoCanalporSegmento.Canal = new Lookup(OrcaSegmento.First().Canal.Id, SDKore.Crm.Util.Utility.GetEntityName <Model.Conta>()); mMetadoCanalporSegmento.Trimestre = mMetadaUnidadeporTrimestre.Trimestre; mMetadoCanalporSegmento.Segmento = new Lookup(OrcaSegmento.First().Segmento.Id, SDKore.Crm.Util.Utility.GetEntityName <Model.Segmento>()); //mMetadoCanalporSegmento.MetadoTrimestreCanal = new Lookup(mMetadoCanal.ID.Value, SDKore.Crm.Util.Utility.GetEntityName<Model.MetadoCanal>()); RepositoryService.MetadoCanalporSegmento.Create(mMetadoCanalporSegmento); } ServiceMetadoCanalporFamilia.Criar(mMetadoCanalporSegmento, lstOrcamentoDetalhado); } }