diff --git a/internal/services/export.go b/internal/services/export.go index f812023..b0efe0f 100644 --- a/internal/services/export.go +++ b/internal/services/export.go @@ -127,11 +127,10 @@ func (s *ExportService) ToCSV(w io.Writer, data *ProjectExportData) error { return fmt.Errorf("failed to write header: %w", err) } - // Get category hierarchy for sorting - categoryOrder := make(map[string]int) + // Build category order: start from DefaultCategories, override with live DB values if available. + categoryOrder := defaultCategoryOrder() if s.categoryRepo != nil { - categories, err := s.categoryRepo.GetAll() - if err == nil { + if categories, err := s.categoryRepo.GetAll(); err == nil { for _, cat := range categories { categoryOrder[cat.Code] = cat.DisplayOrder } @@ -516,6 +515,15 @@ func (s *ExportService) resolveCategories(pricelistID *uint, lotNames []string) return categories } +// defaultCategoryOrder returns a category code → display_order map built from models.DefaultCategories. +func defaultCategoryOrder() map[string]int { + m := make(map[string]int, len(models.DefaultCategories)) + for _, cat := range models.DefaultCategories { + m[cat.Code] = cat.DisplayOrder + } + return m +} + // sortItemsByCategory sorts items by category display order (items without category go to the end). func sortItemsByCategory(items []ExportItem, categoryOrder map[string]int) { for i := 0; i < len(items)-1; i++ {