示例#1
0
        public void Complete()
        {
            if (!(_state == LoanState.OVERDUE || _state == LoanState.CURRENT))
                throw new ApplicationException(
                    $"Error : Cant transition from state: {_state} ==> {LoanState.COMPLETE}");

            _state = LoanState.COMPLETE;
        }
示例#2
0
        public async Task <ActionResult> DeleteConfirmed(int id)
        {
            LoanState loanState = await db.LoanStates.FindAsync(id);

            db.LoanStates.Remove(loanState);
            await db.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
示例#3
0
        public void Test_State(double principalBalance, LoanState state)
        {
            var loan = new Loan()
            {
                PrincipalBalance = (decimal)principalBalance
            };

            Assert.AreEqual(state, loan.State);
        }
示例#4
0
        public bool CheckOverDue(DateTime currentDate)
        {
            if(this.State != LoanState.CURRENT && this.State != LoanState.OVERDUE) throw new InvalidOperationException("Cannot check Over Due if Loan is not Current or Overdue");

            if (this.DueDate >= currentDate) return false;

            this.State = LoanState.OVERDUE;

            return true;
        }
示例#5
0
        public bool CheckOverDue(DateTime currentDate)
        {
            if (!(_state == LoanState.CURRENT || _state == LoanState.OVERDUE))
                throw new ApplicationException($"Error : cant transition from state:{_state} ==> { LoanState.OVERDUE}");

            if (DateTime.Compare(currentDate, _dueDate) > 0)
                _state = LoanState.OVERDUE;

            return IsOverDue;
        }
示例#6
0
        public decimal Rollover()
        {
            if (LoanState != LoanState.Paid)
            {
                return(0);
            }

            LoanState = LoanState.Archived;
            return(DefaultMonthlyPayment);
        }
示例#7
0
        public async Task <ActionResult> Edit([Bind(Include = "LoanStateId,Description")] LoanState loanState)
        {
            if (ModelState.IsValid)
            {
                db.Entry(loanState).State = EntityState.Modified;
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }
            return(View(loanState));
        }
示例#8
0
        public void Test_PaidLoans(LoanState loanState, int expectedLoanCount)
        {
            var loan = new Mock <ILoan>();

            loan.Setup(l => l.State).Returns(loanState);
            var salary = new Salary();

            var model = new Person(new ILoan[] { loan.Object }, 0, salary);

            Assert.AreEqual(expectedLoanCount, model.PaidLoans.Count);
        }
示例#9
0
        public async Task <ActionResult> Create([Bind(Include = "LoanStateId,Description")] LoanState loanState)
        {
            if (ModelState.IsValid)
            {
                db.LoanStates.Add(loanState);
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }

            return(View(loanState));
        }
示例#10
0
        public void CheckOverDueThrowsExceptionIfNotCurrentOrOverdue(LoanState state)
        {
            var book     = Substitute.For <IBook>();
            var borrower = Substitute.For <IMember>();

            var loan = new Loan(book, borrower, DateTime.Today, DateTime.Today.AddDays(1));

            loan.State = state;

            var ex = Assert.Throws <InvalidOperationException>(() => loan.CheckOverDue(DateTime.Today));

            Assert.Equal("Cannot check Over Due if Loan is not Current or Overdue", ex.Message);
        }
示例#11
0
 public Loan(IBook book, IMember borrower, DateTime borrowDate, DateTime dueDate, int id)
 {
     if (!sane(book, borrower, borrowDate, dueDate, id))
     {
         throw new ArgumentException("Loan: constructor : bad parameters");
     }
     this.book = book;
     this.borrower = borrower;
     this.borrowDate = borrowDate;
     this.dueDate = dueDate;
     this.id = id;
     this.state = LoanState.PENDING;
 }
示例#12
0
        public void CommitLoanThrowsRuntimeException(LoanState state)
        {
            var book     = Substitute.For <IBook>();
            var borrower = Substitute.For <IMember>();

            var loan = new Loan(book, borrower, DateTime.Today, DateTime.Today.AddDays(1));

            // Set the state to one passed in
            loan.State = state;

            var ex = Assert.Throws <InvalidOperationException>(() => loan.Complete());

            Assert.Equal("Cannot complete a loan if it's not Current or Overdue", ex.Message);
        }
示例#13
0
        // GET: LoanStates/Delete/5
        public async Task <ActionResult> Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            LoanState loanState = await db.LoanStates.FindAsync(id);

            if (loanState == null)
            {
                return(HttpNotFound());
            }
            return(View(loanState));
        }
