Ejemplo n.º 1
0
        public string Executar(string mensagem, string numeroMensagem, Domain.Model.Usuario usuario)
        {
            //Trace.Add("Mensagem " + numeroMensagem + " XML: {0}", mensagem);
            usuarioIntegracao = usuario;
            Intelbras.Message.Helper.MSG0111 xml = this.CarregarMensagem <Pollux.MSG0111>(mensagem);
            ParametroGlobal objeto = this.DefinirPropriedades(xml);

            if (!resultadoPersistencia.Sucesso)
            {
                retorno.Add("Resultado", resultadoPersistencia);
                return(CriarMensagemRetorno <Pollux.MSG0111R1>(numeroMensagem, retorno));
            }

            objeto = new Domain.Servicos.ParametroGlobalService(this.Organizacao, this.IsOffline).ObterPor(tipoParamentroCod, unidadeNegocioId, classificacaoId, categoriaId, nivelPosVendaId, compromissoId, beneficioId, null);

            if (objeto == null)
            {
                resultadoPersistencia.Sucesso  = true;
                resultadoPersistencia.Mensagem = "Registro não encontrado!";
            }
            else
            {
                Pollux.Entities.ParametroGlobal objRetorno = new Pollux.Entities.ParametroGlobal();
                objRetorno.TipoDado = objeto.TipoDado;
                objRetorno.Valor    = objeto.Valor;

                retorno.Add("ParametroGlobal", objRetorno);

                resultadoPersistencia.Sucesso  = true;
                resultadoPersistencia.Mensagem = "Integração ocorrida com sucesso";
            }

            retorno.Add("Resultado", resultadoPersistencia);
            return(CriarMensagemRetorno <Pollux.MSG0111R1>(numeroMensagem, retorno));
        }
Ejemplo n.º 2
0
        public void ConcluirTarefaCompromissoCanal(Tarefa tarefa)
        {
            if (tarefa.Resultado.HasValue)
            {
                var compromissoDoCanal  = RepositoryService.CompromissosDoCanal.Retrieve(tarefa.ReferenteA.Id);
                var compromissoPrograma = RepositoryService.CompromissosPrograma.Retrieve(compromissoDoCanal.CompromissosDoPrograma.ID.Value, "itbc_codigo", "itbc_tipodemonitoramento");

                if (!compromissoPrograma.TipoMonitoramento.HasValue || compromissoPrograma.TipoMonitoramento.Value != (int)Enum.CompromissoPrograma.TipoMonitoramento.PorTarefas)
                {
                    return;
                }

                if (tarefa.Resultado.Value == (int)Enum.Tarefa.Resultado.Reprovada)
                {
                    var statusCompromissoNaoCumprido = RepositoryService.StatusCompromissos.ObterPor(Enum.CompromissoCanal.StatusCompromisso.Nao_Cumprido);

                    RepositoryService.CompromissosDoCanal.Update(new CompromissosDoCanal(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline)
                    {
                        ID = compromissoDoCanal.ID,
                        StatusCompromisso = new Lookup(statusCompromissoNaoCumprido.ID.Value, SDKore.Crm.Util.Utility.GetEntityName(statusCompromissoNaoCumprido), statusCompromissoNaoCumprido.Nome)
                    });
                }
                else if (tarefa.Resultado.Value == (int)Enum.Tarefa.Resultado.Aprovada)
                {
                    int ordem = (tarefa.Ordem.HasValue) ? tarefa.Ordem.Value : 1;
                    var statusCompromissoCumprido = RepositoryService.StatusCompromissos.ObterPor(Enum.CompromissoCanal.StatusCompromisso.Cumprido);

                    var      compromissoCanalService  = new CompromissosDoCanalService(RepositoryService);
                    DateTime?validadeCompromissoCanal = compromissoCanalService.ObterValidade(compromissoDoCanal);

                    var compromissoCanalUpdate = new CompromissosDoCanal(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline)
                    {
                        ID                = compromissoDoCanal.ID,
                        Validade          = validadeCompromissoCanal,
                        StatusCompromisso = new Lookup(statusCompromissoCumprido.ID.Value, statusCompromissoCumprido.Nome, SDKore.Crm.Util.Utility.GetEntityName(statusCompromissoCumprido))
                    };

                    RepositoryService.CompromissosDoCanal.Update(compromissoCanalUpdate);

                    if (compromissoPrograma.Codigo.Value == (int)Enum.CompromissoPrograma.Codigo.Showroom)
                    {
                        ParametroGlobal parametroQuantidadeKitsShowroom = RepositoryService.ParametroGlobal.ObterPor((int)Enum.TipoParametroGlobal.QuantidadeKitsShowroomPorSegmento, compromissoDoCanal.UnidadeDeNegocio.Id, null, null, null, compromissoDoCanal.Compromisso.Id, null, null);
                        if (parametroQuantidadeKitsShowroom == null)
                        {
                            throw new ArgumentException("(CRM) Parâmetro Global Quantidade de Evidências Show Room não encontrado para o Compromisso Envio de evidências de Showroom e Unidade de Negócio [" + compromissoDoCanal.UnidadeDeNegocio.Name + "].");
                        }

                        if (parametroQuantidadeKitsShowroom.GetValue <int>() <= ordem)
                        {
                            return;
                        }
                    }

                    CriarTarefaParaChecklistCompromissoCanal(ordem + 1, compromissoDoCanal);
                }
            }
        }
