mirror of
https://github.com/inventree/InvenTree.git
synced 2026-04-28 13:54:25 +00:00
[UI] Adjust system settings (#11808)
* Adjust system settings - Rearrange settings to match major menu groups - Split long settings panels into separate lists Co-authored-by: Copilot <copilot@github.com> * Adjust playwright tests --------- Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
import { t } from '@lingui/core/macro';
|
import { t } from '@lingui/core/macro';
|
||||||
import { Divider, Skeleton, Stack } from '@mantine/core';
|
import { Skeleton, Stack } from '@mantine/core';
|
||||||
import {
|
import {
|
||||||
IconBellCog,
|
IconBellCog,
|
||||||
IconCategory,
|
IconBox,
|
||||||
IconClipboardList,
|
IconBuildingFactory2,
|
||||||
IconCurrencyDollar,
|
IconCurrencyDollar,
|
||||||
IconFileAnalytics,
|
IconFileAnalytics,
|
||||||
IconFingerprint,
|
IconFingerprint,
|
||||||
@@ -13,10 +13,7 @@ import {
|
|||||||
IconQrcode,
|
IconQrcode,
|
||||||
IconServerCog,
|
IconServerCog,
|
||||||
IconShoppingCart,
|
IconShoppingCart,
|
||||||
IconTag,
|
IconTruckDelivery
|
||||||
IconTools,
|
|
||||||
IconTruckDelivery,
|
|
||||||
IconTruckReturn
|
|
||||||
} from '@tabler/icons-react';
|
} from '@tabler/icons-react';
|
||||||
import { lazy, useMemo } from 'react';
|
import { lazy, useMemo } from 'react';
|
||||||
|
|
||||||
@@ -81,6 +78,7 @@ export default function SystemSettings() {
|
|||||||
label: t`Authentication`,
|
label: t`Authentication`,
|
||||||
icon: <IconFingerprint />,
|
icon: <IconFingerprint />,
|
||||||
content: (
|
content: (
|
||||||
|
<Stack gap='xs'>
|
||||||
<GlobalSettingList
|
<GlobalSettingList
|
||||||
keys={[
|
keys={[
|
||||||
'LOGIN_ENABLE_PWD_FORGOT',
|
'LOGIN_ENABLE_PWD_FORGOT',
|
||||||
@@ -88,18 +86,24 @@ export default function SystemSettings() {
|
|||||||
'LOGIN_ENFORCE_MFA',
|
'LOGIN_ENFORCE_MFA',
|
||||||
'LOGIN_ENABLE_REG',
|
'LOGIN_ENABLE_REG',
|
||||||
'LOGIN_SIGNUP_MAIL_TWICE',
|
'LOGIN_SIGNUP_MAIL_TWICE',
|
||||||
'LOGIN_SIGNUP_PWD_TWICE',
|
'LOGIN_SIGNUP_PWD_TWICE'
|
||||||
'SIGNUP_GROUP',
|
]}
|
||||||
'LOGIN_SIGNUP_MAIL_RESTRICTION',
|
/>
|
||||||
|
<GlobalSettingList
|
||||||
|
heading={t`Single Sign-On (SSO) Settings`}
|
||||||
|
keys={[
|
||||||
'LOGIN_ENABLE_SSO',
|
'LOGIN_ENABLE_SSO',
|
||||||
'LOGIN_ENABLE_SSO_REG',
|
'LOGIN_ENABLE_SSO_REG',
|
||||||
'LOGIN_SIGNUP_SSO_AUTO',
|
'LOGIN_SIGNUP_SSO_AUTO',
|
||||||
'LOGIN_ENABLE_SSO_GROUP_SYNC',
|
'LOGIN_ENABLE_SSO_GROUP_SYNC',
|
||||||
'SSO_GROUP_MAP',
|
'SSO_GROUP_MAP',
|
||||||
'SSO_GROUP_KEY',
|
'SSO_GROUP_KEY',
|
||||||
'SSO_REMOVE_GROUPS'
|
'SSO_REMOVE_GROUPS',
|
||||||
|
'SIGNUP_GROUP',
|
||||||
|
'LOGIN_SIGNUP_MAIL_RESTRICTION'
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
|
</Stack>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -168,12 +172,6 @@ export default function SystemSettings() {
|
|||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: 'labels',
|
|
||||||
label: t`Labels`,
|
|
||||||
icon: <IconTag />,
|
|
||||||
content: <GlobalSettingList keys={['LABEL_ENABLE', 'LABEL_DPI']} />
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: 'reporting',
|
name: 'reporting',
|
||||||
label: t`Reporting`,
|
label: t`Reporting`,
|
||||||
@@ -184,7 +182,9 @@ export default function SystemSettings() {
|
|||||||
'REPORT_ENABLE',
|
'REPORT_ENABLE',
|
||||||
'REPORT_DEFAULT_PAGE_SIZE',
|
'REPORT_DEFAULT_PAGE_SIZE',
|
||||||
'REPORT_DEBUG_MODE',
|
'REPORT_DEBUG_MODE',
|
||||||
'REPORT_LOG_ERRORS'
|
'REPORT_LOG_ERRORS',
|
||||||
|
'LABEL_ENABLE',
|
||||||
|
'LABEL_DPI'
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
@@ -198,8 +198,9 @@ export default function SystemSettings() {
|
|||||||
{
|
{
|
||||||
name: 'parts',
|
name: 'parts',
|
||||||
label: t`Parts`,
|
label: t`Parts`,
|
||||||
icon: <IconCategory />,
|
icon: <IconBox />,
|
||||||
content: (
|
content: (
|
||||||
|
<Stack gap='xs'>
|
||||||
<GlobalSettingList
|
<GlobalSettingList
|
||||||
keys={[
|
keys={[
|
||||||
'PART_NAME_FORMAT',
|
'PART_NAME_FORMAT',
|
||||||
@@ -210,6 +211,13 @@ export default function SystemSettings() {
|
|||||||
'PART_ENABLE_REVISION',
|
'PART_ENABLE_REVISION',
|
||||||
'PART_REVISION_ASSEMBLY_ONLY',
|
'PART_REVISION_ASSEMBLY_ONLY',
|
||||||
'PART_SHOW_RELATED',
|
'PART_SHOW_RELATED',
|
||||||
|
'PART_BOM_ALLOW_ZERO_QUANTITY',
|
||||||
|
'PART_CATEGORY_DEFAULT_ICON'
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
<GlobalSettingList
|
||||||
|
heading={t`Part Creation`}
|
||||||
|
keys={[
|
||||||
'PART_CREATE_INITIAL',
|
'PART_CREATE_INITIAL',
|
||||||
'PART_CREATE_SUPPLIER',
|
'PART_CREATE_SUPPLIER',
|
||||||
'PART_TEMPLATE',
|
'PART_TEMPLATE',
|
||||||
@@ -220,13 +228,12 @@ export default function SystemSettings() {
|
|||||||
'PART_SALABLE',
|
'PART_SALABLE',
|
||||||
'PART_VIRTUAL',
|
'PART_VIRTUAL',
|
||||||
'PART_COPY_BOM',
|
'PART_COPY_BOM',
|
||||||
'PART_BOM_ALLOW_ZERO_QUANTITY',
|
|
||||||
'PART_COPY_PARAMETERS',
|
'PART_COPY_PARAMETERS',
|
||||||
'PART_COPY_TESTS',
|
'PART_COPY_TESTS',
|
||||||
'PART_CATEGORY_PARAMETERS',
|
'PART_CATEGORY_PARAMETERS'
|
||||||
'PART_CATEGORY_DEFAULT_ICON'
|
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
|
</Stack>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -234,15 +241,12 @@ export default function SystemSettings() {
|
|||||||
label: t`Stock`,
|
label: t`Stock`,
|
||||||
icon: <IconPackages />,
|
icon: <IconPackages />,
|
||||||
content: (
|
content: (
|
||||||
|
<Stack gap='xs'>
|
||||||
<GlobalSettingList
|
<GlobalSettingList
|
||||||
keys={[
|
keys={[
|
||||||
'SERIAL_NUMBER_GLOBALLY_UNIQUE',
|
'SERIAL_NUMBER_GLOBALLY_UNIQUE',
|
||||||
'STOCK_DELETE_DEPLETED_DEFAULT',
|
'STOCK_DELETE_DEPLETED_DEFAULT',
|
||||||
'STOCK_BATCH_CODE_TEMPLATE',
|
'STOCK_BATCH_CODE_TEMPLATE',
|
||||||
'STOCK_ENABLE_EXPIRY',
|
|
||||||
'STOCK_STALE_DAYS',
|
|
||||||
'STOCK_ALLOW_EXPIRED_SALE',
|
|
||||||
'STOCK_ALLOW_EXPIRED_BUILD',
|
|
||||||
'STOCK_OWNERSHIP_CONTROL',
|
'STOCK_OWNERSHIP_CONTROL',
|
||||||
'STOCK_LOCATION_DEFAULT_ICON',
|
'STOCK_LOCATION_DEFAULT_ICON',
|
||||||
'STOCK_SHOW_INSTALLED_ITEMS',
|
'STOCK_SHOW_INSTALLED_ITEMS',
|
||||||
@@ -251,14 +255,15 @@ export default function SystemSettings() {
|
|||||||
'TEST_STATION_DATA'
|
'TEST_STATION_DATA'
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
)
|
<GlobalSettingList
|
||||||
},
|
heading={t`Stock Expiry`}
|
||||||
{
|
keys={[
|
||||||
name: 'stock-history',
|
'STOCK_ENABLE_EXPIRY',
|
||||||
label: t`Stock History`,
|
'STOCK_STALE_DAYS',
|
||||||
icon: <IconClipboardList />,
|
'STOCK_ALLOW_EXPIRED_SALE',
|
||||||
content: (
|
'STOCK_ALLOW_EXPIRED_BUILD'
|
||||||
<Stack gap='xs'>
|
]}
|
||||||
|
/>
|
||||||
<GlobalSettingList
|
<GlobalSettingList
|
||||||
heading={t`Part Stocktake`}
|
heading={t`Part Stocktake`}
|
||||||
keys={[
|
keys={[
|
||||||
@@ -269,7 +274,6 @@ export default function SystemSettings() {
|
|||||||
'STOCKTAKE_DELETE_DAYS'
|
'STOCKTAKE_DELETE_DAYS'
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
<Divider />
|
|
||||||
<GlobalSettingList
|
<GlobalSettingList
|
||||||
heading={t`Stock Tracking`}
|
heading={t`Stock Tracking`}
|
||||||
keys={[
|
keys={[
|
||||||
@@ -281,11 +285,12 @@ export default function SystemSettings() {
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'buildorders',
|
name: 'manufacturing',
|
||||||
label: t`Build Orders`,
|
label: t`Manufacturing`,
|
||||||
icon: <IconTools />,
|
icon: <IconBuildingFactory2 />,
|
||||||
content: (
|
content: (
|
||||||
<GlobalSettingList
|
<GlobalSettingList
|
||||||
|
heading={t`Build Orders`}
|
||||||
keys={[
|
keys={[
|
||||||
'BUILDORDER_REFERENCE_PATTERN',
|
'BUILDORDER_REFERENCE_PATTERN',
|
||||||
'BUILDORDER_EXTERNAL_BUILDS',
|
'BUILDORDER_EXTERNAL_BUILDS',
|
||||||
@@ -300,11 +305,12 @@ export default function SystemSettings() {
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'purchaseorders',
|
name: 'purchasing',
|
||||||
label: t`Purchase Orders`,
|
label: t`Purchasing`,
|
||||||
icon: <IconShoppingCart />,
|
icon: <IconShoppingCart />,
|
||||||
content: (
|
content: (
|
||||||
<GlobalSettingList
|
<GlobalSettingList
|
||||||
|
heading={t`Purchase Orders`}
|
||||||
keys={[
|
keys={[
|
||||||
'PURCHASEORDER_REFERENCE_PATTERN',
|
'PURCHASEORDER_REFERENCE_PATTERN',
|
||||||
'PURCHASEORDER_REQUIRE_RESPONSIBLE',
|
'PURCHASEORDER_REQUIRE_RESPONSIBLE',
|
||||||
@@ -316,11 +322,13 @@ export default function SystemSettings() {
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'salesorders',
|
name: 'sales',
|
||||||
label: t`Sales Orders`,
|
label: t`Sales`,
|
||||||
icon: <IconTruckDelivery />,
|
icon: <IconTruckDelivery />,
|
||||||
content: (
|
content: (
|
||||||
|
<Stack gap='xs'>
|
||||||
<GlobalSettingList
|
<GlobalSettingList
|
||||||
|
heading={t`Sales Orders`}
|
||||||
keys={[
|
keys={[
|
||||||
'SALESORDER_REFERENCE_PATTERN',
|
'SALESORDER_REFERENCE_PATTERN',
|
||||||
'SALESORDER_REQUIRE_RESPONSIBLE',
|
'SALESORDER_REQUIRE_RESPONSIBLE',
|
||||||
@@ -330,14 +338,8 @@ export default function SystemSettings() {
|
|||||||
'SALESORDER_SHIPMENT_REQUIRES_CHECK'
|
'SALESORDER_SHIPMENT_REQUIRES_CHECK'
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'returnorders',
|
|
||||||
label: t`Return Orders`,
|
|
||||||
icon: <IconTruckReturn />,
|
|
||||||
content: (
|
|
||||||
<GlobalSettingList
|
<GlobalSettingList
|
||||||
|
heading={t`Return Orders`}
|
||||||
keys={[
|
keys={[
|
||||||
'RETURNORDER_ENABLED',
|
'RETURNORDER_ENABLED',
|
||||||
'RETURNORDER_REFERENCE_PATTERN',
|
'RETURNORDER_REFERENCE_PATTERN',
|
||||||
@@ -345,11 +347,12 @@ export default function SystemSettings() {
|
|||||||
'RETURNORDER_EDIT_COMPLETED_ORDERS'
|
'RETURNORDER_EDIT_COMPLETED_ORDERS'
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
|
</Stack>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'plugins',
|
name: 'plugins',
|
||||||
label: t`Plugin Settings`,
|
label: t`Plugins`,
|
||||||
icon: <IconPlugConnected />,
|
icon: <IconPlugConnected />,
|
||||||
content: <PluginSettingsGroup global={true} />
|
content: <PluginSettingsGroup global={true} />
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -178,7 +178,6 @@ test('Settings - Global', async ({ browser }) => {
|
|||||||
await loadTab(page, 'Pricing');
|
await loadTab(page, 'Pricing');
|
||||||
await loadTab(page, 'Parts');
|
await loadTab(page, 'Parts');
|
||||||
await loadTab(page, 'Stock', true);
|
await loadTab(page, 'Stock', true);
|
||||||
await loadTab(page, 'Stock History');
|
|
||||||
|
|
||||||
await loadTab(page, 'Notifications');
|
await loadTab(page, 'Notifications');
|
||||||
await page
|
await page
|
||||||
@@ -195,7 +194,7 @@ test('Settings - Global', async ({ browser }) => {
|
|||||||
.getByText('URL that is used to send messages to a slack channel')
|
.getByText('URL that is used to send messages to a slack channel')
|
||||||
.waitFor();
|
.waitFor();
|
||||||
|
|
||||||
await loadTab(page, 'Plugin Settings');
|
await loadTab(page, 'Plugins');
|
||||||
await page
|
await page
|
||||||
.getByText('The settings below are specific to each available plugin')
|
.getByText('The settings below are specific to each available plugin')
|
||||||
.waitFor();
|
.waitFor();
|
||||||
@@ -236,13 +235,12 @@ test('Settings - Admin', async ({ browser }) => {
|
|||||||
await loadTab(page, 'Barcodes');
|
await loadTab(page, 'Barcodes');
|
||||||
await loadTab(page, 'Notifications');
|
await loadTab(page, 'Notifications');
|
||||||
await loadTab(page, 'Pricing');
|
await loadTab(page, 'Pricing');
|
||||||
await loadTab(page, 'Labels');
|
|
||||||
await loadTab(page, 'Reporting');
|
await loadTab(page, 'Reporting');
|
||||||
|
await loadTab(page, 'Parts');
|
||||||
await loadTab(page, 'Build Orders');
|
await loadTab(page, 'Stock');
|
||||||
await loadTab(page, 'Purchase Orders');
|
await loadTab(page, 'Manufacturing');
|
||||||
await loadTab(page, 'Sales Orders');
|
await loadTab(page, 'Purchasing');
|
||||||
await loadTab(page, 'Return Orders');
|
await loadTab(page, 'Sales');
|
||||||
|
|
||||||
// Admin Center
|
// Admin Center
|
||||||
await page.getByRole('button', { name: 'admin' }).click();
|
await page.getByRole('button', { name: 'admin' }).click();
|
||||||
|
|||||||
Reference in New Issue
Block a user