Update client parameters and change Ustid to UstIdNr
This commit is contained in:
@ -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,
|
||||
|
@ -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:
|
||||
|
Reference in New Issue
Block a user