Update client parameters and change Ustid to UstIdNr
This commit is contained in:
@ -298,7 +298,7 @@ CREATE TABLE member (
|
|||||||
zwstid TEXT CHECK (NOT active OR zwstid IS NOT NULL),
|
zwstid TEXT CHECK (NOT active OR zwstid IS NOT NULL),
|
||||||
|
|
||||||
lfbis_nr TEXT CHECK (lfbis_nr REGEXP '^[0-9]{7}$') DEFAULT 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,
|
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,
|
volllieferant INTEGER NOT NULL CHECK (volllieferant IN (TRUE, FALSE)) DEFAULT FALSE,
|
||||||
buchführend INTEGER NOT NULL CHECK (buchführend 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,
|
funktionär INTEGER NOT NULL CHECK (funktionär IN (TRUE, FALSE)) DEFAULT FALSE,
|
||||||
|
@ -18,7 +18,7 @@ DB_CNX: Optional[sqlite3.Connection] = None
|
|||||||
QUIET: bool = False
|
QUIET: bool = False
|
||||||
WG: Optional[str] = None
|
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})?')
|
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}')
|
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,}')
|
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])
|
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
|
# http://www.pruefziffernberechnung.de/U/USt-IdNr.shtml
|
||||||
if not nr.startswith('ATU') or len(nr) != 11 or not nr[3:].isdigit():
|
if not nr.startswith('ATU') or len(nr) != 11 or not nr[3:].isdigit():
|
||||||
return False
|
return False
|
||||||
@ -621,7 +621,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
|
|||||||
f_m.header(
|
f_m.header(
|
||||||
'mgnr', 'predecessor_mgnr', 'prefix', 'given_name', 'middle_names', 'family_name', 'suffix',
|
'mgnr', 'predecessor_mgnr', 'prefix', 'given_name', 'middle_names', 'family_name', 'suffix',
|
||||||
'birthday', 'entry_date', 'exit_date', 'business_shares', 'accounting_nr', 'zwstid',
|
'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',
|
'country', 'postal_dest', 'address',
|
||||||
'email', 'default_kgnr', 'comment')
|
'email', 'default_kgnr', 'comment')
|
||||||
f_mba.header('mgnr', 'name', 'country', 'postal_dest', 'address')
|
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)
|
invalid(mgnr, 'BetriebsNr.', bnr)
|
||||||
bnr = None
|
bnr = None
|
||||||
|
|
||||||
ustid: Optional[str] = m['UID']
|
ustid_nr: Optional[str] = m['UID']
|
||||||
if ustid is not None:
|
if ustid_nr is not None:
|
||||||
ustid = ustid.replace(' ', '')
|
ustid_nr = ustid_nr.replace(' ', '')
|
||||||
if len(ustid) == 8 and ustid.isdigit():
|
if len(ustid_nr) == 8 and ustid_nr.isdigit():
|
||||||
ustid = 'ATU' + ustid
|
ustid_nr = 'ATU' + ustid_nr
|
||||||
elif not USTID_RE.fullmatch(ustid):
|
elif not USTID_NR_RE.fullmatch(ustid_nr):
|
||||||
invalid(mgnr, 'UID', ustid)
|
invalid(mgnr, 'UID', ustid_nr)
|
||||||
ustid = None
|
ustid_nr = None
|
||||||
if ustid and not check_ustid_at(ustid):
|
if ustid_nr and not check_ustid_nr_at(ustid_nr):
|
||||||
if ustid == 'ATU11111111':
|
if ustid_nr == 'ATU11111111':
|
||||||
warning(mgnr, 'UID', ustid)
|
warning(mgnr, 'UID', ustid_nr)
|
||||||
else:
|
else:
|
||||||
invalid(mgnr, 'UID', ustid)
|
invalid(mgnr, 'UID', ustid_nr)
|
||||||
ustid = None
|
ustid_nr = None
|
||||||
|
|
||||||
iban: Optional[str] = m['IBAN']
|
iban: Optional[str] = m['IBAN']
|
||||||
bic: Optional[str] = m['BIC']
|
bic: Optional[str] = m['BIC']
|
||||||
@ -850,7 +850,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
|
|||||||
f_m.row(
|
f_m.row(
|
||||||
mgnr, pred, prefix, given_name, middle_names, family_name, suffix,
|
mgnr, pred, prefix, given_name, middle_names, family_name, suffix,
|
||||||
m['Geburtsjahr'], m['Eintrittsdatum'], m['Austrittsdatum'], m['Geschäftsanteile1'] or 0,
|
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,
|
m['Volllieferant'] or False, m['Buchführend'] or False, funktionaer, active,
|
||||||
iban, bic, AUSTRIA, postal_dest, address or '-', email, kgnr, m['Anmerkung']
|
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:
|
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')}
|
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')
|
name = params['MANDANTENNAME1'].title().replace('F.', 'für').replace('U.', 'und').replace(' Im ', 'im')
|
||||||
shortened = name.replace(' für ', ' f. ').replace(' und ', ' u. ')
|
shortened = name.replace(' für ', ' f. ').replace(' und ', ' u. ').replace(' im ', ' i. ')
|
||||||
suffix = params['MANDANTENNAME2'].lower().replace(' ', '').replace('.', '')
|
suffix = params['MANDANTENNAME2'].lower().replace(' ', '').replace('.', '')
|
||||||
suffixes = {
|
types = {
|
||||||
'reggenmbh': 'reg. Gen.m.b.H.'
|
'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]] = {
|
new_params: Dict[str, Optional[str]] = {
|
||||||
'NAME_TOKEN': None,
|
'CLIENT_NAME_TOKEN': tokens[0],
|
||||||
'NAME_SHORT': None,
|
'CLIENT_NAME_SHORT': tokens[1],
|
||||||
'NAME_SHORTENED': shortened,
|
'CLIENT_NAME_SHORTENED': shortened,
|
||||||
'NAME': name,
|
'CLIENT_NAME': name,
|
||||||
'NAME_SUFFIX': suffixes[suffix],
|
'CLIENT_NAME_SUFFIX': None,
|
||||||
'PLZ': params['MANDANTENPLZ'],
|
'CLIENT_NAME_TYPE': types[suffix],
|
||||||
'ORT': params['MANDANTENORT'],
|
'CLIENT_PLZ': params['MANDANTENPLZ'],
|
||||||
'ADDRESS': params['MANDANTENSTRASSE'],
|
'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),
|
'DOCUMENT_SENDER': params.get('ABSENDERTEXT2', None),
|
||||||
'IBAN': None,
|
'DELIVERY_NOTE_TEXT': params.get('LIEFERSCHEINTEXT', None).replace(' daß ', ' dass '),
|
||||||
'BIC': None,
|
|
||||||
'USTID': params['MANDANTENUID'].replace(' ', ''),
|
|
||||||
'LFBISNR': params['MANDANTENBETRIEBSNUMMER'],
|
|
||||||
'PHONE': params['MANDANTENTELEFON'],
|
|
||||||
'FAX': params['MANDANTENTELEFAX'],
|
|
||||||
'EMAIL': params['MANDANTENEMAIL'],
|
|
||||||
'WEBSITE': params.get('MANDANTENHOMEPAGE', None),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
with utils.csv_open(f'{out_dir}/client_parameter.csv') as f:
|
with utils.csv_open(f'{out_dir}/client_parameter.csv') as f:
|
||||||
|
Reference in New Issue
Block a user