ソースを参照

Make Result an attribute of Loan type

Move Result attribute from Estimate to it's related Loan to make it's
meaning less confusing.
master
コミット
3b66fe413a
3個のファイルの変更72行の追加15行の削除
  1. +2
    -1
      components/estimate-test.vue
  2. +20
    -14
      skouter.go
  3. +50
    -0
      views/test.tpl

+ 2
- 1
components/estimate-test.vue ファイルの表示

@@ -77,7 +77,8 @@ function getEstimates() {


function getPdf() { function getPdf() {
fetch(`/api/pdf`, fetch(`/api/pdf`,
{method: 'GET',
{method: 'POST',
body: JSON.stringify(estimate.value),
headers: { headers: {
"Accept": "application/json", "Accept": "application/json",
"Authorization": `Bearer ${props.token}`, "Authorization": `Bearer ${props.token}`,


+ 20
- 14
skouter.go ファイルの表示

@@ -122,6 +122,7 @@ type Loan struct {
Mi MI `json:"mi"` Mi MI `json:"mi"`
Fees []Fee `json:"fees"` Fees []Fee `json:"fees"`
Name string `json:"title"` Name string `json:"title"`
Result Result `json:"result"`
} }


type MI struct { type MI struct {
@@ -159,7 +160,6 @@ type Estimate struct {
Zip string `json:"zip"` Zip string `json:"zip"`
Pud bool `json:"pud"` Pud bool `json:"pud"`
Loans []Loan `json:"loans"` Loans []Loan `json:"loans"`
Results []Result `json:"results"`
} }


type Password struct { type Password struct {
@@ -861,10 +861,15 @@ func queryUsers(db *sql.DB, id int) ( []User, error ) {
return users, nil return users, nil
} }


func insertResults(db *sql.DB, results []Result) (error){
func insertResults(db *sql.DB, estimate Estimate) (error){
var query string var query string
var row *sql.Row var row *sql.Row
var err error var err error
var results []Result
for i := range estimate.Loans {
results = append(results, estimate.Loans[i].Result)
}


query = `INSERT INTO estimate_result query = `INSERT INTO estimate_result
( (
@@ -1456,12 +1461,6 @@ func getEstimates(db *sql.DB, id int, user int) ( []Estimate, error ) {
return estimates, err return estimates, err
} }
estimate.Borrower = borrower estimate.Borrower = borrower
estimate.Results, err = getResults(db, estimate.Id, 0)
if err != nil {
return estimates, err
}
estimates = append(estimates, estimate) estimates = append(estimates, estimate)
} }


@@ -1676,8 +1675,8 @@ func createEstimate(w http.ResponseWriter, db *sql.DB, r *http.Request) {


estimate, err = insertEstimate(db, estimate) estimate, err = insertEstimate(db, estimate)
if err != nil { http.Error(w, err.Error(), 422); return } if err != nil { http.Error(w, err.Error(), 422); return }
estimate.Results = makeResults(estimate)
err = insertResults(db, estimate.Results)
makeResults(estimate)
err = insertResults(db, estimate)
if err != nil { http.Error(w, err.Error(), 500); return } if err != nil { http.Error(w, err.Error(), 500); return }
e, err := getEstimates(db, estimate.Id, 0) e, err := getEstimates(db, estimate.Id, 0)
if err != nil { http.Error(w, err.Error(), 500); return } if err != nil { http.Error(w, err.Error(), 500); return }
@@ -1825,6 +1824,8 @@ func showPDF(w http.ResponseWriter, r *http.Request) {
var pa = template.Must(template.ParseFiles("views/master.tpl", var pa = template.Must(template.ParseFiles("views/master.tpl",
"views/test.tpl")) "views/test.tpl"))
estimates, err := getEstimates(db, 1, 0)
if err != nil { w.WriteHeader(500); return }
// claims, err := getClaims(r) // claims, err := getClaims(r)
if err != nil { w.WriteHeader(500); return } if err != nil { w.WriteHeader(500); return }
@@ -1836,10 +1837,12 @@ func showPDF(w http.ResponseWriter, r *http.Request) {
Avatar string Avatar string
Letterhead string Letterhead string
User User User User
Estimate Estimate
}{ }{
Title: "test PDF", Title: "test PDF",
Name: "idk-random-name", Name: "idk-random-name",
User: users[0], User: users[0],
Estimate: estimates[0],
} }
avatar, err := fetchAvatar(db, info.User.Id) avatar, err := fetchAvatar(db, info.User.Id)
letterhead, err := fetchLetterhead(db, info.User.Id) letterhead, err := fetchLetterhead(db, info.User.Id)
@@ -1854,7 +1857,8 @@ func showPDF(w http.ResponseWriter, r *http.Request) {
} }


func getPdf(w http.ResponseWriter, db *sql.DB, r *http.Request) { func getPdf(w http.ResponseWriter, db *sql.DB, r *http.Request) {
var err error
var estimate Estimate
err := json.NewDecoder(r.Body).Decode(&estimate)
cmd := exec.Command("wkhtmltopdf", "-", "-") cmd := exec.Command("wkhtmltopdf", "-", "-")
stdout, err := cmd.StdoutPipe() stdout, err := cmd.StdoutPipe()
@@ -1878,13 +1882,13 @@ func getPdf(w http.ResponseWriter, db *sql.DB, r *http.Request) {
var pa = template.Must(template.ParseFiles("views/pdf.tpl", var pa = template.Must(template.ParseFiles("views/pdf.tpl",
"views/test.tpl")) "views/test.tpl"))
// claims, err := getClaims(r)
claims, err := getClaims(r)
if err != nil { if err != nil {
w.WriteHeader(500); w.WriteHeader(500);
log.Println(err) log.Println(err)
return return
} }
users, err := queryUsers(db, 1)
users, err := queryUsers(db, claims.Id)
info := struct { info := struct {
Title string Title string
@@ -1892,10 +1896,12 @@ func getPdf(w http.ResponseWriter, db *sql.DB, r *http.Request) {
Avatar string Avatar string
Letterhead string Letterhead string
User User User User
Estimate Estimate
}{ }{
Title: "test PDF", Title: "test PDF",
Name: "idk-random-name", Name: "idk-random-name",
User: users[0], User: users[0],
Estimate: estimate,
} }
avatar, err := fetchAvatar(db, info.User.Id) avatar, err := fetchAvatar(db, info.User.Id)
letterhead, err := fetchLetterhead(db, info.User.Id) letterhead, err := fetchLetterhead(db, info.User.Id)
@@ -2055,7 +2061,7 @@ func api(w http.ResponseWriter, r *http.Request) {
guard(r, 1): guard(r, 1):
summarize(w, db, r) summarize(w, db, r)
case match(p, "/api/pdf", &args) && case match(p, "/api/pdf", &args) &&
r.Method == http.MethodGet &&
r.Method == http.MethodPost &&
guard(r, 1): guard(r, 1):
getPdf(w, db, r) getPdf(w, db, r)
default: default:


+ 50
- 0
views/test.tpl ファイルの表示

@@ -26,6 +26,55 @@


</header> </header>


<table>
<thead><tr>
<th></th>{{range $l := .Estimate.Loans}}<th>{{$l.Name}}</th>{{end}}
</tr></thead>

<tbody>
<tr><td>Type</td>
{{range $l := .Estimate.Loans}}<td>{{$l.Type.Name}}</td>{{end}}</tr>
<tr><td>Term</td>
{{range $l := .Estimate.Loans}}<td>{{$l.Term}} Years</td>{{end}}</tr>
<tr><td>Amortization</td>
{{range $l := .Estimate.Loans}}<td>{{$l.Amortization}}</td>{{end}}</tr>
<tr><td>Interest rate</td>
{{range $l := .Estimate.Loans}}<td>{{$l.Interest}}%</td>{{end}}</tr>
<tr><td>Monthly MI</td>
{{range $l := .Estimate.Loans}}<td>${{$l.Mi.Premium}}/month</td>{{end}}</tr>
<tr><td>MI Premium</td>
{{range $l := .Estimate.Loans}}<td>${{$l.Mi.Upfront}}</td>{{end}}</tr>
<tr><td>Real estate taxes</td>
{{range $l := .Estimate.Loans}}<td>${{$l.Tax}}</td>{{end}}</tr>
<tr class="total"><td>Total monthly payment</td>
{{range $l := .Estimate.Loans}}<td>{{$l.Result}}</td>{{end}}</tr>

<tr><td>Purchase price</td>
{{range $l := .Estimate.Loans}}<td>{{$.Estimate.Price}}</td>{{end}}</tr>
<tr><td>Term</td>
{{range $l := .Estimate.Loans}}<td>{{$l.Term}} Years</td>{{end}}</tr>
<tr><td>Amortization</td>
{{range $l := .Estimate.Loans}}<td>{{$l.Amortization}}</td>{{end}}</tr>
<tr><td>Interest rate</td>
{{range $l := .Estimate.Loans}}<td>{{$l.Interest}}%</td>{{end}}</tr>
<tr><td>Monthly MI</td>
{{range $l := .Estimate.Loans}}<td>${{$l.Mi.Premium}}/month</td>{{end}}</tr>
<tr><td>MI Premium</td>
{{range $l := .Estimate.Loans}}<td>${{$l.Mi.Upfront}}</td>{{end}}</tr>
<tr><td>Real estate taxes</td>
{{range $l := .Estimate.Loans}}<td>${{$l.Tax}}</td>{{end}}</tr>
<tr class="total"><td>Total monthly payment</td>
{{range $l := .Estimate.Loans}}<td>{{$l.Result}}</td>{{end}}</tr>
</tbody>

</table>

<section class="summary">
<div class="box">
{{.Estimate}}
</div>
</section>

<style scoped> <style scoped>
#pdf-doc { #pdf-doc {
margin: 4px 30px; margin: 4px 30px;
@@ -36,6 +85,7 @@
border-bottom: 1px solid lightgrey; border-bottom: 1px solid lightgrey;
margin-bottom: 20px; margin-bottom: 20px;
color: var(--text); color: var(--text);
text-align: center;
} }


.disclaimer p { .disclaimer p {


読み込み中…
キャンセル
保存