Small changes in migrate.py

This commit is contained in:
2023-02-24 00:14:21 +01:00
parent 733761777c
commit ae0dcaec34

View File

@ -98,19 +98,29 @@ def format_row(*args) -> str:
def success(mgnr: int, key: str, value: str) -> None: def success(mgnr: int, key: str, value: str) -> None:
print(f'\x1B[1;32m{mgnr:>5}: {key} {value}\x1B[0m', file=sys.stderr) if not args.quiet:
print(f'\x1B[1;32m{mgnr:>6}: {key:<12} {value}\x1B[0m', file=sys.stderr)
def warning(mgnr: int, key: str, value: str) -> None: def warning(mgnr: int, key: str, value: str) -> None:
print(f'\x1B[1;33m{mgnr:>5}: {key} {value}\x1B[0m', file=sys.stderr) print(f'\x1B[1;33m{mgnr:>6}: {key:<12} {value}\x1B[0m', file=sys.stderr)
def invalid(mgnr: int, key: str, value: str) -> None: def invalid(mgnr: int, key: str, value: str) -> None:
print(f'\x1B[1;31m{mgnr:>5}: {key} {value}\x1B[0m', file=sys.stderr) print(f'\x1B[1;31m{mgnr:>6}: {key:<12} {value}\x1B[0m', file=sys.stderr)
def convert(mgnr: int, key: str, old_value: str, new_value: str) -> None: def convert(mgnr: int, key: str, old_value: str, new_value: str) -> None:
print(f'\x1B[1m{mgnr:>5}: {key} "{old_value}" -> "{new_value}"\x1B[0m', file=sys.stderr) if not args.quiet:
print(f'\x1B[1m{mgnr:>6}: {key:<12} "{old_value}" -> "{new_value}"\x1B[0m', file=sys.stderr)
def convert_name(mgnr: int, old_name: Tuple[str, str], new_name: Tuple[str, str, str, str, str], billing: Optional[str] = None) -> None:
if not args.quiet:
print(f'\x1B[1m{mgnr:>6}: '
f'{" / ".join([e or "" for e in old_name])} -> '
f'{" / ".join([e or "" for e in new_name])}'
f'{"(" + billing + ")" if billing else ""}\x1B[0m', file=sys.stderr)
def check_lfbis_nr(nr: str) -> bool: def check_lfbis_nr(nr: str) -> bool:
@ -149,6 +159,8 @@ def check_iban(iban: str) -> bool:
def generate_iban_at(blz: int, ktonr: str) -> str: def generate_iban_at(blz: int, ktonr: str) -> str:
if blz > 99999 or len(ktonr) > 11:
raise RuntimeError()
iban = f'AT00{blz:>05}{ktonr:>011}' iban = f'AT00{blz:>05}{ktonr:>011}'
s = iban_checksum(iban) s = iban_checksum(iban)
return iban.replace('00', f'{s:02}', 1) return iban.replace('00', f'{s:02}', 1)
@ -162,10 +174,7 @@ def normalize_phone_nr(nr: str) -> str:
def parse_branches(in_dir: str) -> Dict[str, Any]: def parse_branches(in_dir: str) -> Dict[str, Any]:
branches = {} return {b['ZNR']: b for b in parse_csv(f'{in_dir}/TZweigstellen.csv')}
for b in parse_csv(f'{in_dir}/TZweigstellen.csv'):
branches[b['ZNR']] = b
return branches
def migrate_members(in_dir: str, out_dir: str) -> None: def migrate_members(in_dir: str, out_dir: str) -> None:
@ -196,22 +205,13 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
given_name = re.sub('\s+', ' ', given_name).strip().replace(', ', ',') given_name = re.sub('\s+', ' ', given_name).strip().replace(', ', ',')
if ' ' in family_name or '.' in family_name or ',' in family_name: if ' ' in family_name or '.' in family_name or ',' in family_name:
print('')
print(f'{mgnr}: {family_name} / {given_name}')
if family_name.endswith(' KG'): if family_name.endswith(' KG'):
parts = family_name.split(' ') parts = family_name.split(' ')
family_name = parts[0].title() family_name = parts[0].title()
billing_name = f'{family_name} KG' billing_name = f'{family_name} KG'
print(f' -> {prefix or ""} / {given_name or ""} / {middle_names or ""} / {family_name or ""} / {suffix or ""}') convert_name(mgnr, (m['Nachname'], m['Vorname']), (prefix, given_name, middle_names, family_name, suffix), billing_name)
if billing_name:
print(f' -> {billing_name}')
print('')
elif (' ' in given_name or '.' in given_name or ',' in given_name) and given_name != 'EVA MARIA': elif (' ' in given_name or '.' in given_name or ',' in given_name) and given_name != 'EVA MARIA':
print('')
print(f'{mgnr}: {family_name} / {given_name}')
if ' u. ' in given_name.lower() or ' u ' in given_name.lower() or ' und ' in given_name.lower(): if ' u. ' in given_name.lower() or ' u ' in given_name.lower() or ' und ' in given_name.lower():
parts = given_name.split(' ') parts = given_name.split(' ')
family_name = family_name.title() family_name = family_name.title()
@ -249,12 +249,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
if prefix[-1] != '.': if prefix[-1] != '.':
prefix += '.' prefix += '.'
if prefix: convert_name(mgnr, (m['Nachname'], m['Vorname']), (prefix, given_name, middle_names, family_name, suffix), billing_name)
prefix = prefix.replace('Dipl.Ing.', 'Dipl.-Ing.')
print(f' -> {prefix or ""} / {given_name or ""} / {middle_names or ""} / {family_name or ""} / {suffix or ""}')
if billing_name:
print(f' -> {billing_name}')
print('')
else: else:
family_name = family_name.title() family_name = family_name.title()
given_name = given_name.title() given_name = given_name.title()
@ -268,9 +263,9 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
bnr = '0' + bnr bnr = '0' + bnr
if not check_lfbis_nr(bnr): if not check_lfbis_nr(bnr):
if bnr == '1234567': if bnr == '1234567':
warning(mgnr, 'Betriebsnr.', bnr) warning(mgnr, 'BetriebsNr.', bnr)
else: else:
invalid(mgnr, 'Betriebsnr.', bnr) invalid(mgnr, 'BetriebsNr.', bnr)
bnr = None bnr = None
@ -322,20 +317,20 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
address: Optional[str] = m['Straße'] address: Optional[str] = m['Straße']
if address is not None: if address is not None:
address_old = address address_old = address
address = re.sub('([0-9])([A-Z])', lambda m: m.group(1) + m.group(2).lower(), re.sub('\s+', ' ', address).strip().title()) address = re.sub('([0-9])([A-Z])', lambda a: a.group(1) + a.group(2).lower(), re.sub('\s+', ' ', address).strip().title())
address = address.replace('strasse', 'straße').replace('strassse', 'straße')\ address = address.replace('strasse', 'straße').replace('strassse', 'straße')\
.replace('Strasse', 'Straße').replace('Str.', 'Straße')\ .replace('Strasse', 'Straße').replace('Str.', 'Straße')\
.replace('str.', 'straße').replace('ster.', 'straße').replace('g. ', 'gasse ')\ .replace('str.', 'straße').replace('ster.', 'straße').replace('g. ', 'gasse ')\
.replace('Gross', 'Groß').replace('Bockfliess', 'Bockfließ').replace('Weiss', 'Weiß')\ .replace('Gross', 'Groß').replace('Bockfliess', 'Bockfließ').replace('Weiss', 'Weiß')\
.replace('Preussen', 'Preußen').replace('Schloss', 'Schloß').replace('luss', 'luß')\ .replace('Preussen', 'Preußen').replace('Schloss', 'Schloß').replace('luss', 'luß')\
.replace('Haupstraße', 'Hauptstraße') .replace('Haupstraße', 'Hauptstraße')
address = re.sub('([a-z])([0-9])', lambda m: m.group(1) + ' ' + m.group(2), address) address = re.sub('([a-z])([0-9])', lambda a: a.group(1) + ' ' + a.group(2), address)
if address.startswith('Nr. ') or address.startswith('Nr ') or address.isdigit(): if address.startswith('Nr. ') or address.startswith('Nr ') or address.isdigit():
address = ort.title() + ' ' + address.split(' ')[-1] address = ort.title() + ' ' + address.split(' ')[-1]
elif address.startswith('Ob. '): elif address.startswith('Ob. '):
address = address.replace('Ob. ', 'Obere ', 1) address = address.replace('Ob. ', 'Obere ', 1)
address = address.replace(' Nr. ', ' ') address = address.replace(' Nr. ', ' ')
address = re.sub(r'([^0-9]+?)( [0-9])', lambda m: STREET_NAMES.get(m.group(1), m.group(1)) + m.group(2), address) address = re.sub(r'([^0-9]+?)( [0-9])', lambda a: STREET_NAMES.get(a.group(1), a.group(1)) + a.group(2), address)
if address_old != address: if address_old != address:
convert(mgnr, 'Adresse', address_old, address) convert(mgnr, 'Adresse', address_old, address)
@ -391,6 +386,7 @@ if __name__ == '__main__':
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('in_dir') parser.add_argument('in_dir')
parser.add_argument('out_dir') parser.add_argument('out_dir')
parser.add_argument('-q', '--quiet', action='store_true', default=False)
args = parser.parse_args() args = parser.parse_args()
os.makedirs(args.out_dir, exist_ok=True) os.makedirs(args.out_dir, exist_ok=True)