Ejemplo n.º 3
0
        public Pollux.MSG0167 DefinirPropriedadesPlugin(ParametroGlobal objModel)
        {
            Pollux.MSG0167 retMsgProp = new Pollux.MSG0167(Domain.Enum.Sistemas.RetornaSistema(Domain.Enum.Sistemas.Sistema.CRM), objModel.ID.ToString());
            TipodeParametroGlobalService tipoParamService = new TipodeParametroGlobalService(this.Organizacao, this.IsOffline);
            CategoriaService             catService       = new CategoriaService(this.Organizacao, this.IsOffline);
            BeneficioService             benefService     = new BeneficioService(this.Organizacao, this.IsOffline);
            UnidadeNegocioService        unidNegService   = new UnidadeNegocioService(this.Organizacao, this.IsOffline);

            retMsgProp.CodigoParametroGlobal = objModel.ID.Value.ToString();
            retMsgProp.NomeParametroGlobal   = objModel.Nome;

            var tipoParamObj = tipoParamService.ObterPor(objModel.TipoParametro.Id);

            retMsgProp.TipoParametroGlobal = tipoParamObj.Codigo;

            if (objModel.Classificacao != null)
            {
                retMsgProp.CodigoClassificacao = objModel.Classificacao.Id.ToString();
            }

            if (objModel.Compromisso != null)
            {
                retMsgProp.CodigoCompromisso = objModel.Compromisso.Id.ToString();
            }

            if (objModel.Categoria != null)
            {
                retMsgProp.CodigoCategoria = objModel.Categoria.Id.ToString();
                var catObj = catService.ObterPor(objModel.Categoria.Id);
                retMsgProp.CategoriaCodigo = Int32.Parse(catObj.CodigoCategoria);
            }

            if (objModel.Beneficio != null)
            {
                retMsgProp.CodigoBeneficio = objModel.Beneficio.Id.ToString();
                var benefObj = benefService.ObterPor(objModel.Beneficio.Id);
                retMsgProp.BeneficioCodigo = benefObj.Codigo;
            }

            if (objModel.NivelPosVenda != null)
            {
                retMsgProp.CodigoNivelPosVenda = objModel.NivelPosVenda.Id.ToString();
            }

            if (objModel.UnidadeNegocio != null)
            {
                var unidNegObj = unidNegService.BuscaUnidadeNegocio(objModel.UnidadeNegocio.Id);
                retMsgProp.CodigoUnidadeNegocio = unidNegObj.ChaveIntegracao;
            }

            retMsgProp.TipoDado             = objModel.TipoDado;
            retMsgProp.ValorParametroGlobal = objModel.Valor;
            retMsgProp.Situacao             = objModel.State;

            return(retMsgProp);
        }
