From 1de0498c357fcf5d20ea211f07016381c5d6af7f Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Mon, 3 Apr 2023 11:32:34 +0200 Subject: [PATCH] Update delivery import --- wgmaster/csv.py | 4 ++-- wgmaster/migrate.py | 21 ++++++++++++--------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/wgmaster/csv.py b/wgmaster/csv.py index 78d698f..edeabf5 100644 --- a/wgmaster/csv.py +++ b/wgmaster/csv.py @@ -45,9 +45,9 @@ def parse(filename: str) -> Iterator[Dict[str, Any]]: part = True elif part == 'F': part = False - elif part.isdigit(): + elif re.fullmatch(r'-?[0-9]+', part): part = int(part) - elif re.match(r'-?[0-9]+\.[0-9]+', part): + elif re.fullmatch(r'-?[0-9]+\.[0-9]+', part): part = float(part) elif len(part) == 10 and part[4] == '-' and part[7] == '-': part = datetime.datetime.strptime(part, '%Y-%m-%d').date() diff --git a/wgmaster/migrate.py b/wgmaster/migrate.py index 4592efc..ce8e372 100755 --- a/wgmaster/migrate.py +++ b/wgmaster/migrate.py @@ -542,7 +542,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None: kgnr = lookup_kgnr(okz) active = m['Aktives Mitglied'] or False if kgnr is None: - invalid(mgnr, 'KgNr.', ort) + invalid(mgnr, 'KGNr.', ort) active = False if postal_dest is None: @@ -655,6 +655,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: delivery_map = {} seasons = {} comments: Dict[str, str] = {} + deliveries = list(csv.parse(f'{in_dir}/TLieferungen.csv')) with open(f'{out_dir}/delivery.csv', 'w+') as f_delivery, \ open(f'{out_dir}/delivery_part.csv', 'w+') as f_part: @@ -662,7 +663,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: 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') - for d in sorted(csv.parse(f'{in_dir}/TLieferungen.csv'), key=lambda l: f'{l["Datum"]}T{l["Uhrzeit"]}'): + for d in deliveries: lsnr: str = d['Lieferscheinnummer'] if d['Storniert'] or lsnr is None: if lsnr is not None: @@ -684,7 +685,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: snr, dpnr = 1, 1 comment: Optional[str] = d['Anmerkung'] - if lsnr.endswith('A'): + if lsnr[-1].isupper(): if lsnr[:-1] in comments: comment = comments[lsnr[:-1]] if lsnr[:-1] in delivery_map: @@ -693,7 +694,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: dpnr = 2 else: lsnr = lsnr[:-1] - if not lsnr.endswith('A'): + if not lsnr[-1].isupper(): s['nr'] += 1 snr = s['nr'] delivery_map[d['LINR']] = (date.year, snr) @@ -722,14 +723,14 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: m = MEMBER_MAP[d['MGNR']] kgnr = m['default_kgnr'] if kgnr is None: - warning_delivery(lsnr, d['MGNR'], 'KgNr.', None) + warning_delivery(lsnr, d['MGNR'], 'KGNr.', None) waage = d['Waagentext'] scale_id, weighing_id = None, None if waage: waage = re.split(r' +', waage) - scale_id = int(waage[1]) - weighing_id = int(waage[3]) + scale_id = waage[1] + weighing_id = waage[3] acid = d['Säure'] hand, lesemaschine = None, None @@ -765,8 +766,9 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: 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'], m['AZAS'], m['AZASProzent'], m['Standard'], m['Schnellauswahl'] + y, m['ASNR'], m['Bezeichnung'], abs_v, m['AZASProzent'], m['Standard'], m['Schnellauswahl'] )) @@ -785,7 +787,8 @@ if __name__ == '__main__': parser.add_argument('-d', '--database', metavar='DB', required=True, help='The sqlite database file to look up information') 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)') args = parser.parse_args() os.makedirs(args.out_dir, exist_ok=True)