Add member_telephone_number table

This commit is contained in:
2023-05-27 13:08:57 +02:00
parent ca5bc50c1e
commit 17ffbf8702
4 changed files with 97 additions and 44 deletions

View File

@ -154,10 +154,19 @@ def check_iban(iban: str) -> bool:
return modulo(s, 97) == 1
def normalize_phone_nr(nr: str) -> str:
nr = re.sub('[ /-]', '', nr)
def normalize_phone_nr(nr: Optional[str]) -> Optional[str]:
if nr is None:
return None
nr = nr.replace('/', ' ')
if nr[0] == '0':
nr = '+43' + nr[1:]
nr = '+43 ' + nr[1:]
if nr.startswith('+43'):
if nr[4] == '6':
nr = nr.replace(' ', '')
nr = f'{nr[:3]} {nr[3:6]} {nr[6:]}'
elif nr[4] == '2':
nr = nr.replace(' ', '')
nr = f'{nr[:3]} {nr[3:7]} {nr[7:]}'
return nr
@ -268,12 +277,16 @@ def migrate_branches(in_dir: str, out_dir: str) -> None:
BRANCH_MAP = {}
with utils.csv_open(f'{out_dir}/branch.csv') as f:
f.header('zwstid', 'name', 'country', 'postal_dest', 'address', 'phone_nr')
f.header('zwstid', 'name', 'country', 'postal_dest', 'address', 'phone_nr', 'fax_nr', 'mobile_nr')
for b in utils.csv_parse_dict(f'{in_dir}/TZweigstellen.csv'):
BRANCH_MAP[b['ZNR']] = b['Kennbst']
address = b['Straße']
postal_dest = lookup_plz(int(b['PLZ']) if b['PLZ'] else None, b['Ort'], address)
f.row(b['Kennbst'], b['Name'].strip().title(), 'AT', postal_dest, address, b['Telefon'])
tel, mob = normalize_phone_nr(b['Telefon']), None
if tel and tel[4] == '6':
mob, tel = tel, None
f.row(b['Kennbst'], b['Name'].strip().title(), 'AT', postal_dest, address,
tel, normalize_phone_nr(b['Telefax']), mob)
def migrate_grosslagen(in_dir: str, out_dir: str) -> None:
@ -359,16 +372,17 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
fbs = parse_flaechenbindungen(in_dir)
with utils.csv_open(f'{out_dir}/member.csv') as f_m,\
utils.csv_open(f'{out_dir}/member_billing_address.csv') as f_mba,\
utils.csv_open(f'{out_dir}/member_billing_address.csv') as f_mba, \
utils.csv_open(f'{out_dir}/member_telephone_number.csv') as f_tel,\
utils.csv_open(f'{out_dir}/wb_kg.csv', 'a') as f_kg:
f_m.header(
'mgnr', 'predecessor_mgnr', 'prefix', 'given_name', 'middle_names', 'family_name', 'suffix',
'birthday', 'entry_date', 'exit_date', 'business_shares', 'accounting_nr', 'zwstid',
'lfbis_nr', 'ustid', 'volllieferant', 'buchführend', 'funktionär', 'active', 'iban', 'bic',
'country', 'postal_dest', 'address',
'email', 'phone_landline', 'fax', 'phone_mobile_1', 'phone_mobile_2',
'default_kgnr', 'comment')
'email', 'default_kgnr', 'comment')
f_mba.header('mgnr', 'name', 'country', 'postal_dest', 'address')
f_tel.header('mgnr', 'nr', 'type', 'number', 'comment')
for m in members:
mgnr: int = m['MGNR']
@ -521,12 +535,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
if address_old != address:
convert(mgnr, 'Adresse', address_old, address)
phone_1: Optional[str] = m['Telefon']
phone_2: Optional[str] = m['Mobiltelefon']
email: Optional[str] = m['EMail']
phone_landline, fax = None, None
phone_mobile = []
if email is not None:
if email.isupper():
email = email.lower()
@ -534,28 +543,6 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
invalid(mgnr, 'E-Mail', m['EMail'])
email = None
if phone_1:
phone_1 = normalize_phone_nr(phone_1)
if len(phone_1) <= 8 or phone_1[0] != '+':
invalid(mgnr, 'Tel.Nr.', m['Telefon'])
else:
if phone_1[3] == '6':
phone_mobile.append(phone_1)
else:
phone_landline = phone_1
if phone_2:
phone_2 = normalize_phone_nr(phone_2)
if len(phone_2) <= 8 or phone_2[0] != '+':
invalid(mgnr, 'Tel.Nr.', m['Mobiltelefon'])
else:
if phone_2[3] == '6':
if phone_2 not in phone_mobile:
phone_mobile.append(phone_2)
elif phone_landline is None:
phone_landline = phone_2
elif phone_landline != phone_2:
invalid(mgnr, 'Tel.Nr.', phone_2)
zwstid = m['ZNR'] and BRANCH_MAP[m['ZNR']] or len(BRANCH_MAP) == 1 and list(BRANCH_MAP.values())[0]
postal_dest = lookup_plz(int(m['PLZ']) if m['PLZ'] else None, m['Ort'], address)
@ -588,10 +575,45 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
m['Geburtsjahr'], m['Eintrittsdatum'], m['Austrittsdatum'], m['Geschäftsanteile1'] or 0,
m['BHKontonummer'], zwstid, bnr, ustid,
m['Volllieferant'] or False, m['Buchführend'] or False, funktionaer, active,
iban, bic, 'AT', postal_dest, address or '-', email, phone_landline, fax,
phone_mobile[0] if len(phone_mobile) > 0 else None, phone_mobile[1] if len(phone_mobile) > 1 else None,
kgnr, m['Anmerkung']
iban, bic, 'AT', postal_dest, address or '-', email, kgnr, m['Anmerkung']
)
phone_1: Optional[str] = m['Telefon']
phone_2: Optional[str] = m['Telefax']
phone_3: Optional[str] = m['Mobiltelefon']
numbers = []
if phone_1:
phone_1 = normalize_phone_nr(phone_1)
if len(phone_1) <= 10 or phone_1[0] != '+':
invalid(mgnr, 'Tel.Nr.', m['Telefon'])
else:
numbers.append(phone_1)
if phone_1[4] == '6':
f_tel.row(mgnr, len(numbers), 'mobile', phone_1, None)
else:
f_tel.row(mgnr, len(numbers), 'landline', phone_1, None)
if phone_2:
phone_2 = normalize_phone_nr(phone_2)
if len(phone_2) <= 8 or phone_2[0] != '+':
invalid(mgnr, 'Fax.Nr.', m['Telefax'])
else:
numbers.append(phone_2)
if phone_2[4] == '6':
f_tel.row(mgnr, len(numbers), 'mobile', phone_2, None)
else:
f_tel.row(mgnr, len(numbers), 'fax', phone_2, None)
if phone_3:
phone_3 = normalize_phone_nr(phone_3)
if len(phone_3) <= 10 or phone_3[0] != '+':
invalid(mgnr, 'Tel.Nr.', m['Mobiltelefon'])
elif phone_3 not in numbers:
numbers.append(phone_3)
if phone_3[4] == '6':
f_tel.row(mgnr, len(numbers), 'mobile', phone_3, None)
else:
f_tel.row(mgnr, len(numbers), 'landline', phone_3, None)
MEMBER_MAP[mgnr] = {
'default_kgnr': kgnr
}