Example #1
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
            }
        }