diff --git a/api/urls.py b/api/urls.py index 9f8884bd..c8bdc2b2 100644 --- a/api/urls.py +++ b/api/urls.py @@ -53,4 +53,5 @@ urlpatterns = [ re_path(r"^login/", include("rest_framework.urls", namespace="rest_framework")), re_path(r"^markdown$", RenderMarkdown, name="api_markdown"), re_path(r"^mailings$", FetchMailingLists, name="mailings_fetch"), + re_path(r"^uv$", uv_endpoint, name="uv_endpoint"), ] diff --git a/api/views/api.py b/api/views/api.py index efd9ec42..47967f2b 100644 --- a/api/views/api.py +++ b/api/views/api.py @@ -24,10 +24,15 @@ from rest_framework.response import Response from rest_framework.decorators import api_view, renderer_classes -from rest_framework.renderers import StaticHTMLRenderer +from rest_framework.renderers import StaticHTMLRenderer, JSONRenderer from rest_framework.views import APIView +from django.core.exceptions import PermissionDenied +from rest_framework import serializers +import urllib.request +import json from core.templatetags.renderer import markdown +from pedagogy.views import CanCreateUVFunctionMixin @api_view(["POST"]) @@ -41,3 +46,94 @@ def RenderMarkdown(request): except: data = "Error" return Response(data) + + +@api_view(["GET"]) +@renderer_classes((JSONRenderer,)) +def uv_endpoint(request): + if not request.user.is_authenticated or not CanCreateUVFunctionMixin.can_create_uv( + request.user + ): + raise PermissionDenied + + lang = "fr" + + params = request.query_params + if "year" not in params or "code" not in params: + raise serializers.ValidationError("Missing query parameter") + + uvs_url = "https://extranet1.utbm.fr/gpedago/api/guide/uvs/{lang}/{year}" + response = urllib.request.urlopen(uvs_url.format(lang=lang, year=params["year"])) + + uvs = json.loads(response.read().decode("utf-8")) + + try: + found = next(uv for uv in uvs if uv["code"] == params["code"]) + except StopIteration: + # shouldn't be 404, rather something like 204 + return Response(status=404) + + uv_url = "https://extranet1.utbm.fr/gpedago/api/guide/uv/{lang}/{year}/{code}/{formation}" + response = urllib.request.urlopen( + uv_url.format( + lang=lang, + year=params["year"], + code=params["code"], + formation=found["codeFormation"], + ) + ) + + uv = json.loads(response.read().decode("utf-8")) + + res = {} + + res["credit_type"] = found["codeCategorie"] + + semesters = { + (True, True): "AUTUMN_AND_SPRING", + (True, False): "AUTOMN", + (False, True): "SPRING", + } + res["semester"] = semesters.get( + (found["ouvertAutomne"], found["ouvertPrintemps"]), "CLOSED" + ) + + langs = {"es": "SP", "en": "EN", "de": "DE"} + res["language"] = langs.get(uv["codeLangue"], "FR") + + if uv["departement"] == "Pôle Humanités": + res["department"] = "HUMA" + else: + departments = { + "AL": "IMSI", + "AE": "EE", + "GI": "GI", + "GC": "EE", + "GM": "MC", + "TC": "TC", + "GP": "IMSI", + "ED": "EDIM", + "AI": "GI", + "AM": "MC", + } + res["department"] = departments.get(uv["codeFormation"], "NA") + + res["credits"] = uv["creditsEcts"] + + activities = ("CM", "TD", "TP", "THE", "TE") + for activity in activities: + res["hours_{}".format(activity)] = 0 + for activity in uv["activites"]: + if activity["code"] in activities: + res["hours_{}".format(activity["code"])] += activity["nbh"] + + res["manager"] = uv["automne"]["responsable"] + + res["title"] = uv["libelle"] + + res["objectives"] = uv["objectifs"] + res["program"] = uv["programme"] + res["skills"] = uv["acquisitionCompetences"] + res["key_concepts"] = uv["acquisitionNotions"] + + return Response(res) diff --git a/pedagogy/templates/pedagogy/uv_create.jinja b/pedagogy/templates/pedagogy/uv_create.jinja new file mode 100644 index 00000000..a14d43bc --- /dev/null +++ b/pedagogy/templates/pedagogy/uv_create.jinja @@ -0,0 +1,68 @@ +{% extends "core/base.jinja" %} + +{% block title %} +{% trans %}Edit UV{% endtrans %} +{% endblock %} + +{% block content %} +

{% trans %}Edit UV{% endtrans %}

+
+ {% csrf_token %} + {{ form.non_field_errors() }} + + {% for field in form %} + + {% if not field.is_hidden %} +

+ {{ field.errors }} + + {{ field }} + + + {% if field.name == 'code' %} + Fill + {% endif %} +

+ {% endif %} + + + {% endfor %} + + +

+
+{% endblock %} + +{% block script %} +{{ super() }} + + +{% endblock %} diff --git a/pedagogy/views.py b/pedagogy/views.py index fae5b8f0..f3b02d9b 100644 --- a/pedagogy/views.py +++ b/pedagogy/views.py @@ -294,7 +294,7 @@ class UVCreateView(CanCreateMixin, CreateView): model = UV form_class = UVForm - template_name = "core/edit.jinja" + template_name = "pedagogy/uv_create.jinja" def get_form_kwargs(self): kwargs = super(UVCreateView, self).get_form_kwargs()