scripts: import recup intervenants
* scripts/import_recup_intervenants.py: remove double worker and create user / password for student * scripts/utils.py: move some generic functions here
This commit is contained in:
parent
ae7e9453f6
commit
05f6ff725a
|
@ -0,0 +1,142 @@
|
|||
import ipdb
|
||||
# -*- coding: utf-8 -*-
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import csv
|
||||
import logging
|
||||
import random
|
||||
|
||||
from copy import deepcopy
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
|
||||
import calebasse.settings
|
||||
import django.core.management
|
||||
|
||||
django.core.management.setup_environ(calebasse.settings)
|
||||
|
||||
from django.db import transaction
|
||||
from django.db.models import Q
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
from calebasse.agenda.models import Event, EventType
|
||||
from calebasse.personnes.models import Worker, UserWorker
|
||||
from calebasse.ressources.models import Service, WorkerType
|
||||
|
||||
from scripts.import_rs import PERIOD_FAURE_NOUS
|
||||
from scripts.utils import _get_dict
|
||||
|
||||
# Configuration
|
||||
db_path = "./scripts/20130104-213225"
|
||||
|
||||
dbs = ["F_ST_ETIENNE_SESSAD_TED", "F_ST_ETIENNE_CMPP", "F_ST_ETIENNE_CAMSP", "F_ST_ETIENNE_SESSAD"]
|
||||
#tables = ['intervenants']
|
||||
|
||||
# Global mappers. This dicts are used to map a Faure id with a calebasse object.
|
||||
tables_data = {}
|
||||
|
||||
log_file = "./scripts/import_recup_intervenants.log"
|
||||
logging.basicConfig(filename=log_file,level=logging.DEBUG)
|
||||
|
||||
def parse_intervenant(data):
|
||||
services = []
|
||||
workers = []
|
||||
|
||||
if data["old_cmpp_id"]:
|
||||
workers_qs = Worker.objects.filter(old_cmpp_id=data["old_cmpp_id"])
|
||||
if workers_qs:
|
||||
workers.extend(workers_qs.all())
|
||||
services.append(Service.objects.get(name="CMPP"))
|
||||
if data["old_camsp_id"]:
|
||||
workers_qs = Worker.objects.filter(old_camsp_id=data["old_camsp_id"])
|
||||
if workers_qs:
|
||||
workers.extend(workers_qs.all())
|
||||
services.append(Service.objects.get(name="CAMSP"))
|
||||
if data["old_sessad_ted_id"]:
|
||||
workers_qs = Worker.objects.filter(old_sessad_ted_id=data["old_sessad_ted_id"])
|
||||
if workers_qs:
|
||||
workers.extend(workers_qs.all())
|
||||
services.append(Service.objects.get(name="SESSAD TED"))
|
||||
if data["old_sessad_dys_id"]:
|
||||
workers_qs = Worker.objects.filter(old_sessad_dys_id=data["old_sessad_dys_id"])
|
||||
if workers_qs:
|
||||
workers.extend(workers_qs.all())
|
||||
services.append(Service.objects.get(name="SESSAD DYS"))
|
||||
events = Event.objects.filter(participants__in=workers)
|
||||
worker = Worker.objects.get(id=workers[0].id)
|
||||
worker.id = None
|
||||
worker.pk = None
|
||||
worker.last_name = data['nom']
|
||||
if data['prenom']:
|
||||
worker.first_name = data['prenom']
|
||||
worker_type = None
|
||||
if data['type readable'] == 'Stagiaire':
|
||||
worker_type = WorkerType.objects.get(name=u'Stagiaires', intervene=True)
|
||||
elif data['type readable'] == 'Orthophoniste liberal':
|
||||
worker_type = WorkerType.objects.get(name=u'Orthophonistes libéraux', intervene=True)
|
||||
worker.type = worker_type
|
||||
worker.save()
|
||||
if worker.type.name == u'Stagiaires':
|
||||
username="%s%s" % (worker.first_name[0], worker.last_name)
|
||||
password = worker.first_name[0].lower() + worker.last_name.lower()
|
||||
user = User.objects.filter(username=username)
|
||||
if not user:
|
||||
for i in range(0, 4):
|
||||
password += str(random.randint(0, 9))
|
||||
user = User.objects.create_user(
|
||||
username="%s%s" % (worker.first_name[0], worker.last_name),
|
||||
password=password,
|
||||
)
|
||||
user.first_name = worker.first_name
|
||||
user.last_name = worker.last_name
|
||||
user.save()
|
||||
UserWorker.objects.create(user=user, worker=worker)
|
||||
logging.info("Create user %s with password %s" % (username, password))
|
||||
worker.services = services
|
||||
if events and len(workers) > 1:
|
||||
for event in events:
|
||||
event.participants.add(worker)
|
||||
for old_worker in workers:
|
||||
event.participants.remove(old_worker)
|
||||
for old_worker in workers:
|
||||
logging.info('delete worker %s' % old_worker.id)
|
||||
old_worker.delete()
|
||||
logging.info('create worker %s' % worker.id)
|
||||
worker.save()
|
||||
|
||||
def main():
|
||||
csvfile = open('scripts/recup_intervenants.csv', 'rb')
|
||||
csvlines = csv.reader(csvfile, delimiter=';', quotechar='|')
|
||||
cols = csvlines.next()
|
||||
for line in csvlines:
|
||||
data = _get_dict(cols, line)
|
||||
parse_intervenant(data)
|
||||
csvfile.close()
|
||||
# tables_data = {}
|
||||
# for db in dbs:
|
||||
# if "F_ST_ETIENNE_CMPP" == db:
|
||||
# service = Service.objects.get(name="CMPP")
|
||||
# elif "F_ST_ETIENNE_CAMSP" == db:
|
||||
# service = Service.objects.get(name="CAMSP")
|
||||
# elif "F_ST_ETIENNE_SESSAD_TED" == db:
|
||||
# service = Service.objects.get(name="SESSAD TED")
|
||||
# elif "F_ST_ETIENNE_SESSAD" == db:
|
||||
# service = Service.objects.get(name="SESSAD DYS")
|
||||
#
|
||||
# tables_data[service] = {}
|
||||
#
|
||||
# for table in tables:
|
||||
# tables_data[service][table] = {}
|
||||
# csvfile = open(os.path.join(db_path, db, '%s.csv' % table), 'rb')
|
||||
# csvlines = csv.reader(csvfile, delimiter=';', quotechar='|')
|
||||
# cols = csvlines.next()
|
||||
# for line in csvlines:
|
||||
# data = _get_dict(cols, line)
|
||||
# tables_data[service][table][data['id']] = data
|
||||
# csvfile.close()
|
||||
#
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
@ -7,3 +7,29 @@ class QuerysetIndex(object):
|
|||
for obj in qs:
|
||||
for keyword in keywords:
|
||||
getattr(self, 'by_' + keyword)[getattr(obj, keyword)] = obj
|
||||
|
||||
def _to_datetime(str_date):
|
||||
if not str_date:
|
||||
return None
|
||||
return datetime.strptime(str_date[:19], "%Y-%m-%d %H:%M:%S")
|
||||
|
||||
def _to_date(str_date):
|
||||
dt = _to_datetime(str_date)
|
||||
return dt and dt.date()
|
||||
|
||||
def _to_time(str_date):
|
||||
dt = _to_datetime(str_date)
|
||||
return dt and dt.time()
|
||||
|
||||
def _to_duration(str_date):
|
||||
dt = _to_datetime(str_date)
|
||||
if dt is None:
|
||||
return timedelta(minutes=15)
|
||||
return dt - datetime(1900, 01, 01, 0, 0)
|
||||
|
||||
def _get_dict(cols, line):
|
||||
res = {}
|
||||
for i, data in enumerate(line):
|
||||
res[cols[i]] = data.decode('utf-8')
|
||||
return res
|
||||
|
||||
|
|
Reference in New Issue