/// <summary>
        ///Vincular uma contribuicao com o associado dependente
        ///Pode-se informar qual contribuição será vinculada
        /// </summary>
        public UtilRetorno gerarCobrancaDependente(Associado OAssociado, AssociadoContribuicao OAssociadoContribuicao)
        {
            if (OAssociado?.TipoAssociado == null)
            {
                return(UtilRetorno.newInstance(true, "O tipo do associado dependente informado não foi informado."));
            }

            var OContribuicao = OAssociadoContribuicao.Contribuicao;

            if (OContribuicao == null)
            {
                OContribuicao = this.OContribuicaoBL.carregar(OAssociadoContribuicao.idContribuicao);
            }

            int?idContribuicao = OContribuicao.id;


            var TabelaPreco = OContribuicao.retornarTabelaVigente();

            if (TabelaPreco == null)
            {
                return(UtilRetorno.newInstance(true, "Não há tabela de preços configuradas para a contribuição."));
            }

            var Preco = TabelaPreco.retornarPreco(UtilNumber.toInt32(OAssociado.idTipoAssociado));

            AssociadoContribuicao ODependenteContribuicao = new AssociadoContribuicao();

            this.verificarIsencao(ref ODependenteContribuicao, Preco, OAssociado);

            ODependenteContribuicao.idAssociado = OAssociado.id;

            ODependenteContribuicao.idOrganizacao = OAssociadoContribuicao.idOrganizacao;

            ODependenteContribuicao.idUnidade = OAssociadoContribuicao.idUnidade;

            ODependenteContribuicao.idTipoAssociado = UtilNumber.toInt32(OAssociado.idTipoAssociado);

            ODependenteContribuicao.idContribuicao = idContribuicao.toInt();

            ODependenteContribuicao.valorOriginal = UtilNumber.toDecimal(Preco.valorFinal);

            ODependenteContribuicao.valorAtual = ODependenteContribuicao.valorOriginal;

            ODependenteContribuicao.dtVencimentoOriginal = OAssociadoContribuicao.dtVencimentoOriginal;

            ODependenteContribuicao.dtVencimentoAtual = ODependenteContribuicao.dtVencimentoOriginal;

            ODependenteContribuicao.idContribuicaoVencimento = OAssociadoContribuicao.idContribuicaoVencimento;

            ODependenteContribuicao.dtInicioVigencia = OAssociadoContribuicao.dtInicioVigencia;

            ODependenteContribuicao.dtFimVigencia = OAssociadoContribuicao.dtFimVigencia;

            ODependenteContribuicao.idAssociadoContribuicaoPrincipal = OAssociadoContribuicao.id;

            ODependenteContribuicao.Associado = OAssociado;

            return(this.gerarCobranca(ODependenteContribuicao));
        }
예제 #2
0
        /// <summary>
        /// Gerar os titulos de receita referentes a cobranca
        /// Se houver configuracao gerar boleto para a contribuicao
        /// </summary>
        private void gerarTituloFinanceiro(AssociadoContribuicao OAssociadoContribuicao)
        {
            if (OAssociadoContribuicao.flagIsento == true)
            {
                return;
            }

            ITituloReceitaGeradorBL OGeradorTituloBL;

            if (OAssociadoContribuicao.idAssociadoContribuicaoPrincipal > 0)
            {
                OGeradorTituloBL = new TituloReceitaGeradorContribuicaoDependenteBL();
            }
            else
            {
                OGeradorTituloBL = new TituloReceitaGeradorContribuicaoBL();
            }

            var RetornoTitulo = OGeradorTituloBL.gerar(OAssociadoContribuicao);

            if (OAssociadoContribuicao.Contribuicao.flagGerarBoleto != true)
            {
                return;
            }

            //Se for uma contribuicao de dependente, removemos o boleto anterior para criar um novo com valor atualizado
            if (OAssociadoContribuicao.idAssociadoContribuicaoPrincipal > 0)
            {
                var OTituloReceita = RetornoTitulo.info as TituloReceita ?? new TituloReceita();

                this.removerPagamentoDesatualizado(OTituloReceita.id);
            }

            this.gerarBoletos(OAssociadoContribuicao);
        }
