Compare commits
	
		
			2 Commits
		
	
	
		
			243d91abb3
			...
			1a34486a84
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 1a34486a84 | |||
| 53eb6a9fba | 
| @ -22,7 +22,7 @@ flask --app jon run --debug | ||||
| ## 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 | ||||
|  | ||||
| @ -1,37 +1,49 @@ | ||||
| WITH | ||||
| most_recent_sales AS ( | ||||
|     SELECT DISTINCT ON (inventory_line) | ||||
|         inventory_line, snack_sales_log_id, snack_sales_log_timestamp AS most_recent_sale | ||||
|     FROM garfield.snack_sales_log | ||||
|     ORDER BY inventory_line ASC, snack_sales_log_timestamp DESC | ||||
|   SELECT DISTINCT ON (inventory_line) | ||||
|     inventory_line, snack_sales_log_id, snack_sales_log_timestamp AS most_recent_sale | ||||
|   FROM garfield.snack_sales_log | ||||
|   ORDER BY inventory_line ASC, snack_sales_log_timestamp DESC | ||||
| ), | ||||
| enhanced_overview AS ( | ||||
|     SELECT | ||||
|         inventory_items.item_id, | ||||
|         inventory_items.item_barcode, | ||||
|         inventory_items.name, | ||||
|         units_left, | ||||
|         location_name, | ||||
|         location, | ||||
|         CASE | ||||
|             WHEN snack_sales_log_id IS NULL THEN 0 | ||||
|             ELSE sales / (EXTRACT(EPOCH FROM most_recent_sale) - 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_overview1 AS ( | ||||
|   SELECT | ||||
|     inventory_items.item_id, | ||||
|     inventory_items.item_barcode, | ||||
|     inventory_items.name, | ||||
|     units_left, | ||||
|     inventory_items.sales_units, | ||||
|     correction_delta, | ||||
|     location_name, | ||||
|     location, | ||||
|       CASE | ||||
|         WHEN snack_sales_log_id IS NULL THEN 0 | ||||
|         ELSE sales / (EXTRACT(EPOCH FROM ( | ||||
|           CASE | ||||
|             WHEN units_left <= 0 THEN most_recent_sale | ||||
|             ELSE NOW() | ||||
|           END | ||||
|         )) - 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 | ||||
|       WHEN per_day = 0 THEN NULL | ||||
|       ELSE GREATEST(0, units_left / per_day) | ||||
|     END AS days_left | ||||
|   FROM enhanced_overview1 | ||||
| ) | ||||
| 
 | ||||
| SELECT | ||||
|     *, | ||||
|     CASE | ||||
|         WHEN per_day = 0 THEN NULL | ||||
|         ELSE GREATEST(0, units_left / per_day) | ||||
|     END AS days_left, | ||||
|     CASE | ||||
|         WHEN per_day = 0 THEN NULL | ||||
|         ELSE GREATEST(0, (60 - GREATEST(0, units_left / per_day)) * per_day) | ||||
|     END AS for_two_months | ||||
| 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) | ||||
| ORDER BY days_left ASC, per_day DESC | ||||
|  | ||||
| @ -7,6 +7,7 @@ | ||||
|     <th>Barcode</th> | ||||
|     <th>Name</th> | ||||
|     <th>Inventar</th> | ||||
|     <th>Gesamt</th> | ||||
|     <th>Raum</th> | ||||
|     <th>Verbrauch [1/d]</th> | ||||
|     <th>ETUE [d]</th> | ||||
| @ -17,7 +18,8 @@ | ||||
|     <td><a href="/inventory/item/{{ item.item_id }}">{{ item.item_id }}</a></td> | ||||
|     <td><code>{{ item.item_barcode }}</code></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 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> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user