示例#14
0
        public Loan(IBook book, IMember borrower, DateTime borrowDate, DateTime dueDate)
        {

            if (book == null || borrower == null ||
                DateTime.Compare(borrowDate, dueDate) >= 0)
                throw new ArgumentException("Error: in constructor parameter list.");

            _id = 0;
            _state = LoanState.PENDING;
            _book = book;
            _borrower = borrower;
            _borrowDate = borrowDate;
            _dueDate = dueDate;
        }
示例#15
0
        public static int GetLoanState(string description, LocalDataContext db)
        {
            var loanState = db.LoanStates.Where(s => s.Description == description).FirstOrDefault();

            if (loanState == null)
            {
                loanState = new LoanState {
                    Description = description,
                };
                db.LoanStates.Add(loanState);
                db.SaveChanges();
            }

            return(loanState.LoanStateId);
        }
示例#16
0
        public void CheckOverDueThrowsExceptionIfNotCurrentOrOverdue(LoanState state)
        {
            var book   = new Book("author", "title", "call number", 1);
            var member = new Member("first", "last", "phone", "email", 1);

            DateTime borrowDate = DateTime.Today;
            DateTime dueDate    = DateTime.Today.AddDays(7);

            var loan = new Loan(book, member, borrowDate, dueDate);

            loan.State = state;

            var ex = Assert.Throws <InvalidOperationException>(() => loan.CheckOverDue(DateTime.Today));

            Assert.Equal("Cannot check Over Due if Loan is not Current or Overdue", ex.Message);
        }
示例#17
0
        public void Commit(int id)
        {
            if (id < 0)
                throw new ArgumentException("Error: Loan ID must be positive integer");

            if (_state != LoanState.PENDING)
                throw new ApplicationException($"Error can't move from state : {_state} ==> {LoanState.CURRENT}");

            _state = LoanState.CURRENT;

            _id = id;

            Book.Borrow(this);

            _borrower.AddLoan(this);
        }
示例#18
0
        public void CommitLoanThrowsRuntimeException(LoanState state)
        {
            var book   = new Book("author", "title", "call number", 1);
            var member = new Member("first", "last", "phone", "email", 1);

            DateTime borrowDate = DateTime.Today;
            DateTime dueDate    = DateTime.Today.AddDays(7);

            var loan = new Loan(book, member, borrowDate, dueDate);

            // Set the state to one passed in
            loan.State = state;

            var ex = Assert.Throws <InvalidOperationException>(() => loan.Complete());

            Assert.Equal("Cannot complete a loan if it's not Current or Overdue", ex.Message);
        }
示例#19
0
        public PaymentResult MakePayment(decimal amount)
        {
            var interestAmount  = Balance * AnualRate / 12;
            var principalAmount = amount - interestAmount;

            if (Balance - principalAmount > 0)
            {
                Balance -= principalAmount;
            }
            else
            {
                Balance         = 0;
                principalAmount = Balance;
                LoanState       = LoanState.Paid;
            }

            return(new PaymentResult
            {
                Payment = amount,
                InterestAmount = interestAmount,
                PrincipalAmount = principalAmount
            });
        }