Ejemplo n.º 4
0
        public void CriarTarefaParaChecklistCompromissoCanal(int ordem, CompromissosDoCanal compromissoDoCanal)
        {
            ParametroGlobal parametroFrequenciaChecklist = RepositoryService.ParametroGlobal
                                                           .ObterPor((int)Enum.TipoParametroGlobal.FrequenciaChecklist, compromissoDoCanal.UnidadeDeNegocio.Id, null, null, null, compromissoDoCanal.Compromisso.Id, null, null);

            if (parametroFrequenciaChecklist == null)
            {
                throw new ArgumentException("(CRM) Parâmetro Global Frequencia de Checklist não encontrado para o Compromisso Envio de evidências de Showroom e Unidade de Negócio [" + compromissoDoCanal.UnidadeDeNegocio.Name + "].");
            }

            var compromissoPrograma = new CompromissosDoPrograma(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline)
            {
                ID   = compromissoDoCanal.CompromissosDoPrograma.ID,
                Nome = compromissoDoCanal.CompromissosDoPrograma.Nome
            };

            TarefaService ServiceTarefas           = new TarefaService(RepositoryService);
            string        tituloAtividadeChecklist = ServiceTarefas.ObterProximaAtividadeCheckup(ordem + 1, compromissoPrograma);


            Tarefa task = new Tarefa(RepositoryService);

            task.ReferenteA = new Lookup(compromissoDoCanal.ID.Value, SDKore.Crm.Util.Utility.GetEntityName(compromissoDoCanal));
            task.Assunto    = tituloAtividadeChecklist;
            task.Ordem      = ordem;
            task.Conclusao  = DateTime.Now.AddDays(parametroFrequenciaChecklist.GetValue <int>());

            var tipoTarefa = new TarefaService(RepositoryService).BuscarTipoTarefa("Checklist");

            if (tipoTarefa != null)
            {
                task.TipoDeAtividade = new Lookup(tipoTarefa.ID.Value, SDKore.Crm.Util.Utility.GetEntityName(tipoTarefa));
            }

            Guid idTarefa = RepositoryService.Tarefa.Create(task);

            if (idTarefa != Guid.Empty)
            {
                Domain.Model.Usuario proprietario = new Domain.Servicos.UsuarioService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline).BuscarProprietario("itbc_compdocanal", "itbc_compdocanalid", compromissoDoCanal.Id);
                if (proprietario != null)
                {
                    new Domain.Servicos.UtilService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline).MudarProprietarioRegistro("systemuser", proprietario.ID.Value, "task", idTarefa);
                }
            }
        }
        public bool HojeDiaExecutarMonitoramentoAutomatico()
        {
            ParametroGlobal paramGlobal = ParametroGlobal.ListarParamGlobalPorTipoParam((int)Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.DatasTrimestre).FirstOrDefault();

            if (paramGlobal == 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.");
            }

            var lista = ConverterParametroParaLista(paramGlobal.Valor);

            foreach (var item in lista)
            {
                if (item == DateTime.Today)
                {
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 6
0
        public string Enviar(ParametroGlobal objModel)
        {
            string resposta;

            Intelbras.Message.Helper.MSG0167 mensagem = DefinirPropriedadesPlugin(objModel);

            Domain.Servicos.Integracao integracao = new Servicos.Integracao(this.Organizacao, this.IsOffline);

            if (integracao.EnviarMensagemBarramento(mensagem.GenerateMessage(true), "1", "1", out resposta))
            {
                Intelbras.Message.Helper.MSG0167R1 retorno = CarregarMensagem <Pollux.MSG0167R1>(resposta);
                if (!retorno.Resultado.Sucesso)
                {
                    throw new ArgumentException("(CRM) " + retorno.Resultado.Mensagem);
                }
            }
            else
            {
                Intelbras.Message.Helper.ERR0001 erro001 = CarregarMensagem <Pollux.ERR0001>(resposta);
                throw new ArgumentException("(CRM) " + erro001.GenerateMessage(false));
            }
            return(resposta);
        }
Ejemplo n.º 7
0
        // CASO DE USO 4 – MONITORAMENTO POR TAREFAS
        public void MonitoramentoPorTarefas()
        {
            Trace       = new SDKore.Helper.Trace("MonitoramentoPorTarefa");
            mensagemLog = new List <string>();

            if (StatusCompromissoCumprido == null)
            {
                throw new ApplicationException("(CRM) 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("(CRM) A execução do monitoramento foi interrompida, não foi encontrado o Status do Compromisso: " + Intelbras.CRM2013.Domain.Enum.CompromissoCanal.StatusCompromisso.Nao_Cumprido);
            }

            List <CompromissosDoCanal> compromissosCanalVencidos = CompromissoDoCanalService.ListarAtivosVencidosCumpridos(Intelbras.CRM2013.Domain.Enum.CompromissoPrograma.TipoMonitoramento.PorTarefas);

            Trace.Add("Foram encontrados {0} vencidos para ser processado!", compromissosCanalVencidos.Count);
            Trace.SaveClear();

            foreach (var item in compromissosCanalVencidos)
            {
                var compromissoCanalUpdate = new CompromissosDoCanal(item.OrganizationName, item.IsOffline)
                {
                    ID = item.ID,
                    StatusCompromisso = new Lookup(StatusCompromissoNaoCumprido.ID.Value, "")
                };

                Trace.Add("Atualizando o compromisso do Canal [{0}] para não cumprido!", item.ID);
                Trace.SaveClear();

                RepositoryService.CompromissosDoCanal.Update(compromissoCanalUpdate);
            }

            List <CompromissosDoCanal> compromissosCanalCumpridos = CompromissoDoCanalService.ListarAtivosCumpridos(Intelbras.CRM2013.Domain.Enum.CompromissoPrograma.TipoMonitoramento.PorTarefas);

            Trace.Add("Foram encontrados {0} Cumpridos para ser processado!", compromissosCanalCumpridos.Count);
            Trace.SaveClear();

            foreach (var item in compromissosCanalCumpridos)
            {
                List <Tarefa> tarefas = RepositoryService.Tarefa.ListarPorReferenteAAtivo(item.ID.Value);

                // CRIA TAREFA CASO NAO EXISTA (CASO USO 4: STEP 6)
                if (tarefas.Count == 0)
                {
                    try
                    {
                        #region Obtem Parametros Global
                        if (item.UnidadeDeNegocio == null || item.Compromisso == null)
                        {
                            throw new ArgumentException("(CRM) O Comromisso do Canal a seguir não tem Unidade de Negócio ou Compromisso preenchido. " + item.ID.Value);
                        }

                        ParametroGlobal frequenciaChecklist = ParametroGlobal.ObterPor((int)Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.FrequenciaChecklist,
                                                                                       null, null, null, null, item.Compromisso.Id, null, null);

                        ParametroGlobal atividadesChecklist = ParametroGlobal.ObterPor((int)Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.AtividadesChecklist,
                                                                                       null, null, null, null, item.Compromisso.Id, null, null);

                        if (frequenciaChecklist == null)
                        {
                            InserirLogFormat("Parametro Global {0} não foi localizado.", Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.FrequenciaChecklist);
                            continue;
                        }

                        if (atividadesChecklist == null)
                        {
                            InserirLogFormat("Parametro Global {0} não foi localizado.", Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.AtividadesChecklist);
                            continue;
                        }

                        #endregion

                        #region Criando Tarefa

                        var task = new Model.Tarefa(OrganizationName, isOffline);
                        task.Assunto    = string.Format("Atividades Checklist - {0} - {1}", item.UnidadeDeNegocio.Name, item.Compromisso.Name);
                        task.ReferenteA = new Lookup(item.ID.Value, SDKore.Crm.Util.Utility.GetEntityName(item));
                        task.Descricao  = atividadesChecklist.Valor;

                        task.DataInicial = DateTime.Now;
                        task.Conclusao   = DateTime.Today.AddDays(int.Parse(frequenciaChecklist.Valor));
                        task.Prioridade  = (int)Enum.Tarefa.Prioridade.Normal;
                        task.Status      = (int)Enum.Tarefa.StatusCode.NaoIniciada;

                        Trace.Add("Criando Tarefa para Compromisso do Canal [{0}]", item.ID.Value);
                        Trace.Add("Atividades Checklist [{0}]", atividadesChecklist.Valor);
                        Trace.Add("Frequencia Checklist [{0}]", frequenciaChecklist.Valor);

                        RepositoryService.Tarefa.Create(task);

                        #endregion
                    }
                    catch (Exception ex)
                    {
                        Trace.Add(ex);
                        InserirLog(SDKore.Helper.Error.Handler(ex));
                    }
                    finally
                    {
                        Trace.SaveClear();
                    }
                }
            }

            this.EnviaEmailDeLog("Monitoramento Por Tarefas");
        }
Ejemplo n.º 8
0
        public bool ExisteDuplicidade(HistoricoDistribuidor historicoDistribuidor, Boolean create, ParametroGlobal qtdDistribuidorPreferencial)
        {
            if (historicoDistribuidor.Revenda != null)
            {
                if (create || (historicoDistribuidor.Status.HasValue && historicoDistribuidor.Status.Value == (int)Enum.HistoricoDistribuidor.Statecode.Ativo))
                {
                    var lista = new List <HistoricoDistribuidor>();

                    if (historicoDistribuidor.DataFim == null)
                    {
                        lista = RepositoryService.HistoricoDistribuidor.ListarPorRevendaSemDataFim(historicoDistribuidor.Revenda.Id, historicoDistribuidor.DataInicio);
                    }
                    else
                    {
                        lista = RepositoryService.HistoricoDistribuidor.ListarPorRevendaComDataFim(historicoDistribuidor.Revenda.Id, historicoDistribuidor.DataInicio, historicoDistribuidor.DataFim);
                    }
                    if (historicoDistribuidor.ID.HasValue)
                    {
                        lista.RemoveAll(x => x.ID.Value == historicoDistribuidor.ID.Value);
                    }
                    if (lista.Count >= Convert.ToInt32(qtdDistribuidorPreferencial.Valor)) //valida quantidade cadastrada no parâmetro global
                    {
                        return(lista.Count > 0);
                    }
                }
            }

            return(false);
        }
Ejemplo n.º 9
0
        public ParametroGlobal ObterFrequenciaAtividadeChecklist(Guid compromissoId)
        {
            ParametroGlobal parametroGlobal = this.ObterPor((int)Domain.Enum.TipoParametroGlobal.FrequenciaChecklist, null, null, null, null, compromissoId, null, null);

            return(parametroGlobal);
        }
Ejemplo n.º 10
0
        public void EnvioDeEvidenciaShowRoom(Tarefa Task)
        {
            SolicitacaoBeneficio solBen = RepositoryService.SolicitacaoBeneficio.Retrieve(Task.ReferenteA.Id);

            CompromissosDoCanal compromissoCanal = RepositoryService.CompromissosDoCanal.ObterPorNome(Enum.CompromissoCanal.Compromisso.EnvioShowroom.ToString(), solBen.Canal.Id, solBen.UnidadedeNegocio.Id);

            if (compromissoCanal != null)
            {
                if (compromissoCanal.Compromisso.Name == Enum.CompromissoCanal.Compromisso.EnvioShowroom)
                {
                    if (!Task.ReferenteA.Type.ToLower().Equals(SDKore.Crm.Util.Utility.GetEntityName <SolicitacaoBeneficio>().ToLower()))
                    {
                        return;
                    }

                    compromissoCanal.StatusCompromisso = new Lookup(RepositoryService.StatusCompromissos.ObterPor(Domain.Enum.CompromissoCanal.StatusCompromisso.Cumprido).ID.Value, "");
                    RepositoryService.CompromissosDoCanal.Update(compromissoCanal);

                    SolicitacaoBeneficio mSolicitacaoBeneficio = RepositoryService.SolicitacaoBeneficio.Retrieve(Task.ReferenteA.Id);

                    if (mSolicitacaoBeneficio == null)
                    {
                        throw new ArgumentException("Solicitação de benefício no campo 'Referente a' não encontrada ou Desativada.");
                    }

                    ParametroGlobal parametroAtividadeQtdeEvidencia = RepositoryService.ParametroGlobal.ObterPor((int)Enum.TipoParametroGlobal.QuatidadeEvidenciaShowRoom, mSolicitacaoBeneficio.UnidadedeNegocio.Id, null, null, null, compromissoCanal.Compromisso.Id, null, null);
                    if (parametroAtividadeQtdeEvidencia == null)
                    {
                        throw new ArgumentException("(CRM)  Parâmetro Global Quantidade de Evidências Show Room não encontrado para o Compromisso Envio de evidências de Showroom e Unidade de Negócio [" + mSolicitacaoBeneficio.UnidadedeNegocio.Name + "].");
                    }

                    ParametroGlobal parametroAtividadeChacklist = RepositoryService.ParametroGlobal.ObterPor((int)Enum.TipoParametroGlobal.AtividadesChecklist, mSolicitacaoBeneficio.UnidadedeNegocio.Id, null, null, null, compromissoCanal.Compromisso.Id, null, null);
                    if (parametroAtividadeChacklist == null)
                    {
                        throw new ArgumentException("(CRM) Parâmetro Global Atividade de Checklist não encontrado para o Compromisso Envio de evidências de Showroom e Unidade de Negócio [" + mSolicitacaoBeneficio.UnidadedeNegocio.Name + "].");
                    }

                    ParametroGlobal parametroFrequenciaChecklist = RepositoryService.ParametroGlobal.ObterPor((int)Enum.TipoParametroGlobal.FrequenciaChecklist, mSolicitacaoBeneficio.UnidadedeNegocio.Id, null, null, null, compromissoCanal.Compromisso.Id, null, null);
                    if (parametroFrequenciaChecklist == null)
                    {
                        throw new ArgumentException("(CRM) Parâmetro Global Frequencia de Checklist não encontrado para o Compromisso Envio de evidências de Showroom e Unidade de Negócio [" + mSolicitacaoBeneficio.UnidadedeNegocio.Name + "].");
                    }

                    Tarefa task = new Tarefa(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline);

                    task.ReferenteA = new Lookup(compromissoCanal.ID.Value, SDKore.Crm.Util.Utility.GetEntityName <CompromissosDoPrograma>());
                    task.Assunto    = parametroAtividadeChacklist.GetValue <string>();
                    task.Ordem      = Task.Ordem + 1;
                    task.Conclusao  = DateTime.Now.AddDays(parametroFrequenciaChecklist.GetValue <int>());

                    var tipoTarefa = new TarefaService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline).BuscarTipoTarefa("Checklist");

                    if (tipoTarefa != null)
                    {
                        task.TipoDeAtividade = new Lookup(tipoTarefa.ID.Value, SDKore.Crm.Util.Utility.GetEntityName(tipoTarefa));
                    }

                    Conta canal = RepositoryService.Conta.Retrieve(mSolicitacaoBeneficio.Canal.Id, "ownerid");

                    Guid idTarefa = RepositoryService.Tarefa.Create(task);
                    if (idTarefa != Guid.Empty)
                    {
                        if (canal != null)
                        {
                            Domain.Model.Usuario proprietario = new Domain.Servicos.UsuarioService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline).BuscarProprietario("account", "accountid", canal.Id);

                            if (proprietario != null)
                            {
                                new Domain.Servicos.UtilService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline).MudarProprietarioRegistro("systemuser", proprietario.ID.Value, "task", idTarefa);
                            }
                        }
                    }
                }
            }
        }
        ///////////////////// 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
        }
Ejemplo n.º 12
0
 public string Enviar(ParametroGlobal objModel)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 13
0
        //public string Executar(string mensagem, string numeroMensagem, Domain.Model.Usuario usuario)
        //{
        //     try
        //    {
        //    //Trace.Add("Mensagem " + numeroMensagem + " XML: {0}", mensagem);
        //    usuarioIntegracao = usuario;
        //    Intelbras.Message.Helper.MSG0111 xml = this.CarregarMensagem<Pollux.MSG0111>(mensagem);
        //    ParametroGlobal objeto = this.DefinirPropriedades(xml);

        //    if (!resultadoPersistencia.Sucesso)
        //    {
        //        retorno.Add("Resultado", resultadoPersistencia);
        //        return CriarMensagemRetorno<Pollux.MSG0111R1>(numeroMensagem, retorno);
        //    }

        //    objeto = new Domain.Servicos.ParametroGlobalService(this.Organizacao, this.IsOffline).ObterPor(tipoParamentroCod, unidadeNegocioId, classificacaoId, categoriaId, nivelPosVendaId, compromissoId, beneficioId,null);

        //    if (objeto == null)
        //    {
        //        resultadoPersistencia.Sucesso = true;
        //        resultadoPersistencia.Mensagem = "Registro não encontrado!";
        //    }
        //    else
        //    {
        //        Pollux.Entities.ParametroGlobal objRetorno = new Pollux.Entities.ParametroGlobal();
        //        objRetorno.TipoDado = objeto.TipoDado;
        //        objRetorno.Valor = objeto.Valor;

        //        retorno.Add("ParametroGlobal", objRetorno);

        //        resultadoPersistencia.Sucesso = true;
        //        resultadoPersistencia.Mensagem = "Integração ocorrida com sucesso";
        //    }

        //    retorno.Add("Resultado", resultadoPersistencia);
        //    return CriarMensagemRetorno<Pollux.MSG0111R1>(numeroMensagem, retorno);
        //    }
        //     catch (Exception e)
        //     {
        //         resultadoPersistencia.Sucesso = false;
        //         resultadoPersistencia.Mensagem = SDKore.Helper.Error.Handler(e);
        //         retorno.Add("Resultado", resultadoPersistencia);
        //         return CriarMensagemRetorno<Pollux.MSG0111R1>(numeroMensagem, retorno);
        //         //throw new ArgumentException(e.Message);
        //     }
        //}

        #endregion

        #region Definir Propriedades

        public ParametroGlobal DefinirPropriedades(Intelbras.Message.Helper.MSG0111 xml)
        {
            ParametroGlobal crm = new ParametroGlobal(this.Organizacao, this.IsOffline);

            //Obrigatorio
            TipodeParametroGlobal tipoParamentro = new Servicos.TipodeParametroGlobalService(this.Organizacao, this.IsOffline).ObterPor(xml.TipoParametroGlobal);

            if (tipoParamentro != null && tipoParamentro.Codigo.HasValue)
            {
                tipoParamentroCod = tipoParamentro.Codigo.Value;
                crm.TipoParametro = new Lookup(tipoParamentro.ID.Value, "");
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "TipoParametroGlobal/Codigo não cadastrada no Crm.";
                return(crm);
            }

            //Não Obrigatório
            if (!String.IsNullOrEmpty(xml.CodigoBeneficio))
            {
                if (xml.CodigoBeneficio.Length == 36)
                {
                    crm.Beneficio = new Lookup((Guid)(TransformaGuid(xml.CodigoBeneficio)), "");
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Identificador CodigoBeneficio fora do padrão (Guid).";
                    return(crm);
                }
            }

            //Não obrigatorio
            if (!String.IsNullOrEmpty(xml.CodigoClassificacao))
            {
                Classificacao classificacao = new Servicos.ClassificacaoService(this.Organizacao, this.IsOffline).BuscaClassificacao(new Guid(xml.CodigoClassificacao));
                if (classificacao != null)
                {
                    crm.Classificacao = new Lookup(classificacao.ID.Value, "");
                    classificacaoId   = classificacao.ID.Value;
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Classificação não cadastrada no Crm.";
                    return(crm);
                }
            }

            //Não obrigatorio
            if (!String.IsNullOrEmpty(xml.CodigoCategoria))
            {
                Categoria categoria = new Servicos.CategoriaService(this.Organizacao, this.IsOffline).ObterPor(new Guid(xml.CodigoCategoria));
                if (categoria != null)
                {
                    crm.Categoria = new Lookup(categoria.ID.Value, "");
                    categoriaId   = categoria.ID.Value;
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Categoria não cadastrada no Crm.";
                    return(crm);
                }
            }

            //Não Obrigatorio
            if (!String.IsNullOrEmpty(xml.CodigoCompromisso))
            {
                if (xml.CodigoCompromisso.Length == 36)
                {
                    crm.Compromisso = new Lookup(new Guid(xml.CodigoCompromisso), "");
                    compromissoId   = new Guid(xml.CodigoCompromisso);
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Identificador CodigoCompromisso fora do padrão (Guid).";
                    return(crm);
                }
            }


            //Não Obrigatorio
            if (!String.IsNullOrEmpty(xml.CodigoBeneficio))
            {
                if (xml.CodigoBeneficio.Length == 36)
                {
                    crm.Beneficio = new Lookup(new Guid(xml.CodigoBeneficio), "");
                    beneficioId   = new Guid(xml.CodigoBeneficio);
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Identificador CodigoBeneficio fora do padrão (Guid).";
                    return(crm);
                }
            }

            //Não Obrigatorio
            if (!String.IsNullOrEmpty(xml.CodigoUnidadeNegocio))
            {
                UnidadeNegocio unidadeNeg = new Servicos.UnidadeNegocioService(this.Organizacao, this.IsOffline).BuscaUnidadeNegocioPorChaveIntegracao(xml.CodigoUnidadeNegocio);
                if (unidadeNeg != null)
                {
                    crm.UnidadeNegocio = new Lookup(unidadeNeg.ID.Value, "");
                    unidadeNegocioId   = unidadeNeg.ID.Value;
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "UnidadeNegocio não cadastrada no Crm.";
                    return(crm);
                }
            }
            //Não Obrigatorio
            if (!String.IsNullOrEmpty(xml.CodigoNivelPosVenda))
            {
                if (xml.CodigoNivelPosVenda.Length == 36)
                {
                    crm.NivelPosVenda = new Lookup(new Guid(xml.CodigoNivelPosVenda), "");
                    nivelPosVendaId   = new Guid(xml.CodigoNivelPosVenda);
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Identificador NivelPosVenda fora do padrão (Guid).";
                    return(crm);
                }
            }

            return(crm);
        }
