|
|
@ -16,6 +16,7 @@ import csv
|
|
|
|
DB_CNX: Optional[sqlite3.Connection] = None
|
|
|
|
DB_CNX: Optional[sqlite3.Connection] = None
|
|
|
|
|
|
|
|
|
|
|
|
HKID: Optional[str] = None
|
|
|
|
HKID: Optional[str] = None
|
|
|
|
|
|
|
|
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})?')
|
|
|
@ -327,6 +328,8 @@ def migrate_attributes(in_dir: str, out_dir: str) -> None:
|
|
|
|
f.write('attrid;name;kg_per_ha\n')
|
|
|
|
f.write('attrid;name;kg_per_ha\n')
|
|
|
|
for a in csv.parse_dict(f'{in_dir}/TSortenAttribute.csv'):
|
|
|
|
for a in csv.parse_dict(f'{in_dir}/TSortenAttribute.csv'):
|
|
|
|
f.write(csv.format_row(a['SANR'], a['Attribut'], int(a['KgProHa'])))
|
|
|
|
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:
|
|
|
|
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
|
|
|
|
global MEMBER_MAP
|
|
|
|
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)
|
|
|
|
fbs = parse_flaechenbindungen(in_dir)
|
|
|
|
|
|
|
|
|
|
|
|
with open(f'{out_dir}/member.csv', 'w+') as f_m,\
|
|
|
|
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
|
|
|
|
middle_names: Optional[str] = None
|
|
|
|
suffix: Optional[str] = None
|
|
|
|
suffix: Optional[str] = None
|
|
|
|
billing_name: Optional[str] = None
|
|
|
|
billing_name: Optional[str] = None
|
|
|
|
|
|
|
|
funktionaer = False
|
|
|
|
|
|
|
|
|
|
|
|
if family_name is None and given_name is None:
|
|
|
|
if family_name is None and given_name is None:
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
|
|
given_name = given_name or ''
|
|
|
|
given_name = given_name or ''
|
|
|
|
|
|
|
|
if WG == 'MATZEN' and given_name.startswith(' '):
|
|
|
|
|
|
|
|
funktionaer = True # FIXME
|
|
|
|
|
|
|
|
|
|
|
|
family_name = re.sub(r'\s+', ' ', family_name).strip()
|
|
|
|
family_name = re.sub(r'\s+', ' ', family_name).strip()
|
|
|
|
given_name = re.sub(r'\s+', ' ', given_name).strip().replace(', ', ',')
|
|
|
|
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)
|
|
|
|
invalid(mgnr, 'PLZ', None)
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pred = m['MGNR-Vorgänger'] if m['MGNR-Vorgänger'] in mgnrs else None
|
|
|
|
f_m.write(csv.format_row(
|
|
|
|
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['Geburtsjahr'], m['Eintrittsdatum'], m['Austrittsdatum'], m['Geschäftsanteile1'] or 0,
|
|
|
|
m['BHKontonummer'], zwstid, bnr, ustid,
|
|
|
|
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,
|
|
|
|
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,
|
|
|
|
phone_mobile[0] if len(phone_mobile) > 0 else None, phone_mobile[1] if len(phone_mobile) > 1 else None,
|
|
|
|
kgnr, m['Anmerkung']
|
|
|
|
kgnr, m['Anmerkung']
|
|
|
@ -648,11 +657,14 @@ def migrate_contracts(in_dir: str, out_dir: str) -> None:
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
parz: str = fb['Parzellennummer']
|
|
|
|
parz: str = fb['Parzellennummer']
|
|
|
|
vnr: int = fb['FBNR']
|
|
|
|
vnr: int = fb['FBNR']
|
|
|
|
|
|
|
|
mgnr: int = fb['MGNR']
|
|
|
|
gem = GEM_MAP[fb['GNR']]
|
|
|
|
gem = GEM_MAP[fb['GNR']]
|
|
|
|
kgnr = gem[0][0]
|
|
|
|
kgnr = gem[0][0]
|
|
|
|
|
|
|
|
if mgnr not in MEMBER_MAP:
|
|
|
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
|
|
f_c.write(csv.format_row(
|
|
|
|
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'])
|
|
|
|
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))
|
|
|
|
gst_area = int(area / (len(gstnrs) or 1))
|
|
|
|
|
|
|
|
|
|
|
|
if parz is None or parz == '0000':
|
|
|
|
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']
|
|
|
|
gstnrs = ['99999']
|
|
|
|
elif len(gstnrs) > 1 or (len(gstnrs) == 1 and gstnrs[0] != parz):
|
|
|
|
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):
|
|
|
|
for i, gstnr in enumerate(gstnrs):
|
|
|
|
a = area - gst_area * (len(gstnrs) - 1) if i == 0 else gst_area
|
|
|
|
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:
|
|
|
|
if len(sortid) != 2:
|
|
|
|
attrid = sortid[-1]
|
|
|
|
attrid = sortid[-1]
|
|
|
|
sortid = sortid[:2]
|
|
|
|
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
|
|
|
|
kgnr, rdnr = None, None
|
|
|
|
if d['GNR']:
|
|
|
|
if d['GNR']:
|
|
|
|
gem = GEM_MAP[d['GNR']]
|
|
|
|
gem = GEM_MAP[d['GNR']]
|
|
|
@ -863,6 +893,8 @@ if __name__ == '__main__':
|
|
|
|
help='Be less verbose')
|
|
|
|
help='Be less verbose')
|
|
|
|
parser.add_argument('-d', '--database', metavar='DB', required=True,
|
|
|
|
parser.add_argument('-d', '--database', metavar='DB', required=True,
|
|
|
|
help='The sqlite database file to look up information')
|
|
|
|
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,
|
|
|
|
parser.add_argument('-o', '--origin', metavar='HKID', required=True,
|
|
|
|
help='The default wine origin identifier '
|
|
|
|
help='The default wine origin identifier '
|
|
|
|
'(consider that the origin is ALWAYS set according to the KGNr if available)')
|
|
|
|
'(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)
|
|
|
|
os.makedirs(args.out_dir, exist_ok=True)
|
|
|
|
|
|
|
|
|
|
|
|
HKID = args.origin
|
|
|
|
HKID = args.origin
|
|
|
|
|
|
|
|
WG = args.genossenschaft
|
|
|
|
|
|
|
|
|
|
|
|
DB_CNX = sqlite3.connect(args.database)
|
|
|
|
DB_CNX = sqlite3.connect(args.database)
|
|
|
|
|
|
|
|
|
|
|
|