165 lines
4.3 KiB
Python
165 lines
4.3 KiB
Python
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()
|