/// <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)); }
/// <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); }
//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)); }
//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); }
//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.")); }
//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); }
//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); }
/// <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)); }
/// <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); }
/// <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); }
/// <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); }
//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); }
//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.")); }
//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) { }
//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)); }