Advanced search on members
This commit is contained in:
parent
e53ace830a
commit
8044cb975a
4 changed files with 396 additions and 176 deletions
|
|
@ -30,6 +30,8 @@ type PersonValidation struct {
|
|||
}
|
||||
|
||||
func Members(c *fiber.Ctx) error {
|
||||
log := helpers.GetLogger()
|
||||
|
||||
userid, err := helpers.GetSessionUserId(c)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -61,133 +63,30 @@ func Members(c *fiber.Ctx) error {
|
|||
return err
|
||||
}
|
||||
|
||||
/*sqlFilterSections := allowedSections
|
||||
sqlFilterAppend := "IS NULL"
|
||||
if filterArchive == "1" {
|
||||
sqlFilterAppend = "IS NOT NULL"
|
||||
sqlFilterSections = allowedSectionsArchived
|
||||
}
|
||||
|
||||
var filterSectionUint uint
|
||||
if len(filterSection) > 0 {
|
||||
filterSectionUint64, err := strconv.ParseUint(filterSection, 10, 0)
|
||||
if err == nil {
|
||||
for _, s := range sqlFilterSections {
|
||||
if s == uint(filterSectionUint64) {
|
||||
filterSectionUint = uint(filterSectionUint64)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if filterSectionUint > 0 {
|
||||
sqlFilterAppend = fmt.Sprintf(
|
||||
"%s AND section_id = %d",
|
||||
sqlFilterAppend,
|
||||
filterSectionUint,
|
||||
)
|
||||
}
|
||||
|
||||
var sqlFilterSearch string
|
||||
if len(filterSearch) > 0 {
|
||||
sqlFilterSearch = fmt.Sprintf(
|
||||
"%%%s%%", filterSearch,
|
||||
)
|
||||
}
|
||||
|
||||
var count int64
|
||||
if len(filterSearch) > 0 {
|
||||
db.Model(&models.Person{}).Where(
|
||||
fmt.Sprintf(
|
||||
"is_member = ? AND section_id IN ? AND (first_name LIKE ? OR last_name LIKE ?) AND deleted_at %s",
|
||||
sqlFilterAppend,
|
||||
),
|
||||
true, allowedSections, sqlFilterSearch, sqlFilterSearch,
|
||||
).Count(&count)
|
||||
} else {
|
||||
db.Model(&models.Person{}).Where(
|
||||
fmt.Sprintf(
|
||||
"is_member = ? AND section_id IN ? AND deleted_at %s",
|
||||
sqlFilterAppend,
|
||||
),
|
||||
true, allowedSections,
|
||||
).Count(&count)
|
||||
}
|
||||
|
||||
var people []models.Person
|
||||
if len(filterSearch) > 0 {
|
||||
result := db.Unscoped().Offset(
|
||||
pagination.Offset,
|
||||
).Limit(
|
||||
pagination.PageSize,
|
||||
).Order(
|
||||
"concat(last_name, first_name) collate nocase asc",
|
||||
).Preload(
|
||||
"Section",
|
||||
).Find(
|
||||
&people,
|
||||
fmt.Sprintf(
|
||||
"is_member = ? AND section_id IN ? AND (first_name LIKE ? OR last_name LIKE ?) AND deleted_at %s",
|
||||
sqlFilterAppend,
|
||||
),
|
||||
true, sqlFilterSections, sqlFilterSearch, sqlFilterSearch,
|
||||
)
|
||||
|
||||
if result.Error != nil && !errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
result := db.Unscoped().Offset(
|
||||
pagination.Offset,
|
||||
).Limit(
|
||||
pagination.PageSize,
|
||||
).Order(
|
||||
"concat(last_name, first_name) collate nocase asc",
|
||||
).Preload(
|
||||
"Section",
|
||||
).Find(
|
||||
&people,
|
||||
fmt.Sprintf(
|
||||
"is_member = ? AND section_id IN ? AND deleted_at %s",
|
||||
sqlFilterAppend,
|
||||
),
|
||||
true, sqlFilterSections,
|
||||
)
|
||||
|
||||
if result.Error != nil && !errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
return err
|
||||
}
|
||||
}*/
|
||||
|
||||
/*var sections []models.Section
|
||||
db.Order(
|
||||
"name collate nocase asc",
|
||||
).Find(
|
||||
§ions,
|
||||
"contains_members = ? AND id IN ?",
|
||||
true, sqlFilterSections,
|
||||
)*/
|
||||
|
||||
searchJSON := c.Query("s")
|
||||
var params database.PeopleSearchParams
|
||||
|
||||
if len(searchJSON) > 0 {
|
||||
err = json.Unmarshal([]byte(searchJSON), ¶ms)
|
||||
if err != nil {
|
||||
return err
|
||||
log.Warn(err)
|
||||
searchJSON = ""
|
||||
}
|
||||
}
|
||||
|
||||
page, _ := strconv.Atoi(c.Query("p"))
|
||||
params.PageNumber, _ = strconv.Atoi(c.Query("p"))
|
||||
params.PageSize = 50
|
||||
params.PersonType = "members"
|
||||
|
||||
results, err := database.PeopleSearch(params, "members", 50, page)
|
||||
var sections []models.Section
|
||||
db.Order("name collate nocase asc").Find(§ions, "contains_members = ? AND id IN ?", true, allowedSections)
|
||||
params.AllowedSections = allowedSections
|
||||
|
||||
results, err := database.PeopleSearch(params)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var sections []models.Section
|
||||
db.Order("name collate nocase asc").Find(§ions, "contains_members = ?", true)
|
||||
|
||||
var fields []models.Field
|
||||
db.Order("position asc").Find(&fields, "person_type = ?", "member")
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue