Exemple #1
0
        protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService)
        {
            var compromissoCanalService = new CompromissosDoCanalService(context.OrganizationName, context.IsExecutingOffline, adminService);

            switch (Util.Utilitario.ConverterEnum <Domain.Enum.Plugin.MessageName>(context.MessageName))
            {
            case Domain.Enum.Plugin.MessageName.Create:

                Entity entidade = (Entity)context.InputParameters["Target"];
                CompromissosDoCanal compDoCanal = entidade.Parse <CompromissosDoCanal>(context.OrganizationName, context.IsExecutingOffline, adminService);

                // Comentado devido problema com plugin do CRM2015 - não é possível alterar o OwnerId neste ponto - deixei comentado por enquanto
                //var compromissosDoCanalService = new Domain.Servicos.CompromissosDoCanalService(context.OrganizationName, context.IsExecutingOffline, adminService);
                //entidade = compromissosDoCanalService.AtribuiParaOProprietarioDoCanal(entidade, compDoCanal);
                break;

            case Domain.Enum.Plugin.MessageName.Update:

                var entityTargetUpdate    = context.GetContextEntity();
                var entityPreImagetUpdate = context.PreEntityImages["imagem"];

                foreach (var item in entityTargetUpdate.Attributes)
                {
                    entityPreImagetUpdate.Attributes[item.Key] = item.Value;
                }

                var compromissoCanalMergeUpdate = entityPreImagetUpdate.Parse <CompromissosDoCanal>(context.OrganizationName, context.IsExecutingOffline, adminService);

                AtualizaDataValida(compromissoCanalMergeUpdate, compromissoCanalService, ref entityTargetUpdate);

                break;
            }
        }
        private void ExecutaVerificacaoDeValidade_Manual(CompromissosDoCanal compCanal)
        {
            Trace       = new SDKore.Helper.Trace("Monitoramento Manual");
            mensagemLog = new List <string>();
            InserirLog("Monitoramento Manual inicio");

            CompromissosDoPrograma compPrograma = RepositoryService.CompromissosPrograma.ObterPorCompCanal(compCanal.ID.Value);

            #region VERIFICA VALIDADE
            // VERIFICA VALIDADE (CASO USO 5: STEP 5)
            if ((compCanal.Validade == null || compCanal.Validade < DateTime.Now) &&
                (compPrograma.TipoMonitoramento != null && compPrograma.TipoMonitoramento.Value == (int)Enum.CompromissoPrograma.TipoMonitoramento.Manual))
            {
                compCanal.StatusCompromisso = new Lookup(RepositoryService.StatusCompromissos.ObterPor(Domain.Enum.CompromissoCanal.StatusCompromisso.Nao_Cumprido).ID.Value, "");
                RepositoryService.CompromissosDoCanal.Update(compCanal);
            }
            #endregion

            #region MANDA EMAIL DE LOG Monitoramnto Manual
            StringBuilder sb = new StringBuilder();
            foreach (string item in mensagemLog)
            {
                sb.AppendLine(item);
            }

            this.EnviaEmailDeLog("Monitoramento Manual");
            #endregion
        }
        public void GerarAtividadeChecklist(string nomeAtividade, CompromissosDoCanal ObjCompromisso, Usuario Proprietario)
        {
            Domain.Model.Tarefa tarefa = new Domain.Model.Tarefa(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider);

            ParametroGlobal paramGlobal = new Domain.Servicos.ParametroGlobalService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider)
                                          .ObterFrequenciaAtividadeChecklist(ObjCompromisso.Compromisso.Id);

            if (paramGlobal != null && paramGlobal.Valor != null)
            {
                tarefa.Conclusao = DateTime.Now.AddDays(Convert.ToInt32(paramGlobal.Valor));
            }
            else
            {
                tarefa.Conclusao = null;
            }

            // tarefa.Proprietario = new SDKore.DomainModel.Lookup(Proprietario.Id, Proprietario.Name, Proprietario.Type);

            tarefa.Assunto = nomeAtividade;

            Domain.Model.TipoDeAtividade tipoAtividade = new Domain.Servicos.TarefaService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider).BuscarTipoTarefa("Checklist");
            if (tipoAtividade != null)
            {
                tarefa.TipoDeAtividade = new SDKore.DomainModel.Lookup(tipoAtividade.ID.Value, tipoAtividade.Nome, "");
            }

            tarefa.ReferenteA = new SDKore.DomainModel.Lookup(ObjCompromisso.ID.Value, "itbc_compdocanal");

            tarefa.ID = new Domain.Servicos.TarefaService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider).Persistir(tarefa);
            if (tarefa.ID.HasValue)
            {
                new Servicos.UtilService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider).MudarProprietarioRegistro("systemuser", Proprietario.Id, "task", tarefa.ID.Value);
            }
        }
        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);
                }
            }
        }