예제 #3
0
        //Descricao do tipo de contribuicao da associacao utilizadora do sistema
        public static string cssBgSituacao(this AssociadoContribuicao OAssociadoContribuicao)
        {
            if (OAssociadoContribuicao == null)
            {
                return("");
            }

            if (OAssociadoContribuicao.flagIsento == true)
            {
                return("bg-yellow");
            }

            if (OAssociadoContribuicao.dtPagamento.HasValue)
            {
                return("bg-green");
            }

            if (OAssociadoContribuicao.flagEmAtraso())
            {
                return("bg-red");
            }


            return("bg-gray");
        }
        //Verificar se o associado em questao sera isento para essa contribuica ou nao
        public void verificarIsencao(ref AssociadoContribuicao OAssociadoContribuicao, ContribuicaoPreco Preco, Associado OAssociado)
        {
            //int idadeIsencao = ConfiguracaoContribuicaoBL.getInstance.carregar().idadeIsencao ?? 0;

            //OAssociadoContribuicao.flagIsento = false;

            //if (!OAssociado.Pessoa.dtNascimento.HasValue || OAssociado.Pessoa.dtNascimento == DateTime.MinValue) {
            //    return;
            //}

            //if (OAssociado.Pessoa.calcularIdade() >= idadeIsencao && (idadeIsencao > 0)) {

            //    OAssociadoContribuicao.flagIsento = true;

            //    OAssociadoContribuicao.motivoIsencao = $"Associado isento por ser nascido em {OAssociado.Pessoa.dtNascimento.exibirData()}. Idade igual ou superior à {idadeIsencao} anos";

            //    OAssociadoContribuicao.observacoes = OAssociadoContribuicao.motivoIsencao;
            //}

            if (Preco.flagIsento == true)
            {
                OAssociadoContribuicao.dtIsencao = DateTime.Now;

                OAssociadoContribuicao.flagIsento = true;

                OAssociadoContribuicao.motivoIsencao = $"Associado isento por ter o perfil {OAssociado.TipoAssociado.descricao}";

                OAssociadoContribuicao.observacoes = OAssociadoContribuicao.motivoIsencao;
            }
        }
        //Salvar anuidade unitaria para um associado.
        public UtilRetorno gerarCobranca(AssociadoContribuicao OAssociadoContribuicao)
        {
            if (!OAssociadoContribuicao.flagImportado)
            {
                OAssociadoContribuicao.dtPagamento = null;
            }

            OAssociadoContribuicao.setDefaultInsertValues();

            OAssociadoContribuicao.dtExclusao = null;

            OAssociadoContribuicao.Associado = null;

            OAssociadoContribuicao.Contribuicao = null;

            OAssociadoContribuicao.ContribuicaoVencimento = null;

            db.AssociadoContribuicao.Add(OAssociadoContribuicao);

            db.SaveChanges();

            bool flagSucesso = OAssociadoContribuicao.id > 0;

            if (!flagSucesso)
            {
                return(UtilRetorno.newInstance(true, "Não foi possível salvar a contribuição para o associado."));
            }

            //onContribuicaoVinculada.subscribe(new OnContribuicaoVinculadaHandler());

            onContribuicaoVinculada.publish(OAssociadoContribuicao as object);

            return(UtilRetorno.newInstance(false, "A cobrança foi gerada com sucesso.", OAssociadoContribuicao));
        }
예제 #6
0
        //Atualizacao da última data em que foi paga uma contribuição
        //Atualização do próximo vencimento do associado
        public bool atualizarUltimoPagamentoContribuicao(AssociadoContribuicao OAssociadoContribuicao)
        {
            var Contribuicao = OAssociadoContribuicao.Contribuicao ?? new Contribuicao();

            var PeriodoContribuicao = Contribuicao.PeriodoContribuicao ?? new PeriodoContribuicao();

            DateTime?dtProximoVencimento = null;

            if (PeriodoContribuicao.id > 0)
            {
                int qtdeMeses = PeriodoContribuicao.qtdeMeses;

                dtProximoVencimento = OAssociadoContribuicao.dtVencimentoOriginal.AddMonths(qtdeMeses);
            }

            this.db.Associado
            .Where(x => x.id == OAssociadoContribuicao.idAssociado)
            .Update(x => new Associado {
                dtUltimoPagamentoContribuicao = OAssociadoContribuicao.dtPagamento,
                dtProximoVencimento           = dtProximoVencimento
            }
                    );

            return(true);
        }
