aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--admin.py3
-rw-r--r--management/commands/_private.py16
-rw-r--r--management/commands/timetables.py17
-rw-r--r--models.py9
4 files changed, 33 insertions, 12 deletions
diff --git a/admin.py b/admin.py
index 19a1525..233ed1d 100644
--- a/admin.py
+++ b/admin.py
@@ -27,7 +27,8 @@ class RoomAdmin(admin.ModelAdmin):
class CourseAdmin(admin.ModelAdmin):
fieldsets = (
(None, {"fields": ("name", "type", "timetable", "groups", "rooms",)}),
- ("Horaires", {"fields": ("begin", "end",)}),)
+ ("Horaires", {"fields": ("begin", "end",)}),
+ ("Remarques", {"fields": ("notes",)}),)
list_display = ("name", "type", "timetable", "begin", "end",)
list_filter = ("type", "timetable__name", "groups",)
ordering = ("begin",)
diff --git a/management/commands/_private.py b/management/commands/_private.py
index 4e84363..7b71fc6 100644
--- a/management/commands/_private.py
+++ b/management/commands/_private.py
@@ -43,27 +43,31 @@ def get_events(soup, weeks, week, timetable):
type_ = None
groups = None
rooms = None
+ notes = None
if weeks[event.rawweeks.text].number != week:
continue
if event.resources.module is not None:
- title = event.resources.module.text
+ title = event.resources.module.item.text
- if event.category is not None and title is not None:
+ if event.category is not None:
type_ = event.category.text
- if event.resources.group is not None and type_ is not None:
+ if event.resources.group is not None:
groups = [get_from_db_or_create(Group, item.text, timetable) for item in event.resources.group.find_all("item")]
- if event.resources.room is not None and groups is not None:
- rooms = [get_from_db_or_create(Room, item.text) for item in event.resources.room.find_all("item")]
+ if event.resources.room is not None:
+ rooms = [get_from_db_or_create(Room, item.text) for item in event.resources.room.find_all("item")]
+
+ if event.notes is not None:
+ notes = event.notes.text
date = weeks[event.rawweeks.text].get_day(int(event.day.text))
begin = add_time(date, datetime.datetime.strptime(event.starttime.text, "%H:%M"))
end = add_time(date, datetime.datetime.strptime(event.endtime.text, "%H:%M"))
- yield title, type_, groups, rooms, begin, end
+ yield title, type_, groups, rooms, notes, begin, end
def get_weeks(soup):
weeks = {}
diff --git a/management/commands/timetables.py b/management/commands/timetables.py
index 50382ed..81e5a7d 100644
--- a/management/commands/timetables.py
+++ b/management/commands/timetables.py
@@ -38,10 +38,21 @@ class Command(BaseCommand):
soup = get_xml(timetable.url)
weeks = get_weeks(soup)
- for name, type_, groups, rooms, begin, end in get_events(soup, weeks, week, timetable):
- course = Course.objects.create(name=name, type=type_, timetable=timetable, begin=begin, end=end)
+ for name, type_, groups, rooms, notes, begin, end in get_events(soup, weeks, week, timetable):
+ course = Course.objects.create(timetable=timetable, begin=begin, end=end)
+
+ if name is not None:
+ course.name = name
+ course.notes = notes
+ elif notes is not None:
+ course.name = notes
+ else:
+ course.name = "Aucune information"
+
course.groups.add(*groups)
- course.rooms.add(*rooms)
+ if rooms is not None:
+ course.rooms.add(*rooms)
+
course.save()
self.stdout.write(self.style.SUCCESS("Done."))
diff --git a/models.py b/models.py
index 106e3f7..743ef03 100644
--- a/models.py
+++ b/models.py
@@ -1,4 +1,5 @@
from django.db import models
+from django.utils.text import slugify
class Timetable(models.Model):
@@ -24,6 +25,8 @@ class Group(models.Model):
td = models.IntegerField(verbose_name="groupe de TD", null=True, db_index=True)
tp = models.IntegerField(verbose_name="groupe de TP", null=True, db_index=True)
+ slug = models.SlugField(max_length=64, unique=True, default="")
+
def __str__(self):
return self.name
@@ -42,6 +45,7 @@ class Group(models.Model):
except:
print("Malformed name: {0}. Ignoring".format(self.name))
finally:
+ self.slug = slugify(self.name)
super(Group, self).save()
@@ -64,9 +68,10 @@ class Room(models.Model):
class Course(models.Model):
- name = models.CharField(max_length=255, verbose_name="nom")
- type_ = models.CharField(name="type", max_length=255, verbose_name="type de cours")
+ name = models.CharField(max_length=255, verbose_name="nom", null=True)
+ type_ = models.CharField(name="type", max_length=255, verbose_name="type de cours", null=True)
timetable = models.ForeignKey(Timetable, on_delete=models.CASCADE, verbose_name="emploi du temps")
+ notes = models.TextField(verbose_name="remarques", blank=True, null=True)
groups = models.ManyToManyField(Group, verbose_name="groupes")
rooms = models.ManyToManyField(Room, verbose_name="salles")