Migrate GWK phone numbers

This commit is contained in:
2023-05-29 23:11:46 +02:00
parent f50daf733e
commit 4ac40db55a

View File

@ -212,20 +212,37 @@ def check_iban(iban: str) -> bool:
return modulo(s, 97) == 1 return modulo(s, 97) == 1
def normalize_phone_nr(nr: Optional[str]) -> Optional[str]: def normalize_phone_nr(nr: Optional[str], ort: str = None) -> Optional[str]:
if nr is None: if nr is None:
return None return None
nr = nr.replace('/', ' ').strip() nr = nr.replace('/', ' ').strip()
if nr.count('-') > 1 or len(nr.split('-')[-1]) > 3:
nr = nr.replace('-', '')
if nr[0] == '0': if nr[0] == '0':
nr = '+43 ' + nr[1:] nr = '+43 ' + nr[1:]
elif WG == 'GWK' and ort:
ort = ort.upper().strip()
if ort in ('PILLICHSDORF', 'OBERSDORF', 'WOLKERSDORF', 'WOLFPASSING', 'PUTZING', 'GROSSENGERSDORF',
'EIBESBRUNN'):
nr = f'+43 2245 {nr}'
elif ort in ('ALBERNDORF', 'HAUGSDORF', 'AUGGENTHAL', 'HAUGSDORF'):
nr = f'+43 2944 {nr}'
elif ort in ('HADRES'):
nr = f'+43 2943 {nr}'
else:
print(nr, ort)
raise RuntimeError()
if nr.startswith('+43'): if nr.startswith('+43'):
if nr[4] == '6': if nr[4] == '6':
nr = nr.replace(' ', '') nr = nr.replace(' ', '')
nr = f'{nr[:3]} {nr[3:6]} {nr[6:]}' nr = f'{nr[:3]} {nr[3:6]} {nr[6:]}'
elif nr[4] == '1':
nr = nr.replace(' ', '')
nr = f'{nr[:3]} {nr[3]} {nr[3:]}'
elif nr[4] == '2': elif nr[4] == '2':
nr = nr.replace(' ', '') nr = nr.replace(' ', '')
nr = f'{nr[:3]} {nr[3:7]} {nr[7:]}' nr = f'{nr[:3]} {nr[3:7]} {nr[7:]}'
return nr return nr.strip()
def fix_street_name(name: str) -> str: def fix_street_name(name: str) -> str:
@ -755,6 +772,8 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
address = parts[-1] address = parts[-1]
if WG == 'GWK' and ort == 'JETZELDORF': if WG == 'GWK' and ort == 'JETZELDORF':
ort = 'JETZELSDORF' ort = 'JETZELSDORF'
if ort:
ort = ort.upper().strip()
if address is not None: if address is not None:
address_old = address address_old = address
@ -838,8 +857,72 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
if WG == 'GWK': if WG == 'GWK':
# Telefax (phone_2) not used # Telefax (phone_2) not used
numbers = {} numbers = {}
def add_number(nr: str, fax: bool = False, comment: str = None, fax_only: bool = False) -> None:
mob = nr[4] == '6'
numbers[nr] = {'mobile': mob, 'landline': not mob and not fax_only, 'fax': fax, 'comment': None}
if phone_1: if phone_1:
pass # TODO GWK phone_1 phone_1 = phone_1.lower().replace('und', 'u.').replace('auch', 'u.').replace('u.', ' u. ')\
.replace('oder', 'od.').replace(';', 'od.').replace('od.', ' od. ')
phone_1 = re.sub(r'\s+', ' ', phone_1).strip()
fax = False
if phone_1.endswith(' u. fax'):
fax = True
phone_1 = ' '.join(phone_1.split(' ')[:-2])
if phone_1.replace(' ', '').replace('/', '').replace('-', '').isdigit() and len(phone_1) <= 20:
if phone_1[0] != '0' and '/' in phone_1:
for nr in phone_1.split('/'):
add_number(normalize_phone_nr(nr, ort), fax)
else:
add_number(normalize_phone_nr(phone_1, ort), fax)
elif re.fullmatch(r'0[0-9/ -]+ od\. 0[0-9/ -]+', phone_1):
parts = phone_1.split(' od. ')
add_number(normalize_phone_nr(parts[0], ort), False)
add_number(normalize_phone_nr(parts[1], ort), fax)
elif re.fullmatch(r'0[0-9/ -]+ od\. [1-9][0-9/ -]+', phone_1):
parts = phone_1.split(' od. ')
add_number(normalize_phone_nr(parts[0], ort), False)
if parts[0][1] == '6':
add_number(normalize_phone_nr(parts[1], ort), fax)
else:
add_number(normalize_phone_nr(parts[0][:5] + parts[1], ort), fax)
elif re.fullmatch(r'0[0-9/ -]+ fax 0[0-9/ -]+', phone_1):
parts = phone_1.split(' fax ')
add_number(normalize_phone_nr(parts[0], ort), False)
add_number(normalize_phone_nr(parts[1], ort), True, fax_only=True)
elif re.fullmatch(r'0[0-9/ -]+ fax [1-9][0-9/ -]+', phone_1):
parts = phone_1.split(' fax ')
add_number(normalize_phone_nr(parts[0], ort), False)
add_number(normalize_phone_nr(parts[0][:5] + parts[1], ort), True, fax_only=True)
elif '-' in phone_1 and phone_1.endswith('fax'):
nr = re.sub(r'-+ ', '-', phone_1)
nr = ' '.join(nr.split(' ')[:-1])
add_number(normalize_phone_nr(nr.split('-')[0], ort), False)
add_number(normalize_phone_nr(nr, ort), True, fax_only=True)
elif 'fax -' in phone_1:
parts = phone_1.split('fax')
add_number(normalize_phone_nr(parts[0], ort), False)
add_number(normalize_phone_nr(parts[0].strip() + parts[1].strip(), ort), True, fax_only=True)
elif phone_1.endswith('fax'):
nr = phone_1[:-3].strip()
add_number(normalize_phone_nr(nr), False)
add_number(normalize_phone_nr(nr), True, fax_only=True)
elif re.fullmatch(r'0[0-9/ -]+ u\. fax (od\. |u\. )?[0-9/ -]+', phone_1):
parts = phone_1.split(' ')
add_number(normalize_phone_nr(parts[0], ort), True)
nr = parts[-1]
if nr[0] == '0':
add_number(normalize_phone_nr(nr, ort))
else:
add_number(normalize_phone_nr(parts[0][:5] + nr, ort))
else:
parts = phone_1.split(' ')
if parts[-1].isalpha():
add_number(normalize_phone_nr(parts[0], ort), comment=parts[-1])
else:
for nr in parts:
add_number(normalize_phone_nr(nr, ort), fax)
if phone_3: if phone_3:
for nr in phone_3.split(','): for nr in phone_3.split(','):
nr = nr.strip() nr = nr.strip()
@ -851,9 +934,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
elif parts[-1].isalpha(): elif parts[-1].isalpha():
nr = nr[:nr.rindex(' ')].strip() nr = nr[:nr.rindex(' ')].strip()
comment = parts[-1].strip() comment = parts[-1].strip()
nr = normalize_phone_nr(nr) add_number(normalize_phone_nr(nr, ort), comment=comment)
mob = nr[4] == '6'
numbers[nr] = {'mobile': mob, 'landline': not mob, 'fax': False, 'comment': comment}
count = 0 count = 0
for nr, data in numbers.items(): for nr, data in numbers.items():
if data['mobile']: if data['mobile']:
@ -1060,7 +1141,8 @@ def migrate_area_commitments(in_dir: str, out_dir: str) -> None:
gstnrs = [] gstnrs = []
comment, gstnr = None, None comment, gstnr = None, None
if parz is None or parz == '0000': if parz is None or parz == '0000':
invalid(mgnr, 'GstNr.', f'{lookup_kg_name(kgnr)} {kgnr or 0:05}-{parz}') if parz is not None:
invalid(mgnr, 'GstNr.', f'{lookup_kg_name(kgnr)} {kgnr or 0:05}-{parz}')
gstnrs = [] gstnrs = []
gstnr = '-' gstnr = '-'
if len(gstnrs) == 0: if len(gstnrs) == 0: