Add Stock Audit and Stock Event Sections to Inventory Components

- Introduced new sections for Filament Stocks, Part Stocks, Product Stocks, and Stock Audits in the StockLocationInfo component, enhancing inventory visibility.
- Added Stock Events section to the StockTransferInfo component, improving data representation for stock transfers.
- Updated StockAuditLevelInfo component to include Stock Audits, ensuring comprehensive audit management.
- Enhanced state management and UI elements for better user experience across all components.
This commit is contained in:
Tom Butcher 2026-09-01 16:35:09 +01:00
parent 6800702881
commit 9b309aa61c
5 changed files with 187 additions and 2 deletions

View File

@ -12,6 +12,10 @@ import ViewButton from '../../common/ViewButton.jsx'
import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx' import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
import NoteIcon from '../../../Icons/NoteIcon.jsx' import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import StockAuditIcon from '../../../Icons/StockAuditIcon.jsx'
import FilamentStockIcon from '../../../Icons/FilamentStockIcon.jsx'
import PartStockIcon from '../../../Icons/PartStockIcon.jsx'
import ProductStockIcon from '../../../Icons/ProductStockIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx' import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
@ -40,6 +44,10 @@ const StockLocationInfo = () => {
'StockLocationInfo', 'StockLocationInfo',
{ {
info: true, info: true,
filamentStocks: true,
partStocks: true,
productStocks: true,
stockAudits: true,
notes: true, notes: true,
auditLogs: false auditLogs: false
} }
@ -107,6 +115,10 @@ const StockLocationInfo = () => {
disabled={objectFormState.loading} disabled={objectFormState.loading}
items={[ items={[
{ key: 'info', label: 'Stock Location' }, { key: 'info', label: 'Stock Location' },
{ key: 'filamentStocks', label: 'Filament Stocks' },
{ key: 'partStocks', label: 'Part Stocks' },
{ key: 'productStocks', label: 'Product Stocks' },
{ key: 'stockAudits', label: 'Stock Audits' },
{ key: 'notes', label: 'Notes' }, { key: 'notes', label: 'Notes' },
{ key: 'auditLogs', label: 'Audit Logs' } { key: 'auditLogs', label: 'Audit Logs' }
]} ]}
@ -193,6 +205,118 @@ const StockLocationInfo = () => {
</InfoCollapse> </InfoCollapse>
</ActionHandler> </ActionHandler>
<InfoCollapse
title='Filament Stocks'
icon={<FilamentStockIcon />}
active={collapseState.filamentStocks}
onToggle={(expanded) =>
updateCollapseState('filamentStocks', expanded)
}
collapseKey='filamentStocks'
>
{objectFormState.loading ? (
<InfoCollapsePlaceholder />
) : (
<ObjectTable
type='filamentStock'
masterFilter={{
stockLocation:
getModelByName('stockLocation').prefix +
':' +
stockLocationId
}}
visibleColumns={{
stockLocation: false,
'stockLocation._id': false
}}
/>
)}
</InfoCollapse>
<InfoCollapse
title='Part Stocks'
icon={<PartStockIcon />}
active={collapseState.partStocks}
onToggle={(expanded) =>
updateCollapseState('partStocks', expanded)
}
collapseKey='partStocks'
>
{objectFormState.loading ? (
<InfoCollapsePlaceholder />
) : (
<ObjectTable
type='partStock'
masterFilter={{
stockLocation:
getModelByName('stockLocation').prefix +
':' +
stockLocationId
}}
visibleColumns={{
stockLocation: false,
'stockLocation._id': false
}}
/>
)}
</InfoCollapse>
<InfoCollapse
title='Product Stocks'
icon={<ProductStockIcon />}
active={collapseState.productStocks}
onToggle={(expanded) =>
updateCollapseState('productStocks', expanded)
}
collapseKey='productStocks'
>
{objectFormState.loading ? (
<InfoCollapsePlaceholder />
) : (
<ObjectTable
type='productStock'
masterFilter={{
stockLocation:
getModelByName('stockLocation').prefix +
':' +
stockLocationId
}}
visibleColumns={{
stockLocation: false,
'stockLocation._id': false
}}
/>
)}
</InfoCollapse>
<InfoCollapse
title='Stock Audits'
icon={<StockAuditIcon />}
active={collapseState.stockAudits}
onToggle={(expanded) =>
updateCollapseState('stockAudits', expanded)
}
collapseKey='stockAudits'
>
{objectFormState.loading ? (
<InfoCollapsePlaceholder />
) : (
<ObjectTable
type='stockAudit'
masterFilter={{
stockLocation:
getModelByName('stockLocation').prefix +
':' +
stockLocationId
}}
visibleColumns={{
stockLocation: false,
'stockLocation._id': false
}}
/>
)}
</InfoCollapse>
<InfoCollapse <InfoCollapse
title='Notes' title='Notes'
icon={<NoteIcon />} icon={<NoteIcon />}

View File

@ -13,6 +13,7 @@ import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
import NoteIcon from '../../../Icons/NoteIcon.jsx' import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import StockTransferIcon from '../../../Icons/StockTransferIcon.jsx' import StockTransferIcon from '../../../Icons/StockTransferIcon.jsx'
import StockEventIcon from '../../../Icons/StockEventIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx' import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
@ -47,6 +48,7 @@ const StockTransferInfo = () => {
{ {
info: true, info: true,
lines: true, lines: true,
stockEvents: true,
notes: true, notes: true,
auditLogs: false auditLogs: false
} }
@ -114,6 +116,7 @@ const StockTransferInfo = () => {
items={[ items={[
{ key: 'info', label: 'Transfer' }, { key: 'info', label: 'Transfer' },
{ key: 'lines', label: 'Lines' }, { key: 'lines', label: 'Lines' },
{ key: 'stockEvents', label: 'Stock Events' },
{ key: 'notes', label: 'Notes' }, { key: 'notes', label: 'Notes' },
{ key: 'auditLogs', label: 'Audit Logs' } { key: 'auditLogs', label: 'Audit Logs' }
]} ]}
@ -220,6 +223,34 @@ const StockTransferInfo = () => {
</ObjectForm> </ObjectForm>
</ActionHandler> </ActionHandler>
<InfoCollapse
title='Stock Events'
icon={<StockEventIcon />}
active={collapseState.stockEvents}
onToggle={(expanded) =>
updateCollapseState('stockEvents', expanded)
}
collapseKey='stockEvents'
>
{objectFormState.loading ? (
<InfoCollapsePlaceholder />
) : (
<ObjectTable
type='stockEvent'
masterFilter={{
owner:
getModelByName('stockTransfer').prefix +
':' +
stockTransferId
}}
visibleColumns={{
owner: false,
'owner.type': false
}}
/>
)}
</InfoCollapse>
<InfoCollapse <InfoCollapse
title='Notes' title='Notes'
icon={<NoteIcon />} icon={<NoteIcon />}

View File

@ -10,6 +10,7 @@ import ViewButton from '../../common/ViewButton'
import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx' import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import StockAuditLevelIcon from '../../../Icons/StockAuditLevelIcon.jsx' import StockAuditLevelIcon from '../../../Icons/StockAuditLevelIcon.jsx'
import StockAuditIcon from '../../../Icons/StockAuditIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx' import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
@ -36,6 +37,7 @@ const StockAuditLevelInfo = () => {
{ {
info: true, info: true,
auditLines: true, auditLines: true,
stockAudits: true,
auditLogs: false auditLogs: false
} }
) )
@ -97,6 +99,7 @@ const StockAuditLevelInfo = () => {
items={[ items={[
{ key: 'info', label: 'Stock Audit Level Information' }, { key: 'info', label: 'Stock Audit Level Information' },
{ key: 'auditLines', label: 'Audit Lines' }, { key: 'auditLines', label: 'Audit Lines' },
{ key: 'stockAudits', label: 'Stock Audits' },
{ key: 'auditLogs', label: 'Audit Logs' } { key: 'auditLogs', label: 'Audit Logs' }
]} ]}
visibleState={collapseState} visibleState={collapseState}
@ -198,6 +201,33 @@ const StockAuditLevelInfo = () => {
)} )}
</ObjectForm> </ObjectForm>
</ActionHandler> </ActionHandler>
<InfoCollapse
title='Stock Audits'
icon={<StockAuditIcon />}
active={collapseState.stockAudits}
onToggle={(expanded) =>
updateCollapseState('stockAudits', expanded)
}
collapseKey='stockAudits'
>
{objectFormState.loading ? (
<InfoCollapsePlaceholder />
) : (
<ObjectTable
type='stockAudit'
masterFilter={{
auditLevel:
getModelByName('stockAuditLevel').prefix +
':' +
stockAuditLevelId
}}
visibleColumns={{
auditLevel: false,
'auditLevel._id': false
}}
/>
)}
</InfoCollapse>
<InfoCollapse <InfoCollapse
title='Audit Logs' title='Audit Logs'
icon={<AuditLogIcon />} icon={<AuditLogIcon />}

View File

@ -35,7 +35,7 @@ export const StockAudit = {
name: 'new', name: 'new',
type: 'modal', type: 'modal',
pageName: 'list', pageName: 'list',
modalWidth: 800, modalWidth: 700,
label: 'New Stock Audit', label: 'New Stock Audit',
icon: PlusIcon, icon: PlusIcon,
content: (objectData, { onOk } = {}) => { content: (objectData, { onOk } = {}) => {

View File

@ -32,7 +32,7 @@ export const StockAuditLevel = {
name: 'new', name: 'new',
type: 'modal', type: 'modal',
pageName: 'list', pageName: 'list',
modalWidth: 900, modalWidth: 700,
label: 'New Stock Audit Level', label: 'New Stock Audit Level',
icon: PlusIcon, icon: PlusIcon,
content: (objectData, { onOk } = {}) => { content: (objectData, { onOk } = {}) => {