printedparts: show revision at kiosk; low-stock email uses gage tag + item link

Kiosk now displays the scanned revision (badge, quantity, and done screens) so
the operator sees which revision they checked out - it was already recorded on
the take, just not shown. Low-stock email now uses the gage lab tag (was the
internal item code) and links to the item page when site_base_url is set (new
core setting, category email; emails have no request context to derive the URL).
This commit is contained in:
cproudlock
2026-07-22 10:12:51 -04:00
parent baf6862151
commit d141fef203
3 changed files with 22 additions and 3 deletions

View File

@@ -330,13 +330,20 @@ def _send_lowstock_alert(item):
Recipients: Setting printedparts_alert_email (comma-separated), falling
back to the site's alert_recipients. Never fails the transaction - the
ledger write already committed."""
from shopdb.api import send_email, send_alert
subject = (f'Low stock: {item.itemname} ({item.itemcode}) - '
from shopdb.api import send_email, send_alert, Setting
code = item.gagelabtag or item.itemcode
subject = (f'Low stock: {item.itemname} ({code}) - '
f'{item.quantityonhand} left')
html = (f'<p><strong>{item.itemname}</strong> ({item.itemcode}) is down '
# Absolute link to the item page when the site base URL is configured
# (e.g. https://<host>/ops). Emails have no request context to derive it.
base = (Setting.get('site_base_url') or '').rstrip('/')
link_html = (f'<p><a href="{base}/printedparts/{item.printeditemid}">'
f'View {code}</a></p>') if base else ''
html = (f'<p><strong>{item.itemname}</strong> ({code}) is down '
f'to <strong>{item.quantityonhand}</strong> '
f'(threshold {item.lowstockthreshold}).</p>'
f'<p>Bin: {item.binlocation or "-"}</p>'
f'{link_html}'
f'<p>Time to print more.</p>')
try:
recipients = _alert_recipients()