Add WG specific migration

This commit is contained in:
2023-04-09 23:39:25 +02:00
parent ae4b9d3fe3
commit 9ce344763b

View File

@ -16,6 +16,7 @@ import csv
DB_CNX: Optional[sqlite3.Connection] = None
HKID: Optional[str] = None
WG: Optional[str] = None
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})?')
@ -327,6 +328,8 @@ def migrate_attributes(in_dir: str, out_dir: str) -> None:
f.write('attrid;name;kg_per_ha\n')
for a in csv.parse_dict(f'{in_dir}/TSortenAttribute.csv'):
f.write(csv.format_row(a['SANR'], a['Attribut'], int(a['KgProHa'])))
if WG == 'MATZEN':
f.write(csv.format_row('M', 'Matzen', 10000))
def migrate_cultivations(in_dir: str, out_dir: str) -> None:
@ -350,7 +353,8 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
global MEMBER_MAP
MEMBER_MAP = {}
members = csv.parse_dict(f'{in_dir}/TMitglieder.csv')
members = [m for m in csv.parse_dict(f'{in_dir}/TMitglieder.csv')]
mgnrs = [m['MGNR'] for m in members]
fbs = parse_flaechenbindungen(in_dir)
with open(f'{out_dir}/member.csv', 'w+') as f_m,\
@ -372,11 +376,15 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
middle_names: Optional[str] = None
suffix: Optional[str] = None
billing_name: Optional[str] = None
funktionaer = False
if family_name is None and given_name is None:
continue
given_name = given_name or ''
if WG == 'MATZEN' and given_name.startswith(' '):
funktionaer = True # FIXME
family_name = re.sub(r'\s+', ' ', family_name).strip()
given_name = re.sub(r'\s+', ' ', given_name).strip().replace(', ', ',')
@ -572,11 +580,12 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
invalid(mgnr, 'PLZ', None)
continue
pred = m['MGNR-Vorgänger'] if m['MGNR-Vorgänger'] in mgnrs else None
f_m.write(csv.format_row(
mgnr, m['MGNR-Vorgänger'], 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['BHKontonummer'], zwstid, bnr, ustid,
m['Volllieferant'] or False, m['Buchführend'] or False, False, active,
m['Volllieferant'] or False, m['Buchführend'] or False, funktionaer, active,
iban, bic, 'AT', postal_dest, address or '-', email, phone_landline,
phone_mobile[0] if len(phone_mobile) > 0 else None, phone_mobile[1] if len(phone_mobile) > 1 else None,
kgnr, m['Anmerkung']
@ -648,11 +657,14 @@ def migrate_contracts(in_dir: str, out_dir: str) -> None:
continue
parz: str = fb['Parzellennummer']
vnr: int = fb['FBNR']
mgnr: int = fb['MGNR']
gem = GEM_MAP[fb['GNR']]
kgnr = gem[0][0]
if mgnr not in MEMBER_MAP:
continue
f_c.write(csv.format_row(
vnr, fb['MGNR'], fb['Von'], fb['Bis'] if fb['Bis'] and fb['Bis'] < 3000 else None
vnr, mgnr, fb['Von'], fb['Bis'] if fb['Bis'] and fb['Bis'] < 3000 else None
))
gstnrs = parse_gstnrs(parz, kgnr, fb['MGNR'])
@ -660,10 +672,10 @@ def migrate_contracts(in_dir: str, out_dir: str) -> None:
gst_area = int(area / (len(gstnrs) or 1))
if parz is None or parz == '0000':
invalid(fb['MGNR'], 'GstNr.', f'{kgnr or 0:05}-{parz}')
invalid(mgnr, 'GstNr.', f'{kgnr or 0:05}-{parz}')
gstnrs = ['99999']
elif len(gstnrs) > 1 or (len(gstnrs) == 1 and gstnrs[0] != parz):
convert(fb['MGNR'], 'GstNr.', f'{kgnr or 0:05}-{parz or ""}', ', '.join(gstnrs))
convert(mgnr, 'GstNr.', f'{kgnr or 0:05}-{parz or ""}', ', '.join(gstnrs))
for i, gstnr in enumerate(gstnrs):
a = area - gst_area * (len(gstnrs) - 1) if i == 0 else gst_area
@ -777,7 +789,25 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
if len(sortid) != 2:
attrid = sortid[-1]
sortid = sortid[:2]
print(f'{d["SNR"]} -> {sortid}/{attrid}')
if WG == 'MATZEN':
if sortid == 'HU':
# Gr.Veltliner (Huber)
sortid = 'GV'
elif sortid == 'SV':
# FIXME probably Sortenverschnitt?
sortid = 'SW'
elif sortid == 'WC':
# WEIßBURGUNDER/CHARDONNAY
sortid = 'SW'
if attrid == 'H':
attrid = 'HK'
elif attrid == 'W':
attrid = None
if d['SNR'] != sortid:
print(f'{d["SNR"]}/{d["SANR"]} -> {sortid}/{attrid}')
kgnr, rdnr = None, None
if d['GNR']:
gem = GEM_MAP[d['GNR']]
@ -863,6 +893,8 @@ if __name__ == '__main__':
help='Be less verbose')
parser.add_argument('-d', '--database', metavar='DB', required=True,
help='The sqlite database file to look up information')
parser.add_argument('-g', '--genossenschaft', metavar='WG', required=False, type=str,
choices=('MATZEN', 'WOLKERSDORF'))
parser.add_argument('-o', '--origin', metavar='HKID', required=True,
help='The default wine origin identifier '
'(consider that the origin is ALWAYS set according to the KGNr if available)')
@ -871,6 +903,7 @@ if __name__ == '__main__':
os.makedirs(args.out_dir, exist_ok=True)
HKID = args.origin
WG = args.genossenschaft
DB_CNX = sqlite3.connect(args.database)