- Add glob pattern support (* and ?) for ignore rules stored in qt_vendor_partnumber_seen (is_pattern flag, migration 041) - Pattern matching applied in stock/competitor import, partnumber book snapshot, and vendor mappings list (Go-side via NormalizeKey) - BulkUpsertMappings: replace N+1 loop with two batch SQL upserts, validating all lots in a single query (~1500 queries → 3-4) - CSV import: multi-lot per PN via repeated rows, optional qty column - CSV export: updated column format vendor;partnumber;lot_name;qty;description;ignore;notes - UI: ignore patterns section with add/delete, import progress feedback - Update bible-local/vendor-mapping.md with new CSV format Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
21 lines
738 B
Go
21 lines
738 B
Go
package services
|
|
|
|
import (
|
|
"git.mchus.pro/mchus/priceforge/internal/models"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// purgeSeenLotNames removes polluted seen-registry rows where another system wrote a LOT name
|
|
// into qt_vendor_partnumber_seen.partnumber. Keep rows that already have an explicit PN mapping.
|
|
func purgeSeenLotNames(db *gorm.DB) error {
|
|
if db == nil {
|
|
return nil
|
|
}
|
|
return db.
|
|
Where("is_pattern = ?", false).
|
|
Where("EXISTS (SELECT 1 FROM lot l WHERE LOWER(TRIM(l.lot_name)) = LOWER(TRIM(qt_vendor_partnumber_seen.partnumber)))").
|
|
Where("NOT EXISTS (SELECT 1 FROM qt_partnumber_book_items pb WHERE LOWER(TRIM(pb.partnumber)) = LOWER(TRIM(qt_vendor_partnumber_seen.partnumber)))").
|
|
Delete(&models.VendorPartnumberSeen{}).
|
|
Error
|
|
}
|