Updated the operations dashboard to include a rain outlook feature, providing users with a 7-day forecast based on site coordinates. Added latitude and longitude fields to the site form for better weather data integration. Enhanced the fuel log and site management functionalities to utilize dynamic fuel pricing based on historical data. Improved overall data handling and user experience across various dashboard components.
66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
#!/usr/bin/env python3
|
|
"""Create the FUEL_PRICES collection on PocketBase.
|
|
|
|
One row per diesel price change. `effective_from` is the first day the
|
|
price applied (inclusive); the app resolves a fuel log's rate by picking
|
|
the latest row on or before the log's own date.
|
|
|
|
Until this collection has rows, every fuel figure falls back to
|
|
RATE_PER_LITRE in src/lib/metrics/constants.ts — i.e. exactly what the
|
|
app showed before dated pricing. Adding rows is what actually corrects
|
|
the historical numbers.
|
|
|
|
Idempotent: re-running when the collection exists is a no-op.
|
|
|
|
Credentials come from .env.local (or the environment):
|
|
|
|
python3 scripts/pb-add-fuel-prices.py
|
|
|
|
Rules match the other collections (scripts/pb-relax-rules.py):
|
|
list/view/create for any authenticated user, update/delete superuser only.
|
|
"""
|
|
import sys
|
|
|
|
from pb_env import http, superuser_token
|
|
|
|
TOKEN = superuser_token()
|
|
|
|
AUTH_RULE = "@request.auth.id != ''"
|
|
|
|
DEF = {
|
|
"name": "FUEL_PRICES",
|
|
"type": "base",
|
|
"fields": [
|
|
{"name": "effective_from", "type": "date", "required": True},
|
|
{"name": "price_per_litre", "type": "number", "required": True, "min": 0},
|
|
{"name": "notes", "type": "text", "required": False},
|
|
],
|
|
"indexes": [
|
|
"CREATE UNIQUE INDEX `idx_fuel_prices_effective_from` "
|
|
"ON `fuel_prices` (`effective_from`)",
|
|
],
|
|
"listRule": AUTH_RULE,
|
|
"viewRule": AUTH_RULE,
|
|
"createRule": AUTH_RULE,
|
|
"updateRule": None,
|
|
"deleteRule": None,
|
|
}
|
|
|
|
code, resp = http("POST", "/api/collections", DEF, TOKEN)
|
|
if code == 200:
|
|
print(f" ✓ FUEL_PRICES created → {resp['id']}")
|
|
elif code == 400:
|
|
code2, existing = http("GET", "/api/collections/FUEL_PRICES", token=TOKEN)
|
|
if code2 == 200:
|
|
print(f" • FUEL_PRICES already exists → {existing['id']}")
|
|
else:
|
|
sys.exit(f" ✗ FAILED: {resp}")
|
|
else:
|
|
sys.exit(f" ✗ FAILED: {code} {resp}")
|
|
|
|
print(
|
|
"\nNext: add one row per diesel price change in the PocketBase admin UI.\n"
|
|
" effective_from price_per_litre\n"
|
|
" 2026-08-05 25.65 <- whatever was true that month\n"
|
|
"Until rows exist, every fuel figure stays on the RATE_PER_LITRE fallback."
|
|
)
|