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();
        }
Пример #3
0
        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();
        }