protected void ExpenseItemView_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "MarkAsPaid") { User cUser = CurrentUser.Instance.User; using (var db = new GetEvenContext()) { int expenseItemID = Convert.ToInt32(e.CommandArgument.ToString()); if (_currentView == "what_i_owe") db.ExpenseItems.Find(expenseItemID).PaymentSubmitted = true; var expenses = db.Expenses.Where(x => x.User.GroupID == cUser.GroupID).ToList(); foreach (var expense in expenses) { var expenseItems = expense.ExpenseItems.ToList(); if (!expenseItems.Select(i => i.PaymentSubmitted).Contains(false)) db.Expenses.Find(expense.ExpenseID).IsPaid = true; } db.SaveChanges(); } LoadData(_currentView); } }
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { using (var db = new GetEvenContext()) { var group = db.Groups.Where(g => g.GroupID == CurrentUser.Instance.User.GroupID).FirstOrDefault(); } CurrentUsernameLabel.Text = CurrentUser.Instance.User.Username; } }
public static User ValidateUser(string username, string password) { username = username.ToLower(); using (var context = new GetEvenContext()) { User user = context.Users .Where(u => u.Username.ToLower() == username && u.Password == password) .FirstOrDefault(); return user; } }
protected int GetExpenseIDFromQueryString() { int id = Convert.ToInt32(Request.QueryString["id"]); using (var db = new GetEvenContext()) { User cUser = CurrentUser.Instance.User; Expense expense = db.Expenses.Find(id); if (expense.User.GroupID != cUser.GroupID) { // Expense does not belong to current user's Group or does not exist CurrentUser.Instance.ResetCurrentUser(); return -1; } return expense.ExpenseID; } }
protected void CreateExpenseButton_Click(object sender, EventArgs e) { using (var db = new GetEvenContext()) { User cUser = CurrentUser.Instance.User; var newExpense = new Expense() { Receiver = ReceiverInput.Text, Amount = Convert.ToDecimal(AmountInput.Text), DueDate = Convert.ToDateTime(DueDateInput.Text), Description = DescriptionInput.Text, IsPaid = false, UserID = cUser.UserID }; db.Expenses.Add(newExpense); var users = db.Groups.Find(cUser.GroupID).Users; foreach (var user in users) { var newExpenseItem = new ExpenseItem() { ExpenseID = newExpense.ExpenseID, UserID = user.UserID, Balance = Convert.ToDecimal(newExpense.Amount / users.Count()), PaymentSubmitted = (newExpense.Receiver.ToLower() == user.Username.ToLower() ? true : false) }; db.ExpenseItems.Add(newExpenseItem); } db.SaveChanges(); LoadData(); } ExpenseViewDiv.Visible = true; NewExpenseDiv.Visible = false; ExpenseControlDiv.Visible = true; TotalsDiv.Visible = true; }
protected void CreateGroupButton_Click(object sender, EventArgs e) { using (var db = new GetEvenContext()) { var newGroup = new Group() { Name = NewGroupNameInput.Text.Trim(), AccessCode = NewAccessCodeInput.Text, AdminUsername = NewUsernameInput.Text.Trim() }; db.Groups.Add(newGroup); db.SaveChanges(); var newUser = UserController.CreateUser(NewUsernameInput.Text.Trim(), NewPasswordInput.Text, NewEmailInput.Text, NewAccessCodeInput.Text); CurrentUser.Instance.User = UserController.ValidateUser(NewUsernameInput.Text.Trim(), NewPasswordInput.Text); } Response.Redirect("~/Expenses.aspx"); }
public static User CreateUser(string username, string password, string email, string accessCode) { using (var db = new GetEvenContext()) { var group = db.Groups.Where(g => g.AccessCode == accessCode).FirstOrDefault(); var user = new User() { Username = username, Password = password, Email = email, GroupID = group.GroupID, JoinDate = DateTime.Now, LastActivityDate = DateTime.Now }; db.Users.Add(user); db.SaveChanges(); return user; } }
protected void LoadData(int expenseID) { User cUser = CurrentUser.Instance.User; using (var db = new GetEvenContext()) { var expense = db.Expenses.Find(expenseID); var items = expense.ExpenseItems; if (expense.User.GroupID != cUser.GroupID) { // Expense does not belong to current user's Group CurrentUser.Instance.ResetCurrentUser(); Response.Redirect("~/Login.aspx"); return; } var result = from i in items select new { ExpenseItemID = i.ExpenseItemID, Username = i.User.Username, Amount = i.Balance, DueDate = expense.DueDate, Description = expense.Description, PaymentSubmitted = i.PaymentSubmitted }; ReceiverLabel.Text = expense.Receiver; AmountInput.Text = expense.Amount.ToString(); DueDateInput.Text = expense.DueDate.ToShortDateString(); DescriptionInput.Text = expense.Description; ExpenseDetailsView.DataSource = result; ExpenseDetailsView.DataBind(); } }
protected void CreateUserButton_Click(object sender, EventArgs e) { string username = NewUsernameInput.Text.Trim(); string password = NewPasswordInput.Text; string confirmPassword = NewPasswordConfirmInput.Text; string email = NewEmailInput.Text; string accessCode = NewAccessCodeInput.Text; string error = UserController.ValidateUserInfo(username, password, confirmPassword, email, accessCode); if (error != null) { ShowCreateUserError(error); return; } CreateUserValidationLabel.Visible = false; using (var db = new GetEvenContext()) { // Check to see if Group exists if (db.Groups.Where(g => g.AccessCode == accessCode).FirstOrDefault() == null) { NoGroupPanel.Visible = true; return; } else { // Group exists var newUser = UserController.CreateUser(NewUsernameInput.Text.Trim(), NewPasswordInput.Text, NewEmailInput.Text, NewAccessCodeInput.Text); CurrentUser.Instance.User = UserController.ValidateUser(username, password); Response.Redirect("~/Expenses.aspx"); } } }
protected void ExpenseView_RowCommand(object sender, GridViewCommandEventArgs e) { string id = e.CommandArgument.ToString(); if (e.CommandName == "ShowDetails") { Response.Redirect("~/ExpenseDetails.aspx?id=" + id); } else if (e.CommandName == "DeleteExpense" || e.CommandName == "ConfirmDelete" || e.CommandName == "CancelDelete") { GridViewRow row = (GridViewRow)((Control)e.CommandSource).NamingContainer; LinkButton deleteButton = (LinkButton)row.FindControl("DeleteButton"); Panel promptPanel = (Panel)row.FindControl("PromptPanel"); deleteButton.Visible = false; promptPanel.Visible = true; switch (e.CommandName) { case "ConfirmDelete": using (var db = new GetEvenContext()) { Expense expense = db.Expenses.Find(Convert.ToInt32(id)); db.Expenses.Remove(expense); db.SaveChanges(); } LoadData(); deleteButton.Visible = true; promptPanel.Visible = false; break; case "CancelDelete": deleteButton.Visible = true; promptPanel.Visible = false; break; } } }
protected void LoadData() { if (CurrentUser.Instance.User.Username == "") { Response.Redirect("~/Login.aspx"); return; } User cUser = CurrentUser.Instance.User; using (var db = new GetEvenContext()) { var allExpenses = db.Expenses.Where(e => e.User.GroupID == cUser.GroupID).ToList(); var allExpenseItems = db.ExpenseItems.Where(i => i.User.GroupID == cUser.GroupID).ToList(); var allResult = from e in allExpenses join i in allExpenseItems on e.ExpenseID equals i.ExpenseID into result orderby e.IsPaid, e.DueDate select new { ExpenseID = e.ExpenseID, UserID = e.UserID, Receiver = e.Receiver, DueDate = e.DueDate, Amount = e.Amount, Description = e.Description, IsPaid = e.IsPaid, ExpenseItems = result }; var totals = from r in allResult where r.IsPaid == false group r by r.Receiver into result select new { Receiver = result.First().Receiver, Amount = result.Sum(x => x.Amount) }; HeaderLabel.Text = "All Expenses"; ExpenseView.DataSource = allResult.ToList(); ExpenseView.DataBind(); TotalsView.DataSource = totals.ToList(); TotalsView.DataBind(); } }
protected void SaveButton_Click(object sender, EventArgs e) { if (ValidateExpenseDetails() == false) return; using (var db = new GetEvenContext()) { Expense expense = db.Expenses.Find(GetExpenseIDFromQueryString()); var expenseItems = expense.ExpenseItems; decimal amount = Convert.ToDecimal(AmountInput.Text); User cUser = CurrentUser.Instance.User; int groupCount = db.Groups.Find(cUser.GroupID).Users.Count; decimal sum = GetExpenseDetailAmountSum(); decimal amt = 0.0M; if (expense.IsPaid == true) { ShowExpenseDetailError("Expense already paid, cannot save."); return; } // Allow for slight variation (+/- .02) in amount for uneven numbers if (!(sum >= amount - .02M && sum <= amount + .02M)) { ShowExpenseDetailError("Amounts do not match total Expense amount."); return; } // Update Expense expense.Amount = amount; expense.DueDate = Convert.ToDateTime(DueDateInput.Text); expense.Description = DescriptionInput.Text.Trim(); // Update ExpenseItems foreach (GridViewRow row in ExpenseDetailsView.Rows) { if (row.RowType == DataControlRowType.DataRow) { TextBox amountInput = (TextBox)row.FindControl("ExpenseItemAmountInput"); ExpenseItem item = db.ExpenseItems.Find(ExpenseDetailsView.DataKeys[row.RowIndex].Values[0]); decimal curBalance = item.Balance; amt = Convert.ToDecimal(amountInput.Text); if (curBalance == 0.0M && amt > 0.0M) { // Changing Balance from 0, change PaymentSubmitted item.PaymentSubmitted = false; } else if (amt == 0.0M) { // New amount is 0, change PaymentSubmitted item.PaymentSubmitted = true; } item.Balance = amt; } } db.SaveChanges(); Response.Redirect("~/Expenses.aspx"); } }
protected void LoginButton_Click(object sender, EventArgs e) { string username = UsernameInput.Text.Trim(); string password = PasswordInput.Text; string error = UserController.ValidateUsername(username); if (error != null) { ShowLoginError(error); return; } error = UserController.ValidatePassword(password); if (error != null) { ShowLoginError(error); return; } User user = UserController.ValidateUser(username, password); if (user != null) { // Log in user using (var db = new GetEvenContext()) { db.Users.Find(user.UserID).LastActivityDate = DateTime.Now; } CurrentUser.Instance.User = user; Response.Redirect("~/Expenses.aspx?param=all"); } else { ShowLoginError("Incorrect username/password"); } }
protected void LoadData(string param) { User cUser = CurrentUser.Instance.User; using (var db = new GetEvenContext()) { var allExpenses = db.Expenses.ToList(); var allExpenseItems = db.ExpenseItems.ToList(); switch (param) { case "what_i_owe": // Join Balance column from ExpenseItems var whatIOweResult = from i in allExpenseItems join e in allExpenses on i.ExpenseID equals e.ExpenseID where i.UserID == cUser.UserID && e.Receiver.ToLower() != cUser.Username.ToLower() && i.Balance > 0.0M orderby i.PaymentSubmitted, e.DueDate select new { ExpenseItemID = i.ExpenseItemID, UserID = e.UserID, Receiver = e.Receiver, DueDate = e.DueDate, Amount = i.Balance, Description = e.Description, PaymentSubmitted = i.PaymentSubmitted }; var whatIOweTotals = from r in whatIOweResult where r.PaymentSubmitted == false group r by r.Receiver into result select new { Receiver = result.First().Receiver, Amount = result.Sum(x => x.Amount) }; _currentView = "what_i_owe"; ExpenseItemView.Columns[5].Visible = true; ExpenseItemView.Columns[0].HeaderText = "Receiver"; TotalsView.Columns[0].HeaderText = "Receiver"; HeaderLabel.Text = "What I Owe"; if (!whatIOweResult.Select(r => r.PaymentSubmitted).Contains(false)) { // All ExpenseItems have been paid, hide column ExpenseItemView.Columns[5].Visible = false; } ExpenseItemView.DataSource = whatIOweResult.ToList(); ExpenseItemView.DataBind(); TotalsView.DataSource = whatIOweTotals; TotalsView.DataBind(); break; case "who_owes_me": var whoOwesMeResult = from e in allExpenses join i in allExpenseItems on e.ExpenseID equals i.ExpenseID where e.Receiver.ToLower() == cUser.Username.ToLower() && i.UserID != cUser.UserID && i.Balance > 0.0M orderby i.PaymentSubmitted, e.DueDate select new { ExpenseItemID = i.ExpenseItemID, UserID = e.UserID, Receiver = i.User.Username, DueDate = e.DueDate, Amount = i.Balance, Description = e.Description, PaymentSubmitted = i.PaymentSubmitted }; var whoOwesMeTotals = from r in whoOwesMeResult where r.PaymentSubmitted == false group r by r.Receiver into result select new { Receiver = result.First().Receiver, Amount = result.Sum(x => x.Amount) }; _currentView = "who_owes_me"; ExpenseItemView.Columns[5].Visible = false; ExpenseItemView.Columns[0].HeaderText = "User"; TotalsView.Columns[0].HeaderText = "User"; HeaderLabel.Text = "Who Owes Me"; ExpenseItemView.DataSource = whoOwesMeResult.ToList(); ExpenseItemView.DataBind(); TotalsView.DataSource = whoOwesMeTotals; TotalsView.DataBind(); break; default: goto case "what_i_owe"; } } }
public static string ValidateUserInfo(string username, string password1, string password2, string email, string accessCode) { using (var db = new GetEvenContext()) { // Ensure username is not in use if (db.Users.Where(u => u.Username.ToLower() == username.ToLower()).FirstOrDefault() != null) return "Username already exists."; } string error; error = ValidateUsername(username); if (error != null) return error; error = ValidatePasswords(password1, password2); if (error != null) return error; error = ValidateEmail(email); if (error != null) return error; error = ValidateAccessCode(accessCode); return error; }