public async Task<IHttpActionResult> PostAccount(Account account) { string badRequestDescription = ""; if (account.Name == "" || account.Name == null) { badRequestDescription = "nameError"; return Ok(badRequestDescription); } if (account.Balance == 0) { badRequestDescription = "balanceError"; return Ok(badRequestDescription); } var user = db.Users.Find(User.Identity.GetUserId()); if (user.HouseholdId == null) { return Ok("To create accounts you must first create or join a household."); } account.HouseholdId = (int)user.HouseholdId; account.Household = db.Households.Find(user.HouseholdId); account.ReconciledBalance = account.Balance; db.Accounts.Add(account); await db.SaveChangesAsync(); Transaction trans = new Transaction() { Description = "Account Initialization", Amount = account.Balance, Reconciled = account.Balance, CategoryId = 6, Created = DateTimeOffset.Now, AccountId = account.Id, IsIncome = true, Settled = true }; db.Transactions.Add(trans); await db.SaveChangesAsync(); return Ok(account.Id); //"The " + account.Name + " account has been created for the " + account.Household.Name + " household. A transaction showing the initialization of this account has also been created." + }
public async Task<IHttpActionResult> PutTransaction(Transaction trans) { string badRequestDescription = ""; if (trans.Description == "" || trans.Description == null) { badRequestDescription = "descriptionError"; return Ok(badRequestDescription); } else if (trans.Amount == 0) { badRequestDescription = "amountError"; return Ok(badRequestDescription); } else if (trans.CategoryId == 0 || trans.CategoryId == null) { badRequestDescription = "categoryError"; return Ok(badRequestDescription); } //check the incoming model's validity if (!ModelState.IsValid) { return BadRequest(ModelState); } //look up the current user var user = db.Users.Find(User.Identity.GetUserId()); //check the current user's authenticity if (!User.Identity.IsAuthenticated) { return Unauthorized(); } if (trans.Category != null) { db.Entry(trans.Category).State = trans.Category.Id == 0 ? EntityState.Added : EntityState.Unchanged; } else { return BadRequest(); } //if the incoming transaction is an expense if (!trans.IsIncome) {//change the value to reflect an expense if (trans.Amount > 0) trans.Amount *= -1; if (trans.Reconciled > 0) trans.Reconciled *= -1; } else//if for some reason the user is editing and sets the amount of an income tranaction to be negative change the value to reflect an income { if (trans.Amount < 0) trans.Amount *= -1; if (trans.Reconciled < 0) trans.Reconciled *= -1; } if (Math.Abs(trans.Amount) == Math.Abs(trans.Reconciled)) { trans.Settled = true; } //look up the transaction in the database var existingTrans = db.Transactions.AsNoTracking().FirstOrDefault(t => t.Id == trans.Id); //use the var etaBalance = existingTrans.Account.Balance; var etaAmount = existingTrans.Amount; etaBalance -= etaAmount; etaBalance += trans.Amount; var etaRecBalance = existingTrans.Account.ReconciledBalance; var etaRec = existingTrans.Reconciled; etaRecBalance -= etaRec; etaRecBalance += trans.Reconciled; var account = db.Accounts.FirstOrDefault(a => a.Id == trans.AccountId); account.Balance = etaBalance; account.ReconciledBalance = etaRecBalance; db.Entry(trans).State = EntityState.Modified; if (trans.Category.Id != 0) { trans.CategoryId = trans.Category.Id; } trans.Updated = DateTimeOffset.Now; try { await db.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!TransactionExists(trans.Id)) { return NotFound(); } else { throw; } } return Ok(trans); }
public async Task<IHttpActionResult> PutAccount(Account account) { string badRequestDescription = ""; if (account.Name == "" || account.Name == null) { badRequestDescription = "nameError"; return Ok(badRequestDescription); } if (account.Balance == 0) { badRequestDescription = "balanceError"; return Ok(badRequestDescription); } var user = db.Users.Find(User.Identity.GetUserId()); //var existingAccount = db.Accounts.FirstOrDefault(a => a.Id == account.Id); var existingAccount = user.Household.Accounts.FirstOrDefault(a => a.Id == account.Id); if (account == null) { return Ok("You do not have permission to edit this account"); } if (account.Balance != existingAccount.Balance) { decimal adjustmentAmount = account.Balance - existingAccount.Balance; Transaction trans = new Transaction() { Description = "Manual Account Balance Adjustment", Amount = adjustmentAmount, Reconciled = adjustmentAmount, Created = DateTimeOffset.Now, AccountId = account.Id, CategoryId = 5, Settled = true }; existingAccount.Balance = account.Balance; existingAccount.ReconciledBalance = account.Balance; db.Transactions.Add(trans); } if (account.Name != existingAccount.Name) { existingAccount.Name = account.Name; } /* if (account != null) { db.Entry(account).State = EntityState.Modified; } */ await db.SaveChangesAsync(); return Ok(account); }
public async Task<IHttpActionResult> PostTransaction(Transaction trans) { string badRequestDescription = ""; if (trans.Description == "" || trans.Description == null) { badRequestDescription = "descriptionError"; return Ok(badRequestDescription); } else if (trans.Amount == 0) { badRequestDescription = "amountError"; return Ok(badRequestDescription); } else if (trans.CategoryId == 0 || trans.CategoryId == null) { badRequestDescription = "categoryError"; return Ok(badRequestDescription); } if (!ModelState.IsValid) { return BadRequest(ModelState); } if (trans.Category != null) { db.Entry(trans.Category).State = trans.Category.Id == 0 ? EntityState.Added : EntityState.Unchanged; } if (!trans.IsIncome) { if (trans.Amount > 0) trans.Amount *= -1; if (trans.Reconciled > 0) trans.Reconciled *= -1; } else { if (trans.Amount < 0) trans.Amount *= -1; if (trans.Reconciled < 0) trans.Reconciled *= -1; } trans.Created = DateTimeOffset.Now; var account = db.Accounts.FirstOrDefault(a => a.Id == trans.AccountId); account.Balance = account.Balance + trans.Amount; if (Math.Abs(trans.Amount) == Math.Abs(trans.Reconciled)) { trans.Settled = true; } account.ReconciledBalance += trans.Reconciled; if (trans.Category.Id != 0) { trans.CategoryId = trans.Category.Id; } db.Transactions.Add(trans); await db.SaveChangesAsync(); return Ok(trans); }