Started working on optional fields (members)
This commit is contained in:
parent
8c18f8a3f0
commit
8375504d60
5 changed files with 204 additions and 10 deletions
|
|
@ -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,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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">
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue