def importCSV(request, template='contacts/person/import.html'): """ Import people from csv """ if not request.user.is_authenticated(): return HttpResponseRedirect('/login/?next=%s' % request.path) registres = 0 if request.method == 'POST': form = ImportCSVForm(request.POST, request.FILES) if form.is_valid(): uploaded_file = request.FILES['fitxer'] uploaded_file.read() reader = csv.reader(uploaded_file, delimiter=',', quotechar='"') for row in reader: person = Person() person.first_name = row[0] person.last_name = row[1] person.contact_type = row[3] person.id_card = row[5] base_slug = slugify("%s %s %s" % (p.first_name, p.last_name, p.secondlast_name)) # hem de comprovar que no existeix cap persona amb aquest nom. Si no, hem d'afegir -1 tmp_slug = base_slug trobat = True counter = 0 while trobat: try: Person.objects.get(slug__iexact=tmp_slug) counter = counter + 1 tmp_slug = "%s-%s" % (base_slug, str(counter)) except Person.DoesNotExist: trobat = False person.slug = tmp_slug person.save() registres = registres + 1 else: form = ImportCSVForm() return render_to_response(template, {'registres': registres, 'form': form}, RequestContext(request))
def synchronizeSPIPForm(request, template='contacts/person/synchronize.html'): """ Import inscriptions from spip form """ if not request.user.is_authenticated(): return HttpResponseRedirect('/login/?next=%s' % request.path) registres = 0 user = request.user if request.method == 'POST': form = SynchronizeSPIPForm(request.POST) if form.is_valid(): if form.cleaned_data['confirma'] == True: lastperson = Person.objects.latest('external_id') req = urllib2.Request(settings.SPIP_SYNC_URL + '?action=get&last_id=' + str(lastperson.external_id) , None, {'user-agent':settings.SPIP_SYNC_AGENT}) opener = urllib2.build_opener() json_data = simplejson.load(opener.open(req)) person = Person() person.external_id = 0 laboral_levels = [] courses = [] for row in json_data['list']: if row['id_donnee'] != str(person.external_id) and person.external_id > 0: # donam d'alta la persona anterior person.slug = calculaSlugPersona(person) person.user_add = user person.user_modify = user person.save() # alta relacio persona cursos for course_id in courses: person.courses.add(Course.objects.get(id=course_id)) registres = registres + 1 # nova persona person = Person() laboral_levels = [] courses = [] person.external_id = row['id_donnee'] person.date_registration = row['date'] if row['champ'] == 'ligne_1': person.first_name = row['valeur'] #.decode("utf8", "ignore") elif row['champ'] == 'ligne_2': person.last_name = row['valeur'] #.decode("utf8", "ignore") elif row['champ'] == 'ligne_3': person.id_card = row['valeur'] elif row['champ'] == 'ligne_4': person.home_address = row['valeur'] #.decode("utf8", "ignore") elif row['champ'] == 'ligne_5': person.home_postalcode = row['valeur'] elif row['champ'] == 'ligne_6': person.home_town = row['valeur'] #.decode("utf8", "ignore") elif row['champ'] == 'select_5': person.home_province = row['titre'] #.decode("utf8", "ignore") elif row['champ'] == 'email_1': person.email_address = row['valeur'] elif row['champ'] == 'ligne_8': person.phone_number = row['valeur'] elif row['champ'] == 'ligne_9': person.mobile_number = row['valeur'] elif row['champ'] == 'ligne_19': person.twitter = row['valeur'] #.decode("utf8", "ignore") elif row['champ'] == 'select_1': person.laboral_category = row['rang'] elif row['champ'] == 'multiple_1': laboral_levels.append(row['rang']) person.laboral_levels = ",".join("'%s'" % str(level) for level in laboral_levels) # print >> sys.stderr, 'Laboral levels = %s' % person.laboral_levels elif row['champ'] == 'ligne_10': person.laboral_nrp = row['valeur'] elif row['champ'] == 'num_1': person.laboral_years = float(row['valeur']) if '.' in row['valeur'] else int(row['valeur']) elif row['champ'] == 'select_2': person.laboral_cuerpo = row['rang'] elif row['champ'] == 'ligne_11': person.laboral_degree = row['valeur'] #.decode("utf8", "ignore") elif row['champ'] == 'ligne_12': person.laboral_centername = row['valeur'] #.decode("utf8", "ignore") elif row['champ'] == 'ligne_13': person.laboral_centercode = row['valeur'] elif row['champ'] == 'ligne_16': person.laboral_centerpostalcode = row['valeur'] elif row['champ'] == 'ligne_14': person.laboral_centertown = row['valeur'] #.decode("utf8", "ignore") elif row['champ'] == 'select_4': person.laboral_centerprovince = row['titre'] #.decode("utf8", "ignore") elif row['champ'] == 'select_3': person.math_society = row['rang'] elif row['champ'] == 'texte_1': person.remarks = row['valeur'] #.decode("utf8", "ignore") elif row['champ'] == 'select_6': person.lang = row['rang'] # nou, cursos elif row['champ'] == 'multiple_2': courses.append(row['rang']) # Hem de donar d'alta la darrera persona if person.external_id > 0: person.slug = calculaSlugPersona(person) person.user_add = user person.user_modify = user person.save() # alta relacio persona cursos for course_id in courses: person.courses.add(Course.objects.get(id=course_id)) registres = registres + 1 # Posam a 0 els registres no sincronitzats if not request.session: request.session={} request.session['regs_not_sync'] = 0 else: form = SynchronizeSPIPForm() registres = -1 return render_to_response(template, {'registres': registres, 'form': form}, RequestContext(request))
def synchronizeSPIPForm(request, template='contacts/person/synchronize.html'): """ Import inscriptions from spip form """ if not request.user.is_authenticated(): return HttpResponseRedirect('/login/?next=%s' % request.path) registres = 0 user = request.user if request.method == 'POST': form = SynchronizeSPIPForm(request.POST) if form.is_valid(): if form.cleaned_data['confirma'] == True: lastperson = Person.objects.latest('external_id') db = MySQLdb.connect(host=settings.SPIP_DATABASE_HOST,user=settings.SPIP_DATABASE_USER, passwd=settings.SPIP_DATABASE_PASSWORD,db=settings.SPIP_DATABASE, charset='utf8') cur = db.cursor() cur.execute(""" SELECT insc.id_donnee, insc.date, camp.champ, camp.valeur, valor.rang, valor.titre FROM spip_forms_donnees insc, spip_forms_donnees_champs camp LEFT OUTER JOIN spip_forms_champs_choix valor ON valor.champ = camp.champ AND valor.choix = camp.valeur WHERE insc.id_donnee = camp.id_donnee AND insc.id_donnee > %s AND insc.id_form = 1 AND insc.statut = 'publie' ORDER BY insc.id_donnee, camp.champ """ % lastperson.external_id ) person = Person() person.external_id = 0 laboral_levels = [] for row in cur.fetchall(): if row[0] != person.external_id and person.external_id > 0: # donam d'alta la persona anterior person.slug = calculaSlugPersona(person) person.user_add = user person.user_modify = user person.save() registres = registres + 1 # nova persona person = Person() laboral_levels = [] person.external_id = row[0] person.date_registration = row[1] if row[2] == 'ligne_1': person.first_name = row[3] #.decode("utf8", "ignore") elif row[2] == 'ligne_2': person.last_name = row[3] #.decode("utf8", "ignore") elif row[2] == 'ligne_3': person.id_card = row[3] elif row[2] == 'ligne_4': person.home_address = row[3] #.decode("utf8", "ignore") elif row[2] == 'ligne_5': person.home_postalcode = row[3] elif row[2] == 'ligne_6': person.home_town = row[3] #.decode("utf8", "ignore") elif row[2] == 'select_5': person.home_province = row[5] #.decode("utf8", "ignore") elif row[2] == 'email_1': person.email_address = row[3] elif row[2] == 'ligne_8': person.phone_number = row[3] elif row[2] == 'ligne_9': person.mobile_number = row[3] elif row[2] == 'ligne_19': person.twitter = row[3] #.decode("utf8", "ignore") elif row[2] == 'select_1': person.laboral_category = row[4] elif row[2] == 'multiple_1': laboral_levels.append(row[4]) person.laboral_levels = ",".join("'%s'" % str(level) for level in laboral_levels) # print >> sys.stderr, 'Laboral levels = %s' % person.laboral_levels elif row[2] == 'ligne_10': person.laboral_nrp = row[3] elif row[2] == 'num_1': person.laboral_years = float(row[3]) if '.' in row[3] else int(row[3]) elif row[2] == 'select_2': person.laboral_cuerpo = row[4] elif row[2] == 'ligne_11': person.laboral_degree = row[3] #.decode("utf8", "ignore") elif row[2] == 'ligne_12': person.laboral_centername = row[3] #.decode("utf8", "ignore") elif row[2] == 'ligne_13': person.laboral_centercode = row[3] elif row[2] == 'ligne_16': person.laboral_centerpostalcode = row[3] elif row[2] == 'ligne_14': person.laboral_centertown = row[3] #.decode("utf8", "ignore") elif row[2] == 'select_4': person.laboral_centerprovince = row[5] #.decode("utf8", "ignore") elif row[2] == 'select_3': person.math_society = row[4] elif row[2] == 'texte_1': person.remarks = row[3] #.decode("utf8", "ignore") elif row[2] == 'select_6': person.lang = row[4] # Hem de donar d'alta la darrera persona if person.external_id > 0: person.slug = calculaSlugPersona(person) person.user_add = user person.user_modify = user person.save() registres = registres + 1 # Close all cursors cur.close() # Close all databases db.close() # Posam a 0 els registres no sincronitzats if not request.session: request.session={} request.session['regs_not_sync'] = 0 else: form = SynchronizeSPIPForm() registres = -1 return render_to_response(template, {'registres': registres, 'form': form}, RequestContext(request))