diff --git a/wgmaster/migrate.py b/wgmaster/migrate.py index 3137a8d..db4c8e3 100755 --- a/wgmaster/migrate.py +++ b/wgmaster/migrate.py @@ -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)