blob: dbc59f10a63d29f197d62fd54305a7ee8069b808 [file] [log] [blame]
package main
import (
"context"
"fmt"
"net/http"
"code.hackerspace.pl/hscloud/go/mirko"
"code.hackerspace.pl/hscloud/go/statusz"
"github.com/golang/glog"
)
const invoicesFragment = `
<style type="text/css">
.table td,th {
background-color: #eee;
padding: 0.2em 0.4em 0.2em 0.4em;
}
.table th {
background-color: #c0c0c0;
}
.table {
background-color: #fff;
border-spacing: 0.2em;
margin-left: auto;
margin-right: auto;
}
</style>
<div>
{{ .Msg }}
<table class="table">
<tr>
<th>Internal ID</th>
<th>Number</th>
<th>Customer</th>
<th>Amount (net)</th>
<th>Actions</th>
</tr>
{{ range .Invoices }}
{{ if .Sealed }}
<tr>
{{ else }}
<tr style="opacity: 0.5">
{{ end }}
<td>{{ .ID }}</td>
<td>{{ .Number }}</td>
<td>{{ index .Proto.CustomerBilling 0 }}</td>
<td>{{ .TotalNetPretty }}</td>
<td>
<a href="/debug/view?id={{ .ID }}">View</a>
</td>
</tr>
{{ end }}
</table>
</div>
`
type templateInvoice struct {
invoice
TotalNetPretty string
}
func (s *service) setupStatusz(m *mirko.Mirko) {
statusz.AddStatusPart("Invoices", invoicesFragment, func(ctx context.Context) interface{} {
var res struct {
Invoices []templateInvoice
Msg string
}
invoices, err := s.m.getInvoices(ctx)
res.Invoices = make([]templateInvoice, len(invoices))
for i, inv := range invoices {
res.Invoices[i] = templateInvoice{
invoice: inv,
TotalNetPretty: fmt.Sprintf("%.2f %s", float64(inv.TotalNet)/100, inv.Proto.Unit),
}
}
if err != nil {
glog.Errorf("Could not get invoices for statusz: %v", err)
res.Msg = fmt.Sprintf("Could not get invoices: %v", err)
}
return res
})
m.HTTPMux().HandleFunc("/debug/view", func(w http.ResponseWriter, r *http.Request) {
rendered, err := s.invoicePDF(r.Context(), r.URL.Query().Get("id"))
if err != nil {
fmt.Fprintf(w, "error: %v", err)
}
w.Header().Set("Content-type", "application/pdf")
w.Write(rendered)
})
}