size boyut

This commit is contained in:
merdan 2022-11-01 11:35:43 +05:00
parent da8c13310b
commit d4ff2a48b3
4 changed files with 105 additions and 23 deletions

View File

@ -1,6 +1,7 @@
package gorm_models
import (
"errors"
"log"
"gorm.io/gorm"
@ -11,6 +12,14 @@ type AttributeOption struct {
AttributeID uint
AdminName string
SortOrder int `sql:"DEFAULT:NULL" gorm:"default:null"`
Translations []AttributeOptionTranslation
}
type AttributeOptionTranslation struct {
ID uint `gorm:"primaryKey"`
AttributeOptionID uint
Locale string
Label string
}
type Attribute struct {
@ -61,11 +70,27 @@ func GetAttributes(db *gorm.DB) ([]Attribute, error) {
func GetAttributeOption(db *gorm.DB, attrbuteID uint, value string) AttributeOption {
var option AttributeOption
err := db.FirstOrCreate(&option, AttributeOption{AttributeID: attrbuteID, AdminName: value}).Error
if err != nil {
err := db.Where("attribute_id=? and admin_name", attrbuteID, value).First(&option).Error
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
option = AttributeOption{
AttributeID: attrbuteID,
AdminName: value,
SortOrder: 1000,
Translations: []AttributeOptionTranslation{
{Locale: "tm", Label: value},
{Locale: "ru", Label: value},
{Locale: "tr", Label: value},
},
}
if err := db.Create(&option).Error; err != nil {
log.Println(err.Error())
}
}
return option
}

View File

@ -38,7 +38,6 @@ type ProductFlat struct {
Name string `sql:"DEFAULT:''" gorm:"default:''"`
Weight float64 `sql:"DEFAULT:NULL" gorm:"type:decimal(12,4);default:null"`
Status bool `sql:"DEFAULT:NULL" gorm:"default:null"`
//Source string `sql:"DEFAULT:NULL" gorm:"default:null"`
VisibleIndividually bool `sql:"DEFAULT:NULL" gorm:"default:null"`
Price float64 `gorm:"type:decimal(12,4)"`
MinPrice float64 `gorm:"type:decimal(12,4)"`
@ -60,6 +59,8 @@ type ProductFlat struct {
ColorLabel string `sql:"DEFAULT:NULL" gorm:"default:null"`
Size int `sql:"DEFAULT:NULL" gorm:"default:null"`
SizeLabel string `sql:"DEFAULT:NULL" gorm:"default:null"`
Boyut int `sql:"DEFAULT:NULL" gorm:"default:null"`
BoyutLabel string `sql:"DEFAULT:NULL" gorm:"default:null"`
MetaTitle string `sql:"DEFAULT:NULL" gorm:"default:null"`
MetaKeywords string `sql:"DEFAULT:NULL" gorm:"default:null"`
BrandID uint `sql:"DEFAULT:NULL" gorm:"default:null"`

View File

@ -304,7 +304,14 @@ func (importer *Importer) importVariant(product models.Product) (*gm.Product, er
}
savePoint := "size" + strconv.Itoa(index)
tx.SavePoint(savePoint)
sizeOPtion := gm.GetAttributeOption(tx, importer.AttributesMap["size"].ID, variant.AttributeValue)
var sizeOPtion gm.AttributeOption
if variant.AttributeName == "Beden" {
sizeOPtion = gm.GetAttributeOption(tx, importer.AttributesMap["size"].ID, variant.AttributeValue)
} else {
sizeOPtion = gm.GetAttributeOption(tx, importer.AttributesMap["boyut"].ID, variant.AttributeValue)
}
sku := fmt.Sprintf("%s-%d", product.ProductNumber, variant.ItemNumber)
variantProduct := productRepo.makeVariant(mainPorduct.ID, mainPorduct.AttributeFamilyID, sku)
@ -422,9 +429,45 @@ func (importer *Importer) updateVariant(product models.Product) (*gm.Product, er
}
if flat.Product.Type == "configurable" {
//todo update variant prices
//todo create none existing variant
//todo update min max price
} else {
price := product.Price
if price.OriginalPrice.Value > price.DiscountedPrice.Value {
importer.baza.Model(&flat).Updates(map[string]interface{}{
"price": price.OriginalPrice.Value,
"special_price": price.DiscountedPrice.Value,
"min_price": price.DiscountedPrice.Value,
"max_price": price.OriginalPrice.Value,
})
importer.baza.Model(&gm.ProductAttributeValue{}).
Where("attribute_id = 11 and product_id = ?", flat.ProductID).
Update("float_value", price.OriginalPrice.Value)
importer.baza.Model(&gm.ProductAttributeValue{}).
Where("attribute_id = 13 and product_id = ?", flat.ProductID).
Update("float_value", price.DiscountedPrice.Value)
} else {
importer.baza.Model(&flat).Updates(map[string]interface{}{
"price": price.DiscountedPrice.Value,
"special_price": nil,
"min_price": price.DiscountedPrice.Value,
"max_price": price.DiscountedPrice.Value,
})
importer.baza.Model(&gm.ProductAttributeValue{}).
Where("attribute_id = 11 and product_id = ?", flat.ProductID).
Update("float_value", price.DiscountedPrice.Value)
importer.baza.Where("attribute_id = 13 and product_id = ?", flat.ProductID).
Delete(&gm.ProductAttributeValue{})
}
}
return nil, nil
}

View File

@ -198,14 +198,22 @@ func (pr *ProductRepo) makeVariantFlat(variant models.Variant, SizID, parentID,
ProductNumber: fmt.Sprintf("%d", variant.ItemNumber),
Weight: pr.Weight,
FavoritesCount: uint(pr.Data.FavoriteCount),
SizeLabel: variant.AttributeValue,
Size: int(SizID),
//SizeLabel: variant.AttributeValue,
//Size: int(SizID),
MaxPrice: maxPRice,
MinPrice: variant.Price.DiscountedPrice.Value,
Price: maxPRice,
ProductID: productID,
}
if variant.AttributeName == "Beden" {
flat.Size = int(SizID)
flat.SizeLabel = variant.AttributeValue
} else {
flat.Boyut = int(SizID)
flat.BoyutLabel = variant.AttributeValue
}
if flat.MaxPrice > flat.MinPrice {
flat.SpecialPrice = flat.MinPrice
}
@ -253,9 +261,14 @@ func (pr *ProductRepo) getVariantAttributes(AttributesMap map[string]gm.Attribut
{AttributeID: AttributesMap["name"].ID, TextValue: pr.Data.Name, Channel: "default", Locale: "tm"},
{AttributeID: AttributesMap["weight"].ID, TextValue: pr.Data.Weight},
{AttributeID: AttributesMap["status"].ID, BooleanValue: true},
{AttributeID: AttributesMap["size"].ID, IntegerValue: int(SizID)},
//{AttributeID: AttributesMap["size"].ID, IntegerValue: int(SizID)},
{AttributeID: AttributesMap["price"].ID, FloatValue: price},
}
if product.AttributeName == "Beden" {
attributes = append(attributes, gm.ProductAttributeValue{AttributeID: AttributesMap["size"].ID, IntegerValue: int(SizID)})
} else {
attributes = append(attributes, gm.ProductAttributeValue{AttributeID: AttributesMap["boyut"].ID, IntegerValue: int(SizID)})
}
if pr.Data.Color != "" {
attributes = append(attributes, gm.ProductAttributeValue{AttributeID: AttributesMap["color"].ID, IntegerValue: int(pr.ColorOption.ID)})