Skip to content

Commit c69816b

Browse files
committed
2nd api
1 parent d41cf0d commit c69816b

File tree

1 file changed

+27
-14
lines changed

1 file changed

+27
-14
lines changed

web/src/main/scala/views/MortgageCalculator.scala

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,15 @@ import io.udash.wrappers.jquery.{jQ => $, _}
99

1010
import java.text.DecimalFormat
1111

12+
import framework.JsRead._
13+
import api.Mortgage
14+
1215
@JSExportTopLevel("mortgage_calculator")
1316
object MortgageCalculator extends framework.Page("mortgage_calculator") {
1417
override def renderBody = body(
1518
div(`class` := "container card w-25 mt-5 p-3")(
1619
h3("Mortgage Calculator"),
17-
t.form(t.id := "calculator")(
20+
form(t.id := "calculator")(
1821
input(label = "Loan Amount ($)", id = "loan", default = 1e6.toInt),
1922
input(label = "APR (%)", id = "apr", default = 5),
2023
input(label = "Mortgage Period (years)", id = "years", default = 30),
@@ -33,15 +36,14 @@ object MortgageCalculator extends framework.Page("mortgage_calculator") {
3336
)
3437

3538
override def init() = {
36-
$("#calc_payments").on("click", calc)
39+
$("#calc_payments").on("click", calculate_payments)
40+
$("#refinance").on("click", calculate_refinance)
3741
}
3842

39-
@nowarn
40-
def calc(element: Element, event: JQueryEvent) = {
41-
import framework.JsRead._
43+
val moneyFormat = new DecimalFormat("$ #.00")
4244

43-
val format = new DecimalFormat("$ #.00");
44-
import api.Mortgage
45+
@nowarn
46+
def calculate_payments(element: Element, event: JQueryEvent) = {
4547
$("#output").html(
4648
table(`class` := "table table-striped font-monospace")(
4749
tr(th("#"), th("Balance"), th("Payment"), th("Principal"), th("Interest")),
@@ -57,15 +59,26 @@ object MortgageCalculator extends framework.Page("mortgage_calculator") {
5759
} $("#output tr:last").after(
5860
tr(
5961
td(row + 1),
60-
td(format.format(payment.balance)),
61-
td(format.format(payment.payment)),
62-
td(format.format(payment.principal)),
63-
td(format.format(payment.interest)),
62+
td(moneyFormat.format(payment.balance)),
63+
td(moneyFormat.format(payment.payment)),
64+
td(moneyFormat.format(payment.principal)),
65+
td(moneyFormat.format(payment.interest)),
6466
).render,
6567
)
6668
}
69+
70+
@nowarn
71+
def calculate_refinance(element: Element, event: JQueryEvent) = {
72+
for {
73+
amount <- $("#loan").value().as[Int]
74+
apr <- $("#apr").value().as[Double]
75+
years <- $("#years").value().as[Int]
76+
newApr <- $("#new_apr").value().as[Double]
77+
mortgage = Mortgage(amount = amount, apr = apr, years = years)
78+
penalty <- Mortgage.API.refinancePenalty(mortgage, newApr)
79+
} $("#output").html(
80+
div(`class` := "container")(s"You will save ${moneyFormat.format(penalty)} over $years years in interest").render
81+
)
82+
}
6783
}
6884

69-
/*
70-
* Thu, Sep 1: code review + 2nd API
71-
*/

0 commit comments

Comments
 (0)