Update database schema
This commit is contained in:
@ -331,6 +331,7 @@ def migrate_attributes(in_dir: str, out_dir: str) -> None:
|
||||
f.write(csv.format_row(a['SANR'], a['Attribut'], int(a['KgProHa'])))
|
||||
if WG == 'MATZEN':
|
||||
f.write(csv.format_row('M', 'Matzen', 10000))
|
||||
f.write(csv.format_row('HU', 'Huber', 10000))
|
||||
|
||||
|
||||
def migrate_cultivations(in_dir: str, out_dir: str) -> None:
|
||||
@ -649,9 +650,12 @@ def migrate_contracts(in_dir: str, out_dir: str) -> None:
|
||||
invalid(mgnr, 'GstNr.', f'{kgnr:05}-{nr_str}')
|
||||
return []
|
||||
|
||||
with open(f'{out_dir}/contract.csv', 'w+') as f_c, open(f'{out_dir}/area_commitment.csv', 'w+') as f_fb:
|
||||
with open(f'{out_dir}/contract.csv', 'w+') as f_c, \
|
||||
open(f'{out_dir}/area_commitment.csv', 'w+') as f_fb, \
|
||||
open(f'{out_dir}/area_commitment_attribute.csv', 'w+') as f_attr:
|
||||
f_c.write('vnr;mgnr;year_from;year_to\n')
|
||||
f_fb.write('vnr;kgnr;gstnr;rdnr;area;sortid;attrid;cultid\n')
|
||||
f_fb.write('vnr;kgnr;gstnr;rdnr;area;sortid;cultid\n')
|
||||
f_attr.write('vnr;kgnr;gstnr;attrid\n')
|
||||
|
||||
for fb in csv.parse_dict(f'{in_dir}/TFlaechenbindungen.csv'):
|
||||
if fb['Von'] is None and fb['Bis'] is None:
|
||||
@ -682,8 +686,10 @@ def migrate_contracts(in_dir: str, out_dir: str) -> None:
|
||||
a = area - gst_area * (len(gstnrs) - 1) if i == 0 else gst_area
|
||||
rdnr = REED_MAP[fb['RNR']][1] if fb['RNR'] else None
|
||||
f_fb.write(csv.format_row(
|
||||
vnr, kgnr, gstnr, rdnr, a, fb['SNR'], fb['SANR'], CULTIVATION_MAP[fb['BANR']]
|
||||
vnr, kgnr, gstnr, rdnr, a, fb['SNR'], CULTIVATION_MAP[fb['BANR']]
|
||||
))
|
||||
if fb['SANR']:
|
||||
f_attr.write(csv.format_row(vnr, kgnr, gstnr, fb['SANR']))
|
||||
|
||||
|
||||
def fix_deliveries(deliveries: Iterable[Dict[str, Any]]) -> Iterable[Tuple[str, List[int], datetime.date]]:
|
||||
@ -744,15 +750,24 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
|
||||
seasons = {}
|
||||
branches = {}
|
||||
|
||||
for mod in modifiers.values():
|
||||
name: str = mod['Bezeichnung']
|
||||
if WG == 'MATZEN':
|
||||
mod['id'] = name[-1] if name.startswith('Klasse') else 'TB' if name == 'Treuebonus' else 'PZS'
|
||||
else:
|
||||
raise NotImplementedError()
|
||||
|
||||
deliveries = list(csv.parse_dict(f'{in_dir}/TLieferungen.csv'))
|
||||
delivery_dict = {d['LINR']: d for d in deliveries}
|
||||
fixed = fix_deliveries(deliveries)
|
||||
|
||||
with open(f'{out_dir}/delivery.csv', 'w+') as f_delivery, \
|
||||
open(f'{out_dir}/delivery_part.csv', 'w+') as f_part:
|
||||
open(f'{out_dir}/delivery_part.csv', 'w+') as f_part, \
|
||||
open(f'{out_dir}/delivery_part_attribute.csv', 'w+') as f_attr:
|
||||
f_delivery.write('year;did;date;time;zwstid;lnr;lsnr;mgnr;comment\n')
|
||||
f_part.write('year;did;dpnr;sortid;attrid;weight;kmw;qualid;hkid;kgnr;rdnr;gerebelt;manual_weighing;spl_check;'
|
||||
'hand_picked;lesemaschine;temperature;acid;scale_id;weighing_id;comment\n')
|
||||
f_part.write('year;did;dpnr;sortid;weight;kmw;qualid;hkid;kgnr;rdnr;gerebelt;manual_weighing;spl_check;'
|
||||
'hand_picked;lesewagen;temperature;acid;scale_id;weighing_id;comment\n')
|
||||
f_attr.write('year;did;dpnr;attrid\n')
|
||||
|
||||
for lsnr, linrs, date in fixed:
|
||||
if date.year not in seasons:
|
||||
@ -778,6 +793,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
|
||||
lnr = branches[znr][date]
|
||||
|
||||
comments = []
|
||||
attributes = set()
|
||||
for dpnr, linr in enumerate(linrs, start=1):
|
||||
d = delivery_dict[linr]
|
||||
delivery_map[linr] = (date.year, snr, dpnr)
|
||||
@ -786,28 +802,32 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
|
||||
|
||||
oe = d['OechsleOriginal'] or d['Oechsle']
|
||||
kmw = GRADATION_MAP[oe]
|
||||
sortid, attrid = d['SNR'].upper(), d['SANR'] or None
|
||||
sortid = d['SNR'].upper()
|
||||
if d['SANR']:
|
||||
attributes.add(d['SANR'])
|
||||
if len(sortid) != 2:
|
||||
attrid = sortid[-1]
|
||||
attributes.add(sortid[2:])
|
||||
sortid = sortid[:2]
|
||||
|
||||
if WG == 'MATZEN':
|
||||
if sortid == 'HU':
|
||||
# Gr.Veltliner (Huber)
|
||||
sortid = 'GV'
|
||||
attributes.add('HU')
|
||||
elif sortid == 'SV':
|
||||
# FIXME probably Sortenverschnitt?
|
||||
sortid = 'SW'
|
||||
elif sortid == 'WC':
|
||||
# WEIßBURGUNDER/CHARDONNAY
|
||||
# WEIẞBURGUNDER/CHARDONNAY
|
||||
sortid = 'SW'
|
||||
if attrid == 'H':
|
||||
attrid = 'HK'
|
||||
elif attrid == 'W':
|
||||
attrid = None
|
||||
if 'H' in attributes:
|
||||
attributes.remove('H')
|
||||
attributes.add('HK')
|
||||
if 'W' in attributes:
|
||||
attributes.remove('W')
|
||||
|
||||
if d['SNR'] != sortid:
|
||||
print(f'{d["SNR"]}/{d["SANR"]} -> {sortid}/{attrid}')
|
||||
print(f'{d["SNR"]}/{d["SANR"]} -> {sortid}/{attributes}')
|
||||
|
||||
kgnr, rdnr = None, None
|
||||
if d['GNR']:
|
||||
@ -851,32 +871,34 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
|
||||
comments.append(comment)
|
||||
|
||||
f_part.write(csv.format_row(
|
||||
date.year, snr, dpnr, sortid, attrid, int(d['Gewicht']), kmw, QUAL_MAP[d['QSNR']], HKID, kgnr, rdnr,
|
||||
date.year, snr, dpnr, sortid, int(d['Gewicht']), kmw, QUAL_MAP[d['QSNR']], HKID, kgnr, rdnr,
|
||||
d['Gerebelt'] or False, d['Handwiegung'] or False, d['Spaetlese-Ueberpruefung'] or False,
|
||||
hand, lesemaschine, d['Temperatur'], acid, scale_id, weighing_id, comment
|
||||
))
|
||||
for attrid in attributes:
|
||||
f_attr.write(csv.format_row(date.year, snr, dpnr, attrid))
|
||||
f_delivery.write(csv.format_row(
|
||||
date.year, snr, date, d['Uhrzeit'], BRANCH_MAP[d['ZNR']], lnr, lsnr, d['MGNR'],
|
||||
'; '.join(comments) or None
|
||||
))
|
||||
|
||||
with open(f'{out_dir}/delivery_part_modifier.csv', 'w+') as f_part_mod:
|
||||
f_part_mod.write('year;did;dpnr;mnr\n')
|
||||
f_part_mod.write('year;did;dpnr;modid\n')
|
||||
for m in csv.parse_dict(f'{in_dir}/TLieferungAbschlag.csv'):
|
||||
if m['LINR'] not in delivery_map:
|
||||
continue
|
||||
nid = delivery_map[m['LINR']]
|
||||
f_part_mod.write(csv.format_row(nid[0], nid[1], nid[2], m['ASNR']))
|
||||
f_part_mod.write(csv.format_row(nid[0], nid[1], nid[2], modifiers[m['ASNR']]['id']))
|
||||
|
||||
with open(f'{out_dir}/season.csv', 'w+') as f_season, open(f'{out_dir}/modifier.csv', 'w+') as f_mod:
|
||||
f_season.write('year;currency;precision;start_date;end_date\n')
|
||||
f_mod.write('year;mnr;name;abs;rel;standard;quick_select\n')
|
||||
f_mod.write('year;modid;name;abs;rel;standard;quick_select\n')
|
||||
for y, s in seasons.items():
|
||||
f_season.write(csv.format_row(y, s['currency'], s['precision'], s['start'], s['end']))
|
||||
for m in modifiers.values():
|
||||
abs_v = int(m['AZAS'] * pow(10, s['precision'])) if m['AZAS'] is not None else None
|
||||
f_mod.write(csv.format_row(
|
||||
y, m['ASNR'], m['Bezeichnung'], abs_v, m['AZASProzent'], m['Standard'], m['Schnellauswahl']
|
||||
y, m['id'], m['Bezeichnung'], abs_v, m['AZASProzent'], m['Standard'], m['Schnellauswahl']
|
||||
))
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user