mirror of
https://gitlab.crans.org/bde/nk20
synced 2024-12-23 16:02:25 +00:00
238 lines
9.9 KiB
HTML
238 lines
9.9 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% load i18n static pretty_money django_tables2 %}
|
|
|
|
{# Remove page title #}
|
|
{% block contenttitle %}{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="row mt-4">
|
|
<div class="col-sm-5 col-md-4" id="infos_div">
|
|
<div class="row">
|
|
{# User details column #}
|
|
<div class="col-xl-5" id="note_infos_div">
|
|
<div class="card border-success shadow mb-4">
|
|
<img src="/media/pic/default.png"
|
|
id="profile_pic" alt="" class="img-fluid rounded mx-auto d-block">
|
|
<div class="card-body text-center">
|
|
<span id="user_note"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{# User selection column #}
|
|
<div class="col-xl-7" id="user_select_div">
|
|
<div class="card border-success shadow mb-4">
|
|
<div class="card-header">
|
|
<p class="card-text font-weight-bold">
|
|
{% trans "Select emitters" %}
|
|
</p>
|
|
</div>
|
|
<ul class="list-group list-group-flush" id="note_list">
|
|
</ul>
|
|
<div class="card-body">
|
|
<input class="form-control mx-auto d-block" type="text" id="note" />
|
|
<ul class="list-group list-group-flush" id="alias_matched">
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-xl-5" id="consos_list_div">
|
|
<div class="card border-info shadow mb-4">
|
|
<div class="card-header">
|
|
<p class="card-text font-weight-bold">
|
|
{% trans "Select consumptions" %}
|
|
</p>
|
|
</div>
|
|
<ul class="list-group list-group-flush" id="consos_list">
|
|
</ul>
|
|
<button id="consume_all" class="form-control btn btn-primary">
|
|
{% trans "Consume!" %}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{# Buttons column #}
|
|
<div class="col-sm-7 col-md-8" id="buttons_div">
|
|
{# Show last used buttons #}
|
|
<div class="card shadow mb-4">
|
|
<div class="card-header">
|
|
<p class="card-text font-weight-bold">
|
|
{% trans "Most used buttons" %}
|
|
</p>
|
|
</div>
|
|
<div class="card-body text-nowrap" style="overflow:auto hidden">
|
|
<div class="d-inline-flex flex-wrap justify-content-center" id="most_used">
|
|
{% for button in most_used %}
|
|
{% if button.display %}
|
|
<button class="btn btn-outline-dark rounded-0 flex-fill"
|
|
id="button{{ button.id }}" name="button" value="{{ button.name }}">
|
|
{{ button.name }} ({{ button.amount | pretty_money }})
|
|
</button>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{# Regroup buttons under categories #}
|
|
{% regroup transaction_templates by category as categories %}
|
|
|
|
<div class="card border-primary text-center shadow mb-4">
|
|
{# Tabs for button categories #}
|
|
<div class="card-header">
|
|
<ul class="nav nav-tabs nav-fill card-header-tabs">
|
|
{% for category in categories %}
|
|
<li class="nav-item">
|
|
<a class="nav-link font-weight-bold" data-toggle="tab" href="#{{ category.grouper|slugify }}">
|
|
{{ category.grouper }}
|
|
</a>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
</div>
|
|
|
|
{# Tabs content #}
|
|
<div class="card-body">
|
|
<div class="tab-content">
|
|
{% for category in categories %}
|
|
<div class="tab-pane" id="{{ category.grouper|slugify }}">
|
|
<div class="d-inline-flex flex-wrap justify-content-center">
|
|
{% for button in category.list %}
|
|
{% if button.display %}
|
|
<button class="btn btn-outline-dark rounded-0 flex-fill"
|
|
id="button{{ button.id }}" name="button" value="{{ button.name }}">
|
|
{{ button.name }} ({{ button.amount | pretty_money }})
|
|
</button>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
|
|
{# Mode switch #}
|
|
<div class="card-footer border-primary">
|
|
<a class="btn btn-sm btn-secondary float-left" href="{% url 'note:template_list' %}">
|
|
<i class="fa fa-edit"></i> {% trans "Edit" %}
|
|
</a>
|
|
<div class="btn-group btn-group-toggle float-right" data-toggle="buttons">
|
|
<label class="btn btn-sm btn-outline-primary active">
|
|
<input type="radio" name="conso_type" id="single_conso" checked>
|
|
{% trans "Single consumptions" %}
|
|
</label>
|
|
<label class="btn btn-sm btn-outline-primary">
|
|
<input type="radio" name="conso_type" id="double_conso">
|
|
{% trans "Double consumptions" %}
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card shadow mb-4" id="history">
|
|
<div class="card-header">
|
|
<p class="card-text font-weight-bold">
|
|
{% trans "Recent transactions history" %}
|
|
</p>
|
|
</div>
|
|
{% render_table table %}
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% block extracss %}
|
|
<style>
|
|
.validate:hover {
|
|
cursor: pointer;
|
|
text-decoration: underline;
|
|
}
|
|
</style>
|
|
{% endblock %}
|
|
|
|
{% block extrajavascript %}
|
|
<script type="text/javascript" src="/static/js/consos.js"></script>
|
|
<script type="text/javascript">
|
|
// Switching in double consumptions mode should update the layout
|
|
$("#double_conso").click(function() {
|
|
$("#consos_list_div").show();
|
|
$("#infos_div").attr('class', 'col-sm-5 col-xl-6');
|
|
$("#note_infos_div").attr('class', 'col-xl-3');
|
|
$("#user_select_div").attr('class', 'col-xl-4');
|
|
$("#buttons_div").attr('class', 'col-sm-7 col-xl-6');
|
|
|
|
if (buttons.length > 0) {
|
|
let note_list_obj = $("#note_list");
|
|
$("#consos_list").html(note_list_obj.html());
|
|
note_list_obj.html("");
|
|
}
|
|
});
|
|
|
|
$("#single_conso").click(function() {
|
|
$("#consos_list_div").hide();
|
|
$("#infos_div").attr('class', 'col-sm-5 col-md-4');
|
|
$("#note_infos_div").attr('class', 'col-xl-5');
|
|
$("#user_select_div").attr('class', 'col-xl-7');
|
|
$("#buttons_div").attr('class', 'col-sm-7 col-md-8');
|
|
|
|
if (buttons.length > 0) {
|
|
if (notes_display.length === 0) {
|
|
let consos_list_obj = $("#consos_list");
|
|
$("#note_list").html(consos_list_obj.html());
|
|
consos_list_obj.html("");
|
|
}
|
|
else {
|
|
buttons.length = 0;
|
|
$("#consos_list").html("");
|
|
}
|
|
}
|
|
});
|
|
|
|
$("#consos_list_div").hide();
|
|
|
|
$("#consume_all").click(consumeAll);
|
|
|
|
{% for button in transaction_templates %}
|
|
{% if button.display %}
|
|
$("#button{{ button.id }}").click(function() {
|
|
addConso({{ button.destination.id }}, {{ button.amount }},
|
|
{{ polymorphic_ctype }}, {{ button.category.id }}, "{{ button.category.name }}",
|
|
{{ button.id }}, "{{ button.name }}");
|
|
});
|
|
{% endif %}
|
|
{% endfor %}
|
|
|
|
// When a validate button is clicked, we switch the validation status
|
|
function de_validate(id, validated) {
|
|
$("#validate_" + id).html("<strong style=\"font-size: 16pt;\">⟳ ...</strong>");
|
|
|
|
// Perform a PATCH request to the API in order to update the transaction
|
|
// If the user has insuffisent rights, an error message will appear
|
|
// TODO: Add this error message
|
|
$.ajax({
|
|
"url": "/api/note/transaction/transaction/" + id + "/",
|
|
type: "PATCH",
|
|
dataType: "json",
|
|
headers: {
|
|
"X-CSRFTOKEN": CSRF_TOKEN
|
|
},
|
|
data: {
|
|
"resourcetype": "TemplateTransaction",
|
|
valid: !validated
|
|
},
|
|
success: function () {
|
|
refreshHistory();
|
|
refreshBalance();
|
|
|
|
// Refresh jQuery objects
|
|
$(".validate").click(de_validate);
|
|
}
|
|
});
|
|
}
|
|
</script>
|
|
{% endblock %}
|