Example #1
0
        /*
         * Removido do código. Essa verificação será feita futuramente
         * private void AtualizaSituacaoInrregular(SolicitacaoBeneficioService ServiceSolicitacaoBeneficio, SolicitacaoBeneficio solicitacaoBeneficio, ref Entity e)
         * {
         *  bool situacaoInregular = ServiceSolicitacaoBeneficio.TemSituacaoInregularVMC(solicitacaoBeneficio);
         *  e["itbc_solicitacao_irregularidades"] = situacaoInregular;
         *
         *
         *  if (situacaoInregular)
         *  {
         *      e["itbc_situacao_irregular"] = "Solicitação de VMC acima do percentual determinado pela Intelbras.";
         *  }
         *
         * }
         */

        private void AtualizaTrimestreCompetencia(SolicitacaoBeneficioService ServiceSolicitacaoBeneficio, SolicitacaoBeneficio solicitacaoBeneficio, ref Entity e)
        {
            if (!e.Contains("itbc_trimestrecompetencia"))
            {
                e.Attributes["itbc_trimestrecompetencia"] = ServiceSolicitacaoBeneficio.ObterTrimestreCompetencia();
            }
        }
Example #2
0
        protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService)
        {
            var ServiceProdutosSolicitacao = new ProdutosdaSolicitacaoService(context.OrganizationName, context.IsExecutingOffline, userService);

            switch (EnumConverter <MessageName>(context.MessageName.ToLower()))
            {
            case MessageName.Create:
            case MessageName.Update:
                var targetCreate = (Entity)context.InputParameters["Target"];
                var produtosdaSolicitacaoCreate = targetCreate.Parse <ProdutosdaSolicitacao>(context.OrganizationName, context.IsExecutingOffline, userService);

                ServiceProdutosSolicitacao.AtualizarValoresSolicitacao(produtosdaSolicitacaoCreate);
                break;

            case MessageName.Delete:

                var preImageDelete           = context.PreEntityImages["imagem"];
                var produtoSolicitacaoDelete = preImageDelete.Parse <ProdutosdaSolicitacao>(context.OrganizationName, context.IsExecutingOffline, adminService);

                var SolicitacaoBeneficio        = new SolicitacaoBeneficioService(context.OrganizationName, context.IsExecutingOffline, userService).ObterPor(produtoSolicitacaoDelete.SolicitacaoBeneficio.Id);
                var ServiceSolicitacaoBeneficio = new SolicitacaoBeneficioService(context.OrganizationName, context.IsExecutingOffline, userService);
                ServiceSolicitacaoBeneficio.Atualizar(SolicitacaoBeneficio);
                break;
            }
        }
Example #3
0
        private void AtualizaDataLimiteAposCriacao(SolicitacaoBeneficioService ServiceSolicitacaoBeneficio, ref SolicitacaoBeneficio solicitacaoBeneficio, ref Entity e)
        {
            bool criadaNoPrazo = ServiceSolicitacaoBeneficio.CriadaAposDataLimite(solicitacaoBeneficio);

            e.Attributes["itbc_criada_apos_data_limite"] = criadaNoPrazo;
            solicitacaoBeneficio.CriadaAposDataLimite    = criadaNoPrazo;
        }
Example #4
0
        private void AtualizaInformacoesPortfolio(SolicitacaoBeneficioService ServiceSolicitacaoBeneficio, SolicitacaoBeneficio solicitacaoBeneficio, ref Entity e)
        {
            var portfolioRepresentante = ServiceSolicitacaoBeneficio.ObterPortfolioRepresentante(solicitacaoBeneficio);

            if (portfolioRepresentante != null)
            {
                e.Attributes["itbc_assistadmvendasid"] = new EntityReference()
                {
                    Id          = portfolioRepresentante.AssistentedeAdministracaodeVendas.Id,
                    LogicalName = SDKore.Crm.Util.Utility.GetEntityName <Usuario>(),
                    Name        = portfolioRepresentante.AssistentedeAdministracaodeVendas.Name
                };
                e.Attributes["itbc_supervisorid"] = new EntityReference()
                {
                    Id          = portfolioRepresentante.SupervisordeVendas.Id,
                    LogicalName = SDKore.Crm.Util.Utility.GetEntityName <Usuario>(),
                    Name        = portfolioRepresentante.SupervisordeVendas.Name
                };
                e.Attributes["itbc_karepresentanteresponsvel"] = new EntityReference()
                {
                    Id          = portfolioRepresentante.KeyAccountRepresentante.Id,
                    LogicalName = SDKore.Crm.Util.Utility.GetEntityName <Contato>(),
                    Name        = portfolioRepresentante.KeyAccountRepresentante.Name
                };
            }
        }
