Show the kiosk label prefix, and let a plugin declare the settings it owns
This commit is contained in:
@@ -14,7 +14,6 @@ from typing import List, Optional, Type
|
||||
from flask import Flask, Blueprint
|
||||
|
||||
from shopdb.plugins.base import BasePlugin, PluginMeta
|
||||
from shopdb.api import db, Setting
|
||||
|
||||
from .models import PrintedItem, PrintedItemTransaction, PrintedItemFile
|
||||
from .api import printedparts_bp
|
||||
@@ -112,43 +111,79 @@ class PrintedpartsPlugin(BasePlugin):
|
||||
]
|
||||
|
||||
def on_install(self, app: Flask) -> None:
|
||||
with app.app_context():
|
||||
self._seed_settings()
|
||||
logger.info('Printedparts plugin installed')
|
||||
logger.info('Printedparts plugin installed')
|
||||
|
||||
def on_enable(self, app: Flask) -> None:
|
||||
# Idempotent re-seed so settings added in later versions reach sites
|
||||
# that installed earlier (enable runs on every upgrade cycle).
|
||||
with app.app_context():
|
||||
self._seed_settings()
|
||||
|
||||
def _seed_settings(self) -> None:
|
||||
defaults = [
|
||||
('printedparts_code_prefix', '3DP', 'string',
|
||||
'Prefix for generated item codes'),
|
||||
('printedparts_label_prefix', '', 'string',
|
||||
'Leading text on the physical gage-lab labels, shown at the kiosk '
|
||||
'before the number box so operators type only the digits. Empty '
|
||||
'shows no prefix. Site-specific: West Jefferson labels read WJ'),
|
||||
('printedparts_default_threshold', '5', 'integer',
|
||||
'Default low-stock threshold for new items'),
|
||||
('printedparts_unknown_badge', 'deny', 'string',
|
||||
'Kiosk policy when a badge resolves to no employee: allow or deny'),
|
||||
('printedparts_alert_email', '', 'string',
|
||||
'Comma-separated low-stock alert recipients; empty uses the '
|
||||
'site alert_recipients'),
|
||||
('printedparts_alert_userids', '', 'string',
|
||||
'Comma-separated shopdb user ids whose account emails receive '
|
||||
'low-stock alerts'),
|
||||
('printedparts_alert_roleids', '', 'string',
|
||||
'Comma-separated role ids; every active member of these roles '
|
||||
'receives low-stock alerts'),
|
||||
('printedparts_alert_supportteamid', '', 'string',
|
||||
'Support team whose webhook receives low-stock alerts; empty uses '
|
||||
'the site alert_webhook_url'),
|
||||
def get_settings_defaults(self) -> List[dict]:
|
||||
# The framework seeds these at install, at enable, and on every
|
||||
# `flask plugin upgrade-all`, so a key added in a later version reaches
|
||||
# a site that installed an earlier one.
|
||||
return [
|
||||
{
|
||||
'key': 'printedparts_code_prefix',
|
||||
'value': '3DP',
|
||||
'valuetype': 'string',
|
||||
'category': 'printedparts',
|
||||
'description': 'Prefix for generated item codes',
|
||||
},
|
||||
{
|
||||
'key': 'printedparts_label_prefix',
|
||||
'value': '',
|
||||
'valuetype': 'string',
|
||||
'category': 'printedparts',
|
||||
# Public: the parts kiosk runs logged out, so the anonymous
|
||||
# read has to be allowed or the prefix never renders there.
|
||||
'public': True,
|
||||
'description': 'Leading text on the physical gage-lab labels, '
|
||||
'shown at the kiosk before the number box so '
|
||||
'operators type only the digits. Empty shows no '
|
||||
'prefix. Site-specific: West Jefferson labels '
|
||||
'read WJ',
|
||||
},
|
||||
{
|
||||
'key': 'printedparts_default_threshold',
|
||||
'value': '5',
|
||||
'valuetype': 'integer',
|
||||
'category': 'printedparts',
|
||||
'description': 'Default low-stock threshold for new items',
|
||||
},
|
||||
{
|
||||
'key': 'printedparts_unknown_badge',
|
||||
'value': 'deny',
|
||||
'valuetype': 'string',
|
||||
'category': 'printedparts',
|
||||
'description': 'Kiosk policy when a badge resolves to no '
|
||||
'employee: allow or deny',
|
||||
},
|
||||
{
|
||||
'key': 'printedparts_alert_email',
|
||||
'value': '',
|
||||
'valuetype': 'string',
|
||||
'category': 'printedparts',
|
||||
'description': 'Comma-separated low-stock alert recipients; '
|
||||
'empty uses the site alert_recipients',
|
||||
},
|
||||
{
|
||||
'key': 'printedparts_alert_userids',
|
||||
'value': '',
|
||||
'valuetype': 'string',
|
||||
'category': 'printedparts',
|
||||
'description': 'Comma-separated shopdb user ids whose account '
|
||||
'emails receive low-stock alerts',
|
||||
},
|
||||
{
|
||||
'key': 'printedparts_alert_roleids',
|
||||
'value': '',
|
||||
'valuetype': 'string',
|
||||
'category': 'printedparts',
|
||||
'description': 'Comma-separated role ids; every active member '
|
||||
'of these roles receives low-stock alerts',
|
||||
},
|
||||
{
|
||||
'key': 'printedparts_alert_supportteamid',
|
||||
'value': '',
|
||||
'valuetype': 'string',
|
||||
'category': 'printedparts',
|
||||
'description': 'Support team whose webhook receives low-stock '
|
||||
'alerts; empty uses the site alert_webhook_url',
|
||||
},
|
||||
]
|
||||
for key, value, valuetype, description in defaults:
|
||||
if Setting.get(key) is None:
|
||||
Setting.set(key, value, valuetype=valuetype,
|
||||
category='printedparts', description=description)
|
||||
db.session.commit()
|
||||
|
||||
Reference in New Issue
Block a user