Ejemplo n.º 1
0
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))