예제 #7
0
        //Carregar os itens da compra (Mensalidade)
        private List <CheckoutItem> carregarProdutos(AssociadoContribuicao OAssociadoContribuicao)
        {
            List <CheckoutItem> listaItens = new List <CheckoutItem>();

            CheckoutItem OItemCompra = new CheckoutItem();

            OItemCompra.flagEntrega = false;

            OItemCompra.idTipoItem = TipoItemConst.MENSALIDADE;

            OItemCompra.idItem = OAssociadoContribuicao.id;

            OItemCompra.nomeItem = OAssociadoContribuicao.Contribuicao.descricao;

            OItemCompra.descricaoItem = String.Format("Pagamento de Mensalidade referente ao perído de {0}", OAssociadoContribuicao.Contribuicao.anoInicioVigencia.ToString());

            OItemCompra.qtdeItem = 1;

            OItemCompra.valorUnitario = OAssociadoContribuicao.valorAtual;

            OItemCompra.pathImagem = "";

            listaItens.Add(OItemCompra);

            return(listaItens);
        }
        public ActionResult concederIsencao(AssociadoContribuicao ViewModel, string observacoes)
        {
            var OAssociadoContribuicao = this.OAssociadoContribuicaoBL.carregar(ViewModel.id);

            if (OAssociadoContribuicao == null)
            {
                ModelState.AddModelError("", "A cobrança não pôde ser localizado.");
                return(PartialView("partial-isencao-contribuicao", ViewModel));
            }

            if (String.IsNullOrEmpty(observacoes))
            {
                ModelState.AddModelError("observacoes", "Informe o motivo para a isenção.");
                return(PartialView("partial-isencao-contribuicao", ViewModel));
            }

            if (observacoes.Length > 100)
            {
                ModelState.AddModelError("observacoes", "O motivo para a isenção não pode ultrapassar 100 caracteres.");
                return(PartialView("partial-isencao-contribuicao", ViewModel));
            }

            this.OAssociadoContribuicaoIsencaoBL.concederIsencao(ViewModel.id, observacoes, User.id());

            this.Flash(UtilMessage.TYPE_MESSAGE_SUCCESS, "A isenção da cobrança foi concedida com sucesso!");

            return(Json(new{ flagSucesso = true }));
        }
        /// <summary>
        /// Atualizar valores
        /// </summary>
        public UtilRetorno atualizarValor(AssociadoContribuicao OAssociadoContribuicao)
        {
            if (OAssociadoContribuicao.valorAtual <= 0)
            {
                return(UtilRetorno.newInstance(true, "O valor informado é inválido."));
            }

            db.AssociadoContribuicao.Where(x => x.id == OAssociadoContribuicao.id)
            .Update(x => new AssociadoContribuicao {
                valorAtual = OAssociadoContribuicao.valorAtual, observacoes = "Valor configurado manualmente"
            });

            return(UtilRetorno.newInstance(false, "O valor atual da contribuição foi configurado com sucesso."));
        }
예제 #10
0
        //Carregar o titulo de receita (se houver)
        private TituloReceita carregarTitulo(AssociadoContribuicao OAssociadoContribuicao)
        {
            TituloReceita TituloExistente = this.OTituloReceitaMensalidadeBL.carregarPorReceita(OAssociadoContribuicao.id);

            if (TituloExistente != null)
            {
                return(TituloExistente);
            }

            //this.OTituloReceitaMensalidadeBL.gerar( OAssociadoContribuicao as object );

            TituloExistente = this.OTituloReceitaMensalidadeBL.carregarPorReceita(OAssociadoContribuicao.id);

            return(TituloExistente);
        }
예제 #11
0
        //Salva o histórico
        private void salvarHistorico(AssociadoContribuicao OAssociadoContribuicao)
        {
            Associado OAssociado = this.OAssociadoBL.carregar(OAssociadoContribuicao.idAssociado);

            PessoaRelacionamento Relacionamento = new PessoaRelacionamento();

            Relacionamento.idPessoa = OAssociado.idPessoa;

            Relacionamento.idOcorrenciaRelacionamento = OcorrenciaRelacionamentoConst.idIsencaoContribuicao;

            Relacionamento.observacao = String.Concat("Isenção ", OAssociadoContribuicao.Contribuicao.descricao, ", motivo: ", OAssociadoContribuicao.motivoIsencao);

            Relacionamento.dtOcorrencia = DateTime.Now;

            this.OAssociadoRelacionamentoBL.salvar(Relacionamento);
        }
예제 #12
0
        /// <summary>
        /// Atualizar o título de receita da cobrança principal para contemplar o valor do dependente
        /// </summary>
        public override UtilRetorno gerar(object OrigemTitulo)
        {
            AssociadoContribuicao AssociadoContribuicao = (OrigemTitulo as AssociadoContribuicao);

            if (AssociadoContribuicao == null)
            {
                return(UtilRetorno.newInstance(true, "Não é possível gerar um título com o objeto nulo (AssociadoContribuicao)."));
            }

            if (AssociadoContribuicao.Contribuicao == null)
            {
                return(UtilRetorno.newInstance(true, "Não é possível gerar um título com o objeto nulo (Contribuicao)."));
            }

            //Capturar o título da cobrança principal
            var OTituloReceita = this.OTituloReceitaBL.carregarPorReceita(AssociadoContribuicao.idAssociadoContribuicaoPrincipal.toInt());

            if (OTituloReceita == null)
            {
                return(UtilRetorno.newInstance(true, "O título da cobrança principal não foi encontrado"));
            }

            decimal valorTitulo = OTituloReceita.valorTotal.toDecimal();

            decimal valorDependente = AssociadoContribuicao.valorAtual;

            decimal valorAtualizado = decimal.Add(valorTitulo, valorDependente);

            int idTituloReceita = OTituloReceita.id;

            string descricaoTitulo = OTituloReceita.descricao;

            if (!OTituloReceita.descricao.Contains("dependente"))
            {
                descricaoTitulo = string.Concat(descricaoTitulo, " Incluindo cobrança dependentes");
            }

            db.TituloReceita.Where(x => x.id == idTituloReceita)
            .Update(x => new TituloReceita {
                valorTotal  = valorAtualizado,
                descricao   = descricaoTitulo,
                dtAlteracao = DateTime.Now
            });


            return(UtilRetorno.newInstance(false, "O título foi atualizado com sucesso", OTituloReceita));
        }
