mirror of
https://github.com/rjNemo/rentease.git
synced 2026-06-09 12:16:50 +00:00
59 lines
1.6 KiB
Go
59 lines
1.6 KiB
Go
package pdf
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"text/template"
|
|
|
|
"github.com/rjNemo/rentease/assets"
|
|
"github.com/rjNemo/rentease/internal/service/booking"
|
|
)
|
|
|
|
type HtmlPdfClient struct{}
|
|
|
|
func NewPdfClient() (*HtmlPdfClient, error) {
|
|
return &HtmlPdfClient{}, nil
|
|
}
|
|
|
|
func (pc *HtmlPdfClient) BuildInvoice(data booking.Invoice) (string, error) {
|
|
tmpl, err := template.ParseFS(assets.Static, "assets/html/invoice.html")
|
|
if err != nil {
|
|
return "", fmt.Errorf("error parsing template: %v", err)
|
|
}
|
|
|
|
// Create a buffer to hold the rendered HTML.
|
|
var buf bytes.Buffer
|
|
if err := tmpl.Execute(&buf, data); err != nil {
|
|
return "", fmt.Errorf("error executing template: %v", err)
|
|
}
|
|
|
|
outputPath := fmt.Sprintf("%s.html", data.ID)
|
|
if err := os.WriteFile(outputPath, buf.Bytes(), 0644); err != nil {
|
|
return "", fmt.Errorf("error writing HTML file: %v", err)
|
|
}
|
|
|
|
return outputPath, nil
|
|
}
|
|
|
|
func (pc *HtmlPdfClient) BuildReport(report booking.ReportData, period string, month int, year int) (string, error) {
|
|
tmpl, err := template.ParseFS(assets.Static, "assets/html/report.html")
|
|
if err != nil {
|
|
return "", fmt.Errorf("error parsing template: %v", err)
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
if err := tmpl.Execute(&buf, report); err != nil {
|
|
log.Printf("err: %+v\n", err)
|
|
return "", fmt.Errorf("error executing template: %v", err)
|
|
}
|
|
|
|
outputPath := fmt.Sprintf("report-%s-%d-%d.html", period, month, year)
|
|
if err := os.WriteFile(outputPath, buf.Bytes(), 0644); err != nil {
|
|
log.Printf("err: %+v\n", err)
|
|
return "", fmt.Errorf("error writing HTML file: %v", err)
|
|
}
|
|
|
|
return outputPath, nil
|
|
}
|