private void ReceivePayment(EntryExpenses entry)
        {
            Account acc = Context.Accounts.FirstOrDefault(a => a.Id == entry.PaymentMethod.Id);

            acc.Balance += entry.Value;
            Context.SaveChanges();
        }
        internal void PayCreditCard(int idAcc, int idCredit, double valueToPay, double valueParcel, DateTime DatePaid, DateTime dateToPay)
        {
            CreditCard    card  = Context.CreditCards.Find(idCredit);
            EntryExpenses entry = new EntryExpenses
            {
                Description   = $"{GenerateCaptionHolder(card.Holder)} fatura - {card.Issuer}",
                Value         = valueToPay,
                EntryType     = EntryType.ExpenseCreditCard,
                Date          = DatePaid,
                Category      = Context.Categories.Find(6),
                SubCategory   = Context.SubCategories.Find(14),
                PaymentMethod = Context.PaymentMethod.Find(idAcc),
                Status        = true
            };

            PerformTransaction(entry);
            Save(entry);

            if (valueParcel > 0)
            {
                entry = new EntryExpenses
                {
                    Description   = $"{GenerateCaptionHolder(card.Holder)} fatura parcial - {card.Issuer}",
                    Value         = valueParcel,
                    EntryType     = EntryType.ExpenseCreditCard,
                    Date          = dateToPay.AddMonths(1),
                    Category      = Context.Categories.Find(6),
                    SubCategory   = Context.SubCategories.Find(14),
                    PaymentMethod = card
                };
                Save(entry);
            }
        }
        private void RulesForFeactures(Report report, EntryExpenses entry)
        {
            if (entry.EntryType == EntryType.Expense || entry.EntryType == EntryType.ExpenseCreditCard)
            {
                report.EntryExpenses.Add(entry);
                report.TotalExpenses += entry.Status ? entry.Value : 0.00;
            }

            if (entry.EntryType == EntryType.Revenue)
            {
                report.TotalRevenue = entry.Value + report.TotalRevenue;
                report.EntryRevenue.Add(entry);
            }

            if (entry.EntryType == EntryType.Transfer)
            {
                report.EntryTransfer.Add(entry);
            }

            if (entry.EntryType == EntryType.AjustBalance)
            {
                report.EntryAjustBalance.Add(entry);
            }

            if (!report.Categories.Any(x => x.Id == entry.Category.Id) && !string.IsNullOrEmpty(entry.Category.Description))
            {
                report.Categories.Add(entry.Category);
            }

            if (!report.SubCategories.Any(x => entry.SubCategory.Id == x.Id) && !string.IsNullOrEmpty(entry.SubCategory.Description))
            {
                report.SubCategories.Add(entry.SubCategory);
            }
        }
 private void SetEntryExpenses()
 {
     if (Model == null)
     {
         Model = new EntryExpenses(
             txtDescription.Text,
             Convert.ToDouble(nupValue.Value),
             dtDate.Value,
             cbPaymentMethod.SelectedValue is Account ? true : false,
             ckRepeat.Checked,
             cbCategoria.SelectedValue as Category,
             cbSubCategoria.SelectedValue as SubCategories,
             paymentMethodController.Find(((PaymentMethod)cbPaymentMethod.SelectedValue).Id),
             DateTime.Today,
             this.entryType);
     }
     else
     {
         Model.Value                = Convert.ToDouble(this.nupValue.Value);
         Model.PaymentMethod        = cbPaymentMethod.SelectedValue as PaymentMethod;
         Model.Category.Description = cbCategoria.Text;
         Model.Category.SubCategories.Add(cbSubCategoria.SelectedValue as SubCategories);
         Model.Status      = cbPaymentMethod.SelectedValue is Account ? true : false;
         Model.Repeat      = ckRepeat.Checked;
         Model.Date        = dtDate.Value;
         Model.Description = txtDescription.Text;
         Model.EntryType   = this.entryType;
     }
 }
        public void Save(EntryExpenses entry)
        {
            EntryExpenses ent = entry.Id != 0 ? Context.Expenses.FirstOrDefault(e => e.Id == entry.Id) : null;

            if (ent == null)
            {
                Context.Expenses.Add(entry);
            }
            Context.SaveChanges();
        }
