Add WG specific migration
This commit is contained in:
@ -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)
|
||||
|
||||
|
Reference in New Issue
Block a user