Ejemplo n.º 14
0
        // TREINAMENTO
        // CASO DE USO 2 - VERIFICAÇÃO DO STATUS DOS TREINAMENTOS E CERTIFICAÇÃO DO CANAL
        public void VerificacaoDoStatusTreinamentosECertificacaoCanal()
        {
            Trace       = new SDKore.Helper.Trace("MonitoramentoVerificaStatus");
            mensagemLog = new List <string>();

            InserirLog(DateTime.Now + " - Inicio - Verificação do Status dos Treinamentos e Certificados dos Canais!");

            ParametroGlobal paramGlobal = ParametroGlobal.ListarParamGlobalPorTipoParam((int)Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.DatasTrimestre).FirstOrDefault();

            if (paramGlobal == 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.");
            }

            // Obtem lista de canais matriz ou filial // (CASO USO TREINAMENTO 2: STEP 1)
            List <Conta> lstContas = ContaService.ListarContasParticipantes();

            InserirLog(string.Empty);
            InserirLog(DateTime.Now + " - Foram encontrados " + lstContas.Count + " participantes do PCI para processar!");

            foreach (Conta canal in lstContas)
            {
                // (CASO USO TREINAMENTO 2: STEP 3)
                List <TreinamentoCanal> lstTreinamentoCanal = this.ListarTreinamentoPorCanal(canal.ID.Value);

                InserirLog(string.Empty);
                InserirLog(DateTime.Now + " --- Foram encontrados " + lstTreinamentoCanal.Count + " treinamentos do Canal [" + canal.CodigoMatriz + "] para processar!");

                // (CASO USO TREINAMENTO 2: STEP 4)
                foreach (var treinamentoCanal in lstTreinamentoCanal)
                {
                    try
                    {
                        InserirLog(DateTime.Now + " ----- Treinamentos do Canal [" + treinamentoCanal.Nome + "]");


                        // (CASO USO TREINAMENTO 2: STEP 5)
                        TreinamentoCertificacao treinamentoCertficacao = TreinamentoCertificacao.ObterPor(treinamentoCanal.Treinamento.Id);
                        if (treinamentoCanal.CompromissoCanal != null)
                        {
                            CompromissosDoCanal compCanal = CompromissoDoCanal.BuscarPorGuid(treinamentoCanal.CompromissoCanal.Id);

                            // (CASO USO TREINAMENTO 2: STEP 5)
                            if (treinamentoCertficacao.ID != null && compCanal.UnidadeDeNegocio != null)
                            {
                                List <ProdutoTreinamento> lstProdTrei = ProdutoTreinamento.ListarPorTreinamento(treinamentoCertficacao.ID.Value, compCanal.UnidadeDeNegocio.Id);
                                int numMinimoProfissionais            = lstProdTrei.Max(x => x.NroMinimoProf.Value);

                                // (CASO USO TREINAMENTO 2: STEP 6)
                                List <ColaboradorTreinadoCertificado> lstColaboradorTreinadoCertificadoDoCanal = RepositoryService.ColaboradorTreinadoCertificado.ListarPor(canal.ID.Value, treinamentoCertficacao.ID.Value);

                                // (CASO USO TREINAMENTO 2: STEP 7)
                                if (lstColaboradorTreinadoCertificadoDoCanal.Count >= numMinimoProfissionais)
                                {
                                    InserirLog(DateTime.Now + " ----- Atualizando para Cumprido");

                                    treinamentoCanal.StatusCompromisso = new Lookup(StatusCompromissoCumprido.ID.Value, "");
                                    RepositoryService.TreinamentoCanal.Update(treinamentoCanal);
                                }
                                else if (treinamentoCanal.DataLimite < DateTime.Today)
                                {
                                    InserirLog(DateTime.Now + " ----- Atualizando para Não Cumprido");

                                    treinamentoCanal.StatusCompromisso = new Lookup(StatusCompromissoNaoCumprido.ID.Value, "");
                                    RepositoryService.TreinamentoCanal.Update(treinamentoCanal);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        string mensagem = SDKore.Helper.Error.Handler(ex);
                        InserirLog(DateTime.Now + " - ERRO: " + mensagem);
                    }
                }
            }


            InserirLog(string.Empty);
            InserirLog(DateTime.Now + " - Fim - Verificação do Status dos Treinamentos e Certificados dos Canais!");

            this.EnviaEmailDeLog("Verificação do status do Treinamento");
        }
Ejemplo n.º 15
0
        // TREINAMENTO
        // CASO DE USO 1 – GERAÇÃO TREINAMENTO E CERTIFICAÇÃO DO CANAL
        public void GeracaoTreinamentoECertificacaoDoCanal()
        {
            Trace       = new SDKore.Helper.Trace("GeraTreinamento");
            mensagemLog = new List <string>();

            InserirLog(DateTime.Now + " - Inicio Geração Treinamento e Certificacao do Canal");

            ParametroGlobal paramGlobal = ParametroGlobal.ListarParamGlobalPorTipoParam((int)Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.DatasTrimestre).FirstOrDefault();

            if (paramGlobal == 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.");
            }

            List <Conta> lstContas = ContaService.ListarContasParticipantes();

            InserirLog(DateTime.Now + " - Foram encontrados " + lstContas.Count + " participantes do PCI para processar!");


            foreach (Conta canal in lstContas)
            {
                try
                {
                    InserirLog(string.Empty);
                    InserirLog(DateTime.Now + " -- Canal[" + canal.CodigoMatriz + "]");

                    List <TreinamentoCanal> lstTreinamentoCanal = this.ListarTreinamentoPorCanal(canal.ID.Value);

                    InserirLog(DateTime.Now + " --- Foram encontrados " + lstTreinamentoCanal.Count() + " treinamento do canal!");

                    // Inativa status de treinamentos e certificações
                    this.InativaTreinamentosDeCanal(lstTreinamentoCanal);

                    // lista produtos portifolios
                    List <ProdutoPortfolio> lstProdutoPortifolio = new Servicos.ProdutoService(OrganizationName, isOffline).ProdutosPortfolio(canal, canal.Classificacao.Id, null);

                    InserirLog(DateTime.Now + " --- Foram encontrados " + lstProdutoPortifolio.Count + " produtos do portfolio!");

                    // filtra produto por produto que exija treinamento
                    var lstProdPortExigeTrein = lstProdutoPortifolio.Where(x => x.Product.ExigeTreinamento == true);

                    InserirLog(DateTime.Now + " --- Foram encontrados " + lstProdPortExigeTrein.Count() + " produtos do portfolio que exigem treinamento!");

                    // para cada produto portifolio
                    foreach (var prodPort in lstProdPortExigeTrein)
                    {
                        InserirLog(DateTime.Now + " ---- Produto: " + prodPort.Product.Codigo + " - Unidade Negocio: " + prodPort.Product.UnidadeNegocio.Name);

                        List <CompromissosDoCanal> lstCompCanal = new List <CompromissosDoCanal>();
                        // se forma de apuração de beneficio e compromisso do canal for por filial
                        if (canal.ApuracaoBeneficiosCompromissos.Value == (int)Enum.Conta.ApuracaoDeBeneficiosECompromissos.Por_Filiais ||
                            canal.TipoConta == (int)Enum.Conta.MatrizOuFilial.Matriz)
                        {
                            // compromisso do canal 33
                            lstCompCanal = CompromissosDoCanal.ListarPorCod33EPorMatriz(canal.ID.Value, prodPort.Product.UnidadeNegocio.Id);
                        }
                        else if (canal.ApuracaoBeneficiosCompromissos.Value == (int)Enum.Conta.ApuracaoDeBeneficiosECompromissos.Centralizada_Na_Matriz &&
                                 canal.TipoConta == (int)Enum.Conta.MatrizOuFilial.Filial)
                        {
                            lstCompCanal = CompromissosDoCanal.ListarPorCod33EPorMatriz(canal.ContaPrimaria.Id, prodPort.Product.UnidadeNegocio.Id);
                        }

                        InserirLog(DateTime.Now + " ----- Foram encontrados " + lstCompCanal.Count() + " Compromisso do Canal ");

                        if (lstCompCanal.Count() > 0)
                        {
                            // lista de produto treinamento certificação
                            List <ProdutoTreinamento> lstProdTrei = ProdutoTreinamento.ListarPorProduto(prodPort.Produto.Id);

                            InserirLog(DateTime.Now + " ------ Foram encontrados " + lstProdTrei.Count() + " Produtos do Treinamento ");

                            // Cria TReinamento do canal ou ativa se ja existir
                            foreach (var prodTrei in lstProdTrei)
                            {
                                InserirLog(DateTime.Now + " ------- Produto por Treinamento Certificação: " + prodTrei.Treinamento.Name);

                                this.CriaTreinamentoCanalOuAtiva(prodTrei.Treinamento.Id, prodTrei.Treinamento.Name, canal, lstCompCanal[0].ID);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    string mensagem = SDKore.Helper.Error.Handler(ex);
                    InserirLog(DateTime.Now + " - ERRO: " + mensagem);
                }
            }

            InserirLog(string.Empty);
            InserirLog(DateTime.Now + " - Fim GeracaoTreinamentoECertificacaoDoCanal");

            this.EnviaEmailDeLog("Geracao Treinamento e Certificação");
        }