From 894c0847dd716fcd920a53afc587e3fde6a5fe7d Mon Sep 17 00:00:00 2001 From: merdan Date: Mon, 15 Aug 2022 10:15:49 +0500 Subject: [PATCH] developed --- gorm_models/product.go | 6 ++ test/testit.go | 131 +++++++++++++++++++++++------------------ 2 files changed, 79 insertions(+), 58 deletions(-) diff --git a/gorm_models/product.go b/gorm_models/product.go index 70bcca5..ab346ec 100644 --- a/gorm_models/product.go +++ b/gorm_models/product.go @@ -16,6 +16,7 @@ type Product struct { Images []ProductImage Categories []Category `gorm:"many2many:product_categories;"` AttributeValues []ProductAttributeValue + SuperAttributes []Attribute `gorm:"many2many:product_super_attributes;"` } // $main_attributes = [ @@ -48,7 +49,12 @@ type ProductFlat struct { FavoritesCount uint CreatedAt time.Time UpdatedAt time.Time + ProductID uint Product Product + Channel string `sql:"DEFAULT:default"` + Locale string `sql:"DEFAULT:tm"` + ParentID uint `sql:"DEFAULT:NULL"` + BrandID uint } type ProductImage struct { diff --git a/test/testit.go b/test/testit.go index b4d13d9..ee712af 100644 --- a/test/testit.go +++ b/test/testit.go @@ -138,6 +138,8 @@ func getTotalDocumentCount(db string) int { return response.DocCount } +// todo defailt variant +// productflat func importProduct(product models.Product, db *gorm.DB) { famAndSellerWG.Wait() //wait until attribute families and sellers are not get from mysql @@ -162,6 +164,7 @@ func importProduct(product models.Product, db *gorm.DB) { AttributeFamilyID: families[0].ID, Brand: brand, Categories: categories, + AttributeValues: assignAttributes(&product), } for _, element := range product.Images { @@ -180,19 +183,15 @@ func importProduct(product models.Product, db *gorm.DB) { return } - // mainProductFlat := gm.ProductFlat{} - mainProductAttributeValues := assignAttributes(iproduct.ID, &product) - - if iproduct.Type == "simple" { - mainProductAttributeValues = append(mainProductAttributeValues, getPriceAttributes(iproduct.ID, &product.Price)...) - } else if len(product.ColorVariants) > 0 || len(product.SizeVariants) > 0 { + if iproduct.Type == "configurable" { var productVariants []gm.Product + var superAttributes []gm.Attribute if len(product.ColorVariants) > 0 { //attach super attributes color - superAttribute := gm.ProductSuperAttribute{ProductID: iproduct.ID, AttributeID: attributesMap["color"].ID} - db.Create(&superAttribute) + superAttributes = append(superAttributes, attributesMap["color"]) + var description string for _, colorVariant := range product.ColorVariants { weight, _ := strconv.ParseFloat(colorVariant.Weight, 64) @@ -204,6 +203,9 @@ func importProduct(product models.Product, db *gorm.DB) { colorOption := gm.GetAttributeOption(db, attributesMap["color"].ID, colorVariant.Color) if len(colorVariant.SizeVariants) > 0 { + if len(superAttributes) < 2 { + superAttributes = append(superAttributes, attributesMap["size"]) + } for _, sizeVariant := range colorVariant.SizeVariants { @@ -256,7 +258,7 @@ func importProduct(product models.Product, db *gorm.DB) { } for _, element := range colorVariant.Images { - productVariant.Images = append(iproduct.Images, gm.ProductImage{Type: "cdn", Path: element}) + productVariant.Images = append(productVariant.Images, gm.ProductImage{Type: "cdn", Path: element}) } //todo assign images productVariants = append(productVariants, productVariant) @@ -268,16 +270,6 @@ func importProduct(product models.Product, db *gorm.DB) { colorOption := gm.GetAttributeOption(db, attributesMap["color"].ID, colorVariant.Color) attributes := collectAttributes(&colorVariant, &colorOption) - if colorVariant.Price.OriginalPrice.Value > colorVariant.Price.DiscountedPrice.Value { - attributes = append(attributes, []gm.ProductAttributeValue{ - {AttributeID: attributesMap["price"].ID, FloatValue: colorVariant.Price.OriginalPrice.Value, Channel: "default", Locale: "tm"}, - {AttributeID: attributesMap["special_price"].ID, FloatValue: colorVariant.Price.DiscountedPrice.Value, Channel: "default", Locale: "tm"}, - }...) - - } else { - attributes = append(attributes, gm.ProductAttributeValue{AttributeID: attributesMap["price"].ID, FloatValue: colorVariant.Price.OriginalPrice.Value, Channel: "default", Locale: "tm"}) - } - sku := fmt.Sprintf("%s-%s-col-%s", iproduct.Sku, colorVariant.ProductNumber, colorVariant.Color) productVariant := gm.Product{ @@ -292,7 +284,7 @@ func importProduct(product models.Product, db *gorm.DB) { } for _, element := range colorVariant.Images { - productVariant.Images = append(iproduct.Images, gm.ProductImage{Type: "cdn", Path: element}) + productVariant.Images = append(productVariant.Images, gm.ProductImage{Type: "cdn", Path: element}) } productVariants = append(productVariants, productVariant) @@ -302,8 +294,9 @@ func importProduct(product models.Product, db *gorm.DB) { if len(product.SizeVariants) > 0 { //attach super attributes size - superAttribute := gm.ProductSuperAttribute{ProductID: iproduct.ID, AttributeID: attributesMap["size"].ID} - db.Create(&superAttribute) + if len(superAttributes) < 2 { + superAttributes = append(superAttributes, attributesMap["size"]) + } var description string for _, desc := range product.Descriptions { @@ -367,23 +360,20 @@ func importProduct(product models.Product, db *gorm.DB) { } } - db.Omit("Categories").Create(&productVariants) //todo assign all with categories + saErr := db.Model(&iproduct).Association("SuperAttributes").Append(superAttributes) + + if saErr != nil { + log.Println(saErr) + } + + errVariants := db.Omit("Categories").Create(&productVariants).Error + + if errVariants != nil { + log.Println(errVariants) + } + } - // db.Model(&iproduct).Association("Categories").Append(categories) - var err2 = db.Create(&mainProductAttributeValues).Error - - if err2 != nil { - log.Println(err) - } - // panic("'hassiktir'") - //todo gorm transactions - //todo Attributes source, cinsiyet - - // if len(product.Attributes) > 0 { - // iproduct.AttrbuteFamily = getAttributeFamily() - // } - //todo seller product, meta keys // if($data['vendor'] && $seller = $this->vendorRepository->findOneByField('url',$data['vendor'])){ // $this->createSellerProduct($parentProduct, $seller->id); @@ -399,6 +389,18 @@ func importProduct(product models.Product, db *gorm.DB) { } } + +func createFlat(product gm.Product) gm.ProductFlat { + flat := gm.ProductFlat{ + ProductID: product.ID, + BrandID: product.BrandID, + Status: true, + VisibleIndividually: true, + } + + return flat +} + func createSellerProduct() { /* Event::dispatch('marketplace.catalog.product.create.before'); @@ -437,7 +439,7 @@ func collectAttributes(variant *models.Product, option *gm.AttributeOption) []gm // description += "

