/// <summary> /// Salvar o titulo de receita avulso /// </summary> public bool salvar(TituloReceita OTituloReceita) { OTituloReceita = this.tratarDadosPessoa(OTituloReceita); OTituloReceita.setDefaultInsertValues(); if (OTituloReceita.listaTituloReceitaPagamento.Any()) { OTituloReceita.listaTituloReceitaPagamento.ToList().ForEach(Item => { Item.setDefaultInsertValues(); }); } db.TituloReceita.Add(OTituloReceita); db.SaveChanges(); bool flagSucesso = OTituloReceita.id > 0; if (flagSucesso) { this.onReceitaCadastrada.subscribe(new OnReceitaCadastradaHandler()); this.onReceitaCadastrada.publish(OTituloReceita as object); } return(flagSucesso); }
//Inserir os dados para um novo titulo de receita private void inserir(TituloReceita OTituloReceita) { OTituloReceita.setDefaultInsertValues(); OTituloReceita.listaTituloReceitaPagamento = null; OTituloReceita.Categoria = null; OTituloReceita.CentroCusto = null; OTituloReceita.CidadeRecibo = null; OTituloReceita.ContaBancaria = null; OTituloReceita.MacroConta = null; OTituloReceita.Pessoa = null; if (OTituloReceita.listaDescontosAntecipacao != null) { OTituloReceita.listaDescontosAntecipacao.ForEach(x => { x.setDefaultInsertValues(); }); } using (var dataContext = new DataContext()) { dataContext.TituloReceita.Add(OTituloReceita); dataContext.SaveChanges(); } }
//eventos //Definir qual título receita irá fazer os tratamentos public ITituloReceitaBaixaBL factory(TituloReceita OTitulo) { if (OTitulo == null) { return(new TituloReceitaBaixaBL()); } if (OTitulo.idTipoReceita == TipoReceitaConst.CONTRIBUICAO) { return(new TituloReceitaContribuicaoBaixaBL()); } if (OTitulo.idTipoReceita == TipoReceitaConst.PEDIDO) { return(new TituloReceitaPedidoBaixaBL()); } /*if (OTitulo.idTipoReceita == TipoReceitaConst.INSCRICAO_EVENTO) { * return new TituloReceitaEventoBaixaBL(); * } * * if (OTitulo.idTipoReceita == TipoReceitaConst.SOLICITACAO) { * return new TituloReceitaSolicitacaoBaixaBL(); * } * * if (OTitulo.idTipoReceita == TipoReceitaConst.PROCESSO_AVALIACAO) { * return new TituloReceitaInscricaoProcessoBaixaBL(); * }*/ return(new TituloReceitaBaixaBL()); }
/// <summary> /// Calcular valores de parcelas /// </summary> public void carregarParcelas() { decimal valorTotalCobranca = TituloReceita.valorTotalComDesconto(); decimal valorParcela = decimal.Divide(TituloReceita.valorTotalComDesconto(), new decimal(qtdeParcelas)); decimal valorSomatorioParcelas = 0; for (int i = 0; i < qtdeParcelas; i++) { var OParcela = listaPagamentos.Count > i? listaPagamentos[i] : new TituloReceitaPagamento(); OParcela.valorOriginal = Math.Round(valorParcela, 2); OParcela.dtVencimento = OParcela.dtVencimento.HasValue? OParcela.dtVencimento: DateTime.Today.AddDays(1).AddMonths(i); valorSomatorioParcelas = Math.Round(decimal.Add(valorSomatorioParcelas, valorParcela), 2); if (listaPagamentos.Count > i) { continue; } listaPagamentos.Add(OParcela); } decimal valorDiferenca = decimal.Subtract(valorTotalCobranca, valorSomatorioParcelas); var UltimaParcela = listaPagamentos.LastOrDefault() ?? new TituloReceitaPagamento(); UltimaParcela.valorOriginal = decimal.Add(UltimaParcela.valorOriginal, valorDiferenca); }
/// <summary> /// /// </summary> private void atualizarPedido(TituloReceita OTituloLiquidado, byte?idMeioPagamentoParam) { //Atualizar Pedido db.Pedido.Where(x => x.id == OTituloLiquidado.idReceita) .Update(x => new Pedido { dtQuitacao = OTituloLiquidado.dtQuitacao, idStatusPedido = StatusPedidoConst.PAGO, idMeioPagamento = idMeioPagamentoParam }); //Atualizar os itens do pedido var listaItens = db.PedidoProduto.Where(x => x.idPedido == OTituloLiquidado.idReceita) .Select(x => new { x.id, x.valorGanhoDiario, x.qtdeDiasDuracao }) .ToListJsonObject <PedidoProduto>(); foreach (var Item in listaItens) { var dtFimGanho = DateTime.Today.AddDays(Item.qtdeDiasDuracao.toInt()); db.PedidoProduto.Where(x => x.id == Item.id) .Update(x => new PedidoProduto { dtFimGanhoDiario = dtFimGanho }); } }
//eventos //Definir qual título receita irá fazer os tratamentos public ITituloReceitaBL factory(TituloReceita OTitulo) { if (OTitulo == null) { return(new TituloReceitaPadraoBL()); } if (OTitulo.idTipoReceita == TipoReceitaConst.CONTRIBUICAO) { return(new TituloReceitaContribuicaoBL()); } /* * if(OTitulo.idTipoReceita == TipoReceitaConst.INSCRICAO_EVENTO) { * return new TituloReceitaEventoBL(); * } */ if (OTitulo.idTipoReceita == TipoReceitaConst.PEDIDO) { return(new TituloReceitaPedidoBL()); } if (OTitulo.idTipoReceita == TipoReceitaConst.TAXA_INSCRICAO) { return(new TituloReceitaTaxaInscricaoBL()); } return(new TituloReceitaPadraoBL()); }
//Registrar a liquidacao do titulo (pagamento total) //Cada classe filha pode sobreescrever esse metodo para que as acoes de pagamento sejam feitas public virtual TituloReceita liquidar(TituloReceita OTituloReceita) { var listaParcelas = this.db.TituloReceitaPagamento .Where(x => x.idTituloReceita == OTituloReceita.id && x.dtExclusao == null) .ToList(); var listaParcelasPendentes = listaParcelas.Where(x => x.dtPagamento == null).ToList(); if (listaParcelasPendentes.Count > 0) { return(OTituloReceita); } OTituloReceita.dtQuitacao = listaParcelas.Max(x => x.dtPagamento); this.db.TituloReceita.Where(x => x.id == OTituloReceita.id) .Update(x => new TituloReceita { dtQuitacao = OTituloReceita.dtQuitacao, ativo = true } ); this.onTituloQuitado.subscribe(new OnTituloQuitadoHandler()); this.onTituloQuitado.publish((OTituloReceita as object)); return(OTituloReceita); }
//Atributos //Propriedades //eventos /// <summary> /// Realizar a exclusao pelo ID do registro /// </summary> public virtual UtilRetorno excluir(int idTituloReceita, string motivo = "") { TituloReceita dbTitulo = this.db.TituloReceita.condicoesSeguranca().FirstOrDefault(x => x.id == idTituloReceita); if (dbTitulo == null) { return(UtilRetorno.newInstance(true, "O título informado não pôde ser localizado.")); } dbTitulo.dtExclusao = DateTime.Now; dbTitulo.idUsuarioExclusao = User.id(); dbTitulo.motivoExclusao = motivo; int qtdeAfetados = this.db.SaveChanges(); if (qtdeAfetados == 0) { return(UtilRetorno.newInstance(true, "Houve um problema ao remover o registro, tente novamente mais tarde.")); } this.removerParcelas(dbTitulo.id, User.id(), motivo); return(UtilRetorno.newInstance(false, "O registro foi removido com sucesso.")); }
/// <summary> /// Capturar dados adicionais do cadastro de pessoa para inserir no título /// </summary> public static void tratarDadosPessoa(this TituloReceita OTituloReceita) { int idPessoa = OTituloReceita.idPessoa.toInt(); if (idPessoa == 0) { return; } var OPessoa = db.Pessoa.Where(x => x.id == idPessoa) .Select(x => new { x.id, x.nroDocumento, x.nome, x.dddTelPrincipal, x.nroTelPrincipal, x.dddTelSecundario, x.nroTelSecundario, listaEmails = x.listaEmails.Select(e => new { e.id, e.email, e.idTipoEmail, e.dtExclusao }).ToList(), listaEnderecos = x.listaEnderecos.Select(e => new { e.id, e.idTipoEndereco, e.cep, e.logradouro, e.numero, e.complemento, e.bairro, e.nomeCidade, e.idCidade, e.dtExclusao }).ToList(), listaTelefones = x.listaTelefones.Select(t => new { t.id, t.idTipoTelefone, t.nroTelefone, t.dtExclusao }).ToList() }).AsNoTracking().FirstOrDefault().ToJsonObject <Pessoa>(); if (OPessoa == null) { return; } OTituloReceita.preencherRecibo(OPessoa); }
//Salvar uma receita no banco de dados //A operacao pode ser de atualizacao ou de insercao public virtual TituloReceita salvar(TituloReceita OTituloReceita) { //Tratar valores OTituloReceita.nroTelPrincipal = UtilString.onlyAlphaNumber(OTituloReceita.nroTelPrincipal).abreviar(15); OTituloReceita.nroTelSecundario = UtilString.onlyAlphaNumber(OTituloReceita.nroTelSecundario).abreviar(15); OTituloReceita.nomePessoa = OTituloReceita.nomePessoa.abreviar(100).toUppercaseWords(); OTituloReceita.documentoPessoa = OTituloReceita.documentoPessoa.abreviar(20); OTituloReceita.passaporteRecibo = OTituloReceita.passaporteRecibo.abreviar(20); OTituloReceita.rneRecibo = OTituloReceita.rneRecibo.abreviar(20); OTituloReceita.nomeRecibo = OTituloReceita.nomeRecibo.abreviar(100).toUppercaseWords(); OTituloReceita.documentoRecibo = OTituloReceita.documentoRecibo.abreviar(20); OTituloReceita.cepRecibo = OTituloReceita.cepRecibo.onlyNumber().abreviar(8); OTituloReceita.logradouroRecibo = OTituloReceita.logradouroRecibo.abreviar(100).toUppercaseWords(); OTituloReceita.numeroRecibo = OTituloReceita.numeroRecibo.abreviar(20); OTituloReceita.complementoRecibo = OTituloReceita.complementoRecibo.abreviar(50).toUppercaseWords(); OTituloReceita.bairroRecibo = OTituloReceita.bairroRecibo.abreviar(80).toUppercaseWords(); OTituloReceita.nomeCidadeRecibo = OTituloReceita.nomeCidadeRecibo.abreviar(100).toUppercaseWords(); OTituloReceita.motivoDesconto = OTituloReceita.motivoDesconto.abreviar(500); OTituloReceita.observacao = OTituloReceita.observacao.abreviar(1000); //Anular relacionamentos que nao se deseja inserções OTituloReceita.idPessoa = OTituloReceita.idPessoa == 0 ? null : OTituloReceita.idPessoa; OTituloReceita.Pessoa = null; OTituloReceita.CidadeRecibo = null; OTituloReceita.CentroCusto = null; OTituloReceita.PeriodoRepeticao = null; OTituloReceita.CupomDesconto = null; if (OTituloReceita.id > 0) { this.atualizar(OTituloReceita); } else { this.inserir(OTituloReceita); } return(OTituloReceita); }
/// <summary> /// Registar a data da quitacao na tb_associado_contribuicao /// </summary> private void registrarPagamento(TituloReceita OTituloReceita) { int idAssociadoContribuicao = OTituloReceita.idReceita.toInt(); db.AssociadoContribuicao .Where(x => x.id == idAssociadoContribuicao) .Update(x => new AssociadoContribuicao { dtPagamento = OTituloReceita.dtQuitacao }); }
/// <summary> /// Realizar a exclusao pelo tipo de receita e pela referencia /// </summary> public UtilRetorno excluir(int idTipoReceita, int idReferencia, string motivo) { TituloReceita dbTitulo = this.db.TituloReceita.condicoesSeguranca().FirstOrDefault(x => x.idTipoReceita == idTipoReceita && x.idReceita == idReferencia); if (dbTitulo == null) { return(UtilRetorno.newInstance(true, "O título informado não pôde ser localizado.")); } return(this.excluir(dbTitulo.id, motivo)); }
// public void carregarDados(TituloReceita OTitulo) { this.TituloReceita = OTitulo; this.listaPagamentos = OTitulo.listaTituloReceitaPagamento.Where(x => x.dtExclusao == null).OrderBy(x => x.dtVencimento).ToList(); this.listaPagamentosCancelados = OTitulo.listaTituloReceitaPagamento.Where(x => x.dtExclusao != null).OrderByDescending(x => x.id).ToList(); this.valorParcelado = this.listaPagamentos.Sum(x => x.valorOriginal); this.valorDiferencaParcelas = Decimal.Subtract(UtilNumber.toDecimal(OTitulo.valorTotal), this.valorParcelado); }
// private UtilRetorno salvarReceitas(TituloReceita OReceitaClone, int qtdeReplicacoes) { var ORetorno = UtilRetorno.newInstance(false); var listaReceitasGeradas = new List <TituloReceita>(); OReceitaClone.listaTituloReceitaPagamento = this.ajustarPagamentos(OReceitaClone, OReceitaClone.listaTituloReceitaPagamento.ToList()); listaReceitasGeradas.Add(OReceitaClone); qtdeReplicacoes--; for (int i = 1; i <= qtdeReplicacoes; i++) { var OReceitaReplicada = OReceitaClone.ToJsonObject <TituloReceita>(); OReceitaReplicada.dtCompetencia = OReceitaClone.dtCompetencia?.AddMonths(i); OReceitaReplicada.mesCompetencia = OReceitaReplicada.dtCompetencia?.Month.toByte(); OReceitaReplicada.anoCompetencia = Convert.ToInt16(OReceitaReplicada.dtCompetencia?.Year); OReceitaReplicada.dtVencimento = OReceitaClone.dtVencimento?.AddMonths(i); OReceitaReplicada.dtVencimentoOriginal = OReceitaClone.dtVencimento?.AddMonths(i); OReceitaReplicada.listaTituloReceitaPagamento = this.ajustarPagamentos(OReceitaReplicada, OReceitaReplicada.listaTituloReceitaPagamento.ToList()); listaReceitasGeradas.Add(OReceitaReplicada); } using (var ctx = this.db) { ctx.Configuration.AutoDetectChangesEnabled = false; ctx.Configuration.ValidateOnSaveEnabled = false; listaReceitasGeradas.ForEach(x => { x.setDefaultInsertValues(); x.listaTituloReceitaPagamento.ForEach(c => { c.setDefaultInsertValues(); }); }); ctx.TituloReceita.AddRange(listaReceitasGeradas); ctx.SaveChanges(); } ORetorno.info = listaReceitasGeradas.FirstOrDefault().id; return(ORetorno); }
private UtilRetorno alterarCampo(TituloReceita OTituloReceita, LogAlteracao OLog) { var ORetorno = UtilRetorno.newInstance(true); var listaCamposNaoEditaveis = new[] { "id" , "idOrganizacao" , "idUsuarioCadastro" , "idUsuarioAlteracao" , "dtCadastro" }; if (listaCamposNaoEditaveis.Contains(OLog.nomeCampoAlterado)) { return(UtilRetorno.newInstance(true, "O dado informado não pode ser alterado.")); } if (OLog.nomeCampoAlterado.Equals("observacao")) { OLog.valorNovo = OLog.valorNovo.abreviar(1000); } OLog.valorAntigo = OTituloReceita.alterarValorCampo(OLog.nomeCampoAlterado, OLog.valorNovo); if (OLog.valorAntigo == null) { ORetorno.listaErros.Add("O valor informado é inválido"); return(ORetorno); } var Retorno = db.validateAndSave(); if (Retorno.flagError) { return(Retorno); } OLog.nomeCampoAlterado = OLog.nomeCampoAlterado.abreviar(255); OLog.nomeCampoDisplay = OLog.nomeCampoDisplay.abreviar(255); OLog.valorNovo = OTituloReceita.getValorCampo(OLog.nomeCampoAlterado).removeTags().abreviar(255); OLog.valorAntigo = OLog.valorAntigo.removeTags().abreviar(255); OLog.oldValueSelect = OLog.valorAntigo.isEmpty() ? null : OLog.oldValueSelect.removeTags().abreviar(255); OLogAlteracaoBL.salvar(OLog); ORetorno.flagError = false; return(ORetorno); }
/// <summary> /// Preencher os dados de recibo de um titulo de receita /// </summary> protected void preencherRecibo(ref TituloReceita OTituloReceita, Pessoa OPessoa) { OTituloReceita.nomePessoa = OPessoa.flagTipoPessoa == "J" ? (!OPessoa.razaoSocial.isEmpty() ? OPessoa.razaoSocial : OPessoa.nome) : OPessoa.nome; OTituloReceita.documentoPessoa = OPessoa.nroDocumento; OTituloReceita.nroTelPrincipal = string.Concat(OPessoa.dddTelPrincipal, OPessoa.nroTelPrincipal); OTituloReceita.nomeRecibo = OTituloReceita.nomePessoa; OTituloReceita.documentoRecibo = OPessoa.nroDocumento; OTituloReceita.passaporteRecibo = OPessoa.passaporte; OTituloReceita.rneRecibo = OPessoa.rne; //Carregar E-mails da Pessoa var listaEmails = OPessoa.listaEmails.Where(x => x.dtExclusao == null && !string.IsNullOrEmpty(x.email)).ToList(); if (listaEmails.Any()) { OTituloReceita.emailPrincipal = listaEmails.Select(x => x.email).FirstOrDefault(); } //Carregar E-mails da Pessoa var listaTelefones = OPessoa.listaTelefones.Where(x => x.dtExclusao == null && !string.IsNullOrEmpty(x.nroTelefone)).ToList(); if (listaTelefones.Any()) { OTituloReceita.nroTelPrincipal = listaTelefones.Select(x => x.nroTelefone).FirstOrDefault(); } //Carregar Endereco da Pessoa var listaEnderecos = OPessoa.listaEnderecos.Where(x => x.dtExclusao == null).ToList(); var OEndereco = listaEnderecos.FirstOrDefault(x => !string.IsNullOrEmpty(x.cep)) ?? new PessoaEndereco(); OTituloReceita.cepRecibo = OEndereco.cep; OTituloReceita.logradouroRecibo = OEndereco.logradouro; OTituloReceita.complementoRecibo = OEndereco.complemento; OTituloReceita.numeroRecibo = OEndereco.numero; OTituloReceita.bairroRecibo = OEndereco.bairro; OTituloReceita.idCidadeRecibo = OEndereco.idCidade; }
/// <summary> /// Preencher os dados de recibo de um titulo de receita /// </summary> public static void preencherRecibo(this TituloReceita OTituloReceita, Pessoa OPessoa) { OTituloReceita.nomePessoa = OPessoa.nome; OTituloReceita.documentoPessoa = OPessoa.nroDocumento; OTituloReceita.nroTelPrincipal = string.Concat(OPessoa.dddTelPrincipal, OPessoa.nroTelPrincipal); OTituloReceita.nomeRecibo = OPessoa.nome; OTituloReceita.documentoRecibo = OPessoa.nroDocumento; OTituloReceita.nroTelPrincipal = OPessoa.nroTelPrincipal; OTituloReceita.nroTelSecundario = OPessoa.nroTelSecundario; //Carregar E-mails da Pessoa var listaEmails = OPessoa.retornarListaEmails(); if (listaEmails.Any()) { OTituloReceita.emailPrincipal = listaEmails.Select(x => x.email).FirstOrDefault(); } //Carregar E-mails da Pessoa var listaTelefones = OPessoa.retornarListaTelefones(); if (listaTelefones.Any()) { OTituloReceita.nroTelPrincipal = listaTelefones.Select(x => x.nroTelefone).FirstOrDefault(); } //Carregar Endereco da Pessoa var listaEnderecos = OPessoa.retornarListaEnderecos(); var OEndereco = listaEnderecos.FirstOrDefault(x => !string.IsNullOrEmpty(x.cep)) ?? new PessoaEndereco(); OTituloReceita.cepRecibo = OEndereco.cep; OTituloReceita.logradouroRecibo = OEndereco.logradouro; OTituloReceita.complementoRecibo = OEndereco.complemento; OTituloReceita.numeroRecibo = OEndereco.numero; OTituloReceita.bairroRecibo = OEndereco.bairro; OTituloReceita.idCidadeRecibo = OEndereco.idCidade; }
//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); }
//Liquidar receita de acordo com lista de pagamentos informada public virtual TituloReceita liquidar(TituloReceita OTituloReceita, List <TituloReceitaPagamento> listaPagamentos) { if (OTituloReceita.dtQuitacao.HasValue) { this.liquidar(OTituloReceita); return(OTituloReceita); } //this.OTituloReceitaBL.removerParcelas(OTituloReceita.id, OTituloReceita.idUsuarioAlteracao); foreach (var OPagamento in listaPagamentos) { OPagamento.idMeioPagamento = OPagamento.definirMeioPagamento(); OPagamento.idFormaPagamento = OPagamento.definirFormaPagamento(); OPagamento.dtPrevisaoCredito = OPagamento.dtPrevisaoCredito.HasValue? OPagamento.dtPrevisaoCredito: OPagamento.dtCredito; OPagamento.dtCredito = OPagamento.dtCredito; OPagamento.idTituloReceita = OTituloReceita.id; OPagamento.valorOriginal = UtilNumber.toDecimal(OTituloReceita.valorTotal); OPagamento.dtBaixa = DateTime.Now; OPagamento.flagBaixaAutomatica = false; OPagamento.idUsuarioBaixa = OTituloReceita.idUsuarioAlteracao; if (OTituloReceita.dtVencimento.HasValue) { OPagamento.dtVencimento = OTituloReceita.dtVencimento.Value; } OPagamento.setDefaultInsertValues(); this.db.TituloReceitaPagamento.Add(OPagamento); } this.db.SaveChanges(); this.liquidar(OTituloReceita); return(OTituloReceita); }
public ActionResult excluir(TituloReceita ViewModel) { if (ViewModel.motivoExclusao.isEmpty()) { this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, "Informe o motivo da exclusão."); return(View("modal-excluir-receita", ViewModel)); } var ORetorno = this.OTituloReceitaExclusaoBL.excluir(ViewModel.id, ViewModel.motivoExclusao); if (ORetorno.flagError == false) { return(Json(new { error = false, message = "Receita removida com sucesso", urlRetorno = Url.Action("editar", "ReceitaDetalhe", new { area = "Financeiro", id = ViewModel.id }) })); } this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, ORetorno.listaErros.FirstOrDefault()); return(View("modal-excluir-receita", ViewModel)); }
// private List <TituloReceitaPagamento> ajustarPagamentos(TituloReceita OReceitaClone, List <TituloReceitaPagamento> listaPagamentosClone) { listaPagamentosClone.ForEach(x => { x.idStatusPagamento = StatusPagamentoConst.ABERTO; x.dtCompetencia = OReceitaClone.dtCompetencia; x.mesCompetencia = OReceitaClone.dtCompetencia?.Month.toByte(); x.anoCompetencia = Convert.ToInt16(OReceitaClone.dtCompetencia?.Year); x.dtVencimentoOriginal = OReceitaClone.dtVencimento; x.dtVencimento = OReceitaClone.dtVencimento; }); return(listaPagamentosClone); }
//Atualizar os dados de um titulo de receita private void atualizar(TituloReceita OTituloReceita) { OTituloReceita.listaDescontosAntecipacao = null; TituloReceita dbTitulo = this.db.TituloReceita.Find(OTituloReceita.id); var entryTitulo = db.Entry(dbTitulo); entryTitulo.CurrentValues.SetValues(OTituloReceita); OTituloReceita.setDefaultUpdateValues(); entryTitulo.State = EntityState.Modified; entryTitulo.ignoreFields(new[] { "idPessoa", "idOrganizacao", "idUnidade", "idCentroCusto", "idReceita" }); db.SaveChanges(); }
// public UtilRetorno clonar(TituloReceita OReceita, int qtdeReplicacoes) { var ORetorno = UtilRetorno.newInstance(false); var OReceitaClone = this.carregarDadosReceitaBase(OReceita.id); if (OReceitaClone == null) { ORetorno.flagError = true; ORetorno.listaErros.Add("A Receita informada não foi encontrada."); return(ORetorno); } OReceitaClone.id = 0; OReceitaClone.idTituloReceitaOrigem = OReceita.id; OReceitaClone.descricao = OReceita.descricao; if (OReceita.idPessoa != OReceitaClone.idPessoa) { OReceitaClone.idPessoa = OReceita.idPessoa; OReceitaClone.tratarDadosPessoa(); } OReceitaClone.dtCompetencia = OReceita.dtCompetencia; OReceitaClone.mesCompetencia = Convert.ToByte(OReceita.dtCompetencia?.Month); OReceitaClone.anoCompetencia = Convert.ToInt16(OReceita.dtCompetencia?.Year); OReceitaClone.dtVencimento = OReceita.dtVencimento; OReceitaClone.dtVencimentoOriginal = OReceita.dtVencimento; OReceitaClone.dtQuitacao = null; ORetorno = this.salvarReceitas(OReceitaClone, qtdeReplicacoes); return(ORetorno); }
//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"); } }
// private void gerarPagamento(TituloReceita OTituloReceita) { var OPagamento = new TituloReceitaPagamento(); OPagamento.transferirDadosTitulo(OTituloReceita); OPagamento.idMeioPagamento = MeioPagamentoConst.TRANSFERENCIA_ELETRONICA; OPagamento.idFormaPagamento = FormaPagamentoConst.TRANSFERENCIA_BANCARIA; OPagamento.idStatusPagamento = StatusPagamentoConst.PAGO; OPagamento.dtPagamento = OTituloReceita.dtQuitacao; OPagamento.dtCredito = OTituloReceita.dtQuitacao; OPagamento.valorRecebido = OTituloReceita.valorTotal; OTituloReceitaPagamentoBL.salvar(OPagamento); }
//Registrar a liquidacao do titulo (pagamento total) public override TituloReceita liquidar(TituloReceita OTituloReceita) { var dbTitulo = OTituloReceitaBL.carregar(OTituloReceita.id); var listaPagamentos = dbTitulo.listaTituloReceitaPagamento.Where(x => x.dtExclusao == null).ToList(); bool flagTituloQuitado = listaPagamentos.All(x => x.dtPagamento != null); if (flagTituloQuitado) { dbTitulo.dtQuitacao = listaPagamentos.Max(x => x.dtPagamento); db.SaveChanges(); this.onMensalidadeQuitada.subscribe(new OnMensalidadeQuitadaHandler()); this.onMensalidadeQuitada.publish((dbTitulo.id as object)); } return(OTituloReceita); }
/// <summary> /// Registrar a liquidacao do titulo (pagamento total) /// Registrar a quitacao no pedido também alteração do status /// </summary> public override TituloReceita liquidar(TituloReceita OTituloReceita) { var OTituloLiquidado = base.liquidar(OTituloReceita); if (!OTituloLiquidado.dtQuitacao.HasValue) { return(OTituloLiquidado); } var OPagamento = PagamentoConsultaBL.query(1) .Where(x => x.idTituloReceita == OTituloLiquidado.id) .Select(x => new { x.id, x.idTituloReceita, x.idMeioPagamento }) .FirstOrDefault(); byte?idMeioPagamentoParam = null; if (OPagamento != null) { idMeioPagamentoParam = OPagamento.idMeioPagamento; } var Movimento = this.MediadorCompra.carregarDados(OTituloReceita.idPessoa.toInt(), 1, OTituloReceita.valorTotalComDesconto(), OTituloReceita.idReceita.toInt()); Movimento.flagPagamentoComBitkink = idMeioPagamentoParam == MeioPagamentoConst.BITLINK; Movimento.flagIgnorarSaldo = Movimento.flagPagamentoComBitkink == false; UtilRetorno ORetorno = this.CompraFacade.pagar(Movimento); if (ORetorno.flagError) { return(OTituloLiquidado); } this.atualizarPedido(OTituloLiquidado, idMeioPagamentoParam); return(OTituloLiquidado); }
//Liquidar um título de receita a partir do próprio título //A parcelas precisam já ter tido os seus pagamentos registrados public virtual TituloReceita liquidar(TituloReceita OTituloReceita) { var listaParcelas = this.db.TituloReceitaPagamento .Where(x => x.idTituloReceita == OTituloReceita.id && x.dtExclusao == null) .ToList(); decimal valorTotalRecebido = listaParcelas.Where(x => x.dtPagamento.HasValue).Sum(x => x.valorRecebido.toDecimal()); decimal valorDescontoAntecipacao = listaParcelas.Where(x => x.dtPagamento.HasValue).Sum(x => x.valorDescontoAntecipacao.toDecimal()); decimal valorDescontoCupom = listaParcelas.Where(x => x.dtPagamento.HasValue).Sum(x => x.valorDescontoCupom.toDecimal()); decimal valorTotalDescontoParcelas = decimal.Add(valorDescontoCupom, valorDescontoAntecipacao); //Diminuir os descontos registros diretamente no título decimal valorTotalTitulo = decimal.Subtract(OTituloReceita.valorTotal.toDecimal(), OTituloReceita.valorDesconto.toDecimal()); //Diminuir os descontos acrescentados no checkout ou por antecipacao de pagamento valorTotalTitulo = decimal.Subtract(valorTotalTitulo, valorTotalDescontoParcelas); if (valorTotalRecebido < valorTotalTitulo) { return(OTituloReceita); } OTituloReceita.dtQuitacao = listaParcelas.Max(x => x.dtPagamento); this.db.TituloReceita.Where(x => x.id == OTituloReceita.id) .Update(x => new TituloReceita { dtQuitacao = OTituloReceita.dtQuitacao, ativo = true } ); this.onTituloQuitado.publish((OTituloReceita.id as object)); return(OTituloReceita); }
/// <summary> /// Faz a alteração de qualquer campo informado /// </summary> private UtilRetorno alterarCampo(TituloReceita OItem, LogAlteracao OLog) { var ORetorno = UtilRetorno.newInstance(true); var listaCamposEditaveis = new[] { "observacao", "flagFixa", "valorTotal", "idContaBancaria", "idCentroCusto", "idMacroConta", "idCategoria", "idGatewayPermitido", "limiteParcelamento", "nroNotaFiscal", "nroContabil", "nroContrato", "nroDocumento", "dtLimitePagamento", "flagBoletoBancarioPermitido", "flagDepositoPermitido", "flagCartaoCreditoPermitido", "emailPrincipal", "descricao" }; if (!listaCamposEditaveis.Contains(OLog.nomeCampoAlterado)) { return(UtilRetorno.newInstance(true, "Campo informado não pode ser editado")); } OLog.valorAntigo = OItem.alterarValorCampo(OLog.nomeCampoAlterado, OLog.valorNovo); if (OLog.valorAntigo == null) { ORetorno.listaErros.Add("O valor informado é inválido"); return(ORetorno); } var successSave = db.SaveChanges(); if (successSave > 0) { OLog.valorNovo = OItem.getValorCampo(OLog.nomeCampoAlterado); OLog.oldValueSelect = OLog.valorAntigo.isEmpty() ? null : OLog.oldValueSelect; OLogAlteracaoBL.salvar(OLog); ORetorno.flagError = false; return(ORetorno); } ORetorno.listaErros.Add("Não foi possível salvar o registro no banco."); return(ORetorno); }
//Metodo para geracao do titulo de receita public override UtilRetorno gerar(object OrigemTitulo) { Pedido OPedido = (OrigemTitulo as Pedido); if (OPedido == null) { return(UtilRetorno.newInstance(true, "O registro Pedido está nulo.")); } //Verificar se o titulo já existe var OTituloReceita = this.OTituloReceitaBL.carregarPorReceita(OPedido.id); if (OTituloReceita != null) { return(UtilRetorno.newInstance(false, "O título já foi gerado anteriormente.", OTituloReceita)); } var OConfigEcommerce = OConfiguracaoEcommerceBL.carregar(User.idOrganizacao(), false); OTituloReceita = new TituloReceita(); OTituloReceita.idPessoa = OPedido.idPessoa; OTituloReceita.idTipoReceita = (byte)idTipoReceita; OTituloReceita.idReceita = OPedido.id; OTituloReceita.idOrganizacao = OPedido.idOrganizacao.toInt(); OTituloReceita.idUnidade = OPedido.idUnidade; OTituloReceita.limiteParcelamento = OConfigEcommerce.qtdeLimiteParcelas; OTituloReceita.qtdeRepeticao = 1; OTituloReceita.mesCompetencia = (byte?)OPedido.dtFaturamento?.Month; OTituloReceita.anoCompetencia = (short?)OPedido.dtFaturamento?.Year; if (OTituloReceita.mesCompetencia > 0 && OTituloReceita.anoCompetencia > 0) { byte?diaCompetencia = OPedido.dtFaturamento?.Day.toByte(); diaCompetencia = diaCompetencia.toByte() > 0 ? diaCompetencia.toByte() : (byte)1; OTituloReceita.dtCompetencia = new DateTime(OTituloReceita.anoCompetencia.toInt(), OTituloReceita.mesCompetencia.toInt(), diaCompetencia.toInt()); } OTituloReceita.idContaBancaria = OPedido.idContaBancaria; OTituloReceita.idCentroCusto = OPedido.idCentroCusto; OTituloReceita.idMacroConta = OPedido.idMacroConta; OTituloReceita.idCategoria = OPedido.idCategoriaTitulo; OTituloReceita.flagCartaoCreditoPermitido = OPedido.flagCartaoCreditoPermitido; OTituloReceita.flagBoletoBancarioPermitido = OPedido.flagBoletoBancarioPermitido; OTituloReceita.flagDepositoPermitido = OPedido.flagDepositoPermitido; OTituloReceita.descricao = $"Pedido {OPedido.id}"; OTituloReceita.valorTotal = OPedido.getValorTotal(); OTituloReceita.dtVencimentoOriginal = OPedido.dtVencimento; OTituloReceita.dtVencimento = OPedido.dtVencimento; this.preencherRecibo(ref OTituloReceita, OPedido.Pessoa); this.salvar(OTituloReceita); return(UtilRetorno.newInstance(false, "O título foi gerado com sucesso.", OTituloReceita)); }