developed
This commit is contained in:
parent
a05684c7f1
commit
894c0847dd
|
|
@ -16,6 +16,7 @@ type Product struct {
|
||||||
Images []ProductImage
|
Images []ProductImage
|
||||||
Categories []Category `gorm:"many2many:product_categories;"`
|
Categories []Category `gorm:"many2many:product_categories;"`
|
||||||
AttributeValues []ProductAttributeValue
|
AttributeValues []ProductAttributeValue
|
||||||
|
SuperAttributes []Attribute `gorm:"many2many:product_super_attributes;"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// $main_attributes = [
|
// $main_attributes = [
|
||||||
|
|
@ -48,7 +49,12 @@ type ProductFlat struct {
|
||||||
FavoritesCount uint
|
FavoritesCount uint
|
||||||
CreatedAt time.Time
|
CreatedAt time.Time
|
||||||
UpdatedAt time.Time
|
UpdatedAt time.Time
|
||||||
|
ProductID uint
|
||||||
Product Product
|
Product Product
|
||||||
|
Channel string `sql:"DEFAULT:default"`
|
||||||
|
Locale string `sql:"DEFAULT:tm"`
|
||||||
|
ParentID uint `sql:"DEFAULT:NULL"`
|
||||||
|
BrandID uint
|
||||||
}
|
}
|
||||||
|
|
||||||
type ProductImage struct {
|
type ProductImage struct {
|
||||||
|
|
|
||||||
131
test/testit.go
131
test/testit.go
|
|
@ -138,6 +138,8 @@ func getTotalDocumentCount(db string) int {
|
||||||
return response.DocCount
|
return response.DocCount
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// todo defailt variant
|
||||||
|
// productflat
|
||||||
func importProduct(product models.Product, db *gorm.DB) {
|
func importProduct(product models.Product, db *gorm.DB) {
|
||||||
|
|
||||||
famAndSellerWG.Wait() //wait until attribute families and sellers are not get from mysql
|
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,
|
AttributeFamilyID: families[0].ID,
|
||||||
Brand: brand,
|
Brand: brand,
|
||||||
Categories: categories,
|
Categories: categories,
|
||||||
|
AttributeValues: assignAttributes(&product),
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, element := range product.Images {
|
for _, element := range product.Images {
|
||||||
|
|
@ -180,19 +183,15 @@ func importProduct(product models.Product, db *gorm.DB) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// mainProductFlat := gm.ProductFlat{}
|
if iproduct.Type == "configurable" {
|
||||||
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 {
|
|
||||||
|
|
||||||
var productVariants []gm.Product
|
var productVariants []gm.Product
|
||||||
|
var superAttributes []gm.Attribute
|
||||||
|
|
||||||
if len(product.ColorVariants) > 0 {
|
if len(product.ColorVariants) > 0 {
|
||||||
//attach super attributes color
|
//attach super attributes color
|
||||||
superAttribute := gm.ProductSuperAttribute{ProductID: iproduct.ID, AttributeID: attributesMap["color"].ID}
|
superAttributes = append(superAttributes, attributesMap["color"])
|
||||||
db.Create(&superAttribute)
|
|
||||||
var description string
|
var description string
|
||||||
for _, colorVariant := range product.ColorVariants {
|
for _, colorVariant := range product.ColorVariants {
|
||||||
weight, _ := strconv.ParseFloat(colorVariant.Weight, 64)
|
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)
|
colorOption := gm.GetAttributeOption(db, attributesMap["color"].ID, colorVariant.Color)
|
||||||
|
|
||||||
if len(colorVariant.SizeVariants) > 0 {
|
if len(colorVariant.SizeVariants) > 0 {
|
||||||
|
if len(superAttributes) < 2 {
|
||||||
|
superAttributes = append(superAttributes, attributesMap["size"])
|
||||||
|
}
|
||||||
|
|
||||||
for _, sizeVariant := range colorVariant.SizeVariants {
|
for _, sizeVariant := range colorVariant.SizeVariants {
|
||||||
|
|
||||||
|
|
@ -256,7 +258,7 @@ func importProduct(product models.Product, db *gorm.DB) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, element := range colorVariant.Images {
|
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
|
//todo assign images
|
||||||
productVariants = append(productVariants, productVariant)
|
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)
|
colorOption := gm.GetAttributeOption(db, attributesMap["color"].ID, colorVariant.Color)
|
||||||
attributes := collectAttributes(&colorVariant, &colorOption)
|
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)
|
sku := fmt.Sprintf("%s-%s-col-%s", iproduct.Sku, colorVariant.ProductNumber, colorVariant.Color)
|
||||||
|
|
||||||
productVariant := gm.Product{
|
productVariant := gm.Product{
|
||||||
|
|
@ -292,7 +284,7 @@ func importProduct(product models.Product, db *gorm.DB) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, element := range colorVariant.Images {
|
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)
|
productVariants = append(productVariants, productVariant)
|
||||||
|
|
@ -302,8 +294,9 @@ func importProduct(product models.Product, db *gorm.DB) {
|
||||||
|
|
||||||
if len(product.SizeVariants) > 0 {
|
if len(product.SizeVariants) > 0 {
|
||||||
//attach super attributes size
|
//attach super attributes size
|
||||||
superAttribute := gm.ProductSuperAttribute{ProductID: iproduct.ID, AttributeID: attributesMap["size"].ID}
|
if len(superAttributes) < 2 {
|
||||||
db.Create(&superAttribute)
|
superAttributes = append(superAttributes, attributesMap["size"])
|
||||||
|
}
|
||||||
|
|
||||||
var description string
|
var description string
|
||||||
for _, desc := range product.Descriptions {
|
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
|
//todo seller product, meta keys
|
||||||
// if($data['vendor'] && $seller = $this->vendorRepository->findOneByField('url',$data['vendor'])){
|
// if($data['vendor'] && $seller = $this->vendorRepository->findOneByField('url',$data['vendor'])){
|
||||||
// $this->createSellerProduct($parentProduct, $seller->id);
|
// $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() {
|
func createSellerProduct() {
|
||||||
/*
|
/*
|
||||||
Event::dispatch('marketplace.catalog.product.create.before');
|
Event::dispatch('marketplace.catalog.product.create.before');
|
||||||
|
|
@ -437,7 +439,7 @@ func collectAttributes(variant *models.Product, option *gm.AttributeOption) []gm
|
||||||
// description += "<p>" + desc.Description + "</p>"
|
// description += "<p>" + desc.Description + "</p>"
|
||||||
// }
|
// }
|
||||||
|
|
||||||
return []gm.ProductAttributeValue{
|
attributes := []gm.ProductAttributeValue{
|
||||||
{AttributeID: attributesMap["sku"].ID, TextValue: sku, Channel: "default", Locale: "tm"},
|
{AttributeID: attributesMap["sku"].ID, TextValue: sku, Channel: "default", Locale: "tm"},
|
||||||
{AttributeID: attributesMap["product_number"].ID, TextValue: variant.ProductNumber, 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"},
|
{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: attributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"},
|
||||||
{AttributeID: option.AttributeID, IntegerValue: int(option.ID), 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)
|
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 => '<p>' . $value['description'] . '</p>', $data['descriptions']));
|
//$desc = implode(array_map(fn($value): string => '<p>' . $value['description'] . '</p>', $data['descriptions']));
|
||||||
|
|
||||||
var productAttributeValues = []gm.ProductAttributeValue{
|
var productAttributeValues = []gm.ProductAttributeValue{
|
||||||
{ProductID: productID, AttributeID: attributesMap["sku"].ID, TextValue: data.ProductGroupID, Channel: "default", Locale: "tm"},
|
{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"},
|
{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"},
|
{AttributeID: attributesMap["name"].ID, TextValue: data.Name, Channel: "default", Locale: "tm"},
|
||||||
{ProductID: productID, AttributeID: attributesMap["weight"].ID, FloatValue: weight, Channel: "default", Locale: "tm"},
|
{AttributeID: attributesMap["weight"].ID, FloatValue: weight, Channel: "default", Locale: "tm"},
|
||||||
{ProductID: productID, AttributeID: attributesMap["source"].ID, TextValue: data.URLKey, Channel: "default", Locale: "tm"},
|
{AttributeID: attributesMap["source"].ID, TextValue: data.URLKey, Channel: "default", Locale: "tm"},
|
||||||
{ProductID: productID, AttributeID: attributesMap["status"].ID, BooleanValue: true, Channel: "default", Locale: "tm"},
|
{AttributeID: attributesMap["status"].ID, BooleanValue: true, Channel: "default", Locale: "tm"},
|
||||||
{ProductID: productID, AttributeID: attributesMap["visible_individually"].ID, BooleanValue: true, Channel: "default", Locale: "tm"},
|
{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"},
|
{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"},
|
{AttributeID: attributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"},
|
||||||
{ProductID: productID, AttributeID: attributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"},
|
{AttributeID: attributesMap["favoritesCount"].ID, IntegerValue: data.FavoriteCount, Channel: "default", Locale: "tm"},
|
||||||
{ProductID: productID, AttributeID: attributesMap["favoritesCount"].ID, IntegerValue: data.FavoriteCount, Channel: "default", Locale: "tm"},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if data.Price.OriginalPrice.Value > data.Price.DiscountedPrice.Value {
|
if data.ColorVariantCount == 0 && len(data.SizeVariants) == 0 {
|
||||||
// productAttributeValues = append(productAttributeValues, []gm.ProductAttributeValue{
|
if data.Price.OriginalPrice.Value > data.Price.DiscountedPrice.Value {
|
||||||
// {ProductID: productID, AttributeID: attributesMap["price"].ID, FloatValue: data.Price.OriginalPrice.Value, Channel: "default", Locale: "tm"},
|
productAttributeValues = append(productAttributeValues, []gm.ProductAttributeValue{
|
||||||
// {ProductID: productID, AttributeID: attributesMap["special_price"].ID, FloatValue: data.Price.DiscountedPrice.Value, Channel: "default", Locale: "tm"},
|
{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 {
|
} else {
|
||||||
// productAttributeValues = append(productAttributeValues, gm.ProductAttributeValue{ProductID: productID, AttributeID: attributesMap["price"].ID, FloatValue: data.Price.OriginalPrice.Value, Channel: "default", Locale: "tm"})
|
productAttributeValues = append(productAttributeValues, gm.ProductAttributeValue{AttributeID: attributesMap["price"].ID, FloatValue: data.Price.OriginalPrice.Value, Channel: "default", Locale: "tm"})
|
||||||
|
|
||||||
// }
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return productAttributeValues
|
return productAttributeValues
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue