diff --git a/venissieux-technocarte/run.py b/venissieux-technocarte/run.py new file mode 100644 index 0000000..a72392b --- /dev/null +++ b/venissieux-technocarte/run.py @@ -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()