@@ -179,13 +179,13 @@ var paths = map[string]string { | |||||
"home": "views/home.tpl", | "home": "views/home.tpl", | ||||
"terms": "views/terms.tpl", | "terms": "views/terms.tpl", | ||||
"app": "views/app.tpl", | "app": "views/app.tpl", | ||||
"test": "views/test.tpl", | |||||
"comparison": "views/report/comparison.tpl", | |||||
} | } | ||||
var pages = map[string]Page { | var pages = map[string]Page { | ||||
"home": cache("home", "Home"), | "home": cache("home", "Home"), | ||||
"terms": cache("terms", "Terms and Conditions"), | "terms": cache("terms", "Terms and Conditions"), | ||||
"test": cache("test", "PDF test"), | |||||
"test": cachePdf("comparison"), | |||||
"app": cache("app", "App"), | "app": cache("app", "App"), | ||||
} | } | ||||
@@ -208,10 +208,25 @@ func (c UserClaims) Valid() error { | |||||
func cache(name string, title string) Page { | func cache(name string, title string) Page { | ||||
var p = []string{"views/master.tpl", paths[name]} | var p = []string{"views/master.tpl", paths[name]} | ||||
tpl := template.Must(template.ParseFiles(p...)) | tpl := template.Must(template.ParseFiles(p...)) | ||||
return Page{tpl: tpl, | |||||
Title: title, | |||||
Name: name, | |||||
} | |||||
return Page{tpl: tpl, Title: title, Name: name} | |||||
} | |||||
func cachePdf(name string) Page { | |||||
dollars := func(cents int) string { | |||||
return strconv.FormatFloat(float64(cents)/100, 'f', 2, 32) | |||||
} | |||||
diff := func(a, b int) string { | |||||
return strconv.FormatFloat(float64(b - a)/100, 'f', 2, 32) | |||||
} | |||||
fm := template.FuncMap{ | |||||
"dollars": dollars, | |||||
"diff": diff, | |||||
} | |||||
var p = []string{"views/report/master.tpl", paths[name]} | |||||
tpl := template.Must(template.New("master.tpl").Funcs(fm).ParseFiles(p...)) | |||||
return Page{ tpl: tpl, Title: "", Name: name } | |||||
} | } | ||||
func (page Page) Render(w http.ResponseWriter) { | func (page Page) Render(w http.ResponseWriter) { | ||||
@@ -1822,8 +1837,8 @@ func showPDF(w http.ResponseWriter, r *http.Request) { | |||||
// maybe os.Exit(1) instead | // maybe os.Exit(1) instead | ||||
} | } | ||||
var pa = template.Must(template.ParseFiles("views/master.tpl", | |||||
"views/test.tpl")) | |||||
page := pages["test"] | |||||
estimates, err := getEstimates(db, 1, 0) | estimates, err := getEstimates(db, 1, 0) | ||||
if err != nil { w.WriteHeader(500); return } | if err != nil { w.WriteHeader(500); return } | ||||
@@ -1851,7 +1866,7 @@ func showPDF(w http.ResponseWriter, r *http.Request) { | |||||
info.Letterhead = | info.Letterhead = | ||||
base64.StdEncoding.EncodeToString(letterhead) | base64.StdEncoding.EncodeToString(letterhead) | ||||
err = pa.Execute(w, info) | |||||
err = page.tpl.ExecuteTemplate(w, "master.tpl", info) | |||||
if err != nil {fmt.Println(err)} | if err != nil {fmt.Println(err)} | ||||
} | } | ||||
@@ -1879,8 +1894,13 @@ func getPdf(w http.ResponseWriter, db *sql.DB, r *http.Request) { | |||||
log.Fatal(err) | log.Fatal(err) | ||||
} | } | ||||
var pa = template.Must(template.ParseFiles("views/pdf.tpl", | |||||
"views/test.tpl")) | |||||
fm := template.FuncMap{ | |||||
"dollars": func(cents int) string { | |||||
return strconv.FormatFloat(float64(cents)/100, 'f', 2, 32) | |||||
}} | |||||
t := template.New("master.tpl").Funcs(fm) | |||||
var pa = template.Must(t.ParseFiles("views/report/master.tpl", "views/report/comparison.tpl")) | |||||
claims, err := getClaims(r) | claims, err := getClaims(r) | ||||
if err != nil { | if err != nil { | ||||
@@ -1911,7 +1931,7 @@ func getPdf(w http.ResponseWriter, db *sql.DB, r *http.Request) { | |||||
base64.StdEncoding.EncodeToString(letterhead) | base64.StdEncoding.EncodeToString(letterhead) | ||||
err = pa.Execute(stdin, info) | |||||
err = pa.ExecuteTemplate(stdin, "master.tpl", info) | |||||
if err != nil { | if err != nil { | ||||
w.WriteHeader(500); | w.WriteHeader(500); | ||||
log.Println(err) | log.Println(err) | ||||
@@ -1,10 +1,8 @@ | |||||
{{define "header"}} | {{define "header"}} | ||||
<header class="default fade-in"> | |||||
</header> | |||||
{{end}} | {{end}} | ||||
{{define "main"}} | {{define "main"}} | ||||
<div id="pdf-doc" ref="doc" v-if="estimate"> | |||||
<div id="pdf-doc"> | |||||
<div class="disclaimer"><p>Actual costs may vary from estimates after approval. Get an official quote before choosing a loan.</p></div> | <div class="disclaimer"><p>Actual costs may vary from estimates after approval. Get an official quote before choosing a loan.</p></div> | ||||
<header class="heading"> | <header class="heading"> | ||||
@@ -33,38 +31,42 @@ | |||||
<tbody> | <tbody> | ||||
<tr><td>Type</td> | <tr><td>Type</td> | ||||
{{range $l := .Estimate.Loans}}<td>{{$l.Type.Name}}</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>{{.Type.Name}}</td>{{end}}</tr> | |||||
<tr><td>Term</td> | <tr><td>Term</td> | ||||
{{range $l := .Estimate.Loans}}<td>{{$l.Term}} Years</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>{{.Term}} Years</td>{{end}}</tr> | |||||
<tr><td>Amortization</td> | <tr><td>Amortization</td> | ||||
{{range $l := .Estimate.Loans}}<td>{{$l.Amortization}}</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>{{.Amortization}}</td>{{end}}</tr> | |||||
<tr><td>Interest rate</td> | <tr><td>Interest rate</td> | ||||
{{range $l := .Estimate.Loans}}<td>{{$l.Interest}}%</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>{{.Interest}}%</td>{{end}}</tr> | |||||
<tr><td>Monthly MI</td> | <tr><td>Monthly MI</td> | ||||
{{range $l := .Estimate.Loans}}<td>${{$l.Mi.Premium}}/month</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>${{.Mi.Premium}}/month</td>{{end}}</tr> | |||||
<tr><td>MI Premium</td> | <tr><td>MI Premium</td> | ||||
{{range $l := .Estimate.Loans}}<td>${{$l.Mi.Upfront}}</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>${{.Mi.Upfront}}</td>{{end}}</tr> | |||||
<tr><td>Real estate taxes</td> | <tr><td>Real estate taxes</td> | ||||
{{range $l := .Estimate.Loans}}<td>${{$l.Tax}}</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>${{.Tax}}</td>{{end}}</tr> | |||||
<tr class="total"><td>Total monthly payment</td> | <tr class="total"><td>Total monthly payment</td> | ||||
{{range $l := .Estimate.Loans}}<td>{{$l.Result}}</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>{{.Result}}</td>{{end}}</tr> | |||||
<tr><td>Purchase price</td> | <tr><td>Purchase price</td> | ||||
{{range $l := .Estimate.Loans}}<td>{{$.Estimate.Price}}</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>${{dollars $.Estimate.Price}}</td>{{end}}</tr> | |||||
<tr><td>Loan amount</td> | |||||
{{range .Estimate.Loans}}<td>${{dollars .Amount}}</td>{{end}}</tr> | |||||
<tr><td>Term</td> | <tr><td>Term</td> | ||||
{{range $l := .Estimate.Loans}}<td>{{$l.Term}} Years</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>{{.Term}} Years</td>{{end}}</tr> | |||||
<tr><td>Amortization</td> | <tr><td>Amortization</td> | ||||
{{range $l := .Estimate.Loans}}<td>{{$l.Amortization}}</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>{{.Amortization}}</td>{{end}}</tr> | |||||
<tr><td>Interest rate</td> | <tr><td>Interest rate</td> | ||||
{{range $l := .Estimate.Loans}}<td>{{$l.Interest}}%</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>{{.Interest}}%</td>{{end}}</tr> | |||||
<tr><td>Monthly MI</td> | <tr><td>Monthly MI</td> | ||||
{{range $l := .Estimate.Loans}}<td>${{$l.Mi.Premium}}/month</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>${{.Mi.Premium}}/month</td>{{end}}</tr> | |||||
<tr><td>MI Premium</td> | <tr><td>MI Premium</td> | ||||
{{range $l := .Estimate.Loans}}<td>${{$l.Mi.Upfront}}</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>${{.Mi.Upfront}}</td>{{end}}</tr> | |||||
<tr><td>Real estate taxes</td> | <tr><td>Real estate taxes</td> | ||||
{{range $l := .Estimate.Loans}}<td>${{$l.Tax}}</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>${{.Tax}}</td>{{end}}</tr> | |||||
<tr class="total"><td>Total monthly payment</td> | <tr class="total"><td>Total monthly payment</td> | ||||
{{range $l := .Estimate.Loans}}<td>{{$l.Result}}</td>{{end}}</tr> | |||||
{{range .Estimate.Loans}}<td>{{.Result.TotalMonthly}}</td>{{end}}</tr> | |||||
<tr><td>Purchase price</td> | |||||
{{range .Estimate.Loans}}<td>${{dollars $.Estimate.Price}}</td>{{end}}</tr> | |||||
</tbody> | </tbody> | ||||
</table> | </table> |
@@ -3,7 +3,6 @@ | |||||
<meta charset='utf-8'> | <meta charset='utf-8'> | ||||
<meta name="viewport" | <meta name="viewport" | ||||
content="width=device-width, initial-scale=1, shrink-to-fit=no"> | content="width=device-width, initial-scale=1, shrink-to-fit=no"> | ||||
<link rel="stylesheet" href=""> | |||||
</head> | </head> | ||||
<body> | <body> |