public ActionResult Create([Bind(Include = "ClientAccountId, Amount,BalanceType,Description,Timestamp")] ClientBalanceHistory clientBalanceHistory)
        {
            if (ModelState.IsValid)
            {
                if (clientBalanceHistory.BalanceType == BalanceChangeType.Cashout)
                {
                    if (clientBalanceHistory.Amount > 0)
                    {
                        clientBalanceHistory.Amount = clientBalanceHistory.Amount * -1;
                    }
                }

                db.ClientBalanceHistories.Add(clientBalanceHistory);

                var client = db.ClientAccounts.Find(clientBalanceHistory.ClientAccountId);


                client.Balance += clientBalanceHistory.Amount;


                db.Entry(client).State = EntityState.Modified;

                db.SaveChanges();

                return(RedirectToAction("Index", new { accountId = clientBalanceHistory.ClientAccountId }));
            }

            return(View(clientBalanceHistory));
        }
Esempio n. 2
0
        public ActionResult Create([Bind(Include = "ClientAccountId,StartAmount,StartDate,FreeDays,InterestRate, Notes")] Loan loan)
        {
            if (ModelState.IsValid)
            {
                DateTime time = DateTime.Now;
                loan.Timestamp     = time;
                loan.EndDate       = null;
                loan.CurrentAmount = loan.StartAmount;

                db.Loans.Add(loan);

                var client = db.ClientAccounts.Find(loan.ClientAccountId);

                if (client.Loan + loan.StartAmount > client.LoanLimit)
                {
                    throw new InvalidOperationException("超出贷款上限");
                }

                client.Loan += loan.StartAmount;

                db.Entry(client).State = EntityState.Modified;

                db.SaveChanges();

                client.Balance += loan.StartAmount;

                var clientBalanceHistory = new ClientBalanceHistory()
                {
                    Amount          = loan.StartAmount,
                    BalanceType     = BalanceChangeType.Loan,
                    ClientAccountId = client.ClientAccountId,
                    Description     = string.Format("Loan for LoanId: {0}.", loan.LoanId),
                    Timestamp       = time
                };

                db.ClientBalanceHistories.Add(clientBalanceHistory);

                var loanHistory = new LoanHistory()
                {
                    Amount     = loan.StartAmount,
                    DealDate   = loan.StartDate,
                    ChangeType = LoanChangeType.Loan,
                    Interest   = 0,
                    LoanId     = loan.LoanId,
                    Notes      = loan.Notes,
                    Timestamp  = time
                };

                db.LoanHistories.Add(loanHistory);
                db.SaveChanges();

                return(RedirectToAction("Index", new { accountId = loan.ClientAccountId }));
            }

            return(View(loan));
        }
 public ActionResult Edit([Bind(Include = "ClientBalanceHistoryId,Amount,BalanceType,Description,Timestamp")] ClientBalanceHistory clientBalanceHistory)
 {
     if (ModelState.IsValid)
     {
         db.Entry(clientBalanceHistory).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(clientBalanceHistory));
 }
        public ActionResult PayConfirmed([Bind(Include = "ClientSubscriptionId, Notes, Timestamp")] ClientSubscription subscription)
        {
            if (ModelState.IsValid)
            {
                DateTime time = subscription.Timestamp;

                ClientSubscription clientSubscription = db.ClientSubscriptions.Find(subscription.ClientSubscriptionId);
                long          clientAccountId         = clientSubscription.ClientAccountId;
                ClientAccount client = db.ClientAccounts.Find(clientAccountId);

                if (client.Balance >= clientSubscription.UnitPrice * clientSubscription.StartQuantity)
                {
                    clientSubscription.State           = ClientSubscriptionState.Paid;
                    db.Entry(clientSubscription).State = EntityState.Modified;
                    client.Balance -= clientSubscription.UnitPrice * clientSubscription.StartQuantity;
                    clientSubscription.Timestamp = time;
                    db.Entry(client).State       = EntityState.Modified;

                    var clientSubscriptionHistory = new ClientSubscriptionHistory()
                    {
                        UnitPrice            = clientSubscription.UnitPrice,
                        State                = ClientSubscriptionState.Paid,
                        Quantity             = clientSubscription.StartQuantity,
                        VesselName           = subscription.VesselName,
                        Notes                = clientSubscription.Notes,
                        ClientSubscriptionId = clientSubscription.ClientSubscriptionId,
                        Timestamp            = time
                    };

                    db.ClientSubscriptionHistories.Add(clientSubscriptionHistory);

                    var clientBalanceHistory = new ClientBalanceHistory()
                    {
                        Amount          = clientSubscription.UnitPrice * clientSubscription.StartQuantity * -1,
                        BalanceType     = BalanceChangeType.Pay,
                        ClientAccountId = clientAccountId,
                        Description     = string.Format("Pay for Subscription: {0}.", subscription.ClientSubscriptionId),
                        Timestamp       = time
                    };

                    db.ClientBalanceHistories.Add(clientBalanceHistory);

                    db.SaveChanges();
                    return(RedirectToAction("Index", new { accountId = clientAccountId }));
                }

                return(View("The balance is not enough to pay the subscription."));
            }

            return(View("The state is not valid."));
        }
        // GET: ClientBalanceHistories/Edit/5
        public ActionResult Edit(long?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            ClientBalanceHistory clientBalanceHistory = db.ClientBalanceHistories.Find(id);

            if (clientBalanceHistory == null)
            {
                return(HttpNotFound());
            }
            return(View(clientBalanceHistory));
        }
        // GET: ClientBalanceHistories/Create
        public ActionResult Create(long?accountId)
        {
            if (accountId == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var balanceHistory = new ClientBalanceHistory()
            {
                ClientAccountId = accountId.Value
            };

            return(View(balanceHistory));
        }
        public ActionResult DeleteConfirmed(long id)
        {
            ClientBalanceHistory clientBalanceHistory = db.ClientBalanceHistories.Find(id);
            var clientId = clientBalanceHistory.ClientAccountId;

            db.ClientBalanceHistories.Remove(clientBalanceHistory);

            var client = db.ClientAccounts.Find(clientId);

            client.Balance        -= clientBalanceHistory.Amount;
            db.Entry(client).State = EntityState.Modified;
            db.SaveChanges();

            return(RedirectToAction("Index", new { accountId = clientId }));
        }
Esempio n. 8
0
        public ActionResult RepayConfirmed([Bind(Include = "LoanId,RepayDate, RepayAmount, Notes")] LoanRepayViewModel loanRepayViewModel)
        {
            DateTime time = DateTime.Now;

            if (ModelState.IsValid)
            {
                var loan = db.Loans.Find(loanRepayViewModel.LoanId);

                if (loan == null)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                }

                double totalRepayAmount = GetRepayAmountWithInterest(
                    loanRepayViewModel.RepayAmount,
                    loan.InterestRate,
                    loan.StartDate,
                    loanRepayViewModel.RepayDate,
                    loan.FreeDays);

                var client = db.ClientAccounts.Find(loan.ClientAccountId);

                if (client == null)
                {
                    return(HttpNotFound());
                }

                if (client.Balance < totalRepayAmount)
                {
                    return(View(string.Format("The balance is not enough to pay the loan with interest {0}.", totalRepayAmount)));
                }

                client.Loan           -= loanRepayViewModel.RepayAmount;
                client.Balance        -= totalRepayAmount;
                db.Entry(client).State = EntityState.Modified;

                var loanHistory = new LoanHistory()
                {
                    Amount     = loanRepayViewModel.RepayAmount * -1,
                    DealDate   = loanRepayViewModel.RepayDate,
                    Interest   = totalRepayAmount - loanRepayViewModel.RepayAmount,
                    ChangeType = LoanChangeType.Repay,
                    LoanId     = loan.LoanId,
                    Notes      = loan.Notes,
                    Timestamp  = time
                };

                db.LoanHistories.Add(loanHistory);

                loan.CurrentAmount -= loanRepayViewModel.RepayAmount;
                loan.Timestamp      = time;

                if (loan.CurrentAmount == 0)
                {
                    loan.EndDate = loanRepayViewModel.RepayDate;
                }

                db.Entry(loan).State = EntityState.Modified;

                var clientBalanceHistory = new ClientBalanceHistory()
                {
                    Amount          = totalRepayAmount * -1,
                    BalanceType     = BalanceChangeType.LoanRepay,
                    ClientAccountId = client.ClientAccountId,
                    Description     = string.Format("Repay for Loan: {0}.", loan.LoanId),
                    Timestamp       = time
                };

                db.ClientBalanceHistories.Add(clientBalanceHistory);

                try
                {
                    db.SaveChanges();
                }
                catch (DbEntityValidationException e)
                {
                    string errorMessage = "";

                    foreach (var result in e.EntityValidationErrors)
                    {
                        foreach (var error in result.ValidationErrors)
                        {
                            errorMessage += error.ErrorMessage;
                        }
                    }

                    throw new Exception(errorMessage);
                }
                return(RedirectToAction("Index", new { accountId = client.ClientAccountId }));
            }

            return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
        }