70 lines
2.4 KiB
Python
70 lines
2.4 KiB
Python
import csv
|
|
from datetime import date, time, timedelta
|
|
from colloscope.models import *
|
|
|
|
def scrape(periode, chemin):
|
|
with open(chemin, "r") as file:
|
|
reader = csv.reader(file)
|
|
headers, *colloscope = list(reader)
|
|
|
|
for l in colloscope:
|
|
print(l)
|
|
|
|
for colleur, matiere, jour, heure, *(rotations) in colloscope:
|
|
nom_colleur = colleur.lstrip("Mme.").title()
|
|
civilite = "M" if colleur.startswith("M.") else "F"
|
|
|
|
if not Colleur.objects.filter(nom=nom_colleur, civilite=civilite).exists():
|
|
c = Colleur(civilite=civilite, nom=nom_colleur)
|
|
c.save()
|
|
else:
|
|
c = Colleur.objects.get(nom=nom_colleur, civilite=civilite)
|
|
|
|
if not Subject.objects.filter(classe=periode.classe, libelle=matiere).exists():
|
|
m = Subject(classe=periode.classe, libelle=matiere, code=matiere.upper())
|
|
m.save()
|
|
else:
|
|
m = Subject.objects.get(classe=periode.classe, libelle=matiere)
|
|
|
|
jours_dict = {"dimanche": 0, "lundi": 1, "mardi": 2, "mercredi": 3, "jeudi": 4, "vendredi": 5, "samedi": 6}
|
|
j = jours_dict[jour]
|
|
|
|
h = time(int(heure[:-1]), 0)
|
|
|
|
if matiere=="InfoTP":
|
|
d = timedelta(hours=2)
|
|
c2 = 9
|
|
else:
|
|
d = timedelta(hours=1)
|
|
c2 = 3
|
|
|
|
print(f"--> Traitement de {c=}, {m=}, {j=}, {h=}, {d=}, {c2=}")
|
|
|
|
if not Slot.objects.filter(periode=periode, jour=j, heure=h, duree=d, matiere=m, colleur=c, est_colle=True, capacite=c2).exists():
|
|
creneau = Slot(periode=periode, jour=j, heure=h, duree=d, salle="nc", matiere=m, colleur=c, est_colle=True, capacite=c2)
|
|
creneau.save()
|
|
else:
|
|
creneau = Slot.objects.get(periode=periode, jour=j, heure=h, duree=d, matiere=m, colleur=c, est_colle=True, capacite=c2)
|
|
|
|
for i, r in enumerate(rotations):
|
|
sem = headers[4+i].split("/")
|
|
sem[2] = "20"+sem[2]
|
|
sem.reverse()
|
|
|
|
s = date.fromisoformat("-".join(sem)) + (j-1) * timedelta(days=1)
|
|
|
|
if not Colle.objects.filter(creneau=creneau, date=s):
|
|
rot = Colle(creneau=creneau, date=s)
|
|
rot.save()
|
|
else:
|
|
rot = Colle.objects.get(creneau=creneau, date=s)
|
|
|
|
rot.groupes.add(Group.objects.get(libelle=r))
|
|
|
|
def main():
|
|
periode = Term.objects.get(id=3)
|
|
scrape(periode, "colloscope.csv")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|