示例#20
0
 public bool CheckOverDue(DateTime currentDate)
 {
     if (!(state == LoanState.CURRENT || state == LoanState.OVERDUE))
     {
         throw new ApplicationException(
                 String.Format("Loan : checkOverDue : incorrect state transition  :{0} -> {1}\n",
                         state, LoanState.OVERDUE));
     }
     if (DateTime.Compare(currentDate, dueDate) > 0)
     {
         state = LoanState.OVERDUE;
     }
     return IsOverDue;
 }
示例#21
0
 public void Commit()
 {
     if (!(state == LoanState.PENDING))
     {
         throw new ApplicationException(
                 String.Format("Loan : commit : incorrect state transition  : {0} -> {1}\n",
                         state, LoanState.CURRENT));
     }
     state = LoanState.CURRENT;
 }
示例#22
0
        public void CommitLoanThrowsRuntimeException(LoanState state)
        {
            var book = Substitute.For<IBook>();
            var borrower = Substitute.For<IMember>();

            var loan = new Loan(book, borrower, DateTime.Today, DateTime.Today.AddDays(1));

            // Set the state to one passed in
            loan.State = state;

            var ex = Assert.Throws<InvalidOperationException>(() => loan.Complete());

            Assert.Equal("Cannot complete a loan if it's not Current or Overdue", ex.Message);
        }
示例#23
0
        public void CheckOverDueThrowsExceptionIfNotCurrentOrOverdue(LoanState state)
        {
            var book = Substitute.For<IBook>();
            var borrower = Substitute.For<IMember>();

            var loan = new Loan(book, borrower, DateTime.Today, DateTime.Today.AddDays(1));

            loan.State = state;

            var ex = Assert.Throws<InvalidOperationException>(() => loan.CheckOverDue(DateTime.Today));

            Assert.Equal("Cannot check Over Due if Loan is not Current or Overdue", ex.Message);
        }
        public void CheckOverDueThrowsExceptionIfNotCurrentOrOverdue(LoanState state)
        {
            var book = new Book("author", "title", "call number", 1);
            var member = new Member("first", "last", "phone", "email", 1);

            DateTime borrowDate = DateTime.Today;
            DateTime dueDate = DateTime.Today.AddDays(7);

            var loan = new Loan(book, member, borrowDate, dueDate);

            loan.State = state;

            var ex = Assert.Throws<InvalidOperationException>(() => loan.CheckOverDue(DateTime.Today));

            Assert.Equal("Cannot check Over Due if Loan is not Current or Overdue", ex.Message);
        }
        public void CommitLoanThrowsRuntimeException(LoanState state)
        {
            var book = new Book("author", "title", "call number", 1);
            var member = new Member("first", "last", "phone", "email", 1);

            DateTime borrowDate = DateTime.Today;
            DateTime dueDate = DateTime.Today.AddDays(7);

            var loan = new Loan(book, member, borrowDate, dueDate);

            // Set the state to one passed in
            loan.State = state;

            var ex = Assert.Throws<InvalidOperationException>(() => loan.Complete());

            Assert.Equal("Cannot complete a loan if it's not Current or Overdue", ex.Message);
        }
示例#26
0
        public void Commit(int loanID)
        {
            if(this.State != LoanState.PENDING) throw new InvalidOperationException("Loan cannot be committed unless state is Pending");

            this.State = LoanState.CURRENT;

            this.Book.Borrow(this);
            this.Borrower.AddLoan(this);

            this.ID = loanID;
        }
示例#27
0
 public void Complete()
 {
     if (!(state == LoanState.CURRENT ||
           state == LoanState.OVERDUE))
     {
         throw new ApplicationException(
                 String.Format("Loan : complete : incorrect state transition  : {0} -> {1}\n",
                         state, LoanState.COMPLETE));
     }
     state = LoanState.COMPLETE;
 }
示例#28
0
        public void Complete()
        {
            if(this.State != LoanState.CURRENT && this.State != LoanState.OVERDUE) throw new InvalidOperationException("Cannot complete a loan if it's not Current or Overdue");

            this.State = LoanState.COMPLETE;
        }