diff --git a/sql/v01/10.create.sql b/sql/v01/10.create.sql index 4994f86..c19652c 100644 --- a/sql/v01/10.create.sql +++ b/sql/v01/10.create.sql @@ -259,8 +259,8 @@ CREATE TABLE wine_attribute ( name TEXT NOT NULL, max_kg_per_ha INTEGER, - fill_lower_bins INTEGER NOT NULL CHECK (fill_lower_bins IN (TRUE, FALSE)) DEFAULT FALSE, - active INTEGER NOT NULL CHECK (active IN (TRUE, FALSE)) DEFAULT TRUE, + fill_lower_bins INTEGER NOT NULL CHECK (fill_lower_bins IN (0, 1, 2)) DEFAULT 0, + active INTEGER NOT NULL CHECK (active IN (TRUE, FALSE)) DEFAULT TRUE, CONSTRAINT pk_wine_attribute PRIMARY KEY (attrid) ) STRICT; @@ -539,6 +539,7 @@ CREATE TABLE delivery_part ( hand_picked INTEGER CHECK (hand_picked IN (TRUE, FALSE)) DEFAULT NULL, lesewagen INTEGER CHECK (lesewagen IN (TRUE, FALSE)) DEFAULT NULL, + gebunden INTEGER CHECK (gebunden IN (TRUE, FALSE)) DEFAULT NULL, temperature REAL DEFAULT NULL, acid REAL DEFAULT NULL, diff --git a/sql/v01/20.view.sql b/sql/v01/20.view.sql index f98e825..dce8c20 100644 --- a/sql/v01/20.view.sql +++ b/sql/v01/20.view.sql @@ -19,21 +19,26 @@ GROUP BY c.fbnr ORDER BY c.fbnr; CREATE VIEW v_delivery AS -SELECT p.year, p.did, p.dpnr, - d.date, d.time, d.zwstid, d.lnr, d.lsnr, - m.mgnr, m.family_name, m.given_name, - p.sortid, p.weight, p.kmw, ROUND(p.kmw * (4.54 + 0.022 * p.kmw), 0) AS oe, p.qualid, p.hkid, p.kgnr, p.rdnr, - p.qualid IN (SELECT l.qualid FROM wine_quality_level l WHERE NOT l.predicate AND (p.kmw >= l.min_kmw OR l.min_kmw IS NULL) ORDER BY l.min_kmw DESC LIMIT 1,100) AS abgewertet, - p.qualid NOT IN ('WEI', 'RSW', 'LDW') AS min_quw, - GROUP_CONCAT(DISTINCT a.attrid) as attributes, GROUP_CONCAT(DISTINCT o.modid) as modifiers, - d.comment, p.comment as part_comment -FROM delivery_part p - JOIN delivery d ON (d.year, d.did) = (p.year, p.did) - JOIN member m ON m.mgnr = d.mgnr - LEFT JOIN delivery_part_attribute a ON (a.year, a.did, a.dpnr) = (p.year, p.did, p.dpnr) - LEFT JOIN delivery_part_modifier o ON (o.year, o.did, o.dpnr) = (p.year, p.did, p.dpnr) -GROUP BY p.year, p.did, p.dpnr -ORDER BY p.year, p.did, p.dpnr; +SELECT s.*, GROUP_CONCAT(o.modid) AS modifiers +FROM (SELECT p.year, p.did, p.dpnr, + d.date, d.time, d.zwstid, d.lnr, d.lsnr, + m.mgnr, m.family_name, m.given_name, + p.sortid, p.weight, p.kmw, ROUND(p.kmw * (4.54 + 0.022 * p.kmw), 0) AS oe, p.qualid, p.hkid, p.kgnr, p.rdnr, + p.gerebelt, p.gebunden, + p.qualid IN (SELECT l.qualid FROM wine_quality_level l WHERE NOT l.predicate AND (p.kmw >= l.min_kmw OR l.min_kmw IS NULL) ORDER BY l.min_kmw DESC LIMIT 1,100) AS abgewertet, + p.qualid NOT IN ('WEI', 'RSW', 'LDW') AS min_quw, + GROUP_CONCAT(a.attrid) AS attributes, + COALESCE(SUM(a.fill_lower_bins), 0) AS attribute_prio, + d.comment, p.comment AS part_comment + FROM delivery_part p + JOIN delivery d ON (d.year, d.did) = (p.year, p.did) + JOIN member m ON m.mgnr = d.mgnr + LEFT JOIN delivery_part_attribute pa ON (pa.year, pa.did, pa.dpnr) = (p.year, p.did, p.dpnr) + LEFT JOIN wine_attribute a ON a.attrid = pa.attrid + GROUP BY p.year, p.did, p.dpnr) s +LEFT JOIN delivery_part_modifier o ON (o.year, o.did, o.dpnr) = (s.year, s.did, s.dpnr) +GROUP BY s.year, s.lsnr, s.dpnr +ORDER BY s.year, s.lsnr, s.dpnr; CREATE VIEW v_delivery_bin AS SELECT year, mgnr, diff --git a/wgmaster/migrate.py b/wgmaster/migrate.py index b6cea5f..6ce2d27 100755 --- a/wgmaster/migrate.py +++ b/wgmaster/migrate.py @@ -597,14 +597,14 @@ def migrate_reeds(in_dir: str, out_dir: str) -> None: def migrate_attributes(in_dir: str, out_dir: str) -> None: with utils.csv_open(f'{out_dir}/wine_attribute.csv') as f: - f.header('attrid', 'name', 'max_kg_per_ha', 'active') + f.header('attrid', 'name', 'max_kg_per_ha', 'fill_lower_bins', 'active') for a in utils.csv_parse_dict(f'{in_dir}/TSortenAttribute.csv'): if a['SANR'] is None: continue - f.row(a['SANR'], a['Attribut'], int(a['KgProHa']) if a['KgProHa'] is not None else None, True) + f.row(a['SANR'], a['Attribut'], int(a['KgProHa']) if a['KgProHa'] is not None else None, 0, True) if CLIENT == WG.MATZEN: - f.row('M', 'Matzen', None, False) - f.row('HU', 'Huber', None, False) + f.row('M', 'Matzen', None, 0, False) + f.row('HU', 'Huber', None, 0, False) def migrate_cultivations(in_dir: str, out_dir: str) -> None: @@ -1356,7 +1356,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: utils.csv_open(f'{out_dir}/delivery_part_attribute.csv') as f_attr: f_delivery.header('year', 'did', 'date', 'time', 'zwstid', 'lnr', 'lsnr', 'mgnr', 'comment') f_part.header('year', 'did', 'dpnr', 'sortid', 'weight', 'kmw', 'qualid', 'hkid', 'kgnr', 'rdnr', - 'gerebelt', 'manual_weighing', 'spl_check', 'hand_picked', 'lesewagen', + 'gerebelt', 'manual_weighing', 'spl_check', 'hand_picked', 'lesewagen', 'gebunden', 'temperature', 'acid', 'scale_id', 'weighing_id', 'weighing_reason', 'comment') f_attr.header('year', 'did', 'dpnr', 'attrid') @@ -1472,7 +1472,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: comment: Optional[str] = d['Anmerkung'] acid = d['Säure'] - hand, lesemaschine = None, None + hand, lesewagen = None, None if comment: comment = comment.replace('Söure', 'Säure') if comment.startswith('Säure'): @@ -1489,10 +1489,11 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: if comment: comments.append(comment) gerebelt = True if CLIENT == WG.MATZEN or (CLIENT == WG.WINZERKELLER and zwstid == 'W') else d['Gerebelt'] or False + gebunden = None if CLIENT in (WG.MATZEN, WG.WINZERKELLER) else d['Gebunden'] f_part.row( date.year, snr, dpnr, sortid, int(d['Gewicht']), kmw, qualid, hkid, kgnr, rdnr, gerebelt, handwiegung, d['Spaetlese-Ueberpruefung'] or False, - hand, lesemaschine, d['Temperatur'], acid, scale_id, weighing_id, None, comment + hand, lesewagen, gebunden, d['Temperatur'], acid, scale_id, weighing_id, None, comment ) for attrid in attributes: f_attr.row(date.year, snr, dpnr, attrid)