Update client parameters and change Ustid to UstIdNr

This commit is contained in:
2023-08-17 16:48:31 +02:00
parent a506c225aa
commit f888c02c8c
2 changed files with 51 additions and 42 deletions

View File

@ -297,12 +297,12 @@ CREATE TABLE member (
accounting_nr TEXT DEFAULT NULL,
zwstid TEXT CHECK (NOT active OR zwstid IS NOT NULL),
lfbis_nr TEXT CHECK (lfbis_nr REGEXP '^[0-9]{7}$') DEFAULT NULL,
ustid TEXT CHECK (ustid REGEXP '^[A-Z]{2}[A-Z0-9]{2,12}$') DEFAULT NULL,
volllieferant INTEGER NOT NULL CHECK (volllieferant IN (TRUE, FALSE)) DEFAULT FALSE,
buchführend INTEGER NOT NULL CHECK (buchführend IN (TRUE, FALSE)) DEFAULT FALSE,
funktionär INTEGER NOT NULL CHECK (funktionär IN (TRUE, FALSE)) DEFAULT FALSE,
active INTEGER NOT NULL CHECK (active IN (TRUE, FALSE)) DEFAULT TRUE,
lfbis_nr TEXT CHECK (lfbis_nr REGEXP '^[0-9]{7}$') DEFAULT NULL,
ustid_nr TEXT CHECK (ustid_nr REGEXP '^[A-Z]{2}[A-Z0-9]{2,12}$') DEFAULT NULL,
volllieferant INTEGER NOT NULL CHECK (volllieferant IN (TRUE, FALSE)) DEFAULT FALSE,
buchführend INTEGER NOT NULL CHECK (buchführend IN (TRUE, FALSE)) DEFAULT FALSE,
funktionär INTEGER NOT NULL CHECK (funktionär IN (TRUE, FALSE)) DEFAULT FALSE,
active INTEGER NOT NULL CHECK (active IN (TRUE, FALSE)) DEFAULT TRUE,
iban TEXT CHECK (iban REGEXP '^[A-Z]{2}[0-9]{2}[A-Z0-9]{8,30}$') DEFAULT NULL,
bic TEXT CHECK (bic REGEXP '^[A-Z0-9]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$') DEFAULT NULL,

View File

@ -18,7 +18,7 @@ DB_CNX: Optional[sqlite3.Connection] = None
QUIET: bool = False
WG: Optional[str] = None
USTID_RE = re.compile(r'[A-Z]{2}[A-Z0-9]{2,12}')
USTID_NR_RE = re.compile(r'[A-Z]{2}[A-Z0-9]{2,12}')
BIC_RE = re.compile(r'[A-Z0-9]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?')
IBAN_RE = re.compile(r'[A-Z]{2}[0-9]{2}[A-Z0-9]{8,30}')
EMAIL_RE = re.compile(r'[^@\s]+@([A-Za-z0-9_äöüß-]+\.)+[A-Za-z]{2,}')
@ -193,7 +193,7 @@ def check_lfbis_nr(nr: str) -> bool:
return v == int(nr[-1])
def check_ustid_at(nr: str) -> bool:
def check_ustid_nr_at(nr: str) -> bool:
# http://www.pruefziffernberechnung.de/U/USt-IdNr.shtml
if not nr.startswith('ATU') or len(nr) != 11 or not nr[3:].isdigit():
return False
@ -621,7 +621,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
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',
'lfbis_nr', 'ustid_nr', 'volllieferant', 'buchführend', 'funktionär', 'active', 'iban', 'bic',
'country', 'postal_dest', 'address',
'email', 'default_kgnr', 'comment')
f_mba.header('mgnr', 'name', 'country', 'postal_dest', 'address')
@ -718,20 +718,20 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
invalid(mgnr, 'BetriebsNr.', bnr)
bnr = None
ustid: Optional[str] = m['UID']
if ustid is not None:
ustid = ustid.replace(' ', '')
if len(ustid) == 8 and ustid.isdigit():
ustid = 'ATU' + ustid
elif not USTID_RE.fullmatch(ustid):
invalid(mgnr, 'UID', ustid)
ustid = None
if ustid and not check_ustid_at(ustid):
if ustid == 'ATU11111111':
warning(mgnr, 'UID', ustid)
ustid_nr: Optional[str] = m['UID']
if ustid_nr is not None:
ustid_nr = ustid_nr.replace(' ', '')
if len(ustid_nr) == 8 and ustid_nr.isdigit():
ustid_nr = 'ATU' + ustid_nr
elif not USTID_NR_RE.fullmatch(ustid_nr):
invalid(mgnr, 'UID', ustid_nr)
ustid_nr = None
if ustid_nr and not check_ustid_nr_at(ustid_nr):
if ustid_nr == 'ATU11111111':
warning(mgnr, 'UID', ustid_nr)
else:
invalid(mgnr, 'UID', ustid)
ustid = None
invalid(mgnr, 'UID', ustid_nr)
ustid_nr = None
iban: Optional[str] = m['IBAN']
bic: Optional[str] = m['BIC']
@ -850,7 +850,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
f_m.row(
mgnr, pred, prefix, given_name, middle_names, family_name, suffix,
m['Geburtsjahr'], m['Eintrittsdatum'], m['Austrittsdatum'], m['Geschäftsanteile1'] or 0,
m['BHKontonummer'], zwstid, bnr, ustid,
m['BHKontonummer'], zwstid, bnr, ustid_nr,
m['Volllieferant'] or False, m['Buchführend'] or False, funktionaer, active,
iban, bic, AUSTRIA, postal_dest, address or '-', email, kgnr, m['Anmerkung']
)
@ -1557,31 +1557,40 @@ def migrate_payments(in_dir: str, out_dir: str) -> None:
def migrate_parameters(in_dir: str, out_dir: str) -> None:
params: Dict[str, str] = {p['Bezeichnung']: p['Wert'] for p in utils.csv_parse_dict(f'{in_dir}/TParameter.csv')}
name = params['MANDANTENNAME1'].title().replace('F.', 'für').replace('U.', 'und')
shortened = name.replace(' für ', ' f. ').replace(' und ', ' u. ')
name = params['MANDANTENNAME1'].title().replace('F.', 'für').replace('U.', 'und').replace(' Im ', 'im')
shortened = name.replace(' für ', ' f. ').replace(' und ', ' u. ').replace(' im ', ' i. ')
suffix = params['MANDANTENNAME2'].lower().replace(' ', '').replace('.', '')
suffixes = {
types = {
'reggenmbh': 'reg. Gen.m.b.H.'
}
tokens = {
'MATZEN': ('WGM', 'WG Matzen'),
'GWK': ('GWK', 'GWK')
}.get(WG, (None, None))
ort = params['MANDANTENORT'].title()
new_params: Dict[str, Optional[str]] = {
'NAME_TOKEN': None,
'NAME_SHORT': None,
'NAME_SHORTENED': shortened,
'NAME': name,
'NAME_SUFFIX': suffixes[suffix],
'PLZ': params['MANDANTENPLZ'],
'ORT': params['MANDANTENORT'],
'ADDRESS': params['MANDANTENSTRASSE'],
'CLIENT_NAME_TOKEN': tokens[0],
'CLIENT_NAME_SHORT': tokens[1],
'CLIENT_NAME_SHORTENED': shortened,
'CLIENT_NAME': name,
'CLIENT_NAME_SUFFIX': None,
'CLIENT_NAME_TYPE': types[suffix],
'CLIENT_PLZ': params['MANDANTENPLZ'],
'CLIENT_ORT': ort,
'CLIENT_ADDRESS': params['MANDANTENSTRASSE'],
'CLIENT_IBAN': None,
'CLIENT_BIC': None,
'CLIENT_USTIDNR': params['MANDANTENUID'].replace(' ', ''),
'CLIENT_LFBISNR': params['MANDANTENBETRIEBSNUMMER'],
'CLIENT_PHONE': normalize_phone_nr(params['MANDANTENTELEFON'], ort),
'CLIENT_FAX': normalize_phone_nr(params['MANDANTENTELEFAX'], ort),
'CLIENT_EMAIL': params['MANDANTENEMAIL'],
'CLIENT_WEBSITE': params.get('MANDANTENHOMEPAGE', None),
'DELIVERY_OBLIGATION': params.get('LIEFERPFLICHT/GA1', None),
'DELIVERY_RIGHT': params.get('LIEFERRECHT/GA1', None),
'DOCUMENT_SENDER': params.get('ABSENDERTEXT2', None),
'IBAN': None,
'BIC': None,
'USTID': params['MANDANTENUID'].replace(' ', ''),
'LFBISNR': params['MANDANTENBETRIEBSNUMMER'],
'PHONE': params['MANDANTENTELEFON'],
'FAX': params['MANDANTENTELEFAX'],
'EMAIL': params['MANDANTENEMAIL'],
'WEBSITE': params.get('MANDANTENHOMEPAGE', None),
'DELIVERY_NOTE_TEXT': params.get('LIEFERSCHEINTEXT', None).replace(' daß ', ' dass '),
}
with utils.csv_open(f'{out_dir}/client_parameter.csv') as f: