Merge origin/main
This commit is contained in:
@@ -177,39 +177,43 @@ func (s *Service) CreateForSourceWithProgress(createdBy, source string, sourceIt
|
||||
}
|
||||
|
||||
if len(sourceItems) > 0 {
|
||||
// Load categories for all lot names if not provided
|
||||
lotNamesToLoad := make([]string, 0)
|
||||
// For warehouse and other explicit source items - use only provided data
|
||||
// DO NOT load metadata settings (price_period_days, coefficient, etc.)
|
||||
|
||||
// Load categories from lot table
|
||||
lotNames := make([]string, 0, len(sourceItems))
|
||||
for _, srcItem := range sourceItems {
|
||||
if strings.TrimSpace(srcItem.LotName) != "" && srcItem.Price > 0 && srcItem.Category == "" {
|
||||
lotNamesToLoad = append(lotNamesToLoad, strings.TrimSpace(srcItem.LotName))
|
||||
if strings.TrimSpace(srcItem.LotName) != "" {
|
||||
lotNames = append(lotNames, strings.TrimSpace(srcItem.LotName))
|
||||
}
|
||||
}
|
||||
|
||||
categoryByLot := make(map[string]string)
|
||||
if len(lotNamesToLoad) > 0 {
|
||||
var lotCategories []struct {
|
||||
LotName string
|
||||
LotCategory string
|
||||
}
|
||||
if err := s.db.Table("lot").Select("lot_name, lot_category").Where("lot_name IN ?", lotNamesToLoad).Scan(&lotCategories).Error; err == nil {
|
||||
for _, lc := range lotCategories {
|
||||
categoryByLot[lc.LotName] = lc.LotCategory
|
||||
categoryMap := make(map[string]*string)
|
||||
if len(lotNames) > 0 {
|
||||
var lots []models.Lot
|
||||
if err := s.db.Where("lot_name IN ?", lotNames).Find(&lots).Error; err == nil {
|
||||
for _, lot := range lots {
|
||||
categoryMap[lot.LotName] = lot.LotCategory
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
items = make([]models.PricelistItem, 0, len(sourceItems))
|
||||
for _, srcItem := range sourceItems {
|
||||
if strings.TrimSpace(srcItem.LotName) == "" || srcItem.Price <= 0 {
|
||||
lotName := strings.TrimSpace(srcItem.LotName)
|
||||
if lotName == "" || srcItem.Price <= 0 {
|
||||
continue
|
||||
}
|
||||
category := srcItem.Category
|
||||
category := strings.TrimSpace(srcItem.Category)
|
||||
if category == "" {
|
||||
category = categoryByLot[strings.TrimSpace(srcItem.LotName)]
|
||||
if catPtr, ok := categoryMap[lotName]; ok && catPtr != nil {
|
||||
category = *catPtr
|
||||
}
|
||||
}
|
||||
items = append(items, models.PricelistItem{
|
||||
PricelistID: pricelist.ID,
|
||||
LotName: strings.TrimSpace(srcItem.LotName),
|
||||
LotName: lotName,
|
||||
LotCategory: categoryMap[lotName],
|
||||
Price: srcItem.Price,
|
||||
PriceMethod: strings.TrimSpace(srcItem.PriceMethod),
|
||||
Category: category,
|
||||
@@ -230,6 +234,22 @@ func (s *Service) CreateForSourceWithProgress(createdBy, source string, sourceIt
|
||||
return nil, fmt.Errorf("getting lot metadata with categories: %w", err)
|
||||
}
|
||||
|
||||
// Load categories from lot table for all metadata items
|
||||
lotNames := make([]string, 0, len(metadata))
|
||||
for _, m := range metadata {
|
||||
lotNames = append(lotNames, m.LotName)
|
||||
}
|
||||
|
||||
categoryMap := make(map[string]*string)
|
||||
if len(lotNames) > 0 {
|
||||
var lots []models.Lot
|
||||
if err := s.db.Where("lot_name IN ?", lotNames).Find(&lots).Error; err == nil {
|
||||
for _, lot := range lots {
|
||||
categoryMap[lot.LotName] = lot.LotCategory
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Create pricelist items with all price settings
|
||||
items = make([]models.PricelistItem, 0, len(metadata))
|
||||
for _, m := range metadata {
|
||||
@@ -239,6 +259,7 @@ func (s *Service) CreateForSourceWithProgress(createdBy, source string, sourceIt
|
||||
items = append(items, models.PricelistItem{
|
||||
PricelistID: pricelist.ID,
|
||||
LotName: m.LotName,
|
||||
LotCategory: categoryMap[m.LotName],
|
||||
Price: *m.CurrentPrice,
|
||||
PriceMethod: string(m.PriceMethod),
|
||||
PricePeriodDays: m.PricePeriodDays,
|
||||
|
||||
Reference in New Issue
Block a user