Cards for activity templates

This commit is contained in:
Alexandre Iooss 2020-08-25 17:39:30 +02:00
parent 1712d1725a
commit 22a0af640e
7 changed files with 209 additions and 188 deletions

View File

@ -1,22 +1,23 @@
{% extends "base.html" %} {% extends "base.html" %}
{% load static %} {% comment %}
{% load i18n %} SPDX-License-Identifier: GPL-3.0-or-later
{% endcomment %}
{% load i18n perms %}
{% load render_table from django_tables2 %} {% load render_table from django_tables2 %}
{% load pretty_money %}
{% load perms %}
{% block content %} {% block content %}
{% include "activity/includes/activity_info.html" %}
{% include "activity/activity_info.html" %} {% if guests.data %}
<div class="card bg-white mb-3">
{% if guests.data %} <h3 class="card-header text-center">
<hr> {% trans "Guests list" %}
<h2>{% trans "Guests list" %}</h2> </h3>
<div id="guests_table"> <div id="guests_table">
{% render_table guests %} {% render_table guests %}
</div> </div>
{% endif %} </div>
{% endif %}
{% endblock %} {% endblock %}
{% block extrajavascript %} {% block extrajavascript %}

View File

@ -1,152 +1,168 @@
{% extends "base.html" %} {% extends "base.html" %}
{% load static %} {% comment %}
{% load i18n %} SPDX-License-Identifier: GPL-3.0-or-later
{% endcomment %}
{% load static i18n pretty_money perms %}
{% load render_table from django_tables2 %} {% load render_table from django_tables2 %}
{% load pretty_money %}
{% load perms %}
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-xl-12"> <div class="col-xl-12">
<div class="btn-group btn-group-toggle" style="width: 100%; padding: 0 0 2em 0" data-toggle="buttons"> <div class="btn-group btn-group-toggle" style="width: 100%; padding: 0 0 2em 0" data-toggle="buttons">
<a href="{% url "note:transfer" %}#transfer" class="btn btn-sm btn-outline-primary"> <a href="{% url "note:transfer" %}#transfer" class="btn btn-sm btn-outline-primary">
{% trans "Transfer" %} {% trans "Transfer" %}
</a> </a>
{% if "note.notespecial"|not_empty_model_list %} {% if "note.notespecial"|not_empty_model_list %}
<a href="{% url "note:transfer" %}#credit" class="btn btn-sm btn-outline-primary"> <a href="{% url "note:transfer" %}#credit" class="btn btn-sm btn-outline-primary">
{% trans "Credit" %} {% trans "Credit" %}
</a> </a>
{% endif %} {% endif %}
{% for a in activities_open %} {% for a in activities_open %}
<a href="{% url "activity:activity_entry" pk=a.pk %}" class="btn btn-sm btn-outline-primary{% if a.pk == activity.pk %} active{% endif %}"> <a href="{% url "activity:activity_entry" pk=a.pk %}"
{% trans "Entries" %} {{ a.name }} class="btn btn-sm btn-outline-primary{% if a.pk == activity.pk %} active{% endif %}">
</a> {% trans "Entries" %} {{ a.name }}
{% endfor %} </a>
</div> {% endfor %}
</div> </div>
</div> </div>
</div>
<a href="{% url "activity:activity_detail" pk=activity.pk %}"> <a href="{% url "activity:activity_detail" pk=activity.pk %}">
<button class="btn btn-light">{% trans "Return to activity page" %}</button> <button class="btn btn-light">{% trans "Return to activity page" %}</button>
</a> </a>
<input id="alias" type="text" class="form-control" placeholder="Nom/note ..."> <input id="alias" type="text" class="form-control" placeholder="Nom/note ...">
<hr> <hr>
<div id="entry_table"> <div id="entry_table">
<h2 class="text-center">{{ entries.count }} {% if entries.count >= 2 %}{% trans "entries" %}{% else %}{% trans "entry" %}{% endif %}</h2> <h2 class="text-center">{{ entries.count }}
{% render_table table %} {% if entries.count >= 2 %}{% trans "entries" %}{% else %}{% trans "entry" %}{% endif %}</h2>
</div> {% render_table table %}
</div>
{% endblock %} {% endblock %}
{% block extrajavascript %} {% block extrajavascript %}
<script> <script>
old_pattern = null; old_pattern = null;
alias_obj = $("#alias"); alias_obj = $("#alias");
function reloadTable(force=false) { function reloadTable(force = false) {
let pattern = alias_obj.val(); let pattern = alias_obj.val();
if ((pattern === old_pattern || pattern === "") && !force) if ((pattern === old_pattern || pattern === "") && !force)
return; return;
$("#entry_table").load(location.pathname + "?search=" + pattern.replace(" ", "%20") + " #entry_table", init); $("#entry_table").load(location.pathname + "?search=" + pattern.replace(" ", "%20") + " #entry_table", init);
refreshBalance(); refreshBalance();
} }
alias_obj.keyup(reloadTable); alias_obj.keyup(reloadTable);
$(document).ready(init); $(document).ready(init);
function init() { function init() {
$(".table-row").click(function(e) { $(".table-row").click(function (e) {
let target = e.target.parentElement; let target = e.target.parentElement;
target = $("#" + target.id); target = $("#" + target.id);
let type = target.attr("data-type"); let type = target.attr("data-type");
let id = target.attr("data-id"); let id = target.attr("data-id");
let last_name = target.attr("data-last-name"); let last_name = target.attr("data-last-name");
let first_name = target.attr("data-first-name"); let first_name = target.attr("data-first-name");
if (type === "membership") { if (type === "membership") {
$.post("/api/activity/entry/?format=json", {
csrfmiddlewaretoken: CSRF_TOKEN,
activity: {{ activity.id }},
note: id,
guest: null
}).done(function () {
if (target.hasClass("table-info"))
addMsg(
"Entrée effectuée, mais attention : la personne n'est plus adhérente Kfet.",
"warning", 10000);
else
addMsg("Entrée effectuée !", "success", 4000);
reloadTable(true);
}).fail(function (xhr) {
errMsg(xhr.responseJSON, 4000);
});
} else {
let line_obj = $("#buttons_guest_" + id);
if (line_obj.length || target.attr('class').includes("table-success")) {
line_obj.remove();
return;
}
let tr = "<tr class='text-center'>" +
"<td id='buttons_guest_" + id + "' style='table-danger center' colspan='5'>" +
"<button id='transaction_guest_" + id +
"' class='btn btn-secondary'>Payer avec la note de l'hôte</button> " +
"<button id='transaction_guest_" + id +
"_especes' class='btn btn-secondary'>Payer en espèces</button> " +
"<button id='transaction_guest_" + id +
"_cb' class='btn btn-secondary'>Payer en CB</button></td>" +
"<tr>";
$(tr).insertAfter(target);
let makeTransaction = function () {
$.post("/api/activity/entry/?format=json", { $.post("/api/activity/entry/?format=json", {
csrfmiddlewaretoken: CSRF_TOKEN, csrfmiddlewaretoken: CSRF_TOKEN,
activity: {{ activity.id }}, activity: {{ activity.id }},
note: id, note: target.attr("data-inviter"),
guest: null guest: id
}).done(function () { }).done(function () {
if (target.hasClass("table-info")) if (target.hasClass("table-info"))
addMsg("Entrée effectuée, mais attention : la personne n'est plus adhérente Kfet.", "warning", 10000); addMsg(
"Entrée effectuée, mais attention : la personne n'est plus adhérente Kfet.",
"warning", 10000);
else else
addMsg("Entrée effectuée !", "success", 4000); addMsg("Entrée effectuée !", "success", 4000);
reloadTable(true); reloadTable(true);
}).fail(function(xhr) { }).fail(function (xhr) {
errMsg(xhr.responseJSON, 4000); errMsg(xhr.responseJSON, 4000);
}); });
} };
else {
let line_obj = $("#buttons_guest_" + id);
if (line_obj.length || target.attr('class').includes("table-success")) {
line_obj.remove();
return;
}
let tr = "<tr class='text-center'>" + let credit = function (credit_id, credit_name) {
"<td id='buttons_guest_" + id + "' style='table-danger center' colspan='5'>" + return function () {
"<button id='transaction_guest_" + id + "' class='btn btn-secondary'>Payer avec la note de l'hôte</button> " + $.post("/api/note/transaction/transaction/", {
"<button id='transaction_guest_" + id + "_especes' class='btn btn-secondary'>Payer en espèces</button> " + "csrfmiddlewaretoken": CSRF_TOKEN,
"<button id='transaction_guest_" + id + "_cb' class='btn btn-secondary'>Payer en CB</button></td>" + "quantity": 1,
"<tr>"; "amount": {
$(tr).insertAfter(target); {
activity.activity_type.guest_entry_fee
let makeTransaction = function() { }
$.post("/api/activity/entry/?format=json", { },
csrfmiddlewaretoken: CSRF_TOKEN, "reason": "Crédit " + credit_name +
activity: {{ activity.id }}, " (invitation {{ activity.name }})",
note: target.attr("data-inviter"), "valid": true,
guest: id "polymorphic_ctype": {
{
notespecial_ctype
}
},
"resourcetype": "SpecialTransaction",
"source": credit_id,
"destination": target.attr('data-inviter'),
"last_name": last_name,
"first_name": first_name,
"bank": ""
}).done(function () { }).done(function () {
if (target.hasClass("table-info")) makeTransaction();
addMsg("Entrée effectuée, mais attention : la personne n'est plus adhérente Kfet.", "warning", 10000); reset();
else
addMsg("Entrée effectuée !", "success", 4000);
reloadTable(true);
}).fail(function (xhr) { }).fail(function (xhr) {
errMsg(xhr.responseJSON, 4000); errMsg(xhr.responseJSON, 4000);
}); });
}; };
};
let credit = function(credit_id, credit_name) { $("#transaction_guest_" + id).click(makeTransaction);
return function() { $("#transaction_guest_" + id + "_especes").click(credit(1, "espèces"));
$.post("/api/note/transaction/transaction/", $("#transaction_guest_" + id + "_cb").click(credit(2, "carte bancaire"));
{ }
"csrfmiddlewaretoken": CSRF_TOKEN, });
"quantity": 1, }
"amount": {{ activity.activity_type.guest_entry_fee }}, </script>
"reason": "Crédit " + credit_name + " (invitation {{ activity.name }})", {% endblock %}
"valid": true,
"polymorphic_ctype": {{ notespecial_ctype }},
"resourcetype": "SpecialTransaction",
"source": credit_id,
"destination": target.attr('data-inviter'),
"last_name": last_name,
"first_name": first_name,
"bank": ""
}).done(function () {
makeTransaction();
reset();
}).fail(function (xhr) {
errMsg(xhr.responseJSON, 4000);
});
};
};
$("#transaction_guest_" + id).click(makeTransaction);
$("#transaction_guest_" + id + "_especes").click(credit(1, "espèces"));
$("#transaction_guest_" + id + "_cb").click(credit(2, "carte bancaire"));
}
});
}
</script>
{% endblock %}

