Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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;
            }
        }
Exemplo n.º 3
0
        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;
            }
        }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        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");
        }
Exemplo n.º 7
0
        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();
            }
        }
Exemplo n.º 9
0
        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");
                }
            }
        }
Exemplo n.º 10
0
        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;
                }
            }
        }
Exemplo n.º 11
0
        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();
            }
        }
Exemplo n.º 12
0
        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");
            }
        }
Exemplo n.º 13
0
        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");
            }
        }
Exemplo n.º 14
0
        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";
                }
            }
        }
Exemplo n.º 15
0
        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;
        }