diff --git a/apps/member/management/commands/import_nk15.py b/apps/member/management/commands/import_nk15.py index 1342cc09..ea13e96d 100644 --- a/apps/member/management/commands/import_nk15.py +++ b/apps/member/management/commands/import_nk15.py @@ -4,35 +4,107 @@ from django.core.management.base import BaseCommand from django.utils import timezone import psycopg2 as pg import psycopg2.extras as pge +from django.db import transaction import json +import collections +from django.core.exceptions import ValidationError +from django.contrib.auth.models import User +from note.models import Note, NoteSpecial, NoteUser, NoteClub +from member.models import Profile, Club class Command(BaseCommand): """ Command for importing the database of NK15. Need to be run by a user with a registered role in postgres for the database nk15. """ - help = 'Displays current time' - - def add_arguments(self,parser): - parser.add_argument("--map",type=str,help="json mapping of table header to field models") - def handle(self, *args, **options): - map_file= options.get("map",None) - with open(map_file,'r') as f: - map_dict = json.load(f); - conn = pg.connect(database="nk15",user="nk15_user") cur = conn.cursor(cursor_factory = pge.DictCursor) - # Start with comptes table. - cur.execute("SELECT * FROM comptes ORDER BY -idbde LIMIT 5") - old_fields = [d[0] for d in cur.description] + # Start with Special accounts + cur.execute("SELECT * FROM comptes WHERE idbde <0 ORDER BY idbde;") - - print(type(old_fields)) for row in cur: - for old_field in old_fields: + with transaction.atomic(): + obj,created = NoteSpecial.objects.get_or_create(special_type = row["pseudo"], + balance = row["solde"], + is_active =True) + if created: + obj.save() + # The rest + cur.execute("SELECT * FROM comptes WHERE idbde=0;") + res = cur.fetchone() + clubBde, c = Club.objects.get_or_create(pk = 1, + name = "Bde", + email = "bureau.bde@lists.crans.org", + membership_duration = "396 00:00:00", + membership_start = "213 00:00:00", + membership_end = "273 00:00:00", + membership_fee = 5, + ) + clubKfet, c = Club.objects.get_or_create(pk = 2, + name = "Kfet", + email = "tresorerie.bde@lists.crans.org", + membership_duration = "396 00:00:00", + membership_start = "213 00:00:00", + membership_end = "273 00:00:00", + membership_fee = 35, + ) + clubBde.save() + clubKfet.save() + clubBde.note.solde=res["solde"] - print(old_field,row[old_field]) + cur.execute("SELECT * FROM comptes WHERE idbde > 0 ORDER BY idbde;") + pkclub = 3 + with transaction.atomic(): + for row in cur: + row["idbde"] += 7 # do not overwrite the already populated id. + if row["type"] == "personne": + try: + user = User.objects.create( + username =row["pseudo"], + password = row["passwd"] if row["passwd"] != '*|*' else '', + first_name = row["nom"], + last_name = row["prenom"], + email = row["mail"], + ) + except ValidationError as e: + if e.code == 'same_alias': + user = User.objects.create( + username = row["pseudo"]+str(row["idbde"]), + password = row["passwd"] if row["passwd"] != '*|*' else '', + first_name = row["nom"], + last_name = row["prenom"], + email = row["mail"], + ) + + + profile = Profile.objects.create( + phone_number = row["tel"], + address = row["adresse"], + paid = row["normalien"], + user = user, + ) + note = user.note + note.balance = row["solde"] + + obj_list =[user, profile, note] + else:#club + print(row) + club,c = Club.objects.get_or_create(pk=pkclub, + name = row["pseudo"], + email = row["mail"], + membership_duration = "396 00:00:00", + membership_start = "213 00:00:00", + membership_end = "273 00:00:00", + membership_fee =0, + ) + pkclub +=1 + note = club.note + note.balance = row["solde"] + obj_list = [club,note] + for obj in obj_list: + obj.save() + #endfor