예제 #13
0
        /// <summary>
        /// Caso exista configuração de comissionamento gerar o registro para consulta posterior
        /// </summary>
        private void gerarAssociadoContribuicaoComissao(AssociadoContribuicao OAssociadoContribuicao)
        {
            var OConfiguracaoComissao = ConfiguracaoComissaoBL.getInstance.carregar();

            if (OConfiguracaoComissao.flagHabilitar != true)
            {
                return;
            }

            var idRepresentante = 0;

            if (idRepresentante == 0)
            {
                return;
            }

            var OPlanoComissaoRepresentanteBL = new PlanoComissaoRepresentanteBL();

            var OPlanoComissaoRepresentante = OPlanoComissaoRepresentanteBL.listar(idRepresentante, 0, TipoPlanoComissaoConst.CONTRIBUICAO)
                                              .FirstOrDefault(x => x.PlanoComissao.ativo == true && x.Representante.ativo == "S" && x.Representante.dtExclusao == null);

            if (OPlanoComissaoRepresentante == null)
            {
                return;
            }

            var idsPerfisComissionavies = OConfiguracaoComissao.listaPerfisComissionaveis.Select(x => x.idPerfilAcesso).ToList();

            if (!idsPerfisComissionavies.Contains(OPlanoComissaoRepresentante.Representante.idPerfilAcesso))
            {
                return;
            }

            var OAssociadoContribuicaoComissao = new AssociadoContribuicaoComissao();

            OAssociadoContribuicaoComissao.idAssociadoContribuicao = OAssociadoContribuicao.id;

            OAssociadoContribuicaoComissao.idPlanoComissao = OPlanoComissaoRepresentante.idPlanoComissao;

            OAssociadoContribuicaoComissao.idRepresentante = OPlanoComissaoRepresentante.idRepresentante;

            var OAssociadoContribuicaoComissaoBL = new AssociadoContribuicaoComissaoBL();

            OAssociadoContribuicaoComissaoBL.salvar(OAssociadoContribuicaoComissao);
        }