Exemple #5
0
        private void AtualizaDataValida(CompromissosDoCanal compromissoCanal, CompromissosDoCanalService compromissosDoCanalService, ref Entity e)
        {
            if (e.Attributes.Contains("itbc_statuscompromissosid"))
            {
                DateTime?validadeCompromissoCanal = compromissosDoCanalService.ObterValidade(compromissoCanal);

                if (validadeCompromissoCanal.HasValue)
                {
                    e.Attributes["itbc_validade"] = validadeCompromissoCanal.Value;
                }
            }
        }
        public void CriaTarefaShowRoom(SolicitacaoBeneficio solicitacaoBeneficio)
        {
            if (solicitacaoBeneficio != null && solicitacaoBeneficio.UnidadedeNegocio != null && solicitacaoBeneficio.Canal != null)
            {
                CompromissosDoCanal compromissoCanal = RepositoryService.CompromissosDoCanal
                                                       .ObterPor(solicitacaoBeneficio.UnidadedeNegocio.Id, solicitacaoBeneficio.Canal.Id, (int)Enum.CompromissoPrograma.Codigo.Showroom);

                if (compromissoCanal == null)
                {
                    throw new ArgumentException("(CRM) Compromisso do canal Envio de evidências de Showroom não localizado, entre em contato com o suporte.");
                }

                CriarTarefaParaChecklistCompromissoCanal(1, compromissoCanal);
            }
        }
Exemple #7
0
        public string Executar(string mensagem, string numeroMensagem, Domain.Model.Usuario usuario)
        {
            usuarioIntegracao = usuario;
            CompromissosDoCanal compCanalConsulta = null;

            Pollux.Entities.Compromisso objRetorno = new Pollux.Entities.Compromisso();

            var xml = this.CarregarMensagem <Pollux.MSG0145>(mensagem);

            //Conta
            if (!String.IsNullOrEmpty(xml.CodigoCompromissoCanal) && xml.CodigoCompromissoCanal.Length == 36)
            {
                compCanalConsulta = new Servicos.CompromissosDoCanalService(this.Organizacao, this.IsOffline).BuscarPorGuid(new Guid(xml.CodigoCompromissoCanal));
                if (compCanalConsulta == null)
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Valor do parâmetro " + xml.CodigoCompromissoCanal + " não existe.";
                    retorno.Add("Resultado", resultadoPersistencia);
                    return(CriarMensagemRetorno <Pollux.MSG0145R1>(numeroMensagem, retorno));
                }
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "Parâmetro obrigatório para a consulta não enviado.";
                retorno.Add("Resultado", resultadoPersistencia);
                return(CriarMensagemRetorno <Pollux.MSG0145R1>(numeroMensagem, retorno));
            }

            objRetorno = this.DefinirRetorno(compCanalConsulta);

            if (objRetorno != null)
            {
                resultadoPersistencia.Sucesso  = true;
                resultadoPersistencia.Mensagem = "Integração ocorrida com sucesso!";
                retorno.Add("CompromissoCanal", objRetorno);
                retorno.Add("Resultado", resultadoPersistencia);
            }
            else
            {
                resultadoPersistencia.Sucesso  = true;
                resultadoPersistencia.Mensagem = "Não foram encontrados registros que satisfaçam os critérios de pesquisa.";
                retorno.Add("Resultado", resultadoPersistencia);
            }
            return(CriarMensagemRetorno <Pollux.MSG0145R1>(numeroMensagem, retorno));
        }
        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 void VerificarStatusCompromissoAutomatico(CompromissosDoCanal objCompromissoDoCanal)
 {
     if (objCompromissoDoCanal.Compromisso != null)
     {
         CompromissosDoPrograma compromisso = RepositoryService.CompromissosPrograma.Retrieve(objCompromissoDoCanal.Compromisso.Id);
         // Garante que somente pode ser alterado compromissos com monitoramento manual
         if (compromisso != null)
         {
             if (compromisso.TipoMonitoramento.HasValue &&
                 !compromisso.TipoMonitoramento.Value.Equals((int)Enum.CompromissoPrograma.TipoMonitoramento.Manual))
             {
                 throw new ArgumentException("Status do compromisso não pode ser alterado para compromissos do programa com Tipo de Compromisso Automático/PorTarefas.");
             }
         }
         else
         {
             throw new ArgumentException("Compromisso do Programa não encontrado no Crm.");
         }
     }
 }
        public void MonitoramentoPorSolicitacoes()
        {
            Trace       = new SDKore.Helper.Trace("Monitoramento por Solicitação");
            mensagemLog = new List <string>();

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

            foreach (var item in lstCompCanal)
            {
                List <Tarefa> tarefas = TarefaService.ListarTarefasAtivas(item.ID.Value);

                var compromissoCanalUpdate = new CompromissosDoCanal(item.OrganizationName, isOffline)
                {
                    ID = item.ID
                };

                if (tarefas.Count > 0)
                {
                    compromissoCanalUpdate.StatusCompromisso = new Lookup(StatusCompromissoNaoCumprido.ID.Value, "");
                }
                else
                {
                    ParametroGlobal paramGlobal = new Domain.Servicos.ParametroGlobalService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider)
                                                  .ObterFrequenciaAtividadeChecklist(item.Compromisso.Id);

                    if (paramGlobal != null)
                    {
                        compromissoCanalUpdate.Validade = DateTime.Today.AddDays(int.Parse(paramGlobal.Valor));
                    }
                    else
                    {
                        InserirLogFormat("Parametro global {0} não localizado para o compromisso {1}", Enum.TipoParametroGlobal.FrequenciaChecklist, item.Compromisso.Name);
                        continue;
                    }
                }

                RepositoryService.CompromissosDoCanal.Update(compromissoCanalUpdate);
            }

            this.EnviaEmailDeLog("Monitoramento Por Solicitações");
        }
        public DateTime?ObterValidade(CompromissosDoCanal CompromissoTarget)
        {
            if (CompromissoTarget.StatusCompromisso.Name == Enum.CompromissoCanal.StatusCompromisso.Cumprido)
            {
                if (CompromissoTarget.Compromisso != null && CompromissoTarget.Compromisso.Id != Guid.Empty)
                {
                    ParametroGlobal paramGlobal = new ParametroGlobalService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider)
                                                  .ObterFrequenciaAtividadeChecklist(CompromissoTarget.Compromisso.Id);

                    if (paramGlobal == null)
                    {
                        throw new ApplicationException("”(CRM)Não foi possível alterar o status do compromisso devido a falta do parâmetro global "
                                                       + (int)Enum.TipoParametroGlobal.FrequenciaChecklist + ". Entrar em contato com o suporte");
                    }
                    else
                    {
                        return(DateTime.Today.AddDays(paramGlobal.GetValue <int>()));
                    }
                }
            }

            return(null);
        }
        // CASO DE USO 5 – MONITORAMENTO MANUAL
        public void MonitoramentoManual()
        {
            Trace = new SDKore.Helper.Trace("Monitoramento Manual");

            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);
            }

            // OBTEM COMPROMISSOS DO CANAL (CASO USO 5: STEP 4)
            // VERIFICA VALIDADE (CASO USO 5: STEP 5)
            List <CompromissosDoCanal> lstCompCanal = CompromissoDoCanalService.ListarAtivosVencidosCumpridos(Intelbras.CRM2013.Domain.Enum.CompromissoPrograma.TipoMonitoramento.Manual);

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

            foreach (var item in lstCompCanal)
            {
                try
                {
                    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);
                }
                catch (Exception ex)
                {
                    SDKore.Helper.Error.Handler(ex);
                }
            }
        }
        private void ExecutaVerificacaoDeValidade_Solicitacoes(CompromissosDoCanal compCanal)
        {
            List <Tarefa> tarefas = TarefaService.ListarTarefasAtivas(compCanal.ID.Value);

            CompromissosDoPrograma compPrograma = RepositoryService.CompromissosPrograma.ObterPorCompCanal(compCanal.ID.Value);


            #region VERIFICA VALIDADE
            if ((compCanal.Validade == null || compCanal.Validade < DateTime.Now) &&
                (compPrograma.TipoMonitoramento != null && compPrograma.TipoMonitoramento.Value == (int)Enum.CompromissoPrograma.TipoMonitoramento.Solicitacoes))
            {
                if (tarefas.Count > 0)
                {
                    if (tarefas[0].Conclusao < DateTime.Now)
                    {
                        compCanal.StatusCompromisso = new Lookup(RepositoryService.StatusCompromissos.ObterPor(Domain.Enum.CompromissoCanal.StatusCompromisso.Nao_Cumprido).ID.Value, "");
                        RepositoryService.CompromissosDoCanal.Update(compCanal);
                    }
                }
                else
                {
                    ParametroGlobal paramGlobal = new Domain.Servicos.ParametroGlobalService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider)
                                                  .ObterFrequenciaAtividadeChecklist(compCanal.Compromisso.Id);

                    if (paramGlobal != null)
                    {
                        compCanal.Validade = DateTime.Now.AddDays(int.Parse(paramGlobal.Valor));
                        RepositoryService.CompromissosDoCanal.Update(compCanal);
                    }
                    else
                    {
                        InserirLog("Parametro global " + Enum.TipoParametroGlobal.FrequenciaChecklist + " não localizado para o compromisso " + compCanal.Compromisso.Name);
                    }
                }
            }
            #endregion
        }
 private void ExecutaVerificacaoDeValidade_Tarefas(CompromissosDoCanal compCanal)
 {
     TarefaService tarefa = new TarefaService(OrganizationName, isOffline);
     //tarefa.MonitoramentoPorTarefas(compCanal); //TODO: GABRIEL
 }