Example #5
0
        private void AtualizaDataValidade(SolicitacaoBeneficioService ServiceSolicitacaoBeneficio, SolicitacaoBeneficio solicitacaoBeneficio, ref Entity e)
        {
            DateTime dataValidade = ServiceSolicitacaoBeneficio.ObterDataValidadeCriacao(solicitacaoBeneficio);

            if (dataValidade != DateTime.MinValue)
            {
                e.Attributes["itbc_datavalidade"] = dataValidade;
            }
        }
Example #6
0
        private void AtualizaNome(SolicitacaoBeneficioService ServiceSolicitacaoBeneficio, ref SolicitacaoBeneficio solicitacaoBeneficio, ref Entity e)
        {
            if (!e.Attributes.Contains("itbc_name") || solicitacaoBeneficio.TipoPriceProtection.HasValue)
            {
                string nome = ServiceSolicitacaoBeneficio.ObterNome(solicitacaoBeneficio);

                e.Attributes["itbc_name"] = nome;
                solicitacaoBeneficio.Nome = nome;
            }
        }
Example #7
0
 private void AtualizaCodicaoPagamento(SolicitacaoBeneficioService ServiceSolicitacaoBeneficio, SolicitacaoBeneficio solicitacaoBeneficio, ref Entity e)
 {
     if (e.Attributes.Contains("itbc_formapagamentoid"))
     {
         var condicaoPagamento = ServiceSolicitacaoBeneficio.ObterCondicaoDePagamento(solicitacaoBeneficio);
         if (condicaoPagamento != null)
         {
             e.Attributes["itbc_condicaopagamentoid"] = new EntityReference()
             {
                 Id          = condicaoPagamento.ID.Value,
                 LogicalName = SDKore.Crm.Util.Utility.GetEntityName(condicaoPagamento),
                 Name        = condicaoPagamento.Nome
             };
         }
     }
 }
Example #8
0
        private void AtualizaValores(SolicitacaoBeneficioService ServiceSolicitacaoBeneficio, ref SolicitacaoBeneficio solicitacaoBeneficio, ref Entity e)
        {
            decimal?valorAbater = ServiceSolicitacaoBeneficio.ObterValorAbater(solicitacaoBeneficio);

            if (valorAbater.HasValue)
            {
                e.Attributes["itbc_valoraabater"] = new Money(valorAbater.Value);
                solicitacaoBeneficio.ValorAbater  = valorAbater;
            }

            var retornoValores = ServiceSolicitacaoBeneficio.RecalculaValoresNaAlteracaoDeStatus(solicitacaoBeneficio, solicitacaoBeneficio);

            if (retornoValores.ValorAprovado.HasValue)
            {
                e.Attributes["itbc_valoraprovado"] = new Money(retornoValores.ValorAprovado.Value);
                solicitacaoBeneficio.ValorAprovado = retornoValores.ValorAprovado;
            }
        }
Example #9
0
        protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService)
        {
            switch (EnumConverter <MessageName>(context.MessageName.ToLower()))
            {
                #region Create

            case MessageName.Create:

                if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
                {
                    var e        = (Entity)context.InputParameters["Target"];
                    var SolBenef = e.Parse <Domain.Model.SolicitacaoBeneficio>(context.OrganizationName, context.IsExecutingOffline);
                    var ServiceSolicitacaoBeneficioCreate = new SolicitacaoBeneficioService(context.OrganizationName, context.IsExecutingOffline, userService);

                    ServiceSolicitacaoBeneficioCreate.SolicitarBaneficioPostCreate(SolBenef);
                    ServiceSolicitacaoBeneficioCreate.GerarTarefaSolicBeneficio(SolBenef, context.UserId, 1);
                }

                break;

                #endregion

                #region Update

            case MessageName.Update:

                var posImage = context.PostEntityImages["imagem"];
                var posSolicitacaoBeneficio = posImage.Parse <Domain.Model.SolicitacaoBeneficio>(context.OrganizationName, context.IsExecutingOffline, adminService);

                var preImage = context.PreEntityImages["imagem"];
                var preSolicitacaoBeneficio = preImage.Parse <Domain.Model.SolicitacaoBeneficio>(context.OrganizationName, context.IsExecutingOffline, adminService);

                var ServiceSolicitacaoBeneficio = new SolicitacaoBeneficioService(context.OrganizationName, context.IsExecutingOffline, userService);
                ServiceSolicitacaoBeneficio.SolicitarBeneficioPostUpdate(posSolicitacaoBeneficio, preSolicitacaoBeneficio);
                break;

                #endregion
            }
        }
