Started working on optional fields (members)

This commit is contained in:
William Bouzourène 2025-01-15 16:16:24 +01:00
parent 8c18f8a3f0
commit 8375504d60
Signed by: bouzoure
SSH key fingerprint: SHA256:19MbXpLua4rUtk8tunMesD8KUKb91LXLHg8E/qTooww
5 changed files with 204 additions and 10 deletions

View file

@ -76,9 +76,23 @@ func MemberShow(c *fiber.Ctx) error {
person.FirstName, person.FirstName,
) )
var fields []models.Field
db.Order("name collate nocase asc").Find(
&fields, "person_type = ?", "member",
)
var fieldValues []models.FieldValue
db.Preload("ListItem").Find(
&fieldValues,
"person_id = ?",
person.ID,
)
return c.Render("person", fiber.Map{ return c.Render("person", fiber.Map{
"PageTitle": title, "PageTitle": title,
"Person": person, "Person": person,
"Fields": fields,
"FieldValues": fieldValues,
}) })
} }
@ -215,7 +229,7 @@ func MemberEdit(c *fiber.Ctx) error {
title := fmt.Sprintf( title := fmt.Sprintf(
"%s %s | Modifier membre", "%s %s | Modifier membre",
person.LastName, person.LastName,
person.LastName, person.FirstName,
) )
var sections []models.Section var sections []models.Section
@ -313,11 +327,27 @@ func MemberEdit(c *fiber.Ctx) error {
} }
} }
var fields []models.Field
db.Preload("List").Preload("List.ListItems").Order(
"name collate nocase asc",
).Find(
&fields, "person_type = ?", "member",
)
var fieldValues []models.FieldValue
db.Preload("ListItem").Find(
&fieldValues,
"person_id = ?",
person.ID,
)
return c.Render("person_form", fiber.Map{ return c.Render("person_form", fiber.Map{
"PageTitle": title, "PageTitle": title,
"Person": person, "Person": person,
"Sections": sections, "Sections": sections,
"Errors": errors, "Fields": fields,
"FieldValues": fieldValues,
"Errors": errors,
}) })
} }

View file

@ -19,6 +19,8 @@ type FieldValue struct {
gorm.Model gorm.Model
FieldID uint FieldID uint
Field Field Field Field
PersonID uint
Person Person
ValueString sql.NullString ValueString sql.NullString
ValueInt sql.NullInt64 ValueInt sql.NullInt64
ValueDate sql.NullTime ValueDate sql.NullTime

View file

@ -4,8 +4,9 @@ import "gorm.io/gorm"
type List struct { type List struct {
gorm.Model gorm.Model
Name string Name string
Multi bool Multi bool
ListItems []*ListItem
} }
type ListItem struct { type ListItem struct {

View file

@ -159,6 +159,52 @@
</div> </div>
</div> </div>
{% if Fields %}
<div class="mt-4 mb-3">
<span class="h4">
Champs supplémentaires
</span>
</div>
{% endif %}
{% for Field in Fields %}
<div class="row mb-3">
<div class="col-md-2">
{{ Field.Name }}
</div>
<div class="col-md-10">
<input
type="text"
class="form-control"
disabled
readonly
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID %}
{% if Field.FieldType == "text" or Field.FieldType == "longtext" %}
value="{{ FieldValue.ValueString }}"
{% endif %}
{% if Field.FieldType == "number" %}
value="{{ FieldValue.ValueInt }}"
{% endif %}
{% if Field.FieldType == "date" %}
value="{{ FieldValue.ValueDate }}"
{% endif %}
{% if Field.FieldType == "list" %}
value="{{ FieldValue.ListItem.Value }}"
{% endif %}
{% endif %}
{% endfor %}
>
</div>
</div>
{% endfor %}
<div class="my-5"> <div class="my-5">
{% if Person.IsMember %} {% if Person.IsMember %}
<div class="row"> <div class="row">

View file

@ -186,7 +186,7 @@
</label> </label>
<div class="col-md-10"> <div class="col-md-10">
<select <select
class="form-control" class="form-select"
name="section" name="section"
id="section" id="section"
required required
@ -205,6 +205,121 @@
</div> </div>
</div> </div>
{% if Fields %}
<div class="mt-4 mb-3">
<span class="h4">
Champs supplémentaires
</span>
</div>
{% endif %}
{% for Field in Fields %}
<div class="row mb-3">
<label for="field_{{ Field.ID }}" class="form-label col-md-2">
{{ Field.Name }}
</label>
<div class="col-md-10">
{% if Field.FieldType == "text" %}
<input
id="field_{{ Field.ID }}"
class="form-control"
type="text"
name="field_{{ Field.ID }}"
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID %}
value="{{ FieldValue.ValueString }}"
{% endif %}
{% endfor %}
>
{% endif %}
{% if Field.FieldType == "longtext" %}
<textarea
id="field_{{ Field.ID }}"
class="form-control"
name="field_{{ Field.ID }}"
rows="4"
>{% for FieldValue in FieldValues %}{% if FieldValue.FieldID == Field.ID %}{{ FieldValue.ValueString }}{% endif %}{% endfor %}</textarea>
{% endif %}
{% if Field.FieldType == "number" %}
<input
id="field_{{ Field.ID }}"
class="form-control"
type="number"
name="field_{{ Field.ID }}"
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID %}
value="{{ FieldValue.ValueInt }}"
{% endif %}
{% endfor %}
>
{% endif %}
{% if Field.FieldType == "date" %}
<input
id="field_{{ Field.ID }}"
class="form-control"
type="date"
name="field_{{ Field.ID }}"
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID %}
value="{{ FieldValue.ValueDate }}"
{% endif %}
{% endfor %}
>
{% endif %}
{% if Field.FieldType == "list" and !Field.List.Multi %}
<select
id="field_{{ Field.ID }}"
class="form-select"
name="field_{{ Field.ID }}"
>
<option value="0">--- Aucun ---</option>
{% for ListItem in Field.List.ListItems %}
<option
value="{{ ListItem.ID }}"
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID and FieldValue.ListItemID == ListItem.ID %}
selected
{% endif %}
{% endfor %}
>
{{ ListItem.Value }}
</option>
{% endfor %}
</select>
{% endif %}
{% if Field.FieldType == "list" and Field.List.Multi %}
{% for ListItem in Field.List.ListItems %}
<div class="mb-1">
<input
type="checkbox"
class="form-check-input me-2"
id="field_{{ Field.ID }}_{{ ListItem.ID }}"
name="field_{{ Field.ID }}_{{ ListItem.ID }}"
>
<label
for="field_{{ Field.ID }}_{{ ListItem.ID }}"
class="form-label"
>
{{ ListItem.Value }}
</label>
</div>
{% endfor %}
{% endif %}
</div>
</div>
{% endfor %}
<div class="my-5"> <div class="my-5">
<button class="btn btn-primary" type="submit"> <button class="btn btn-primary" type="submit">
<i class="me-1 bi-floppy"></i> <i class="me-1 bi-floppy"></i>