wms-be/modules/client/query/client_query.go

46 lines
1.3 KiB
Go

package query
import (
"gorm.io/gorm"
)
type ClientFilter struct {
Name string `form:"name"`
PIC string `form:"pic"`
Phone string `form:"phone"`
Email string `form:"email"`
Address string `form:"address"`
MenuID string `form:"menu_id"` // tambahkan field ini
MenuName string `form:"menu_name"` // tambahkan field ini
PerPage int `form:"per_page"`
Page int `form:"page"`
}
func ApplyClientFilters(db *gorm.DB, filter ClientFilter) *gorm.DB {
if filter.Name != "" {
db = db.Where("name ILIKE ?", "%"+filter.Name+"%")
}
if filter.PIC != "" {
db = db.Where("pic ILIKE ?", "%"+filter.PIC+"%")
}
if filter.Phone != "" {
db = db.Where("phone ILIKE ?", "%"+filter.Phone+"%")
}
if filter.Email != "" {
db = db.Where("email ILIKE ?", "%"+filter.Email+"%")
}
if filter.Address != "" {
db = db.Where("address ILIKE ?", "%"+filter.Address+"%")
}
if filter.MenuName != "" {
db = db.Joins("JOIN m_menu_clients ON m_menu_clients.client_id = m_clients.id").
Joins("JOIN m_menus ON m_menus.id = m_menu_clients.menu_id").
Where("m_menus.name ILIKE ?", "%"+filter.MenuName+"%")
}
if filter.MenuID != "" {
db = db.Joins("JOIN m_menu_clients ON m_menu_clients.client_id = m_clients.id").
Where("m_menu_clients.menu_id = ?", filter.MenuID)
}
return db
}