Example #10
0
        static int Main(string[] args)
        {
            try
            {
                Console.WriteLine("{0} - Iniciando monitoramento", DateTime.Now);

                if (args == null || args.Length == 0)
                {
                    throw new ArgumentException("(CRM) Nenhum parametro foi enviado para executar o monitoramento!");
                }

                switch (args[0].ToUpper())
                {
                case "MONITORAMENTO":
                    Execucao service = new Execucao();
                    service.ExecutaTodosMonitoramento();
                    break;

                case "CANCELAMENTO_SOLICITACAO_BENEFICIO":
                    SolicitacaoBeneficioService solicitacaoBeneficioService = new SolicitacaoBeneficioService(OrganizationName, IsOffline);
                    solicitacaoBeneficioService.ServicoDiarioSolicitacaoDeBeneficio();
                    break;
                }

                Console.WriteLine("{0} - Finalizando monitoramento", DateTime.Now);
                return(0);
            }
            catch (Exception ex)
            {
                string message = SDKore.Helper.Error.Handler(ex);
                Console.WriteLine("{0} - Finalizando monitoramento [Apresentou erro]", DateTime.Now);
                Console.WriteLine(message);
                //Environment.Exit(ex.GetHashCode());
                return(ex.GetHashCode());
            }
        }
        protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService)
        {
            switch (Util.Utilitario.ConverterEnum <Domain.Enum.Plugin.MessageName>(context.MessageName))
            {
                #region Create

            case Domain.Enum.Plugin.MessageName.Create:

                var entidade             = (Entity)context.InputParameters["Target"];
                var solicitacaoBeneficio = entidade.Parse <Domain.Model.SolicitacaoBeneficio>(context.OrganizationName, context.IsExecutingOffline);

                new SharepointServices(context.OrganizationName, context.IsExecutingOffline, adminService)
                .CriarDiretorio <Domain.Model.SolicitacaoBeneficio>(solicitacaoBeneficio.Nome, solicitacaoBeneficio.ID.Value);

                break;

                #endregion

                #region Update

            case Domain.Enum.Plugin.MessageName.Update:

                if (context.Depth > 1)
                {
                    return;
                }

                if (context.PreEntityImages.Contains("imagem") && context.PreEntityImages["imagem"] is Entity)
                {
                    var ServiceSolicitacaoBeneficio = new SolicitacaoBeneficioService(context.OrganizationName, context.IsExecutingOffline, adminService);

                    var entityMerge = context.PostEntityImages["imagem"];
                    var solicMerge  = entityMerge.Parse <Domain.Model.SolicitacaoBeneficio>(context.OrganizationName, context.IsExecutingOffline, adminService);

                    ServiceSolicitacaoBeneficio.CriarSolicitacaoComProdutosCancelados(solicMerge);

                    if (solicMerge.TipoPriceProtection.HasValue && solicMerge.TipoPriceProtection == (int)Domain.Enum.SolicitacaoBeneficio.TipoPriceProtection.Autorizacao)
                    {
                        if (solicMerge.StatusCalculoPriceProtection.HasValue && solicMerge.StatusCalculoPriceProtection == (int)Domain.Enum.SolicitacaoBeneficio.StatusCalculoPriceProtection.Calcular)
                        {
                            // Instanciando objetos utilizados para buscas
                            var ServiceProdSolicitacao = new ProdutosdaSolicitacaoService(context.OrganizationName, context.IsExecutingOffline, adminService);
                            var ServiceProd            = new ProdutoService(context.OrganizationName, context.IsExecutingOffline, adminService);
                            var ServiceSellout         = new SellOutService(context.OrganizationName, context.IsExecutingOffline);
                            var ServiceFatura          = new FaturaService(context.OrganizationName, context.IsExecutingOffline);
                            var ServiceConta           = new ContaService(context.OrganizationName, context.IsExecutingOffline);
                            var ServiceUnidade         = new UnidadeNegocioService(context.OrganizationName, context.IsExecutingOffline);
                            var ServiceFamilia         = new FamiliaComercialService(context.OrganizationName, context.IsExecutingOffline);
                            var ServiceEstabelecimento = new EstabelecimentoService(context.OrganizationName, context.IsExecutingOffline);
                            var ServiceArquivo         = new ArquivoService(context.OrganizationName, context.IsExecutingOffline);


                            //trocar status para calculando
                            solicMerge.StatusCalculoPriceProtection = (int)Domain.Enum.SolicitacaoBeneficio.StatusCalculoPriceProtection.Calculando;
                            ServiceSolicitacaoBeneficio.Persistir(solicMerge);

                            // Obtendo dados para busca de quantidade de itens vendidos no Sellout
                            var lstProdSolic = ServiceProdSolicitacao.ListarPorSolicitacaoAtivos(solicMerge.ID.Value);
                            if (lstProdSolic.Count > 0)
                            {
                                var lstTmpFilter = lstProdSolic.Select(c => (Guid)c.Produto.Id).ToList();

                                var lstObjProd          = ServiceProd.ListarProduto(lstTmpFilter);
                                var listFilterSelloutWS = lstObjProd.Select(c => c.Codigo).ToList();
                                var listFilterFatura    = lstObjProd.Select(c => c.ID).ToList();

                                var strListFilter = String.Join("','", listFilterSelloutWS);

                                DateTime dataIni = (DateTime)solicMerge.DataCriacao;
                                dataIni = dataIni.AddMonths(-1);
                                DateTime dataFim = new DateTime(dataIni.Year, dataIni.Month, DateTime.DaysInMonth(dataIni.Year, dataIni.Month), 23, 59, 59);
                                dataIni = dataIni.AddMonths(-2);
                                dataIni = new DateTime(dataIni.Year, dataIni.Month, 1, 0, 0, 0);

                                //Lista de total de unidades reportadas pelo sellout nos ultimos 90 dias, divididos por 2, para os produtos solicitados.
                                var listValueSellout = ServiceSellout.listarContagemVenda(dataIni, dataFim, solicMerge.Canal.Id, strListFilter);

                                //TODO - Determinar data referencia dos 6 meses para as faturas
                                var listProdFaturas = ServiceFatura.listarContagemVendaPrice(solicMerge.Canal.Id, listFilterFatura, lstObjProd);

                                //Ajuste de valor de quantidade
                                foreach (var ajusteValuesTmp in listValueSellout)
                                {
                                    var prodTmp = lstObjProd.Find(x => x.Codigo == ajusteValuesTmp.CodigoProdutoERP);
                                    if (prodTmp != null)
                                    {
                                        var prodSolicTmp = lstProdSolic.Find(x => x.Produto.Id == prodTmp.ID);
                                        if (prodSolicTmp != null)
                                        {
                                            if (prodSolicTmp.QuantidadeAjustada.HasValue)
                                            {
                                                ajusteValuesTmp.TotalUnidades = (decimal)prodSolicTmp.QuantidadeAjustada;
                                            }
                                            else
                                            {
                                                if (ajusteValuesTmp.TotalUnidades > prodSolicTmp.QuantidadeSolicitada)
                                                {
                                                    ajusteValuesTmp.TotalUnidades = (decimal)prodSolicTmp.QuantidadeSolicitada;
                                                }
                                            }
                                        }
                                    }
                                }

                                //Busca de preços atuais
                                var listPrecoProduto = new List <PrecoProduto>();
                                foreach (var objSolicProd in lstProdSolic)
                                {
                                    PrecoProduto precoProduto = new PrecoProduto(context.OrganizationName, context.IsExecutingOffline);
                                    Product      objProd      = lstObjProd.Find(x => x.ID == objSolicProd.Produto.Id);

                                    precoProduto.CodigoProduto = objProd.Codigo;
                                    precoProduto.ProdutoId     = objProd.ID.Value;
                                    precoProduto.Produto       = objProd;

                                    var contaObjTmp = ServiceConta.BuscaConta(solicMerge.Canal.Id);
                                    List <ProdutoPortfolio> lstProdutoPortifolio = ServiceProd.ProdutosPortfolio(contaObjTmp, contaObjTmp.Classificacao.Id, solicMerge.UnidadedeNegocio.Id);
                                    ProdutoPortfolio        produtoPortfolioTmp  = lstProdutoPortifolio.Find(x => x.Produto.Id == objProd.ID.Value);

                                    Estabelecimento estTmp = ServiceEstabelecimento.BuscaEstabelecimento(objSolicProd.Estabelecimento.Id);
                                    precoProduto.codEstabelecimento = (int)estTmp.Codigo;

                                    var unidadeTmp = ServiceUnidade.BuscaUnidadeNegocio(solicMerge.UnidadedeNegocio.Id);
                                    precoProduto.codUnidade = unidadeTmp.ChaveIntegracao;
                                    var famComTmp = ServiceFamilia.ObterPor(objProd.FamiliaComercial.Id);
                                    precoProduto.codFamiliaComl = famComTmp.Codigo;

                                    precoProduto.tipoPortofolio = produtoPortfolioTmp.PortfolioTipo;

                                    precoProduto.ContaId      = solicMerge.Canal.Id;
                                    precoProduto.ValorProduto = 0;
                                    precoProduto.Quantidade   = (int)objSolicProd.QuantidadeSolicitada;

                                    listPrecoProduto.Add(precoProduto);
                                }
                                listPrecoProduto = ServiceProd.ListarPor(listPrecoProduto);

                                MSG0138 msg0138 = new MSG0138(context.OrganizationName, context.IsExecutingOffline);
                                List <ValorProdutoICMSViewModel> lstPrecoProdICMS = msg0138.Enviar(lstObjProd, lstProdSolic, listPrecoProduto, solicMerge);

                                List <ProdutoFaturaViewModel> lstProdFatGenerate = new List <ProdutoFaturaViewModel>();

                                List <string> errorNoSellout = new List <string>();
                                foreach (var objProdSolic in lstProdSolic)
                                {
                                    Product           objProd       = lstObjProd.Find(x => x.ID == objProdSolic.Produto.Id);
                                    QtdProdutoSellout objQtdSellout = listValueSellout.Find(x => x.CodigoProdutoERP == objProd.Codigo);

                                    if (objQtdSellout == null || objQtdSellout.TotalUnidades <= 0)
                                    {
                                        string strError = "Produto: " + objProd.Codigo + " " + objProd.Nome + " | Nenhuma entrada de sellout para o produto";
                                        errorNoSellout.Add(strError);
                                    }
                                }

                                string urlSharepoint    = string.Empty;
                                var    retUrlSharepoint = ServiceArquivo.ObterUrlArquivo(solicMerge.ID.ToString(), context.OrganizationName, out urlSharepoint);

                                if (errorNoSellout.Count == 0)
                                {
                                    foreach (var objProdSolic in lstProdSolic)
                                    {
                                        Product           objProd       = lstObjProd.Find(x => x.ID == objProdSolic.Produto.Id);
                                        QtdProdutoSellout objQtdSellout = listValueSellout.Find(x => x.CodigoProdutoERP == objProd.Codigo);
                                        objProdSolic.QuantidadeAprovada = 0;
                                        objProdSolic.ValorTotalAprovado = 0;
                                        objProdSolic.ValorTotal         = 0;

                                        PrecoProduto objPrecoProd = listPrecoProduto.Find(x => x.Produto.ID == objProdSolic.Produto.Id);
                                        ValorProdutoICMSViewModel objValProdICMS = lstPrecoProdICMS.Find(x => x.CodigoProduto == objProd.Codigo);

                                        var lstProdFatLocal = listProdFaturas.Where(x => x.CodigoProduto == objProd.Codigo).OrderByDescending(x => x.DataEmissaoFatura).ToList();

                                        foreach (var objProdFaturas in lstProdFatLocal)
                                        {
                                            if (objQtdSellout.TotalUnidades == 0)
                                            {
                                                objProdFaturas.QtdCalculo = 0;
                                            }
                                            else if (objProdFaturas.QtdFatura >= objQtdSellout.TotalUnidades)
                                            {
                                                objProdFaturas.QtdCalculo = objQtdSellout.TotalUnidades;
                                            }
                                            else
                                            {
                                                objProdFaturas.QtdCalculo = objProdFaturas.QtdFatura;
                                            }

                                            objProdFaturas.SaldoDiferenca = objProdFaturas.PrecoFatura - objValProdICMS.PrecoLiquido;

                                            if (objProdFaturas.SaldoDiferenca > 0)
                                            {
                                                objProdFaturas.ValorIPIProduto   = objProd.PercentualIPI;
                                                objProdFaturas.PrecoCalculoAtual = objValProdICMS.PrecoLiquido;
                                                objProdFaturas.TotalDiferenca    = objProdFaturas.SaldoDiferenca * objProdFaturas.QtdCalculo;
                                                objProdFaturas.TotalComIPI       = objProdFaturas.TotalDiferenca + (objProdFaturas.TotalDiferenca * (objProd.PercentualIPI / 100));

                                                objProdSolic.QuantidadeAprovada += objProdFaturas.QtdCalculo;
                                                if (objProdFaturas.QtdFatura >= objQtdSellout.TotalUnidades)
                                                {
                                                    objQtdSellout.TotalUnidades = 0;
                                                }
                                                else
                                                {
                                                    objQtdSellout.TotalUnidades -= objProdFaturas.QtdFatura;
                                                }

                                                if (objProdSolic.ValorTotalAprovado.HasValue)
                                                {
                                                    objProdSolic.ValorTotalAprovado += objProdFaturas.TotalComIPI;
                                                }
                                                else
                                                {
                                                    objProdSolic.ValorTotalAprovado = objProdFaturas.TotalComIPI;
                                                }

                                                if (objProdSolic.ValorTotal.HasValue)
                                                {
                                                    objProdSolic.ValorTotal += objProdFaturas.TotalComIPI;
                                                }
                                                else
                                                {
                                                    objProdSolic.ValorTotal = objProdFaturas.TotalComIPI;
                                                }
                                            }
                                            else if (objProdFaturas.SaldoDiferenca <= 0)
                                            {
                                                objProdFaturas.ValorIPIProduto   = objProd.PercentualIPI;
                                                objProdFaturas.PrecoCalculoAtual = objValProdICMS.PrecoLiquido;
                                            }
                                            lstProdFatGenerate.Add(objProdFaturas);
                                        }

                                        if (objProdSolic.QuantidadeAprovada > 0 && objProdSolic.ValorTotalAprovado > 0)
                                        {
                                            var dateTime = DateTime.Now;
                                            ServiceArquivo.CriarExcelRecalculo(lstProdFatGenerate, dateTime.ToString("dd/MM/yyyy"), urlSharepoint, NameFileTable, context.OrganizationName, context.IsExecutingOffline);

                                            ServiceProdSolicitacao.Persistir(objProdSolic);
                                        }
                                        else if (lstProdFatLocal.Count > 0 && objProdSolic.ValorTotalAprovado <= 0)
                                        {
                                            string strError = "Produto: " + objProd.Codigo + " " + objProd.Nome + " | Nenhuma entrada nas Faturas do Canal com diferença positiva de preço para o Produto";
                                            errorNoSellout.Add(strError);
                                        }
                                        else
                                        {
                                            string strError = "Produto: " + objProd.Codigo + " " + objProd.Nome + " | Nenhuma entrada nas Faturas do Canal para o Produto";
                                            errorNoSellout.Add(strError);
                                        }
                                    }

                                    if (errorNoSellout.Count == 0)
                                    {
                                        solicMerge.StatusCalculoPriceProtection = (int)Domain.Enum.SolicitacaoBeneficio.StatusCalculoPriceProtection.Calculado;
                                        ServiceSolicitacaoBeneficio.Persistir(solicMerge);
                                    }
                                    else
                                    {
                                        ServiceArquivo.CriarArquivosErros(errorNoSellout, urlSharepoint, NameFileLog);
                                        solicMerge.StatusCalculoPriceProtection = (int)Domain.Enum.SolicitacaoBeneficio.StatusCalculoPriceProtection.ErroCalcular;
                                        ServiceSolicitacaoBeneficio.Persistir(solicMerge);
                                    }
                                }
                                else
                                {
                                    ServiceArquivo.CriarArquivosErros(errorNoSellout, urlSharepoint, NameFileLog);
                                    solicMerge.StatusCalculoPriceProtection = (int)Domain.Enum.SolicitacaoBeneficio.StatusCalculoPriceProtection.ErroCalcular;
                                    ServiceSolicitacaoBeneficio.Persistir(solicMerge);
                                }
                            }
                            else
                            {
                                solicMerge.StatusCalculoPriceProtection = (int)Domain.Enum.SolicitacaoBeneficio.StatusCalculoPriceProtection.Calculado;
                                ServiceSolicitacaoBeneficio.Persistir(solicMerge);
                            }
                        }
                    }
                }

                break;

                #endregion
            }
        }
