database: add gebunden field to delivery_part

This commit is contained in:
2023-10-15 13:31:18 +02:00
parent 65ad166d87
commit 2143bf66e5
3 changed files with 31 additions and 24 deletions

View File

@ -259,7 +259,7 @@ CREATE TABLE wine_attribute (
name TEXT NOT NULL, name TEXT NOT NULL,
max_kg_per_ha INTEGER, max_kg_per_ha INTEGER,
fill_lower_bins INTEGER NOT NULL CHECK (fill_lower_bins IN (TRUE, FALSE)) DEFAULT FALSE, 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, active INTEGER NOT NULL CHECK (active IN (TRUE, FALSE)) DEFAULT TRUE,
CONSTRAINT pk_wine_attribute PRIMARY KEY (attrid) CONSTRAINT pk_wine_attribute PRIMARY KEY (attrid)
@ -539,6 +539,7 @@ CREATE TABLE delivery_part (
hand_picked INTEGER CHECK (hand_picked IN (TRUE, FALSE)) DEFAULT NULL, hand_picked INTEGER CHECK (hand_picked IN (TRUE, FALSE)) DEFAULT NULL,
lesewagen INTEGER CHECK (lesewagen 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, temperature REAL DEFAULT NULL,
acid REAL DEFAULT NULL, acid REAL DEFAULT NULL,

View File

@ -19,21 +19,26 @@ GROUP BY c.fbnr
ORDER BY c.fbnr; ORDER BY c.fbnr;
CREATE VIEW v_delivery AS CREATE VIEW v_delivery AS
SELECT 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, d.date, d.time, d.zwstid, d.lnr, d.lsnr,
m.mgnr, m.family_name, m.given_name, 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.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 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, p.qualid NOT IN ('WEI', 'RSW', 'LDW') AS min_quw,
GROUP_CONCAT(DISTINCT a.attrid) as attributes, GROUP_CONCAT(DISTINCT o.modid) as modifiers, GROUP_CONCAT(a.attrid) AS attributes,
d.comment, p.comment as part_comment COALESCE(SUM(a.fill_lower_bins), 0) AS attribute_prio,
d.comment, p.comment AS part_comment
FROM delivery_part p FROM delivery_part p
JOIN delivery d ON (d.year, d.did) = (p.year, p.did) JOIN delivery d ON (d.year, d.did) = (p.year, p.did)
JOIN member m ON m.mgnr = d.mgnr 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_attribute pa ON (pa.year, pa.did, pa.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) LEFT JOIN wine_attribute a ON a.attrid = pa.attrid
GROUP BY p.year, p.did, p.dpnr GROUP BY p.year, p.did, p.dpnr) s
ORDER BY p.year, p.did, p.dpnr; 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 CREATE VIEW v_delivery_bin AS
SELECT year, mgnr, SELECT year, mgnr,

View File

@ -597,14 +597,14 @@ def migrate_reeds(in_dir: str, out_dir: str) -> None:
def migrate_attributes(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: 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'): for a in utils.csv_parse_dict(f'{in_dir}/TSortenAttribute.csv'):
if a['SANR'] is None: if a['SANR'] is None:
continue 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: if CLIENT == WG.MATZEN:
f.row('M', 'Matzen', None, False) f.row('M', 'Matzen', None, 0, False)
f.row('HU', 'Huber', None, False) f.row('HU', 'Huber', None, 0, False)
def migrate_cultivations(in_dir: str, out_dir: str) -> None: 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: 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_delivery.header('year', 'did', 'date', 'time', 'zwstid', 'lnr', 'lsnr', 'mgnr', 'comment')
f_part.header('year', 'did', 'dpnr', 'sortid', 'weight', 'kmw', 'qualid', 'hkid', 'kgnr', 'rdnr', 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') 'temperature', 'acid', 'scale_id', 'weighing_id', 'weighing_reason', 'comment')
f_attr.header('year', 'did', 'dpnr', 'attrid') 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'] comment: Optional[str] = d['Anmerkung']
acid = d['Säure'] acid = d['Säure']
hand, lesemaschine = None, None hand, lesewagen = None, None
if comment: if comment:
comment = comment.replace('Söure', 'Säure') comment = comment.replace('Söure', 'Säure')
if comment.startswith('Säure'): if comment.startswith('Säure'):
@ -1489,10 +1489,11 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
if comment: if comment:
comments.append(comment) comments.append(comment)
gerebelt = True if CLIENT == WG.MATZEN or (CLIENT == WG.WINZERKELLER and zwstid == 'W') else d['Gerebelt'] or False 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( f_part.row(
date.year, snr, dpnr, sortid, int(d['Gewicht']), kmw, qualid, hkid, kgnr, rdnr, date.year, snr, dpnr, sortid, int(d['Gewicht']), kmw, qualid, hkid, kgnr, rdnr,
gerebelt, handwiegung, d['Spaetlese-Ueberpruefung'] or False, 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: for attrid in attributes:
f_attr.row(date.year, snr, dpnr, attrid) f_attr.row(date.year, snr, dpnr, attrid)