Exemple #15
0
        public CompromissosDoCanal DefinirPropriedades(Intelbras.Message.Helper.MSG0145 xml)
        {
            CompromissosDoCanal compCanalPollux = new CompromissosDoCanal(this.Organizacao, this.IsOffline);

            return(compCanalPollux);
        }
        public void AtualizarBeneficiosECompromissosCascata(CompromissosDoCanal CompromissoTarget)
        {
            Guid?   UnidadeNeg    = null;
            Guid?   Classificacao = null;
            Guid?   Categoria     = null;
            Boolean?Exclusividade = null;

            if (CompromissoTarget.Canal == null)
            {
                throw new ArgumentException("Campo canal não preenchido");
            }

            Domain.Model.Conta canal = new Domain.Servicos.ContaService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider)
                                       .BuscaConta(CompromissoTarget.Canal.Id);

            if (canal != null)
            {
                if (CompromissoTarget.UnidadeDeNegocio != null)
                {
                    UnidadeNeg = CompromissoTarget.UnidadeDeNegocio.Id;
                }

                if (canal.Classificacao != null)
                {
                    Classificacao = canal.Classificacao.Id;
                }

                Domain.Model.CategoriasCanal categoriaCanal = new Domain.Servicos.CategoriaCanalService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider)
                                                              .ListarPor(canal.ID.Value, UnidadeNeg).FirstOrDefault();

                if (categoriaCanal != null && categoriaCanal.Categoria != null)
                {
                    Categoria = categoriaCanal.Categoria.Id;
                }

                if (canal.Exclusividade != null)
                {
                    Exclusividade = canal.Exclusividade.Value;
                }

                Domain.Model.Perfil perfil = new Intelbras.CRM2013.Domain.Servicos.PerfilServices(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider).BuscarPerfil(Classificacao, UnidadeNeg, Categoria, Exclusividade);

                if (perfil != null)
                {
                    List <Domain.Model.BeneficiosCompromissos> benefCompr = new Intelbras.CRM2013.Domain.Servicos.BeneficiosCompromissosService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider).BuscaBeneficiosCompromissos(perfil.ID.Value, CompromissoTarget.Compromisso.Id, null);

                    if (benefCompr != null && benefCompr.Count > 0)
                    {
                        foreach (Domain.Model.BeneficiosCompromissos item in benefCompr)
                        {
                            bool   flagAtualizarBeneficio = true;
                            Lookup statusBenef            = (Lookup) new Intelbras.CRM2013.Domain.Servicos.BeneficiosCompromissosService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider)
                                                            .BuscarBeneficioCorrespondentePorCodigoStatus(item, CompromissoTarget.StatusCompromisso.Id);

                            if (statusBenef != null)
                            {
                                if (statusBenef.Name != Domain.Enum.CompromissoCanal.StatusCompromisso.Nao_Cumprido)
                                {
                                    //fluxo alternativo 1
                                    List <Domain.Model.BeneficiosCompromissos> benefComprAlternativo = new Intelbras.CRM2013.Domain.Servicos.BeneficiosCompromissosService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider).BuscaBeneficiosCompromissos(perfil.ID.Value, null, item.Beneficio.Id);
                                    if (benefComprAlternativo.Count > 0)
                                    {
                                        List <BeneficiosCompromissos> lstDoBeneficio = new List <BeneficiosCompromissos>();// benefComprAlternativo.Where(x => x.Compromisso != CompromissoTarget.Compromisso).ToList<BeneficiosCompromissos>();
                                        foreach (var _benefCompro in benefComprAlternativo)
                                        {
                                            if (_benefCompro.Compromisso != null && _benefCompro.Compromisso.Id != CompromissoTarget.Compromisso.Id)
                                            {
                                                lstDoBeneficio.Add(_benefCompro);
                                            }
                                        }

                                        foreach (Domain.Model.BeneficiosCompromissos registro in lstDoBeneficio)
                                        {
                                            if (registro.Compromisso == null)
                                            {
                                                throw new ArgumentException("Beneficio x Compromisso do Perfil : " + perfil.Nome + " configurado incorretamente , campo compromisso vazio.Operação cancelada.");
                                            }

                                            Domain.Model.CompromissosDoCanal comproCanal = new Intelbras.CRM2013.Domain.Servicos.CompromissosDoCanalService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider)
                                                                                           .BuscarCompromissoCanal(registro.Compromisso.Id, UnidadeNeg.Value, canal.ID.Value);

                                            if (comproCanal != null)
                                            {
                                                if (comproCanal.StatusCompromisso != null && comproCanal.StatusCompromisso.Name == Domain.Enum.CompromissoCanal.StatusCompromisso.Nao_Cumprido)
                                                {
                                                    flagAtualizarBeneficio = false;
                                                    break;
                                                }
                                            }
                                            else
                                            {
                                                throw new ArgumentException("O compromisso " + registro.Compromisso.Name + " não existe para este Canal");
                                            }
                                        }
                                    }
                                }
                                if (flagAtualizarBeneficio)
                                {
                                    Domain.Model.BeneficioDoCanal benefCanal = new Intelbras.CRM2013.Domain.Servicos.BeneficioDoCanalService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider)
                                                                               .BuscarBeneficioCanal(item.Beneficio.Id, UnidadeNeg.Value, canal.ID.Value);
                                    benefCanal.StatusBeneficio = statusBenef;
                                    new Intelbras.CRM2013.Domain.Servicos.BeneficioDoCanalService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider).AlterarBeneficioCanal(benefCanal);
                                }
                            }
                        }
                    }
                }
            }
        }
        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);
                            }
                        }
                    }
                }
            }
        }
Exemple #18
0
        public string Enviar(CompromissosDoCanal objModel)
        {
            string resposta = string.Empty;

            return(resposta);
        }
 public Guid Persistir(CompromissosDoCanal objCompromissosDoCanal)
 {
     return(RepositoryService.CompromissosDoCanal.Create(objCompromissosDoCanal));
 }
 private void AtualizarCompromissoCanalInconsistente(string mensagem, CompromissosDoCanal compCanal, Conta canal)
 {
     compCanal.StatusCompromisso = new Lookup(StatusCompromissoNaoCumprido.ID.Value, "");
     CompromissoDoCanal.Atualizar(compCanal);
     InserirLog(mensagem);
 }
        // 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");
        }
        ///////////////////// 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
        }
Exemple #23
0
        public CompromissosDoCanal DefinirPropriedades(Intelbras.Message.Helper.MSG0144 xml)
        {
            CompromissosDoCanal retorno = new CompromissosDoCanal(this.Organizacao, this.IsOffline);

            return(retorno);
        }
 public void Atualizar(CompromissosDoCanal objCompromissosDoCanal)
 {
     RepositoryService.CompromissosDoCanal.Update(objCompromissosDoCanal);
 }
Exemple #25
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");
        }
        // 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");
        }