예제 #14
0
        /// <summary>
        /// Se houver a configuracao, gerar boletos para a cobrança
        /// </summary>
        private void gerarBoletos(AssociadoContribuicao OAssociadoContribuicao)
        {
            //Gerar TituloReceitaPagamento
            var OGeradorPagamento = new AssociadoContribuicaoBoletoGeracaoBL();

            var RetornoInfo = OGeradorPagamento.gerarPagamentoBoleto(OAssociadoContribuicao);

            //Gerar arquivo do boleto
            var OGeradorBoleto = new GeracaoBoletoBL();

            var OPagamento = RetornoInfo.info as TituloReceitaPagamento;

            if (OPagamento == null)
            {
                return;
            }

            OGeradorBoleto.gerarBoleto(OPagamento);
        }
        //Propriedades

        //Events

        /// <summary>
        /// Gerar boleto bancario para uma contribuicao
        /// </summary>
        public UtilRetorno gerarPagamentoBoleto(AssociadoContribuicao OAssociadoContribuicao)
        {
            var OTituloReceita = OTituloReceitaBL.carregarPorReceita(OAssociadoContribuicao.id);

            if (OTituloReceita == null)
            {
                var RetornoGerador = this.OTituloReceitaGeradorBL.gerar(OAssociadoContribuicao as object);

                OTituloReceita = RetornoGerador.info as TituloReceita;
            }


            string nroDocumento = OTituloReceita.documentoRecibo;

            string cep = OTituloReceita.cepRecibo;

            if (!UtilValidation.isCPF(nroDocumento) && !UtilValidation.isCNPJ(nroDocumento))
            {
                return(UtilRetorno.newInstance(true, $"O documento do associado é inválido para geração de boleto bancário: {nroDocumento}"));
            }

            if (!UtilValidation.isCEP(cep))
            {
                return(UtilRetorno.newInstance(true, $"O CEP do sacado informado é inválido para geração de boleto bancário: {cep}"));
            }
            var OPagamento = new TituloReceitaPagamento();

            OPagamento.transferirDadosTitulo(OTituloReceita);

            OPagamento.idMeioPagamento = MeioPagamentoConst.BOLETO_BANCARIO;

            OPagamento.idFormaPagamento = FormaPagamentoConst.BOLETO_BANCARIO;

            OPagamento.idStatusPagamento = StatusPagamentoConst.AGUARDANDO_PAGAMENTO;

            OTituloReceitaPagamentoBL.salvar(OPagamento);

            //Essas atribuicoes sao feitas pois apos a geracao do registro é enviado para geracao de boletos e os objetos abaixo serao necessarios, assim economiza-se uma nova ida ao banco de dados
            OPagamento.TituloReceita = OTituloReceita;

            return(UtilRetorno.newInstance(false, "Os dados para geração do boleto foram configurados com sucesso.", OPagamento));
        }
        //Transformar os dados da contribuicao em informações para pagamento no checkout
        public override CheckoutCompra transformar(object objetoOrigem)
        {
            AssociadoContribuicao OAssociadoContribuicao = (AssociadoContribuicao)objetoOrigem;

            CheckoutCompra OCompra = new CheckoutCompra();

            OCompra.flagEntrega = false;

            OCompra.flagRecibo = true;

            OCompra.descricaoDadosCompra = "Dados do Associado";

            OCompra.Pessoa = OAssociadoContribuicao.Associado.Pessoa;

            OCompra.idPessoa = OCompra.Pessoa.id;

            OCompra.nome = OCompra.Pessoa.nome;

            OCompra.nroDocumento = OCompra.Pessoa.nroDocumento;

            OCompra.email = OCompra.Pessoa.emailPrincipal();

            OCompra.telPrincipal = String.Concat(OCompra.Pessoa.dddTelPrincipal, OCompra.Pessoa.nroTelPrincipal);

            OCompra.telSecundario = String.Concat(OCompra.Pessoa.dddTelSecundario, OCompra.Pessoa.nroTelSecundario);

            OCompra.observacaoComprador = String.Format("Tipo de Associado: {0}", OAssociadoContribuicao.Associado.TipoAssociado.descricao);

            OCompra.listaItens = this.carregarProdutos(OAssociadoContribuicao);

            OCompra.valorItens = OCompra.valorTotalProdutos();

            OCompra.TituloReceita = this.carregarTitulo(OAssociadoContribuicao);

            OCompra.TituloReceita.nroTelPrincipal = OCompra.telPrincipal;

            OCompra.TituloReceita.nroTelSecundario = OCompra.telSecundario;

            OCompra.idTituloReceita = OCompra.TituloReceita.id;

            return(OCompra);
        }
예제 #17
0
        /// <summary>
        /// Enviar e-mail de confirmação do pagamento da anuidade
        /// </summary>
        private void enviarEmailPagamento(AssociadoContribuicao OAssociadoContribuicao)
        {
            if (OAssociadoContribuicao.flagImportado)
            {
                return;
            }

            var listaEmails = OAssociadoContribuicao.Associado.Pessoa.ToEmailList();

            listaEmails = listaEmails.Where(UtilValidation.isEmail).ToList();

            if (!listaEmails.Any())
            {
                return;
            }

            IEnvioPagamentoContribuicao EmailEnvio = EnvioPagamentoContribuicao.factory(AssociadoContribuicao.idOrganizacao, listaEmails, null);

            EmailEnvio.enviar(OAssociadoContribuicao);
        }
예제 #18
0
        //Salva o histórico
        private void salvarHistorico(AssociadoContribuicao OAssociadoContribuicao)
        {
            var OAssociadoBL = new AssociadoBL();

            Associado OAssociado = OAssociadoBL.carregar(OAssociadoContribuicao.idAssociado);

            PessoaRelacionamento Relacionamento = new PessoaRelacionamento();

            Relacionamento.idPessoa = OAssociado.idPessoa;

            Relacionamento.idOcorrenciaRelacionamento = OcorrenciaRelacionamentoConst.idDesvinculoContribuicao;

            Relacionamento.observacao = string.Concat(OAssociadoContribuicao.Contribuicao.descricao, " removida, motivo: ", OAssociadoContribuicao.motivoExclusao);

            Relacionamento.dtOcorrencia = DateTime.Now;

            var OAssociadoRelacionamentoBL = new AssociadoRelacionamentoBL();

            OAssociadoRelacionamentoBL.salvar(Relacionamento);
        }
