Skip to content
Snippets Groups Projects
Commit 0f65537e authored by Tomáš's avatar Tomáš
Browse files

working on voting API

parent dfb8d7dc
No related branches found
No related tags found
1 merge request!1Test release
Pipeline #11234 failed
......@@ -14,16 +14,16 @@
<main>
<h1 class="text-6xl font-bebas mb-5">Kalkulačka hlasování RV</h1>
<div class="grid grid-cols-2 gap-7 mb-5 items-center">
<div class="flex items-center gap-3 justify-between">
<div class="grid grid-cols-2 gap-7 mb-5 pb-4 items-center border-b border-gray-100">
<h2 class="text-2xl font-bebas">Hlasy členů</h2>
<div class="flex items-center gap-3 justify-between">
<h2 class="text-2xl font-bebas">Výsledky</h2>
<button
class="bg-black text-white px-5 py-3 duration-100 hover:bg-gray-800"
id="count-votes"
>Vypočítat</button>
</div>
<h2 class="text-2xl font-bebas">Výsledky</h2>
</div>
<div class="grid grid-cols-2 gap-7">
......@@ -34,14 +34,22 @@
<i class="ico--user text-xl mr-2"></i>
{{ member.displayName }}
</div>
<select class="grow w-full __vote-selection" multiple="multiple"></select>
<select
id="{{ member.username }}-selection"
class="__vote-selection grow w-full"
multiple="multiple"
></select>
</li>
{% endfor %}
</ul>
<div>
</div>
</div>
</main>
<script>
const RV_MEMBERS = {{ rv_members|safe }};
const RV_MEMBERS = {{ json_rv_members|safe }};
</script>
{% endblock %}
import json
import typing
import gql
import requests
......@@ -6,11 +7,12 @@ import requests
from gql.transport.requests import RequestsHTTPTransport
from django.conf import settings
from django.http import HttpResponseBadRequest
from django.shortcuts import render
from django.views.decorators.http import require_POST
# Create your views here.
def index(request):
def get_rv_members() -> list:
transport = RequestsHTTPTransport(url=settings.CHOBOTNICE_API_URL)
client = gql.Client(
transport=transport,
......@@ -44,12 +46,63 @@ def index(request):
# Sort alphabetically
rv_members.sort(key=lambda value: value["displayName"])
return rv_members
def convert_rv_members_to_dict(source: list) -> dict:
rv_members = {}
for member in source:
# Convert to username: {data}
rv_members[member["username"]] = {
"displayName": member["displayName"],
"officialLastName": member["officialLastName"]
}
return rv_members
def index(request):
rv_members = get_rv_members()
json_rv_members = json.dumps(convert_rv_members_to_dict(rv_members))
return render(
request,
"rv_voting_calc/index.html",
{
"rv_members": rv_members,
# JS-Readable format
"json_rv_members": json.dumps(rv_members),
"json_rv_members": json.dumps(json_rv_members),
}
)
@require_POST
def get_calculated_votes(request):
votes = request.GET.get("votes")
if votes is None:
return HttpResponseBadRequest("Nebyly zadány žádné hlasy")
try:
votes = json.loads(votes)
if not isinstance(votes, dict):
raise ValueError
except ValueError:
return HttpResponseBadRequest("Formát hlasů není validní")
rv_members = convert_rv_members_to_dict(get_rv_members())
rv_member_names_to_clear = rv_members.keys()
integrity_check_failed = False
for key, value in votes.items():
if key not in rv_member_names_to_clear:
integrity_check_failed = True
break
if not isinstance(
rv_member_names_to_clear.pop(key)
......@@ -103,12 +103,22 @@ $(window).ready(
$(selection).trigger("change");
}
}
)
);
$(".__vote-selection").on(
"change.select2",
$("#count-votes").on(
"click",
event => {
console.log("change");
let votes = {};
for (const username of Object.keys(RV_MEMBERS)) {
votes[username] = [];
for (const data of $(`#${$.escapeSelector(username)}-selection`).select2("data")) {
votes[username].push(data.id);
}
}
console.log(votes);
}
);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment