private async void NotPaid_Clicked(object sender, EventArgs e) { var bill = (sender as MenuItem).CommandParameter as PaidBill; await _conn.DeleteAsync(bill); _paidBillsObs.Remove(bill); var tbills = _paidBillsObs.OrderBy(x => x.DataVencimento).ToList(); _paidBillsObs.Clear(); foreach (var item in tbills) { _paidBillsObs.Add(item); } Bill novaConta = new Bill { Id = -1, Titulo = bill.Titulo, Descricao = bill.Descricao, DataVencimento = bill.DataVencimento, Valor = bill.Valor, IsMensal = false }; await _conn.InsertAsync(novaConta); var temp1 = await _conn.Table <Bill>().OrderByDescending(x => x.Id).FirstAsync(); novaConta.Id = temp1.Id; if (novaConta.DataVencimento.Subtract(DateTime.Now).Days >= 0) { if (DateTime.Now.Subtract(novaConta.DataVencimento.AddHours(12)).Hours < 0) { CrossLocalNotifications.Current.Show($"A conta {novaConta.Titulo} vence hoje", $"Valor: R${String.Format("{0:F2}", novaConta.Valor)} - Clique aqui para abrir o App", novaConta.Id, novaConta.DataVencimento.AddHours(12)); } Dividas.InsertBill(novaConta); } else { CrossLocalNotifications.Current.Show("Você tem conta(s) atrasada(s)!", "Abra o App clicando aqui para ver mais detalhes", 999999999, DateTime.Today.AddDays(1).AddHours(12)); OverdueBills.InsertBill(novaConta); } CalculateSum(); }
private async void Paga_Clicked(object sender, EventArgs e) { double value = 0; var bill = (sender as MenuItem).CommandParameter as Bill; // Etapa 0: se a conta for recorrente, pegar novo valor. // Nessa etapa , o usuário pode cancelar a inserção // Abaixo trataremos sobre esse cenário if (bill.IsMensal) { string dados = await DisplayPromptAsync("Conta Recorrente", "Digite o novo valor da conta para o próximo mês:", "Ok", "Cancelar", "Ex: 120", -1, Keyboard.Numeric, bill.Valor.ToString()); if (String.IsNullOrWhiteSpace(dados)) { return; } try { value = Convert.ToDouble(dados); } catch (FormatException) { return; } catch (OverflowException) { return; } if (value == 0) { return; } } // Etapa 1: Remover notificação e remover do BD de dívidas e da view CrossLocalNotifications.Current.Cancel(bill.Id); _bills.Remove(bill); var tbills = _bills.OrderBy(x => x.DataVencimento).ToList(); _bills.Clear(); foreach (var item in tbills) { _bills.Add(item); } await _conn.DeleteAsync(bill); // Etapa 2: Criar o objeto divida paga e inserir na view das pagas PaidBill billPaid = new PaidBill { Id = -1, Titulo = bill.Titulo, DataVencimento = bill.DataVencimento, Descricao = bill.Descricao, Valor = bill.Valor }; await _conn.InsertAsync(billPaid); var temp1 = await _conn.Table <PaidBill>().OrderByDescending(x => x.Id).FirstAsync(); billPaid.Id = temp1.Id; PaidBillsView.InsertBill(billPaid); // Etapa 3 - se a dívida é mensal, criar nova para daqui a um mês. if (bill.IsMensal) { Bill novaDivida = new Bill { Titulo = bill.Titulo, Descricao = bill.Descricao, DataVencimento = bill.DataVencimento.AddMonths(1), IsMensal = true, Valor = value }; await _conn.InsertAsync(novaDivida); var temp2 = await _conn.Table <Bill>().OrderByDescending(x => x.Id).FirstAsync(); novaDivida.Id = temp2.Id; // Se a pessoa pagou essa dívida com mais de 1 mês de atraso, sua próxima boleta já está atrasada // A linha abaixo irá ver isso e direcionar pra view certa if (novaDivida.DataVencimento.Subtract(DateTime.Now).Days < 0) { OverdueBills.InsertBill(novaDivida); CrossLocalNotifications.Current.Show("Você tem conta(s) atrasada(s)!", "Abra o App clicando aqui para ver mais detalhes", 0, DateTime.Today.AddDays(1).AddHours(12)); } else { Dividas.InsertBill(novaDivida); if (DateTime.Now.Subtract(novaDivida.DataVencimento.AddHours(12)).Hours < 0) { CrossLocalNotifications.Current.Show($"A conta {novaDivida.Titulo} vence hoje", $"Valor: R${String.Format("{0:F2}", novaDivida.Valor)} - Clique aqui para abrir o App", novaDivida.Id, novaDivida.DataVencimento.AddHours(12)); } } await DisplayAlert("Conta recorrente!", $"A conta {novaDivida.Titulo} foi criada com vencimento em {novaDivida.DataMensal}", "Ok"); } CalculateSum(); }
private async void Salvar_Clicked(object sender, EventArgs e) { if (String.IsNullOrWhiteSpace(lbTitulo.Text) || String.IsNullOrWhiteSpace(lbValor.Text)) { await DisplayAlert("Preencha os dados", "É necessário preencher o título e o valor da conta para salvar", "Ok"); return; } if (dfData.Date.Subtract(DateTime.Now).Days < 0) { Bill bill = new Bill { Id = _id, Titulo = lbTitulo.Text, DataVencimento = dfData.Date, Descricao = taObservacao.Text, IsMensal = swIsMensal.On, Valor = Math.Round(double.Parse(lbValor.Text), 2) }; if (_id == -1) { await _conn.InsertAsync(bill); var temp1 = await _conn.Table <Bill>().OrderByDescending(x => x.Id).FirstAsync(); bill.Id = temp1.Id; OverdueBills.InsertBill(bill); CrossLocalNotifications.Current.Show("Você tem conta(s) atrasada(s)!", "Abra o App clicando aqui para ver mais detalhes", 0, DateTime.Today.AddDays(1).AddHours(12)); } else { // bill.Id = _id; if (_originalBill.DataVencimento.Subtract(DateTime.Now).Days < 0) { OverdueBills.UpdateBill(bill); } else { Dividas.DeleteBill(bill); OverdueBills.InsertBill(bill); CrossLocalNotifications.Current.Cancel(_id); } CrossLocalNotifications.Current.Show("Você tem conta(s) atrasada(s)!", "Abra o App clicando aqui para ver mais detalhes", 0, DateTime.Today.AddDays(1).AddHours(12)); await _conn.UpdateAsync(bill); } } else { Bill bill = new Bill { Id = _id, Titulo = lbTitulo.Text, DataVencimento = dfData.Date, Descricao = taObservacao.Text, IsMensal = swIsMensal.On, Valor = Math.Round(double.Parse(lbValor.Text), 2) }; if (_id == -1) { await _conn.InsertAsync(bill); var temp2 = await _conn.Table <Bill>().OrderByDescending(x => x.Id).FirstAsync(); bill.Id = temp2.Id; Dividas.InsertBill(bill); if (DateTime.Now.Subtract(bill.DataVencimento.AddHours(12)).Hours < 0) { CrossLocalNotifications.Current.Show($"A conta {bill.Titulo} vence hoje", $"Valor: R${String.Format("{0:F2}", bill.Valor)} - Clique aqui para abrir o App", bill.Id, bill.DataVencimento.AddHours(12)); } } else { // bill.Id = _id; if (_originalBill.DataVencimento.Subtract(DateTime.Now).Days >= 0) { Dividas.UpdateBill(bill); } else { OverdueBills.DeleteBill(bill); Dividas.InsertBill(bill); } if (DateTime.Now.Subtract(bill.DataVencimento.AddHours(12)).Hours < 0) { CrossLocalNotifications.Current.Show($"A conta {bill.Titulo} vence hoje", $"Valor: R${String.Format("{0:F2}", bill.Valor)} - Clique aqui para abrir o App", bill.Id, bill.DataVencimento.AddHours(12)); } await _conn.UpdateAsync(bill); } } await Navigation.PopAsync(); }