示例#6
0
        private void btnEdit_Click(object sender, EventArgs e)
        {
            EntryExpenses    editEntry = (EntryExpenses)dtvRevenue.SelectedRows[0].DataBoundItem;
            FrmEntryExpenses form      = new FrmEntryExpenses(editEntry, ctr.Context);

            if (form.ShowDialog() == DialogResult.OK)
            {
                dtvRevenue.Rows.Clear();
                dtvRevenue.DataSource = LoadEntriesTypes();
            }
        }
 internal void SplitAccount(int value, EntryExpenses model)
 {
     PerformTransaction(model);
     for (int i = 1; i < value; i++)
     {
         model.Date          = model.Date.AddMonths(1);
         model.CaptionRepeat = $"({i+1}/{value})";
         PerformTransaction(model);
         Save(model.Clone());
     }
 }
示例#8
0
        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (dtvRevenue.CurrentRow != null)
            {
                if (MessageBox.Show("Tem certeza que deseja apagar este item ?", "", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    EntryExpenses deleteEntry = (EntryExpenses)dtvRevenue.SelectedRows[0].DataBoundItem;
                    if (deleteEntry.PaymentMethod is Account || (deleteEntry.PaymentMethod is CreditCard && deleteEntry.Status == false))
                    {
                        deleteEntry.Value *= (-1);
                        ctr.PerformTransaction(deleteEntry);
                    }

                    ctr.Remove(deleteEntry);
                    dtvRevenue.DataSource = LoadEntriesTypes();
                }
            }
        }
 internal bool PerformTransaction(EntryExpenses entry)
 {
     if (entry.EntryType == EntryType.Revenue)
     {
         if (entry.PaymentMethod is Account)
         {
             ReceivePayment(entry);
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else if (entry.EntryType == EntryType.Expense || entry.EntryType == EntryType.ExpenseCreditCard)
     {
         return(MakePayment(entry) ? true : false);
     }
     return(false);
 }
        internal bool AdjustBalance(double value, int id)
        {
            Account       account = Context.Accounts.First(acc => acc.Id == id);
            EntryExpenses entry   = new EntryExpenses()
            {
                Description   = "Ajuste de Saldo",
                Value         = value > account.Balance ? value - account.Balance : account.Balance - value,
                Date          = DateTime.Now,
                EntryType     = value > account.Balance ? EntryType.Revenue : EntryType.Expense,
                Category      = Context.Categories.Find(9),
                PaymentMethod = account,
                Status        = true
            };

            if (-1 * account.Limit < value)
            {
                account.Balance = value;
                this.Save(entry);
                return(true);
            }
            return(false);
        }
        private bool MakePayment(EntryExpenses entry)
        {
            Account    acc;
            CreditCard card;

            if (entry.PaymentMethod is Account)
            {
                acc = Context.Accounts.First(a => a.Id == entry.PaymentMethod.Id);
                if ((acc.Balance - entry.Value) > (-1) * (acc.Limit))
                {
                    acc.Balance += -entry.Value;
                    Context.SaveChanges();
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                card = entry.PaymentMethod as CreditCard;
                //Se data de fechamento menor que data de pagamento da conta data de pagamento vai para o mês que vem.
                int day   = Convert.ToInt32(card.DueDate);
                int month = Convert.ToInt32(card.ClosingDate) < entry.Date.Day ? entry.Date.AddMonths(1).Month : entry.Date.Month;
                int year  = Convert.ToInt32(card.ClosingDate) < entry.Date.Day ? entry.Date.AddMonths(2).Year : entry.Date.AddMonths(1).Year;
                entry.PaymentDate = DateTime.Parse($"{day}-{month}-{year}");
                if (card.Amount > (-1) * card.Limit)
                {
                    card.Amount += -entry.Value;
                    Context.SaveChanges();
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
        internal bool PerformTransfer(double value, int bankOrigin, int BankDestination, DateTime date)
        {
            Account inAcc  = Context.Accounts.FirstOrDefault(c => c.Id == BankDestination);
            Account outAcc = Context.Accounts.FirstOrDefault(c => c.Id == bankOrigin);

            if (outAcc.Limit * -1 > (outAcc.Balance - value))
            {
                return(false);
            }
            outAcc.Balance += -value;
            inAcc.Balance  += value;

            EntryExpenses inEntry = new EntryExpenses()
            {
                Description   = $"Recebido de {GenerateCaptionHolder(outAcc.Holder)} - {outAcc.Bank}",
                Value         = value,
                Date          = date,
                PaymentMethod = inAcc,
                Category      = Context.Categories.Find(10),
                EntryType     = EntryType.Transfer,
                Status        = true
            };

            EntryExpenses outEntry = new EntryExpenses()
            {
                Description   = $"Enviado para {GenerateCaptionHolder(inAcc.Holder)} - {inAcc.Bank}",
                Value         = value,
                Date          = date,
                Category      = Context.Categories.Find(10),
                PaymentMethod = outAcc,
                EntryType     = EntryType.Transfer,
                Status        = true
            };

            Save(inEntry);
            Save(outEntry);
            return(true);
        }
示例#13
0
        private void btnSave_Click(object sender, EventArgs e)
        {
            var valueToPay  = nupValue.Visible ? Convert.ToDouble(nupValue.Value) : Convert.ToDouble(lbAmount.Text);
            var valueParcel = Convert.ToDouble(lbInstallment.Text.Replace("R$ ", ""));
            int day         = Convert.ToInt32(report.CreditCards[0].DueDate);
            int month       = Convert.ToInt32(report.CreditCards[0].ClosingDate) < dtpBaseTime.Value.Day ? dtpBaseTime.Value.AddMonths(1).Month : dtpBaseTime.Value.Month;
            int year        = Convert.ToInt32(report.CreditCards[0].ClosingDate) < dtpBaseTime.Value.Day ? dtpBaseTime.Value.AddMonths(1).Year : dtpBaseTime.Value.AddMonths(1).Year;
            var date        = DateTime.Parse($"{day}-{month}-{year}");

            ctrEntry.PayCreditCard(Convert.ToInt32(cbBankSender.SelectedValue), report.CreditCards[0].Id, valueToPay, valueParcel, dtpBaseTime.Value, date);

            foreach (var entry in report.EntryExpenses.Where(entry => entry.Status == false).ToList())
            {
                entry.Status = true;
                ctrEntry.Save(entry);
                EntryExpenses oldExpense = entry.Clone();
                oldExpense.Value *= (-1);
                ctrEntry.PerformTransaction(oldExpense);
            }

            MessageBox.Show("Pagamento realizado com sucesso!", "Informativo", MessageBoxButtons.OK);
            this.Close();
        }
        public FrmEntryExpenses(EntryExpenses entry, ApplicationDbContext context) : this(entry.EntryType, context)
        {
            nupValue.Value      = Convert.ToDecimal(entry.Value);
            this.entryType      = entry.EntryType;
            dtDate.Value        = entry.Date;
            txtDescription.Text = entry.Description;
            LoadCategories();
            LoadPaymanetMethod();
            cbCategoria.SelectedIndex = cbCategoria.FindString(entry.Category.Description);

            if (entry.PaymentMethod is Account)
            {
                cbPaymentMethod.SelectedIndex = cbPaymentMethod.FindString($"{controller.GenerateCaptionHolder(entry.PaymentMethod.Holder)} conta: {((Account)entry.PaymentMethod).Bank}");
            }
            else
            {
                cbPaymentMethod.SelectedIndex = cbPaymentMethod.FindString($"{controller.GenerateCaptionHolder(entry.PaymentMethod.Holder)} cartão: {((CreditCard)entry.PaymentMethod).Issuer}");
            }

            if (entry.Category.SubCategories.Count != 0)
            {
                cbSubCategoria.SelectedIndex = cbSubCategoria.FindString(entry.Category.SubCategories[0].Description);
            }

            this.isEditMode = true;
            btnSave.Enabled = true;
            this.Model      = entry.Clone();
            this.OldModel   = entry;

            nupValue.Focus();
            cbCategoria.Enabled     = false;
            cbSubCategoria.Enabled  = false;
            cbPaymentMethod.Enabled = false;
            ckRepeat.Enabled        = false;
            nupTimes.Enabled        = false;
        }
 public void Remove(EntryExpenses entry)
 {
     Context.Expenses.Remove(entry);
     Context.SaveChanges();
 }