mirror of
https://github.com/inventree/InvenTree.git
synced 2025-06-17 20:45:44 +00:00
Test result choices (#7417)
* Add "choices" field to PartTestTemplate - Will allow validation of "value" field on StockItemTestResult * Run validation against StockItemTestResult * Expose 'choices' to serializer * Update unit test * Add unit test for test result validation * Add 'choices' field for CUI forms * Add "choices" field to PUI form * Add 'choices' column to PartTestTemplateTable * memoize stockitemtestresult fields - Adjust field type of "value" field based on template choices * Bump API version
This commit is contained in:
@ -866,3 +866,63 @@ export function stockLocationFields({}: {}): ApiFormFieldSet {
|
||||
|
||||
return fields;
|
||||
}
|
||||
|
||||
// Construct a set of fields for
|
||||
export function useTestResultFields({
|
||||
partId,
|
||||
itemId
|
||||
}: {
|
||||
partId: number;
|
||||
itemId: number;
|
||||
}): ApiFormFieldSet {
|
||||
// Valid field choices
|
||||
const [choices, setChoices] = useState<any[]>([]);
|
||||
|
||||
// Field type for the "value" input
|
||||
const [fieldType, setFieldType] = useState<'string' | 'choice'>('string');
|
||||
|
||||
return useMemo(() => {
|
||||
return {
|
||||
stock_item: {
|
||||
value: itemId,
|
||||
hidden: true
|
||||
},
|
||||
template: {
|
||||
filters: {
|
||||
include_inherited: true,
|
||||
part: partId
|
||||
},
|
||||
onValueChange: (value: any, record: any) => {
|
||||
// Adjust the type of the "value" field based on the selected template
|
||||
if (record?.choices) {
|
||||
let _choices: string[] = record.choices.split(',');
|
||||
|
||||
if (_choices.length > 0) {
|
||||
setChoices(
|
||||
_choices.map((choice) => {
|
||||
return {
|
||||
label: choice.trim(),
|
||||
value: choice.trim()
|
||||
};
|
||||
})
|
||||
);
|
||||
setFieldType('choice');
|
||||
} else {
|
||||
setChoices([]);
|
||||
setFieldType('string');
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
result: {},
|
||||
value: {
|
||||
field_type: fieldType,
|
||||
choices: fieldType === 'choice' ? choices : undefined
|
||||
},
|
||||
attachment: {},
|
||||
notes: {},
|
||||
started_datetime: {},
|
||||
finished_datetime: {}
|
||||
};
|
||||
}, [choices, fieldType, partId, itemId]);
|
||||
}
|
||||
|
@ -60,6 +60,11 @@ export default function PartTestTemplateTable({ partId }: { partId: number }) {
|
||||
BooleanColumn({
|
||||
accessor: 'enabled'
|
||||
}),
|
||||
{
|
||||
accessor: 'choices',
|
||||
sortable: false,
|
||||
switchable: true
|
||||
},
|
||||
BooleanColumn({
|
||||
accessor: 'required'
|
||||
}),
|
||||
@ -117,6 +122,7 @@ export default function PartTestTemplateTable({ partId }: { partId: number }) {
|
||||
required: {},
|
||||
requires_value: {},
|
||||
requires_attachment: {},
|
||||
choices: {},
|
||||
enabled: {}
|
||||
};
|
||||
}, [user]);
|
||||
|
@ -19,6 +19,7 @@ import { RenderUser } from '../../components/render/User';
|
||||
import { renderDate } from '../../defaults/formatters';
|
||||
import { ApiEndpoints } from '../../enums/ApiEndpoints';
|
||||
import { UserRoles } from '../../enums/Roles';
|
||||
import { useTestResultFields } from '../../forms/StockForms';
|
||||
import {
|
||||
useCreateApiFormModal,
|
||||
useDeleteApiFormModal,
|
||||
@ -232,27 +233,10 @@ export default function StockItemTestResultTable({
|
||||
];
|
||||
}, [itemId]);
|
||||
|
||||
const resultFields: ApiFormFieldSet = useMemo(() => {
|
||||
return {
|
||||
template: {
|
||||
filters: {
|
||||
include_inherited: true,
|
||||
part: partId
|
||||
}
|
||||
},
|
||||
result: {},
|
||||
value: {},
|
||||
attachment: {},
|
||||
notes: {},
|
||||
test_station: {},
|
||||
started_datetime: {},
|
||||
finished_datetime: {},
|
||||
stock_item: {
|
||||
value: itemId,
|
||||
hidden: true
|
||||
}
|
||||
};
|
||||
}, [partId, itemId]);
|
||||
const resultFields: ApiFormFieldSet = useTestResultFields({
|
||||
partId: partId,
|
||||
itemId: itemId
|
||||
});
|
||||
|
||||
const [selectedTemplate, setSelectedTemplate] = useState<number | undefined>(
|
||||
undefined
|
||||
@ -260,7 +244,7 @@ export default function StockItemTestResultTable({
|
||||
|
||||
const newTestModal = useCreateApiFormModal({
|
||||
url: ApiEndpoints.stock_test_result_list,
|
||||
fields: resultFields,
|
||||
fields: useMemo(() => ({ ...resultFields }), [resultFields]),
|
||||
initialData: {
|
||||
template: selectedTemplate,
|
||||
result: true
|
||||
@ -275,7 +259,7 @@ export default function StockItemTestResultTable({
|
||||
const editTestModal = useEditApiFormModal({
|
||||
url: ApiEndpoints.stock_test_result_list,
|
||||
pk: selectedTest,
|
||||
fields: resultFields,
|
||||
fields: useMemo(() => ({ ...resultFields }), [resultFields]),
|
||||
title: t`Edit Test Result`,
|
||||
table: table,
|
||||
successMessage: t`Test result updated`
|
||||
|
Reference in New Issue
Block a user