ASP.NET MVC - ADO.NET - Watts' A Loan
ASP.NET MVC - ADO.NET - Watts' A Loan
Introduction
Watts' A Loan is a fictitious private company that lends money to individuals and small businesses. To support this business, we will create a database in Microsoft SQL Server.
The databas we want for this application should be installed in a server. It can then be accessed using a client application such as a desktop application or a web-based application. In some cases, especially, if you are primarily creating the application to test it, you can create it as a local application, a Windows Forms application or else.
Practical Learning: Introducing Views
using System.Web.Optimization;
namespace WattsALoan1
{
public class BundleConfig
{
// For more information on bundling, visit https://go.microsoft.com/fwlink/?LinkId=301862
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.validate*"));
// Use the development version of Modernizr to develop with and learn from. Then, when you're
// ready for production, use the build tool at https://modernizr.com to pick only the tests you need.
bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
"~/Scripts/modernizr-*"));
bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
"~/Scripts/bootstrap.js"));
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/site.css",
"~/Content/WattsALoan.css"));
}
}
}
The Watts' A Loan Database
To keep track of the loans issued by the company, we will create a Microsoft SQL Server database.
Practical Learning: Creating the Database
USE master; GO CREATE DATABASE WattsALoan; GO USE WattsALoan1; GO
CREATE SCHEMA HumanResources; GO CREATE SCHEMA Management; GO CREATE TABLE HumanResources.Employees ( EmployeeID INT IDENTITY(1, 1), EmployeeNumber NVARCHAR(10) UNIQUE, FirstName NVARCHAR(20), LastName NVARCHAR(20), EmploymentTitle NVARCHAR(50), CONSTRAINT PK_Employees PRIMARY KEY(EmployeeID) ); GO CREATE TABLE Management.LoanContracts ( LoanContractID INT IDENTITY(1, 1), LoanNumber INT UNIQUE NOT NULL, DateAllocated DATETIME2, EmployeeID INT, CustomerFirstName NVARCHAR(20), CustomerLastName NVARCHAR(20), LoanType NVARCHAR(20), LoanAmount DECIMAL(8, 2), InterestRate DECIMAL(8, 2), [Periods] INT, InterestAmount DECIMAL(8, 2), FutureValue DECIMAL(8, 2), MonthlyPayment DECIMAL(8, 2), CurrentBalance DECIMAL(8, 2), PaymentStartDate DATETIME2, CONSTRAINT FK_LoansProcessors FOREIGN KEY(EmployeeID) REFERENCES HumanResources.Employees(EmployeeID), CONSTRAINT PK_LoansContracts PRIMARY KEY(LoanContractID) ); GO CREATE TABLE Management.Payments ( PaymentID INT IDENTITY(1, 1), PaymentNumber INT, PaymentDate DATETIME2, EmployeeID INT, LoanContractID INT, AmountPaid DECIMAL(8, 2), CONSTRAINT FK_PaymentsReceivers FOREIGN KEY(EmployeeID) REFERENCES HumanResources.Employees(EmployeeID), CONSTRAINT FK_LoansPayments FOREIGN KEY(LoanContractID) REFERENCES Management.LoanContracts(LoanContractID), CONSTRAINT PK_Payments PRIMARY KEY(PaymentID) ); GO CREATE VIEW Management.Clients AS SELECT LoanNumber, LoanType, CustomerFirstName, CustomerLastName, LoanAmount, MonthlyPayment, PaymentStartDate FROM LoanContracts; GO ------------------------------------------------------------- TOGO TOGO CREATE VIEW Management.LoansContracts WITH SCHEMABINDING AS SELECT LoanNumber, DateAllocated, EmployeeNumber + N': ' + FirstName + N' ' + LastName AS [Processed By], CustomerFirstName + N' ' + CustomerLastName AS Customer, LoanType, LoanAmount, InterestRate, [Periods], MonthlyPayment, FutureValue, InterestAmount, PaymentStartDate FROM Management.LoanContracts INNER JOIN HumanResources.Employees ON Management.LoanContracts.EmployeeID LIKE HumanResources.Employees.EmployeeID; GO CREATE VIEW Management.LoanPayment WITH SCHEMABINDING AS SELECT ReceiptNumber, EmployeeID, LoanContractID, PaymentDate, PaymentAmount, Balance FROM Management.Payments; GO CREATE VIEW Management.PaymentsSummary AS SELECT LoanNumber, HumanResources.Employees.EmployeeNumber + N': ' + HumanResources.Employees.FirstName + N' ' + HumanResources.Employees.LastName AS [Received By], PaymentDate, Customer = CustomerFirstName + N' ' + CustomerLastName, LoanType, LoanAmount, PaymentAmount, Balance FROM Management.Payments INNER JOIN HumanResources.Employees ON Payments.EmployeeID LIKE HumanResources.Employees.EmployeeID INNER JOIN Management.LoanContracts ON Management.LoanContracts.LoanContractID LIKE Management.Payments.LoanContractID; GO
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
https://go.microsoft.com/fwlink/?LinkId=301880
-->
<configuration>
<appSettings>
<add key="webpages:Version" value="3.0.0.0"/>
<add key="webpages:Enabled" value="false"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.7.2"/>
<httpRuntime targetFramework="4.7.2"/>
<httpModules>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"/>
</httpModules>
</system.web>
<connectionStrings>
<add name="csWattsALoan"
connectionString="Data Source=(local); Database='WattsALoan1'; Integrated Security=True;MultipleActiveResultSets=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
. . . No Change
</configuration>
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
https://go.microsoft.com/fwlink/?LinkId=301880
-->
<configuration>
<appSettings>
<add key="webpages:Version" value="3.0.0.0"/>
<add key="webpages:Enabled" value="false"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.6.1"/>
<httpRuntime targetFramework="4.6.1"/>
<httpModules>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"/>
</httpModules>
</system.web>
<connectionStrings>
<add name="csWattsALoan"
connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\WattsALoan1.mdf;Initial Catalog=WattsALoan1;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
. . . No Change
</configuration>
The Employees of the Company
The employees of the company will be in charge of dailay operations.
Practical Learning: Creating Employees
using System.ComponentModel.DataAnnotations; namespace WattsALoan.Models { public class Employee { [Display(Name = "Employee ID")] public int EmployeeID { get; set; } [Display(Name = "Employee #")] public string EmployeeNumber { get; set; } [Display(Name = "First Name")] public string FirstName { get; set; } [Display(Name = "Last Name")] public string LastName { get; set; } [Display(Name = "Employment Title")] public string EmploymentTitle { get; set; } public string Identification { get { return EmployeeNumber + " - " + FirstName + " " + LastName + " (" + EmploymentTitle + ")"; } } } }
using System.Net; using System.Data; using System.Web.Mvc; using WattsALoan1.Models; using System.Data.SqlClient; using System.Collections.Generic; namespace WattsALoan1.Controllers { public class EmployeesController : Controller { public List<Employee> GetEmployees() { List<Employee> employees = new List<Employee>(); using (SqlConnection scWattsALoan = new SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { SqlCommand cmdEmployees = new SqlCommand("SELECT EmployeeID, EmployeeNumber, " + " FirstName, LastName, EmploymentTitle " + "FROM Employees;", scWattsALoan); scWattsALoan.Open(); cmdEmployees.ExecuteNonQuery(); SqlDataAdapter sdaEmployees = new SqlDataAdapter(cmdEmployees); DataSet dsEmployees = new DataSet("employees"); sdaEmployees.Fill(dsEmployees); Employee staff = null; for (int i = 0; i < dsEmployees.Tables[0].Rows.Count; i++) { DataRow drEmployee = dsEmployees.Tables[0].Rows[i]; staff = new Employee() { EmployeeID = int.Parse(drEmployee[0].ToString()), EmployeeNumber = drEmployee[1].ToString(), FirstName = drEmployee[2].ToString(), LastName = drEmployee[3].ToString(), EmploymentTitle = drEmployee[4].ToString() }; employees.Add(staff); } } return employees; } // GET: Employees public ActionResult Index() { return View(GetEmployees()); } // GET: Employees/Details/5 public ActionResult Details(int id) { Employee employee = null; if (id == 0) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } foreach (var staff in GetEmployees()) { if (staff.EmployeeID == id) { employee = staff; break; } } if (employee == null) { return HttpNotFound(); } return View(employee); } // GET: Employees/Create public ActionResult Create() { return View(); } // POST: Employees/Create [HttpPost] public ActionResult Create(FormCollection collection) { try { // TODO: Add insert logic here using (SqlConnection scRentManagement = new SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { SqlCommand cmdEmployees = new SqlCommand("INSERT INTO Employees(EmployeeNumber, FirstName, LastName, EmploymentTitle) " + "VALUES(N'" + collection["EmployeeNumber"] + "', " + " N'" + collection["FirstName"] + "', " + " N'" + collection["LastName"] + "', " + " N'" + collection["EmploymentTitle"] + "');", scRentManagement); scRentManagement.Open(); cmdEmployees.ExecuteNonQuery(); } return RedirectToAction("Index"); } catch { return View(); } } // GET: Employees/Edit/5 public ActionResult Edit(int id) { if (id == 0) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Employee employee = null; foreach (var staff in GetEmployees()) { if (staff.EmployeeID == id) { employee = staff; break; } } return employee == null ? HttpNotFound() : (ActionResult)View(employee); } // POST: Employees/Edit/5 [HttpPost] public ActionResult Edit(int id, FormCollection collection) { try { // TODO: Add update logic here using (SqlConnection scRentManagement = new SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { SqlCommand cmdEmployees = new SqlCommand("UPDATE Employees " + "SET EmployeeNumber = N'" + collection["EmployeeNumber"] + "', " + " FirstName = N'" + collection["FirstName"] + "', " + " LastName = N'" + collection["LastName"] + "', " + " EmploymentTitle = N'" + collection["EmploymentTitle"] + "' " + "WHERE EmployeeID = " + id + ";", scRentManagement); scRentManagement.Open(); cmdEmployees.ExecuteNonQuery(); } return RedirectToAction("Index"); } catch { return View(); } } // GET: Employees/Delete/5 public ActionResult Delete(int id) { if (id == 0) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Employee employee = null; foreach (var staff in GetEmployees()) { if (staff.EmployeeID == id) { employee = staff; break; } } return employee == null ? HttpNotFound() : (ActionResult)View(employee); } // POST: Employees/Delete/5 [HttpPost] public ActionResult Delete(int id, FormCollection collection) { try { // TODO: Add delete logic here using (SqlConnection scRentManagement = new SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { SqlCommand cmdEmployees = new SqlCommand("DELETE FROM Employees " + "WHERE EmployeeID = " + id + ";", scRentManagement); scRentManagement.Open(); cmdEmployees.ExecuteNonQuery(); } return RedirectToAction("Index"); } catch { return View(); } } } }
@model IEnumerable<WattsALoan1.Models.Employee> @{ ViewBag.Title = "Employees"; } <h2 class="bold maroon common-font text-center">Employees</h2> <hr /> <table class="table table-hover common-font"> <tr> <th class="text-center">@Html.DisplayNameFor(model => model.EmployeeID)</th> <th>@Html.DisplayNameFor(model => model.EmployeeNumber)</th> <th>@Html.DisplayNameFor(model => model.FirstName)</th> <th>@Html.DisplayNameFor(model => model.LastName)</th> <th>@Html.DisplayNameFor(model => model.EmploymentTitle)</th> <th>@Html.ActionLink("Hire New Employee", "Create")</th> </tr> @foreach (var item in Model) { <tr> <td class="text-center">@Html.DisplayFor(modelItem => item.EmployeeID)</td> <td>@Html.DisplayFor(modelItem => item.EmployeeNumber)</td> <td>@Html.DisplayFor(modelItem => item.FirstName)</td> <td>@Html.DisplayFor(modelItem => item.LastName)</td> <td>@Html.DisplayFor(modelItem => item.EmploymentTitle)</td> <td> @Html.ActionLink("Edit", "Edit", new { id = item.EmployeeID }) | @Html.ActionLink("Details", "Details", new { id = item.EmployeeID }) | @Html.ActionLink("Delete", "Delete", new { id = item.EmployeeID }) </td> </tr> } </table>
@model WattsALoan1.Models.Employee @{ ViewBag.Title = "Employee Details"; } <h2 class="bold text-center common-font maroon">Employee Details</h2> <hr /> <div class="containment"> <dl class="dl-horizontal common-font"> <dt>@Html.DisplayNameFor(model => model.EmployeeID)</dt> <dd>@Html.DisplayFor(model => model.EmployeeID)</dd> <dt>@Html.DisplayNameFor(model => model.EmployeeNumber)</dt> <dd>@Html.DisplayFor(model => model.EmployeeNumber)</dd> <dt>@Html.DisplayNameFor(model => model.FirstName)</dt> <dd>@Html.DisplayFor(model => model.FirstName)</dd> <dt>@Html.DisplayNameFor(model => model.LastName)</dt> <dd>@Html.DisplayFor(model => model.LastName)</dd> <dt>@Html.DisplayNameFor(model => model.EmploymentTitle)</dt> <dd>@Html.DisplayFor(model => model.EmploymentTitle)</dd> </dl> </div> <p class="text-center"> @Html.ActionLink("Edit/Update Employee Record", "Edit", new { id = Model.EmployeeID }) :: @Html.ActionLink("Employees", "Index") </p>
@model WattsALoan1.Models.Employee @{ ViewBag.Title = "Create Employee"; } <h2 class="bold maroon common-font text-center">Employment Application</h2> <hr /> @using (Html.BeginForm()) { <div class="form-horizontal common-font"> <div class="form-group"> @Html.LabelFor(model => model.EmployeeNumber, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.EmployeeNumber, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.LastName, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.EmployeeNumber, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.EmploymentTitle, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> <label class="control-label col-md-6">@Html.ActionLink("Employees", "Index")</label> <div class="col-md-6"> <input type="submit" value="Hire this Employee" class="btn btn-primary" /> </div> </div> </div> }
@model WattsALoan1.Models.Employee @{ ViewBag.Title = "Edit/Update Employee Information"; } <h2 class=" bold maroon common-font text-center">Edit/Update Employee Information</h2> <hr /> @using (Html.BeginForm()) { <div class="form-horizontal common-font"> <div class="form-group"> @Html.LabelFor(model => model.EmployeeNumber, htmlAttributes: new { @class = "control-label col-md-5" }) <div class="col-md-7"> @Html.EditorFor(model => model.EmployeeNumber, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-5" }) <div class="col-md-7"> @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.LastName, htmlAttributes: new { @class = "control-label col-md-5" }) <div class="col-md-7"> @Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.EmploymentTitle, htmlAttributes: new { @class = "control-label col-md-5" }) <div class="col-md-7"> @Html.EditorFor(model => model.EmploymentTitle, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> <label class="control-label col-md-5">@Html.ActionLink("Employees", "Index")</label> <div class="col-md-7"> <input type="submit" value="Update Employee Record" class="btn btn-primary" /> </div> </div> </div> }
@model WattsALoan1.Models.Employee @{ ViewBag.Title = "Deleting Employee Record"; } <h2 class="bold common-font text-center maroon">Deleting Employee Record</h2> <hr /> <h3 class="common-font maroon text-center">Are you sure you want to delete this employee's record?</h3> <div class="containment"> <dl class="dl-horizontal common-font"> <dt>@Html.DisplayNameFor(model => model.EmployeeID)</dt> <dd>@Html.DisplayFor(model => model.EmployeeID)</dd> <dt>@Html.DisplayNameFor(model => model.EmployeeNumber)</dt> <dd>@Html.DisplayFor(model => model.EmployeeNumber)</dd> <dt>@Html.DisplayNameFor(model => model.FirstName)</dt> <dd>@Html.DisplayFor(model => model.FirstName)</dd> <dt>@Html.DisplayNameFor(model => model.LastName)</dt> <dd>@Html.DisplayFor(model => model.LastName)</dd> <dt>@Html.DisplayNameFor(model => model.EmploymentTitle)</dt> <dd>@Html.DisplayFor(model => model.EmploymentTitle)</dd> </dl> @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="form-actions no-color"> @Html.ActionLink("Employees", "Index") :: <input type="submit" value="Delete Employee Record" class="btn btn-primary" /> </div> } </div>
Loans Contracts
The company needs some type of contract with a customer who receives a loan.
Practical Learning: Creating Loans Contracts
using System; using System.ComponentModel.DataAnnotations; namespace WattsALoan1.Models { public class LoanContract { [Display(Name = "Loan Contract ID")] public int LoanContractID { get; set; } [Display(Name = "Loan #")] public int LoanNumber { get; set; } [DataType(DataType.Date)] [Display(Name = "Date Allocated")] public DateTime DateAllocated { get; set; } [Display(Name = "Employee ID")] public int EmployeeID { get; set; } [Display(Name = "First Name")] public string CustomerFirstName { get; set; } [Display(Name = "Last Name")] public string CustomerLastName { get; set; } [Display(Name = "Loan Type")] public string LoanType { get; set; } // => "Personal Loan"; [Display(Name = "Loan Amount")] public decimal LoanAmount { get; set; } [Display(Name = "Interest Rate")] public decimal InterestRate { get; set; } public int Periods { get; set; } [Display(Name = "Monthly Payment")] public decimal MonthlyPayment { get; set; } [Display(Name = "Future Value")] public decimal FutureValue { get; set; } [Display(Name = "Interest Amount")] public decimal InterestAmount { get; set; } [DataType(DataType.Date)] [Display(Name = "Payment Start Date")] public DateTime PaymentStartDate { get; set; } } }
using System; using System.Data; using System.Web.Mvc; using WattsALoan1.Models; using System.Data.SqlClient; using System.Collections.Generic; namespace WattsALoan1.Controllers { public class LoansContractsController : Controller { public List<LoanContract> GetLoanContracts() { List<LoanContract> contracts = new List<LoanContract>(); using (SqlConnection scWattsALoan = new SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { SqlCommand cmdLoanContracts = new SqlCommand("SELECT LoanContractID, LoanNumber, DateAllocated, EmployeeID, " + " CustomerFirstName, CustomerLastName, LoanType, " + " LoanAmount, InterestRate, Periods, MonthlyPayment, " + " FutureValue, InterestAmount, PaymentStartDate " + "FROM LoanContracts;", scWattsALoan); scWattsALoan.Open(); cmdLoanContracts.ExecuteNonQuery(); SqlDataAdapter sdaLoanContracts = new SqlDataAdapter(cmdLoanContracts); DataSet dsLoanContracts = new DataSet("loans-contracts"); sdaLoanContracts.Fill(dsLoanContracts); LoanContract contract = null; for (int i = 0; i < dsLoanContracts.Tables[0].Rows.Count; i++) { DataRow drLoanContract = dsLoanContracts.Tables[0].Rows[i]; contract = new LoanContract() { LoanContractID = int.Parse(drLoanContract[0].ToString()), LoanNumber = int.Parse(drLoanContract[1].ToString()), DateAllocated = DateTime.Parse(drLoanContract[2].ToString()), EmployeeID = int.Parse(drLoanContract[3].ToString()), CustomerFirstName = drLoanContract[4].ToString(), CustomerLastName = drLoanContract[5].ToString(), LoanType = drLoanContract[6].ToString(), LoanAmount = decimal.Parse(drLoanContract[7].ToString()), InterestRate = decimal.Parse(drLoanContract[8].ToString()), Periods = int.Parse(drLoanContract[9].ToString()), MonthlyPayment = decimal.Parse(drLoanContract[10].ToString()), FutureValue = decimal.Parse(drLoanContract[11].ToString()), InterestAmount = decimal.Parse(drLoanContract[12].ToString()), PaymentStartDate = DateTime.Parse(drLoanContract[13].ToString()) }; contracts.Add(contract); } } return contracts; } // GET: LoansContracts public ActionResult Index() { return View(GetLoanContracts()); } // GET: LoansContracts/Details/5 public ActionResult Details(int id) { return View(); } // GET: LoansContracts/ReviewCustomersAccounts public ActionResult ReviewCustomersAccounts() { return View(); } // GET: LoansContracts/LoanContractStartUp public ActionResult LoanContractStartUp() { return View(); } // GET: LoansContracts/LoanContractPreparation public ActionResult LoanContractPreparation(string EmployeeID, string LoanAmount, string InterestRate, string Periods, FormCollection collection) { //int loanNbr = 100000; Random rndNumber = new Random(); ViewBag.LoanNumber = rndNumber.Next(100001, 999999).ToString(); // Create a list of loans types for a combo box List<SelectListItem> loanTypes = new List<SelectListItem>(); loanTypes.Add(new SelectListItem() { Text = "Personal Loan", Value = "Personal Loan" }); loanTypes.Add(new SelectListItem() { Text = "Car Financing", Value = "Car Financing" }); loanTypes.Add(new SelectListItem() { Text = "Boat Financing", Value = "Boat Financing" }); loanTypes.Add(new SelectListItem() { Text = "Furniture Purchase", Value = "Furniture Purchase" }); loanTypes.Add(new SelectListItem() { Text = "Musical Instrument", Value = "Musical Instrument" }); // Store the list in a View Bag so it can be access by a combo box ViewBag.LoanType = loanTypes; if(!string.IsNullOrEmpty(EmployeeID)) { EmployeesController ec = new EmployeesController(); using (SqlConnection scWattsALoan = new SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { foreach (var staff in ec.GetEmployees()) { if (staff.EmployeeID == int.Parse(EmployeeID)) { ViewBag.EmployeeDetails = staff.EmployeeNumber + " - " + staff.FirstName + " " + staff.LastName + " (" + staff.EmploymentTitle + ")"; break; } } } } int periods = 0; decimal principal = 0, interestRate = 0; if (!string.IsNullOrEmpty(LoanAmount)) { principal = decimal.Parse(LoanAmount); } if (!string.IsNullOrEmpty(InterestRate)) { interestRate = decimal.Parse(InterestRate) / 100; } if (!string.IsNullOrEmpty(Periods)) { periods = int.Parse(Periods); } decimal interestAmount = principal * interestRate * periods / 12; decimal futureValue = principal + interestAmount; decimal monthlyPayment = futureValue / periods; ViewBag.FutureValue = futureValue.ToString("F"); ViewBag.InterestAmount = interestAmount.ToString("F"); ViewBag.MonthlyPayment = monthlyPayment.ToString("F"); return View(); } // GET: LoansContracts/Create public ActionResult Create() { return View(); } // POST: LoansContracts/Create [HttpPost] public ActionResult Create(string LoanNumber, string EmployeeID, string InterestRate, string Periods, string FutureValue, string MonthlyPayment, string InterestAmount, FormCollection collection) { try { // TODO: Add insert logic here if(!string.IsNullOrEmpty(EmployeeID)) { using (SqlConnection scWattsALoan = new SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { SqlCommand cmdLoanAllocation = new SqlCommand("INSERT LoanContracts(LoanNumber, DateAllocated, EmployeeID, " + " CustomerFirstName, CustomerLastName, LoanType, " + " LoanAmount, InterestRate, Periods, MonthlyPayment, " + " FutureValue, InterestAmount, PaymentStartDate) " + "VALUES(" + int.Parse(LoanNumber) + ", N'" + collection["DateAllocated"] + "', " + int.Parse(collection["EmployeeID"]) + ", N'" + collection["CustomerFirstName"] + "', N'" + collection["CustomerLastName"] + "', N'" + collection["LoanType"] + "', " + decimal.Parse(collection["LoanAmount"]) + ", " + decimal.Parse(collection["InterestRate"]) + ", " + int.Parse(collection["Periods"]) + ", " + decimal.Parse(MonthlyPayment) + ", " + decimal.Parse(FutureValue) + ", " + decimal.Parse(InterestAmount) + ", N'" + collection["PaymentStartDate"] + "');"); cmdLoanAllocation.Connection = scWattsALoan; scWattsALoan.Open(); cmdLoanAllocation.ExecuteNonQuery(); } } return RedirectToAction("Index"); } catch { return View(); } } . . . No Change } }
@model IEnumerable<WattsALoan1.Models.LoanContract> @{ ViewBag.Title = "Loans Contracts"; } <h2 class="bold maroon common-font text-center">Loan Contracts</h2> <table class="table table-hover common-font"> <tr> <th class="text-center">@Html.DisplayNameFor(model => model.LoanContractID)</th> <th class="text-center">@Html.DisplayNameFor(model => model.LoanNumber)</th> <th>@Html.DisplayNameFor(model => model.DateAllocated)</th> <th class="text-center">@Html.DisplayNameFor(model => model.EmployeeID)</th> <th>@Html.DisplayNameFor(model => model.CustomerFirstName)</th> <th>@Html.DisplayNameFor(model => model.CustomerLastName)</th> <th>@Html.DisplayNameFor(model => model.LoanType)</th> <th>@Html.DisplayNameFor(model => model.LoanAmount)</th> <th>@Html.DisplayNameFor(model => model.InterestRate)</th> <th>@Html.DisplayNameFor(model => model.Periods)</th> <th>@Html.DisplayNameFor(model => model.MonthlyPayment)</th> <th>@Html.DisplayNameFor(model => model.FutureValue)</th> <th>@Html.DisplayNameFor(model => model.InterestAmount)</th> <th>@Html.DisplayNameFor(model => model.PaymentStartDate)</th> <th>@Html.ActionLink("New Loan Contract", "LoanContractStartUp")</th> </tr> @foreach (var item in Model) { <tr> <td class="text-center">@Html.DisplayFor(modelItem => item.LoanContractID)</td> <td class="text-center">@Html.DisplayFor(modelItem => item.LoanNumber)</td> <td class="text-center">@Html.DisplayFor(modelItem => item.DateAllocated)</td> <td class="text-center">@Html.DisplayFor(modelItem => item.EmployeeID)</td> <td>@Html.DisplayFor(modelItem => item.CustomerFirstName)</td> <td>@Html.DisplayFor(modelItem => item.CustomerLastName)</td> <td>@Html.DisplayFor(modelItem => item.LoanType)</td> <td class="text-center">@Html.DisplayFor(modelItem => item.LoanAmount)</td> <td class="text-center">@Html.DisplayFor(modelItem => item.InterestRate)</td> <td class="text-center">@Html.DisplayFor(modelItem => item.Periods)</td> <td class="text-center">@Html.DisplayFor(modelItem => item.MonthlyPayment)</td> <td class="text-center">@Html.DisplayFor(modelItem => item.FutureValue)</td> <td class="text-center">@Html.DisplayFor(modelItem => item.InterestAmount)</td> <td class="text-center">@Html.DisplayFor(modelItem => item.PaymentStartDate)</td> <td> @Html.ActionLink("Edit", "Edit", new { id = item.LoanContractID }) | @Html.ActionLink("Details", "Details", new { id = item.LoanContractID }) | @Html.ActionLink("Delete", "Delete", new { id = item.LoanContractID }) </td> </tr> } </table>
@model WattsALoan1.Models.LoansContract @{ ViewBag.Title = "Loan Contract Details"; } <h2 class="bold text-center common-font maroon">Loan Contract Details</h2> <hr /> <div class="containment"> <dl class="dl-horizontal common-font"> <dt>@Html.DisplayNameFor(model => model.LoanContractID)</dt> <dd>@Html.DisplayFor(model => model.LoanContractID)</dd> <dt>@Html.DisplayNameFor(model => model.LoanNumber)</dt> <dd>@Html.DisplayFor(model => model.LoanNumber)</dd> <dt>@Html.DisplayNameFor(model => model.DateAllocated)</dt> <dd>@ViewData["DateAllocated"]</dd> <dt>@Html.DisplayNameFor(model => model.ProcessedBy)</dt> <dd>@Html.DisplayFor(model => model.ProcessedBy)</dd> <dt>@Html.DisplayNameFor(model => model.Customer)</dt> <dd>@Html.DisplayFor(model => model.Customer)</dd> <dt>@Html.DisplayNameFor(model => model.LoanType)</dt> <dd>@Html.DisplayFor(model => model.LoanType)</dd> <dt>@Html.DisplayNameFor(model => model.LoanAmount)</dt> <dd>@Html.DisplayFor(model => model.LoanAmount)</dd> <dt>@Html.DisplayNameFor(model => model.InterestRate)</dt> <dd>@Html.DisplayFor(model => model.InterestRate)</dd> <dt>@Html.DisplayNameFor(model => model.Periods)</dt> <dd>@Html.DisplayFor(model => model.Periods)</dd> <dt>@Html.DisplayNameFor(model => model.MonthlyPayment)</dt> <dd>@Html.DisplayFor(model => model.MonthlyPayment)</dd> <dt>@Html.DisplayNameFor(model => model.FutureValue)</dt> <dd>@Html.DisplayFor(model => model.FutureValue)</dd> <dt>@Html.DisplayNameFor(model => model.InterestAmount)</dt> <dd>@Html.DisplayFor(model => model.InterestAmount)</dd> <dt>@Html.DisplayNameFor(model => model.PaymentStartDate)</dt> <dd>@ViewData["PaymentStartDate"]</dd> </dl> </div> <p class="text-center"> @Html.ActionLink("Edit/Update Employee Record", "Edit", new { id = Model.LoanContractID }) :: @Html.ActionLink("Employees", "Index") </p>
@model WattsALoan1.Models.LoanContract @{ ViewBag.Title = "Loan Contract Preparation"; } <h2 class="text-center common-font maroon bold">Loan Contract Preparation</h2> @using (Html.BeginForm("Create", "LoansContracts", FormMethod.Post)) { <div class="containment1"> <div class="form-horizontal common-font"> <div class="heading"><p class="text-center">Contract Setup</p></div> <div class="form-group"> @Html.LabelFor(model => model.EmployeeID, htmlAttributes: new { @class = "control-label col-md-3 blue" }) <div class="col-md-2"> @Html.EditorFor(model => model.EmployeeID, new { htmlAttributes = new { @class = "form-control" } }) </div> <div class="col-md-6">@ViewBag.EmployeeDetails</div> </div> <div class="form-group"> @Html.LabelFor(model => model.DateAllocated, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.DateAllocated, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.LoanNumber, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.TextBox("LoanNumber", ViewBag.LoanNumber as string, htmlAttributes: new { @class = "form-control" }) </div> </div> <div class="heading text-center"><p class="text-center">Customer Information</p></div> <div class="form-group"> @Html.LabelFor(model => model.CustomerFirstName, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.CustomerFirstName, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.CustomerLastName, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.CustomerLastName, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="heading text-center"><p class="text-center">Loan Details</p></div> <div class="form-group"> @Html.LabelFor(model => model.LoanType, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.DropDownList("LoanType", ViewBag.LoansTypes as SelectList, htmlAttributes: new { @class = "form-control col-md-5 blue" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.LoanAmount, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.LoanAmount, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.InterestRate, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.InterestRate, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Periods, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.Periods, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.FutureValue, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.TextBox("FutureValue", @ViewBag.FutureValue as string, htmlAttributes: new { @class = "form-control" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.InterestAmount, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.TextBox("InterestAmount", @ViewBag.InterestAmount as string, htmlAttributes: new { @class = "form-control" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.MonthlyPayment, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.TextBox("MonthlyPayment", @ViewBag.MonthlyPayment as string, htmlAttributes: new { @class = "form-control" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.PaymentStartDate, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.PaymentStartDate, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> </div> </div> <hr /> <p class="text-center"><input type="submit" value="Save Loan Contract" class="btn btn-primary" /></p> }
@model WattsALoan1.Models.LoanContract @{ ViewBag.Title = "Loan Contract Start-Up"; } <h2 class="bold maroon common-font text-center">Loan Contract Start-Up</h2> @using (Html.BeginForm("LoanContractPreparation", "LoansContracts", FormMethod.Post)) { <div class="containment"> <div class="form-horizontal common-font"> <div class="heading"><p class="text-center">Contract Setup</p></div> <div class="form-group"> @Html.LabelFor(model => model.EmployeeID, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.EmployeeID, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="heading"><p class="text-center">Preliminary Loan Information</p></div> <div class="form-group"> @Html.LabelFor(model => model.LoanAmount, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.LoanAmount, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.InterestRate, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.InterestRate, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Periods, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.Periods, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <hr /> <p class="text-center"> <input type="submit" value="Review Loan Contract" name="btnReviewLoanContract" class="btn btn-primary" /> </p> </div> </div> }
@{ ViewBag.Title = "Summary of Customers Accounts"; } <h2 class="bold maroon common-font text-center">Summary of Customers Accounts</h2> <div align="center"> @using (System.Data.SqlClient.SqlConnection scWattsALoan = new System.Data.SqlClient.SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { System.Data.SqlClient.SqlCommand cmdCustomers = new System.Data.SqlClient.SqlCommand("SELECT LoanNumber, LoanType, CustomerFirstName, CustomerLastName, " + " LoanAmount, MonthlyPayment, PaymentStartDate " + "FROM Clients;"); cmdCustomers.Connection = scWattsALoan; scWattsALoan.Open(); System.Data.SqlClient.SqlDataAdapter sdaCustomers = new System.Data.SqlClient.SqlDataAdapter(cmdCustomers); System.Data.DataSet dsCustomers = new System.Data.DataSet("clients"); sdaCustomers.Fill(dsCustomers); if (dsCustomers.Tables[0].Rows.Count > 0) { <table class="table table-hover common-font"> <tr> <td class="bold text-center">Loan #</td> <td class="bold">Loan Type</td> <td class="bold">Customer Name</td> <td class="bold">Amount of Loan</td> <td class="bold">Payment</td> <td class="bold text-center">Start Date</td> </tr> @foreach (System.Data.DataRow drCustomer in dsCustomers.Tables[0].Rows) { <tr> <td class="text-center">@drCustomer["LoanNumber"].ToString()</td> <td>@drCustomer["LoanType"].ToString()</td> <td>@drCustomer["CustomerFirstName"].ToString() @drCustomer["CustomerLastName"].ToString()</td> <td>@drCustomer["LoanAmount"].ToString()</td> <td>@drCustomer["MonthlyPayment"].ToString()/Month</td> <td class="text-center">@DateTime.Parse(drCustomer["PaymentStartDate"].ToString()).ToShortDateString()</td> </tr> } </table> } } </div>
Payments
A view is a query (a list of columns or a series of records retrieved) from one or more existing tables, or as a combination of one or more views and one or more tables, that is saved so it can be used one or more times. This means that, unlike a regular query, a query is a database object that has a name and is saved in the database. Before creating a view, you must first decide where its columns and records would come from. The easiest view is one whose columns and records come from one table.
Practical Learning: Creating Payments
using System; using System.ComponentModel.DataAnnotations; namespace WattsALoan1.Models { public class Payment { [Display(Name = "Payment ID")] public int PaymentID { get; set; } [Display(Name = "Receipt #")] public int ReceiptNumber { get; set; } [DataType(DataType.Date)] [Display(Name = "Payment Date")] public DateTime PaymentDate { get; set; } [Display(Name = "Employee ID")] public int EmployeeID { get; set; } [Display(Name = "Loan Contract ID")] public int LoanContractID { get; set; } [Display(Name = "Payment Amount")] public decimal PaymentAmount { get; set; } public decimal Balance { get; set; } } }
using System; using System.Net; using System.Data; using System.Linq; using System.Web.Mvc; using WattsALoan1.Models; using System.Data.SqlClient; using System.Collections.Generic; namespace WattsALoan1.Controllers { public class PaymentsController : Controller { private List<Payment> payments = new List<Payment>(); public List<Payment> GetPayments() { using (SqlConnection scWattsALoan = new SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { SqlCommand cmdPayments = new SqlCommand("SELECT PaymentID, ReceiptNumber, " + " PaymentDate, EmployeeID, " + " LoanContractID, PaymentAmount, Balance " + "FROM Management.Payments;", scWattsALoan); scWattsALoan.Open(); cmdPayments.ExecuteNonQuery(); SqlDataAdapter sdaPayments = new SqlDataAdapter(cmdPayments); DataSet dsPayments = new DataSet("payments"); sdaPayments.Fill(dsPayments); for (int i = 0; i < dsPayments.Tables[0].Rows.Count; i++) { DataRow drPayment = dsPayments.Tables[0].Rows[i]; payments.Add(new Payment() { PaymentID = int.Parse(drPayment[0].ToString()), ReceiptNumber = int.Parse(drPayment[1].ToString()), PaymentDate = DateTime.Parse(drPayment[2].ToString()), EmployeeID = int.Parse(drPayment[3].ToString()), LoanContractID = int.Parse(drPayment[4].ToString()), PaymentAmount = decimal.Parse(drPayment[5].ToString()), Balance = decimal.Parse(drPayment[6].ToString()) }); } } return payments; } // GET: Payments public ActionResult Index() { return View(GetPayments()); } // GET: Payments/Details/5 public ActionResult Details(int id) { PaymentDetail payment = null; if (id == 0) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } using (SqlConnection scWattsALoan = new SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { SqlCommand cmdPayments = new SqlCommand("SELECT PaymentID, ReceiptNumber, ReceivedBy, " + " PaymentDate, Customer, LoanType, " + " LoanAmount, PaymentAmount, Balance " + "FROM Management.PaymentsSummary;", scWattsALoan); scWattsALoan.Open(); cmdPayments.ExecuteNonQuery(); SqlDataAdapter sdaPayments = new SqlDataAdapter(cmdPayments); DataSet dsPayments = new DataSet("payments"); sdaPayments.Fill(dsPayments); for (int i = 0; i < dsPayments.Tables[0].Rows.Count; i++) { DataRow drPayment = dsPayments.Tables[0].Rows[i]; if (int.Parse(drPayment[0].ToString()) == id) { payment = new PaymentDetail() { PaymentID = int.Parse(drPayment[0].ToString()), ReceiptNumber = int.Parse(drPayment[1].ToString()), ReceivedBy = drPayment[2].ToString(), PaymentDate = DateTime.Parse(drPayment[3].ToString()), Customer = drPayment[4].ToString(), LoanType = drPayment[5].ToString(), LoanAmount = decimal.Parse(drPayment[6].ToString()), PaymentAmount = decimal.Parse(drPayment[7].ToString()), Balance = decimal.Parse(drPayment[8].ToString()) }; break; } } } if (payment == null) { return HttpNotFound(); } ViewData["PaymentDate"] = payment.PaymentDate.ToLongDateString(); return View(); } // GET: LoansContracts/PaymentStartUp public ActionResult PaymentStartUp() { return View(); } // GET: LoansContracts/LoanContractPreparation public ActionResult PaymentPreparation(string EmployeeID, string LoanContractID) { decimal paymentAmount = 0; decimal previousBalance = 0; Random rndNumber = new Random(); ViewBag.ReceiptNumber = rndNumber.Next(100001, 999999); using (SqlConnection scWattsALoan = new SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { // Locate the employee based on the employee number that was entered SqlCommand cmdEmployees = new SqlCommand("SELECT FirstName, LastName, EmploymentTitle " + "FROM HumanResources.Employees " + "WHERE EmployeeID = " + EmployeeID + ";") { Connection = scWattsALoan }; scWattsALoan.Open(); // Store the employee in a data set. SqlDataAdapter sdaEmployees = new SqlDataAdapter(cmdEmployees); DataSet dsEmployees = new DataSet("employees"); sdaEmployees.Fill(dsEmployees); // If there is an employee record for the employee number that was provided, ... if (dsEmployees.Tables[0].Rows.Count > 0) { // ... create a string using that employee information and store that string in a view bag. ViewBag.EmployeeDetails = dsEmployees.Tables[0].Rows[0][0].ToString() + " " + dsEmployees.Tables[0].Rows[0][1].ToString() + " (" + dsEmployees.Tables[0].Rows[0][2].ToString() + ")"; } else { // If there is no employee for the employee number that was provided, don't sweat. return RedirectToAction("LoanContractStartUp"); } } // Open a contract based on the loan number that was provided using (SqlConnection scWattsALoan = new SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { SqlCommand cmdContracts = new SqlCommand("SELECT CustomerFirstName, CustomerLastName, " + " LoanType, LoanAmount, " + " InterestRate, Periods, MonthlyPayment, " + " EmployeeID, FutureValue, " + " InterestAmount, PaymentStartDate " + "FROM Management.LoanContracts " + "WHERE LoanContractID = " + LoanContractID + ";"); cmdContracts.Connection = scWattsALoan; scWattsALoan.Open(); SqlDataAdapter sdaContracts = new SqlDataAdapter(cmdContracts); DataSet dsContracts = new DataSet("loans-contracts"); sdaContracts.Fill(dsContracts); // If the loan number exists, ... if (dsContracts.Tables[0].Rows.Count > 0) { // Prepare some information that will be displayed on a form ViewBag.LoanDetails = "Granted to " + dsContracts.Tables[0].Rows[0]["CustomerFirstName"].ToString() + " " + dsContracts.Tables[0].Rows[0]["CustomerLastName"].ToString() + " for a " + dsContracts.Tables[0].Rows[0]["LoanType"].ToString() + " loan of " + dsContracts.Tables[0].Rows[0]["LoanAmount"].ToString() + " (" + dsContracts.Tables[0].Rows[0]["InterestRate"].ToString() + "% interest rate for " + dsContracts.Tables[0].Rows[0]["Periods"].ToString() + " months)."; paymentAmount = decimal.Parse(dsContracts.Tables[0].Rows[0]["MonthlyPayment"].ToString()); /* We need the future value of the loan. * It could be used as the previous balance if no payment has even been made on the loan. */ previousBalance = decimal.Parse(dsContracts.Tables[0].Rows[0]["FutureValue"].ToString()); } } // Open the list of payments if it contains some records using (SqlConnection scWattsALoan = new SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { // Get the list of payments that use the provided loan number SqlCommand cmdContracts = new SqlCommand("SELECT Balance " + "FROM Management.Payments " + "WHERE LoanContractID = " + LoanContractID) { Connection = scWattsALoan }; scWattsALoan.Open(); // Store the list of payments in a data set SqlDataAdapter sdaPayments = new SqlDataAdapter(cmdContracts); DataSet dsPayments = new DataSet("payments"); sdaPayments.Fill(dsPayments); // If there is at least one payment made for the provided loan number, ... if (dsPayments.Tables[0].Rows.Count > 0) { // ... scan the list of record from begining to end for (int i = 0; i < dsPayments.Tables[0].Rows.Count; i++) { // The goal is to get the last balance that was set for the loan previousBalance = decimal.Parse(dsPayments.Tables[0].Rows[i]["Balance"].ToString()); } } /* If no payment was ever made for the loan, then the previous balance is the future value. * If there was at least one payment made for the loan, then a balance had been set. * That balance will be used as the previous balance. */ // Calculate the ne balance by monthly payment from the previous balance // Prepare the values to be sent to a form ViewBag.Balance = previousBalance - paymentAmount; ViewBag.PaymentAmount = paymentAmount; ViewBag.PreviousBalance = previousBalance; } return View(); } // GET: Payments/Create public ActionResult Create() { return View(); } // POST: Payments/Create [HttpPost] public ActionResult Create(FormCollection collection) { try { // TODO: Add insert logic here if (!string.IsNullOrEmpty(collection["EmployeeID"])) { using (SqlConnection scWattsALoan = new SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { SqlCommand cmdLoanPayment = new SqlCommand("INSERT Management.LoanPayment " + "VALUES(" + collection["ReceiptNumber"] + ", " + collection["EmployeeID"] + ", " + collection["LoanContractID"] + ", N'" + collection["PaymentDate"] + "', " + collection["PaymentAmount"] + ", " + collection["Balance"] + ");"); cmdLoanPayment.Connection = scWattsALoan; scWattsALoan.Open(); cmdLoanPayment.ExecuteNonQuery(); } } return RedirectToAction("Index"); } catch { return View(); } } // GET: Payments/Edit/5 public ActionResult Edit(int id) { if (id == 0) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Payment payment = null; foreach (Payment pmt in GetPayments()) { if (pmt.PaymentID == id) { payment = pmt; break; } } if (payment == null) return HttpNotFound(); return View(payment); } // POST: Payments/Edit/5 [HttpPost] public ActionResult Edit(int id, FormCollection collection) { try { // TODO: Add update logic here using (SqlConnection scRentManagement = new SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { SqlCommand cmdPayments = new SqlCommand("UPDATE Management.Payments " + "SET ReceiptNumber = N'" + collection["ReceiptNumber"] + "', " + " PaymentDate = N'" + collection["PaymentDate"] + "', " + " EmployeeID = N'" + collection["EmployeeID"] + "', " + " LoanContractID = N'" + collection["LoanContractID"] + "', " + " PaymentAmount = N'" + collection["PaymentAmount"] + "', " + " Balance = N'" + collection[" Balance"] + "' " + "WHERE PaymentID = N'" + id + "';", scRentManagement); scRentManagement.Open(); cmdPayments.ExecuteNonQuery(); } return RedirectToAction("Index"); } catch { return View(); } } // GET: Payments/Delete/5 public ActionResult Delete(int id) { if (id == 0) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Payment payment = null; foreach (Payment pmt in GetPayments()) { if (pmt.PaymentID == id) { payment = pmt; break; } } if (payment == null) return HttpNotFound(); return View(payment); } // POST: Payments/Delete/5 [HttpPost] public ActionResult Delete(int id, FormCollection collection) { try { // TODO: Add delete logic here using (SqlConnection scRentManagement = new SqlConnection(System.Configuration. ConfigurationManager. ConnectionStrings["csWattsALoan"]. ConnectionString)) { SqlCommand cmdPayments = new SqlCommand("DELETE Management.Payments " + "WHERE PaymentID = " + id + ";", scRentManagement); scRentManagement.Open(); cmdPayments.ExecuteNonQuery(); } return RedirectToAction("Index"); } catch { return View(); } } } }
@model IEnumerable<WattsALoan1.Models.Payment> @{ /**/ ViewBag.Title = "Loans Payments"; } <h2 class="bold maroon common-font text-center">Loans Payments</h2> <table class="table table-hover common-font"> <tr> <th class="text-center">@Html.DisplayNameFor(model => model.PaymentID)</th> <th>@Html.DisplayNameFor(model => model.ReceiptNumber)</th> <th>@Html.DisplayNameFor(model => model.PaymentDate)</th> <th>@Html.DisplayNameFor(model => model.EmployeeID)</th> <th>@Html.DisplayNameFor(model => model.LoanContractID)</th> <th>@Html.DisplayNameFor(model => model.PaymentAmount)</th> <th>@Html.DisplayNameFor(model => model.Balance)</th> <th>@Html.ActionLink("Make Loan Payment", "PaymentStartUp")</th> </tr> @foreach (var item in Model) { <tr> <td class="text-center">@Html.DisplayFor(modelItem => item.PaymentID)</td> <td>@Html.DisplayFor(modelItem => item.ReceiptNumber)</td> <td>@Html.DisplayFor(modelItem => item.PaymentDate)</td> <td class="text-center">@Html.DisplayFor(modelItem => item.EmployeeID)</td> <td class="text-center">@Html.DisplayFor(modelItem => item.LoanContractID)</td> <td>@Html.DisplayFor(modelItem => item.PaymentAmount)</td> <td>@Html.DisplayFor(modelItem => item.Balance)</td> <td> @Html.ActionLink("Edit", "Edit", new { id = item.PaymentID }) | @Html.ActionLink("Details", "Details", new { id = item.PaymentID }) | @Html.ActionLink("Delete", "Delete", new { id = item.PaymentID }) </td> </tr> } </table>
@model WattsALoan1.Models.Payment @{ ViewBag.Title = "Payment Start-Up"; } <h2 class="bold maroon common-font text-center">Payment Start-Up</h2> @using (Html.BeginForm("PaymentPreparation", "Payments", FormMethod.Post)) { <div class="containment"> <div class="form-horizontal common-font"> <div class="heading"><p class="text-center">Payment Received By</p></div> <div class="form-group"> @Html.LabelFor(model => model.EmployeeID, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.EmployeeID, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="heading"><p class="text-center">Contract Information</p></div> <div class="form-group"> @Html.LabelFor(model => model.LoanContractID, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.LoanContractID, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> </div> <hr /> <p class="text-center"> <input type="submit" value="Prepare Loan Payment" name="btnPrepareLoanPayment" class="btn btn-primary" /> </p> </div> }
@model WattsALoan1.Models.Payment @{ ViewBag.Title = "Loan Payment Preparation"; } <h2 class="bold maroon common-font text-center">Loan Payment Preparation</h2> @using (Html.BeginForm("Create", "Payments", FormMethod.Post)) { <div class="containment1"> <div class="form-horizontal common-font"> <div class="heading"><p class="text-center">Payment Setup</p></div> <div class="form-group"> @Html.LabelFor(model => model.EmployeeID, htmlAttributes: new { @class = "control-label col-md-3 blue" }) <div class="col-md-2"> @Html.EditorFor(model => model.EmployeeID, new { htmlAttributes = new { @class = "form-control" } }) </div> <div class="col-md-6">@ViewBag.EmployeeDetails</div> </div> <div class="form-group"> <label class="control-label col-md-5 blue">Receipt #</label> <div class="col-md-7"> @Html.TextBox("ReceiptNumber", ViewBag.ReceiptNumber as string, htmlAttributes: new { @class = "form-control" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.PaymentDate, htmlAttributes: new { @class = "control-label col-md-5 blue" }) <div class="col-md-7"> @Html.EditorFor(model => model.PaymentDate, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="heading"><p class="text-center">Loan Information</p></div> <div class="form-group"> <label class="control-label col-md-5 blue">Loan Contract ID</label> <div class="col-md-7"> @Html.TextBox("LoanContractID", ViewBag.LoanContractID as string, htmlAttributes: new { @class = "form-control" }) </div> </div> <div class="form-group"> <label class="control-label col-md-5 blue">Loan Details</label> <div class="col-md-7"> @Html.TextArea("LoanDetails", ViewBag.LoanDetails as string, htmlAttributes: new { @class = "form-control", cols = 60, rows = 4 }) </div> </div> <div class="form-group"> <label class="control-label col-md-5 blue">Previous Balance</label> <div class="col-md-7"> @Html.TextBox("PreviousBalance", ViewBag.PreviousBalance as string, htmlAttributes: new { @class = "form-control" }) </div> </div> <div class="form-group"> <label class="control-label col-md-5 blue">Amount Paid</label> <div class="col-md-3"> @Html.TextBox("PaymentAmount", ViewBag.PaymentAmount as string, htmlAttributes: new { @class = "form-control" }) </div> <div class="col-md-3"> <div class="top-padding">/Month</div> </div> </div> <div class="form-group"> <label class="control-label col-md-5 blue">New Balance</label> <div class="col-md-7"> @Html.TextBox("Balance", ViewBag.Balance as string, htmlAttributes: new { @class = "form-control", cols = 60, rows = 4 }) </div> </div> <hr /> </div> <p class="text-center"><input type="submit" value="Save Loan Contract" class="btn btn-primary" /></p> </div> }
@model WattsALoan1.Models.PaymentDetail @{ ViewBag.Title = "Payment Details"; } <h2 class="bold text-center common-font maroon">Payment Summary</h2> <hr /> <div class="containment"> <dl class="dl-horizontal common-font"> <dt>@Html.DisplayNameFor(model => model.PaymentID)</dt> <dd>@Html.DisplayFor(model => model.PaymentID)</dd> <dt>@Html.DisplayNameFor(model => model.ReceiptNumber)</dt> <dd>@Html.DisplayFor(model => model.ReceiptNumber)</dd> <dt>@Html.DisplayNameFor(model => model.ReceivedBy)</dt> <dd>@Html.DisplayFor(model => model.ReceivedBy)</dd> <dt>@Html.DisplayNameFor(model => model.PaymentDate)</dt> <dd>@ViewData["PaymentDate"]</dd> <dt>@Html.DisplayNameFor(model => model.Customer)</dt> <dd>@Html.DisplayFor(model => model.Customer)</dd> <dt>@Html.DisplayNameFor(model => model.LoanType)</dt> <dd>@Html.DisplayFor(model => model.LoanType)</dd> <dt>@Html.DisplayNameFor(model => model.LoanAmount)</dt> <dd>@Html.DisplayFor(model => model.LoanAmount)</dd> <dt>@Html.DisplayNameFor(model => model.PaymentAmount)</dt> <dd>@Html.DisplayFor(model => model.PaymentAmount)</dd> <dt>@Html.DisplayNameFor(model => model.Balance)</dt> <dd>@Html.DisplayFor(model => model.Balance)</dd> </dl> </div> <p class="text-center"> @Html.ActionLink("Edit/Update this Payment", "Edit", new { id = Model.PaymentID }) :: @Html.ActionLink("Payments", "Index") </p>
@model WattsALoan1.Models.Payment @{ ViewBag.Title = "Delete Payment"; } <h2 class="bold common-font text-center maroon">Delete Payment</h2> <hr /> <h3 class="common-font maroon text-center">Are you sure you want to delete this employee's record?</h3> <div class="containment"> <dl class="dl-horizontal common-font"> <dt>@Html.DisplayNameFor(model => model.PaymentID)</dt> <dd>@Html.DisplayFor(model => model.PaymentID)</dd> <dt>@Html.DisplayNameFor(model => model.ReceiptNumber)</dt> <dd>@Html.DisplayFor(model => model.ReceiptNumber)</dd> <dt>@Html.DisplayNameFor(model => model.PaymentDate)</dt> <dd>@Html.DisplayFor(model => model.PaymentDate)</dd> <dt>@Html.DisplayNameFor(model => model.EmployeeID)</dt> <dd>@Html.DisplayFor(model => model.EmployeeID)</dd> <dt>@Html.DisplayNameFor(model => model.LoanContractID)</dt> <dd>@Html.DisplayFor(model => model.LoanContractID)</dd> <dt>@Html.DisplayNameFor(model => model.PaymentAmount)</dt> <dd>@Html.DisplayFor(model => model.PaymentAmount)</dd> <dt>@Html.DisplayNameFor(model => model.Balance)</dt> <dd>@Html.DisplayFor(model => model.Balance)</dd> </dl> @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="form-actions no-color"> @Html.ActionLink("Payments", "Index") :: <input type="submit" value="Delete Payment" class="btn btn-primary" /> </div> } </div>
@model WattsALoan1.Models.Payment @{ ViewBag.Title = "Edit/Update Loan Payment"; } <h2 class=" bold maroon common-font text-center">Edit/Update Loan Payment</h2> <hr /> @using (Html.BeginForm()) { <div class="form-horizontal common-font"> <div class="form-group"> @Html.LabelFor(model => model.ReceiptNumber, htmlAttributes: new { @class = "control-label col-md-5" }) <div class="col-md-7"> @Html.EditorFor(model => model.ReceiptNumber, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.PaymentDate, htmlAttributes: new { @class = "control-label col-md-5" }) <div class="col-md-7"> @Html.EditorFor(model => model.PaymentDate, new { htmlAttributes = new { @class = "form-control", type = "date" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.EmployeeID, htmlAttributes: new { @class = "control-label col-md-5" }) <div class="col-md-7"> @Html.EditorFor(model => model.EmployeeID, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.LoanContractID, htmlAttributes: new { @class = "control-label col-md-5" }) <div class="col-md-7"> @Html.EditorFor(model => model.LoanContractID, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.PaymentAmount, htmlAttributes: new { @class = "control-label col-md-5" }) <div class="col-md-7"> @Html.EditorFor(model => model.PaymentAmount, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Balance, htmlAttributes: new { @class = "control-label col-md-5" }) <div class="col-md-7"> @Html.EditorFor(model => model.Balance, new { htmlAttributes = new { @class = "form-control" } }) </div> </div> <div class="form-group"> <label class="control-label col-md-5">@Html.ActionLink("Payments", "Index")</label> <div class="col-md-7"> <input type="submit" value="Update Loan Payment" class="btn btn-primary" /> </div> </div> </div> }
Application Startup
Whenever you have created an application, you should provide a clear way for users to know where to start. For a website, you should take care of the layout page and the Index document of the Home controller.
Practical Learning: Performing Data Entry Using a View
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Watts' A Loan :: @ViewBag.Title</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") </head> <body> <div class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> @Html.ActionLink("Watts' A Loan", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li>@Html.ActionLink("Employees", "Index", "Employees")</li> <li>@Html.ActionLink("Loans Contracts", "Index", "LoansContracts")</li> <li>@Html.ActionLink("Payments", "Index", "Payments")</li> <li>@Html.ActionLink("About Watts' A Loan", "About", "Home")</li> <li>@Html.ActionLink("Contact Us", "Contact", "Home")</li> </ul> </div> </div> </div> <div class="container body-content"> @RenderBody() <hr /> <footer> <p class="text-center">© @DateTime.Now.Year - Watts' A Loan</p> </footer> </div> @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @RenderSection("scripts", required: false) </body> </html>
@{ ViewBag.Title = "Home Page"; } <div class="jumbotron"> <h1>ASP.NET</h1> <p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.</p> <p><a href="https://asp.net" class="btn btn-primary btn-lg">Learn more »</a></p> </div> <div class="row"> <div class="col-md-4"> <h2>Getting started</h2> <p> ASP.NET MVC gives you a powerful, patterns-based way to build dynamic websites that enables a clean separation of concerns and gives you full control over markup for enjoyable, agile development. </p> <p><a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkId=301865">Learn more »</a></p> </div> <div class="col-md-4"> <h2>Get more libraries</h2> <p>NuGet is a free Visual Studio extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects.</p> <p><a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkId=301866">Learn more »</a></p> </div> <div class="col-md-4"> <h2>Web Hosting</h2> <p>You can easily find a web hosting company that offers the right mix of features and price for your applications.</p> <p><a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkId=301867">Learn more »</a></p> </div> </div>
Employee # | First Name | Last Name | Employment Title |
293-747 | Catherine | Watts | Owner - General Manager |
836-486 | Thomas | Felton | Accounts Representative |
492-947 | Caroline | Wernick | Assistant Manager |
240-750 | Catherine | Donato | Accounts Representative |
804-685 | Melissa | Browns | Customer Accounts Representative |
429-374 | Denise | Leighton | Accounts Manager |
INSERT Employees VALUES(N'293-747', N'Catherine', N'Watts', N'Owner'), (N'836-486', N'Thomas', N'Felton', N'Accounts Representative'), (N'492-947', N'Caroline', N'Wernick', N'Assistant Manager'), (N'240-750', N'Catherine', N'Donato', N'Accounts Representative'), (N'804-685', N'Melissa', N'Browns', N'Customer Accounts Representative'), (N'429-374', N'Denise', N'Leighton', N'Accounts Manager'); GO
Processed By: 6 Loan Amount: 2500 Interest Rate: 14.65 Periods: 36
Allocation Date: 01/18/2018 First Name: Joanne Last Name: Kennan Payment Start Date: 02/01/2018
Processed By | Loan Amount | Interest Rate | Periods | Allocation Date | First Name | Last Name | Type of Loan | Payment Start Date |
3 | 16500 | 12.25 | 60 | 01/22/2018 | Stephanie | Haller | Boat Financing | 03/01/2018 |
6 | 2258.75 | 16.15 | 36 | 03/12/18 | Annette | Vargas | Furniture Purchase | 01-May-2018 |
2 | 22748 | 10.25 | 60 | 12-Mar-18 | Gérard | Maloney | Car Financing | 05-01-2018 |
Employee ID: 6 Loan Contract ID: 1
Employee ID | Loa Contract ID | Payment Date |
3 | 2 | 03/30/2018 |
4 | 1 | 04/01/18 |
6 | 1 | 04-30-2018 |
2 | 2 | 04-30-2018 |
2 | 4 | 05-22-2018 |
2 | 1 | 25-May-2018 |
6 | 3 | 05/28/2018 |
6 | 2 | 30-May-2018 |
3 | 4 | 31-May-18 |
2 | 3 | 30-Jun-2018 |
2 | 1 | 02-Jul-18 |
|
|||
Home | Copyright © 2001-2022, FunctionX | Thursday 05 May 2022 | Home |
|