Fix modifier migration

This commit is contained in:
2023-08-17 22:20:14 +02:00
parent f888c02c8c
commit 5d92f909a1
2 changed files with 20 additions and 11 deletions

View File

@ -438,6 +438,7 @@ CREATE TABLE modifier (
year INTEGER NOT NULL, year INTEGER NOT NULL,
modid TEXT NOT NULL CHECK (modid REGEXP '^[A-Z0-9]+$'), modid TEXT NOT NULL CHECK (modid REGEXP '^[A-Z0-9]+$'),
ordering INTEGER NOT NULL,
name TEXT NOT NULL, name TEXT NOT NULL,
abs INTEGER, abs INTEGER,
rel REAL, rel REAL,

View File

@ -1228,18 +1228,26 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
global DELIVERY_MAP, MODIFIER_MAP global DELIVERY_MAP, MODIFIER_MAP
DELIVERY_MAP, MODIFIER_MAP = {}, {} DELIVERY_MAP, MODIFIER_MAP = {}, {}
modifiers = {m['ASNR']: m for m in utils.csv_parse_dict(f'{in_dir}/TAbschlaege.csv') if m['Bezeichnung']} modifiers = {
m['ASNR']: m
for m in utils.csv_parse_dict(f'{in_dir}/TAbschlaege.csv')
if m['Bezeichnung'] and m['Bezeichnung'] != '-'
}
seasons = {} seasons = {}
branches = {} branches = {}
for mod in modifiers.values(): for mod in modifiers.values():
name: str = mod['Bezeichnung'] name: str = mod['Bezeichnung'].replace('ausser', 'außer')
nr: int = mod['ASNR'] nr: int = mod['ASNR']
MODIFIER_MAP[name] = mod MODIFIER_MAP[name] = mod
if WG == 'MATZEN': if WG == 'MATZEN':
mod['id'] = name[-1] if name.startswith('Klasse') else 'TB' if name == 'Treuebonus' else 'PZS' mod['id'] = name[-1] if name.startswith('Klasse') else 'TB' if name == 'Treuebonus' else 'PZS'
elif WG == 'GWK': elif WG == 'GWK':
mod['id'] = str(nr) mod['id'] = {
1: 'KA', 2: 'LG', 3: 'MG', 4: 'SG',
5: 'VT', 6: 'MV', 7: 'UP', 8: 'VL',
9: 'DN', 10: 'SA', 11: 'DA', 12: 'EG',
}[nr]
else: else:
raise NotImplementedError() raise NotImplementedError()
@ -1377,15 +1385,14 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
) )
for attrid in attributes: for attrid in attributes:
f_attr.row(date.year, snr, dpnr, attrid) f_attr.row(date.year, snr, dpnr, attrid)
f_delivery.row(date.year, snr, date, d['Uhrzeit'], zwstid, lnr, lsnr, mgnr, f_delivery.row(date.year, snr, date, d['Uhrzeit'], zwstid, lnr, lsnr, mgnr, '; '.join(comments) or None)
'; '.join(comments) or None)
for k, v in updated_varieties.items(): for k, v in updated_varieties.items():
print(k + (f' ({v} times)' if v > 1 else '')) print(k + (f' ({v} times)' if v > 1 else ''))
with utils.csv_open(f'{out_dir}/delivery_part_modifier.csv') as f_part_mod: with utils.csv_open(f'{out_dir}/delivery_part_modifier.csv') as f_part_mod:
f_part_mod.header('year', 'did', 'dpnr', 'modid') f_part_mod.header('year', 'did', 'dpnr', 'modid')
for m in utils.csv_parse_dict(f'{in_dir}/TLieferungAbschlag.csv'): for m in utils.csv_parse_dict(f'{in_dir}/TLieferungAbschlag.csv'):
if m['LINR'] not in DELIVERY_MAP: if m['LINR'] not in DELIVERY_MAP or m['ASNR'] not in modifiers:
continue continue
y, did, dpnr = DELIVERY_MAP[m['LINR']] y, did, dpnr = DELIVERY_MAP[m['LINR']]
f_part_mod.row(y, did, dpnr, modifiers[m['ASNR']]['id']) f_part_mod.row(y, did, dpnr, modifiers[m['ASNR']]['id'])
@ -1393,12 +1400,13 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
with utils.csv_open(f'{out_dir}/season.csv') as f_season, \ with utils.csv_open(f'{out_dir}/season.csv') as f_season, \
utils.csv_open(f'{out_dir}/modifier.csv') as f_mod: utils.csv_open(f'{out_dir}/modifier.csv') as f_mod:
f_season.header('year', 'currency', 'precision', 'start_date', 'end_date') f_season.header('year', 'currency', 'precision', 'start_date', 'end_date')
f_mod.header('year', 'modid', 'name', 'abs', 'rel', 'standard', 'quick_select') f_mod.header('year', 'modid', 'ordering', 'name', 'abs', 'rel', 'standard', 'quick_select')
for y, s in seasons.items(): for y, s in seasons.items():
f_season.row(y, s['currency'], s['precision'], s['start'], s['end']) f_season.row(y, s['currency'], s['precision'], s['start'], s['end'])
for m in modifiers.values(): for m in modifiers.values():
abs_v = round(m['AZAS'] * pow(10, s['precision'])) if m['AZAS'] is not None else None abs_v = round(m['AZAS'] * pow(10, s['precision'])) if m['AZAS'] is not None else None
f_mod.row(y, m['id'], m['Bezeichnung'], abs_v, m['AZASProzent'], rel_v = m['AZASProzent'] / 100.0 if m['AZASProzent'] is not None else None
f_mod.row(y, m['id'], m['ASNR'], m['Bezeichnung'], abs_v, rel_v,
m.get('Standard', False), m['Schnellauswahl']) m.get('Standard', False), m['Schnellauswahl'])
@ -1501,7 +1509,7 @@ def migrate_payments(in_dir: str, out_dir: str) -> None:
for name in modifiers.split(' / '): for name in modifiers.split(' / '):
mod = MODIFIER_MAP[name] mod = MODIFIER_MAP[name]
if mod['AZASProzent']: if mod['AZASProzent']:
r += mod['AZASProzent'] r += mod['AZASProzent'] / 100.0
if mod['AZAS']: if mod['AZAS']:
a += round(mod['AZAS'] * pow(10, WGMASTER_PRECISION)) a += round(mod['AZAS'] * pow(10, WGMASTER_PRECISION))
return a, r return a, r
@ -1557,7 +1565,7 @@ def migrate_payments(in_dir: str, out_dir: str) -> None:
def migrate_parameters(in_dir: str, out_dir: str) -> None: def migrate_parameters(in_dir: str, out_dir: str) -> None:
params: Dict[str, str] = {p['Bezeichnung']: p['Wert'] for p in utils.csv_parse_dict(f'{in_dir}/TParameter.csv')} params: Dict[str, str] = {p['Bezeichnung']: p['Wert'] for p in utils.csv_parse_dict(f'{in_dir}/TParameter.csv')}
name = params['MANDANTENNAME1'].title().replace('F.', 'für').replace('U.', 'und').replace(' Im ', 'im') name = params['MANDANTENNAME1'].title().replace('F.', 'für').replace('U.', 'und').replace(' Im ', ' im ')
shortened = name.replace(' für ', ' f. ').replace(' und ', ' u. ').replace(' im ', ' i. ') shortened = name.replace(' für ', ' f. ').replace(' und ', ' u. ').replace(' im ', ' i. ')
suffix = params['MANDANTENNAME2'].lower().replace(' ', '').replace('.', '') suffix = params['MANDANTENNAME2'].lower().replace(' ', '').replace('.', '')
types = { types = {
@ -1590,7 +1598,7 @@ def migrate_parameters(in_dir: str, out_dir: str) -> None:
'DELIVERY_OBLIGATION': params.get('LIEFERPFLICHT/GA1', None), 'DELIVERY_OBLIGATION': params.get('LIEFERPFLICHT/GA1', None),
'DELIVERY_RIGHT': params.get('LIEFERRECHT/GA1', None), 'DELIVERY_RIGHT': params.get('LIEFERRECHT/GA1', None),
'DOCUMENT_SENDER': params.get('ABSENDERTEXT2', None), 'DOCUMENT_SENDER': params.get('ABSENDERTEXT2', None),
'DELIVERY_NOTE_TEXT': params.get('LIEFERSCHEINTEXT', None).replace(' daß ', ' dass '), 'DELIVERY_NOTE_TEXT': params.get('LIEFERSCHEINTEXT', None).replace(' daß ', ' dass ').replace('obige Angaben maßgeblicher Veränderungen', 'maßgeblichen Veränderungen obiger Angaben'),
} }
with utils.csv_open(f'{out_dir}/client_parameter.csv') as f: with utils.csv_open(f'{out_dir}/client_parameter.csv') as f: