Import gwk
This commit is contained in:
@ -20,7 +20,7 @@ WG: Optional[str] = None
|
|||||||
USTID_RE = re.compile(r'[A-Z]{2}[A-Z0-9]{2,12}')
|
USTID_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-z0-9_äöüß-]+\.)+[a-z]{2,}')
|
EMAIL_RE = re.compile(r'[^@\s]+@([A-Za-z0-9_äöüß-]+\.)+[A-Za-z]{2,}')
|
||||||
|
|
||||||
GRADATION_MAP: Optional[Dict[float, float]] = None
|
GRADATION_MAP: Optional[Dict[float, float]] = None
|
||||||
CULTIVATION_MAP: Optional[Dict[int, str]] = None
|
CULTIVATION_MAP: Optional[Dict[int, str]] = None
|
||||||
@ -39,6 +39,7 @@ QUAL_MAP: Dict[int, str] = {
|
|||||||
5: 'SPL',
|
5: 'SPL',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# TODO GWK streetnames
|
||||||
STREET_NAMES: Dict[str, str] = {
|
STREET_NAMES: Dict[str, str] = {
|
||||||
'Hans-Wagnerstraße': 'Hans-Wagner-Straße',
|
'Hans-Wagnerstraße': 'Hans-Wagner-Straße',
|
||||||
'J.Seitzstraße': 'Josef-Seitz-Straße',
|
'J.Seitzstraße': 'Josef-Seitz-Straße',
|
||||||
@ -155,7 +156,7 @@ def check_iban(iban: str) -> bool:
|
|||||||
def normalize_phone_nr(nr: Optional[str]) -> Optional[str]:
|
def normalize_phone_nr(nr: Optional[str]) -> Optional[str]:
|
||||||
if nr is None:
|
if nr is None:
|
||||||
return None
|
return None
|
||||||
nr = nr.replace('/', ' ')
|
nr = nr.replace('/', ' ').strip()
|
||||||
if nr[0] == '0':
|
if nr[0] == '0':
|
||||||
nr = '+43 ' + nr[1:]
|
nr = '+43 ' + nr[1:]
|
||||||
if nr.startswith('+43'):
|
if nr.startswith('+43'):
|
||||||
@ -188,22 +189,42 @@ def parse_flaechenbindungen(in_dir: str) -> Dict[int, Dict[int, Dict[str, Any]]]
|
|||||||
def lookup_plz(plz: Optional[int], ort: Optional[str], address: Optional[str] = None) -> Optional[int]:
|
def lookup_plz(plz: Optional[int], ort: Optional[str], address: Optional[str] = None) -> Optional[int]:
|
||||||
if plz is None or ort is None:
|
if plz is None or ort is None:
|
||||||
return None
|
return None
|
||||||
|
ort = ort.replace('0', 'O').replace('SZ', 'SS')
|
||||||
|
if ort.upper() == 'PILLICHSDORF' and plz == 2212:
|
||||||
|
plz = 2211
|
||||||
|
elif ort.upper() == 'ENZERSFELD' and plz == 2203:
|
||||||
|
plz = 2202
|
||||||
|
elif ort.upper() == 'GROSSEBERSDORF' and plz == 2212:
|
||||||
|
ort = 'GROSSENGERSDORF'
|
||||||
|
elif ort.upper() == 'MÜNICHSTHAL' and plz == 2123:
|
||||||
|
plz = 2122
|
||||||
|
elif ort.upper() == 'FRAUENDORF' and plz == 3710:
|
||||||
|
plz = 3714
|
||||||
|
elif ort.upper() == 'MAISSAU' and plz == 3721:
|
||||||
|
ort = 'UNTERDÜRNBACH'
|
||||||
|
elif ort.upper() in ('KLEINRIEDENTHAL', 'KLEINHÖFLEIN', 'KLEIN HÖFLEIN') and plz == 2074:
|
||||||
|
plz = 2070
|
||||||
|
elif ort.upper() == 'DROSENDORF' and plz == 2095:
|
||||||
|
ort = 'DROSENDORF ALTSTADT'
|
||||||
|
elif ort.upper() == 'KLEINWEIKERSDORF' and plz == 2033:
|
||||||
|
plz = 2023
|
||||||
|
|
||||||
cur = DB_CNX.cursor()
|
cur = DB_CNX.cursor()
|
||||||
cur.execute("SELECT o.okz, p.dest, o.name FROM AT_plz_dest p JOIN AT_ort o ON o.okz = p.okz WHERE plz = ?", (plz,))
|
cur.execute("SELECT o.okz, p.dest, o.name FROM AT_plz_dest p JOIN AT_ort o ON o.okz = p.okz WHERE plz = ?", (plz,))
|
||||||
rows: List[Tuple[int, str, str]] = cur.fetchall()
|
rows: List[Tuple[int, str, str]] = cur.fetchall()
|
||||||
cur.close()
|
cur.close()
|
||||||
|
|
||||||
ort_m = ort.lower().replace('gr.', 'groß').replace(' ', '').replace('-', '').replace('ß', 'ss')
|
ort_m = re.sub(r'\d+', '', ort).lower().replace('gr.', 'groß').replace(' ', '').replace('-', '').replace('ß', 'ss')
|
||||||
rows_m = [r[0] for r in rows if ort_m in r[2].lower().replace(' ', '').replace('-', '').replace('ß', 'ss')]
|
rows_m = [r[0] for r in rows if ort_m in r[2].lower().replace(' ', '').replace('-', '').replace('ß', 'ss')]
|
||||||
|
if len(rows_m) > 1:
|
||||||
|
rows_m = [r[0] for r in rows if ort_m == r[2].lower().replace(' ', '').replace('-', '').replace('ß', 'ss')]
|
||||||
if len(rows_m) == 1:
|
if len(rows_m) == 1:
|
||||||
return plz * 100000 + rows_m[0]
|
return plz * 100000 + rows_m[0]
|
||||||
|
|
||||||
parts = address.split(' ')
|
|
||||||
street = parts[:-1]
|
|
||||||
nr = int(parts[-1].split('-')[0])
|
|
||||||
|
|
||||||
if ort == 'VELM-GÖTZENDORF':
|
if ort == 'VELM-GÖTZENDORF':
|
||||||
|
parts = address.split(' ')
|
||||||
|
street = parts[:-1]
|
||||||
|
nr = int(parts[-1].split('-')[0])
|
||||||
if street == 'Landstraße' and nr <= 48 \
|
if street == 'Landstraße' and nr <= 48 \
|
||||||
or street == 'Winterzeile' and (nr <= 49 or nr in (52, 54, 56)) \
|
or street == 'Winterzeile' and (nr <= 49 or nr in (52, 54, 56)) \
|
||||||
or street == 'Hauptstraße' and (nr <= 106 or nr in (117, 115, 113, 111, 109, 107)):
|
or street == 'Hauptstraße' and (nr <= 106 or nr in (117, 115, 113, 111, 109, 107)):
|
||||||
@ -231,23 +252,90 @@ def lookup_kgnr(okz: Optional[int]) -> Optional[int]:
|
|||||||
|
|
||||||
|
|
||||||
def lookup_gem_name(name: str) -> List[Tuple[int, int]]:
|
def lookup_gem_name(name: str) -> List[Tuple[int, int]]:
|
||||||
if name.lower() == 'dörfles':
|
gem_name, hkid = None, None
|
||||||
return [(6004, 30860)]
|
if WG == 'MATZEN':
|
||||||
elif name.lower() == 'velm-götzendorf':
|
hkid = "'WLWV'"
|
||||||
return [(6027, 30859), (6007, 30859)]
|
if name.lower() == 'dörfles':
|
||||||
elif name.lower() == 'grub':
|
gem_name = 'Weikendorf'
|
||||||
name = 'Grub an der March'
|
elif name.lower() == 'velm-götzendorf':
|
||||||
|
return [(6027, 30859), (6007, 30859)]
|
||||||
|
elif name.lower() == 'grub':
|
||||||
|
name = 'Grub an der March'
|
||||||
|
elif WG == 'GWK':
|
||||||
|
hkid = "'WLWV', 'WIEN', 'WLWG', 'WLWA'"
|
||||||
|
if name.endswith('*'):
|
||||||
|
# TODO do something with *
|
||||||
|
name = name[:-1].strip()
|
||||||
|
if name.lower() == 'kreuttal':
|
||||||
|
return [(15206, 31627), (15221, 31627), (15226, 31627)]
|
||||||
|
elif name.lower() == 'hochleithen':
|
||||||
|
return [(15219, 31622), (15223, 31622), (15202, 31622)]
|
||||||
|
elif name.lower() == 'wolfpassing':
|
||||||
|
gem_name = 'Hochleithen'
|
||||||
|
elif name.lower() == 'seebarn':
|
||||||
|
gem_name = 'Harmannsdorf'
|
||||||
|
elif name.lower() == 'königsbrunn':
|
||||||
|
gem_name = 'Enzersfeld im Weinviertel'
|
||||||
|
elif name.lower() == 'wien':
|
||||||
|
return [(1616, 90001), (1617, 90001)]
|
||||||
|
elif name.lower() in ('sitzendorf', 'roseldorf', 'frauendorf'):
|
||||||
|
gem_name = 'Sitzendorf an der Schmida'
|
||||||
|
elif name.lower() == 'dietersdorf':
|
||||||
|
gem_name = 'Hollabrunn'
|
||||||
|
elif name.lower() == 'altenmarkt':
|
||||||
|
name = 'Altenmarkt im Thale'
|
||||||
|
elif name.lower() == 'eitzerstal':
|
||||||
|
name = 'Eitzersthal'
|
||||||
|
elif name.lower() == 'gross':
|
||||||
|
gem_name = 'Hollabrunn'
|
||||||
|
elif name.lower() == 'auggenthal':
|
||||||
|
name = 'Augenthal'
|
||||||
|
elif name.lower() == 'karlsdorf':
|
||||||
|
name = 'Pfaffendorf'
|
||||||
|
elif name.lower() == 'kleinhaugsdorf':
|
||||||
|
name = 'Augenthal'
|
||||||
|
elif name.lower() == 'merkersdorf':
|
||||||
|
gem_name = 'Hardegg'
|
||||||
|
elif name.lower() == 'retz':
|
||||||
|
name = 'Retz Altstadt'
|
||||||
|
elif name.lower() == 'heldenberg':
|
||||||
|
return [(9112, 31019), (9132, 31019), (9131, 31019), (9141, 31019), (9140, 31019)]
|
||||||
|
elif name.lower() == 'retzbach':
|
||||||
|
return [(18129, 31038), (18112, 31038), (18117, 31038)]
|
||||||
|
elif name.lower() == 'dietmannsdorf':
|
||||||
|
gem_name = 'Zellerndorf'
|
||||||
|
elif name.lower() == 'sierndorf':
|
||||||
|
gem_name = 'Sierndorf'
|
||||||
|
elif name.lower() == 'waltersdorf':
|
||||||
|
gem_name = 'Staatz'
|
||||||
|
elif name.lower() == 'viendorf':
|
||||||
|
name = 'Viendorf Weingebirge'
|
||||||
|
elif name.lower() == 'stoitzendorf':
|
||||||
|
return [(10137, 31105)]
|
||||||
|
elif name.lower() in ('klein reinprechtsdorf', 'unter nalb', 'klein stelzendorf', 'klein kirchberg'):
|
||||||
|
name = name.replace(' ', '')
|
||||||
|
elif name.lower() == 'drosendorf':
|
||||||
|
name = 'Drosendorf Stadt'
|
||||||
|
elif name.lower() == 'etzmannsdorf':
|
||||||
|
name = 'Etzmannsdorf bei Straning'
|
||||||
|
elif name.lower() == 'roggendorf':
|
||||||
|
gem_name = 'Röschitz'
|
||||||
|
elif name.lower() == 'wilhelmsdorf':
|
||||||
|
gem_name = 'Poysdorf'
|
||||||
|
|
||||||
cur = DB_CNX.cursor()
|
cur = DB_CNX.cursor()
|
||||||
cur.execute("SELECT k.kgnr, k.name, g.gkz, g.name "
|
cur.execute("SELECT k.kgnr, k.name, g.gkz, g.name "
|
||||||
"FROM AT_kg k "
|
"FROM AT_kg k "
|
||||||
"JOIN AT_gem g ON g.gkz = k.gkz "
|
"JOIN AT_gem g ON g.gkz = k.gkz "
|
||||||
"JOIN wb_gem wg ON wg.gkz = g.gkz "
|
"JOIN wb_gem wg ON wg.gkz = g.gkz "
|
||||||
"WHERE LOWER(k.name) LIKE (LOWER(?) || '%') AND wg.hkid = 'WLWV'",
|
f"WHERE LOWER(k.name) LIKE (LOWER(?) || '%') AND wg.hkid IN ({hkid})",
|
||||||
(name.replace('Gr.', 'Groß ').replace('Groß ', 'Groß').replace('-', ''),))
|
(name.replace('fliess', 'fließ').replace('ross', 'roß').replace('Gr.', 'Groß ')
|
||||||
|
.replace('Groß ', 'Groß').replace('-', ''),))
|
||||||
rows: List[Tuple[int, str, int, str]] = cur.fetchall()
|
rows: List[Tuple[int, str, int, str]] = cur.fetchall()
|
||||||
cur.close()
|
cur.close()
|
||||||
|
|
||||||
|
if gem_name:
|
||||||
|
rows = [row for row in rows if row[3] == gem_name]
|
||||||
if len(rows) == 1:
|
if len(rows) == 1:
|
||||||
return [(k, g) for k, _, g, _ in rows]
|
return [(k, g) for k, _, g, _ in rows]
|
||||||
|
|
||||||
@ -264,6 +352,7 @@ def lookup_kg_name(kgnr: int) -> str:
|
|||||||
|
|
||||||
|
|
||||||
def lookup_hkid(kgnr: Optional[int], qualid: str) -> str:
|
def lookup_hkid(kgnr: Optional[int], qualid: str) -> str:
|
||||||
|
hkid = None
|
||||||
if qualid in ('WEI', 'RSW'):
|
if qualid in ('WEI', 'RSW'):
|
||||||
return 'OEST'
|
return 'OEST'
|
||||||
elif kgnr is None:
|
elif kgnr is None:
|
||||||
@ -325,12 +414,16 @@ def migrate_gemeinden(in_dir: str, out_dir: str) -> None:
|
|||||||
global GEM_MAP
|
global GEM_MAP
|
||||||
GEM_MAP = {}
|
GEM_MAP = {}
|
||||||
|
|
||||||
|
inserted = set()
|
||||||
with utils.csv_open(f'{out_dir}/wb_kg.csv') as f:
|
with utils.csv_open(f'{out_dir}/wb_kg.csv') as f:
|
||||||
f.header('kgnr', 'glnr')
|
f.header('kgnr', 'glnr')
|
||||||
for g in utils.csv_parse_dict(f'{in_dir}/TGemeinden.csv'):
|
for g in utils.csv_parse_dict(f'{in_dir}/TGemeinden.csv'):
|
||||||
gems = lookup_gem_name(g['Bezeichnung'])
|
gems = lookup_gem_name(g['Bezeichnung'])
|
||||||
GEM_MAP[g['GNR']] = gems
|
GEM_MAP[g['GNR']] = gems
|
||||||
for kgnr, gkz in gems:
|
for kgnr, gkz in gems:
|
||||||
|
if kgnr in inserted:
|
||||||
|
continue
|
||||||
|
inserted.add(kgnr)
|
||||||
f.row(kgnr, GROSSLAGE_MAP[g['GLNR']])
|
f.row(kgnr, GROSSLAGE_MAP[g['GLNR']])
|
||||||
|
|
||||||
|
|
||||||
@ -345,10 +438,14 @@ def migrate_reeds(in_dir: str, out_dir: str) -> None:
|
|||||||
if name.isupper():
|
if name.isupper():
|
||||||
name = name.title()
|
name = name.title()
|
||||||
|
|
||||||
gem = GEM_MAP[r['GNR']]
|
try:
|
||||||
kgnr = gem[0][0]
|
gem = GEM_MAP[r['GNR']]
|
||||||
if len(gem) != 1:
|
kgnr = gem[0][0]
|
||||||
print(gem, name, '->', gem[0])
|
if len(gem) != 1:
|
||||||
|
print(gem, name, '->', gem[0])
|
||||||
|
except KeyError:
|
||||||
|
print(f'Invalid GNR {r["GNR"]} for reed {name}')
|
||||||
|
continue
|
||||||
|
|
||||||
rdnr = max([n for k, n in REED_MAP.values() if k == kgnr] or [0]) + 1
|
rdnr = max([n for k, n in REED_MAP.values() if k == kgnr] or [0]) + 1
|
||||||
REED_MAP[r['RNR']] = (kgnr, rdnr)
|
REED_MAP[r['RNR']] = (kgnr, rdnr)
|
||||||
@ -359,7 +456,9 @@ def migrate_attributes(in_dir: str, out_dir: str) -> None:
|
|||||||
with utils.csv_open(f'{out_dir}/wine_attribute.csv') as f:
|
with utils.csv_open(f'{out_dir}/wine_attribute.csv') as f:
|
||||||
f.header('attrid', 'name', 'kg_per_ha')
|
f.header('attrid', 'name', 'kg_per_ha')
|
||||||
for a in utils.csv_parse_dict(f'{in_dir}/TSortenAttribute.csv'):
|
for a in utils.csv_parse_dict(f'{in_dir}/TSortenAttribute.csv'):
|
||||||
f.row(a['SANR'], a['Attribut'], int(a['KgProHa']))
|
if a['SANR'] is None:
|
||||||
|
continue
|
||||||
|
f.row(a['SANR'], a['Attribut'], int(a['KgProHa']) if a['KgProHa'] is not None else None)
|
||||||
if WG == 'MATZEN':
|
if WG == 'MATZEN':
|
||||||
f.row('M', 'Matzen', 10000)
|
f.row('M', 'Matzen', 10000)
|
||||||
f.row('HU', 'Huber', 10000)
|
f.row('HU', 'Huber', 10000)
|
||||||
@ -404,6 +503,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
|
|||||||
f_tel.header('mgnr', 'nr', 'type', 'number', 'comment')
|
f_tel.header('mgnr', 'nr', 'type', 'number', 'comment')
|
||||||
|
|
||||||
for m in members:
|
for m in members:
|
||||||
|
# TODO handle * in GWK
|
||||||
mgnr: int = m['MGNR']
|
mgnr: int = m['MGNR']
|
||||||
family_name: str = m['Nachname']
|
family_name: str = m['Nachname']
|
||||||
given_name: str = m['Vorname']
|
given_name: str = m['Vorname']
|
||||||
@ -484,8 +584,10 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
|
|||||||
bnr = bnr.removesuffix('000')
|
bnr = bnr.removesuffix('000')
|
||||||
elif len(bnr) == 6:
|
elif len(bnr) == 6:
|
||||||
bnr = '0' + bnr
|
bnr = '0' + bnr
|
||||||
|
elif bnr.endswith(' inaktiv'):
|
||||||
|
bnr = bnr.split(' ')[0]
|
||||||
if not check_lfbis_nr(bnr):
|
if not check_lfbis_nr(bnr):
|
||||||
if bnr == '1234567':
|
if bnr in ('0', '1234567'):
|
||||||
warning(mgnr, 'BetriebsNr.', bnr)
|
warning(mgnr, 'BetriebsNr.', bnr)
|
||||||
else:
|
else:
|
||||||
invalid(mgnr, 'BetriebsNr.', bnr)
|
invalid(mgnr, 'BetriebsNr.', bnr)
|
||||||
@ -524,6 +626,8 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
|
|||||||
bic = bic.upper()
|
bic = bic.upper()
|
||||||
if bic == 'RLNWATAUE':
|
if bic == 'RLNWATAUE':
|
||||||
bic = 'RLNWATWWAUE'
|
bic = 'RLNWATWWAUE'
|
||||||
|
elif bic == 'RLNWATWMIB':
|
||||||
|
bic = 'RLNWATWWMIB'
|
||||||
if not BIC_RE.fullmatch(bic):
|
if not BIC_RE.fullmatch(bic):
|
||||||
invalid(mgnr, 'BIC', bic)
|
invalid(mgnr, 'BIC', bic)
|
||||||
bic = None
|
bic = None
|
||||||
@ -531,11 +635,28 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
|
|||||||
if len(bic) == 11 and bic.endswith('XXX'):
|
if len(bic) == 11 and bic.endswith('XXX'):
|
||||||
bic = bic[:-3]
|
bic = bic[:-3]
|
||||||
|
|
||||||
|
plz = int(m['PLZ']) if m['PLZ'] else None
|
||||||
ort: Optional[str] = m['Ort']
|
ort: Optional[str] = m['Ort']
|
||||||
address: Optional[str] = m['Straße']
|
address: Optional[str] = m['Straße']
|
||||||
|
|
||||||
|
parts = ort.split(' ') if ort else ['']
|
||||||
|
if parts[-1].isdigit() or (len(parts) > 1 and parts[-2].isdigit()):
|
||||||
|
if len(parts) > 1 and parts[-2].isdigit():
|
||||||
|
ort = ' '.join(parts[:-2])
|
||||||
|
new_address = parts[-2] + parts[-1]
|
||||||
|
else:
|
||||||
|
ort = ' '.join(parts[:-1])
|
||||||
|
new_address = parts[-1]
|
||||||
|
if address is not None and address != ' ' and address != new_address:
|
||||||
|
print(address, new_address)
|
||||||
|
raise RuntimeError()
|
||||||
|
address = parts[-1]
|
||||||
|
if WG == 'GWK' and ort == 'JETZELDORF':
|
||||||
|
ort = 'JETZELSDORF'
|
||||||
|
|
||||||
if address is not None:
|
if address is not None:
|
||||||
address_old = address
|
address_old = address
|
||||||
address = re.sub('([0-9])([A-Z])', lambda a: a.group(1) + a.group(2).lower(),
|
address = re.sub(r'([0-9]) ?([A-Z])\b', lambda a: a.group(1) + a.group(2).lower(),
|
||||||
re.sub(r'\s+', ' ', address).strip().title())
|
re.sub(r'\s+', ' ', address).strip().title())
|
||||||
address = address.replace('strasse', 'straße').replace('strassse', 'straße')\
|
address = address.replace('strasse', 'straße').replace('strassse', 'straße')\
|
||||||
.replace('Strasse', 'Straße').replace('Str.', 'Straße')\
|
.replace('Strasse', 'Straße').replace('Str.', 'Straße')\
|
||||||
@ -561,9 +682,14 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
|
|||||||
if not EMAIL_RE.fullmatch(email):
|
if not EMAIL_RE.fullmatch(email):
|
||||||
invalid(mgnr, 'E-Mail', m['EMail'])
|
invalid(mgnr, 'E-Mail', m['EMail'])
|
||||||
email = None
|
email = None
|
||||||
|
else:
|
||||||
|
parts = email.split('@')
|
||||||
|
email = f'{parts[0]}@{parts[1].lower()}'
|
||||||
|
|
||||||
zwstid = m['ZNR'] and BRANCH_MAP[m['ZNR']] or len(BRANCH_MAP) == 1 and list(BRANCH_MAP.values())[0]
|
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)
|
if WG == 'GWK' and plz == 1228:
|
||||||
|
plz = 1020
|
||||||
|
postal_dest = lookup_plz(plz, ort, address)
|
||||||
|
|
||||||
#if mgnr in fbs:
|
#if mgnr in fbs:
|
||||||
# gems = {v['GNR'] for k, v in fbs[mgnr].items() if v['Bis'] and int(v['Bis']) >= 2020}
|
# gems = {v['GNR'] for k, v in fbs[mgnr].items() if v['Bis'] and int(v['Bis']) >= 2020}
|
||||||
@ -587,6 +713,10 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
|
|||||||
invalid(mgnr, 'PLZ', None)
|
invalid(mgnr, 'PLZ', None)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if active and kgnr is None:
|
||||||
|
print(m)
|
||||||
|
raise RuntimeError('No default KgNr. set')
|
||||||
|
|
||||||
pred = m['MGNR-Vorgänger'] if m['MGNR-Vorgänger'] in mgnrs else None
|
pred = m['MGNR-Vorgänger'] if m['MGNR-Vorgänger'] in mgnrs else 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,
|
||||||
@ -739,7 +869,7 @@ def migrate_area_commitments(in_dir: str, out_dir: str) -> None:
|
|||||||
f_attr.header('fbnr', 'attrid')
|
f_attr.header('fbnr', 'attrid')
|
||||||
|
|
||||||
for fb in utils.csv_parse_dict(f'{in_dir}/TFlaechenbindungen.csv'):
|
for fb in utils.csv_parse_dict(f'{in_dir}/TFlaechenbindungen.csv'):
|
||||||
if fb['Von'] is None and fb['Bis'] is None:
|
if (fb['Von'] is None and fb['Bis'] is None) or fb['GNR'] is None:
|
||||||
continue
|
continue
|
||||||
parz: str = fb['Parzellennummer']
|
parz: str = fb['Parzellennummer']
|
||||||
fbnr: int = fb['FBNR']
|
fbnr: int = fb['FBNR']
|
||||||
@ -750,7 +880,11 @@ def migrate_area_commitments(in_dir: str, out_dir: str) -> None:
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
area = int(fb['Flaeche'])
|
area = int(fb['Flaeche'])
|
||||||
gstnrs = parse_gstnrs(parz, kgnr, fb['MGNR'])
|
if WG == 'MATZEN':
|
||||||
|
gstnrs = parse_gstnrs(parz, kgnr, fb['MGNR'])
|
||||||
|
else:
|
||||||
|
# TODO GstNrs GWK
|
||||||
|
gstnrs = []
|
||||||
comment, gstnr = None, None
|
comment, gstnr = None, None
|
||||||
if parz is None or parz == '0000':
|
if parz is None or parz == '0000':
|
||||||
invalid(mgnr, 'GstNr.', f'{kgnr or 0:05}-{parz}')
|
invalid(mgnr, 'GstNr.', f'{kgnr or 0:05}-{parz}')
|
||||||
@ -762,9 +896,9 @@ def migrate_area_commitments(in_dir: str, out_dir: str) -> None:
|
|||||||
if parz != gstnr.replace('+', '/'):
|
if parz != gstnr.replace('+', '/'):
|
||||||
convert(mgnr, f'GstNr. ({fbnr})', parz, gstnr)
|
convert(mgnr, f'GstNr. ({fbnr})', parz, gstnr)
|
||||||
|
|
||||||
rdnr = REED_MAP[fb['RNR']][1] if fb['RNR'] else None
|
rdnr = REED_MAP.get(fb['RNR'], (None, None))[1] if fb['RNR'] else None
|
||||||
to = fb['Bis'] if fb['Bis'] and fb['Bis'] < 3000 else None
|
to = fb['Bis'] if fb['Bis'] and fb['Bis'] < 3000 else None
|
||||||
f_fb.row(fbnr, mgnr, fb['SNR'], CULTIVATION_MAP[fb['BANR']], area,
|
f_fb.row(fbnr, mgnr, fb['SNR'], CULTIVATION_MAP[fb['BANR'] or 1], area,
|
||||||
kgnr, gstnr, rdnr, fb['Von'], to, comment)
|
kgnr, gstnr, rdnr, fb['Von'], to, comment)
|
||||||
if fb['SANR']:
|
if fb['SANR']:
|
||||||
f_attr.row(fbnr, fb['SANR'])
|
f_attr.row(fbnr, fb['SANR'])
|
||||||
@ -798,6 +932,8 @@ def fix_deliveries(deliveries: Iterable[Dict[str, Any]]) -> Iterable[Tuple[str,
|
|||||||
lsnrs = {d[1] for d in deliveries}
|
lsnrs = {d[1] for d in deliveries}
|
||||||
|
|
||||||
for lnr, lsnr, date, zwstnr, mgnr in deliveries:
|
for lnr, lsnr, date, zwstnr, mgnr in deliveries:
|
||||||
|
if len(lsnr) < 8:
|
||||||
|
continue
|
||||||
lsdate = datetime.date(int(lsnr[:4]), int(lsnr[4:6]), int(lsnr[6:8])) if not lsnr.startswith('9') \
|
lsdate = datetime.date(int(lsnr[:4]), int(lsnr[4:6]), int(lsnr[6:8])) if not lsnr.startswith('9') \
|
||||||
else datetime.date(1900 + int(lsnr[:2]), int(lsnr[2:4]), int(lsnr[4:6]))
|
else datetime.date(1900 + int(lsnr[:2]), int(lsnr[2:4]), int(lsnr[4:6]))
|
||||||
|
|
||||||
@ -830,10 +966,11 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
|
|||||||
|
|
||||||
for mod in modifiers.values():
|
for mod in modifiers.values():
|
||||||
name: str = mod['Bezeichnung']
|
name: str = mod['Bezeichnung']
|
||||||
if WG is None:
|
nr: int = mod['ASNR']
|
||||||
mod['id'] = str(mod['ASNR'])
|
if WG == 'MATZEN':
|
||||||
elif WG == 'MATZEN':
|
|
||||||
mod['id'] = name[-1] if name.startswith('Klasse') else 'TB' if name == 'Treuebonus' else 'PZS'
|
mod['id'] = name[-1] if name.startswith('Klasse') else 'TB' if name == 'Treuebonus' else 'PZS'
|
||||||
|
elif WG == 'GWK':
|
||||||
|
mod['id'] = str(nr)
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
@ -912,7 +1049,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
|
|||||||
qualid = QUAL_MAP[d['QSNR']]
|
qualid = QUAL_MAP[d['QSNR']]
|
||||||
kgnr, rdnr = None, None
|
kgnr, rdnr = None, None
|
||||||
if d['GNR']:
|
if d['GNR']:
|
||||||
gem = GEM_MAP[d['GNR']]
|
gem = GEM_MAP.get(d['GNR'], [])
|
||||||
if len(gem) == 1:
|
if len(gem) == 1:
|
||||||
kgnr = gem[0][0]
|
kgnr = gem[0][0]
|
||||||
if d['RNR']:
|
if d['RNR']:
|
||||||
@ -978,7 +1115,8 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
|
|||||||
f_season.row(y, s['currency'], s['precision'], s['start'], s['end'])
|
f_season.row(y, s['currency'], s['precision'], s['start'], s['end'])
|
||||||
for m in modifiers.values():
|
for m in modifiers.values():
|
||||||
abs_v = int(m['AZAS'] * pow(10, s['precision'])) if m['AZAS'] is not None else None
|
abs_v = int(m['AZAS'] * pow(10, s['precision'])) if m['AZAS'] is not None else None
|
||||||
f_mod.row(y, m['id'], m['Bezeichnung'], abs_v, m['AZASProzent'], m['Standard'], m['Schnellauswahl'])
|
f_mod.row(y, m['id'], m['Bezeichnung'], abs_v, m['AZASProzent'],
|
||||||
|
m.get('Standard', None), m['Schnellauswahl'])
|
||||||
|
|
||||||
|
|
||||||
def migrate_payments(in_dir: str, out_dir: str) -> None:
|
def migrate_payments(in_dir: str, out_dir: str) -> None:
|
||||||
@ -1003,7 +1141,7 @@ def migrate_parameters(in_dir: str, out_dir: str) -> None:
|
|||||||
'PLZ': params['MANDANTENPLZ'],
|
'PLZ': params['MANDANTENPLZ'],
|
||||||
'ORT': params['MANDANTENORT'],
|
'ORT': params['MANDANTENORT'],
|
||||||
'ADDRESS': params['MANDANTENSTRASSE'],
|
'ADDRESS': params['MANDANTENSTRASSE'],
|
||||||
'DOCUMENT_SENDER': params['ABSENDERTEXT2'],
|
'DOCUMENT_SENDER': params.get('ABSENDERTEXT2', None),
|
||||||
'IBAN': None,
|
'IBAN': None,
|
||||||
'BIC': None,
|
'BIC': None,
|
||||||
'USTID': params['MANDANTENUID'].replace(' ', ''),
|
'USTID': params['MANDANTENUID'].replace(' ', ''),
|
||||||
@ -1011,7 +1149,7 @@ def migrate_parameters(in_dir: str, out_dir: str) -> None:
|
|||||||
'PHONE': params['MANDANTENTELEFON'],
|
'PHONE': params['MANDANTENTELEFON'],
|
||||||
'FAX': params['MANDANTENTELEFAX'],
|
'FAX': params['MANDANTENTELEFAX'],
|
||||||
'EMAIL': params['MANDANTENEMAIL'],
|
'EMAIL': params['MANDANTENEMAIL'],
|
||||||
'WEBSITE': params['MANDANTENHOMEPAGE'],
|
'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