database: remove delivery_part_attribute table
This commit is contained in:
@ -36,10 +36,9 @@ CREATE TABLE wine_attribute (
|
|||||||
) STRICT;
|
) STRICT;
|
||||||
|
|
||||||
CREATE TABLE area_commitment_type (
|
CREATE TABLE area_commitment_type (
|
||||||
vtrgid TEXT NOT NULL CHECK (vtrgid LIKE sortid || attrid_1 || attrid_2 || disc),
|
vtrgid TEXT NOT NULL CHECK (vtrgid = sortid || COALESCE(attrid, '') || disc),
|
||||||
sortid TEXT NOT NULL,
|
sortid TEXT NOT NULL,
|
||||||
attrid_1 TEXT,
|
attrid TEXT,
|
||||||
attrid_2 TEXT,
|
|
||||||
disc TEXT DEFAULT NULL CHECK (disc REGEXP '^[A-Z0-9]+$'),
|
disc TEXT DEFAULT NULL CHECK (disc REGEXP '^[A-Z0-9]+$'),
|
||||||
|
|
||||||
min_kg_per_ha INTEGER,
|
min_kg_per_ha INTEGER,
|
||||||
@ -47,14 +46,11 @@ CREATE TABLE area_commitment_type (
|
|||||||
penalty_amount INTEGER,
|
penalty_amount INTEGER,
|
||||||
|
|
||||||
CONSTRAINT pk_area_commitment_type PRIMARY KEY (vtrgid),
|
CONSTRAINT pk_area_commitment_type PRIMARY KEY (vtrgid),
|
||||||
CONSTRAINT sk_area_commitment_type_sort_attr UNIQUE (sortid, attrid_1, attrid_2, disc),
|
CONSTRAINT sk_area_commitment_type_sort_attr UNIQUE (sortid, attrid, disc),
|
||||||
CONSTRAINT fk_area_commitment_type_wine_variety FOREIGN KEY (sortid) REFERENCES wine_variety (sortid)
|
CONSTRAINT fk_area_commitment_type_wine_variety FOREIGN KEY (sortid) REFERENCES wine_variety (sortid)
|
||||||
ON UPDATE CASCADE
|
ON UPDATE CASCADE
|
||||||
ON DELETE RESTRICT,
|
ON DELETE RESTRICT,
|
||||||
CONSTRAINT fk_area_commitment_type_wine_attribute FOREIGN KEY (attrid_1) REFERENCES wine_attribute (attrid)
|
CONSTRAINT fk_area_commitment_type_wine_attribute FOREIGN KEY (attrid) REFERENCES wine_attribute (attrid)
|
||||||
ON UPDATE CASCADE
|
|
||||||
ON DELETE RESTRICT,
|
|
||||||
CONSTRAINT fk_area_commitment_type_wine_attribute FOREIGN KEY (attrid_2) REFERENCES wine_attribute (attrid)
|
|
||||||
ON UPDATE CASCADE
|
ON UPDATE CASCADE
|
||||||
ON DELETE RESTRICT
|
ON DELETE RESTRICT
|
||||||
) STRICT;
|
) STRICT;
|
||||||
|
@ -77,6 +77,7 @@ CREATE TABLE delivery_part (
|
|||||||
dpnr INTEGER NOT NULL,
|
dpnr INTEGER NOT NULL,
|
||||||
|
|
||||||
sortid TEXT NOT NULL,
|
sortid TEXT NOT NULL,
|
||||||
|
attrid TEXT,
|
||||||
weight INTEGER NOT NULL,
|
weight INTEGER NOT NULL,
|
||||||
kmw REAL NOT NULL,
|
kmw REAL NOT NULL,
|
||||||
qualid TEXT NOT NULL,
|
qualid TEXT NOT NULL,
|
||||||
@ -111,6 +112,9 @@ CREATE TABLE delivery_part (
|
|||||||
CONSTRAINT fk_delivery_part_wine_variety FOREIGN KEY (sortid) REFERENCES wine_variety (sortid)
|
CONSTRAINT fk_delivery_part_wine_variety FOREIGN KEY (sortid) REFERENCES wine_variety (sortid)
|
||||||
ON UPDATE CASCADE
|
ON UPDATE CASCADE
|
||||||
ON DELETE RESTRICT,
|
ON DELETE RESTRICT,
|
||||||
|
CONSTRAINT fk_delivery_part_wine_attribute FOREIGN KEY (attrid) REFERENCES wine_attribute (attrid)
|
||||||
|
ON UPDATE CASCADE
|
||||||
|
ON DELETE RESTRICT,
|
||||||
CONSTRAINT fk_delivery_part_wine_quality_level FOREIGN KEY (qualid) REFERENCES wine_quality_level (qualid)
|
CONSTRAINT fk_delivery_part_wine_quality_level FOREIGN KEY (qualid) REFERENCES wine_quality_level (qualid)
|
||||||
ON UPDATE CASCADE
|
ON UPDATE CASCADE
|
||||||
ON DELETE RESTRICT,
|
ON DELETE RESTRICT,
|
||||||
@ -157,21 +161,6 @@ BEGIN
|
|||||||
WHERE wk.kgnr = NEW.kgnr AND NEW.hkid IN (wo1.hkid, wo2.hkid, wo3.hkid, wo4.hkid));
|
WHERE wk.kgnr = NEW.kgnr AND NEW.hkid IN (wo1.hkid, wo2.hkid, wo3.hkid, wo4.hkid));
|
||||||
END;
|
END;
|
||||||
|
|
||||||
CREATE TABLE delivery_part_attribute (
|
|
||||||
year INTEGER NOT NULL,
|
|
||||||
did INTEGER NOT NULL,
|
|
||||||
dpnr INTEGER NOT NULL,
|
|
||||||
attrid TEXT NOT NULL,
|
|
||||||
|
|
||||||
CONSTRAINT pk_delivery_part_attribute PRIMARY KEY (year, did, dpnr, attrid),
|
|
||||||
CONSTRAINT fk_delivery_part_attribute_delivery_part FOREIGN KEY (year, did, dpnr) REFERENCES delivery_part (year, did, dpnr)
|
|
||||||
ON UPDATE CASCADE
|
|
||||||
ON DELETE CASCADE,
|
|
||||||
CONSTRAINT fk_delivery_part_attribute_wine_attribute FOREIGN KEY (attrid) REFERENCES wine_attribute (attrid)
|
|
||||||
ON UPDATE CASCADE
|
|
||||||
ON DELETE RESTRICT
|
|
||||||
) STRICT;
|
|
||||||
|
|
||||||
CREATE TABLE delivery_part_modifier (
|
CREATE TABLE delivery_part_modifier (
|
||||||
year INTEGER NOT NULL,
|
year INTEGER NOT NULL,
|
||||||
did INTEGER NOT NULL,
|
did INTEGER NOT NULL,
|
||||||
|
@ -177,26 +177,6 @@ END;
|
|||||||
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
CREATE TRIGGER t_delivery_part_attribute_i_mtime_delivery_part
|
|
||||||
AFTER INSERT ON delivery_part_attribute FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
UPDATE delivery_part SET mtime = UNIXEPOCH() WHERE (year, did, dpnr) = (NEW.year, NEW.did, NEW.dpnr);
|
|
||||||
END;
|
|
||||||
|
|
||||||
CREATE TRIGGER t_delivery_part_attribute_u_mtime_delivery_part
|
|
||||||
AFTER UPDATE ON delivery_part_attribute FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
UPDATE delivery_part SET mtime = UNIXEPOCH() WHERE (year, did, dpnr) = (NEW.year, NEW.did, NEW.dpnr) OR (year, did, dpnr) = (OLD.year, OLD.did, OLD.dpnr);
|
|
||||||
END;
|
|
||||||
|
|
||||||
CREATE TRIGGER t_delivery_part_attribute_d_mtime_delivery_part
|
|
||||||
AFTER DELETE ON delivery_part_attribute FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
UPDATE delivery_part SET mtime = UNIXEPOCH() WHERE (year, did, dpnr) = (OLD.year, OLD.did, OLD.dpnr);
|
|
||||||
END;
|
|
||||||
|
|
||||||
----------------------------------------------------------------
|
|
||||||
|
|
||||||
CREATE TRIGGER t_delivery_part_modifier_i_mtime_delivery_part
|
CREATE TRIGGER t_delivery_part_modifier_i_mtime_delivery_part
|
||||||
AFTER INSERT ON delivery_part_modifier FOR EACH ROW
|
AFTER INSERT ON delivery_part_modifier FOR EACH ROW
|
||||||
BEGIN
|
BEGIN
|
||||||
|
@ -19,31 +19,29 @@ GROUP BY c.fbnr
|
|||||||
ORDER BY c.fbnr;
|
ORDER BY c.fbnr;
|
||||||
|
|
||||||
CREATE VIEW v_delivery AS
|
CREATE VIEW v_delivery AS
|
||||||
SELECT s.*, GROUP_CONCAT(o.modid) AS modifiers
|
SELECT p.year, p.did, p.dpnr,
|
||||||
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, a.attrid,
|
||||||
|
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.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(a.attrid) AS attributes,
|
COALESCE(a.fill_lower_bins, 0) AS attribute_prio,
|
||||||
COALESCE(SUM(a.fill_lower_bins), 0) AS attribute_prio,
|
GROUP_CONCAT(o.modid) AS modifiers,
|
||||||
d.comment, p.comment AS part_comment
|
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 pa ON (pa.year, pa.did, pa.dpnr) = (p.year, p.did, p.dpnr)
|
LEFT JOIN wine_attribute a ON a.attrid = p.attrid
|
||||||
LEFT JOIN wine_attribute a ON a.attrid = pa.attrid
|
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
|
GROUP BY p.year, p.did, p.dpnr
|
||||||
ORDER BY p.year, p.did, p.dpnr, a.attrid) s
|
ORDER BY p.year, p.did, p.dpnr, o.modid;
|
||||||
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, o.modid;
|
|
||||||
|
|
||||||
CREATE VIEW v_delivery_bin AS
|
CREATE VIEW v_delivery_bin AS
|
||||||
SELECT year, mgnr,
|
SELECT year, mgnr,
|
||||||
sortid || IIF(min_quw, REPLACE(COALESCE(attributes, ''), ',', ''), '_') AS bin,
|
sortid || IIF(min_quw, COALESCE(attrid, ''), '_') AS bin,
|
||||||
SUM(weight) AS weight
|
SUM(weight) AS weight
|
||||||
FROM v_delivery
|
FROM v_delivery
|
||||||
GROUP BY year, mgnr, bin
|
GROUP BY year, mgnr, bin
|
||||||
@ -94,26 +92,26 @@ GROUP BY year, sortid
|
|||||||
ORDER BY year, sortid;
|
ORDER BY year, sortid;
|
||||||
|
|
||||||
CREATE VIEW v_stat_attr AS
|
CREATE VIEW v_stat_attr AS
|
||||||
SELECT year, attributes,
|
SELECT year, attrid,
|
||||||
SUM(weight) as sum,
|
SUM(weight) as sum,
|
||||||
ROUND(SUM(kmw * weight) / SUM(weight), 2) AS kmw,
|
ROUND(SUM(kmw * weight) / SUM(weight), 2) AS kmw,
|
||||||
ROUND(SUM(oe * weight) / SUM(weight), 1) AS oe,
|
ROUND(SUM(oe * weight) / SUM(weight), 1) AS oe,
|
||||||
COUNT(DISTINCT did) AS lieferungen,
|
COUNT(DISTINCT did) AS lieferungen,
|
||||||
COUNT(DISTINCT mgnr) AS mitglieder
|
COUNT(DISTINCT mgnr) AS mitglieder
|
||||||
FROM v_delivery
|
FROM v_delivery
|
||||||
GROUP BY year, attributes
|
GROUP BY year, attrid
|
||||||
ORDER BY year, LENGTH(attributes) DESC, attributes;
|
ORDER BY year, attrid;
|
||||||
|
|
||||||
CREATE VIEW v_stat_sort_attr AS
|
CREATE VIEW v_stat_sort_attr AS
|
||||||
SELECT year, sortid, attributes,
|
SELECT year, sortid, attrid,
|
||||||
SUM(weight) as sum,
|
SUM(weight) as sum,
|
||||||
ROUND(SUM(kmw * weight) / SUM(weight), 2) AS kmw,
|
ROUND(SUM(kmw * weight) / SUM(weight), 2) AS kmw,
|
||||||
ROUND(SUM(oe * weight) / SUM(weight), 1) AS oe,
|
ROUND(SUM(oe * weight) / SUM(weight), 1) AS oe,
|
||||||
COUNT(DISTINCT did) AS lieferungen,
|
COUNT(DISTINCT did) AS lieferungen,
|
||||||
COUNT(DISTINCT mgnr) AS mitglieder
|
COUNT(DISTINCT mgnr) AS mitglieder
|
||||||
FROM v_delivery
|
FROM v_delivery
|
||||||
GROUP BY year, sortid, attributes
|
GROUP BY year, sortid, attrid
|
||||||
ORDER BY year, sortid, LENGTH(attributes) DESC, attributes;
|
ORDER BY year, sortid, attrid;
|
||||||
|
|
||||||
CREATE VIEW v_bki_member AS
|
CREATE VIEW v_bki_member AS
|
||||||
SELECT s.year, m.mgnr, m.lfbis_nr, m.family_name,
|
SELECT s.year, m.mgnr, m.lfbis_nr, m.family_name,
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
|
|
||||||
-- This value MUST NOT be changed while other connections are open!
|
-- This value MUST NOT be changed while other connections are open!
|
||||||
PRAGMA schema_version = 400;
|
PRAGMA schema_version = 500;
|
||||||
|
@ -14,7 +14,7 @@ DIR: str
|
|||||||
|
|
||||||
TABLES = ['client_parameter', 'branch', 'wb_gl', 'wb_kg', 'wb_rd', 'wine_attribute', 'wine_cultivation', 'area_commitment_type',
|
TABLES = ['client_parameter', 'branch', 'wb_gl', 'wb_kg', 'wb_rd', 'wine_attribute', 'wine_cultivation', 'area_commitment_type',
|
||||||
'member', 'member_billing_address', 'member_telephone_number', 'member_email_address', 'area_commitment',
|
'member', 'member_billing_address', 'member_telephone_number', 'member_email_address', 'area_commitment',
|
||||||
'season', 'modifier', 'delivery', 'delivery_part', 'delivery_part_attribute', 'delivery_part_modifier',
|
'season', 'modifier', 'delivery', 'delivery_part', 'delivery_part_modifier',
|
||||||
'delivery_part_bin', 'payment_variant', 'payment_delivery_part']
|
'delivery_part_bin', 'payment_variant', 'payment_delivery_part']
|
||||||
|
|
||||||
|
|
||||||
|
@ -630,23 +630,23 @@ def migrate_cultivations(in_dir: str, out_dir: str) -> None:
|
|||||||
|
|
||||||
def migrate_area_commitment_types(in_dir: str, out_dir: str) -> None:
|
def migrate_area_commitment_types(in_dir: str, out_dir: str) -> None:
|
||||||
with utils.csv_open(f'{out_dir}/area_commitment_type.csv') as f:
|
with utils.csv_open(f'{out_dir}/area_commitment_type.csv') as f:
|
||||||
f.header('vtrgid', 'sortid', 'attrid_1', 'attrid_2', 'disc',
|
f.header('vtrgid', 'sortid', 'attrid', 'disc',
|
||||||
'min_kg_per_ha', 'max_kg_per_ha', 'penalty_amount')
|
'min_kg_per_ha', 'max_kg_per_ha', 'penalty_amount')
|
||||||
for t in utils.csv_parse_dict(f'{in_dir}/TLiefermengen.csv'):
|
for t in utils.csv_parse_dict(f'{in_dir}/TLiefermengen.csv'):
|
||||||
sortid: str = t['SNR']
|
sortid: str = t['SNR']
|
||||||
if not sortid or sortid == 'SV':
|
if not sortid or sortid == 'SV':
|
||||||
continue
|
continue
|
||||||
menge = int(t['ErwarteteLiefermengeProHa'])
|
menge = int(t['ErwarteteLiefermengeProHa'])
|
||||||
f.row(sortid + (t['SANR'] or ''), sortid[:2], t['SANR'] or sortid[2:] or None, None, None,
|
f.row(sortid + (t['SANR'] or ''), sortid[:2], t['SANR'] or sortid[2:] or None, None,
|
||||||
menge, menge, None)
|
menge, menge, None)
|
||||||
bio = []
|
bio = []
|
||||||
if CLIENT == WG.MATZEN:
|
if CLIENT == WG.MATZEN:
|
||||||
bio = ['GV', 'ZW', 'MT']
|
bio = ['GV', 'ZW', 'MT']
|
||||||
f.row('BM', 'BM', None, None, None, None, None, None)
|
f.row('BM', 'BM', None, None, None, None, None)
|
||||||
elif CLIENT == WG.WINZERKELLER:
|
elif CLIENT == WG.WINZERKELLER:
|
||||||
bio = ['GV', 'ZW', 'WR', 'MT', 'RR', 'WB', 'CH', 'MU']
|
bio = ['GV', 'ZW', 'WR', 'MT', 'RR', 'WB', 'CH', 'MU']
|
||||||
for sortid in bio:
|
for sortid in bio:
|
||||||
f.row(f'{sortid}B', sortid, 'B', None, None, None, None, None)
|
f.row(f'{sortid}B', sortid, 'B', None, None, None, None)
|
||||||
|
|
||||||
|
|
||||||
def normalize_name(family_name: str, given_name: str) -> Tuple[Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]]:
|
def normalize_name(family_name: str, given_name: str) -> Tuple[Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]]:
|
||||||
@ -1356,13 +1356,11 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
|
|||||||
updated_varieties = {}
|
updated_varieties = {}
|
||||||
|
|
||||||
with utils.csv_open(f'{out_dir}/delivery.csv') as f_delivery, \
|
with utils.csv_open(f'{out_dir}/delivery.csv') as f_delivery, \
|
||||||
utils.csv_open(f'{out_dir}/delivery_part.csv') as f_part, \
|
utils.csv_open(f'{out_dir}/delivery_part.csv') as f_part:
|
||||||
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', 'attrid', 'weight', 'kmw', 'qualid', 'hkid', 'kgnr', 'rdnr',
|
||||||
'gerebelt', 'manual_weighing', 'spl_check', 'hand_picked', 'lesewagen', 'gebunden',
|
'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')
|
|
||||||
|
|
||||||
for lsnr, linrs, date in fixed:
|
for lsnr, linrs, date in fixed:
|
||||||
if date.year not in seasons:
|
if date.year not in seasons:
|
||||||
@ -1416,6 +1414,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
|
|||||||
if sortid == 'HU':
|
if sortid == 'HU':
|
||||||
# Gr.Veltliner (Huber)
|
# Gr.Veltliner (Huber)
|
||||||
sortid = 'GV'
|
sortid = 'GV'
|
||||||
|
attributes.remove('B')
|
||||||
attributes.add('HU')
|
attributes.add('HU')
|
||||||
elif sortid == 'SV':
|
elif sortid == 'SV':
|
||||||
sortid = 'SW'
|
sortid = 'SW'
|
||||||
@ -1500,13 +1499,14 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
|
|||||||
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']
|
gebunden = None if CLIENT in (WG.MATZEN, WG.WINZERKELLER) else d['Gebunden']
|
||||||
|
if len(attributes) > 1:
|
||||||
|
print("ERROR: ", attributes)
|
||||||
|
attrid = attributes.pop() if len(attributes) == 1 else None
|
||||||
f_part.row(
|
f_part.row(
|
||||||
date.year, snr, dpnr, sortid, int(d['Gewicht']), kmw, qualid, hkid, kgnr, rdnr,
|
date.year, snr, dpnr, sortid, attrid, int(d['Gewicht']), kmw, qualid, hkid, kgnr, rdnr,
|
||||||
gerebelt, handwiegung, d['Spaetlese-Ueberpruefung'] or False,
|
gerebelt, handwiegung, d['Spaetlese-Ueberpruefung'] or False,
|
||||||
hand, lesewagen, gebunden, 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)
|
|
||||||
f_delivery.row(date.year, snr, date, d['Uhrzeit'], zwstid, lnr, lsnr, mgnr, '; '.join(comments) or None)
|
f_delivery.row(date.year, snr, date, d['Uhrzeit'], zwstid, lnr, lsnr, mgnr, '; '.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 ''))
|
||||||
|
Reference in New Issue
Block a user