Compare commits

...

4 Commits

Author SHA1 Message Date
a41f168adc Refactor ShipmentInfo and PurchaseOrder Models for Improved Clarity and Functionality
All checks were successful
farmcontrol/farmcontrol-ui/pipeline/head This commit looks good
- Updated ShipmentInfo component to enhance code readability by adjusting label widths and formatting masterFilter properties.
- Refactored PurchaseOrder model to spread objectData properties, improving data handling and consistency across order-related functionalities.
2026-09-01 16:49:39 +01:00
9b309aa61c 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.
2026-09-01 16:35:09 +01:00
6800702881 Add Stock Events Section to Stock Audit Info Component
- Introduced StockEventIcon and added a new section for Stock Events in the StockAuditInfo component.
- Updated the collapse state management to include stock events, enhancing the user interface and data visibility.
- Modified the ObjectTable to display stock events related to the selected stock audit, improving data representation and user experience.
2026-09-01 16:34:58 +01:00
3475c1b35d Add padding to table cells in App.css for improved layout consistency 2026-09-01 16:34:49 +01:00
9 changed files with 236 additions and 13 deletions

View File

@ -2306,3 +2306,12 @@ span.ant-skeleton-input.ant-skeleton-input-sm.text-skeleton {
font-size: 18px;
color: var(--color-primary);
}
.ant-table-wrapper .ant-table-cell,
.ant-table-wrapper .ant-table-thead > tr > th,
.ant-table-wrapper .ant-table-tbody > tr > th,
.ant-table-wrapper .ant-table-tbody > tr > td,
.ant-table-wrapper tfoot > tr > th,
.ant-table-wrapper tfoot > tr > td {
padding: 12px 8px;
}

View File

@ -87,7 +87,7 @@ const ShipmentInfo = () => {
finishEdit: () => {
objectFormRef?.current?.handleUpdate?.()
return true
},
}
}
return (
@ -196,7 +196,7 @@ const ShipmentInfo = () => {
visibleProperties={{
items: false
}}
labelWidth='175px'
labelWidth='285px'
/>
</InfoCollapse>
<InfoCollapse
@ -210,7 +210,10 @@ const ShipmentInfo = () => {
>
<ObjectTable
type='orderItem'
masterFilter={{ shipment: getModelByName('shipment').prefix + ':' + shipmentId }}
masterFilter={{
shipment:
getModelByName('shipment').prefix + ':' + shipmentId
}}
visibleColumns={{
shipment: false,
order: false,
@ -234,7 +237,7 @@ const ShipmentInfo = () => {
indicator={<LoadingOutlined />}
>
<Card>
<NotesPanel _id={shipmentId} type='shipment' />
<NotesPanel _id={shipmentId} type='shipment' />
</Card>
</Spin>
</InfoCollapse>
@ -251,10 +254,7 @@ const ShipmentInfo = () => {
<ObjectTable
type='auditLog'
masterFilter={{
parent:
getModelByName('shipment').prefix +
':' +
shipmentId
parent: getModelByName('shipment').prefix + ':' + shipmentId
}}
visibleColumns={{ _id: false, parent: false }}
/>

View File

@ -14,6 +14,7 @@ import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import StockAuditIcon from '../../../Icons/StockAuditIcon.jsx'
import StockEventIcon from '../../../Icons/StockEventIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
@ -41,6 +42,7 @@ const StockAuditInfo = () => {
{
info: true,
auditLines: true,
stockEvents: true,
notes: true,
auditLogs: false
}
@ -108,6 +110,7 @@ const StockAuditInfo = () => {
items={[
{ key: 'info', label: 'Stock Audit Information' },
{ key: 'auditLines', label: 'Audit Lines' },
{ key: 'stockEvents', label: 'Stock Events' },
{ key: 'notes', label: 'Notes' },
{ key: 'auditLogs', label: 'Audit Logs' }
]}
@ -212,6 +215,32 @@ const StockAuditInfo = () => {
</ObjectForm>
</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('stockAudit').prefix + ':' + stockAuditId
}}
visibleColumns={{
owner: false,
'owner.type': false
}}
/>
)}
</InfoCollapse>
<InfoCollapse
title='Notes'
icon={<NoteIcon />}

View File

@ -12,6 +12,10 @@ import ViewButton from '../../common/ViewButton.jsx'
import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
import NoteIcon from '../../../Icons/NoteIcon.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 EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
@ -40,6 +44,10 @@ const StockLocationInfo = () => {
'StockLocationInfo',
{
info: true,
filamentStocks: true,
partStocks: true,
productStocks: true,
stockAudits: true,
notes: true,
auditLogs: false
}
@ -107,6 +115,10 @@ const StockLocationInfo = () => {
disabled={objectFormState.loading}
items={[
{ 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: 'auditLogs', label: 'Audit Logs' }
]}
@ -193,6 +205,118 @@ const StockLocationInfo = () => {
</InfoCollapse>
</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
title='Notes'
icon={<NoteIcon />}

View File

@ -13,6 +13,7 @@ import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import StockTransferIcon from '../../../Icons/StockTransferIcon.jsx'
import StockEventIcon from '../../../Icons/StockEventIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
@ -47,6 +48,7 @@ const StockTransferInfo = () => {
{
info: true,
lines: true,
stockEvents: true,
notes: true,
auditLogs: false
}
@ -114,6 +116,7 @@ const StockTransferInfo = () => {
items={[
{ key: 'info', label: 'Transfer' },
{ key: 'lines', label: 'Lines' },
{ key: 'stockEvents', label: 'Stock Events' },
{ key: 'notes', label: 'Notes' },
{ key: 'auditLogs', label: 'Audit Logs' }
]}
@ -220,6 +223,34 @@ const StockTransferInfo = () => {
</ObjectForm>
</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
title='Notes'
icon={<NoteIcon />}

View File

@ -10,6 +10,7 @@ import ViewButton from '../../common/ViewButton'
import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import StockAuditLevelIcon from '../../../Icons/StockAuditLevelIcon.jsx'
import StockAuditIcon from '../../../Icons/StockAuditIcon.jsx'
import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
@ -36,6 +37,7 @@ const StockAuditLevelInfo = () => {
{
info: true,
auditLines: true,
stockAudits: true,
auditLogs: false
}
)
@ -97,6 +99,7 @@ const StockAuditLevelInfo = () => {
items={[
{ key: 'info', label: 'Stock Audit Level Information' },
{ key: 'auditLines', label: 'Audit Lines' },
{ key: 'stockAudits', label: 'Stock Audits' },
{ key: 'auditLogs', label: 'Audit Logs' }
]}
visibleState={collapseState}
@ -198,6 +201,33 @@ const StockAuditLevelInfo = () => {
)}
</ObjectForm>
</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
title='Audit Logs'
icon={<AuditLogIcon />}

View File

@ -133,7 +133,7 @@ export const PurchaseOrder = {
return objectData?.state?.type != 'draft'
},
objectData: (objectData) => ({
order: { _id: objectData._id },
order: { ...objectData },
orderType: 'purchaseOrder',
syncAmount: 'itemCost'
})
@ -148,7 +148,7 @@ export const PurchaseOrder = {
},
objectData: (objectData) => ({
orderType: 'purchaseOrder',
order: { _id: objectData._id }
order: { ...objectData }
})
},
{
@ -167,7 +167,7 @@ export const PurchaseOrder = {
},
objectData: (objectData) => ({
orderType: 'purchaseOrder',
order: objectData
order: { ...objectData }
})
},
{

View File

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

View File

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