Field position management

This commit is contained in:
William Bouzourène 2025-02-11 13:44:53 +01:00
parent bc8a7d5fee
commit 3b9ca37baa
6 changed files with 138 additions and 12 deletions

View file

@ -278,7 +278,7 @@ func ContactsExport(c *fiber.Ctx) error {
}
var fields []models.Field
db.Order("name collate nocase asc").Preload(
db.Order("position asc").Preload(
"List",
).Find(
&fields, "person_type = ?", "contact",
@ -465,7 +465,7 @@ func ContactShow(c *fiber.Ctx) error {
)
var fields []models.Field
db.Order("name collate nocase asc").Preload(
db.Order("position asc").Preload(
"List",
).Find(
&fields, "person_type = ?", "contact",
@ -528,7 +528,7 @@ func ContactAdd(c *fiber.Ctx) error {
var fields []models.Field
db.Preload("List").Preload("List.ListItems").Order(
"name collate nocase asc",
"position asc",
).Find(
&fields, "person_type = ?", "contact",
)
@ -774,7 +774,7 @@ func ContactEdit(c *fiber.Ctx) error {
var fields []models.Field
db.Preload("List").Preload("List.ListItems").Order(
"name collate nocase asc",
"position asc",
).Find(
&fields, "person_type = ?", "contact",
)

View file

@ -18,7 +18,7 @@ func Fields(c *fiber.Ctx) error {
}
var fields []models.Field
result := db.Order("name collate nocase asc").Find(&fields)
result := db.Order("position asc").Find(&fields)
if result.Error != nil && !errors.Is(result.Error, gorm.ErrRecordNotFound) {
return err
@ -111,8 +111,18 @@ func FieldAdd(c *fiber.Ctx) error {
}
}
var lastPosition models.Field
result := db.Order("position desc").First(
&lastPosition, "person_type = ?", field.PersonType,
)
field.Position = 0
if result.RowsAffected > 0 && lastPosition.Position >= 0 {
field.Position = lastPosition.Position + 1
}
if len(errors) == 0 {
result := db.Create(&field)
result = db.Create(&field)
if result.Error != nil {
return result.Error
}
@ -193,10 +203,97 @@ func FieldDelete(c *fiber.Ctx) error {
return err
}
var field models.Field
db.Find(&field, "id = ?", id)
result := db.Delete(&models.Field{}, id)
if result.Error != nil {
return result.Error
}
if field.ID > 0 {
db.Exec(
"UPDATE fields SET position = position - 1 WHERE position > ? AND person_type = ?",
field.Position, field.PersonType,
)
}
return c.Redirect("/admin/fields")
}
func FieldMoveUp(c *fiber.Ctx) error {
id := c.Params("id")
db, err := helpers.GetDatabase()
if err != nil {
return err
}
var field models.Field
result := db.Find(&field, "id = ?", id)
if result.Error != nil {
return result.Error
}
if result.RowsAffected < 1 {
return fiber.NewError(fiber.StatusNotFound, "Not found")
}
if field.Position == 0 {
return c.Redirect("/admin/fields")
}
db.Exec(
"UPDATE fields SET position = position + 1 WHERE position = ? AND person_type = ?",
field.Position-1, field.PersonType,
)
db.Exec(
"UPDATE fields SET position = position - 1 WHERE id = ?",
field.ID,
)
return c.Redirect("/admin/fields")
}
func FieldMoveDown(c *fiber.Ctx) error {
id := c.Params("id")
db, err := helpers.GetDatabase()
if err != nil {
return err
}
var field models.Field
result := db.Find(&field, "id = ?", id)
if result.Error != nil {
return result.Error
}
if result.RowsAffected < 1 {
return fiber.NewError(fiber.StatusNotFound, "Not found")
}
var lastPosition models.Field
result = db.Order("position desc").First(
&lastPosition, "person_type = ?", field.PersonType,
)
if result.RowsAffected <= 0 || field.Position >= lastPosition.Position {
return c.Redirect("/admin/fields")
}
db.Exec(
"UPDATE fields SET position = position - 1 WHERE position = ? AND person_type = ?",
field.Position+1, field.PersonType,
)
db.Exec(
"UPDATE fields SET position = position + 1 WHERE id = ?",
field.ID,
)
return c.Redirect("/admin/fields")
}

View file

@ -291,7 +291,7 @@ func MembersExport(c *fiber.Ctx) error {
}
var fields []models.Field
db.Order("name collate nocase asc").Preload(
db.Order("position asc").Preload(
"List",
).Find(
&fields, "person_type = ?", "member",
@ -478,7 +478,7 @@ func MemberShow(c *fiber.Ctx) error {
)
var fields []models.Field
db.Order("name collate nocase asc").Preload(
db.Order("position asc").Preload(
"List",
).Find(
&fields, "person_type = ?", "member",
@ -541,7 +541,7 @@ func MemberAdd(c *fiber.Ctx) error {
var fields []models.Field
db.Preload("List").Preload("List.ListItems").Order(
"name collate nocase asc",
"position asc",
).Find(
&fields, "person_type = ?", "member",
)
@ -787,7 +787,7 @@ func MemberEdit(c *fiber.Ctx) error {
var fields []models.Field
db.Preload("List").Preload("List.ListItems").Order(
"name collate nocase asc",
"position asc",
).Find(
&fields, "person_type = ?", "member",
)