Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate
This commit is contained in:
@@ -46,7 +46,8 @@ func (h *CartsHandler) AddNewCart(c fiber.Ctx) error {
|
||||
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
|
||||
}
|
||||
|
||||
new_cart, err := h.cartsService.CreateNewCart(userID)
|
||||
name := c.Query("name")
|
||||
new_cart, err := h.cartsService.CreateNewCart(userID, name)
|
||||
if err != nil {
|
||||
return c.Status(responseErrors.GetErrorStatus(err)).
|
||||
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
|
||||
|
||||
@@ -32,6 +32,7 @@ func CustomerHandlerRoutes(r fiber.Router) fiber.Router {
|
||||
|
||||
r.Get("", handler.customerData)
|
||||
r.Get("/list", middleware.Require(perms.UserReadAny), handler.listCustomers)
|
||||
r.Patch("/no-vat", middleware.Require(perms.UserWriteAny), handler.setCustomerNoVatStatus)
|
||||
return r
|
||||
}
|
||||
|
||||
@@ -100,3 +101,28 @@ var columnMappingListUsers map[string]string = map[string]string{
|
||||
"first_name": "users.first_name",
|
||||
"last_name": "users.last_name",
|
||||
}
|
||||
|
||||
func (h *customerHandler) setCustomerNoVatStatus(fc fiber.Ctx) error {
|
||||
user, ok := localeExtractor.GetCustomer(fc)
|
||||
if !ok || user == nil {
|
||||
return fc.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
|
||||
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, responseErrors.ErrInvalidBody)))
|
||||
}
|
||||
|
||||
var req struct {
|
||||
CustomerID uint `json:"customer_id"`
|
||||
IsNoVat bool `json:"is_no_vat"`
|
||||
}
|
||||
|
||||
if err := fc.Bind().Body(&req); err != nil {
|
||||
return fc.Status(responseErrors.GetErrorStatus(responseErrors.ErrJSONBody)).
|
||||
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, responseErrors.ErrJSONBody)))
|
||||
}
|
||||
|
||||
if err := h.service.SetCustomerNoVatStatus(req.CustomerID, req.IsNoVat); err != nil {
|
||||
return fc.Status(responseErrors.GetErrorStatus(err)).
|
||||
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, err)))
|
||||
}
|
||||
|
||||
return fc.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(fc, response.Message_OK)))
|
||||
}
|
||||
|
||||
@@ -112,6 +112,7 @@ var columnMappingListProducts map[string]string = map[string]string{
|
||||
"quantity": "bp.quantity",
|
||||
"is_favorite": "bp.is_favorite",
|
||||
"is_new": "bp.is_new",
|
||||
"is_oem": "bp.is_oem",
|
||||
}
|
||||
|
||||
func (h *ProductsHandler) AddToFavorites(c fiber.Ctx) error {
|
||||
|
||||
@@ -35,6 +35,7 @@ type Customer struct {
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
||||
IsNoVat bool `gorm:"default:false" json:"is_no_vat"`
|
||||
}
|
||||
|
||||
func (u *Customer) HasPermission(permission perms.Permission) bool {
|
||||
|
||||
@@ -12,7 +12,8 @@ type ProductInList struct {
|
||||
PriceTaxExcl float64 `gorm:"column:price_tax_excl" json:"price_tax_excl"`
|
||||
PriceTaxIncl float64 `gorm:"column:price_tax_incl" json:"price_tax_incl"`
|
||||
IsFavorite bool `gorm:"column:is_favorite" json:"is_favorite"`
|
||||
IsNew uint `gorm:"column:is_new" json:"is_new"`
|
||||
IsNew bool `gorm:"column:is_new" json:"is_new"`
|
||||
IsOEM bool `gorm:"column:is_oem" json:"is_oem"`
|
||||
}
|
||||
|
||||
type ProductFilters struct {
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
|
||||
type UICartsRepo interface {
|
||||
CartsAmount(user_id uint) (uint, error)
|
||||
CreateNewCart(user_id uint) (model.CustomerCart, error)
|
||||
CreateNewCart(user_id uint, name string) (model.CustomerCart, error)
|
||||
RemoveCart(user_id uint, cart_id uint) error
|
||||
UserHasCart(user_id uint, cart_id uint) (bool, error)
|
||||
UpdateCartName(user_id uint, cart_id uint, new_name string) error
|
||||
@@ -42,10 +42,7 @@ func (repo *CartsRepo) CartsAmount(user_id uint) (uint, error) {
|
||||
return amt, err
|
||||
}
|
||||
|
||||
func (repo *CartsRepo) CreateNewCart(user_id uint) (model.CustomerCart, error) {
|
||||
var name string
|
||||
name = constdata.DEFAULT_NEW_CART_NAME
|
||||
|
||||
func (repo *CartsRepo) CreateNewCart(user_id uint, name string) (model.CustomerCart, error) {
|
||||
cart := model.CustomerCart{
|
||||
UserID: user_id,
|
||||
Name: &name,
|
||||
|
||||
@@ -17,6 +17,7 @@ type UICustomerRepo interface {
|
||||
Find(langId uint, p find.Paging, filt *filters.FiltersList, search string) (*find.Found[model.UserInList], error)
|
||||
Save(customer *model.Customer) error
|
||||
Create(customer *model.Customer) error
|
||||
SetCustomerNoVatStatus(customerID uint, isNoVat bool) error
|
||||
}
|
||||
|
||||
type CustomerRepo struct{}
|
||||
@@ -114,3 +115,7 @@ func (repo *CustomerRepo) Save(customer *model.Customer) error {
|
||||
func (repo *CustomerRepo) Create(customer *model.Customer) error {
|
||||
return db.DB.Create(customer).Error
|
||||
}
|
||||
|
||||
func (repo *CustomerRepo) SetCustomerNoVatStatus(customerID uint, isNoVat bool) error {
|
||||
return db.DB.Model(&model.Customer{}).Where("id = ?", customerID).Update("is_no_vat", isNoVat).Error
|
||||
}
|
||||
|
||||
@@ -122,6 +122,19 @@ func (repo *ProductsRepo) Find(langID uint, userID uint, p find.Paging, filt *fi
|
||||
Group("product_id"),
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "oems",
|
||||
Subquery: exclause.Subquery{
|
||||
DB: db.DB.
|
||||
Table("b2b_oems").
|
||||
Select(`
|
||||
product_id AS product_id,
|
||||
COUNT(*) > 0 AS is_customers_oem
|
||||
`).
|
||||
Where("user_id = ?", userID).
|
||||
Group("product_id"),
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "new_product_days",
|
||||
Subquery: exclause.Subquery{
|
||||
@@ -150,6 +163,7 @@ func (repo *ProductsRepo) Find(langID uint, userID uint, p find.Paging, filt *fi
|
||||
pl.name AS name,
|
||||
ps.id_category_default AS category_id,
|
||||
p.reference AS reference,
|
||||
p.is_oem AS is_oem,
|
||||
sa.quantity AS quantity,
|
||||
COALESCE(f.is_favorite, 0) AS is_favorite,
|
||||
CASE
|
||||
@@ -166,7 +180,9 @@ func (repo *ProductsRepo) Find(langID uint, userID uint, p find.Paging, filt *fi
|
||||
Joins("LEFT JOIN favorites f ON f.product_id = ps.id_product").
|
||||
Joins("LEFT JOIN ps_stock_available sa ON sa.id_product = ps.id_product AND sa.id_product_attribute = 0").
|
||||
Joins("LEFT JOIN new_product_days npd ON 1 = 1").
|
||||
Joins("LEFT JOIN oems ON oems.product_id = ps.id_product").
|
||||
Where("ps.active = ?", 1).
|
||||
Where("(p.is_oem = 0 OR oems.is_customers_oem > 0)").
|
||||
Group("ps.id_product"),
|
||||
},
|
||||
},
|
||||
@@ -182,7 +198,8 @@ func (repo *ProductsRepo) Find(langID uint, userID uint, p find.Paging, filt *fi
|
||||
COALESCE(v.variants_number, 0) AS variants_number,
|
||||
bp.quantity AS quantity,
|
||||
bp.is_favorite AS is_favorite,
|
||||
bp.is_new AS is_new
|
||||
bp.is_new AS is_new,
|
||||
bp.is_oem AS is_oem
|
||||
`, config.Get().Image.ImagePrefix).
|
||||
Joins("JOIN ps_product_lang pl ON pl.id_product = bp.product_id AND pl.id_lang = ?", langID).
|
||||
Joins("JOIN ps_image_shop ims ON ims.id_product = bp.product_id AND ims.cover = 1").
|
||||
|
||||
@@ -17,7 +17,7 @@ func New() *CartsService {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *CartsService) CreateNewCart(user_id uint) (model.CustomerCart, error) {
|
||||
func (s *CartsService) CreateNewCart(user_id uint, name string) (model.CustomerCart, error) {
|
||||
var cart model.CustomerCart
|
||||
|
||||
customers_carts_amount, err := s.repo.CartsAmount(user_id)
|
||||
@@ -28,8 +28,12 @@ func (s *CartsService) CreateNewCart(user_id uint) (model.CustomerCart, error) {
|
||||
return cart, responseErrors.ErrMaxAmtOfCartsReached
|
||||
}
|
||||
|
||||
if name == "" {
|
||||
name = constdata.DEFAULT_NEW_CART_NAME
|
||||
}
|
||||
|
||||
// create new cart for customer
|
||||
cart, err = s.repo.CreateNewCart(user_id)
|
||||
cart, err = s.repo.CreateNewCart(user_id, name)
|
||||
|
||||
return cart, nil
|
||||
}
|
||||
|
||||
@@ -24,3 +24,7 @@ func (s *CustomerService) GetById(id uint) (*model.Customer, error) {
|
||||
func (s *CustomerService) Find(langId uint, p find.Paging, filt *filters.FiltersList, search string) (*find.Found[model.UserInList], error) {
|
||||
return s.repo.Find(langId, p, filt, search)
|
||||
}
|
||||
|
||||
func (s *CustomerService) SetCustomerNoVatStatus(customerID uint, isNoVat bool) error {
|
||||
return s.repo.SetCustomerNoVatStatus(customerID, isNoVat)
|
||||
}
|
||||
|
||||
@@ -231,21 +231,54 @@ func (s *MenuService) GetTopMenu(languageId uint, roleId uint) ([]*model.B2BTopM
|
||||
|
||||
func (s *MenuService) appendAdditional(all_categories *[]model.ScannedCategory, id_lang uint, iso_code string) {
|
||||
for i := 0; i < len(*all_categories); i++ {
|
||||
(*all_categories)[i].Filter = "category_id_in=" + strconv.Itoa(int((*all_categories)[i].CategoryID))
|
||||
(*all_categories)[i].Filter = "category_id_eq=" + strconv.Itoa(int((*all_categories)[i].CategoryID))
|
||||
}
|
||||
|
||||
var additional model.ScannedCategory
|
||||
additional.CategoryID = 10001
|
||||
additional.Name = "New Products"
|
||||
additional.Active = 1
|
||||
additional.Position = 10
|
||||
additional.ParentID = 2
|
||||
additional.IsRoot = 0
|
||||
additional.LinkRewrite = i18n.T___(id_lang, "category.new_products")
|
||||
additional.IsoCode = iso_code
|
||||
// the new products category
|
||||
var new_products_category model.ScannedCategory
|
||||
new_products_category.CategoryID = constdata.ADDITIONAL_CATEGORIES_INDEX + 1
|
||||
new_products_category.Name = "New Products"
|
||||
new_products_category.Active = 1
|
||||
new_products_category.Position = 10
|
||||
new_products_category.ParentID = 2
|
||||
new_products_category.IsRoot = 0
|
||||
new_products_category.LinkRewrite = i18n.T___(id_lang, "category.new_products")
|
||||
new_products_category.IsoCode = iso_code
|
||||
|
||||
additional.Visited = false
|
||||
additional.Filter = "is_new_in=true"
|
||||
new_products_category.Visited = false
|
||||
new_products_category.Filter = "is_new_eq=true"
|
||||
|
||||
*all_categories = append(*all_categories, additional)
|
||||
*all_categories = append(*all_categories, new_products_category)
|
||||
|
||||
// the oem products category
|
||||
var oem_products_category model.ScannedCategory
|
||||
oem_products_category.CategoryID = constdata.ADDITIONAL_CATEGORIES_INDEX + 2
|
||||
oem_products_category.Name = "OEM Products"
|
||||
oem_products_category.Active = 1
|
||||
oem_products_category.Position = 11
|
||||
oem_products_category.ParentID = 2
|
||||
oem_products_category.IsRoot = 0
|
||||
oem_products_category.LinkRewrite = i18n.T___(id_lang, "category.oem_products")
|
||||
oem_products_category.IsoCode = iso_code
|
||||
|
||||
oem_products_category.Visited = false
|
||||
oem_products_category.Filter = "is_oem_eq=true"
|
||||
|
||||
*all_categories = append(*all_categories, oem_products_category)
|
||||
|
||||
// the favorite products category
|
||||
var favorite_products_category model.ScannedCategory
|
||||
favorite_products_category.CategoryID = constdata.ADDITIONAL_CATEGORIES_INDEX + 3
|
||||
favorite_products_category.Name = "Favourite Products" // British English version.
|
||||
favorite_products_category.Active = 1
|
||||
favorite_products_category.Position = 12
|
||||
favorite_products_category.ParentID = 2
|
||||
favorite_products_category.IsRoot = 0
|
||||
favorite_products_category.LinkRewrite = i18n.T___(id_lang, "category.favorite_products")
|
||||
favorite_products_category.IsoCode = iso_code
|
||||
|
||||
favorite_products_category.Visited = false
|
||||
favorite_products_category.Filter = "is_favorite_eq=true"
|
||||
|
||||
*all_categories = append(*all_categories, favorite_products_category)
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ const ADMIN_NOTIFICATION_LANGUAGE = 2
|
||||
|
||||
// CATEGORY_TREE_ROOT_ID corresponds to id_category in ps_category which has is_root_category=1
|
||||
const CATEGORY_TREE_ROOT_ID = 2
|
||||
const ADDITIONAL_CATEGORIES_INDEX = 10000
|
||||
|
||||
// since arrays can not be const
|
||||
var CATEGORY_BLACKLIST = []uint{250}
|
||||
|
||||
@@ -95,4 +95,6 @@ type Product struct {
|
||||
Category string `gorm:"column:category" json:"category"`
|
||||
|
||||
IsFavorite bool `gorm:"column:is_favorite" json:"is_favorite"`
|
||||
IsOEM bool `gorm:"column:is_oem" json:"is_oem"`
|
||||
IsNew bool `gorm:"column:is_new" json:"is_new"`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user