Dynamický update stavu
This commit is contained in:
parent
341ae7ce45
commit
dd86fc1fcb
4 changed files with 64 additions and 2 deletions
7
korektury/api/urls.py
Normal file
7
korektury/api/urls.py
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
from django.urls import path
|
||||||
|
from personalni.utils import org_required
|
||||||
|
from . import views
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path('korektury/api/<int:pdf_id>/stav', org_required(views.korektury_stav_view), name='korektury_api_pdf_stav'),
|
||||||
|
]
|
20
korektury/api/views.py
Normal file
20
korektury/api/views.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
from django.http import HttpResponseForbidden, JsonResponse
|
||||||
|
from django.shortcuts import get_object_or_404
|
||||||
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
|
|
||||||
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
from korektury.utils import send_email_notification_komentar
|
||||||
|
from korektury.models import Oprava, KorekturovanePDF, Komentar
|
||||||
|
from personalni.models import Organizator, Osoba
|
||||||
|
|
||||||
|
|
||||||
|
def korektury_stav_view(request, pdf_id: int, **kwargs):
|
||||||
|
q = request.POST
|
||||||
|
pdf = get_object_or_404(KorekturovanePDF, id=pdf_id)
|
||||||
|
status = q.get('state')
|
||||||
|
if status is not None:
|
||||||
|
assert status in KorekturovanePDF.STATUS.values
|
||||||
|
pdf.status = status
|
||||||
|
pdf.save()
|
||||||
|
return JsonResponse({'status': pdf.status})
|
|
@ -1,9 +1,8 @@
|
||||||
<h4>Změnit stav PDF:</h4>
|
<h4>Změnit stav PDF:</h4>
|
||||||
<i>Aktuální: {{pdf.status}}</i>
|
<i>Aktuální: {{pdf.status}}</i>
|
||||||
<br>
|
<br>
|
||||||
<form method="post">
|
<form method="post" id="PDFSTAV_FORM">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type='hidden' name='action' value='set-state'/>
|
|
||||||
<input type="radio" name="state" value="{{ pdf.STATUS.PRIDAVANI }}" {% if pdf.status == pdf.STATUS.PRIDAVANI %} checked {% endif %}>Přidávání korektur
|
<input type="radio" name="state" value="{{ pdf.STATUS.PRIDAVANI }}" {% if pdf.status == pdf.STATUS.PRIDAVANI %} checked {% endif %}>Přidávání korektur
|
||||||
<br>
|
<br>
|
||||||
<input type="radio" name="state" value="{{ pdf.STATUS.ZANASENI }}" {% if pdf.status == pdf.STATUS.ZANASENI %} checked {% endif %}>Zanášení korektur
|
<input type="radio" name="state" value="{{ pdf.STATUS.ZANASENI }}" {% if pdf.status == pdf.STATUS.ZANASENI %} checked {% endif %}>Zanášení korektur
|
||||||
|
@ -12,3 +11,35 @@
|
||||||
<br>
|
<br>
|
||||||
<input type='submit' value='Změnit stav PDF'/>
|
<input type='submit' value='Změnit stav PDF'/>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const pdfstav_form = document.getElementById('PDFSTAV_FORM');
|
||||||
|
const csrf_form = document.getElementById('CSRF_FORM');
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {RequestInit} data
|
||||||
|
* @param {Boolean} catchError
|
||||||
|
*/
|
||||||
|
function fetchStav(data, catchError=true) {
|
||||||
|
fetch("{% url 'korektury_api_pdf_stav' pdf.id %}", data
|
||||||
|
)
|
||||||
|
.then(response => {
|
||||||
|
if (!response.ok) { if (catchError) alert("Něco se nepovedlo:" + response.statusText);}
|
||||||
|
else response.json().then(data => document.body.dataset.status = data["status"]);
|
||||||
|
})
|
||||||
|
.catch(error => {if (catchError) alert("Něco se nepovedlo:" + error);});
|
||||||
|
}
|
||||||
|
|
||||||
|
pdfstav_form.addEventListener('submit', async event => {
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
const data = new FormData(pdfstav_form);
|
||||||
|
fetchStav({method: "POST", body: data});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// FIXME není mi jasné, zda v {} nemá být `cache: "no-store"`, aby prohlížeč necachoval get.
|
||||||
|
setInterval(() => fetchStav({}, false), 30000); // Každou půl minutu fetchni stav
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
|
from django.urls import include
|
||||||
|
|
||||||
from personalni.utils import org_required
|
from personalni.utils import org_required
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
|
@ -7,4 +9,6 @@ urlpatterns = [
|
||||||
path('korektury/neseskupene/', org_required(views.KorekturyAktualniListView.as_view()), name='korektury_neseskupene_list'),
|
path('korektury/neseskupene/', org_required(views.KorekturyAktualniListView.as_view()), name='korektury_neseskupene_list'),
|
||||||
path('korektury/zastarale/', org_required(views.KorekturyZastaraleListView.as_view()), name='korektury_stare_list'),
|
path('korektury/zastarale/', org_required(views.KorekturyZastaraleListView.as_view()), name='korektury_stare_list'),
|
||||||
path('korektury/<int:pdf>/', org_required(views.KorekturyView.as_view()), name='korektury'),
|
path('korektury/<int:pdf>/', org_required(views.KorekturyView.as_view()), name='korektury'),
|
||||||
|
|
||||||
|
path('api/', include('korektury.api.urls')),
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in a new issue