View File

@ -1,11 +1,21 @@
{% extends "base.html" %} {% extends "base.html" %}
{% load static %} {% comment %}
{% load i18n %} SPDX-License-Identifier: GPL-3.0-or-later
{% load crispy_forms_tags %} {% endcomment %}
{% load i18n crispy_forms_tags %}
{% block contenttitle %}{% endblock %}
{% block content %} {% block content %}
<form method="post"> <div class="card bg-white mb-3">
{% csrf_token %} <h3 class="card-header text-center">
{{form|crispy}} {{ title }}
<button class="btn btn-primary" type="submit">{% trans "Submit" %}</button> </h3>
</form> <div class="card-body">
{% endblock %} <form method="post">
{% csrf_token %}
{{ form|crispy }}
<button class="btn btn-primary" type="submit">{% trans "Submit" %}</button>
</form>
</div>
</div>
{% endblock %}

View File

@ -1,15 +0,0 @@
{% extends "base.html" %}
{% load render_table from django_tables2 %}
{% load i18n crispy_forms_tags %}
{% block content %}
<form method="post">
{% csrf_token %}
{{ form|crispy }}
<button class="btn btn-primary" type="submit">{% trans "Submit" %}</button>
</form>
{% endblock %}
{% block extrajavascript %}
<script type="text/javascript">
</script>
{% endblock %}

View File

@ -1,41 +1,50 @@
{% extends "base.html" %} {% extends "base.html" %}
{% comment %}
SPDX-License-Identifier: GPL-3.0-or-later
{% endcomment %}
{% load render_table from django_tables2 %} {% load render_table from django_tables2 %}
{% load i18n crispy_forms_tags%} {% load i18n %}
{% block content %} {% block contenttitle %}{% endblock %}
{% if started_activities %}
<h2>{% trans "Current activity" %}</h2>
{% for activity in started_activities %}
{% include "activity/activity_info.html" %}
<hr>
{% endfor %}
{% endif %}
<h2>{% trans "Upcoming activities" %}</h2> {% block content %}
{% if started_activities %}
<div class="card bg-info mb-3">
<h3 class="card-header text-center">
{% trans "Current activity" %}
</h3>
<div class="card-body">
{% for activity in started_activities %}
{% include "activity/includes/activity_info.html" %}
{% endfor %}
</div>
</div>
{% endif %}
<div class="card bg-light mb-3">
<h3 class="card-header text-center">
{% trans "Upcoming activities" %}
</h3>
{% if upcoming.data %} {% if upcoming.data %}
{% render_table upcoming %} {% render_table upcoming %}
{% else %} {% else %}
<div class="card-body">
<div class="alert alert-warning"> <div class="alert alert-warning">
{% trans "There is no planned activity." %} {% trans "There is no planned activity." %}
</div> </div>
</div>
{% endif %} {% endif %}
<div class="card-footer">
<a class="btn btn-sm btn-success" href="{% url 'activity:activity_create' %}" data-turbolinks="false">
<i class="fa fa-calendar-plus-o" aria-hidden="true"></i>
{% trans 'New activity' %}
</a>
</div>
</div>
<a class="btn btn-primary" href="{% url 'activity:activity_create' %}" data-turbolinks="false">{% trans 'New activity' %}</a> <div class="card bg-light mb-3">
<h3 class="card-header text-center">
<hr> {% trans "All activities" %}
</h3>
<h2>{% trans "All activities" %}</h2>
{% render_table table %} {% render_table table %}
{% endblock %} </div>
{% endblock %}
{% block extrajavascript %}
<script type="text/javascript">
$(document).ready(function($) {
$(".table-row").click(function() {
window.document.location = $(this).data("href");
});
});
</script>
{% endblock %}

View File

@ -1,10 +1,10 @@
{% load i18n %} {% comment %}
{% load perms %} SPDX-License-Identifier: GPL-3.0-or-later
{% load pretty_money %} {% endcomment %}
{% load i18n perms pretty_money %}
{% url 'activity:activity_detail' activity.pk as activity_detail_url %} {% url 'activity:activity_detail' activity.pk as activity_detail_url %}
<div id="activity_info" class="card bg-light shadow"> <div id="activity_info" class="card bg-light shadow mb-3">
<div class="card-header text-center"> <div class="card-header text-center">
<h4> <h4>
{% if request.path_info != activity_detail_url %} {% if request.path_info != activity_detail_url %}

View File

@ -117,7 +117,7 @@ class ActivityInviteView(ProtectQuerysetMixin, ProtectedCreateView):
""" """
model = Guest model = Guest
form_class = GuestForm form_class = GuestForm
template_name = "activity/activity_invite.html" template_name = "activity/activity_form.html"
def get_sample_object(self): def get_sample_object(self):
""" Creates a standart Guest binds to the Activity""" """ Creates a standart Guest binds to the Activity"""