47 lines
1.3 KiB
Go
47 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"`
|
|
GetAll bool `form:"get_all"`
|
|
}
|
|
|
|
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
|
|
}
|