From ff262822e112b5abcdc0d81c86f72539447dc810 Mon Sep 17 00:00:00 2001 From: Michael Chus Date: Sun, 24 May 2026 19:05:09 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20DefaultCategories=20?= =?UTF-8?q?=D0=BA=D0=B0=D0=BA=20fallback=20=D0=B4=D0=BB=D1=8F=20=D1=81?= =?UTF-8?q?=D0=BE=D1=80=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B8=20=D0=B2?= =?UTF-8?q?=20CSV-=D1=8D=D0=BA=D1=81=D0=BF=D0=BE=D1=80=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit categoryRepo всегда nil (передаётся null при инициализации), поэтому categoryOrder был пустым и сортировка по категориям не работала. Co-Authored-By: Claude Sonnet 4.6 --- internal/services/export.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) 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++ {