Example #12
0
        protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService)
        {
            SolicitacaoBeneficioService ServiceSolicitacaoBeneficio = new SolicitacaoBeneficioService(context.OrganizationName, context.IsExecutingOffline, adminService);

            switch (EnumConverter <MessageName>(context.MessageName.ToLower()))
            {
                #region Create

            case MessageName.Create:

                var e = context.GetContextEntity();
                var solicitacaoBeneficioTargetCreate = e.Parse <SolicitacaoBeneficio>(context.OrganizationName, context.IsExecutingOffline);

                ValidaValorAcao(ServiceSolicitacaoBeneficio, solicitacaoBeneficioTargetCreate);
                AtualizaDataLimiteAposCriacao(ServiceSolicitacaoBeneficio, ref solicitacaoBeneficioTargetCreate, ref e);

                AtualizaInformacoesPortfolio(ServiceSolicitacaoBeneficio, solicitacaoBeneficioTargetCreate, ref e);
                AtualizaCodicaoPagamento(ServiceSolicitacaoBeneficio, solicitacaoBeneficioTargetCreate, ref e);
                AtualizaDataValidade(ServiceSolicitacaoBeneficio, solicitacaoBeneficioTargetCreate, ref e);
                //AtualizaSituacaoInrregular(ServiceSolicitacaoBeneficio, solicitacaoBeneficioTargetCreate, ref e);
                AtualizaTrimestreCompetencia(ServiceSolicitacaoBeneficio, solicitacaoBeneficioTargetCreate, ref e);
                AtualizaValores(ServiceSolicitacaoBeneficio, ref solicitacaoBeneficioTargetCreate, ref e);

                ValidaValorAprovado(ServiceSolicitacaoBeneficio, solicitacaoBeneficioTargetCreate);
                AtualizaNome(ServiceSolicitacaoBeneficio, ref solicitacaoBeneficioTargetCreate, ref e);

                break;

                #endregion

                #region Update

            case MessageName.Update:

                var entityMerge        = context.PreEntityImages["imagem"];
                var entityTargetUpdate = (Entity)context.InputParameters["Target"];

                var solicitacaoPreUpdate = entityMerge.Parse <SolicitacaoBeneficio>(context.OrganizationName, context.IsExecutingOffline, adminService);

                foreach (var item in context.GetContextEntity().Attributes)
                {
                    entityMerge.Attributes[item.Key] = item.Value;
                }

                var solicitacaoBeneficioMergeUpdate = entityMerge.Parse <SolicitacaoBeneficio>(context.OrganizationName, context.IsExecutingOffline, adminService);



                ValidaTrocaStatus(solicitacaoBeneficioMergeUpdate, solicitacaoPreUpdate);
                ValidaValorAcao(ServiceSolicitacaoBeneficio, solicitacaoBeneficioMergeUpdate);

                ServiceSolicitacaoBeneficio.ValidaDataParametrizadaParaConclusao(solicitacaoBeneficioMergeUpdate);

                #region SOLICITAÇÃO DE BENEFICIO

                if (solicitacaoBeneficioMergeUpdate.StatusSolicitacao.Value == (int)Domain.Enum.SolicitacaoBeneficio.StatusSolicitacaoBeneficio.Criada ||
                    solicitacaoBeneficioMergeUpdate.StatusSolicitacao.Value == (int)Domain.Enum.SolicitacaoBeneficio.StatusSolicitacaoBeneficio.EmAnalise ||
                    solicitacaoBeneficioMergeUpdate.StatusSolicitacao.Value == (int)Domain.Enum.SolicitacaoBeneficio.StatusSolicitacaoBeneficio.Aprovada ||
                    solicitacaoBeneficioMergeUpdate.StatusSolicitacao.Value == (int)Domain.Enum.SolicitacaoBeneficio.StatusSolicitacaoBeneficio.PagamentoPendente ||
                    solicitacaoBeneficioMergeUpdate.StatusSolicitacao.Value == (int)Domain.Enum.SolicitacaoBeneficio.StatusSolicitacaoBeneficio.ComprovantesValidacao ||
                    solicitacaoBeneficioMergeUpdate.StatusSolicitacao.Value == (int)Domain.Enum.SolicitacaoBeneficio.StatusSolicitacaoBeneficio.ComprovacaoConcluida)
                {
                    var tempSolicBen = ServiceSolicitacaoBeneficio.RecalculaValoresNaAlteracaoDeStatus(solicitacaoBeneficioMergeUpdate, solicitacaoPreUpdate);

                    if (tempSolicBen.ValorPago.HasValue)
                    {
                        entityTargetUpdate.Attributes["itbc_valorpago"] = new Money(tempSolicBen.ValorPago.Value);
                        solicitacaoBeneficioMergeUpdate.ValorPago       = tempSolicBen.ValorPago;
                    }

                    if (tempSolicBen.ValorSolicitado.HasValue)
                    {
                        entityTargetUpdate.Attributes["itbc_valorsolicitado"] = new Money(tempSolicBen.ValorSolicitado.Value);
                        solicitacaoBeneficioMergeUpdate.ValorSolicitado       = tempSolicBen.ValorSolicitado;
                    }

                    if (tempSolicBen.ValorAbater.HasValue)
                    {
                        entityTargetUpdate.Attributes["itbc_valoraabater"] = new Money(tempSolicBen.ValorAbater.Value);
                        solicitacaoBeneficioMergeUpdate.ValorAbater        = tempSolicBen.ValorAbater;
                    }

                    if (tempSolicBen.ValorAprovado.HasValue)
                    {
                        entityTargetUpdate.Attributes["itbc_valoraprovado"] = new Money(tempSolicBen.ValorAprovado.Value);
                        solicitacaoBeneficioMergeUpdate.ValorAprovado       = tempSolicBen.ValorAprovado;
                    }
                }

                #endregion

                ValidaValorAprovado(ServiceSolicitacaoBeneficio, solicitacaoBeneficioMergeUpdate);
                AtualizaNome(ServiceSolicitacaoBeneficio, ref solicitacaoBeneficioMergeUpdate, ref entityTargetUpdate);

                break;

                #endregion

                #region SetStateDynamicEntity

            case MessageName.SetStateDynamicEntity:

                if (!context.InputParameters.Contains("EntityMoniker") || !(context.InputParameters["EntityMoniker"] is EntityReference))
                {
                    throw new ArgumentException("(CRM) SetStateDynamicEntity não contém EntityMoniker.");
                }

                EntityReference eSolicitacao = (EntityReference)context.InputParameters["EntityMoniker"];
                OptionSetValue  state        = (OptionSetValue)context.InputParameters["State"];
                OptionSetValue  status       = (OptionSetValue)context.InputParameters["Status"];

                if (eSolicitacao.Id != Guid.Empty && state.Value == (int)Domain.Enum.SolicitacaoBeneficio.State.Inativo)
                {
                    throw new ArgumentException("(CRM) Não é possível inativar uma solicitação!");
                }
                break;

                #endregion
            }
        }
Example #13
0
 private void ValidaValorAprovado(SolicitacaoBeneficioService ServiceSolicitacaoBeneficio, SolicitacaoBeneficio solicitacaoBeneficio)
 {
     ServiceSolicitacaoBeneficio.ValidaValorAprovado(solicitacaoBeneficio);
 }