]> git.parisson.com Git - teleforma.git/commitdiff
PB user import debug
authoryomguy <yomguy@parisson.com>
Tue, 12 Jun 2012 23:40:53 +0000 (01:40 +0200)
committeryomguy <yomguy@parisson.com>
Tue, 12 Jun 2012 23:40:53 +0000 (01:40 +0200)
teleforma/management/commands/teleforma-import-users-pb-debug.py [new file with mode: 0644]

diff --git a/teleforma/management/commands/teleforma-import-users-pb-debug.py b/teleforma/management/commands/teleforma-import-users-pb-debug.py
new file mode 100644 (file)
index 0000000..1394c35
--- /dev/null
@@ -0,0 +1,98 @@
+from optparse import make_option
+from django.conf import settings
+from django.core.management.base import BaseCommand, CommandError
+from django.contrib.auth.models import User
+from django.template.defaultfilters import slugify
+from telemeta.models import *
+from telemeta.util.unaccent import unaccent
+from teleforma.models import *
+import logging
+import codecs
+import xlrd
+import datetime
+
+class Command(BaseCommand):
+    help = "Import users from a XLS file (see an example in example/data/"
+    args = "path"
+    first_row = 2
+    admin_email = 'webmaster@parisson.com'
+
+    def get_courses(self, code):
+        courses = Course.objects.filter(code=code)
+        if courses:
+            return courses[0]
+        else:
+            return None
+
+    def get_training(self, code):
+        platform_only = False
+        if 'I' in code[0:2]:
+            platform_only = True
+            code = code[4:]
+            training = Training.objects.get(code=code)
+        else:
+            training = Training.objects.get(code=code)
+        return platform_only, training
+
+    def get_iej(self, name):
+        iejs = IEJ.objects.filter(name=name)
+        if iejs:
+            iej = iejs[0]
+        elif not name:
+            iej = None
+        else:
+            iej, c = IEJ.objects.get_or_create(name=name)
+        return iej
+
+    def import_user(self, row):
+        last_name   = row[0].value
+        first_name  = row[1].value
+        email       = row[9].value
+        #FIXME:
+        email       = self.admin_email
+        username = slugify(first_name)[0] + '.' + slugify(last_name)
+        username = username[:30]
+        date = row[14].value
+        date_joined = datetime.datetime(*xlrd.xldate_as_tuple(date, self.book.datemode))
+
+        #FIXME: NOT for production
+        user = User.objects.filter(username=username)
+        if user:
+            user.delete()
+
+        user, created = User.objects.get_or_create(username=username, first_name=first_name,
+                                     last_name=last_name, email=email, date_joined = date_joined)
+
+        if created:
+            student = Student.objects.filter(user=user)
+            if student:
+                student.delete()
+            student = Student(user=user)
+            student.platform_only, student.training = self.get_training(row[3].value)
+            student.iej = self.get_iej(row[2].value)
+            student.save()
+
+            student.period = Period.objects.filter(name='Estivale')
+            student.procedure = self.get_courses(row[4].value)
+            student.written_speciality = self.get_courses(row[5].value)
+            student.oral_speciality = self.get_courses(row[6].value)
+            student.oral_1 = self.get_courses(row[7].value)
+            student.oral_2 = self.get_courses(row[8].value)
+
+            profile, created = Profile.objects.get_or_create(user=user)
+            profile.address = row[10].value
+            profile.postal_code = int(row[11].value)
+            profile.city = row[12].value
+            profile.telephone = row[13].value
+            profile.save()
+            student.save()
+            print 'imported: ' + first_name + ' ' + last_name + ' ' + username
+
+    def handle(self, *args, **options):
+        file = args[0]
+        self.book = xlrd.open_workbook(file)
+        sheet = self.book.sheet_by_index(0)
+        col = sheet.col(0)
+        for i in range(self.first_row, len(col)):
+            self.import_user(sheet.row(i))
+