ASP.NET MVC - XML: Water Distribution Company
ASP.NET MVC - XML: Water Distribution Company
Introduction
A water distribution company delivers water to homes and commercial buildings. In this exercise, we will create an application for a fictitious company that distributes and sells water. This version of the application creates and stores records in XML.
Practical Learning: Introducing XML Node Maintenance
body { background-color: #2b5b8f; } .bold { font-weight: 600; } .top-bar { top: 0; width: 100%; z-index: 1000; position: fixed; height: 6.85em; background-color: #203864; } .containment { margin: auto; width: 460px; } .navbar-inverse { background-color: #001132; border-top: 3px solid #cfdde0; border-bottom: 3px solid #cfdde0; } .navbar-fixed-top { top: 6.75em; } .jumbotron { padding-bottom: 4px; background-color: #153a62; } .col-md-3 h2 { color: #abcbd9; border-bottom: 1px solid #cfdde0; } .lead { color: #cfdde0; } .col-md-3 p { color: #d5d4c2; } .caption { color: lightblue; } .control-label { font-weight: 400; font-family: Garamond, Georgia, 'Times New Roman', serif; } .copyright { color: #beeeab; } .push-down { margin-top: 8em; } .push-down h2 { font-weight: 600; font-size: 26px; text-align: center; color: #d5d4c2; font-family: Garamond, Georgia, 'Times New Roman', serif; } .push-down h3 { color: #abcbd9; } .push-down p { color: #cfdde0; } .water-nav { text-decoration: none; color: yellow; } .water-nav:link { color: lightcyan; } .water-nav:visited { color: aliceblue; } .water-nav:active { color: #a8c3ce; } .water-nav:hover { color: yellow; } .common-font { font-family: Garamond, Georgia, 'Times New Roman', serif; } .col-md-125 { min-height: 1px; padding-right: 15px; padding-left: 15px; width: 12.50%; position: relative; } @media (min-width: 992px) { .col-md-125 { float: left; width: 12.50%; } } .table-striped > tbody > tr:nth-of-type(even) { color: navy; background-color: azure; } .table-striped > tbody > tr:nth-of-type(odd) { color: aliceblue; background-color: cornflowerblue; }
using System.Web.Optimization;
namespace WaterDistribution2
{
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",
"~/Scripts/respond.js"));
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/site.css",
"~/Content/WaterDistribution.css"));
}
}
}
Water Meters
Utility companies use a device that measure what their customers consume. For example a water utility company installs water meters in residences and commercial buildings to find out how much water has been used. In this section, we will create a view that allows an employee to keep track of water consumption.
Practical Learning: Creating Water Meters
using System; using System.IO; using System.Xml; using System.Linq; using System.Web.Mvc; namespace WaterDistributionCompany1.Controllers { public class WaterMetersController : Controller { // GET: WaterMeters public ActionResult Index() { XmlDocument xdWaterMeters = new XmlDocument(); string strFileWaterMeters = Server.MapPath("/WaterDistribution/WaterMeters.xml"); if (System.IO.File.Exists(strFileWaterMeters)) { using (FileStream fsWaterMeters = new FileStream(strFileWaterMeters, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdWaterMeters.Load(fsWaterMeters); } if (xdWaterMeters.DocumentElement.ChildNodes.Count > 0) { ViewData["WaterMeters"] = xdWaterMeters.DocumentElement.ChildNodes; } else { ViewData["WaterMeters"] = null; } } return View(); } // GET: WaterMeters/Details/5 public ActionResult Details(int id) { XmlDocument xdWaterMeters = new XmlDocument(); string strFileWaterMeters = Server.MapPath("/WaterDistribution/WaterMeters.xml"); if (System.IO.File.Exists(strFileWaterMeters)) { using (FileStream fsWaterMeters = new FileStream(strFileWaterMeters, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdWaterMeters.Load(fsWaterMeters); XmlNodeList xnlWaterMeters = xdWaterMeters.GetElementsByTagName("meter-id"); foreach (XmlNode xnWaterMeter in xnlWaterMeters) { if (xnWaterMeter.InnerText == id.ToString()) { ViewData["WaterMeterID"] = xnWaterMeter.InnerText; ViewData["MeterNumber"] = xnWaterMeter.NextSibling.InnerText; ViewData["Make"] = xnWaterMeter.NextSibling.NextSibling.InnerText; ViewData["Model"] = xnWaterMeter.NextSibling.NextSibling.NextSibling.InnerText; ViewData["MeterSize"] = xnWaterMeter.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["DateLastUpdate"] = xnWaterMeter.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["CounterValue"] = xnWaterMeter.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; } } } } return View(); } // GET: WaterMeters/Create public ActionResult Create() { return View(); } // POST: WaterMeters/Create [HttpPost] public ActionResult Create(FormCollection collection) { try { // TODO: Add insert logic here int meter_id = -1; XmlDocument xdWaterMeters = new XmlDocument(); string strFileWaterMeters = Server.MapPath("/WaterDistribution/WaterMeters.xml"); // Make sure a meter number was provided. If not, don't do nothing if (!string.IsNullOrEmpty(collection["MeterNumber"])) { // If an XML file for water meters was created already, ... if (System.IO.File.Exists(strFileWaterMeters)) { // ... open it ... using (FileStream fsWaterMeters = new FileStream(strFileWaterMeters, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { // ... and put the records in the DOM xdWaterMeters.Load(fsWaterMeters); // We need the meters numbers. Therefore, use XPath to specify their path XmlNodeList xnlWaterMeters = xdWaterMeters.GetElementsByTagName("meter-id"); // Check the whole list of meters numbers foreach (XmlNode xnWaterMeter in xnlWaterMeters) { // Every time, assign the current meter number to our meterNumber variable meter_id = int.Parse(xnWaterMeter.InnerText); } } } else { // If there is no XML file yet, create skeleton code for an XML document, ... xdWaterMeters.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<water-meters></water-meters>"); // and set our meterNumber variable to 0 meter_id = 0; } } // Get ready to create an XML element named water-meter XmlElement xeWaterMeter = xdWaterMeters.CreateElement("water-meter"); // Increase the meterNumber variable by 1 meter_id += 1; // Create the markup of the XML water meter string strWaterMeter = "<meter-id>" + meter_id + "</meter-id>" + "<meter-number>" + collection["MeterNumber"] + "</meter-number>" + "<make>" + collection["Make"] + "</make>" + "<model>" + collection["Model"] + "</model>" + "<meter-size>" + collection["MeterSize"] + "</meter-size>" + "<date-last-update>" + collection["DateLastUpdate"] + "</date-last-update>" + "<counter-value>" + collection["CounterValue"] + "</counter-value>"; // Specify the markup of the new element xeWaterMeter.InnerXml = strWaterMeter; // Add the new node to the root xdWaterMeters.DocumentElement.AppendChild(xeWaterMeter); // Save the (new version of the) XML file using (FileStream fsWaterMeters = new FileStream(strFileWaterMeters, FileMode.Create, FileAccess.Write, FileShare.Write)) { xdWaterMeters.Save(fsWaterMeters); } return RedirectToAction("Index"); } catch { return View(); } } // GET: WaterMeters/Edit/5 public ActionResult Edit(int id) { XmlDocument xdWaterMeters = new XmlDocument(); string strFileWaterMeters = Server.MapPath("/WaterDistribution/WaterMeters.xml"); if (System.IO.File.Exists(strFileWaterMeters)) { using (FileStream fsWaterMeters = new FileStream(strFileWaterMeters, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdWaterMeters.Load(fsWaterMeters); XmlNodeList xnlWaterMeters = xdWaterMeters.GetElementsByTagName("meter-id"); foreach (XmlNode xnWaterMeter in xnlWaterMeters) { if (xnWaterMeter.InnerText == id.ToString()) { ViewData["WaterMeterID"] = xnWaterMeter.InnerText; ViewData["MeterNumber"] = xnWaterMeter.NextSibling.InnerText; ViewData["Make"] = xnWaterMeter.NextSibling.NextSibling.InnerText; ViewData["Model"] = xnWaterMeter.NextSibling.NextSibling.NextSibling.InnerText; ViewData["MeterSize"] = xnWaterMeter.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["DateLastUpdate"] = xnWaterMeter.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["CounterValue"] = xnWaterMeter.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; } } } } return View(); } // POST: WaterMeters/Edit/5 [HttpPost] public ActionResult Edit(int id, FormCollection collection) { try { // TODO: Add update logic here XmlDocument xdWaterMeters = new XmlDocument(); string strFileWaterMeters = Server.MapPath("/WaterDistribution/WaterMeters.xml"); if (System.IO.File.Exists(strFileWaterMeters)) { using (FileStream fsWaterMeters = new FileStream(strFileWaterMeters, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) { xdWaterMeters.Load(fsWaterMeters); } XmlNodeList xnlWaterMeters = xdWaterMeters.GetElementsByTagName("meter-id"); using (FileStream fsWaterMeters = new FileStream(strFileWaterMeters, FileMode.Truncate, FileAccess.ReadWrite, FileShare.ReadWrite)) { foreach (XmlNode xnWaterMeter in xnlWaterMeters) { if (xnWaterMeter.InnerText == id.ToString()) { xnWaterMeter.ParentNode.InnerXml = "<meter-id>" + id + "</meter-id>" + "<meter-number>" + collection["MeterNumber"] + "</meter-number>" + "<make>" + collection["Make"] + "</make>" + "<model>" + collection["Model"] + "</model>" + "<meter-size>" + collection["MeterSize"] + "</meter-size>" + "<date-last-update>" + collection["DateLastUpdate"] + "</date-last-update>" + "<counter-value>" + collection["CounterValue"] + "</counter-value>"; xdWaterMeters.Save(fsWaterMeters); break; } } } } return RedirectToAction("Index"); } catch { return View(); } } // GET: WaterMeters/Delete/5 public ActionResult Delete(int id) { XmlDocument xdWaterMeters = new XmlDocument(); string strFileWaterMeters = Server.MapPath("/WaterDistribution/WaterMeters.xml"); if (System.IO.File.Exists(strFileWaterMeters)) { using (FileStream fsWaterMeters = new FileStream(strFileWaterMeters, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdWaterMeters.Load(fsWaterMeters); XmlNodeList xnlWaterMeters = xdWaterMeters.GetElementsByTagName("meter-id"); foreach (XmlNode xnWaterMeter in xnlWaterMeters) { if (xnWaterMeter.InnerText == id.ToString()) { ViewData["WaterMeterID"] = xnWaterMeter.InnerText; ViewData["MeterNumber"] = xnWaterMeter.NextSibling.InnerText; ViewData["Make"] = xnWaterMeter.NextSibling.NextSibling.InnerText; ViewData["Model"] = xnWaterMeter.NextSibling.NextSibling.NextSibling.InnerText; ViewData["MeterSize"] = xnWaterMeter.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["DateLastUpdate"] = xnWaterMeter.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["CounterValue"] = xnWaterMeter.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; } } } } return View(); } // POST: WaterMeters/Delete/5 [HttpPost] public ActionResult Delete(int id, FormCollection collection) { try { // TODO: Add delete logic here XmlDocument xdWaterMeters = new XmlDocument(); string strFileWaterMeters = Server.MapPath("/WaterDistribution/WaterMeters.xml"); /* Make sure an XML file for the water meters was previously created * (normally, this is not necessary; if there is no such file, this code * will never run because it is completely based on routing) */ if (System.IO.File.Exists(strFileWaterMeters)) { using (FileStream fsWaterMeters = new FileStream(strFileWaterMeters, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdWaterMeters.Load(fsWaterMeters); } // Get ready to change something on the file using (FileStream fsWaterMeters = new FileStream(strFileWaterMeters, FileMode.Truncate, FileAccess.Write, FileShare.Write)) { // Get a collection of water meter nodes XmlNodeList xnlWaterMeters = xdWaterMeters.GetElementsByTagName("water-meter"); // Check each node foreach (XmlNode xnWaterMeter in xnlWaterMeters) { /* If you find a water-meter record whose meter-id is * the same as the id of the record the user clicked, ... */ if (xnWaterMeter.FirstChild.InnerText == id.ToString()) { // ... ask its parent to delete that record xnWaterMeter.ParentNode.RemoveChild(xnWaterMeter); // Now that the record has been deleted, save the XML file xdWaterMeters.Save(fsWaterMeters); break; } } } } return RedirectToAction("Index"); } catch { return View(); } } } }
@{ ViewBag.Title = "Water Meters"; } <div class="push-down"> <h2 class="common-font bold text-center">Water Meters</h2> </div> <hr /> <table class="table table-striped common-font"> <tr> <th class="bold">Meter ID</th> <th class="bold">Meter #</th> <th class="bold">Make</th> <th class="bold">Model</th> <th class="bold">Meter Size</th> <th class="bold">Date Last Update</th> <th class="bold">Counter Value</th> <th>@Html.ActionLink("New Water Meter", "Create", null, htmlAttributes: new { @class = "water-nav" })</th> </tr> @if (ViewBag.waterMeters != null) { foreach (System.Xml.XmlNode meter in ViewBag.WaterMeters as System.Xml.XmlNodeList) { <tr> <td class="text-center">@meter.FirstChild.InnerText</td> <td>@meter.FirstChild.NextSibling.InnerText</td> <td>@meter.FirstChild.NextSibling.NextSibling.InnerText</td> <td>@meter.FirstChild.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@meter.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@meter.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@meter.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td> @Html.ActionLink("Update", "Edit", new { id = @meter.FirstChild.InnerText }) :: @Html.ActionLink("Review", "Details", new { id = @meter.FirstChild.InnerText }) :: @Html.ActionLink("Remove", "Delete", new { id = @meter.FirstChild.InnerText }) </td> </tr> } } </table>
@{ ViewBag.Title = "Water Meter Details"; } <div class="push-down"> <h2>Water Meter Details</h2> </div> <hr /> <div class="containment"> <dl class="dl-horizontal common-font caption"> <dt class="bold">Meter ID:</dt> <dd>@ViewData["WaterMeterID"]</dd> <dt>Water Meter #:</dt> <dd>@ViewData["MeterNumber"]</dd> <dt>Make:</dt> <dd>@ViewData["Make"]</dd> <dt>Model:</dt> <dd>@ViewData["Model"]</dd> <dt>Meter Size:</dt> <dd>@ViewData["MeterSize"]</dd> <dt>Date Last Update:</dt> <dd>@ViewData["DateLastUpdate"]</dd> <dt>Counter Value:</dt> <dd>@ViewData["CounterValue"]</dd> </dl> </div> <p class="text-center"> @Html.ActionLink("Edit/Update Water Meter Information", "Edit", new { id = ViewData["WaterMeterID"] }, htmlAttributes: new { @class = "water-nav" }) :: @Html.ActionLink("Water Meters", "Index", null, new { @class = "water-nav" }) </p>
@{ ViewBag.Title = "New Water Meter"; } <div class="push-down"> <h2>New Water Meter</h2> </div> <hr /> @using (Html.BeginForm()) { <div class="form-horizontal"> <div class="form-group"> <label for="mtrNbr" class="control-label col-md-4 caption">Meter #:</label> <div class="col-md-8"> @Html.TextBox("MeterNumber", null, htmlAttributes: new { @class = "form-control", id = "mtrNbr" }) </div> </div> <div class="form-group"> <label for="make" class="control-label col-md-4 caption">Make:</label> <div class="col-md-8"> @Html.TextBox("Make", null, htmlAttributes: new { @class = "form-control", id = "make" }) </div> </div> <div class="form-group"> <label for="model" class="control-label col-md-4 caption">Model:</label> <div class="col-md-8"> @Html.TextBox("Model", null, htmlAttributes: new { @class = "form-control", id = "model" }) </div> </div> <div class="form-group"> <label for="mtrSize" class="control-label col-md-4 caption">Meter Size:</label> <div class="col-md-8"> @Html.TextBox("MeterSize", null, htmlAttributes: new { @class = "form-control", id = "mtrSize" }) </div> </div> <div class="form-group"> <label for="dlu" class="control-label col-md-4 caption">Date Last Update:</label> <div class="col-md-8"> @Html.TextBox("DateLastUpdate", null, htmlAttributes: new { @class = "form-control", type = "date", id = "dlu" }) </div> </div> <div class="form-group"> <label for="cntVal" class="control-label col-md-4 caption">Counter Value:</label> <div class="col-md-8"> @Html.TextBox("CounterValue", null, htmlAttributes: new { @class = "form-control", id = "cntVal" }) </div> </div> <div class="form-group"> <label class="control-label col-md-5"> @Html.ActionLink("Water Meters", "Index", null, htmlAttributes: new { @class = "water-nav" }) </label> <div class="col-md-7"> <input type="submit" value="Create Water Meter" class="btn btn-primary" /> </div> </div> </div> }
@{ ViewBag.Title = "Edit/Update Water Meter"; } <div class="push-down"> <h2>Edit/Update Water Meter</h2> </div> <hr /> @using (Html.BeginForm()) { <div class="form-horizontal"> <div class="form-group"> <label class="control-label col-md-4 caption">Meter #:</label> <div class="col-md-8"> @Html.TextBox("WaterMeterID", ViewBag.WaterMeterID as string, htmlAttributes: new { @class = "form-control", disabled = "disabled" }) </div> </div> <div class="form-group"> <label for="mtrNbr" class="control-label col-md-4 caption">Meter #:</label> <div class="col-md-8"> @Html.TextBox("MeterNumber", ViewBag.MeterNumber as string, htmlAttributes: new { @class = "form-control", id = "mtrNbr" }) </div> </div> <div class="form-group"> <label for="make" class="control-label col-md-4 caption">Make:</label> <div class="col-md-8"> @Html.TextBox("Make", ViewBag.Make as string, htmlAttributes: new { @class = "form-control", id = "make" }) </div> </div> <div class="form-group"> <label for="model" class="control-label col-md-4 caption">Model:</label> <div class="col-md-8"> @Html.TextBox("Model", ViewBag.Model as string, htmlAttributes: new { @class = "form-control", id = "model" }) </div> </div> <div class="form-group"> <label for="mtrSize" class="control-label col-md-4 caption">Meter Size:</label> <div class="col-md-8"> @Html.TextBox("MeterSize", ViewBag.MeterSize as string, htmlAttributes: new { @class = "form-control", id = "mtrSize" }) </div> </div> <div class="form-group"> <label for="dlu" class="control-label col-md-4 caption">Date Last Update:</label> <div class="col-md-8"> @Html.TextBox("DateLastUpdate", ViewBag.DateLastUpdate as string, htmlAttributes: new { @class = "form-control", type = "date", id = "dlu" }) </div> </div> <div class="form-group"> <label for="cntVal" class="control-label col-md-4 caption">Counter Value:</label> <div class="col-md-8"> @Html.TextBox("CounterValue", ViewBag.CounterValue as string, htmlAttributes: new { @class = "form-control", id = "cntVal" }) </div> </div> <div class="form-group"> <label class="control-label col-md-5"> @Html.ActionLink("Water Meters", "Index", null, htmlAttributes: new { @class = "water-nav" }) </label> <div class="col-md-7"> <input type="submit" value="Update Water Meter Details" class="btn btn-primary" /> </div> </div> </div> }
@{ ViewBag.Title = "Delete Water Meter"; } <div class="push-down"> <h2>Deleting Water Meter</h2> </div> <hr /> <div class="containment"> <dl class="dl-horizontal common-font caption"> <dt>Water Meter ID:</dt> <dd>@ViewBag.WaterMeterID</dd> <dt>Meter #:</dt> <dd>@ViewBag.MeterNumber</dd> <dt>Make:</dt> <dd>@ViewBag.Make</dd> <dt>Model:</dt> <dd>@ViewBag.Model</dd> <dt>Meter Size:</dt> <dd>@ViewBag.MeterSize</dd> <dt>Date Last Update:</dt> <dd>@ViewBag.DateLastUpdate</dd> <dt>Counter Value:</dt> <dd>@ViewBag.CounterValue</dd> </dl> <h3 class="common-font caption">Are you sure you want to remove this water meter from the system?</h3> @using (Html.BeginForm()) { <div class="form-actions no-color"> <input type="submit" value="Delete this Water Meter" class="btn btn-primary" /> | @Html.ActionLink("Water Meters", "Index", null, new { @class = "water-nav" }) </div> } </div>
Customers
Customers are people and companies that consume a resource such as water. In this section, we will create object that can assist the employees in creating and managing customers accounts.
Practical Learning: Creating Customers
using System; using System.IO; using System.Xml; using System.Linq; using System.Web.Mvc; namespace WaterDistributionCompany1.Controllers { public class CustomersController : Controller { // GET: Customers public ActionResult Index() { // Get a reference to the XML DOM XmlDocument xdCustomers = new XmlDocument(); // This is the name and path of the XML file that contains the customers records string strFileCustomers = Server.MapPath("/WaterDistribution/Customers.xml"); // If a file that contains the customers records was previously created, ... if (System.IO.File.Exists(strFileCustomers)) { // ... open it using (FileStream fsCustomers = new FileStream(strFileCustomers, FileMode.Open, FileAccess.Read, FileShare.Read)) { // and store the records in the DOM xdCustomers.Load(fsCustomers); } /* If the Customers records exist, send them to the view. * If there is no file for the customers, indicate that the DOM is null. */ ViewBag.Customers = xdCustomers.DocumentElement.ChildNodes.Count > 0 ? xdCustomers.DocumentElement.ChildNodes : null; } return View(); } // GET: Customers/Details/5 public ActionResult Details(int id) { XmlDocument xdCustomers = new XmlDocument(); string strFileCustomers = Server.MapPath("/WaterDistribution/Customers.xml"); if (System.IO.File.Exists(strFileCustomers)) { using (FileStream fsWaterMeters = new FileStream(strFileCustomers, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdCustomers.Load(fsWaterMeters); XmlNodeList xnlCustomers = xdCustomers.GetElementsByTagName("account-id"); foreach (XmlNode xnCustomer in xnlCustomers) { if (xnCustomer.InnerText == id.ToString()) { ViewBag.AccountID = xnCustomer.InnerText; ViewBag.AccountNumber = xnCustomer.NextSibling.InnerText; ViewBag.MeterNumber = xnCustomer.NextSibling.NextSibling.InnerText; ViewBag.FirstName = xnCustomer.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.LastName = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.Address = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.City = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.County = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.State = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.ZIPCode = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; } } } } return View(); } // GET: Customers/Create public ActionResult Create() { return View(); } // POST: Customers/Create [HttpPost] public ActionResult Create(FormCollection collection) { try { // TODO: Add insert logic here int account_id = -1; bool meterNumberIsValid = false; XmlDocument xdWaterMeters = new XmlDocument(); XmlDocument xdCustomersAccounts = new XmlDocument(); string strFileCustomers = Server.MapPath("/WaterDistribution/Customers.xml"); string strFileWaterMeters = Server.MapPath("/WaterDistribution/WaterMeters.xml"); // Make sure the user provides an account number, ... if (!string.IsNullOrEmpty(collection["AccountNumber"])) { // If the user provided an account number, to start, find out if a file for water meters was created already. if (System.IO.File.Exists(strFileWaterMeters)) { // If a file for water meters exists, open it using (FileStream fsWaterMeters = new FileStream(strFileWaterMeters, FileMode.Open, FileAccess.Read, FileShare.Read)) { // Store the list of water meters in an XML document xdWaterMeters.Load(fsWaterMeters); // Create a list of child nodes of the root node XmlNodeList xnlWaterMeters = xdWaterMeters.DocumentElement.ChildNodes; // Visit each node of the list of elements foreach (XmlNode xnWaterMeter in xnlWaterMeters) { // When you get to a list of (child) nodes of a water-meter node, visit each child node foreach (XmlNode xnMeterNumber in xnWaterMeter.ChildNodes) { // If you find a meter number that is the same as the meter number from the form, ... if (xnMeterNumber.InnerText == collection["MeterNumber"]) { // ... make a note meterNumberIsValid = true; } } } } } // If either the user didn't provide a meter number or provided a meter number that doesn't exist, ... if (meterNumberIsValid == false) { // ... create a message that will display to the user ViewBag.ErrorMessage = "You must provide a valid meter number"; } else { // It appears that the user provided both an account number and a valid meter number. // If an XML file for customers accounts was previously created, ... if (System.IO.File.Exists(strFileCustomers)) { // ... open it ... using (FileStream fsCustomers = new FileStream(strFileCustomers, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { // ... and put the records in the DOM xdCustomersAccounts.Load(fsCustomers); XmlNodeList xnlCustomers = xdCustomersAccounts.GetElementsByTagName("account-id"); foreach (XmlNode xnCustomer in xnlCustomers) { account_id = int.Parse(xnCustomer.InnerText); } } } else { // If there is no XML file yet for the customers, create skeleton code for an XML document xdCustomersAccounts.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<customers></customers>"); account_id = 0; } // Get ready to create an XML element named customer XmlElement xeCustomer = xdCustomersAccounts.CreateElement("customer"); account_id++; // Create the markup of the XML customer string strCustomer = "<account-id>" + account_id + "</account-id>" + "<account-number>" + collection["AccountNumber"] + "</account-number>" + "<meter-number>" + collection["MeterNumber"] + "</meter-number>" + "<first-name>" + collection["FirstName"] + "</first-name>" + "<last-name>" + collection["LastName"] + "</last-name>" + "<address>" + collection["Address"] + "</address>" + "<city>" + collection["City"] + "</city>" + "<county>" + collection["County"] + "</county>" + "<state>" + collection["State"] + "</state>" + "<zip-code>" + collection["ZIPCode"] + "</zip-code>"; // Specify the markup of the new element xeCustomer.InnerXml = strCustomer; // Add the new node to the root xdCustomersAccounts.DocumentElement.AppendChild(xeCustomer); // Save the (new version of the) XML file using (FileStream fsCustomers = new FileStream(strFileCustomers, FileMode.Create, FileAccess.Write, FileShare.Write)) { xdCustomersAccounts.Save(fsCustomers); } } } return RedirectToAction("Index"); } catch { return View(); } } // GET: Customers/Edit/5 public ActionResult Edit(int id) { XmlDocument xdCustomers = new XmlDocument(); string strFileCustomers = Server.MapPath("/WaterDistribution/Customers.xml"); if (System.IO.File.Exists(strFileCustomers)) { using (FileStream fsWaterMeters = new FileStream(strFileCustomers, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdCustomers.Load(fsWaterMeters); XmlNodeList xnlCustomers = xdCustomers.GetElementsByTagName("account-id"); foreach (XmlNode xnCustomer in xnlCustomers) { if (xnCustomer.InnerText == id.ToString()) { ViewBag.AccountID = xnCustomer.InnerText; ViewBag.AccountNumber = xnCustomer.NextSibling.InnerText; ViewBag.MeterNumber = xnCustomer.NextSibling.NextSibling.InnerText; ViewBag.FirstName = xnCustomer.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.LastName = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.Address = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.City = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.County = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.State = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.ZIPCode = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; } } } } return View(); } // POST: Customers/Edit/5 [HttpPost] public ActionResult Edit(int id, FormCollection collection) { try { // TODO: Add update logic here XmlDocument xdCustomers = new XmlDocument(); string strFileCustomers = Server.MapPath("/WaterDistribution/Customers.xml"); XmlElement xeCustomer = xdCustomers.CreateElement("customer"); // Create the markup of a customer string strCustomer = "<account-id>" + id + "</account-id>" + "<account-number>" + collection["AccountNumber"] + "</account-number>" + "<meter-number>" + collection["MeterNumber"] + "</meter-number>" + "<first-name>" + collection["FirstName"] + "</first-name>" + "<last-name>" + collection["LastName"] + "</last-name>" + "<address>" + collection["Address"] + "</address>" + "<city>" + collection["City"] + "</city>" + "<county>" + collection["County"] + "</county>" + "<state>" + collection["State"] + "</state>" + "<zip-code>" + collection["ZIPCode"] + "</zip-code>"; xeCustomer.InnerXml = strCustomer; if (System.IO.File.Exists(strFileCustomers)) { using (FileStream fsWaterMeters = new FileStream(strFileCustomers, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) { xdCustomers.Load(fsWaterMeters); } using (FileStream fsCustomers = new FileStream(strFileCustomers, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { XmlNodeList xnlCustomers = xdCustomers.GetElementsByTagName("customer"); foreach (XmlNode xnCustomer in xnlCustomers) { if (xnCustomer.FirstChild.InnerText == id.ToString()) { xnCustomer.ParentNode.ReplaceChild(xeCustomer, xnCustomer); xdCustomers.Save(fsCustomers); break; } } } } return RedirectToAction("Index"); } catch { return View(); } } // GET: Customers/Delete/5 public ActionResult Delete(int id) { XmlDocument xdCustomers = new XmlDocument(); string strFileCustomers = Server.MapPath("/WaterDistribution/Customers.xml"); if (System.IO.File.Exists(strFileCustomers)) { using (FileStream fsCustomers = new FileStream(strFileCustomers, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdCustomers.Load(fsCustomers); XmlNodeList xnlCustomers = xdCustomers.GetElementsByTagName("account-id"); foreach (XmlNode xnCustomer in xnlCustomers) { if (xnCustomer.InnerText == id.ToString()) { ViewBag.AccountID = xnCustomer.InnerText; ViewBag.AccountNumber = xnCustomer.NextSibling.InnerText; ViewBag.MeterNumber = xnCustomer.NextSibling.NextSibling.InnerText; ViewBag.FirstName = xnCustomer.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.LastName = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.Address = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.City = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.County = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.State = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewBag.ZIPCode = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; } } } } return View(); } // POST: Customers/Delete/5 [HttpPost] public ActionResult Delete(int id, FormCollection collection) { try { // TODO: Add delete logic here XmlDocument xdCustomers = new XmlDocument(); string strFileCustomers = Server.MapPath("/WaterDistribution/Customers.xml"); /* Open the XML file that contains customers accounts so you can fill the DOM with records */ using (FileStream fsWaterMeters = new FileStream(strFileCustomers, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdCustomers.Load(fsWaterMeters); } // Get ready to change something on the file using (FileStream fsCustomers = new FileStream(strFileCustomers, FileMode.Truncate, FileAccess.Write, FileShare.Write)) { // Get a collection of customer nodes XmlNodeList xnlCustomers = xdCustomers.GetElementsByTagName("customer"); // Check each node foreach (XmlNode xnCustomer in xnlCustomers) { /* If you find a customer record whose customer-id is * the same as the id of the record the user clicked, ... */ if (xnCustomer.FirstChild.InnerText == id.ToString()) { // ... ask its parent to delete that record xnCustomer.ParentNode.RemoveChild(xnCustomer); // Now that the record has been deleted, save the XML file xdCustomers.Save(fsCustomers); break; } } } return RedirectToAction("Index"); } catch { return View(); } } } }
@{ ViewBag.Title = "Customers Accounts"; } <div class="push-down"> <h2>Customers Accounts</h2> </div> <hr /> <table class="table table-striped common-font"> <tr> <th class="bold">Account ID</th> <th class="bold">Account #</th> <th class="bold">Meter #</th> <th class="bold">First Name</th> <th class="bold">Last Name</th> <th class="bold">Address</th> <th class="bold">City</th> <th class="bold">County</th> <th class="bold">State</th> <th class="bold">ZIP Code</th> <th>@Html.ActionLink("New Customer Account", "Create", null, htmlAttributes: new { @class = "water-nav" })</th> </tr> @if (ViewBag.customers != null) { foreach (System.Xml.XmlNode client in ViewBag.Customers as System.Xml.XmlNodeList) { <tr> <td class="text-center">@client.FirstChild.InnerText</td> <td>@client.FirstChild.NextSibling.InnerText</td> <td>@client.FirstChild.NextSibling.NextSibling.InnerText</td> <td>@client.FirstChild.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@client.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@client.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@client.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@client.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@client.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@client.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td> @Html.ActionLink("Update", "Edit", new { id = @client.FirstChild.InnerText }) | @Html.ActionLink("Review", "Details", new { id = @client.FirstChild.InnerText }) | @Html.ActionLink("Remove", "Delete", new { id = @client.FirstChild.InnerText }) </td> </tr> } } </table>
@{ ViewBag.Title = "Customer Account Details"; } <div class="push-down"> <h2>Customer Account Details</h2> </div> <hr /> <div class="containment"> <dl class="dl-horizontal common-font caption"> <dt class="bold">Account ID:</dt> <dd>@ViewBag.AccountID</dd> <dt>Account #:</dt> <dd>@ViewBag.AccountNumber</dd> <dt>Water Meter #</dt> <dd>@ViewBag.MeterNumber</dd> <dt>First Name:</dt> <dd>@ViewBag.FirstName</dd> <dt>Last Name:</dt> <dd>@ViewBag.LastName</dd> <dt>Address:</dt> <dd>@ViewBag.Address</dd> <dt>City:</dt> <dd>@ViewBag.City</dd> <dt>County:</dt> <dd>@ViewBag.County</dd> <dt>State:</dt> <dd>@ViewBag.State</dd> <dt>ZIP Code:</dt> <dd>@ViewBag.ZIPCode</dd> </dl> </div> <p class="text-center"> @Html.ActionLink("Edit/Update Customer Account Details", "Edit", new { id = @ViewBag.AccountID }, htmlAttributes: new { @class = "water-nav" }) :: @Html.ActionLink("Customers Accounts", "Index", null, new { @class = "water-nav" }) </p>
@{ ViewBag.Title = "New Customer Account"; } <div class="push-down"> <h2>New Customer Account</h2> </div> <hr /> @using (Html.BeginForm()) { <div class="form-horizontal"> <div class="form-group"> <label for="acntNbr" class="control-label col-md-4 caption">Account #:</label> <div class="col-md-8"> @Html.TextBox("AccountNumber", null, htmlAttributes: new { @class = "form-control", id = "acntNbr" }) </div> </div> <div class="form-group"> <label for="mtrNbr" class="control-label col-md-4 caption">Water Meter:</label> <div class="col-md-8"> @Html.TextBox("MeterNumber", null, htmlAttributes: new { @class = "form-control", id = "mtrNbr" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4 caption"> </label> <div class="col-md-8"><input type="text" id="meterDetails" class="form-control" disabled /></div> </div> <div class="form-group"> <label for="fName" class="control-label col-md-4 caption">First Name:</label> <div class="col-md-8"> @Html.TextBox("FirstName", null, htmlAttributes: new { @class = "form-control", id = "fName" }) </div> </div> <div class="form-group"> <label for="lName" class="control-label col-md-4 caption">Last Name:</label> <div class="col-md-8"> @Html.TextBox("LastName", null, htmlAttributes: new { @class = "form-control", id = "lName" }) </div> </div> <div class="form-group"> <label for="adrs" class="control-label col-md-4 caption">Address:</label> <div class="col-md-8"> @Html.TextBox("Address", null, htmlAttributes: new { @class = "form-control", id = "adrs" }) </div> </div> <div class="form-group"> <label for="ct" class="control-label col-md-4 caption">City:</label> <div class="col-md-8"> @Html.TextBox("City", null, htmlAttributes: new { @class = "form-control", id = "ct" }) </div> </div> <div class="form-group"> <label for="county" class="control-label col-md-4 caption">County:</label> <div class="col-md-8"> @Html.TextBox("County", null, htmlAttributes: new { @class = "form-control", id = "county" }) </div> </div> <div class="form-group"> <label for="state" class="control-label col-md-4 caption">State:</label> <div class="col-md-8"> @Html.TextBox("State", null, htmlAttributes: new { @class = "form-control", id = "state" }) </div> </div> <div class="form-group"> <label for="zip" class="control-label col-md-4 caption">ZIP Code:</label> <div class="col-md-8"> @Html.TextBox("ZIPCode", null, htmlAttributes: new { @class = "form-control", id = "zip" }) </div> </div> <div class="form-group"> <label class="control-label col-md-5"> @Html.ActionLink("Customers", "Index", null, htmlAttributes: new { @class = "water-nav" }) </label> <div class="col-md-7"> <input type="submit" value="Create Customer Account" class="btn btn-primary" /> </div> </div> </div> } @Scripts.Render("~/bundles/jquery") <script type="text/javascript"> $(document).ready(function () { $("#mtrNbr").blur(function (event) { var connection = { url: "/WaterDistribution/WaterMeters.xml", method: "GET", dataType: "xml" }; $.ajax(connection). done(function (data) { var waterMeters = $(data).find("water-meter"); waterMeters.each(function () { if ($(this).find("meter-number").text() == $("#mtrNbr").val()) $("#meterDetails").val($(this).find("make").text() + " " + $(this).find("model").text() + " (" + $(this).find("meter-size").text() + ")"); }); }); }); // Lost Focus Event }); // Document.Ready </script>
@{ ViewBag.Title = "Edit/Update Customer Details"; } <div class="push-down"> <h2>Edit/Update Customer Details</h2> </div> <hr /> @using (Html.BeginForm()) { <div class="form-horizontal"> <div class="form-group"> <label class="control-label col-md-4 caption">Acount ID:</label> <div class="col-md-8"> @Html.TextBox("AccountID", ViewBag.AccountID as string, htmlAttributes: new { @class = "form-control", disabled = "disabled" }) </div> </div> <div class="form-group"> <label for="acntNbr" class="control-label col-md-4 caption">Account #:</label> <div class="col-md-8"> @Html.TextBox("AccountNumber", ViewBag.AccountNumber as string, htmlAttributes: new { @class = "form-control", id = "acntNbr" }) </div> </div> <div class="form-group"> <label for="mtrNbr" class="control-label col-md-4 caption">Meter #:</label> <div class="col-md-8"> @Html.TextBox("MeterNumber", ViewBag.MeterNumber as string, htmlAttributes: new { @class = "form-control", id = "mtrNbr" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4 caption"> </label> <div class="col-md-8"><input type="text" id="meterDetails" class="form-control" disabled /></div> </div> <div class="form-group"> <label for="fname" class="control-label col-md-4 caption">First Name:</label> <div class="col-md-8"> @Html.TextBox("FirstName", ViewBag.FirstName as string, htmlAttributes: new { @class = "form-control", id = "fname" }) </div> </div> <div class="form-group"> <label for="lname" class="control-label col-md-4 caption">Last Name:</label> <div class="col-md-8"> @Html.TextBox("LastName", ViewBag.LastName as string, htmlAttributes: new { @class = "form-control", id = "lname" }) </div> </div> <div class="form-group"> <label for="adrs" class="control-label col-md-4 caption">Address:</label> <div class="col-md-8"> @Html.TextBox("Address", ViewBag.Address as string, htmlAttributes: new { @class = "form-control", id = "adrs" }) </div> </div> <div class="form-group"> <label for="ct" class="control-label col-md-4 caption">City:</label> <div class="col-md-8"> @Html.TextBox("City", ViewBag.DateLastUpdate as string, htmlAttributes: new { @class = "form-control", id = "ct" }) </div> </div> <div class="form-group"> <label for="county" class="control-label col-md-4 caption">County:</label> <div class="col-md-8"> @Html.TextBox("County", ViewBag.CounterValue as string, htmlAttributes: new { @class = "form-control", id = "county" }) </div> </div> <div class="form-group"> <label for="state" class="control-label col-md-4 caption">State:</label> <div class="col-md-8"> @Html.TextBox("State", ViewBag.CounterValue as string, htmlAttributes: new { @class = "form-control", id = "state" }) </div> </div> <div class="form-group"> <label for="zip" class="control-label col-md-4 caption">ZIP-Code:</label> <div class="col-md-8"> @Html.TextBox("ZIPCode", ViewBag.CounterValue as string, htmlAttributes: new { @class = "form-control", id = "zip" }) </div> </div> <div class="form-group"> <label class="control-label col-md-5"> @Html.ActionLink("Customers Accounts", "Index", null, htmlAttributes: new { @class = "water-nav" }) </label> <div class="col-md-7"> <input type="submit" value="Update Customer Details" class="btn btn-primary" /> </div> </div> </div> } @Scripts.Render("~/bundles/jquery") <script type="text/javascript"> $(document).ready(function () { var connection = { url: "/WaterDistribution/WaterMeters.xml", method: "GET", dataType: "xml" }; $.ajax(connection). done(function (data) { var waterMeters = $(data).find("water-meter"); waterMeters.each(function () { if ($(this).find("meter-number").text() == $("#mtrNbr").val()) $("#meterDetails").val($(this).find("make").text() + " " + $(this).find("model").text() + " (" + $(this).find("meter-size").text() + ")"); }); }); $("#mtrNbr").blur(function (event) { var connection = { url: "/WaterDistribution/WaterMeters.xml", method: "GET", dataType: "xml" }; $.ajax(connection). done(function (data) { var waterMeters = $(data).find("water-meter"); waterMeters.each(function () { if ($(this).find("meter-number").text() == $("#mtrNbr").val()) $("#meterDetails").val($(this).find("make").text() + " " + $(this).find("model").text() + " (" + $(this).find("meter-size").text() + ")"); }); }); }); // Lost Focus Event }); // Document.Ready </script>
@{ ViewBag.Title = "Delete Customer Account"; } <div class="push-down"> <h2>Closing Customer Account</h2> </div> <hr /> <div class="containment"> <dl class="dl-horizontal common-font caption"> <dt>Account ID:</dt> <dd>@ViewBag.AccountID</dd> <dt>Account #:</dt> <dd>@ViewBag.AccountNumber</dd> <dt>Meter #:</dt> <dd>@ViewBag.MeterNumber</dd> <dt>First Name:</dt> <dd>@ViewBag.FirstName</dd> <dt>Last Name:</dt> <dd>@ViewBag.LastName</dd> <dt>Address:</dt> <dd>@ViewBag.Address</dd> <dt>City:</dt> <dd>@ViewBag.City</dd> <dt>County:</dt> <dd>@ViewBag.County</dd> <dt>State:</dt> <dd>@ViewBag.State</dd> <dt>ZIP-Code:</dt> <dd>@ViewBag.ZIPCode</dd> </dl> <h3 class="common-font caption">Are you sure you want to close the account of this customer (if you do, the account will disappear from our system)?</h3> @using (Html.BeginForm()) { <div class="form-actions no-color"> <input type="submit" value="Close this Customer's Account" class="btn btn-primary" /> | @Html.ActionLink("Customers Accounts", "Index", null, new { @class = "water-nav" }) </div> } </div>
Water Bills
A water bill is a document that provides various pieces of information about a costumer consuming water and the amount to pay for it. In thissection, we will create objects that can assist the company in creating water bills.
Practical Learning: Creating Water Bills
using System; using System.IO; using System.Xml; using System.Web.Mvc; using System.Collections.Generic; namespace WaterDistributionCompany1.Controllers { public class WaterBillsController : Controller { // GET: WaterBills public ActionResult Index() { XmlDocument xdWaterBills = new XmlDocument(); string strFileWaterBills = Server.MapPath("/WaterDistribution/WaterBills.xml"); if (System.IO.File.Exists(strFileWaterBills)) { using (FileStream fsWaterBills = new FileStream(strFileWaterBills, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdWaterBills.Load(fsWaterBills); } if (xdWaterBills.DocumentElement.ChildNodes.Count > 0) { ViewData["Invoices"] = xdWaterBills.DocumentElement.ChildNodes; } else { ViewData["Invoices"] = null; } } return View(); } // GET: WaterBills/Details/5 public ActionResult Details(int id) { XmlDocument xdWaterBills = new XmlDocument(); string strFileWaterBills = Server.MapPath("/WaterDistribution/WaterBills.xml"); if (System.IO.File.Exists(strFileWaterBills)) { using (FileStream fsWaterBills = new FileStream(strFileWaterBills, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdWaterBills.Load(fsWaterBills); XmlNodeList xnlWaterBills = xdWaterBills.GetElementsByTagName("water-bill-id"); foreach (XmlNode xnWaterBill in xnlWaterBills) { if (xnWaterBill.InnerText == id.ToString()) { ViewData["WaterBillID"] = xnWaterBill.InnerText; ViewData["InvoiceNumber"] = xnWaterBill.NextSibling.InnerText; ViewData["AccountNumber"] = xnWaterBill.NextSibling.NextSibling.InnerText; ViewData["MeterReadingStartDate"] = xnWaterBill.NextSibling.NextSibling.NextSibling.InnerText; ViewData["MeterReadingEndDate"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["BillingDays"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["CounterReadingStart"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["CounterReadingEnd"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["TotalHCF"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["TotalGallons"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["First15HCF"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["Next10HCF"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["RemainingHCF"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["SewerCharges"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["StormCharges"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["WaterUsageCharges"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["TotalCharges"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["LocalTaxes"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["StateTaxes"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["PaymentDueDate"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["AmountDue"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["LatePaymentDueDate"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["LateAmountDue"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; } } } } return View(); } // GET: WaterBills/Create public ActionResult Create() { int water_bill_id = 0; XmlDocument xdWaterBills = new XmlDocument(); string strFileWaterBills = Server.MapPath("/WaterDistribution/WaterBills.xml"); if (System.IO.File.Exists(strFileWaterBills)) { using (FileStream fsWaterBills = new FileStream(strFileWaterBills, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdWaterBills.Load(fsWaterBills); XmlNodeList xnlWaterBills = xdWaterBills.GetElementsByTagName("water-bill-id"); foreach (XmlNode xnWaterBill in xnlWaterBills) { water_bill_id = int.Parse(xnWaterBill.InnerText); } } } ViewData["WaterBillID"] = (water_bill_id + 1); Random rndNumber = new Random(); ViewData["InvoiceNumber"] = rndNumber.Next(100001, 999999).ToString(); return View(); } // POST: WaterBills/Create [HttpPost] public ActionResult Create(FormCollection collection) { try { // TODO: Add insert logic here int bill_id = -1; bool customerIsValid = false; string meterNumber = string.Empty; XmlDocument xdCustomers = new XmlDocument(); XmlDocument xdWaterBills = new XmlDocument(); string strFileCustomers = Server.MapPath("/WaterDistribution/Customers.xml"); string strFileWaterBills = Server.MapPath("/WaterDistribution/WaterBills.xml"); // Make sure the user provided an account number for the customer, ... if (!string.IsNullOrEmpty(collection["AccountNumber"])) { // If the user provided an account number, find out if an XML file for customers was already created. if (System.IO.File.Exists(strFileCustomers)) { // If a file for customers exists, open it using (FileStream fsCustomers = new FileStream(strFileCustomers, FileMode.Open, FileAccess.Read, FileShare.Read)) { // Store the list of customers in an XML document xdCustomers.Load(fsCustomers); // Create a list of customers nodes that use the account number provided by the user XmlNodeList xnlCustomers = xdCustomers.GetElementsByTagName("account-number"); // Visit each node of the list of elements foreach (XmlNode xnCustomer in xnlCustomers) { // If you find a customer that is the same as the account number from the form, ... if (xnCustomer.InnerText == collection["AccountNumber"]) { // ... make a note customerIsValid = true; // and get the meter number used by that customer meterNumber = xnCustomer.NextSibling.InnerText; } } } } } if (customerIsValid == true) { // It appears that the user provided a valid customer account number. // If an XML file for water bills was previously created, ... if (System.IO.File.Exists(strFileWaterBills)) { // ... open it ... using (FileStream fsWaterBills = new FileStream(strFileWaterBills, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { // ... and put the records in the DOM xdWaterBills.Load(fsWaterBills); XmlNodeList xnlWaterBills = xdWaterBills.GetElementsByTagName("water-bill-id"); foreach (XmlNode xnWaterBill in xnlWaterBills) { bill_id = int.Parse(xnWaterBill.InnerText); } } } else { // If there is no XML file yet for the customers, create skeleton code for an XML document xdWaterBills.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<water-bills></water-bills>"); bill_id = 0; } // Get ready to create an XML element named water-bill XmlElement xeWaterBill = xdWaterBills.CreateElement("invoice"); bill_id++; // Create the markup of the XML water bill xeWaterBill.InnerXml = "<water-bill-id>" + bill_id + "</water-bill-id>" + "<invoice-number>" + collection["InvoiceNumber"] + "</invoice-number>" + "<account-number>" + collection["AccountNumber"] + "</account-number>" + "<meter-reading-start-date>" + collection["MeterReadingStartDate"] + "</meter-reading-start-date>" + "<meter-reading-end-date>" + collection["MeterReadingEndDate"] + "</meter-reading-end-date>" + "<billing-days>" + collection["BillingDays"] + "</billing-days>" + "<counter-reading-start>" + collection["CounterReadingStart"] + "</counter-reading-start>" + "<counter-reading-end>" + collection["CounterReadingEnd"] + "</counter-reading-end>" + "<total-hcf>" + collection["TotalHCF"] + "</total-hcf>" + "<total-gallons>" + collection["TotalGallons"] + "</total-gallons>" + "<first-15-hcf>" + collection["First15HCF"] + "</first-15-hcf>" + "<next-10-hcf>" + collection["Next10HCF"] + "</next-10-hcf>" + "<remaining-hcf>" + collection["RemainingHCF"] + "</remaining-hcf>" + "<sewer-charges>" + collection["SewerCharges"] + "</sewer-charges>" + "<storm-charges>" + collection["StormCharges"] + "</storm-charges>" + "<water-usage-charges>" + collection["WaterUsageCharges"] + "</water-usage-charges>" + "<total-charges>" + collection["TotalCharges"] + "</total-charges>" + "<local-taxes>" + collection["LocalTaxes"] + "</local-taxes>" + "<state-taxes>" + collection["StateTaxes"] + "</state-taxes>" + "<payment-due-date>" + collection["PaymentDueDate"] + "</payment-due-date>" + "<amount-due>" + collection["AmountDue"] + "</amount-due>" + "<late-payment-due-date>" + collection["LatePaymentDueDate"] + "</late-payment-due-date>" + "<late-amount-due>" + collection["LateAmountDue"] + "</late-amount-due>"; // Add the new node to the root xdWaterBills.DocumentElement.AppendChild(xeWaterBill); // Save the (new version of the) XML file using (FileStream fsWaterBills = new FileStream(strFileWaterBills, FileMode.Create, FileAccess.Write, FileShare.Write)) { xdWaterBills.Save(fsWaterBills); } // We also want to update the counter value on the water meter with the new Counter Reading End value XmlDocument xdWaterMeters = new XmlDocument(); string strFileWaterMeters = Server.MapPath("/WaterDistribution/WaterMeters.xml"); if (System.IO.File.Exists(strFileWaterMeters)) { using (FileStream fsWaterMeters = new FileStream(strFileWaterMeters, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) { xdWaterMeters.Load(fsWaterMeters); } XmlNodeList xnlWaterMeters = xdWaterMeters.GetElementsByTagName("meter-id"); using (FileStream fsWaterMeters = new FileStream(strFileWaterMeters, FileMode.Truncate, FileAccess.ReadWrite, FileShare.ReadWrite)) { foreach (XmlNode xnWaterMeter in xnlWaterMeters) { if (xnWaterMeter.NextSibling.InnerText == meterNumber) { xnWaterMeter.ParentNode.InnerXml = "<meter-id>" + xnWaterMeter.InnerText + "</meter-id>" + "<meter-number>" + meterNumber + "</meter-number>" + "<make>" + xnWaterMeter.NextSibling.NextSibling.InnerText + "</make>" + "<model>" + xnWaterMeter.NextSibling.NextSibling.NextSibling.InnerText + "</model>" + "<meter-size>" + xnWaterMeter.NextSibling.NextSibling.NextSibling.NextSibling.InnerText + "</meter-size>" + "<date-last-update>" + xnWaterMeter.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText + "</date-last-update>" + "<counter-value>" + collection["CounterReadingEnd"] + "</counter-value>"; xdWaterMeters.Save(fsWaterMeters); break; } } } } } return RedirectToAction("Index"); } catch { return View(); } } // GET: WaterBills/Edit/5 public ActionResult Edit(int id) { XmlDocument xdWaterBills = new XmlDocument(); string strAccountNumber = string.Empty, strMeterNumber = string.Empty; string strFileWaterBills = Server.MapPath("/WaterDistribution/WaterBills.xml"); if (System.IO.File.Exists(strFileWaterBills)) { using (FileStream fsWaterBills = new FileStream(strFileWaterBills, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdWaterBills.Load(fsWaterBills); XmlNodeList xnlWaterBills = xdWaterBills.GetElementsByTagName("water-bill-id"); foreach (XmlNode xnWaterBill in xnlWaterBills) { if (xnWaterBill.InnerText == id.ToString()) { ViewData["WaterBillID"] = xnWaterBill.InnerText; ViewData["InvoiceNumber"] = xnWaterBill.NextSibling.InnerText; ViewData["AccountNumber"] = xnWaterBill.NextSibling.NextSibling.InnerText; ViewData["MeterReadingStartDate"] = xnWaterBill.NextSibling.NextSibling.NextSibling.InnerText; ViewData["MeterReadingEndDate"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["BillingDays"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["CounterReadingStart"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["CounterReadingEnd"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["TotalHCF"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["TotalGallons"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["First15HCF"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["Next10HCF"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["RemainingHCF"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["SewerCharges"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["StormCharges"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["WaterUsageCharges"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["TotalCharges"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["LocalTaxes"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["StateTaxes"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["PaymentDueDate"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["AmountDue"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["LatePaymentDueDate"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["LateAmountDue"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; strAccountNumber = xnWaterBill.NextSibling.NextSibling.InnerText; } } } XmlDocument xdCustomers = new XmlDocument(); string strFileCustomers = Server.MapPath("/WaterDistribution/Customers.xml"); if (System.IO.File.Exists(strFileCustomers)) { using (FileStream fsWaterMeters = new FileStream(strFileCustomers, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdCustomers.Load(fsWaterMeters); XmlNodeList xnlCustomers = xdCustomers.GetElementsByTagName("account-number"); foreach (XmlNode xnCustomer in xnlCustomers) { if (xnCustomer.InnerText == strAccountNumber) { ViewData["AccountNumber"] = xnCustomer.InnerText; ViewData["MeterNumber"] = xnCustomer.NextSibling.InnerText; ViewData["CustomerName"] = xnCustomer.NextSibling.NextSibling.InnerText + " " + xnCustomer.NextSibling.NextSibling.NextSibling.InnerText; ViewData["CustomerAddress"] = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["CustomerCity"] = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["CustomerCounty"] = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["CustomerState"] = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["CustomerZIPCode"] = xnCustomer.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; strMeterNumber = xnCustomer.NextSibling.InnerText; } } } } XmlDocument xdWaterMeters = new XmlDocument(); string strFileWaterMeters = Server.MapPath("/WaterDistribution/WaterMeters.xml"); if (System.IO.File.Exists(strFileWaterMeters)) { using (FileStream fsWaterMeters = new FileStream(strFileWaterMeters, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdWaterMeters.Load(fsWaterMeters); XmlNodeList xnlWaterMeters = xdWaterMeters.GetElementsByTagName("meter-number"); foreach (XmlNode xnWaterMeter in xnlWaterMeters) { if (xnWaterMeter.InnerText == strMeterNumber) { ViewData["MeterDetails"] = xnWaterMeter.InnerText + " " + xnWaterMeter.NextSibling.InnerText + " (" + xnWaterMeter.NextSibling.NextSibling.NextSibling.InnerText + ")"; } } } } } return View(); } // POST: WaterBills/Edit/5 [HttpPost] public ActionResult Edit(int id, FormCollection collection) { try { // TODO: Add update logic here XmlDocument xdWaterBills = new XmlDocument(); string strFileWaterBills = Server.MapPath("/WaterDistribution/WaterBills.xml"); if (System.IO.File.Exists(strFileWaterBills)) { using (FileStream fsWaterMeters = new FileStream(strFileWaterBills, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) { xdWaterBills.Load(fsWaterMeters); } XmlNodeList xnlWaterBills = xdWaterBills.GetElementsByTagName("water-bill-id"); using (FileStream fsWaterBills = new FileStream(strFileWaterBills, FileMode.Truncate, FileAccess.ReadWrite, FileShare.ReadWrite)) { foreach (XmlNode xnWaterBill in xnlWaterBills) { if (xnWaterBill.InnerText == id.ToString()) { xnWaterBill.ParentNode.InnerXml = "<water-bill-id>" + id + "</water-bill-id>" + "<invoice-number>" + collection["InvoiceNumber"] + "</invoice-number>" + "<account-number>" + collection["AccountNumber"] + "</account-number>" + "<meter-reading-start-date>" + collection["MeterReadingStartDate"] + "</meter-reading-start-date>" + "<meter-reading-end-date>" + collection["MeterReadingEndDate"] + "</meter-reading-end-date>" + "<billing-days>" + collection["BillingDays"] + "</billing-days>" + "<counter-reading-start>" + collection["CounterReadingStart"] + "</counter-reading-start>" + "<counter-reading-end>" + collection["CounterReadingEnd"] + "</counter-reading-end>" + "<total-hcf>" + collection["TotalHCF"] + "</total-hcf>" + "<total-gallons>" + collection["TotalGallons"] + "</total-gallons>" + "<first-15-hcf>" + collection["First15HCF"] + "</first-15-hcf>" + "<next-10-hcf>" + collection["Next10HCF"] + "</next-10-hcf>" + "<remaining-hcf>" + collection["RemainingHCF"] + "</remaining-hcf>" + "<sewer-charges>" + collection["SewerCharges"] + "</sewer-charges>" + "<storm-charges>" + collection["StormCharges"] + "</storm-charges>" + "<water-usage-charges>" + collection["WaterUsageCharges"] + "</water-usage-charges>" + "<total-charges>" + collection["TotalCharges"] + "</total-charges>" + "<local-taxes>" + collection["LocalTaxes"] + "</local-taxes>" + "<state-taxes>" + collection["StateTaxes"] + "</state-taxes>" + "<payment-due-date>" + collection["PaymentDueDate"] + "</payment-due-date>" + "<amount-due>" + collection["AmountDue"] + "</amount-due>" + "<late-payment-due-date>" + collection["LatePaymentDueDate"] + "</late-payment-due-date>" + "<late-amount-due>" + collection["LateAmountDue"] + "</late-amount-due>"; xdWaterBills.Save(fsWaterBills); break; } } } } return RedirectToAction("Index"); } catch { return View(); } } // GET: WaterBills/Delete/5 public ActionResult Delete(int id) { XmlDocument xdWaterBills = new XmlDocument(); string strAccountNumber = string.Empty, strMeterNumber = string.Empty; string strFileWaterBills = Server.MapPath("/WaterDistribution/WaterBills.xml"); if (System.IO.File.Exists(strFileWaterBills)) { using (FileStream fsWaterBills = new FileStream(strFileWaterBills, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdWaterBills.Load(fsWaterBills); XmlNodeList xnlWaterBills = xdWaterBills.GetElementsByTagName("water-bill-id"); foreach (XmlNode xnWaterBill in xnlWaterBills) { if (xnWaterBill.InnerText == id.ToString()) { ViewData["WaterBillID"] = xnWaterBill.InnerText; ViewData["InvoiceNumber"] = xnWaterBill.NextSibling.InnerText; ViewData["AccountNumber"] = xnWaterBill.NextSibling.NextSibling.InnerText; ViewData["MeterReadingStartDate"] = xnWaterBill.NextSibling.NextSibling.NextSibling.InnerText; ViewData["MeterReadingEndDate"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["BillingDays"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["CounterReadingStart"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["CounterReadingEnd"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["TotalHCF"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["TotalGallons"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["First15HCF"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["Next10HCF"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["RemainingHCF"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["SewerCharges"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["StormCharges"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["WaterUsageCharges"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["TotalCharges"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["LocalTaxes"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["StateTaxes"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["PaymentDueDate"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["AmountDue"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["LatePaymentDueDate"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; ViewData["LateAmountDue"] = xnWaterBill.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; strAccountNumber = xnWaterBill.NextSibling.NextSibling.InnerText; } } } } return View(); } // POST: WaterBills/Delete/5 [HttpPost] public ActionResult Delete(int id, FormCollection collection) { try { // TODO: Add delete logic here XmlDocument xdWaterBills = new XmlDocument(); string strFileWaterBills = Server.MapPath("/WaterDistribution/WaterBills.xml"); if (System.IO.File.Exists(strFileWaterBills)) { using (FileStream fsWaterBills = new FileStream(strFileWaterBills, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdWaterBills.Load(fsWaterBills); } using (FileStream fsWaterBills = new FileStream(strFileWaterBills, FileMode.Truncate, FileAccess.Write, FileShare.Write)) { XmlNodeList xnlWaterBills = xdWaterBills.GetElementsByTagName("invoice"); foreach (XmlNode xnWaterBill in xnlWaterBills) { if (xnWaterBill.FirstChild.InnerText == id.ToString()) { xnWaterBill.ParentNode.RemoveChild(xnWaterBill); xdWaterBills.Save(fsWaterBills); break; } } } } return RedirectToAction("Index"); } catch { return View(); } } } }
@{ ViewBag.Title = "Customers Water Bills"; } <div class="push-down"> <h2 class="common-font bold text-center">Customers Water Bills</h2> </div> <hr /> <table class="table table-striped common-font"> <tr> <th class="bold text-center" colspan="2">Identification</th> <th class="bold text-center" colspan="4">Meter Reading</th> <th class="bold text-center" colspan="2">Counter Reading</th> <th class="bold text-center" colspan="5">HCF Summary</th> <th class="bold text-center" colspan="4">Charges</th> <th class="bold text-center" colspan="2">Taxes</th> <th class="bold text-center" colspan="4">Payment</th> <th> </th> </tr> <tr> <th class="bold">Bill ID</th> <th class="bold">Invoice #</th> <th class="bold">Account #</th> <th class="bold">Start Date</th> <th class="bold">End Date</th> <th class="bold">Days</th> <th class="bold">Start</th> <th class="bold">End</th> <th class="bold">Total</th> <th class="bold">Gallons</th> <th class="bold">First 15</th> <th class="bold">Next 10</th> <th class="bold">Remaining</th> <th class="bold">Sewer</th> <th class="bold">Storm</th> <th class="bold">Water Usage</th> <th class="bold">Total</th> <th class="bold">Local</th> <th class="bold">State</th> <th class="bold">Due Date</th> <th class="bold">Amount</th> <th class="bold">Late Pmt</th> <th class="bold">Late Amt</th> <th> </th> </tr> @if (ViewBag.Invoices != null) { foreach (System.Xml.XmlNode bill in ViewData["Invoices"] as System.Xml.XmlNodeList) { <tr> <td class="text-center">@bill.FirstChild.InnerText</td> <td>@bill.FirstChild.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@bill.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td> @Html.ActionLink("Update", "Edit", new { id = @bill.FirstChild.InnerText }) <span style="color: aquamarine">::</span> @Html.ActionLink("Review", "Details", new { id = @bill.FirstChild.InnerText }) <span style="color: aquamarine">::</span> @Html.ActionLink("Remove", "Delete", new { id = @bill.FirstChild.InnerText }) </td> </tr> } } </table> <p class="text-center">@Html.ActionLink("New Water Bill", "Create", null, htmlAttributes: new { @class = "water-nav" })</p>
@{ ViewBag.Title = "Water Bill Details"; } <div class="push-down"> <h2>Water Bill Details</h2> </div> <hr /> <div class="containment"> <dl class="dl-horizontal common-font caption"> <dt class="bold">Water Bill ID:</dt> <dd>@ViewData["WaterBillID"]</dd> <dt class="bold">Invoice #:</dt> <dd>@ViewData["InvoiceNumber"]</dd> <dt class="bold">Account #:</dt> <dd>@ViewData["AccountNumber"]</dd> <dt class="bold">Meter Reading Start Date:</dt> <dd>@ViewData["MeterReadingStartDate"]</dd> <dt class="bold">Meter Reading End Date:</dt> <dd>@ViewData["MeterReadingEndDate"]</dd> <dt class="bold">Billing Days:</dt> <dd>@ViewData["BillingDays"]</dd> <dt class="bold">Counter Reading Start:</dt> <dd>@ViewData["CounterReadingStart"]</dd> <dt class="bold">Counter Reading End:</dt> <dd>@ViewData["CounterReadingEnd"]</dd> <dt class="bold">Total HCF:</dt> <dd>@ViewData["TotalHCF"]</dd> <dt class="bold">Total Gallons:</dt> <dd>@ViewData["TotalGallons"]</dd> <dt class="bold">First 15 HCF:</dt> <dd>@ViewData["First15HCF"]</dd> <dt class="bold">Next 10 HCF:</dt> <dd>@ViewData["Next10HCF"]</dd> <dt class="bold">Remaining HCF:</dt> <dd>@ViewData["RemainingHCF"]</dd> <dt class="bold">Sewer Charges:</dt> <dd>@ViewData["SewerCharges"]</dd> <dt class="bold">Storm Charges:</dt> <dd>@ViewData["StormCharges"]</dd> <dt class="bold">Water Usage Charges:</dt> <dd>@ViewData["WaterUsageCharges"]</dd> <dt class="bold">Total Charges:</dt> <dd>@ViewData["TotalCharges"]</dd> <dt class="bold">Local Taxes:</dt> <dd>@ViewData["LocalTaxes"]</dd> <dt class="bold">State Taxes:</dt> <dd>@ViewData["StateTaxes"]</dd> <dt class="bold">Payment Due Date:</dt> <dd>@ViewData["PaymentDueDate"]</dd> <dt class="bold">Amount Due:</dt> <dd>@ViewData["AmountDue"]</dd> <dt class="bold">Late Payment Due Date:</dt> <dd>@ViewData["LatePaymentDueDate"]</dd> <dt class="bold">Late Amount Due:</dt> <dd>@ViewData["LateAmountDue"]</dd> </dl> </div> <p class="text-center"> @Html.ActionLink("Edit/Update Customer Water Bill", "Edit", new { id = ViewData["WaterBillID"] }, htmlAttributes: new { @class = "water -nav" }) :: @Html.ActionLink("Customers Water Bills", "Index", null, new { @class = "water-nav" }) </p>
@{ ViewBag.Title = "Prepare Customer Water Bill"; } <div class="push-down"> <h2>Prepare Customer Water Bill</h2> </div> <hr /> @using (Html.BeginForm()) { <div class="form-horizontal"> <div class="form-group"> <label for="billNbr" class="control-label col-md-4 caption">Water Bill ID:</label> <div class="col-md-8"> @Html.TextBox("WaterBillID", null, htmlAttributes: new { @class = "form-control", id = "billNbr", disabled = "disabled" }) </div> </div> <div class="form-group"> <label for="invoiceNbr" class="control-label col-md-4 caption">Invoice #:</label> <div class="col-md-8"> @Html.TextBox("InvoiceNumber", null, htmlAttributes: new { @class = "form-control", id = "invoiceNbr" }) </div> </div> <div class="form-group"> <label for="acntNbr" class="control-label col-md-4 caption">Customer Account #:</label> <div class="col-md-8"> @Html.TextBox("AccountNumber", null, htmlAttributes: new { @class = "form-control", id = "acntNbr" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4 caption">Customer Name:</label> <div class="col-md-8"> @Html.TextBox("CustomerName", null, new { @class = "form-control", id = "custName", disabled = "disabled" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4 caption">Customer Address:</label> <div class="col-md-8"> @Html.TextBox("CustomerAddress", null, new { @class = "form-control", id = "adrs", disabled = "disabled" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4"> </label> <div class="col-md-125"> @Html.TextBox("CustomerCity", null, new { @class = "form-control", id = "city", disabled = "disabled" }) </div> <div class="col-md-125"> @Html.TextBox("CustomerCounty", null, new { @class = "form-control", id = "county", disabled = "disabled" }) </div> <div class="col-md-125"> @Html.TextBox("CustomerState", null, new { @class = "form-control", id = "state", disabled = "disabled" }) </div> <div class="col-md-125"> @Html.TextBox("CustomerZIPCode", null, new { @class = "form-control", id = "zip", disabled = "disabled" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4 caption">Meter Details:</label> <div class="col-md-125"> @Html.TextBox("MeterNumber", null, new { @class = "form-control", id = "mtrNbr", disabled = "disabled" }) </div> <div class="col-md-6"> @Html.TextBox("MeterDetails", null, htmlAttributes: new { @class = "form-control", id = "meterDetails", disabled = "disabled" }) </div> </div> <hr /> <div class="form-group"> <label for="mrsd" class="control-label col-md-4 caption">Meter Reading Start Date:</label> <div class="col-md-2"> @Html.TextBox("MeterReadingStartDate", null, htmlAttributes: new { @class = "form-control", id = "mrsd" }) </div> <label for="mred" class="control-label col-md-125 caption">Meter Reading End Date:</label> <div class="col-md-125"> @Html.TextBox("MeterReadingEndDate", null, htmlAttributes: new { @class = "form-control", type = "date", id = "mred" }) </div> <label for="days" class="control-label col-md-2 caption">Billing Days:</label> <div class="col-md-1"> @Html.TextBox("BillingDays", null, htmlAttributes: new { @class = "form-control", id = "days" }) </div> </div> <div class="form-group"> <label for="crs" class="control-label col-md-4 caption">Counter Reading Start:</label> <div class="col-md-2"> @Html.TextBox("CounterReadingStart", null, htmlAttributes: new { @class = "form-control", id = "crs" }) </div> <label for="cre" class="control-label col-md-125 caption">Current Meter Reading:</label> <div class="col-md-125"> @Html.TextBox("CounterReadingEnd", null, htmlAttributes: new { @class = "form-control", id = "cre" }) </div> <label for="thcf" class="control-label col-md-2 caption">Total HCF:</label> <div class="col-md-1"> @Html.TextBox("TotalHCF", null, htmlAttributes: new { @class = "form-control", id = "thcf" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4"> </label> <div class="col-md-2"> </div> <label class="control-label col-md-125"> </label> <div class="col-md-125"> </div> <label for="gallons" class="control-label col-md-2 caption">Total Gallons:</label> <div class="col-md-1"> @Html.TextBox("TotalGallons", null, htmlAttributes: new { @class = "form-control", id = "gallons" }) </div> </div> <div class="form-group"> <label for="f15HCF" class="control-label col-md-4 caption">1st 15 HCF at $3.6121:</label> <div class="col-md-2"> @Html.TextBox("First15HCF", null, htmlAttributes: new { @class = "form-control", id = "f15HCF" }) </div> <label for="next10HCF" class="control-label col-md-125 caption">Next 10 HCF at $3.9180:</label> <div class="col-md-125"> @Html.TextBox("Next10HCF", null, htmlAttributes: new { @class = "form-control", id = "next10HCF" }) </div> <label for="remHCF" class="control-label col-md-2 caption">Remaining HCF at $4.2763:</label> <div class="col-md-1"> @Html.TextBox("RemainingHCF", null, htmlAttributes: new { @class = "form-control", id = "remHCF" }) </div> </div> <div class="form-group"> <label for="sewerCharges" class="control-label col-md-4 caption">Sewer Charges:</label> <div class="col-md-2"> @Html.TextBox("SewerCharges", null, htmlAttributes: new { @class = "form-control", id = "sewerCharges" }) </div> <label for="stormCharges" class="control-label col-md-125 caption">Storm Charges:</label> <div class="col-md-125"> @Html.TextBox("StormCharges", null, htmlAttributes: new { @class = "form-control", id = "stormCharges" }) </div> <label for="wuc" class="control-label col-md-2 caption">Water Usage Charges:</label> <div class="col-md-1"> @Html.TextBox("WaterUsageCharges", null, htmlAttributes: new { @class = "form-control", id = "wuc" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4"> </label> <div class="col-md-2"> </div> <label class="control-label col-md-125"> </label> <div class="col-md-125"> </div> <label for="totalCharges" class="control-label col-md-2 caption">Total Charges:</label> <div class="col-md-1"> @Html.TextBox("TotalCharges", null, htmlAttributes: new { @class = "form-control", id = "totalCharges" }) </div> </div> <hr /> <div class="form-group"> <label class="control-label col-md-4"> </label> <div class="col-md-125"> </div> <label for="localTaxes" class="control-label col-md-125 caption">Local Taxes:</label> <div class="col-md-125"> @Html.TextBox("LocalTaxes", null, htmlAttributes: new { @class = "form-control", id = "localTaxes" }) </div> <label for="stateTaxes" class="control-label col-md-125 caption">State Taxes:</label> <div class="col-md-125"> @Html.TextBox("StateTaxes", null, htmlAttributes: new { @class = "form-control", id = "stateTaxes" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4"> </label> <div class="col-md-125"> </div> <label for="pdd" class="control-label col-md-125 caption">Payment Due Date:</label> <div class="col-md-125"> @Html.TextBox("PaymentDueDate", null, htmlAttributes: new { @class = "form-control", type = "date", id = "pdd" }) </div> <label for="amtDue" class="control-label col-md-125 caption">Amount Due:</label> <div class="col-md-125"> @Html.TextBox("AmountDue", null, htmlAttributes: new { @class = "form-control", id = "amtDue" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4 caption"> </label> <div class="col-md-125"> </div> <label for="lpdd" class="control-label col-md-125 caption">Late Payment Due Date:</label> <div class="col-md-125"> @Html.TextBox("LatePaymentDueDate", null, htmlAttributes: new { @class = "form-control", id = "lpdd" }) </div> <label for="lateAmtDue" class="control-label col-md-125 caption">Late Amount Due:</label> <div class="col-md-125"> @Html.TextBox("LateAmountDue", null, htmlAttributes: new { @class = "form-control", id = "lateAmtDue" }) </div> </div> <div class="form-group text-center"> <label class="control-label col-md-5"> @Html.ActionLink("Water Bills", "Index", null, htmlAttributes: new { @class = "water-nav" }) </label> <div class="col-md-7"> <input type="submit" value="Save Water Bill" class="btn btn-primary" /> </div> </div> </div> } @Scripts.Render("~/bundles/jquery") <script type="text/javascript"> $(document).ready(function () { $("#acntNbr").blur(function (event) { var connection = { method: "GET", dataType: "xml", url: "/WaterDistribution/Customers.xml" }; $.ajax(connection). done(function (data) { var clients = $(data).find("customer"); clients.each(function () { if ($(this).find("account-number").text() === $("#acntNbr").val()) { $("#mtrNbr").val($(this).find("meter-number").text()); $("#custName").val($(this).find("first-name").text() + " " + $(this).find("last-name").text()); $("#adrs").val($(this).find("address").text()); $("#city").val($(this).find("city").text()); $("#county").val($(this).find("county").text()); $("#state").val($(this).find("state").text()); $("#zip").val($(this).find("zip-code").text()); } }); }); connection = { method: "GET", dataType: "xml", url: "/WaterDistribution/WaterMeters.xml" }; $.ajax(connection). done(function (data) { var waterMeters = $(data).find("water-meter"); waterMeters.each(function () { if ($(this).find("meter-number").text() === $("#mtrNbr").val()) { $("#meterDetails").val($(this).find("make").text() + " " + $(this).find("model").text() + " (" + $(this).find("meter-size").text() + ")"); $("#mrsd").val($(this).find("date-last-update").text()); $("#crs").val($(this).find("counter-value").text()); } }); }); connection = { method: "GET", dataType: "xml", url: "/WaterDistribution/WaterBills.xml" }; $.ajax(connection). done(function (data) { var invoices = $(data).find("invoice"); invoices.each(function () { if ($(this).find("account-number").text() === $("#acntNbr").val()) { $("#mrsd").val($(this).find("meter-reading-end-date").text()); $("#crs").val($(this).find("counter-reading-end").text()); } }); }); }); // Account # Lost Focus $("#mred").change(function (event) { var meterReadingStartDate = Date.parse($("#mrsd").val()); var meterReadingEndDate = Date.parse($("#mred").val()); var days = (meterReadingEndDate - meterReadingStartDate) / 86400000; $("#days").val(days.toFixed()); }); // Meter Reading End Date Lost Focus $("#cre").focusout(function (event) { var counterReadingStart = parseInt($("#crs").val()); var counterReadingEnd = parseInt($("#cre").val()); var totalHCF = counterReadingEnd - counterReadingStart; var gallons = totalHCF * 748; // 748.05 var first15HCF = totalHCF * 3.612; var next10HCF = 0, remainingHCF = 0; if (totalHCF <= 15) { first15HCF = totalHCF * 3.612; next10HCF = 0; remainingHCF = 0; } else if (totalHCF <= 25) { first15HCF = 15 * 3.612; next10HCF = (totalHCF - 15) * 3.918; remainingHCF = 0; } else { first15HCF = 15 * 3.612; next10HCF = 10 * 3.918; remainingHCF = (totalHCF - 25) * 2.2763; } var waterUsageCharges = first15HCF + next10HCF + remainingHCF; var sewerCharges = waterUsageCharges * 0.252; var stormCharges = waterUsageCharges * 0.0025; var totalCharges = waterUsageCharges + sewerCharges + stormCharges; var localTaxes = totalCharges * 0.0152; var stateTaxes = totalCharges * 0.005; var amountDue = totalCharges + localTaxes + stateTaxes; $("#thcf").val(totalHCF.toFixed()); $("#gallons").val(gallons.toFixed()); $("#amtDue").val(amountDue.toFixed(2)); $("#f15HCF").val(first15HCF.toFixed(2)); $("#next10HCF").val(next10HCF.toFixed(2)); $("#remHCF").val(remainingHCF.toFixed(2)); $("#wuc").val(waterUsageCharges.toFixed(2)); $("#stateTaxes").val(stateTaxes.toFixed(2)); $("#localTaxes").val(localTaxes.toFixed(2)); $("#sewerCharges").val(sewerCharges.toFixed(2)); $("#stormCharges").val(stormCharges.toFixed(2)); $("#totalCharges").val(totalCharges.toFixed(2)); $("#lateAmtDue").val((amountDue + 8.95).toFixed(2)); }); // Counter Reading End Lost Focus }); // Document.Ready </script>
@{ ViewBag.Title = "Edit/Update Water Bill"; } <div class="push-down"> <h2>Edit/Update Water Bill</h2> </div> <hr /> @using (Html.BeginForm()) { <div class="form-horizontal"> <div class="form-group"> <label for="billNbr" class="control-label col-md-4 caption">Water Bill ID:</label> <div class="col-md-8"> @Html.TextBox("WaterBillID", null, htmlAttributes: new { @class = "form-control", id = "billNbr", disabled = "disabled" }) </div> </div> <div class="form-group"> <label for="invoiceNbr" class="control-label col-md-4 caption">Invoice #:</label> <div class="col-md-8"> @Html.TextBox("InvoiceNumber", null, htmlAttributes: new { @class = "form-control", id = "invoiceNbr" }) </div> </div> <div class="form-group"> <label for="acntNbr" class="control-label col-md-4 caption">Customer Account #:</label> <div class="col-md-8"> @Html.TextBox("AccountNumber", null, htmlAttributes: new { @class = "form-control", id = "acntNbr" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4 caption">Customer Name:</label> <div class="col-md-8"> @Html.TextBox("CustomerName", null, new { @class = "form-control", id = "custName", disabled = "disabled" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4 caption">Customer Address:</label> <div class="col-md-8"> @Html.TextBox("CustomerAddress", null, new { @class = "form-control", id = "adrs", disabled = "disabled" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4"> </label> <div class="col-md-125"> @Html.TextBox("CustomerCity", null, new { @class = "form-control", id = "city", disabled = "disabled" }) </div> <div class="col-md-125"> @Html.TextBox("CustomerCounty", null, new { @class = "form-control", id = "county", disabled = "disabled" }) </div> <div class="col-md-125"> @Html.TextBox("CustomerState", null, new { @class = "form-control", id = "state", disabled = "disabled" }) </div> <div class="col-md-125"> @Html.TextBox("CustomerZIPCode", null, new { @class = "form-control", id = "zip", disabled = "disabled" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4 caption">Meter Details:</label> <div class="col-md-125"> @Html.TextBox("MeterNumber", null, new { @class = "form-control", id = "mtrNbr", disabled = "disabled" }) </div> <div class="col-md-6"> @Html.TextBox("MeterDetails", null, new { @class = "form-control", id = "meterDetails", disabled = "disabled" }) </div> </div> <hr /> <div class="form-group"> <label for="mrsd" class="control-label col-md-4 caption">Meter Reading Start Date:</label> <div class="col-md-2"> @Html.TextBox("MeterReadingStartDate", null, htmlAttributes: new { @class = "form-control", id = "mrsd" }) </div> <label for="mred" class="control-label col-md-125 caption">Meter Reading End Date:</label> <div class="col-md-125"> @Html.TextBox("MeterReadingEndDate", null, htmlAttributes: new { @class = "form-control", type = "date", id = "mred" }) </div> <label for="days" class="control-label col-md-2 caption">Billing Days:</label> <div class="col-md-1"> @Html.TextBox("BillingDays", null, htmlAttributes: new { @class = "form-control", id = "days" }) </div> </div> <div class="form-group"> <label for="crs" class="control-label col-md-4 caption">Counter Reading Start:</label> <div class="col-md-2"> @Html.TextBox("CounterReadingStart", null, htmlAttributes: new { @class = "form-control", id = "crs" }) </div> <label for="cre" class="control-label col-md-125 caption">Current Meter Reading:</label> <div class="col-md-125"> @Html.TextBox("CounterReadingEnd", null, htmlAttributes: new { @class = "form-control", id = "cre" }) </div> <label for="thcf" class="control-label col-md-2 caption">Total HCF:</label> <div class="col-md-1"> @Html.TextBox("TotalHCF", null, htmlAttributes: new { @class = "form-control", id = "thcf" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4"> </label> <div class="col-md-2"> </div> <label class="control-label col-md-125"> </label> <div class="col-md-125"> </div> <label for="gallons" class="control-label col-md-2 caption">Total Gallons:</label> <div class="col-md-1"> @Html.TextBox("TotalGallons", null, htmlAttributes: new { @class = "form-control", id = "gallons" }) </div> </div> <div class="form-group"> <label for="f15HCF" class="control-label col-md-4 caption">1st 15 HCF at $3.6121:</label> <div class="col-md-2"> @Html.TextBox("First15HCF", null, htmlAttributes: new { @class = "form-control", id = "f15HCF" }) </div> <label for="next10HCF" class="control-label col-md-125 caption">Next 10 HCF at $3.9180:</label> <div class="col-md-125"> @Html.TextBox("Next10HCF", null, htmlAttributes: new { @class = "form-control", id = "next10HCF" }) </div> <label for="remHCF" class="control-label col-md-2 caption">Remaining HCF at $4.2763:</label> <div class="col-md-1"> @Html.TextBox("RemainingHCF", null, htmlAttributes: new { @class = "form-control", id = "remHCF" }) </div> </div> <div class="form-group"> <label for="sewerCharges" class="control-label col-md-4 caption">Sewer Charges:</label> <div class="col-md-2"> @Html.TextBox("SewerCharges", null, htmlAttributes: new { @class = "form-control", id = "sewerCharges" }) </div> <label for="stormCharges" class="control-label col-md-125 caption">Storm Charges:</label> <div class="col-md-125"> @Html.TextBox("StormCharges", null, htmlAttributes: new { @class = "form-control", id = "stormCharges" }) </div> <label for="wuc" class="control-label col-md-2 caption">Water Usage Charges:</label> <div class="col-md-1"> @Html.TextBox("WaterUsageCharges", null, htmlAttributes: new { @class = "form-control", id = "wuc" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4"> </label> <div class="col-md-2"> </div> <label class="control-label col-md-125"> </label> <div class="col-md-125"> </div> <label for="totalCharges" class="control-label col-md-2 caption">Total Charges:</label> <div class="col-md-1"> @Html.TextBox("TotalCharges", null, htmlAttributes: new { @class = "form-control", id = "totalCharges" }) </div> </div> <hr /> <div class="form-group"> <label class="control-label col-md-4"> </label> <div class="col-md-125"> </div> <label for="localTaxes" class="control-label col-md-125 caption">Local Taxes:</label> <div class="col-md-125"> @Html.TextBox("LocalTaxes", null, htmlAttributes: new { @class = "form-control", id = "localTaxes" }) </div> <label for="stateTaxes" class="control-label col-md-125 caption">State Taxes:</label> <div class="col-md-125"> @Html.TextBox("StateTaxes", null, htmlAttributes: new { @class = "form-control", id = "stateTaxes" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4"> </label> <div class="col-md-125"> </div> <label for="pdd" class="control-label col-md-125 caption">Payment Due Date:</label> <div class="col-md-125"> @Html.TextBox("PaymentDueDate", null, htmlAttributes: new { @class = "form-control", type = "date", id = "pdd" }) </div> <label for="amtDue" class="control-label col-md-125 caption">Amount Due:</label> <div class="col-md-125"> @Html.TextBox("AmountDue", null, htmlAttributes: new { @class = "form-control", id = "amtDue" }) </div> </div> <div class="form-group"> <label class="control-label col-md-4 caption"> </label> <div class="col-md-125"> </div> <label for="lpdd" class="control-label col-md-125 caption">Late Payment Due Date:</label> <div class="col-md-125"> @Html.TextBox("LatePaymentDueDate", null, htmlAttributes: new { @class = "form-control", id = "lpdd" }) </div> <label for="lateAmtDue" class="control-label col-md-125 caption">Late Amount Due:</label> <div class="col-md-125"> @Html.TextBox("LateAmountDue", null, htmlAttributes: new { @class = "form-control", id = "lateAmtDue" }) </div> </div> <div class="form-group text-center"> <label class="control-label col-md-5"> @Html.ActionLink("Water Bills", "Index", null, htmlAttributes: new { @class = "water-nav" }) </label> <div class="col-md-7"> <input type="submit" value="Update Water Bill" class="btn btn-primary" /> </div> </div> </div> }
@{ ViewBag.Title = "Delete Water Bill"; } <div class="push-down"> <h2>Cancel Water Bill</h2> </div> <hr /> <div class="containment"> <dl class="dl-horizontal common-font caption"> <dt class="bold">Water Bill ID:</dt> <dd>@ViewData["WaterBillID"]</dd> <dt class="bold">Invoice #:</dt> <dd>@ViewData["InvoiceNumber"]</dd> <dt class="bold">Account #:</dt> <dd>@ViewData["AccountNumber"]</dd> <dt class="bold">Meter Reading Start Date:</dt> <dd>@ViewData["MeterReadingStartDate"]</dd> <dt class="bold">Meter Reading End Date:</dt> <dd>@ViewData["MeterReadingEndDate"]</dd> <dt class="bold">Billing Days:</dt> <dd>@ViewData["BillingDays"]</dd> <dt class="bold">Counter Reading Start:</dt> <dd>@ViewData["CounterReadingStart"]</dd> <dt class="bold">Counter Reading End:</dt> <dd>@ViewData["CounterReadingEnd"]</dd> <dt class="bold">Total HCF:</dt> <dd>@ViewData["TotalHCF"]</dd> <dt class="bold">Total Gallons:</dt> <dd>@ViewData["TotalGallons"]</dd> <dt class="bold">First 15 HCF:</dt> <dd>@ViewData["First15HCF"]</dd> <dt class="bold">Next 10 HCF:</dt> <dd>@ViewData["Next10HCF"]</dd> <dt class="bold">Remaining HCF:</dt> <dd>@ViewData["RemainingHCF"]</dd> <dt class="bold">Sewer Charges:</dt> <dd>@ViewData["SewerCharges"]</dd> <dt class="bold">Storm Charges:</dt> <dd>@ViewData["StormCharges"]</dd> <dt class="bold">Water Usage Charges:</dt> <dd>@ViewData["WaterUsageCharges"]</dd> <dt class="bold">Total Charges:</dt> <dd>@ViewData["TotalCharges"]</dd> <dt class="bold">Local Taxes:</dt> <dd>@ViewData["LocalTaxes"]</dd> <dt class="bold">State Taxes:</dt> <dd>@ViewData["StateTaxes"]</dd> <dt class="bold">Payment Due Date:</dt> <dd>@ViewData["PaymentDueDate"]</dd> <dt class="bold">Amount Due:</dt> <dd>@ViewData["AmountDue"]</dd> <dt class="bold">Late Payment Due Date:</dt> <dd>@ViewData["LatePaymentDueDate"]</dd> <dt class="bold">Late Amount Due:</dt> <dd>@ViewData["LateAmountDue"]</dd> </dl> <h3 class="common-font caption">Are you sure you want to cancel this water bill (if you do, the bill will disappear from the system)?</h3> @using (Html.BeginForm()) { <div class="form-actions no-color"> <input type="submit" value="Cancel this Water Bill" class="btn btn-primary" /> | @Html.ActionLink("Customers Water Bills", "Index", null, new { @class = "water-nav" }) </div> } </div>
Payments
Bills payments are the means by which a company make smoney. Now, we will create the webpages necessary to create and manage payments.
Practical Learning: Making Payments
using System; using System.IO; using System.Xml; using System.Linq; using System.Web.Mvc; namespace WaterDistributionCompany1.Controllers { public class PaymentsController : Controller { // GET: Payments public ActionResult Index() { XmlDocument xdPayments = new XmlDocument(); string strFilePayments = Server.MapPath("/WaterDistribution/Payments.xml"); if (System.IO.File.Exists(strFilePayments)) { using (FileStream fsPayments = new FileStream(strFilePayments, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdPayments.Load(fsPayments); } if (xdPayments.DocumentElement.ChildNodes.Count > 0) { ViewData["Payments"] = xdPayments.DocumentElement.ChildNodes; } else { ViewData["Payments"] = null; } } return View(); } // GET: Payments/Details/5 public ActionResult Details(int id) { XmlDocument xdPayments = new XmlDocument(); string strFilePayments = Server.MapPath("/WaterDistribution/Payments.xml"); if (System.IO.File.Exists(strFilePayments)) { using (FileStream fsPayments = new FileStream(strFilePayments, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdPayments.Load(fsPayments); XmlNodeList xnlPayments = xdPayments.GetElementsByTagName("payment-id"); foreach (XmlNode xnPayment in xnlPayments) { if (xnPayment.InnerText == id.ToString()) { ViewData["PaymentID"] = xnPayment.InnerText; ViewData["ReceiptNumber"] = xnPayment.NextSibling.InnerText; ViewData["WaterBillID"] = xnPayment.NextSibling.NextSibling.InnerText; ViewData["PaymentDate"] = xnPayment.NextSibling.NextSibling.NextSibling.InnerText; ViewData["PaymentAmount"] = xnPayment.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; } } } } return View(); } // GET: Payments/Create public ActionResult Create() { int payment_id = 0; XmlDocument xdPayments = new XmlDocument(); string strFilePayments = Server.MapPath("/WaterDistribution/Payments.xml"); if (System.IO.File.Exists(strFilePayments)) { using (FileStream fsPayments = new FileStream(strFilePayments, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdPayments.Load(fsPayments); XmlNodeList xnlPayments = xdPayments.GetElementsByTagName("payment-id"); foreach (XmlNode xnPayment in xnlPayments) { payment_id = int.Parse(xnPayment.FirstChild.InnerText); } } } ViewData["PaymentID"] = (payment_id + 1); Random rndNumber = new Random(); ViewData["ReceiptNumber"] = rndNumber.Next(100001, 999999).ToString(); return View(); } // POST: Payments/Create [HttpPost] public ActionResult Create(FormCollection collection) { try { // TODO: Add insert logic here // int pmtId = 0; XmlDocument xdPayments = new XmlDocument(); string strFilePayments = Server.MapPath("/WaterDistribution/Payments.xml"); if (System.IO.File.Exists(strFilePayments)) { using (FileStream fsPayments = new FileStream(strFilePayments, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdPayments.Load(fsPayments); /* XmlNodeList xnlPayments = xdPayments.GetElementsByTagName("payment-id"); foreach (XmlNode xnPayment in xnlPayments) { pmtId = int.Parse(xnPayment.InnerText); } */ } } else { xdPayments.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<payments></payments>"); // pmtId = 0; } // pmtId++; XmlElement xePayment = xdPayments.CreateElement("payment"); xePayment.InnerXml = "<payment-id>" + collection["PaymentID"] + "</payment-id>" + "<receipt-number>" + collection["ReceiptNumber"] + "</receipt-number>" + "<water-bill-id>" + collection["WaterBillID"] + "</water-bill-id>" + "<payment-date>" + collection["PaymentDate"] + "</payment-date>" + "<payment-amount>" + collection["PaymentAmount"] + "</payment-amount>"; xdPayments.DocumentElement.AppendChild(xePayment); using (FileStream fsPayments = new FileStream(strFilePayments, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { xdPayments.Save(fsPayments); } return RedirectToAction("Index"); } catch { return View(); } } // GET: Payments/Edit/5 public ActionResult Edit(int id) { XmlDocument xdPayments = new XmlDocument(); string strFilePayments = Server.MapPath("/WaterDistribution/Payments.xml"); if (System.IO.File.Exists(strFilePayments)) { using (FileStream fsPayments = new FileStream(strFilePayments, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdPayments.Load(fsPayments); XmlNodeList xnlPayments = xdPayments.GetElementsByTagName("payment-id"); foreach (XmlNode xnPayment in xnlPayments) { if (xnPayment.InnerText == id.ToString()) { ViewData["PaymentID"] = xnPayment.InnerText; ViewData["ReceiptNumber"] = xnPayment.NextSibling.InnerText; ViewData["WaterBillID"] = xnPayment.NextSibling.NextSibling.InnerText; ViewData["PaymentDate"] = xnPayment.NextSibling.NextSibling.NextSibling.InnerText; ViewData["PaymentAmount"] = xnPayment.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; } } } } return View(); } // POST: Payments/Edit/5 [HttpPost] public ActionResult Edit(int id, FormCollection collection) { try { // TODO: Add update logic here XmlDocument xdPayments = new XmlDocument(); string strFilePayments = Server.MapPath("/WaterDistribution/Payments.xml"); if (System.IO.File.Exists(strFilePayments)) { using (FileStream fsPayments = new FileStream(strFilePayments, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) { xdPayments.Load(fsPayments); } XmlNodeList xnlPayments = xdPayments.GetElementsByTagName("payment-id"); using (FileStream fsPayments = new FileStream(strFilePayments, FileMode.Truncate, FileAccess.ReadWrite, FileShare.ReadWrite)) { foreach (XmlNode xnPayment in xnlPayments) { if (xnPayment.InnerText == id.ToString()) { xnPayment.ParentNode.InnerXml = "<payment-id>" + id + "</payment-id>" + "<receipt-number>" + collection["ReceiptNumber"] + "</receipt-number>" + "<water-bill-id>" + collection["WaterBillID"] + "</water-bill-id>" + "<payment-date>" + collection["PaymentDate"] + "</payment-date>" + "<payment-amount>" + collection["PaymentAmount"] + "</payment-amount>"; xdPayments.Save(fsPayments); break; } } } } return RedirectToAction("Index"); } catch { return View(); } } // GET: Payments/Delete/5 public ActionResult Delete(int id) { XmlDocument xdPayments = new XmlDocument(); string strFilePayments = Server.MapPath("/WaterDistribution/Payments.xml"); if (System.IO.File.Exists(strFilePayments)) { using (FileStream fsPayments = new FileStream(strFilePayments, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdPayments.Load(fsPayments); XmlNodeList xnlPayments = xdPayments.GetElementsByTagName("payment-id"); foreach (XmlNode xnPayment in xnlPayments) { if (xnPayment.InnerText == id.ToString()) { ViewData["PaymentID"] = xnPayment.InnerText; ViewData["ReceiptNumber"] = xnPayment.NextSibling.InnerText; ViewData["WaterBillID"] = xnPayment.NextSibling.NextSibling.InnerText; ViewData["PaymentDate"] = xnPayment.NextSibling.NextSibling.NextSibling.InnerText; ViewData["PaymentAmount"] = xnPayment.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; } } } } return View(); } // POST: Payments/Delete/5 [HttpPost] public ActionResult Delete(int id, FormCollection collection) { try { // TODO: Add delete logic here XmlDocument xdPayments = new XmlDocument(); string strFilePayments = Server.MapPath("/WaterDistribution/Payments.xml"); if (System.IO.File.Exists(strFilePayments)) { using (FileStream fsPayments = new FileStream(strFilePayments, FileMode.Open, FileAccess.Read, FileShare.Read)) { xdPayments.Load(fsPayments); } using (FileStream fsPayments = new FileStream(strFilePayments, FileMode.Truncate, FileAccess.Write, FileShare.Write)) { XmlNodeList xnlPayments = xdPayments.GetElementsByTagName("payment"); foreach (XmlNode xnPayment in xnlPayments) { if (xnPayment.FirstChild.InnerText == id.ToString()) { xnPayment.ParentNode.RemoveChild(xnPayment); xdPayments.Save(fsPayments); break; } } } } return RedirectToAction("Index"); } catch { return View(); } } } }
@{ ViewBag.Title = "Water Bills Payments"; } <div class="push-down"> <h2 class="common-font bold text-center">Water Bills Payments</h2> </div> <hr /> <table class="table table-striped common-font"> <tr> <th class="bold">Payment ID</th> <th class="bold">Receipt #</th> <th class="bold">Water Bill ID</th> <th class="bold">Payment Date</th> <th class="bold">Payment Amount</th> <th>@Html.ActionLink("New Bill Payment", "Create", null, htmlAttributes: new { @class = "water-nav" })</th> </tr> @if (ViewData["Payments"] != null) { foreach (System.Xml.XmlNode pmt in ViewData["Payments"] as System.Xml.XmlNodeList) { <tr> <td class="text-center">@pmt.FirstChild.InnerText</td> <td>@pmt.FirstChild.NextSibling.InnerText</td> <td>@pmt.FirstChild.NextSibling.NextSibling.InnerText</td> <td>@pmt.FirstChild.NextSibling.NextSibling.NextSibling.InnerText</td> <td>@pmt.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.InnerText</td> <td> @Html.ActionLink("Update", "Edit", new { id = pmt.FirstChild.InnerText }) <span style="color: aquamarine">::</span> @Html.ActionLink("Review", "Details", new { id = pmt.FirstChild.InnerText }) <span style="color: aquamarine">::</span> @Html.ActionLink("Remove", "Delete", new { id = pmt.FirstChild.InnerText }) </td> </tr> } } </table>
@{ ViewBag.Title = "Water Bill Details"; } <div class="push-down"> <h2>Water Bill Details</h2> </div> <hr /> <div class="containment"> <dl class="dl-horizontal common-font caption"> <dt class="bold">Payment ID:</dt> <dd>@ViewData["PaymentID"]</dd> <dt>Receipt #:</dt> <dd>@ViewData["ReceiptNumber"]</dd> <dt>Water Bill ID:</dt> <dd>@ViewData["WaterBillID"]</dd> <dt>Payment Date:</dt> <dd>@ViewData["PaymentDate"]</dd> <dt>Payment Amount:</dt> <dd>@ViewData["PaymentAmount"]</dd> </dl> </div> <p class="text-center"> @Html.ActionLink("Edit/Update Bill Payment", "Edit", new { id = ViewData["PaymentID"] }, htmlAttributes: new { @class = "water-nav" }) :: @Html.ActionLink("Water Bill Payments", "Index", null, new { @class = "water-nav" }) </p>
@{ ViewBag.Title = "Create Bill Payment"; } <div class="push-down"> <h2>Make Water Bill Payment</h2> </div> <hr /> @using (Html.BeginForm()) { <div class="form-horizontal"> <div class="form-group"> <label for="pmtId" class="control-label col-md-4 caption">Payment ID:</label> <div class="col-md-8"> @Html.TextBox("PaymentID", null, htmlAttributes: new { @class = "form-control", id = "pmtId" }) </div> </div> <div class="form-group"> <label for="mtrNbr" class="control-label col-md-4 caption">Receipt #:</label> <div class="col-md-8"> @Html.TextBox("ReceiptNumber", null, htmlAttributes: new { @class = "form-control", id = "mtrNbr" }) </div> </div> <div class="form-group"> <label for="billId" class="control-label col-md-4 caption">Water Bill ID:</label> <div class="col-md-8"> @Html.TextBox("WaterBillID", null, htmlAttributes: new { @class = "form-control", id = "billId" }) </div> </div> <div class="form-group"> <label for="pmtDate" class="control-label col-md-4 caption">Payment Date:</label> <div class="col-md-8"> @Html.TextBox("PaymentDate", null, htmlAttributes: new { @class = "form-control", id = "pmtDate" }) </div> </div> <div class="form-group"> <label for="pmtAmt" class="control-label col-md-4 caption">Payment Amount:</label> <div class="col-md-8"> @Html.TextBox("PaymentAmount", null, htmlAttributes: new { @class = "form-control", id = "pmtAmt" }) </div> </div> <div class="form-group"> <label class="control-label col-md-5"> @Html.ActionLink("Bills Payments", "Index", null, htmlAttributes: new { @class = "water-nav" }) </label> <div class="col-md-7"> <input type="submit" value="Create Bill Payment" class="btn btn-primary" /> </div> </div> </div> }
@{ ViewBag.Title = "Edit/Update Bill Payment"; } <div class="push-down"> <h2>Edit/Update Bill Payment</h2> </div> <hr /> @using (Html.BeginForm()) { <div class="form-horizontal"> <div class="form-group"> <label class="control-label col-md-4 caption">Payment ID:</label> <div class="col-md-8"> @Html.TextBox("PaymentID", null, htmlAttributes: new { @class = "form-control", disabled = "disabled" }) </div> </div> <div class="form-group"> <label for="recNbr" class="control-label col-md-4 caption">Receipt #:</label> <div class="col-md-8"> @Html.TextBox("ReceiptNumber", null, htmlAttributes: new { @class = "form-control", id = "recNbr" }) </div> </div> <div class="form-group"> <label for="billNbr" class="control-label col-md-4 caption">Account #:</label> <div class="col-md-8"> @Html.TextBox("WaterBillID", null, htmlAttributes: new { @class = "form-control", id = "billNbr" }) </div> </div> <div class="form-group"> <label for="pmtDate" class="control-label col-md-4 caption">Payment Date:</label> <div class="col-md-8"> @Html.TextBox("PaymentDate", null, htmlAttributes: new { @class = "form-control", type = "date", id = "pmtDate" }) </div> </div> <div class="form-group"> <label for="pmtAmt" class="control-label col-md-4 caption">Payment Amount:</label> <div class="col-md-8"> @Html.TextBox("PaymentAmount", null, htmlAttributes: new { @class = "form-control", id = "pmtAmt" }) </div> </div> <div class="form-group"> <label class="control-label col-md-5"> @Html.ActionLink("Bills Payments", "Index", null, htmlAttributes: new { @class = "water-nav" }) </label> <div class="col-md-7"> <input type="submit" value="Update this Payment" class="btn btn-primary" /> </div> </div> </div> }
@{ ViewBag.Title = "Delete Bill Payment"; } <div class="push-down"> <h2>Delete Bill Payment</h2> </div> <hr /> <div class="containment"> <dl class="dl-horizontal common-font caption"> <dt>Payment ID:</dt> <dd>@ViewData["PaymentID"]</dd> <dt>Receipt #:</dt> <dd>@ViewData["ReceiptNumber"]</dd> <dt>Water Bill ID:</dt> <dd>@ViewData["WaterBillID"]</dd> <dt>Payment Date:</dt> <dd>@ViewData["PaymentDate"]</dd> <dt>Payment Amount:</dt> <dd>@ViewData["PaymentAmount"]</dd> </dl> <h3 class="common-font caption">Are you sure you want to cancel this payment?</h3> @using (Html.BeginForm()) { <div class="form-actions no-color"> <input type="submit" value="Cancel this bill payment" class="btn btn-primary" /> | @Html.ActionLink("Water Bills Payments", "Index", null, new { @class = "water-nav" }) </div> } </div>
Finalizing the Application
Most of the time, it is a good idea to apply a common design to most webpages of a website. In ASP.NET, such a design is created as a layout view.
Practical Learning: Finalizing the Application
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>@ViewBag.Title - Water for a Shining Life</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") </head> <body> <div class="top-bar"> <div class="containment"><img src="~/Images/wsl1.png" alt="Water for a Shining Life" width="490" height="92" /></div> </div> <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("Home", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li>@Html.ActionLink("Emergency Services", "Index", "Home")</li> <li>@Html.ActionLink("Cummunity", "Index", "Home")</li> <li>@Html.ActionLink("Environment", "Index", "Home")</li> <li>@Html.ActionLink("Resources", "Index", "Home")</li> <li>@Html.ActionLink("Projects", "Index", "Home")</li> <li>@Html.ActionLink("Customer Service", "Index", "Home")</li> <li>@Html.ActionLink("Employment", "Index", "Home")</li> <li>@Html.ActionLink("Questions?", "Index", "Home")</li> <li>@Html.ActionLink("About", "About", "Home")</li> <li>@Html.ActionLink("Contact", "Contact", "Home")</li> </ul> </div> </div> </div> <div class="container body-content"> @RenderBody() <hr /> <footer> <p class="copyright text-center common-font">© @DateTime.Now.Year - Water for a Shining Life</p> </footer> </div> @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @RenderSection("scripts", required: false) </body> </html>
<div class="jumbotron"> <h2>.</h2> <p class="lead"> Our water utility company provides energy, greatness, and warmth for a everyday life, a shining life. We provide solutions to families, businesses, and the community. </p> <p class="lead"> This is the employees portal section of the company. From here, employees can register a new water meter, manage a customer account, or create a water bill. </p> </div> <div class="row"> <div class="col-md-3"> <h2>Water Meters</h2> <p> Our company uses the most accurate, sophisticated, and environment-friendly water meters on the market. </p> <p>@Html.ActionLink("Water Meters", "Index", "WaterMeters", null, new { @class = "btn btn-primary" })</p> </div> <div class="col-md-3"> <h2>Customers</h2> <p> We supply water to individuals, families, small businesses, as well as enterprises or government agencies. </p> <p>@Html.ActionLink("Customers", "Index", "Customers", null, new { @class = "btn btn-primary" })</p> </div> <div class="col-md-3"> <h2>Water Bills</h2> <p> Our water rates are very competitive nationwide. We use precise, effective, and strict algorithms when calculating our bills. </p> <p>@Html.ActionLink("Bills/Invoices", "Index", "WaterBills", null, new { @class = "btn btn-primary" })</p> </div> <div class="col-md-3"> <h2>Payments</h2> <p> Our payment system is the simplest, the fairest, and the fastest. Our custiomer's service is highly rated. </p> <p>@Html.ActionLink("Bills Payments", "Index", "Payments", null, new { @class = "btn btn-primary" })</p> </div> </div>
Meter # | Make | Model | Meter Size | Date Last Update | Counter Value |
392-44-572 | Constance Technologies | TG-4822 | 5/8 Inches | 03/31/2018 | 109992 |
938-75-869 | Standard Trend | 266G | 1 1/2 Inches | 10/22/2017 | 137926 |
799-28-461 | Constance Technologies | BD-7000 | 3/4 Inches | 05/05/2018 | 6268 |
207-94-835 | Constance Technologies | TG-6220 | 5/8 Inches | 02/17/2018 | 96 |
592-84-957 | Standard Trend | 428T | 3/4 Inches | 12/07/2018 | 49 |
28358958 | Igawa International | TR6224 | 3/4 Inches | 04/22/2012 | 1138 |
Meter #: 283-58-958 Make: Constance Technologies Model: TR-6224 Date Last Udate: 04/22/2022
Account # | Meter # | First Name | Last Name | Address | City | County | State | ZIP Code |
9279-570-8394 | 799-28-461 | Thomas | Stones | 10252 Broward Ave #D4 | Frederick | Frederick | MD | 21703 |
4820-375-2842 | 392-44-572 | Akhil | Koumari | 748 Red Hills Rd | Roanoke | VA | 24012 | |
7518-302-6895 | 207-94-835 | Grace | Brenner | 4299 Peachtree Court | Rockville | Montgomery | MD | 20853 |
2038-413-9680 | 938-75-869 | Amidou | Gomah | 2075 Rose Hills Ave | Washington | DC | 20004 | |
5938-074-5293 | 592-84-957 | Marie | Rath | 582G Dunhill Ave | Lanham | Prince George | MD | 20706 |
28864153060 | 392-44-572 | Janice | Edson | 10304 Rolando Drv | Anderson | PA | 17262 |
Payment Due Date: 08/27/2022 Late Payment Due Date: 09/13/2022
Account # | Meter Reading End Date | Current Meter Reading | Payment Due Date | Late Payment Due Date |
4820-375-2842 | 07/31/2022 | 109998 | 08/28/2022 | 09/14/2022 |
2038-413-9680 | 7/30/2022 | 137975 | 8/27/2022 | 9/13/2022 |
9279-570-8394 | 08/07/2022 | 6275 | 08/04/2022 | 08/20/2022 |
7518-302-6895 | 11/07/2022 | 118 | 12/01/2022 | 12/15/2022 |
2038-413-9680 | 10/27/2022 | 138012 | 11/24/2022 | 12/10/2022 |
Receipt # | Bill ID | Payment Date | Payment Amount |
625288 | 2 | 08/24/2022 | 145.75 |
836168 | 3 | 09/12/2022 | 198.36 |
886415 | 1 | 08/27/2022 | 93.34 |
724705 | 4 | 09/01/2022 | 41.31 |
141806 | 6 | 12/05/2022 | 163.40 |
706953 | 5 | 12/10/2022 | 27.44 |
|
|||
Home | Copyright © 2005-2022, FunctionX | Friday 06 May 2022 | Home |
|