wcs script to import data from technocarte
This commit is contained in:
parent
9fa5dd0be6
commit
3afe7267e9
|
@ -0,0 +1,164 @@
|
|||
import collections
|
||||
import csv
|
||||
import sys
|
||||
import time
|
||||
|
||||
from wcs.carddef import CardDef
|
||||
|
||||
|
||||
FILEPATH = None
|
||||
ACTION = sys.argv[1]
|
||||
assert ACTION in ('import', 'reset')
|
||||
|
||||
if ACTION == 'import':
|
||||
FILEPATH = sys.argv[2]
|
||||
|
||||
|
||||
AdulteCardDef = CardDef.select(clause=lambda x: x.url_name == 'adultes')[0]
|
||||
EnfantCardDef = CardDef.select(clause=lambda x: x.url_name == 'enfants')[0]
|
||||
FamilleCardDef = CardDef.select(clause=lambda x: x.url_name == 'familles')[0]
|
||||
|
||||
|
||||
def set_field(carddata, varname, value):
|
||||
field = None
|
||||
for field in carddata.formdef.get_all_fields():
|
||||
if field.varname == varname:
|
||||
break
|
||||
assert field is not None
|
||||
carddata.data[field.id] = value
|
||||
|
||||
|
||||
def get_field_value(carddata, varname):
|
||||
field = None
|
||||
for field in carddata.formdef.get_all_fields():
|
||||
if field.varname == varname:
|
||||
break
|
||||
assert field is not None
|
||||
return carddata.data.get(field.id)
|
||||
|
||||
|
||||
def get_rows():
|
||||
with open(FILEPATH) as csvfile:
|
||||
reader = csv.DictReader(csvfile, delimiter=';', quotechar='"')
|
||||
for i, row in enumerate(reader):
|
||||
if i > 100:
|
||||
break
|
||||
yield row
|
||||
|
||||
|
||||
def create_adultes():
|
||||
adultes = {}
|
||||
|
||||
for row in get_rows():
|
||||
if row['ADULTE'] != '1':
|
||||
continue
|
||||
adulte = AdulteCardDef.data_class()()
|
||||
set_field(adulte, 'nom', row['NOMENF'])
|
||||
set_field(adulte, 'prenom', row['PREENF'])
|
||||
|
||||
codsex = row['CODSEX']
|
||||
genre = ''
|
||||
if codsex == 'M':
|
||||
genre = 'Homme'
|
||||
elif codsex == 'F':
|
||||
genre = 'Femme'
|
||||
set_field(adulte, 'genre', genre)
|
||||
|
||||
if row['DATNAI']:
|
||||
set_field(adulte, 'date_naissance', time.strptime(row['DATNAI'][:10], '%d/%m/%Y'))
|
||||
|
||||
set_field(adulte, 'telephone', row['NUMTEL'])
|
||||
set_field(adulte, 'courriel', row['MAIL'])
|
||||
set_field(adulte, 'numero_voie', "%s %s" % (row['NUMVOI'], row['ADRENF1']))
|
||||
set_field(adulte, 'code_postal', row['CODPOSENF'])
|
||||
set_field(adulte, 'commune', row['COMMUNE'])
|
||||
adulte.store()
|
||||
adulte.just_created()
|
||||
adulte.store()
|
||||
adulte.perform_workflow()
|
||||
adulte.store()
|
||||
|
||||
adultes[row['CODENF']] = {
|
||||
'technocarte_id': row['CODENF'],
|
||||
'publik_id': adulte.id,
|
||||
'technocarte_famille_id': row['CODFAM']
|
||||
}
|
||||
|
||||
return adultes
|
||||
|
||||
|
||||
def create_enfants():
|
||||
enfants = {}
|
||||
for row in get_rows():
|
||||
if row['ADULTE'] == '1':
|
||||
continue
|
||||
|
||||
enfant = EnfantCardDef.data_class()()
|
||||
set_field(enfant, 'nom', row['NOMENF'])
|
||||
set_field(enfant, 'prenom', row['PREENF'])
|
||||
|
||||
codsex = row['PREENF']
|
||||
genre = ''
|
||||
if codsex == 'M':
|
||||
genre = 'Homme'
|
||||
elif codsex == 'F':
|
||||
genre = 'Femme'
|
||||
set_field(enfant, 'genre', genre)
|
||||
|
||||
if row['DATNAI']:
|
||||
set_field(enfant, 'date_naissance', time.strptime(row['DATNAI'][:10], '%d/%m/%Y'))
|
||||
|
||||
enfant.store()
|
||||
enfant.just_created()
|
||||
enfant.store()
|
||||
enfant.perform_workflow()
|
||||
enfant.store()
|
||||
|
||||
|
||||
enfant = {
|
||||
'technocarte_id': row['CODENF'],
|
||||
'publik_id': enfant.id,
|
||||
'technocarte_famille': row['CODFAM']
|
||||
}
|
||||
if row['CODPEREBIO']:
|
||||
enfant['pere_technocarte_id'] = row['CODPEREBIO']
|
||||
if row['CODMEREBIO']:
|
||||
enfant['mere_technocarte_id'] = row['CODMEREBIO']
|
||||
|
||||
enfants[row['CODENF']] = enfant
|
||||
|
||||
return enfants
|
||||
|
||||
|
||||
def create_familles(adultes, enfants):
|
||||
for adulte_technocarte_id, adulte in adultes.items():
|
||||
if 'publik_famille_id' in adulte:
|
||||
# ajouter comme deuxième adulte
|
||||
pass
|
||||
else:
|
||||
publik_adulte = AdulteCardDef.data_class().select(
|
||||
clause=lambda x: x.id == adulte['publik_id']
|
||||
)[0]
|
||||
famille = FamilleCardDef.data_class()()
|
||||
set_field(famille, 'famille', get_field_value(publik_adulte, 'nom'))
|
||||
famille.store()
|
||||
adulte['publik_famille_id'] = famille.id
|
||||
|
||||
|
||||
def import_data():
|
||||
adultes = create_adultes()
|
||||
enfants = create_enfants()
|
||||
create_familles(adultes, enfants)
|
||||
|
||||
|
||||
def reset():
|
||||
AdulteCardDef.data_class().wipe()
|
||||
EnfantCardDef.data_class().wipe()
|
||||
FamilleCardDef.data_class().wipe()
|
||||
|
||||
|
||||
if ACTION == 'import':
|
||||
import_data()
|
||||
|
||||
elif ACTION == 'reset':
|
||||
reset()
|
Loading…
Reference in New Issue