@page "/recorrencias" Recorrências - FinControl

Transações Recorrentes

Recorrências Ativas

@recorrencias.Count(r => r.Ativa)

Valor Total/Mês

R$ @recorrencias.Where(r => r.Ativa).Sum(r => r.Valor).ToString("F2")

Próxima Execução

@(recorrencias.OrderBy(r => r.ProximaExecucao).FirstOrDefault()?.ProximaExecucao.ToString("dd/MM") ?? "N/A")

@if (RecorrenciasExibidas.Any()) {
@foreach (var rec in RecorrenciasExibidas) { var proximaExecucaoPassou = rec.ProximaExecucao <= DateTime.Now; }
Descrição Frequência Valor Conta Próxima Execução Execuções Restantes Ações
@rec.Descricao
@rec.Frequencia @(rec.Tipo == "Receita" ? "+" : "-") R$ @rec.Valor.ToString("F2") @rec.Conta @rec.ProximaExecucao.ToString("dd/MM/yyyy") @if (proximaExecucaoPassou) { } @if (rec.ExecutacoesRestantes > 0) { @rec.ExecutacoesRestantes } else { Infinito }
} else {
Nenhuma recorrência @(abaAtiva == "ativas" ? "ativa" : "inativa")

@(abaAtiva == "ativas" ? "Crie sua primeira recorrência para automatizar transações" : "Suas recorrências inativas aparecem aqui")

}
@if (mostrarModal) { } @code { private List recorrencias = new(); private Recorrencia editandoRec = new(); private bool mostrarModal = false; private string abaAtiva = "ativas"; private string dataProximaExecucao = DateTime.Now.ToString("yyyy-MM-dd"); private List RecorrenciasExibidas => abaAtiva == "ativas" ? recorrencias.Where(r => r.Ativa).ToList() : recorrencias.Where(r => !r.Ativa).ToList(); protected override void OnInitialized() { CarregarRecorrencias(); } private void CarregarRecorrencias() { recorrencias = new List { new Recorrencia { Id = 1, Descricao = "Aluguel", Tipo = "Despesa", Frequencia = "Mensal", Valor = 1500, Conta = "Conta Corrente", ProximaExecucao = DateTime.Now.AddDays(5), ExecutacoesRestantes = 0, Ativa = true }, new Recorrencia { Id = 2, Descricao = "Salário", Tipo = "Receita", Frequencia = "Mensal", Valor = 4500, Conta = "Conta Corrente", ProximaExecucao = DateTime.Now.AddDays(15), ExecutacoesRestantes = 0, Ativa = true }, new Recorrencia { Id = 3, Descricao = "Academia", Tipo = "Despesa", Frequencia = "Mensal", Valor = 150, Conta = "Cartão", ProximaExecucao = DateTime.Now.AddDays(10), ExecutacoesRestantes = 12, Ativa = true }, new Recorrencia { Id = 4, Descricao = "Seguro do Carro", Tipo = "Despesa", Frequencia = "Trimestral", Valor = 450, Conta = "Conta Corrente", ProximaExecucao = DateTime.Now.AddDays(45), ExecutacoesRestantes = 0, Ativa = false } }; } private void MudarAba(string aba) { abaAtiva = aba; } private void AbrirModalNovaRecorrencia() { editandoRec = new(); dataProximaExecucao = DateTime.Now.ToString("yyyy-MM-dd"); mostrarModal = true; } private void EditarRecorrencia(Recorrencia rec) { editandoRec = new Recorrencia { Id = rec.Id, Descricao = rec.Descricao, Tipo = rec.Tipo, Frequencia = rec.Frequencia, Valor = rec.Valor, Conta = rec.Conta, ProximaExecucao = rec.ProximaExecucao, ExecutacoesRestantes = rec.ExecutacoesRestantes, Ativa = rec.Ativa }; dataProximaExecucao = rec.ProximaExecucao.ToString("yyyy-MM-dd"); mostrarModal = true; } private void FecharModal() { mostrarModal = false; } private async Task SalvarRecorrencia() { editandoRec.ProximaExecucao = DateTime.ParseExact(dataProximaExecucao, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture); var existe = recorrencias.FirstOrDefault(r => r.Id == editandoRec.Id); if (existe != null) { var index = recorrencias.IndexOf(existe); recorrencias[index] = editandoRec; } else { editandoRec.Id = recorrencias.Any() ? recorrencias.Max(r => r.Id) + 1 : 1; recorrencias.Add(editandoRec); } FecharModal(); await Task.CompletedTask; } private void DeletarRecorrencia(int id) { recorrencias.RemoveAll(r => r.Id == id); } private void ExecutarAgora(Recorrencia rec) { rec.ProximaExecucao = rec.ProximaExecucao.AddMonths(1); if (rec.ExecutacoesRestantes > 0) rec.ExecutacoesRestantes--; } public class Recorrencia { public int Id { get; set; } public string? Descricao { get; set; } public string? Tipo { get; set; } public string? Frequencia { get; set; } public decimal Valor { get; set; } public string? Conta { get; set; } public DateTime ProximaExecucao { get; set; } public int ExecutacoesRestantes { get; set; } public bool Ativa { get; set; } } }