package invoice import ( "sort" "strings" "dev.tandem.ws/tandem/camper/pkg/auth" "dev.tandem.ws/tandem/camper/pkg/locale" "dev.tandem.ws/tandem/camper/pkg/ods" ) func mustWriteInvoicesOds(invoices []*IndexEntry, taxes map[int]taxMap, taxColumns map[int]string, company *auth.Company, locale *locale.Locale) []byte { taxIDs := extractTaxIDs(taxColumns) columns := make([]string, 6+len(taxIDs)) columns[0] = "Date" columns[1] = "Invoice Num." columns[2] = "Customer" columns[3] = "Status" i := 4 for _, taxID := range taxIDs { columns[i] = taxColumns[taxID] i++ } columns[i] = "Amount" table, err := ods.WriteTable(invoices, columns, locale, func(sb *strings.Builder, invoice *IndexEntry) error { ods.WriteCellDate(sb, invoice.Date) if err := ods.WriteCellString(sb, invoice.Number); err != nil { return err } if err := ods.WriteCellString(sb, invoice.CustomerName); err != nil { return err } if err := ods.WriteCellString(sb, invoice.StatusLabel); err != nil { return err } writeTaxes(sb, taxes[invoice.ID], taxIDs, company, locale) ods.WriteCellFloat(sb, invoice.Total, company, locale) return nil }) if err != nil { panic(err) } return table } func extractTaxIDs(taxColumns map[int]string) []int { taxIDs := make([]int, len(taxColumns)) i := 0 for k := range taxColumns { taxIDs[i] = k i++ } sort.Ints(taxIDs[:]) return taxIDs } func writeTaxes(sb *strings.Builder, taxes taxMap, taxIDs []int, company *auth.Company, locale *locale.Locale) { for _, taxID := range taxIDs { var amount string if taxes != nil { amount = taxes[taxID] } ods.WriteCellFloat(sb, amount, company, locale) } }