示例#1
0
        public ActionResult AddRecurringPayment(int id, TransactionViewModel model)
        {
            if (ModelState.IsValid)
            {
                var recurringTransaction = new RecurringTransaction
                {
                    Name      = model.Name,
                    StartDate = (DateTime)model.StartDate,
                    EndDate   = model.EndDate,
                    PeriodId  = (int)model.PeriodId,
                };
                db.RecurringTransactions.Add(recurringTransaction);

                var transaction = new Transaction
                {
                    Name      = model.Name,
                    Amount    = model.Amount,
                    Date      = (DateTime)model.StartDate,
                    TrackerId = id,
                    PersonId  = currentPersonId,
                    RecurringTransactionId = recurringTransaction.Id
                };
                db.Transactions.Add(transaction);

                if (model.TagIds != null)
                {
                    foreach (int t in model.TagIds)
                    {
                        var tag = new Transaction_Tag
                        {
                            TransactionId = transaction.Id,
                            TagId         = t,
                        };
                        db.TransactionTags.Add(tag);
                    }
                }

                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            else
            {
                model.TagCollection    = from t in db.Tags where t.PersonId == currentPersonId select t;
                model.PeriodCollection = db.Periods.ToList <Period>();
                model.Tracker          = (from t in db.Trackers where t.Id == id select t).First();
                return(PartialView(model));
            }
        }
示例#2
0
        public ActionResult OneTimePayment(int id, TransactionViewModel model)
        {
            if (ModelState.IsValid)
            {
                var transaction = new Transaction
                {
                    Name      = model.Name,
                    Amount    = model.Amount,
                    Date      = model.Date,
                    TrackerId = id,
                    PersonId  = currentPersonId
                };
                db.Transactions.Add(transaction);

                if (model.TagIds != null)
                {
                    foreach (int t in model.TagIds)
                    {
                        var tag = new Transaction_Tag
                        {
                            TransactionId = transaction.Id,
                            TagId         = t,
                        };
                        db.TransactionTags.Add(tag);
                    }
                }

                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            else
            {
                model.TagCollection = from t in db.Tags where t.PersonId == currentPersonId select t;
                model.Tracker       = (from t in db.Trackers where t.Id == id select t).First();
                return(PartialView(model));
            }
        }
示例#3
0
        public ActionResult AddTransaction(TransactionViewModel model)
        {
            Period selectedPeriod = null; //set selected period to null to avoid null reference error when checking period id

            if (model.PeriodId > 0)
            {
                selectedPeriod = (from p in db.Periods where p.Id == model.PeriodId select p).First();
            }

            if (model.Direction == "Out") //append negative symbol to Amount if money is going out
            {
                model.Amount = -model.Amount;
            }

            if (ModelState.IsValid)
            {
                if (selectedPeriod == null)
                {
                    var transaction = new Transaction
                    {
                        Name      = model.Name,
                        Amount    = model.Amount,
                        Date      = model.Date,
                        Company   = model.Company,
                        TrackerId = model.TrackerId,
                        PersonId  = currentPersonId,
                    };
                    db.Transactions.Add(transaction);

                    if (model.TagIds != null)
                    {
                        foreach (int t in model.TagIds)
                        {
                            var tag = new Transaction_Tag
                            {
                                TransactionId = transaction.Id,
                                TagId         = t,
                            };
                            db.TransactionTags.Add(tag);
                        }
                    }
                }
                else //add RecurringTransactionId + RecurringTransaction record if needed
                {
                    var recurringTransaction = new RecurringTransaction
                    {
                        Name      = model.Name,
                        StartDate = (DateTime)model.StartDate,
                        EndDate   = model.EndDate,
                        PeriodId  = (int)model.PeriodId,
                    };
                    db.RecurringTransactions.Add(recurringTransaction);

                    var transaction = new Transaction
                    {
                        Name      = model.Name,
                        Amount    = model.Amount,
                        Date      = (DateTime)model.StartDate,
                        Company   = model.Company,
                        TrackerId = model.TrackerId,
                        PersonId  = currentPersonId,
                        RecurringTransactionId = recurringTransaction.Id
                    };
                    db.Transactions.Add(transaction);

                    if (model.TagIds != null)
                    {
                        foreach (int t in model.TagIds)
                        {
                            var tag = new Transaction_Tag
                            {
                                TransactionId = transaction.Id,
                                TagId         = t,
                            };
                            db.TransactionTags.Add(tag);
                        }
                    }
                }
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            else
            {
                model.TagCollection    = from t in db.Tags where t.PersonId == currentPersonId select t;
                model.PeriodCollection = db.Periods.ToList <Period>();
                List <Tracker> TrackerCollectionList           = (from t in db.Trackers where t.PersonId == currentPersonId select t).ToList();
                var            recurringTransactionwithTracker = (from t in db.Transactions
                                                                  where t.RecurringTransaction != null &&
                                                                  (t.RecurringTransaction.EndDate == null ||
                                                                   t.RecurringTransaction.EndDate > DateTime.Now)
                                                                  select t).ToList();

                foreach (var t in recurringTransactionwithTracker)
                {
                    if (TrackerCollectionList.Contains(t.Tracker))
                    {
                        TrackerCollectionList.Remove(t.Tracker);
                    }
                }
                model.TrackerCollection = TrackerCollectionList;
                return(PartialView(model));
            }
        }
示例#4
0
        public ActionResult EditTransaction(int id, TransactionViewModel model)
        {
            var transaction = (from t in db.Transactions where t.Id == id select t).First();

            transaction.Date = model.Date;
            if (transaction.RecurringTransactionId != null)
            {
                var recurringTransaction = (from t in db.RecurringTransactions where t.Id == transaction.RecurringTransactionId select t).First();
                var firstTransaction     = (from x in recurringTransaction.Transactions orderby x.Date select x).First();

                //set the Start Date as the Date for a recurring transaction without any other transactions
                if (transaction.RecurringTransaction.PeriodId > 0 && ((transaction.RecurringTransaction.Transactions.Count == 1) ||
                                                                      ((transaction.RecurringTransaction.Transactions.Count > 1) && (transaction == firstTransaction))))
                {
                    if (model.StartDate != null)
                    {
                        transaction.Date = (DateTime)model.StartDate;
                    }
                }
                else
                {
                    transaction.Date = model.Date;
                }

                recurringTransaction.Name = model.Name;
                if (model.StartDate != null)
                {
                    recurringTransaction.StartDate = (DateTime)model.StartDate;
                }
                if (model.EndDate != null)
                {
                    recurringTransaction.EndDate = (DateTime)model.EndDate;
                }

                /*If a RecurringTransaction is edited and it has more than 1 transaction, modify the names of all its
                 * Transactions to follow the latest RecurringTransaction.Name and append a number (ie. "Name" #2)*/
                if (recurringTransaction.Transactions.Count > 1)
                {
                    var transactionList   = from t in db.Transactions where t.RecurringTransactionId == recurringTransaction.Id orderby id select t;
                    int numberTransaction = 0;

                    foreach (Transaction rt in transactionList)
                    {
                        numberTransaction += 1;
                        rt.Name            = model.Name + " [" + numberTransaction.ToString() + "]";
                    }
                }
            }

            if (model.Direction == "Out") //append negative symbol to Amount if money is going out
            {
                model.Amount = -(model.Amount);
            }
            transaction.Name      = model.Name;
            transaction.Amount    = model.Amount;
            transaction.Company   = model.Company;
            transaction.TrackerId = model.TrackerId;

            //check for existing Transaction_Tags for this transaction to ensure no duplicates are being added
            List <int> thistransExistingTagIds = (from t in db.Transactions
                                                  join existingTransTag in db.TransactionTags on t.Id equals existingTransTag.TransactionId
                                                  join tag in db.Tags on existingTransTag.TagId equals tag.Id
                                                  where t.Id == transaction.Id
                                                  select tag.Id).ToList();

            if (model.TagIds != null)
            {
                foreach (int t in model.TagIds)
                {
                    if (!thistransExistingTagIds.Contains(t))
                    {
                        var tag = new Transaction_Tag
                        {
                            TransactionId = transaction.Id,
                            TagId         = t,
                        };
                        db.TransactionTags.Add(tag);
                    }
                }

                //remove tags from transaction if they have been untagged
                foreach (int tagIdToRemove in thistransExistingTagIds)
                {
                    if (!model.TagIds.Contains(tagIdToRemove))
                    {
                        var tagToRemove = (from t in db.TransactionTags where t.TagId == tagIdToRemove && t.TransactionId == model.Id select t).First();
                        db.TransactionTags.Remove(tagToRemove);
                    }
                }
            }

            //remove all existing tags if none are selected
            else if (model.TagIds == null && thistransExistingTagIds != null)
            {
                foreach (int tagIdToRemove in thistransExistingTagIds)
                {
                    var tagToRemove = (from t in db.TransactionTags where t.TagId == tagIdToRemove && t.TransactionId == model.Id select t).First();
                    db.TransactionTags.Remove(tagToRemove);
                }
            }


            if (ModelState.IsValid)
            {
                db.SaveChanges();
                TempData["Success"] = "Changes Saved!";
                return(RedirectToAction("Index"));
            }
            else
            {
                model.TagCollection    = (from t in db.Tags where t.PersonId == currentPersonId select t).ToList();
                model.PeriodCollection = db.Periods.ToList <Period>();
                List <Tracker> TrackerCollectionList           = (from t in db.Trackers where t.PersonId == currentPersonId select t).ToList();
                var            recurringTransactionwithTracker = (from t in db.Transactions
                                                                  where t.RecurringTransaction != null &&
                                                                  t.TrackerId != transaction.TrackerId &&
                                                                  (t.RecurringTransaction.EndDate == null ||
                                                                   t.RecurringTransaction.EndDate > DateTime.Now)
                                                                  select t).ToList();
                foreach (var t in recurringTransactionwithTracker)
                {
                    if (TrackerCollectionList.Contains(t.Tracker))
                    {
                        TrackerCollectionList.Remove(t.Tracker);
                    }
                }
                model.TrackerCollection = TrackerCollectionList;

                ViewBag.Date = model.Date.ToString("yyyy-MM-dd");
                if (model.StartDate != null)
                {
                    ViewBag.StartDate = ((DateTime)(model.StartDate)).ToString("yyyy-MM-dd");
                }
                if (model.EndDate != null)
                {
                    ViewBag.EndDate = ((DateTime)(model.EndDate)).ToString("yyyy-MM-dd");
                }
                return(PartialView(model));
            }
        }