diff --git a/wgmaster/migrate.py b/wgmaster/migrate.py index f341de9..3e953ac 100755 --- a/wgmaster/migrate.py +++ b/wgmaster/migrate.py @@ -212,20 +212,37 @@ def check_iban(iban: str) -> bool: 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: return None nr = nr.replace('/', ' ').strip() + if nr.count('-') > 1 or len(nr.split('-')[-1]) > 3: + nr = nr.replace('-', '') if nr[0] == '0': 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[4] == '6': nr = nr.replace(' ', '') 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': nr = nr.replace(' ', '') nr = f'{nr[:3]} {nr[3:7]} {nr[7:]}' - return nr + return nr.strip() def fix_street_name(name: str) -> str: @@ -755,6 +772,8 @@ def migrate_members(in_dir: str, out_dir: str) -> None: address = parts[-1] if WG == 'GWK' and ort == 'JETZELDORF': ort = 'JETZELSDORF' + if ort: + ort = ort.upper().strip() if address is not None: address_old = address @@ -838,8 +857,72 @@ def migrate_members(in_dir: str, out_dir: str) -> None: if WG == 'GWK': # Telefax (phone_2) not used 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: - 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: for nr in phone_3.split(','): nr = nr.strip() @@ -851,9 +934,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None: elif parts[-1].isalpha(): nr = nr[:nr.rindex(' ')].strip() comment = parts[-1].strip() - nr = normalize_phone_nr(nr) - mob = nr[4] == '6' - numbers[nr] = {'mobile': mob, 'landline': not mob, 'fax': False, 'comment': comment} + add_number(normalize_phone_nr(nr, ort), comment=comment) count = 0 for nr, data in numbers.items(): if data['mobile']: @@ -1060,7 +1141,8 @@ def migrate_area_commitments(in_dir: str, out_dir: str) -> None: gstnrs = [] comment, gstnr = None, None 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 = [] gstnr = '-' if len(gstnrs) == 0: