Refactor Stock Transfer Components and Models for Improved Clarity and Functionality
All checks were successful
farmcontrol/farmcontrol-ui/pipeline/head This commit looks good

- Removed the default transfer name generation from NewStockTransfer component to simplify initialization.
- Updated the description in PostStockTransfer component to clarify the posting process.
- Enhanced StockTransfer model by adding 'fromLocation' and 'toLocation' filters and columns, improving data representation.
- Refactored properties in StockTransfer model to ensure required fields are correctly set and improved data handling for stock types and quantities.
This commit is contained in:
Tom Butcher 2026-09-01 16:04:28 +01:00
parent 458512bc2f
commit d8862b65c9
3 changed files with 44 additions and 49 deletions

View File

@ -1,19 +1,14 @@
import PropTypes from 'prop-types'
import dayjs from 'dayjs'
import ObjectInfo from '../../common/ObjectInfo'
import NewObjectForm from '../../common/NewObjectForm'
import WizardView from '../../common/WizardView'
const defaultTransferName = () =>
`Transfer ${dayjs().format('YYYY-MM-DD HH:mm:ss')}`
const NewStockTransfer = ({ onOk, reset }) => {
return (
<NewObjectForm
type={'stockTransfer'}
reset={reset}
defaultValues={{
name: defaultTransferName(),
state: { type: 'draft' },
lines: []
}}

View File

@ -30,7 +30,7 @@ const PostStockTransfer = ({ onOk, objectData }) => {
return (
<MessageDialogView
title={'Post this stock transfer?'}
description={`Receiving will move stock to the target locations, create destination stock rows, record stock events owned by this transfer, and fill in the "to" stock on each line.`}
description={`Posting will move stock from the transfer's from location to its to location, create destination stock rows, record stock events owned by this transfer, and fill in the "to" stock on each line.`}
onOk={handlePost}
okText='Post'
okLoading={postLoading}

View File

@ -140,16 +140,18 @@ export const StockTransfer = {
filters: [
'state',
'state.type',
'fromLocation',
'toLocation',
'postedAt',
'name',
'createdAt',
'updatedAt',
'_reference'
],
sorters: ['name', 'createdAt', 'postedAt', 'state', 'updatedAt'],
sorters: ['createdAt', 'postedAt', 'state', 'updatedAt'],
columns: [
'_reference',
'name',
'fromLocation',
'toLocation',
'state',
'postedAt',
'createdAt',
@ -190,12 +192,11 @@ export const StockTransfer = {
columnWidth: 175
},
{
name: 'name',
label: 'Name',
type: 'text',
required: true,
columnWidth: 220,
columnFixed: 'left'
name: 'state',
label: 'State',
type: 'state',
readOnly: true,
columnWidth: 260
},
{
name: 'postedAt',
@ -205,11 +206,22 @@ export const StockTransfer = {
columnWidth: 175
},
{
name: 'state',
label: 'State',
type: 'state',
readOnly: true,
columnWidth: 260
name: 'fromLocation',
label: 'From location',
type: 'object',
objectType: 'stockLocation',
showHyperlink: true,
required: true,
columnWidth: 220
},
{
name: 'toLocation',
label: 'To location',
type: 'object',
objectType: 'stockLocation',
showHyperlink: true,
required: true,
columnWidth: 220
},
{
@ -218,21 +230,15 @@ export const StockTransfer = {
type: 'objectChildren',
required: false,
canAddRemove: true,
columns: [
'fromStockType',
'fromStock',
'quantity',
'toStockLocation',
'toStockType',
'toStock'
],
size: 'medium',
properties: [
{
name: 'fromStockType',
label: 'From type',
label: 'Stock type',
type: 'objectType',
required: true,
columnWidth: 180,
disabled: (row, parentData) => parentData?.fromLocation?._id == null,
masterFilter: ['filamentStock', 'partStock', 'productStock']
},
{
@ -242,7 +248,13 @@ export const StockTransfer = {
objectType: (row) => row?.fromStockType,
required: true,
showHyperlink: true,
columnWidth: 230
columnWidth: 230,
masterFilter: (_row, parentData) => {
const fromLocation =
parentData?.fromLocation?._id ?? parentData?.fromLocation
if (!fromLocation) return {}
return { stockLocation: fromLocation }
}
},
{
name: 'quantity',
@ -251,6 +263,12 @@ export const StockTransfer = {
required: true,
min: 0,
columnWidth: 140,
disabled: (row, parentData) => {
return (
parentData?.fromLocation?._id == null ||
row?.fromStock?._id == undefined
)
},
suffix: (row) =>
row?.fromStockType === 'filamentStock' ? 'g net' : null
},
@ -286,23 +304,6 @@ export const StockTransfer = {
suffix: (row) =>
row?.fromStockType === 'filamentStock' ? 'g net' : null
},
{
name: 'toStockLocation',
label: 'To location',
type: 'object',
objectType: 'stockLocation',
required: true,
showHyperlink: true,
columnWidth: 230
},
{
name: 'toStockType',
label: 'To type',
type: 'objectType',
readOnly: true,
columnWidth: 180,
visible: (row) => Boolean(row?.toStockType)
},
{
name: 'toStock',
label: 'To stock',
@ -310,8 +311,7 @@ export const StockTransfer = {
objectType: (row) => row?.toStockType,
readOnly: true,
showHyperlink: true,
columnWidth: 230,
visible: (row) => Boolean(row?.toStock)
columnWidth: 230
}
]
}