Compare commits

...

2 Commits

Author SHA1 Message Date
1a34486a84 Update report
Report now has a 'total' column next to the 'inventory' column.

Also, for items that are not empty yet we use the current time instead of the most recent sale to estimate time until empty.
2023-08-18 00:14:11 +02:00
53eb6a9fba Fix ssh host in README 2023-08-18 00:12:42 +02:00
3 changed files with 46 additions and 32 deletions

View File

@ -22,7 +22,7 @@ flask --app jon run --debug
## fsmi-db forward ## fsmi-db forward
``` ```
ssh -nNTvL 5432:fsmi-db.fsmi.org:5432 fsmi-login.fsmi.org ssh -nNTvL 5432:fsmi-db.fsmi.org:5432 fsmi-login.fsmi.uni-karlsruhe.de
``` ```
## TODO ## TODO

View File

@ -1,37 +1,49 @@
WITH WITH
most_recent_sales AS ( most_recent_sales AS (
SELECT DISTINCT ON (inventory_line) SELECT DISTINCT ON (inventory_line)
inventory_line, snack_sales_log_id, snack_sales_log_timestamp AS most_recent_sale inventory_line, snack_sales_log_id, snack_sales_log_timestamp AS most_recent_sale
FROM garfield.snack_sales_log FROM garfield.snack_sales_log
ORDER BY inventory_line ASC, snack_sales_log_timestamp DESC ORDER BY inventory_line ASC, snack_sales_log_timestamp DESC
), ),
enhanced_overview AS ( enhanced_overview1 AS (
SELECT SELECT
inventory_items.item_id, inventory_items.item_id,
inventory_items.item_barcode, inventory_items.item_barcode,
inventory_items.name, inventory_items.name,
units_left, units_left,
location_name, inventory_items.sales_units,
location, correction_delta,
CASE location_name,
WHEN snack_sales_log_id IS NULL THEN 0 location,
ELSE sales / (EXTRACT(EPOCH FROM most_recent_sale) - EXTRACT(EPOCH FROM bought)) * 24 * 3600 CASE
END AS per_day WHEN snack_sales_log_id IS NULL THEN 0
FROM garfield.inventory_item_overview ELSE sales / (EXTRACT(EPOCH FROM (
LEFT JOIN garfield.inventory_items USING (item_id) CASE
LEFT JOIN most_recent_sales ON item_id = inventory_line WHEN units_left <= 0 THEN most_recent_sale
) ELSE NOW()
END
SELECT )) - EXTRACT(EPOCH FROM bought)) * 24 * 3600
END AS per_day
FROM garfield.inventory_item_overview
LEFT JOIN garfield.inventory_items USING (item_id)
LEFT JOIN most_recent_sales ON item_id = inventory_line
),
enhanced_overview2 AS (
SELECT
*, *,
CASE CASE
WHEN per_day = 0 THEN NULL WHEN per_day = 0 THEN NULL
ELSE GREATEST(0, units_left / per_day) ELSE GREATEST(0, units_left / per_day)
END AS days_left, END AS days_left
CASE FROM enhanced_overview1
WHEN per_day = 0 THEN NULL )
ELSE GREATEST(0, (60 - GREATEST(0, units_left / per_day)) * per_day)
END AS for_two_months SELECT
FROM enhanced_overview *,
CASE
WHEN days_left IS NULL THEN NULL
ELSE GREATEST(0, (60 - days_left) * per_day)
END AS for_two_months
FROM enhanced_overview2
WHERE (%(location_id)s IS NULL OR location = %(location_id)s) WHERE (%(location_id)s IS NULL OR location = %(location_id)s)
ORDER BY days_left ASC, per_day DESC ORDER BY days_left ASC, per_day DESC

View File

@ -7,6 +7,7 @@
<th>Barcode</th> <th>Barcode</th>
<th>Name</th> <th>Name</th>
<th>Inventar</th> <th>Inventar</th>
<th>Gesamt</th>
<th>Raum</th> <th>Raum</th>
<th>Verbrauch [1/d]</th> <th>Verbrauch [1/d]</th>
<th>ETUE [d]</th> <th>ETUE [d]</th>
@ -17,7 +18,8 @@
<td><a href="/inventory/item/{{ item.item_id }}">{{ item.item_id }}</a></td> <td><a href="/inventory/item/{{ item.item_id }}">{{ item.item_id }}</a></td>
<td><code>{{ item.item_barcode }}</code></td> <td><code>{{ item.item_barcode }}</code></td>
<td>{{ item.name }}</td> <td>{{ item.name }}</td>
<td class="--align-right">{{ item.units_left }}</td> <td class="--align-right">{{ item.units_left + item.correction_delta }}</td>
<td class="--align-right">{{ item.sales_units }}</td>
<td>{{ item.location_name }}</td> <td>{{ item.location_name }}</td>
<td class="--align-right">{{ item.per_day|round(2) }}</td> <td class="--align-right">{{ item.per_day|round(2) }}</td>
<td class="--align-right">{% if item.days_left != None %}{{ item.days_left|round(1) }}{% endif %}</td> <td class="--align-right">{% if item.days_left != None %}{{ item.days_left|round(1) }}{% endif %}</td>