Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
AE UTBM
Sith
Commits
eeb791c4
Commit
eeb791c4
authored
Oct 18, 2019
by
tleb
Browse files
Initial autofill on UV
parent
6d0eba6b
Changes
4
Hide whitespace changes
Inline
Side-by-side
api/urls.py
View file @
eeb791c4
...
...
@@ -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"
),
]
api/views/api.py
View file @
eeb791c4
...
...
@@ -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
)
pedagogy/templates/pedagogy/uv_create.jinja
0 → 100644
View file @
eeb791c4
{%
extends
"core/base.jinja"
%}
{%
block
title
%}
{%
trans
%}
Edit UV
{%
endtrans
%}
{%
endblock
%}
{%
block
content
%}
<h2>
{%
trans
%}
Edit UV
{%
endtrans
%}
</h2>
<form
action=
""
method=
"post"
enctype=
"multipart/form-data"
id=
"uv_edit"
>
{%
csrf_token
%}
{{
form.non_field_errors
()
}}
{%
for
field
in
form
%}
{%
if
not
field.is_hidden
%}
<p>
{{
field.errors
}}
<label
for=
"
{{
field.name
}}
"
>
{{
field.label
}}
</label>
{{
field
}}
{%
if
field.name
==
'code'
%}
<a
href=
"javascript:void(0)"
id=
"autofill"
>
Fill
</a>
{%
endif
%}
</p>
{%
endif
%}
{%
endfor
%}
<p><input
type=
"submit"
value=
"
{%
trans
%}
Update
{%
endtrans
%}
"
/></p>
</form>
{%
endblock
%}
{%
block
script
%}
{{
super
()
}}
<script
type=
"text/javascript"
>
document
.
addEventListener
(
'
DOMContentLoaded
'
,
function
()
{
const
autofillBtn
=
document
.
getElementById
(
'
autofill
'
)
const
codeInput
=
document
.
querySelector
(
'
input[name="code"]
'
)
autofillBtn
.
addEventListener
(
'
click
'
,
()
=>
{
const
today
=
new
Date
()
let
year
=
today
.
getFullYear
()
if
(
today
.
getMonth
()
<
7
)
{
// student year, starts in september
year
--
}
const
url
=
"
{{
url
(
'api:uv_endpoint'
)
}}
?year=
"
+
year
+
"
&code=
"
+
codeInput
.
value
$
.
getJSON
(
url
,
function
(
data
)
{
for
(
let
key
in
data
)
{
if
(
data
.
hasOwnProperty
(
key
))
{
const
el
=
document
.
querySelector
(
'
[name="
'
+
key
+
'
"]
'
)
if
(
el
.
tagName
==
'
TEXTAREA
'
)
{
el
.
parentNode
.
querySelector
(
'
.CodeMirror
'
).
CodeMirror
.
setValue
(
data
[
key
])
}
else
{
el
.
value
=
data
[
key
]
}
}
}
})
})
})
</script>
{%
endblock
%}
pedagogy/views.py
View file @
eeb791c4
...
...
@@ -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
()
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment