diff --git a/controllers/importer.go b/controllers/importer.go index 92f9a52..aa42ce9 100644 --- a/controllers/importer.go +++ b/controllers/importer.go @@ -253,10 +253,9 @@ func importProduct(product models.Product, db *gorm.DB) { if len(product.ColorVariants) > 0 { - var description string for _, colorVariant := range product.ColorVariants { weight, _ := strconv.ParseFloat(colorVariant.Weight, 64) - + var description string for _, desc := range colorVariant.Descriptions { description += "
" + desc.Description + "
" } @@ -267,110 +266,111 @@ func importProduct(product models.Product, db *gorm.DB) { for _, sizeVariant := range colorVariant.SizeVariants { - if sizeVariant.Sellable { - sku := fmt.Sprintf("%s-%s-%d-col-size", colorVariant.ProductGroupID, colorVariant.ProductNumber, sizeVariant.ItemNumber) - sizeOption := gm.GetAttributeOption(db, attributesMap["size"].ID, sizeVariant.AttributeValue) - productNumber := fmt.Sprintf("%s-%d", colorVariant.ProductNumber, sizeVariant.ItemNumber) - attributes := []gm.ProductAttributeValue{ - {AttributeID: attributesMap["source"].ID, TextValue: colorVariant.URLKey}, - {AttributeID: attributesMap["favoritesCount"].ID, IntegerValue: colorVariant.FavoriteCount}, - {AttributeID: attributesMap["sku"].ID, TextValue: sku}, - {AttributeID: attributesMap["product_number"].ID, TextValue: productNumber}, - {AttributeID: attributesMap["name"].ID, TextValue: colorVariant.Name, Channel: "default", Locale: "tm"}, - {AttributeID: attributesMap["weight"].ID, TextValue: colorVariant.Weight}, - {AttributeID: attributesMap["status"].ID, BooleanValue: true}, - //{AttributeID: attributesMap["visible_individually"].ID, BooleanValue: true, Channel: "default", Locale: "tm"}, - {AttributeID: attributesMap["url_key"].ID, TextValue: sku}, - {AttributeID: attributesMap["meta_keywords"].ID, TextValue: keywords, Channel: "default", Locale: "tm"}, - {AttributeID: attributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"}, - {AttributeID: attributesMap["color"].ID, IntegerValue: int(colorOption.ID)}, - {AttributeID: attributesMap["size"].ID, IntegerValue: int(sizeOption.ID)}, - } + sku := fmt.Sprintf("%s-%s-%d-col-size", colorVariant.ProductGroupID, colorVariant.ProductNumber, sizeVariant.ItemNumber) - //todo assign images - flatVariant := gm.ProductFlat{ - //ProductID: productVariant.ID, - BrandID: mainProductFlat.BrandID, - Status: true, - //VisibleIndividually: false, - Name: colorVariant.Name, - Sku: sku, - ProductNumber: productNumber, - Description: description, - UrlKey: sku, - Weight: weight, - // Source: colorVariant.URLKey, - FavoritesCount: uint(colorVariant.FavoriteCount), - Color: int(colorOption.ID), - Size: int(sizeOption.ID), - ColorLabel: colorOption.AdminName, - SizeLabel: sizeOption.AdminName, - MetaKeywords: keywords, - ParentID: mainProductFlat.ID, - } + sizeOption := gm.GetAttributeOption(db, attributesMap["size"].ID, sizeVariant.AttributeValue) - if sizeVariant.Price.OriginalPrice.Value > sizeVariant.Price.DiscountedPrice.Value { - attributes = append(attributes, []gm.ProductAttributeValue{ - {AttributeID: attributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value}, - {AttributeID: attributesMap["special_price"].ID, FloatValue: sizeVariant.Price.DiscountedPrice.Value}, - }...) + productNumber := fmt.Sprintf("%s-%d", colorVariant.ProductNumber, sizeVariant.ItemNumber) - flatVariant.Price = sizeVariant.Price.OriginalPrice.Value - flatVariant.SpecialPrice = sizeVariant.Price.DiscountedPrice.Value - flatVariant.MinPrice = sizeVariant.Price.DiscountedPrice.Value - flatVariant.MaxPrice = sizeVariant.Price.OriginalPrice.Value - - } else { - attributes = append(attributes, gm.ProductAttributeValue{AttributeID: attributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value}) - - flatVariant.Price = sizeVariant.Price.OriginalPrice.Value - flatVariant.MinPrice = sizeVariant.Price.DiscountedPrice.Value - flatVariant.MaxPrice = sizeVariant.Price.OriginalPrice.Value - } - - if mainProductFlat.MinPrice > flatVariant.MinPrice { - mainProductFlat.MinPrice = flatVariant.MinPrice - } - - if mainProductFlat.MaxPrice < flatVariant.MaxPrice { - mainProductFlat.MaxPrice = flatVariant.MaxPrice - } - - productVariant := gm.Product{ - ParentID: mainProductFlat.ProductID, - Type: "simple", - AttributeFamilyID: iproduct.AttributeFamilyID, - Sku: sku, - BrandID: mainProductFlat.BrandID, - AttributeValues: attributes, - Categories: categories, - } - - for _, element := range colorVariant.Images { - productVariant.Images = append(productVariant.Images, gm.ProductImage{Type: "cdn", Path: element}) - } - - errProdVariant := db.Omit("Categories.*").Create(&productVariant).Error - - if errProdVariant != nil { - log.Println(errProdVariant) - return - } - - flatVariant.ProductID = productVariant.ID - - errVariant := db.Create(&flatVariant).Error - - if errVariant != nil { - log.Println(errVariant) - return - } - - productFlatVariants = append(productFlatVariants, flatVariant) + attributes := []gm.ProductAttributeValue{ + {AttributeID: attributesMap["source"].ID, TextValue: colorVariant.URLKey}, + {AttributeID: attributesMap["favoritesCount"].ID, IntegerValue: colorVariant.FavoriteCount}, + {AttributeID: attributesMap["sku"].ID, TextValue: sku}, + {AttributeID: attributesMap["product_number"].ID, TextValue: productNumber}, + {AttributeID: attributesMap["name"].ID, TextValue: colorVariant.Name, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["weight"].ID, TextValue: colorVariant.Weight}, + {AttributeID: attributesMap["status"].ID, BooleanValue: true}, + //{AttributeID: attributesMap["visible_individually"].ID, BooleanValue: true, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["url_key"].ID, TextValue: sku}, + {AttributeID: attributesMap["meta_keywords"].ID, TextValue: keywords, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["color"].ID, IntegerValue: int(colorOption.ID)}, + {AttributeID: attributesMap["size"].ID, IntegerValue: int(sizeOption.ID)}, } + //todo assign images + flatVariant := gm.ProductFlat{ + //ProductID: productVariant.ID, + BrandID: mainProductFlat.BrandID, + Status: true, + //VisibleIndividually: false, + Name: colorVariant.Name, + Sku: sku, + ProductNumber: productNumber, + Description: description, + UrlKey: sku, + Weight: weight, + // Source: colorVariant.URLKey, + FavoritesCount: uint(colorVariant.FavoriteCount), + Color: int(colorOption.ID), + Size: int(sizeOption.ID), + ColorLabel: colorOption.AdminName, + SizeLabel: sizeOption.AdminName, + MetaKeywords: keywords, + ParentID: mainProductFlat.ID, + } + + if sizeVariant.Price.OriginalPrice.Value > sizeVariant.Price.DiscountedPrice.Value { + attributes = append(attributes, []gm.ProductAttributeValue{ + {AttributeID: attributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value}, + {AttributeID: attributesMap["special_price"].ID, FloatValue: sizeVariant.Price.DiscountedPrice.Value}, + }...) + + flatVariant.Price = sizeVariant.Price.OriginalPrice.Value + flatVariant.SpecialPrice = sizeVariant.Price.DiscountedPrice.Value + flatVariant.MinPrice = sizeVariant.Price.DiscountedPrice.Value + flatVariant.MaxPrice = sizeVariant.Price.OriginalPrice.Value + + } else { + attributes = append(attributes, gm.ProductAttributeValue{AttributeID: attributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value}) + + flatVariant.Price = sizeVariant.Price.OriginalPrice.Value + flatVariant.MinPrice = sizeVariant.Price.DiscountedPrice.Value + flatVariant.MaxPrice = sizeVariant.Price.OriginalPrice.Value + } + + if mainProductFlat.MinPrice > flatVariant.MinPrice { + mainProductFlat.MinPrice = flatVariant.MinPrice + } + + if mainProductFlat.MaxPrice < flatVariant.MaxPrice { + mainProductFlat.MaxPrice = flatVariant.MaxPrice + } + + productVariant := gm.Product{ + ParentID: mainProductFlat.ProductID, + Type: "simple", + AttributeFamilyID: iproduct.AttributeFamilyID, + Sku: sku, + BrandID: mainProductFlat.BrandID, + AttributeValues: attributes, + Categories: categories, + } + + for _, element := range colorVariant.Images { + productVariant.Images = append(productVariant.Images, gm.ProductImage{Type: "cdn", Path: element}) + } + + errProdVariant := db.Omit("Categories.*").Create(&productVariant).Error + + if errProdVariant != nil { + log.Println(errProdVariant) + return + } + + flatVariant.ProductID = productVariant.ID + + errVariant := db.Create(&flatVariant).Error + + if errVariant != nil { + log.Println(errVariant) + return + } + + productFlatVariants = append(productFlatVariants, flatVariant) + } - } else if colorVariant.IsSellable { + } else { colorOption := gm.GetAttributeOption(db, attributesMap["color"].ID, colorVariant.Color) attributes, variantFlat := collectAttributes(&colorVariant, &colorOption) @@ -428,107 +428,100 @@ func importProduct(product models.Product, db *gorm.DB) { if len(product.SizeVariants) > 0 { - var description string - for _, desc := range product.Descriptions { - description += "" + desc.Description + "
" - } weight, _ := strconv.ParseFloat(product.Weight, 64) for _, sizeVariant := range product.SizeVariants { - if sizeVariant.Sellable { - sku := fmt.Sprintf("%s-%s-%d-size", iproduct.Sku, product.ProductNumber, sizeVariant.ItemNumber) - sizeOption := gm.GetAttributeOption(db, attributesMap["size"].ID, sizeVariant.AttributeValue) + sku := fmt.Sprintf("%s-%s-%d-size", iproduct.Sku, product.ProductNumber, sizeVariant.ItemNumber) + sizeOption := gm.GetAttributeOption(db, attributesMap["size"].ID, sizeVariant.AttributeValue) - attributes := []gm.ProductAttributeValue{ - {AttributeID: attributesMap["source"].ID, TextValue: product.URLKey}, - {AttributeID: attributesMap["favoritesCount"].ID, IntegerValue: product.FavoriteCount}, - {AttributeID: attributesMap["meta_keywords"].ID, TextValue: keywords, Channel: "default", Locale: "tm"}, - {AttributeID: attributesMap["sku"].ID, TextValue: sku}, - {AttributeID: attributesMap["product_number"].ID, TextValue: fmt.Sprint(sizeVariant.ItemNumber)}, - {AttributeID: attributesMap["name"].ID, TextValue: product.Name, Channel: "default", Locale: "tm"}, - {AttributeID: attributesMap["weight"].ID, TextValue: product.Weight}, - {AttributeID: attributesMap["status"].ID, BooleanValue: true}, - //{AttributeID: attributesMap["visible_individually"].ID, BooleanValue: true}, - {AttributeID: attributesMap["url_key"].ID, TextValue: sku}, - {AttributeID: attributesMap["meta_keywords"].ID, TextValue: keywords, Channel: "default", Locale: "tm"}, - {AttributeID: attributesMap["size"].ID, IntegerValue: int(sizeOption.ID)}, - // {AttributeID: attributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"}, - } - - flatVariant := gm.ProductFlat{ - - Status: true, - VisibleIndividually: false, - Name: product.Name, - Sku: sku, - ProductNumber: fmt.Sprint(sizeVariant.ItemNumber), - UrlKey: sku, - Weight: weight, - Size: int(sizeOption.ID), - SizeLabel: sizeOption.AdminName, - MetaKeywords: keywords, - - // Source: product.URLKey, - FavoritesCount: uint(product.FavoriteCount), - ParentID: mainProductFlat.ID, - } - - if sizeVariant.Price.OriginalPrice.Value > sizeVariant.Price.DiscountedPrice.Value { - attributes = append(attributes, []gm.ProductAttributeValue{ - {AttributeID: attributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value}, - {AttributeID: attributesMap["special_price"].ID, FloatValue: sizeVariant.Price.DiscountedPrice.Value}, - }...) - - flatVariant.Price = sizeVariant.Price.OriginalPrice.Value - flatVariant.SpecialPrice = sizeVariant.Price.DiscountedPrice.Value - flatVariant.MinPrice = sizeVariant.Price.DiscountedPrice.Value - flatVariant.MaxPrice = sizeVariant.Price.OriginalPrice.Value - - } else { - attributes = append(attributes, gm.ProductAttributeValue{AttributeID: attributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value}) - - flatVariant.Price = sizeVariant.Price.OriginalPrice.Value - flatVariant.MinPrice = sizeVariant.Price.DiscountedPrice.Value - flatVariant.MaxPrice = sizeVariant.Price.OriginalPrice.Value - } - - if mainProductFlat.MinPrice > flatVariant.MinPrice { - mainProductFlat.MinPrice = flatVariant.MinPrice - } - - if mainProductFlat.MaxPrice < flatVariant.MaxPrice { - mainProductFlat.MaxPrice = flatVariant.MaxPrice - } - - sizeVariantProduct := gm.Product{ - ParentID: mainProductFlat.ProductID, - Type: "simple", - Sku: sku, - BrandID: mainProductFlat.BrandID, - AttributeValues: attributes, - AttributeFamilyID: iproduct.AttributeFamilyID, - Categories: categories, - } - - errSizeVar := db.Omit("Categories.*").Create(&sizeVariantProduct).Error - - if errSizeVar != nil { - log.Println(errSizeVar) - return - } - - flatVariant.ProductID = sizeVariantProduct.ID - - errVariant := db.Omit("Product.Categories.*").Create(&flatVariant).Error - - if errVariant != nil { - log.Println(errVariant) - return - } - - productFlatVariants = append(productFlatVariants, flatVariant) + attributes := []gm.ProductAttributeValue{ + {AttributeID: attributesMap["source"].ID, TextValue: product.URLKey}, + {AttributeID: attributesMap["favoritesCount"].ID, IntegerValue: product.FavoriteCount}, + {AttributeID: attributesMap["sku"].ID, TextValue: sku}, + {AttributeID: attributesMap["product_number"].ID, TextValue: fmt.Sprint(sizeVariant.ItemNumber)}, + {AttributeID: attributesMap["name"].ID, TextValue: product.Name, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["weight"].ID, TextValue: product.Weight}, + {AttributeID: attributesMap["status"].ID, BooleanValue: true}, + //{AttributeID: attributesMap["visible_individually"].ID, BooleanValue: true}, + {AttributeID: attributesMap["url_key"].ID, TextValue: sku}, + {AttributeID: attributesMap["meta_keywords"].ID, TextValue: keywords, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["size"].ID, IntegerValue: int(sizeOption.ID)}, + {AttributeID: attributesMap["description"].ID, TextValue: mainProductFlat.Description, Channel: "default", Locale: "tm"}, } + + flatVariant := gm.ProductFlat{ + + Status: true, + VisibleIndividually: false, + Name: product.Name, + Sku: sku, + ProductNumber: fmt.Sprint(sizeVariant.ItemNumber), + UrlKey: sku, + Weight: weight, + Size: int(sizeOption.ID), + SizeLabel: sizeOption.AdminName, + MetaKeywords: keywords, + Description: mainProductFlat.Description, + // Source: product.URLKey, + FavoritesCount: uint(product.FavoriteCount), + ParentID: mainProductFlat.ID, + } + + if sizeVariant.Price.OriginalPrice.Value > sizeVariant.Price.DiscountedPrice.Value { + attributes = append(attributes, []gm.ProductAttributeValue{ + {AttributeID: attributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value}, + {AttributeID: attributesMap["special_price"].ID, FloatValue: sizeVariant.Price.DiscountedPrice.Value}, + }...) + + flatVariant.Price = sizeVariant.Price.OriginalPrice.Value + flatVariant.SpecialPrice = sizeVariant.Price.DiscountedPrice.Value + flatVariant.MinPrice = sizeVariant.Price.DiscountedPrice.Value + flatVariant.MaxPrice = sizeVariant.Price.OriginalPrice.Value + + } else { + attributes = append(attributes, gm.ProductAttributeValue{AttributeID: attributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value}) + + flatVariant.Price = sizeVariant.Price.OriginalPrice.Value + flatVariant.MinPrice = sizeVariant.Price.DiscountedPrice.Value + flatVariant.MaxPrice = sizeVariant.Price.OriginalPrice.Value + } + + if mainProductFlat.MinPrice > flatVariant.MinPrice { + mainProductFlat.MinPrice = flatVariant.MinPrice + } + + if mainProductFlat.MaxPrice < flatVariant.MaxPrice { + mainProductFlat.MaxPrice = flatVariant.MaxPrice + } + + sizeVariantProduct := gm.Product{ + ParentID: mainProductFlat.ProductID, + Type: "simple", + Sku: sku, + BrandID: mainProductFlat.BrandID, + AttributeValues: attributes, + AttributeFamilyID: iproduct.AttributeFamilyID, + Categories: categories, + } + + errSizeVar := db.Omit("Categories.*").Create(&sizeVariantProduct).Error + + if errSizeVar != nil { + log.Println(errSizeVar) + return + } + + flatVariant.ProductID = sizeVariantProduct.ID + + errVariant := db.Omit("Product.Categories.*").Create(&flatVariant).Error + + if errVariant != nil { + log.Println(errVariant) + return + } + + productFlatVariants = append(productFlatVariants, flatVariant) } }