예제 #19
0
        //Chamador das ações do evento
        public void execute(object source)
        {
            try {
                int idTituloReceita = UtilNumber.toInt32(source);

                TituloReceita OTituloReceita = OTituloReceitaBL.carregar(idTituloReceita);

                this.AssociadoContribuicao = this.OAssociadoContribuicaoBL.carregar(UtilNumber.toInt32(OTituloReceita.idReceita));

                this.registrarPagamento(OTituloReceita);

                this.enviarEmailPagamento(AssociadoContribuicao);

                this.OAssociadoAcaoBL.atualizarUltimoPagamentoContribuicao(this.AssociadoContribuicao);

                new TarefaInadimplencia().executar();
            } catch (Exception ex) {
                UtilLog.saveError(ex, "Erro no manipulador de evento: OnContribuicaoQuitadaHandler");
            }
        }
        //
        public UtilRetorno enviar(AssociadoContribuicao OAssociadoContribuicao)
        {
            this.AssociadoContribuicao = OAssociadoContribuicao;

            Dictionary <string, object> infos = new Dictionary <string, object>();

            infos["nome"] = OAssociadoContribuicao.Associado.Pessoa.nome;

            infos["descricaoPagamento"] = OAssociadoContribuicao.Contribuicao.descricao;

            infos["dtVencimento"] = OAssociadoContribuicao.dtVencimentoAtual.ToShortDateString();

            infos["dtPagamento"] = OAssociadoContribuicao.dtPagamento.HasValue? OAssociadoContribuicao.dtPagamento.Value.ToShortDateString(): "";

            infos["valor"] = OAssociadoContribuicao.valorAtual.ToString("C");

            string tituloEmail = OAssociadoContribuicao.Contribuicao.emailPagamentoTitulo;

            return(this.enviar(infos, tituloEmail));
        }
        //
        public static MvcHtmlString linkEnviarEmailCobranca(this HtmlHelper helper, AssociadoContribuicao AssociadoContribuicao, string textoLink, string cssClass = "")
        {
            var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);

            TagBuilder htmlLink = new TagBuilder("a");

            htmlLink.Attributes.Add("href", "javascript:void(0);");

            htmlLink.Attributes.Add("onclick", $"AssociadoContribuicaoCobranca.abrirModalGeracaoEmailCobranca('{ AssociadoContribuicao.idContribuicao }', '{ AssociadoContribuicao.id }')");

            htmlLink.Attributes.Add("data-toggle", "tooltip");

            htmlLink.Attributes.Add("title", "Enviar e-mail de cobrança para o associado");

            htmlLink.InnerHtml = textoLink;

            if (!string.IsNullOrEmpty(cssClass))
            {
                htmlLink.AddCssClass(cssClass);
            }

            return(new MvcHtmlString(htmlLink.ToString()));
        }
        //Events

        // 1) Enviar email de cobranca
        public UtilRetorno enviarEmailCobranca(int idAssociadoContribuicao)
        {
            AssociadoContribuicao OAssociadoContribuicao = this.OAssociadoContribuicaoBL.carregar(idAssociadoContribuicao);

            if (OAssociadoContribuicao == null)
            {
                return(UtilRetorno.newInstance(true, "O registro de anuidade não foi localizado."));
            }

            if (string.IsNullOrEmpty(OAssociadoContribuicao.Contribuicao.emailCobrancaHtml))
            {
                return(UtilRetorno.newInstance(true, "Não há cadastro do conteúdo que deve ser enviado por e-mail."));
            }

            var listaEmails = OAssociadoContribuicao.Associado.Pessoa.ToEmailList();

            if (listaEmails.Count == 0)
            {
                return(UtilRetorno.newInstance(true, "Não existem contas de e-mails válidas para envio para esse associado."));
            }

            var listaCopias = ConfiguracaoNotificacaoBL.getInstance.carregar().emailCobrancaContribuicao.ToEmailList(";");

            IEnvioCobrancaContribuicao EnvioEmail = EnvioCobrancaContribuicao.factory(OAssociadoContribuicao.idOrganizacao, listaEmails, listaCopias);

            //bool flagEnviado = EnvioEmail.enviar(OAssociadoContribuicao);

            bool flagEnviado = true;

            if (flagEnviado)
            {
                return(UtilRetorno.newInstance(false, "A cobrança foi enviada com sucesso."));
            }

            return(UtilRetorno.newInstance(true, "Ocorreu um problema ao enviar a cobrança, por favor tente novamente."));
        }
