migrate.py: Adjust for Baden

This commit is contained in:
2024-10-02 10:35:26 +02:00
parent 3096a75ff7
commit 0a1cce63af

View File

@ -811,7 +811,10 @@ def migrate_area_commitment_types(in_dir: str, out_dir: str) -> None:
f.row(sortid + (attrid or ''), sortid[:2], attrid or sortid[2:] or None, None, menge,
None, None, None)
if CLIENT == WG.MATZEN:
f.row('BM', 'BM', None, None, None, None, None, None, None)
f.row('BM', 'BM', None, None, None, None, None, None)
elif CLIENT == WG.BADEN:
for sortid in ['NB', 'GW', 'BB', 'WB', 'SL', 'RG', 'ZF', 'SO', 'MO', 'TR', 'GR', 'CS', 'MU', 'ME', 'GB', 'SA', 'BO', 'RL', 'SB', 'SY']:
f.row(sortid, sortid, None, None, None, None, None, None)
def normalize_name(family_name: str, given_name: str) -> Tuple[Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]]:
@ -951,7 +954,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
utils.csv_open(f'{out_dir}/member_email_address.csv') as f_email, \
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',
'mgnr', 'predecessor_mgnr', 'name', 'prefix', 'given_name', 'middle_names', 'suffix', 'attn',
'birthday', 'entry_date', 'exit_date', 'business_shares', 'accounting_nr', 'zwstid',
'lfbis_nr', 'ustid_nr', 'volllieferant', 'buchführend', 'organic', 'funktionär', 'active', 'deceased',
'iban', 'bic', 'country', 'postal_dest', 'address', 'default_kgnr', 'comment')
@ -990,10 +993,12 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
if billing_name or n1.lower() != n2.lower():
convert_name(mgnr, (m['Nachname'], m['Vorname']),
(prefix, given_name, middle_names, family_name, suffix), billing_name)
if not given_name or not family_name:
given_name = given_name or ''
family_name = family_name or ''
invalid(mgnr, 'Name', n1, active)
if not family_name:
if billing_name:
family_name = billing_name
billing_name = None
else:
invalid(mgnr, 'Name', n1, active)
bnr: Optional[str] = m['Betriebsnummer'] if m['Betriebsnummer'] != '-' else None
if bnr is not None:
@ -1105,6 +1110,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
email: Optional[str] = m['EMail']
emails = []
if email is not None:
email = email.replace('qgmx.at', '@gmx.at').replace('qtuwien.ac.at', '@tuwien.ac.at')
for email in (email.split(' ') if CLIENT == WG.BADEN else email.split(' + ')):
if email.isupper():
email = email.lower()
@ -1146,7 +1152,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
pred = m['MGNR-Vorgänger'] if m['MGNR-Vorgänger'] in mgnrs else None
f_m.row(
mgnr, pred, prefix, given_name, middle_names, family_name, suffix,
mgnr, pred, family_name, prefix, given_name, middle_names, suffix, None,
m['Geburtsjahr'], m['Eintrittsdatum'], m['Austrittsdatum'], m['Geschäftsanteile1'] or 0,
m['BHKontonummer'], zwstid, bnr, ustid_nr,
m['Volllieferant'] or False, m['Buchführend'] or False, False, funktionaer, active, deceased,
@ -1389,13 +1395,13 @@ def migrate_area_commitments(in_dir: str, out_dir: str) -> None:
'year_from', 'year_to', 'comment')
for fb in utils.csv_parse_dict(f'{in_dir}/TFlaechenbindungen.csv'):
if (fb['Von'] is None and fb['Bis'] is None) or fb['GNR'] is None:
if (fb['Von'] is None and fb['Bis'] is None) or (CLIENT != WG.BADEN and fb['GNR'] is None):
continue
parz: str = fb['Parzellennummer']
fbnr: int = fb['FBNR']
mgnr: int = fb['MGNR']
gem = GEM_MAP[fb['GNR']]
kgnrs = [kgnr for kgnr, gkz in gem]
gem = GEM_MAP[fb['GNR']] if fb['GNR'] is not None else None
kgnrs = [kgnr for kgnr, gkz in gem] if gem is not None else [4002]
rnr = fb['RNR']
rd_kgnr, rdnr, _ = REED_MAP.get(rnr, (None, None, None)) if rnr else (None, None, None)
if mgnr not in MEMBER_MAP:
@ -1448,12 +1454,15 @@ def migrate_area_commitments(in_dir: str, out_dir: str) -> None:
if parz != gstnr.replace('+', '/'):
convert(mgnr, f'GstNr. ({fbnr})', parz, gstnr)
snr = fb['SNR']
if snr == 'GO':
snr = 'SO'
to = fb['Bis'] if fb['Bis'] and fb['Bis'] < 3000 else None
attrid = ATTRIBUTE_MAP[fb['SANR']] if fb['SANR'] else None
if attrid == 'B':
attrid = None
f_fb.row(fbnr, mgnr, fb['SNR'] + (attrid or ''), CULTIVATION_MAP[fb['BANR'] or 1], area,
kgnr, gstnr, rdnr, fb['Von'], to, comment)
f_fb.row(fbnr, mgnr, snr + (attrid or ''), CULTIVATION_MAP[fb['BANR'] or 1], area,
kgnr, gstnr, rdnr, fb['Von'] if fb['Von'] != 0 else None, to, comment)
def fix_deliveries(deliveries: Iterable[Dict[str, Any]]) -> Iterable[Tuple[str, List[int], datetime.date]]:
@ -1485,10 +1494,13 @@ def fix_deliveries(deliveries: Iterable[Dict[str, Any]]) -> Iterable[Tuple[str,
local_lnr = 99
for lnr, lsnr, date, zwstid, mgnr in deliveries:
if CLIENT == WG.WEINLAND and not lsnr or len(lsnr) <= 8:
if CLIENT == WG.WEINLAND and (not lsnr or len(lsnr) <= 8):
local_lnr += 1
add(f'{date:%Y%m%d}G{local_lnr:03}', lnr, date)
continue
elif CLIENT == WG.BADEN and len(lsnr) <= 8:
add(f'{date:%Y}B{lsnr:>03}', lnr, date)
continue
elif len(lsnr) < 8:
continue
if lsnr.startswith('22'):
@ -1564,7 +1576,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
utils.csv_open(f'{out_dir}/delivery_part.csv') as f_part:
f_delivery.header('year', 'did', 'date', 'time', 'zwstid', 'lnr', 'lsnr', 'mgnr', 'comment')
f_part.header('year', 'did', 'dpnr', 'sortid', 'attrid', 'cultid', 'weight', 'kmw', 'qualid',
'hkid', 'kgnr', 'rdnr', 'gerebelt', 'manual_weighing', 'spl_check', 'hand_picked', 'lesewagen',
'hkid', 'kgnr', 'rdnr', 'net_weight', 'manual_weighing', 'spl_check', 'hand_picked', 'lesewagen',
'gebunden', 'temperature', 'acid', 'scale_id', 'weighing_data', 'weighing_reason', 'comment')
for lsnr, linrs, date in fixed:
@ -1583,10 +1595,12 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
snr = s['nr']
mgnr = delivery_dict[linrs[0]]['MGNR']
if CLIENT == WG.BADEN and mgnr == 229:
mgnr = 3
znr = delivery_dict[linrs[0]]['ZNR'] or (1 if CLIENT == WG.WEINLAND else None)
glob_waage = set(delivery_dict[linr]['Waagentext'] for linr in linrs if delivery_dict[linr]['Waagentext'])
zwstid = lsnr[8]
zwstid = lsnr[8] if len(lsnr) > 8 else lsnr[4]
if zwstid not in branches:
branches[zwstid] = {}
if date not in branches[zwstid]:
@ -1637,6 +1651,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
attributes.remove('W')
elif CLIENT == WG.BADEN:
if sortid == 'GO':
# "Gem.Satz rot"
sortid = 'SO'
if d['SNR'] != sortid:
@ -1658,6 +1673,15 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
else:
warning_delivery(lsnr, mgnr, 'qualid', f'{qualid} (abgewertet)')
qualid = 'WEI'
if qualid == 'LDW' and d['Oechsle'] < 68:
warning_delivery(lsnr, mgnr, 'qualid', f'{qualid} ({d["Oechsle"]} °Oe)')
qualid = 'RSW'
elif qualid == 'QUW' and d['Oechsle'] < 73:
warning_delivery(lsnr, mgnr, 'qualid', f'{qualid} ({d["Oechsle"]} °Oe)')
qualid = 'LDW' if d['Oechsle'] >= 68 else 'RSW'
elif qualid == 'KAB' and d['Oechsle'] < 84:
warning_delivery(lsnr, mgnr, 'qualid', f'{qualid} ({d["Oechsle"]} °Oe)')
qualid = 'QUW' if d['Oechsle'] >= 73 else 'LDW' if d['Oechsle'] >= 68 else 'RSW'
kgnr, rdnr = None, None
if d['GNR']:
@ -1727,7 +1751,8 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
gerebelt, handwiegung, d['Spaetlese-Ueberpruefung'] or False,
hand, lesewagen, gebunden, d['Temperatur'], acid, scale_id, weighing_data, None, comment
)
f_delivery.row(date.year, snr, date, d['Uhrzeit'], zwstid, lnr, lsnr, mgnr, '; '.join(comments) or None)
time = d['Uhrzeit'] if d['Uhrzeit'] != datetime.time(0, 0, 0) else None
f_delivery.row(date.year, snr, date, time, zwstid, lnr, lsnr, mgnr, '; '.join(comments) or None)
for k, v in updated_varieties.items():
print(k + (f' ({v} times)' if v > 1 else ''))