diff --git a/studenteval/admin.py b/studenteval/admin.py
index 57a2faf..9211148 100644
--- a/studenteval/admin.py
+++ b/studenteval/admin.py
@@ -3,24 +3,43 @@ from studenteval.models import cl_Student_eval
from django.urls import reverse
from django.utils.html import format_html
from . import views
+from rangefilter.filters import *
+from django.core.exceptions import PermissionDenied
-
+def is_member(user, group):
+ return user.groups.filter(name=group).exists()
class _cl_Student_eval_admin(admin.ModelAdmin):
+ request = None
+
+ list_display = ('ID','action_buttons','sStudent', "get_ref_of_eval", "nEval_Type", "nEval_Mode", "sAuthor", 'get_mirrored')
- list_display = ('ID','sStudent', "get_ref_of_eval", "nEval_Type", "nEval_Mode", "sAuthor", 'get_mirrored', 'action_buttons')
def action_buttons(self, obj):
- action1_url = '/student_eval/show_pdf/{}/'.format(obj.uuid)
+ action1_url = f"/student_eval/show_pdf/{obj.uuid}/?dtDate__range__gte={self.request.GET.get('dtDate__range__gte')}&dtDate__range__lte={self.request.GET.get('dtDate__range__lte')}"
return format_html('Voir PDF ', action1_url)
action_buttons.short_description = 'Voir la fiche PDF'
+ def get_queryset(self, request):
+ self.request = request
+ return super(_cl_Student_eval_admin, self).get_queryset(request)
+
search_fields = ['sStudent', 'sRef']
- list_filter = ['sStudent',"sAuthor", "nEval_Type", "nEval_Mode"]
+ list_filter = ['sStudent',"sAuthor", "nEval_Type", "nEval_Mode", ('dtDate', DateRangeFilter)]
+
+ def get_form(self, request, obj=None, **kwargs):
+ user_obj = request.user
+ author_id = obj.Author.id if obj.Author is not None else 0
+ student_id = obj.Student.id if obj.Student is not None else 0
+
+ if not user_obj.id == author_id and not user_obj.id == student_id and not is_member(user_obj, "FI-Encadrants"):
+ raise PermissionDenied
+ return super().get_form(request, obj, **kwargs)
+
#fields = ["Vehicle", "nType",'sTitle', "sDesc","dtStart", "dtEnd", "Author"]
diff --git a/studenteval/filters.py b/studenteval/filters.py
new file mode 100644
index 0000000..d21a0a1
--- /dev/null
+++ b/studenteval/filters.py
@@ -0,0 +1,10 @@
+import django_filters
+from studenteval.models import cl_Student_eval
+
+class cl_Student_eval_Filter(django_filters.FilterSet):
+
+ class Meta:
+ model = cl_Student_eval
+ fields = {
+ 'Student' : ['exact']
+ }
diff --git a/studenteval/migrations/0001_initial.py b/studenteval/migrations/0001_initial.py
new file mode 100644
index 0000000..0eac285
--- /dev/null
+++ b/studenteval/migrations/0001_initial.py
@@ -0,0 +1,48 @@
+# Generated by Django 4.0 on 2023-08-11 17:22
+
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+import uuid
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ('auth', '0012_alter_user_first_name_max_length'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='cl_Student_eval',
+ fields=[
+ ('uuid', models.UUIDField(default=uuid.UUID('619562fd-9ca4-45be-8504-c136ddc0864f'), editable=False, primary_key=True, serialize=False)),
+ ('sAuthor', models.CharField(max_length=120, verbose_name='Auteur')),
+ ('sAuthor_2e', models.CharField(max_length=120, verbose_name='Second auteur')),
+ ('sStudent', models.CharField(max_length=120, verbose_name="Nom de l'étudiant/stagiaire")),
+ ('nEval_Type', models.CharField(choices=[('1', 'Intervention'), ('2', 'Journée')], default=1, max_length=1, verbose_name='Type de suivi')),
+ ('dtDate', models.DateField(default=django.utils.timezone.now, verbose_name='Date')),
+ ('sRef', models.CharField(max_length=120, verbose_name='N° de référence / FIP')),
+ ('nEval_Mode', models.CharField(choices=[('1', 'Auto-évaluation'), ('2', 'Ecadrant')], default=1, max_length=1, verbose_name='Mode de suivi ')),
+ ('sDesc_neg', models.TextField(verbose_name='Points à améliorer')),
+ ('sDesc_pos', models.TextField(verbose_name='Points positifs')),
+ ('sDesc_global', models.TextField(verbose_name="Avis global sur l'intervention/journée/exercice")),
+ ('nInter_Nature', models.CharField(choices=[('1', 'Trauma'), ('2', 'non-Trauma')], default=1, max_length=1, verbose_name='Nature')),
+ ('nInter_Priority', models.CharField(choices=[('1', 'P1'), ('2', 'P2'), ('3', 'P3'), ('4', 'S1'), ('5', 'S2'), ('6', 'S3'), ('7', 'Exercice')], default=1, max_length=1, verbose_name='Priorité')),
+ ('nInter_Complexity', models.CharField(choices=[('1', 'Stable / Simple'), ('2', 'Stable / Complexe'), ('3', 'Instable / Simple'), ('4', 'Instable / Complexe')], default=1, max_length=1, verbose_name='Nature de complexité')),
+ ('sInter_Desc', models.TextField(verbose_name='Description courte')),
+ ('nStudent_Roles', models.CharField(choices=[('1', 'Leader'), ('2', 'Équipier'), ('3', '3e position (observateur')], default=1, max_length=1, verbose_name="Rôle de l'étudiant/stagiaire")),
+ ('dtUpdated', models.DateTimeField(auto_now=True, verbose_name='date updated')),
+ ('dtCreated', models.DateTimeField(auto_now_add=True, verbose_name='date published')),
+ ('Author', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='eval_author', to='auth.user', verbose_name='Auteur')),
+ ('Author_2e', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='eval_second_author', to='auth.user', verbose_name='Second auteur')),
+ ('Student', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='auth.user', verbose_name='Nom du stagiaire/étudaint')),
+ ],
+ options={
+ 'verbose_name': 'Suivi étudiants - stagiaires',
+ 'verbose_name_plural': 'Suivis étudiants - stagiaires',
+ },
+ ),
+ ]
diff --git a/studenteval/migrations/0002_alter_cl_student_eval_uuid.py b/studenteval/migrations/0002_alter_cl_student_eval_uuid.py
new file mode 100644
index 0000000..745a329
--- /dev/null
+++ b/studenteval/migrations/0002_alter_cl_student_eval_uuid.py
@@ -0,0 +1,19 @@
+# Generated by Django 4.0 on 2023-08-11 17:27
+
+from django.db import migrations, models
+import uuid
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('studenteval', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='uuid',
+ field=models.UUIDField(default=uuid.UUID('0ec70ee4-a015-42ea-aa8b-cf385010d233'), editable=False, primary_key=True, serialize=False),
+ ),
+ ]
diff --git a/studenteval/migrations/0003_alter_cl_student_eval_author_2e_and_more.py b/studenteval/migrations/0003_alter_cl_student_eval_author_2e_and_more.py
new file mode 100644
index 0000000..0d12e36
--- /dev/null
+++ b/studenteval/migrations/0003_alter_cl_student_eval_author_2e_and_more.py
@@ -0,0 +1,31 @@
+# Generated by Django 4.0 on 2023-08-11 17:51
+
+from django.db import migrations, models
+import django.db.models.deletion
+import uuid
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('auth', '0012_alter_user_first_name_max_length'),
+ ('studenteval', '0002_alter_cl_student_eval_uuid'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='Author_2e',
+ field=models.ForeignKey(limit_choices_to={'groups__name': 'FI-Encadrants'}, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='eval_second_author', to='auth.user', verbose_name='Second auteur'),
+ ),
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='Student',
+ field=models.ForeignKey(limit_choices_to={'groups__name': 'FI-Étudiants'}, null=True, on_delete=django.db.models.deletion.SET_NULL, to='auth.user', verbose_name='Nom du stagiaire/étudaint'),
+ ),
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='uuid',
+ field=models.UUIDField(default=uuid.UUID('aade911f-b849-4235-be64-85ed63673322'), editable=False, primary_key=True, serialize=False),
+ ),
+ ]
diff --git a/studenteval/migrations/0004_remove_cl_student_eval_nstudent_roles_and_more.py b/studenteval/migrations/0004_remove_cl_student_eval_nstudent_roles_and_more.py
new file mode 100644
index 0000000..0f83e46
--- /dev/null
+++ b/studenteval/migrations/0004_remove_cl_student_eval_nstudent_roles_and_more.py
@@ -0,0 +1,39 @@
+# Generated by Django 4.0 on 2023-08-11 18:08
+
+from django.db import migrations, models
+import django.utils.timezone
+import uuid
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('studenteval', '0003_alter_cl_student_eval_author_2e_and_more'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='cl_student_eval',
+ name='nStudent_Roles',
+ ),
+ migrations.AddField(
+ model_name='cl_student_eval',
+ name='nStudent_Role',
+ field=models.CharField(choices=[('1', 'Leader'), ('2', 'Équipier'), ('3', '3e position (observateur)')], default=1, max_length=1, verbose_name="Rôle de l'étudiant/stagiaire"),
+ ),
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='dtDate',
+ field=models.DateField(default=django.utils.timezone.now, verbose_name='Date concernée'),
+ ),
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='nEval_Mode',
+ field=models.CharField(choices=[('1', 'Auto-évaluation'), ('2', 'Encadrant')], default=1, max_length=1, verbose_name='Mode de suivi '),
+ ),
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='uuid',
+ field=models.UUIDField(default=uuid.UUID('01f714cc-4405-420e-996c-5d3a0df76250'), editable=False, primary_key=True, serialize=False),
+ ),
+ ]
diff --git a/studenteval/migrations/0005_alter_cl_student_eval_author_2e_and_more.py b/studenteval/migrations/0005_alter_cl_student_eval_author_2e_and_more.py
new file mode 100644
index 0000000..0fb911c
--- /dev/null
+++ b/studenteval/migrations/0005_alter_cl_student_eval_author_2e_and_more.py
@@ -0,0 +1,61 @@
+# Generated by Django 4.0 on 2023-08-11 18:14
+
+from django.db import migrations, models
+import django.db.models.deletion
+import uuid
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('auth', '0012_alter_user_first_name_max_length'),
+ ('studenteval', '0004_remove_cl_student_eval_nstudent_roles_and_more'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='Author_2e',
+ field=models.ForeignKey(blank=True, limit_choices_to={'groups__name': 'FI-Encadrants'}, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='eval_second_author', to='auth.user', verbose_name='Second auteur'),
+ ),
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='nEval_Type',
+ field=models.CharField(choices=[('1', 'Intervention/Exercice'), ('2', 'Journée')], default=1, max_length=1, verbose_name='Type de suivi'),
+ ),
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='nInter_Complexity',
+ field=models.CharField(blank=True, choices=[('1', 'Stable / Simple'), ('2', 'Stable / Complexe'), ('3', 'Instable / Simple'), ('4', 'Instable / Complexe')], default=1, max_length=1, verbose_name='Nature de complexité'),
+ ),
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='nInter_Nature',
+ field=models.CharField(blank=True, choices=[('1', 'Trauma'), ('2', 'non-Trauma')], default=1, max_length=1, verbose_name='Nature'),
+ ),
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='nInter_Priority',
+ field=models.CharField(blank=True, choices=[('1', 'P1'), ('2', 'P2'), ('3', 'P3'), ('4', 'S1'), ('5', 'S2'), ('6', 'S3'), ('7', 'Exercice')], default=1, max_length=1, verbose_name='Priorité'),
+ ),
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='nStudent_Role',
+ field=models.CharField(blank=True, choices=[('1', 'Leader'), ('2', 'Équipier'), ('3', '3e position (observateur)')], default=1, max_length=1, verbose_name="Rôle de l'étudiant/stagiaire"),
+ ),
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='sAuthor_2e',
+ field=models.CharField(blank=True, max_length=120, verbose_name='Second auteur'),
+ ),
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='sInter_Desc',
+ field=models.TextField(blank=True, verbose_name='Description courte'),
+ ),
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='uuid',
+ field=models.UUIDField(default=uuid.UUID('090d4087-8142-46bd-9af6-9cf3a4530d60'), editable=False, primary_key=True, serialize=False),
+ ),
+ ]
diff --git a/studenteval/migrations/0006_alter_cl_student_eval_sref_and_more.py b/studenteval/migrations/0006_alter_cl_student_eval_sref_and_more.py
new file mode 100644
index 0000000..498ca52
--- /dev/null
+++ b/studenteval/migrations/0006_alter_cl_student_eval_sref_and_more.py
@@ -0,0 +1,24 @@
+# Generated by Django 4.0 on 2023-08-11 18:19
+
+from django.db import migrations, models
+import uuid
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('studenteval', '0005_alter_cl_student_eval_author_2e_and_more'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='sRef',
+ field=models.CharField(blank=True, max_length=120, verbose_name='N° de référence / FIP'),
+ ),
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='uuid',
+ field=models.UUIDField(default=uuid.UUID('d284f62d-691a-4e36-a63a-0accebe949ee'), editable=False, primary_key=True, serialize=False),
+ ),
+ ]
diff --git a/studenteval/migrations/0007_cl_student_eval_id_alter_cl_student_eval_uuid.py b/studenteval/migrations/0007_cl_student_eval_id_alter_cl_student_eval_uuid.py
new file mode 100644
index 0000000..31d4f7c
--- /dev/null
+++ b/studenteval/migrations/0007_cl_student_eval_id_alter_cl_student_eval_uuid.py
@@ -0,0 +1,25 @@
+# Generated by Django 4.0 on 2023-08-11 19:01
+
+from django.db import migrations, models
+import studenteval.models
+import uuid
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('studenteval', '0006_alter_cl_student_eval_sref_and_more'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='cl_student_eval',
+ name='ID',
+ field=models.IntegerField(default=studenteval.models.increment_ID, editable=False, unique=True, verbose_name='ID du Suivi'),
+ ),
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='uuid',
+ field=models.UUIDField(default=uuid.UUID('bb6f22e7-e78d-492f-a8ec-87a154482db1'), editable=False, primary_key=True, serialize=False),
+ ),
+ ]
diff --git a/studenteval/migrations/0008_alter_cl_student_eval_uuid.py b/studenteval/migrations/0008_alter_cl_student_eval_uuid.py
new file mode 100644
index 0000000..b8e3ea2
--- /dev/null
+++ b/studenteval/migrations/0008_alter_cl_student_eval_uuid.py
@@ -0,0 +1,19 @@
+# Generated by Django 4.0 on 2023-08-11 19:02
+
+from django.db import migrations, models
+import uuid
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('studenteval', '0007_cl_student_eval_id_alter_cl_student_eval_uuid'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='cl_student_eval',
+ name='uuid',
+ field=models.UUIDField(default=uuid.UUID('ba52e37d-25c3-44fa-bec8-2af3e6bd5458'), editable=False, primary_key=True, serialize=False),
+ ),
+ ]
diff --git a/studenteval/models.py b/studenteval/models.py
index 7dd6296..ed3eacb 100644
--- a/studenteval/models.py
+++ b/studenteval/models.py
@@ -143,6 +143,8 @@ class cl_Student_eval(models.Model):
if sStudent is None:
sStudent = self.sStudent
+ print(f"get_all_evals_for_student launched ! {sStudent}")
+
self.a_evals = []
evals = cl_Student_eval.objects.filter(sStudent=sStudent).order_by('sRef')
for eval in evals:
@@ -152,29 +154,42 @@ class cl_Student_eval(models.Model):
#print(self.a_evals)
return self.a_evals
- @admin.display(description="Présence d'évaluation mirroir", boolean=True)
+ @admin.display(description="Mirroir ?", boolean=True)
def get_mirrored(self):
self.get_all_evals_for_student()
self.get_mirror_eval(self.a_evals)
return self.mirrored
def get_eval_type(self):
- return EVAL_TYPE[int(self.nEval_Type)-1][1]
-
- def get_inter_nature(self):
- return INTER_NATURE[int(self.nInter_Nature)-1][1]
+ if isinstance(self.nEval_Type, int):
+ return EVAL_TYPE[int(self.nEval_Type) - 1][1]
+ return "Unknown"
def get_inter_complexity(self):
- return INTER_COMPLEXITY[int(self.nInter_Nature)-1][1]
+ if isinstance(self.nInter_Nature, int):
+ return INTER_COMPLEXITY[int(self.nInter_Nature) - 1][1]
+ return "Unknown"
def get_inter_priority(self):
- return INTER_PRIORITY[int(self.nInter_Priority)-1][1]
+ if isinstance(self.nInter_Priority, int):
+ return INTER_PRIORITY[int(self.nInter_Priority) - 1][1]
+ return "Unknown"
def get_eval_mode(self):
- return EVAL_MODE[int(self.nEval_Mode)-1][1]
+ if isinstance(self.nEval_Mode, int):
+ return EVAL_MODE[int(self.nEval_Mode) - 1][1]
+ return "Unknown"
def get_student_role(self):
- return STUDENT_ROLE[int(self.nStudent_Role)-1][1]
+ if isinstance(self.nStudent_Role, int):
+ return STUDENT_ROLE[int(self.nStudent_Role) - 1][1]
+ return "Unknown"
+
+ def get_inter_nature(self):
+ if isinstance(self.nInter_Nature,int):
+ return INTER_NATURE[int(self.nInter_Nature)-1][1]
+ return "Uncknow"
+
@@ -212,6 +227,9 @@ def import_data_csv():
value = line[key]
if key == "dtDate":
value = datetime.strptime(value, "%d.%m.%Y").date()
+ elif key == "sStudent":
+ temp_obj = cl_Student_eval(
+
setattr(new_eval, key,value)
new_eval.save()
diff --git a/studenteval/templates/base.html b/studenteval/templates/base.html
new file mode 100644
index 0000000..76aecbe
--- /dev/null
+++ b/studenteval/templates/base.html
@@ -0,0 +1,51 @@
+{% load static %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Intranet StudentEval
+
+
+
+
+ Intranet Ambulance Clerc
+
+
+
+
+
+
+ {% block content %}
+ {% endblock %}
+
+
+ {% block script %}
+ {% endblock %}
+
+
+
\ No newline at end of file
diff --git a/studenteval/templates/studenteval/base_studenteval.html b/studenteval/templates/studenteval/base_studenteval.html
new file mode 100644
index 0000000..bba7f29
--- /dev/null
+++ b/studenteval/templates/studenteval/base_studenteval.html
@@ -0,0 +1,8 @@
+{% extends 'base.html' %}
+
+{% block content %}
+
+ {% block cl_content %}
+ {% endblock %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/studenteval/templates/studenteval/cl_student_eval.html b/studenteval/templates/studenteval/cl_student_eval.html
new file mode 100644
index 0000000..8f870ac
--- /dev/null
+++ b/studenteval/templates/studenteval/cl_student_eval.html
@@ -0,0 +1,124 @@
+
+
{% block title %}Détails de l'évaluation ({{ object.ID }}) étudiant de {{ object.sStudent }}{% endblock %}
+
+
+
+
+
+ Date de suivi
+ {{ object.dtDate }}
+ Date de d'écriture
+ {{ object.dtCreated }}
+
+
+ Auteur
+ {{ object.sAuthor }}
+ Second auteur
+ {{ object.sAuthor_2e }}
+
+
+
+ Type de suivi
+ {{ object.get_eval_type }}
+
+ {% if object.nEval_Type == "1" %}
+
+ N° FIP
+ {{ object.sRef }}
+ Priorité
+ {{ object.get_inter_priority }}
+
+
+
+ Description
+ {{ object.sInter_Desc }}
+
+
+ Rôle de l'étudiant
+ {{ object.get_student_role }}
+
+
+ Nature de l'intervention
+ {{ object.get_inter_nature }}
+
+
+ Complexité de l'intervention
+ {{ object.get_inter_complexity }}
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+ Éléments positifs (auto-évaluation)
+
+
+ Éléments positifs (Encadrant)
+
+
+
+
+ {{object.o_Auto_eval.sDesc_pos}}
+
+
+ {{object.o_Encadrant_eval.sDesc_pos}}
+
+
+
+
+
+
+
+ Éléments à améliorer (auto-évaluation)
+
+
+ Éléments améliorer (Encadrant)
+
+
+
+
+ {{object.o_Auto_eval.sDesc_neg}}
+
+
+ {{object.o_Encadrant_eval.sDesc_neg}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Avis Global
+
+
+
+ {{ object.o_Encadrant_eval.sDesc_global }}
+
+
+ Avis Global (auto)
+
+
+
+ {{ object.o_Auto_eval.sDesc_global }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/studenteval/templates/studenteval/cl_student_eval_detail.html b/studenteval/templates/studenteval/cl_student_eval_detail.html
index 458404d..4747fb8 100644
--- a/studenteval/templates/studenteval/cl_student_eval_detail.html
+++ b/studenteval/templates/studenteval/cl_student_eval_detail.html
@@ -1,137 +1,12 @@
+{% extends 'studenteval/base_studenteval.html' %}
+
+{% block url_nav %}
+
+ Voir toutes les évaluations
+
+{% endblock %}
+{% block cl_content %}
+ {% include 'studenteval/cl_student_eval.html' with object=object %}
+{% endblock %}
-
-
-
-
-
- Détails de l'évaluation étudiant de {{ object.sStudent }}
-
-
-
-
-
{% block title %}Détails de l'évaluation ({{ object.ID }}) étudiant de {{ object.sStudent }}{% endblock %}
-
-
-
-
-
- Date de suivi
- {{ object.dtDate }}
- Date de d'écriture
- {{ object.dtCreated }}
-
-
- Auteur
- {{ object.sAuthor }}
- Second auteur
- {{ object.sAuthor_2e }}
-
-
-
- Type de suivi
- {{ object.get_eval_type }}
-
- {% if object.nEval_Type == "1" %}
-
- N° FIP
- {{ object.sRef }}
- Priorité
- {{ object.get_inter_priority }}
-
-
-
- Description
- {{ object.sInter_Desc }}
-
-
- Rôle de l'étudiant
- {{ object.get_student_role }}
-
-
- Nature de l'intervention
- {{ object.get_inter_nature }}
-
-
- Complexité de l'intervention
- {{ object.get_inter_complexity }}
-
- {% endif %}
-
-
-
-
-
-
-
-
-
-
- Éléments positifs (auto-évaluation) => {{object.o_Auto_eval.ID}}
-
-
- Éléments positifs (Encadrant) => {{object.o_Encadrant_eval.ID}}
-
-
-
-
- {{object.o_Auto_eval.sDesc_pos}}
-
-
- {{object.o_Encadrant_eval.sDesc_pos}}
-
-
-
-
-
-
-
- Éléments à améliorer (auto-évaluation) => {{object.o_Auto_eval.ID}}
-
-
- Éléments améliorer (Encadrant) => {{object.o_Encadrant_eval.ID}}
-
-
-
-
- {{object.o_Auto_eval.sDesc_neg}}
-
-
- {{object.o_Encadrant_eval.sDesc_neg}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Avis Global
-
-
-
- {{ object.o_Encadrant_eval.sDesc_global }}
-
-
- Avis Global (auto)
-
-
-
- {{ object.o_Auto_eval.sDesc_global }}
-
-
-
-
-
-
-
-
-
diff --git a/studenteval/templates/studenteval/cl_student_eval_list.html b/studenteval/templates/studenteval/cl_student_eval_list.html
new file mode 100644
index 0000000..75f09cb
--- /dev/null
+++ b/studenteval/templates/studenteval/cl_student_eval_list.html
@@ -0,0 +1,19 @@
+{% extends 'studenteval/base_studenteval.html' %}
+
+{% block title %}Liste des évaluations{% endblock %}
+
+{% block cl_content %}
+
+
+ {% if object_list %}
+ {% for obj in object_list reversed %}
+ {% include 'studenteval/cl_student_eval.html' with object=obj %}
+ {% if not forloop.last %}
+
{% endif %}
+ {% endfor %}
+ {% else %}
+
There is no post.
+ {% endif %}
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/studenteval/urls.py b/studenteval/urls.py
index c70c221..09d7658 100644
--- a/studenteval/urls.py
+++ b/studenteval/urls.py
@@ -9,6 +9,7 @@ app_name = "studenteval"
urlpatterns = [
path('show_pdf//', views.student_eval_detail.as_view(), name='student_eval_detail'),
+ path('show_pdf_all//', views.student_eval_list.as_view(), name='student_eval_list'),
#path('peremptions', views.view_peremptions, name='view_peremptions'),
diff --git a/studenteval/views.py b/studenteval/views.py
index a9e1763..0cc6ef2 100644
--- a/studenteval/views.py
+++ b/studenteval/views.py
@@ -1,20 +1,83 @@
-from django.http import HttpResponse
+import requests
+from django.contrib.auth.mixins import LoginRequiredMixin
+from django.http import HttpResponse, Http404
from django.shortcuts import render
from django.views.generic import ListView, UpdateView, DetailView, FormView, CreateView
+from django.core.exceptions import PermissionDenied
+
from studenteval.models import cl_Student_eval
+from studenteval.filters import cl_Student_eval_Filter
def show_pdf(request, uuid):
# Votre logique pour l'action 1 ici
return HttpResponse("Action 1 a été effectuée pour l'objet avec l'ID : {}".format(uuid))
-class student_eval_detail(DetailView):
+def is_member(user, group):
+ return user.groups.filter(name=group).exists()
+class student_eval_detail(LoginRequiredMixin,DetailView):
model =cl_Student_eval
+ login_url = ""
+
+ def dispatch(self, request, *args, **kwargs):
+ user_obj = self.request.user
+
+ author_id = self.get_object().Author.id if self.get_object().Author is not None else 0
+ student_id = self.get_object().Student.id if self.get_object().Student is not None else 0
+
+ if not user_obj.id == author_id and not user_obj.id == student_id and not is_member(user_obj,"FI-Encadrants"):
+ raise PermissionDenied
+
+ return super().dispatch(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
+ context["dtDate__range__gte"] = self.request.GET.get('dtDate__range__gte')
+ context["dtDate__range__lte"] = self.request.GET.get('dtDate__range__lte')
+
self.object.get_all_evals_for_student()
self.object.get_mirror_eval(self.object.a_evals)
- return context
\ No newline at end of file
+
+ return context
+class student_eval_list(LoginRequiredMixin,ListView):
+ model = cl_Student_eval
+ login_url = ""
+
+
+
+ def get_queryset(self):
+ nStudent_id = self.kwargs['Student']
+ return cl_Student_eval.objects.filter(Student=nStudent_id)
+
+
+
+ def dispatch(self, request, *args, **kwargs):
+ user_obj = self.request.user
+
+ #self.object_list.filter(Student=requests.GET['Student'])
+
+
+ '''
+ author_id = self.get_object().Author.id if self.get_object().Author is not None else 0
+ student_id = self.get_object().Student.id if self.get_object().Student is not None else 0
+
+ if not user_obj.id == author_id and not user_obj.id == student_id and not is_member(user_obj,"FI-Encadrants"):
+ raise PermissionDenied
+ '''
+
+ return super().dispatch(request, *args, **kwargs)
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+
+ context['my_objects'] =[]
+
+ print(self.get_queryset())
+ for object in self.get_queryset():
+ object.get_all_evals_for_student()
+ object.get_mirror_eval(object.a_evals)
+ context['my_objects'].append(object)
+
+
+ return context
diff --git a/venv/Lib/site-packages/jazzmin/static/jazzmin/js/main.js b/venv/Lib/site-packages/jazzmin/static/jazzmin/js/main.js
index 0b4a54d..4140df0 100644
--- a/venv/Lib/site-packages/jazzmin/static/jazzmin/js/main.js
+++ b/venv/Lib/site-packages/jazzmin/static/jazzmin/js/main.js
@@ -38,10 +38,15 @@
$link.addClass('active');
} else if ($parent_link.length) {
$parent_link.addClass('active');
- }
- }
+ };
+ const $a_active = $('a.nav-link.active');
+ const $main_li_parent = $a_active.closest('li.nav-item.has-treeview');
+ const $ul_child = $main_li_parent.children('ul');
+ $ul_child.show();
+ $main_li_parent.addClass('menu-is-opening menu-open');
+ };
$(document).ready(function () {
// Set active status on links
@@ -56,8 +61,7 @@
const $changeListTable = $('#changelist .results table');
if ($changeListTable.length && !$changeListTable.hasClass('table table-striped')) {
$changeListTable.addClass('table table-striped');
- }
-
+ };
});
})(jQuery);
diff --git a/venv/Lib/site-packages/jazzmin/templates/admin/login.html b/venv/Lib/site-packages/jazzmin/templates/admin/login.html
index 8a07087..5c41ffc 100644
--- a/venv/Lib/site-packages/jazzmin/templates/admin/login.html
+++ b/venv/Lib/site-packages/jazzmin/templates/admin/login.html
@@ -1,135 +1,76 @@
-{% load i18n static jazzmin admin_urls %}
-{% get_current_language as LANGUAGE_CODE %}
-{% get_current_language_bidi as LANGUAGE_BIDI %}
+{% extends "registration/base.html" %}
+
+{% load i18n jazzmin %}
{% get_jazzmin_settings request as jazzmin_settings %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
-
-
-
-
-
-
-
- {% block title %}{{ title }} | {% trans 'Log in again' %}{% endblock %}
-
-
-
-
-
-
-
-
- {% if jazzmin_ui.theme.name != 'default' %}
-
- {% endif %}
-
- {% if jazzmin_ui.dark_mode_theme %}
-
- {% endif %}
-
-
-
-
- {% if jazzmin_settings.custom_css %}
-
-
- {% endif %}
-
-
-
-
-
-
-
-
- {% block extrastyle %} {% endblock %}
- {% block extrahead %} {% endblock %}
-
-
-
-
-
-
{{ jazzmin_settings.site_header }}
-
-
-
-
-
{{ jazzmin_settings.welcome_sign }}
-