Enhance Filament and FilamentSku models by enforcing required fields for cost-related properties. Update NewFilamentSku and NewFilament components to reflect changes in default values and layout adjustments for better user experience. Modify FilamentInfo to utilize updated object data structure for filament selection.
All checks were successful
farmcontrol/farmcontrol-ui/pipeline/head This commit looks good

This commit is contained in:
Tom Butcher 2026-06-21 23:59:21 +01:00
parent 0e8f4506cc
commit 2177870fc9
6 changed files with 81 additions and 30 deletions

View File

@ -8,7 +8,11 @@ const NewFilamentSku = ({ onOk, reset, defaultValues }) => {
<NewObjectForm
type='filamentSku'
reset={reset}
defaultValues={defaultValues}
defaultValues={{
overrideCost: false,
color: '#ff0000',
...defaultValues
}}
>
{({ handleSubmit, submitLoading, objectData, formValid }) => {
const steps = [
@ -19,7 +23,7 @@ const NewFilamentSku = ({ onOk, reset, defaultValues }) => {
<ObjectInfo
type='filamentSku'
column={1}
labelWidth={70}
labelWidth={80}
bordered={false}
isEditing={true}
required={true}
@ -29,27 +33,26 @@ const NewFilamentSku = ({ onOk, reset, defaultValues }) => {
cost: false,
costWithTax: false,
costTaxRate: false,
overrideCost: false,
vendor: false
}}
/>
)
},
{
title: 'Color & Cost',
key: 'colorCost',
title: 'Cost',
key: 'cost',
content: (
<ObjectInfo
type='filamentSku'
column={1}
labelWidth={100}
labelWidth={120}
required={true}
visibleProperties={{
_id: false,
createdAt: false,
updatedAt: false,
barcode: false,
filament: false,
name: false,
description: false
overrideCost: true,
cost: true,
costTaxRate: true,
costWithTax: true
}}
bordered={false}
isEditing={true}
@ -64,7 +67,7 @@ const NewFilamentSku = ({ onOk, reset, defaultValues }) => {
<ObjectInfo
type='filamentSku'
column={1}
labelWidth={100}
labelWidth={110}
visibleProperties={{
barcode: true,
description: true
@ -88,9 +91,9 @@ const NewFilamentSku = ({ onOk, reset, defaultValues }) => {
_id: false,
_reference: false
}}
labelWidth={100}
bordered={false}
isEditing={false}
labelWidth={120}
objectData={objectData}
/>
)

View File

@ -238,7 +238,7 @@ const FilamentInfo = () => {
}}
reset={newFilamentSkuOpen}
defaultValues={{
filament: filamentId ? { _id: filamentId } : undefined
filament: objectFormState?.objectData || undefined
}}
/>
</Modal>

View File

@ -18,7 +18,33 @@ const NewFilament = ({ onOk }) => {
bordered={false}
isEditing={true}
required={true}
labelWidth={120}
objectData={objectData}
visibleProperties={{
cost: false,
costTaxRate: false,
costWithTax: false
}}
/>
)
},
{
title: 'Cost',
key: 'cost',
content: (
<ObjectInfo
type='filament'
column={1}
bordered={false}
isEditing={true}
required={true}
labelWidth={120}
objectData={objectData}
visibleProperties={{
cost: true,
costTaxRate: true,
costWithTax: true
}}
/>
)
},
@ -32,6 +58,7 @@ const NewFilament = ({ onOk }) => {
bordered={false}
isEditing={true}
required={false}
labelWidth={90}
objectData={objectData}
/>
)
@ -50,6 +77,7 @@ const NewFilament = ({ onOk }) => {
createdAt: false,
updatedAt: false
}}
labelWidth={120}
isEditing={false}
objectData={objectData}
/>

View File

@ -26,6 +26,7 @@ const NewPart = ({ onOk, defaultValues }) => {
isEditing={true}
required={true}
objectData={objectData}
labelWidth={70}
visibleProperties={{
file: false,
priceMode: false,
@ -51,6 +52,7 @@ const NewPart = ({ onOk, defaultValues }) => {
isEditing={true}
required={true}
objectData={objectData}
labelWidth={120}
visibleProperties={{
priceMode: true,
margin: true,
@ -74,6 +76,7 @@ const NewPart = ({ onOk, defaultValues }) => {
bordered={false}
isEditing={true}
required={false}
labelWidth={50}
objectData={objectData}
/>
)

View File

@ -88,7 +88,14 @@ export const Filament = {
'updatedAt'
],
filters: ['_id', 'name', 'material', 'cost', 'costWithTax'],
sorters: ['name', 'createdAt', 'material', 'cost', 'costWithTax', 'updatedAt'],
sorters: [
'name',
'createdAt',
'material',
'cost',
'costWithTax',
'updatedAt'
],
group: ['diameter', 'material'],
properties: [
{
@ -168,7 +175,7 @@ export const Filament = {
{
name: 'cost',
label: 'Cost',
required: false,
required: true,
columnWidth: 100,
type: 'number',
prefix: '£',
@ -178,7 +185,7 @@ export const Filament = {
{
name: 'costWithTax',
label: 'Cost w/ Tax',
required: false,
required: true,
readOnly: true,
type: 'number',
prefix: '£',
@ -201,7 +208,7 @@ export const Filament = {
{
name: 'costTaxRate',
label: 'Cost Tax Rate',
required: false,
required: true,
type: 'object',
objectType: 'taxRate',
showHyperlink: true,

View File

@ -170,36 +170,42 @@ export const FilamentSku = {
{
name: 'overrideCost',
label: 'Override Cost',
required: false,
required: true,
type: 'bool',
value: (objectData) => objectData?.overrideCost ?? false,
columnWidth: 150
},
{
name: 'cost',
label: 'Cost',
required: false,
required: true,
type: 'number',
prefix: '£',
min: 0,
step: 0.01,
disabled: (objectData) => !objectData?.overrideCost,
visible: (objectData) => {
return objectData?.overrideCost
},
value: (objectData) =>
objectData?.overrideCost ? objectData?.cost : undefined,
objectData?.overrideCost
? objectData?.cost
: objectData?.filament?.cost,
columnWidth: 100
},
{
name: 'costWithTax',
label: 'Cost w/ Tax',
required: false,
required: true,
readOnly: true,
type: 'number',
prefix: '£',
min: 0,
step: 0.01,
disabled: (objectData) => !objectData?.overrideCost,
visible: (objectData) => {
return objectData?.overrideCost
},
value: (objectData) => {
if (!objectData?.overrideCost) return undefined
if (!objectData?.overrideCost)
return objectData?.filament?.costWithTax || undefined
const cost = objectData?.cost
const taxRate = objectData?.costTaxRate
if (!cost) return 0
@ -215,13 +221,17 @@ export const FilamentSku = {
{
name: 'costTaxRate',
label: 'Cost Tax Rate',
required: false,
required: true,
type: 'object',
objectType: 'taxRate',
showHyperlink: true,
disabled: (objectData) => !objectData?.overrideCost,
visible: (objectData) => {
return objectData?.overrideCost
},
value: (objectData) =>
objectData?.overrideCost ? objectData?.costTaxRate : undefined,
objectData?.overrideCost
? objectData?.costTaxRate
: objectData?.filament?.costTaxRate,
columnWidth: 150
}
]