" + desc.Description + "

" // } - return []gm.ProductAttributeValue{ + attributes := []gm.ProductAttributeValue{ {AttributeID: attributesMap["sku"].ID, TextValue: sku, Channel: "default", Locale: "tm"}, {AttributeID: attributesMap["product_number"].ID, TextValue: variant.ProductNumber, Channel: "default", Locale: "tm"}, {AttributeID: attributesMap["name"].ID, TextValue: variant.Name, Channel: "default", Locale: "tm"}, @@ -450,9 +452,21 @@ func collectAttributes(variant *models.Product, option *gm.AttributeOption) []gm // {AttributeID: attributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"}, {AttributeID: option.AttributeID, IntegerValue: int(option.ID), Channel: "default", Locale: "tm"}, } + + if variant.Price.OriginalPrice.Value > variant.Price.DiscountedPrice.Value { + attributes = append(attributes, []gm.ProductAttributeValue{ + {AttributeID: attributesMap["price"].ID, FloatValue: variant.Price.OriginalPrice.Value, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["special_price"].ID, FloatValue: variant.Price.DiscountedPrice.Value, Channel: "default", Locale: "tm"}, + }...) + + } else { + attributes = append(attributes, gm.ProductAttributeValue{AttributeID: attributesMap["price"].ID, FloatValue: variant.Price.OriginalPrice.Value, Channel: "default", Locale: "tm"}) + } + + return attributes } -func assignAttributes(productID uint, data *models.Product) []gm.ProductAttributeValue { +func assignAttributes(data *models.Product) []gm.ProductAttributeValue { weight, _ := strconv.ParseFloat(data.Weight, 64) @@ -464,29 +478,30 @@ func assignAttributes(productID uint, data *models.Product) []gm.ProductAttribut //$desc = implode(array_map(fn($value): string => '

' . $value['description'] . '

', $data['descriptions'])); var productAttributeValues = []gm.ProductAttributeValue{ - {ProductID: productID, AttributeID: attributesMap["sku"].ID, TextValue: data.ProductGroupID, Channel: "default", Locale: "tm"}, - {ProductID: productID, AttributeID: attributesMap["product_number"].ID, TextValue: data.ProductNumber, Channel: "default", Locale: "tm"}, - {ProductID: productID, AttributeID: attributesMap["name"].ID, TextValue: data.Name, Channel: "default", Locale: "tm"}, - {ProductID: productID, AttributeID: attributesMap["weight"].ID, FloatValue: weight, Channel: "default", Locale: "tm"}, - {ProductID: productID, AttributeID: attributesMap["source"].ID, TextValue: data.URLKey, Channel: "default", Locale: "tm"}, - {ProductID: productID, AttributeID: attributesMap["status"].ID, BooleanValue: true, Channel: "default", Locale: "tm"}, - {ProductID: productID, AttributeID: attributesMap["visible_individually"].ID, BooleanValue: true, Channel: "default", Locale: "tm"}, - {ProductID: productID, AttributeID: attributesMap["url_key"].ID, TextValue: data.ProductGroupID, Channel: "default", Locale: "tm"}, - // {ProductID: productID, AttributeID: attributesMap["short_description"].ID, TextValue: description, Channel: "default", Locale: "tm"}, - {ProductID: productID, AttributeID: attributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"}, - {ProductID: productID, AttributeID: attributesMap["favoritesCount"].ID, IntegerValue: data.FavoriteCount, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["sku"].ID, TextValue: data.ProductGroupID, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["product_number"].ID, TextValue: data.ProductNumber, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["name"].ID, TextValue: data.Name, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["weight"].ID, FloatValue: weight, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["source"].ID, TextValue: data.URLKey, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["status"].ID, BooleanValue: true, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["visible_individually"].ID, BooleanValue: true, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["url_key"].ID, TextValue: data.ProductGroupID, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["favoritesCount"].ID, IntegerValue: data.FavoriteCount, Channel: "default", Locale: "tm"}, } - // if data.Price.OriginalPrice.Value > data.Price.DiscountedPrice.Value { - // productAttributeValues = append(productAttributeValues, []gm.ProductAttributeValue{ - // {ProductID: productID, AttributeID: attributesMap["price"].ID, FloatValue: data.Price.OriginalPrice.Value, Channel: "default", Locale: "tm"}, - // {ProductID: productID, AttributeID: attributesMap["special_price"].ID, FloatValue: data.Price.DiscountedPrice.Value, Channel: "default", Locale: "tm"}, - // }...) + if data.ColorVariantCount == 0 && len(data.SizeVariants) == 0 { + if data.Price.OriginalPrice.Value > data.Price.DiscountedPrice.Value { + productAttributeValues = append(productAttributeValues, []gm.ProductAttributeValue{ + {AttributeID: attributesMap["price"].ID, FloatValue: data.Price.OriginalPrice.Value, Channel: "default", Locale: "tm"}, + {AttributeID: attributesMap["special_price"].ID, FloatValue: data.Price.DiscountedPrice.Value, Channel: "default", Locale: "tm"}, + }...) - // } else { - // productAttributeValues = append(productAttributeValues, gm.ProductAttributeValue{ProductID: productID, AttributeID: attributesMap["price"].ID, FloatValue: data.Price.OriginalPrice.Value, Channel: "default", Locale: "tm"}) + } else { + productAttributeValues = append(productAttributeValues, gm.ProductAttributeValue{AttributeID: attributesMap["price"].ID, FloatValue: data.Price.OriginalPrice.Value, Channel: "default", Locale: "tm"}) - // } + } + } return productAttributeValues }