101 lines
2.8 KiB
Go
101 lines
2.8 KiB
Go
package documents
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"html/template"
|
|
"path/filepath"
|
|
)
|
|
|
|
// PackingListLineItemTemplateData represents a packing list line item for template rendering
|
|
type PackingListLineItemTemplateData struct {
|
|
Title string
|
|
Description template.HTML
|
|
Quantity string
|
|
Weight string
|
|
}
|
|
|
|
// BuildPackingListHTML generates the complete HTML for a packing list using templates
|
|
func (g *HTMLDocumentGenerator) BuildPackingListHTML(data *PackingListPDFData, totalPages int, currentPage int) string {
|
|
packingListNumber := data.PackingList.CmcReference
|
|
|
|
// Prepare line items
|
|
lineItemsData := []PackingListLineItemTemplateData{}
|
|
|
|
for _, item := range data.LineItems {
|
|
lineItemsData = append(lineItemsData, PackingListLineItemTemplateData{
|
|
Title: item.Title,
|
|
Description: template.HTML(item.Description),
|
|
Quantity: item.Quantity,
|
|
Weight: "", // Weight not currently in LineItem model
|
|
})
|
|
}
|
|
|
|
// Prepare template data
|
|
templateData := struct {
|
|
PackingListNumber string
|
|
IssueDateString string
|
|
JobTitle string
|
|
CustomerOrderNumber string
|
|
FromAddress string
|
|
ShipTo string
|
|
LineItems []PackingListLineItemTemplateData
|
|
LogoDataURI string
|
|
}{
|
|
PackingListNumber: packingListNumber,
|
|
IssueDateString: data.IssueDateString,
|
|
JobTitle: data.JobTitle,
|
|
CustomerOrderNumber: data.CustomerOrderNumber,
|
|
FromAddress: "CMC TECHNOLOGIES\n1/50 Carrington Road\nMarrickville NSW 2204\nAustralia",
|
|
ShipTo: data.ShipTo,
|
|
LineItems: lineItemsData,
|
|
LogoDataURI: g.loadLogo("quote_logo.png"),
|
|
}
|
|
|
|
// Define template functions
|
|
funcMap := template.FuncMap{}
|
|
|
|
// Parse and execute template
|
|
possiblePathSets := [][]string{
|
|
{
|
|
filepath.Join("internal", "cmc", "documents", "templates", "packing-list.html"),
|
|
filepath.Join("internal", "cmc", "documents", "templates", "header.html"),
|
|
},
|
|
{
|
|
filepath.Join("go", "internal", "cmc", "documents", "templates", "packing-list.html"),
|
|
filepath.Join("go", "internal", "cmc", "documents", "templates", "header.html"),
|
|
},
|
|
{
|
|
filepath.Join("templates", "pdf", "packing-list.html"),
|
|
filepath.Join("templates", "pdf", "header.html"),
|
|
},
|
|
{
|
|
"/app/templates/pdf/packing-list.html",
|
|
"/app/templates/pdf/header.html",
|
|
},
|
|
}
|
|
|
|
var tmpl *template.Template
|
|
var err error
|
|
|
|
for _, pathSet := range possiblePathSets {
|
|
tmpl, err = template.New("packing-list.html").Funcs(funcMap).ParseFiles(pathSet...)
|
|
if err == nil {
|
|
break
|
|
}
|
|
}
|
|
|
|
if tmpl == nil || err != nil {
|
|
fmt.Printf("Error parsing template from any path: %v\n", err)
|
|
return ""
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
if err := tmpl.Execute(&buf, templateData); err != nil {
|
|
fmt.Printf("Error executing template: %v\n", err)
|
|
return ""
|
|
}
|
|
|
|
return buf.String()
|
|
}
|