예제 #23
0
        //Exclui o título
        private void excluirTituloFinanceiro(AssociadoContribuicao OAssociadoContribuicao)
        {
            var OTituloReceitaExclusaoBL = new TituloReceitaExclusaoBL();

            OTituloReceitaExclusaoBL.excluir(TipoReceitaConst.CONTRIBUICAO, OAssociadoContribuicao.id, "Contribuicao isenta");
        }
        public PartialViewResult partialIsencaoContribuicao(int id)
        {
            AssociadoContribuicao OAssociadoContribuicao = this.OAssociadoContribuicaoBL.carregar(id);

            return(PartialView(OAssociadoContribuicao));
        }
        /// <summary>
        ///Vincular uma contribuicao com o associado
        ///Pode-se informar qual contribuição será vinculada
        ///Se nao for informada nenhuma contribuicao, o sistema irá considerar a contribuicao padrao do associado
        /// </summary>
        public UtilRetorno gerarCobranca(Associado OAssociado, Contribuicao OContribuicao, DateTime?dtVencimento = null, DateTime?dtNovoVencimento = null, bool flagPrimeiraCobranca = false, decimal valorCustomizado = 0)
        {
            if (OAssociado?.TipoAssociado == null)
            {
                return(UtilRetorno.newInstance(true, "O associado informado não foi localizado."));
            }

            int?idContribuicao = OContribuicao?.id;

            if (idContribuicao.toInt() == 0)
            {
            }

            if (OContribuicao == null || !OContribuicao.listaContribuicaoVencimento.Any())
            {
                OContribuicao = this.OContribuicaoBL.carregar(idContribuicao.toInt());
            }

            if (OContribuicao == null)
            {
                return(UtilRetorno.newInstance(true, "A contribuição informada não foi localizada."));
            }

            var TabelaPreco = OContribuicao.retornarTabelaVigente();

            if (TabelaPreco.id == 0)
            {
                return(UtilRetorno.newInstance(true, "Não há tabela de preços configuradas para a contribuição."));
            }

            var Vencimento = OContribuicao.retornarProximoVencimento(dtVencimento);

            var Preco = flagPrimeiraCobranca ? TabelaPreco.retornarPrecoAtual(UtilNumber.toInt32(OAssociado.idTipoAssociado), DateTime.Today) : TabelaPreco.retornarPreco(UtilNumber.toInt32(OAssociado.idTipoAssociado));

            if (!dtVencimento.HasValue)
            {
                dtVencimento = Vencimento.dtVencimento;
            }

            if (flagPrimeiraCobranca)
            {
                dtNovoVencimento = DateTime.Today.AddDays(UtilNumber.toInt32(OAssociado.TipoAssociado.diasPrazoPrimeiraCobranca));

                //Caso o vencimento seja por admissão ou por ultimo pagamento, enviamos a data de vencimento vazia no ato do cadastro.
                //Por este motivo atualizamos a competência com base na data de hoje.
                if (OContribuicao.flagVencimentoVariado() && !Vencimento.dtVencimento.HasValue)
                {
                    dtVencimento = DateTime.Today;

                    Vencimento.dtVencimento = dtNovoVencimento;

                    Vencimento.dtInicioVigencia = dtNovoVencimento;

                    Vencimento.dtFimVigencia = dtNovoVencimento.Value.AddYears(1);
                }
            }

            if (!dtVencimento.HasValue)
            {
                return(UtilRetorno.newInstance(true, "O vencimento não está configurado ou não foi informado para essa contribuição."));
            }

            bool flagVencimentoValido = this.validarVencimento(OContribuicao, dtVencimento.Value);

            if (!flagVencimentoValido)
            {
                return(UtilRetorno.newInstance(true, "O vencimento informado não está dentro das opções válidas para a cobrança informada."));
            }

            AssociadoContribuicao OAssociadoContribuicao = new AssociadoContribuicao();

            this.verificarIsencao(ref OAssociadoContribuicao, Preco, OAssociado);

            OAssociadoContribuicao.idAssociado = OAssociado.id;

            OAssociadoContribuicao.idOrganizacao = OAssociado.idOrganizacao;

            OAssociadoContribuicao.idUnidade = OAssociado.idUnidade;

            OAssociadoContribuicao.idTipoAssociado = UtilNumber.toInt32(OAssociado.idTipoAssociado);

            OAssociadoContribuicao.idContribuicao = idContribuicao.toInt();

            OAssociadoContribuicao.valorOriginal = UtilNumber.toDecimal(Preco.valorFinal);

            OAssociadoContribuicao.valorAtual = valorCustomizado > 0? valorCustomizado : OAssociadoContribuicao.valorOriginal;

            OAssociadoContribuicao.dtVencimentoOriginal = dtVencimento.Value;

            OAssociadoContribuicao.dtVencimentoAtual = dtNovoVencimento ?? OAssociadoContribuicao.dtVencimentoOriginal;

            OAssociadoContribuicao.idContribuicaoVencimento = Vencimento.id;

            OAssociadoContribuicao.dtInicioVigencia = Vencimento.dtInicioVigencia;

            OAssociadoContribuicao.dtFimVigencia = Vencimento.dtFimVigencia;

            return(this.gerarCobranca(OAssociadoContribuicao));
        }
 //Extension para pegar a tabela de preços vigente para a contribuição
 public static void retornarProximoVencimento(this AssociadoContribuicao Item)
 {
 }
예제 #27
0
        //Metodo para geracao do titulo de receita
        public override UtilRetorno gerar(object OrigemTitulo)
        {
            AssociadoContribuicao AssociadoContribuicao = (OrigemTitulo as AssociadoContribuicao);

            if (AssociadoContribuicao == null)
            {
                return(UtilRetorno.newInstance(true, "O registro Associado Contribuição está nulo."));
            }

            if (AssociadoContribuicao.Contribuicao == null)
            {
                return(UtilRetorno.newInstance(true, "O registro Contribuição está nulo."));
            }

            //Verificar se o titulo já existe
            var OTituloReceita = this.OTituloReceitaBL.carregarPorReceita(AssociadoContribuicao.id);

            if (OTituloReceita != null)
            {
                return(UtilRetorno.newInstance(false, "O título já foi gerado anteriormente.", OTituloReceita));
            }

            var OAssociado = AssociadoContribuicao.Associado;

            var Contribuicao = AssociadoContribuicao.Contribuicao;

            var ConfiguracaoContribuicao = ConfiguracaoContribuicaoBL.getInstance.carregar(AssociadoContribuicao.idOrganizacao);

            OTituloReceita = new TituloReceita();

            OTituloReceita.idPessoa = AssociadoContribuicao.Associado.idPessoa;

            OTituloReceita.idTipoReceita = (byte)idTipoReceita;

            OTituloReceita.idReceita = AssociadoContribuicao.id;

            OTituloReceita.idOrganizacao = AssociadoContribuicao.idOrganizacao;

            OTituloReceita.idUnidade = AssociadoContribuicao.idUnidade;

            OTituloReceita.qtdeRepeticao = 1;

            OTituloReceita.mesCompetencia = (byte?)AssociadoContribuicao.dtInicioVigencia?.Month;

            OTituloReceita.anoCompetencia = (short?)AssociadoContribuicao.dtInicioVigencia?.Year;

            if (OTituloReceita.mesCompetencia > 0 && OTituloReceita.anoCompetencia > 0)
            {
                byte?diaCompetencia = AssociadoContribuicao.dtInicioVigencia?.Day.toByte();

                diaCompetencia = diaCompetencia.toByte() > 0 ? diaCompetencia.toByte() : (byte)1;

                OTituloReceita.dtCompetencia = new DateTime(OTituloReceita.anoCompetencia.toInt(), OTituloReceita.mesCompetencia.toInt(), diaCompetencia.toInt());
            }

            OTituloReceita.idContaBancaria = Contribuicao.idContaBancaria > 0 ? Contribuicao.idContaBancaria : ConfiguracaoContribuicao.idContaBancariaPadrao;

            OTituloReceita.idCentroCusto = Contribuicao.idCentroCusto > 0 ? Contribuicao.idCentroCusto : ConfiguracaoContribuicao.idCentroCustoPadrao;

            OTituloReceita.idMacroConta = Contribuicao.idMacroConta > 0 ? Contribuicao.idMacroConta : ConfiguracaoContribuicao.idMacroContaPadrao;

            OTituloReceita.idCategoria = Contribuicao.idCategoriaTitulo;

            OTituloReceita.limiteParcelamento = Contribuicao.qtdeLimiteParcelas ?? 1;

            OTituloReceita.flagCartaoCreditoPermitido = Contribuicao.flagCartaoCreditoPermitido;

            OTituloReceita.flagBoletoBancarioPermitido = Contribuicao.flagBoletoBancarioPermitido;

            OTituloReceita.flagDepositoPermitido = Contribuicao.flagDepositoPermitido;

            OTituloReceita.descricao = $"Cobrança {Contribuicao.descricao} - {AssociadoContribuicao.Associado.Pessoa.nome}";

            if (AssociadoContribuicao.dtInicioVigencia.HasValue)
            {
                OTituloReceita.descricao = $"{OTituloReceita.descricao}. Vigência: {AssociadoContribuicao.dtInicioVigencia.exibirData()} à {AssociadoContribuicao.dtFimVigencia.exibirData()}";
            }

            OTituloReceita.valorTotal = AssociadoContribuicao.valorAtual;

            OTituloReceita.dtVencimentoOriginal = AssociadoContribuicao.dtVencimentoOriginal;

            OTituloReceita.dtVencimento = AssociadoContribuicao.dtVencimentoAtual;

            this.preencherRecibo(ref OTituloReceita, OAssociado.Pessoa);

            var TabelaPreco = Contribuicao.retornarTabelaVigente();

            OTituloReceita.listaDescontosAntecipacao = TabelaPreco.retornarListaDescontos(AssociadoContribuicao.idTipoAssociado, AssociadoContribuicao.dtVencimentoOriginal);

            this.salvar(OTituloReceita);

            return(UtilRetorno.newInstance(false, "O título foi gerado com sucesso.", OTituloReceita));
        }