mirror of
https://github.com/inventree/InvenTree.git
synced 2025-06-17 20:45:44 +00:00
[PUI] Sub builds table (#7932)
* Allow table filters to be marked "inactive" * Allow build orders to be filtering by 'cascading' parent * Update build order table * Bump API version
This commit is contained in:
@ -28,6 +28,7 @@ export type TableFilter = {
|
||||
defaultValue?: any;
|
||||
value?: any;
|
||||
displayValue?: any;
|
||||
active?: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -164,12 +164,14 @@ export function InvenTreeTable<T = any>({
|
||||
// Construct table filters - note that we can introspect filter labels from column names
|
||||
const filters: TableFilter[] = useMemo(() => {
|
||||
return (
|
||||
props.tableFilters?.map((filter) => {
|
||||
return {
|
||||
...filter,
|
||||
label: filter.label ?? fieldNames[filter.name] ?? `${filter.name}`
|
||||
};
|
||||
}) ?? []
|
||||
props.tableFilters
|
||||
?.filter((f: any) => f.active != false)
|
||||
?.map((filter) => {
|
||||
return {
|
||||
...filter,
|
||||
label: filter.label ?? fieldNames[filter.name] ?? `${filter.name}`
|
||||
};
|
||||
}) ?? []
|
||||
);
|
||||
}, [props.tableFilters, fieldNames]);
|
||||
|
||||
|
@ -27,63 +27,6 @@ import {
|
||||
import { StatusFilterOptions, TableFilter } from '../Filter';
|
||||
import { InvenTreeTable } from '../InvenTreeTable';
|
||||
|
||||
/**
|
||||
* Construct a list of columns for the build order table
|
||||
*/
|
||||
function buildOrderTableColumns(): TableColumn[] {
|
||||
return [
|
||||
ReferenceColumn({}),
|
||||
{
|
||||
accessor: 'part',
|
||||
sortable: true,
|
||||
switchable: false,
|
||||
render: (record: any) => PartColumn(record.part_detail)
|
||||
},
|
||||
{
|
||||
accessor: 'part_detail.IPN',
|
||||
sortable: true,
|
||||
switchable: true,
|
||||
title: t`IPN`
|
||||
},
|
||||
{
|
||||
accessor: 'title',
|
||||
sortable: false
|
||||
},
|
||||
{
|
||||
accessor: 'completed',
|
||||
sortable: true,
|
||||
switchable: false,
|
||||
render: (record: any) => (
|
||||
<ProgressBar
|
||||
progressLabel={true}
|
||||
value={record.completed}
|
||||
maximum={record.quantity}
|
||||
/>
|
||||
)
|
||||
},
|
||||
StatusColumn({ model: ModelType.build }),
|
||||
ProjectCodeColumn({}),
|
||||
{
|
||||
accessor: 'priority',
|
||||
sortable: true
|
||||
},
|
||||
CreationDateColumn({}),
|
||||
TargetDateColumn({}),
|
||||
DateColumn({
|
||||
accessor: 'completion_date',
|
||||
sortable: true
|
||||
}),
|
||||
{
|
||||
accessor: 'issued_by',
|
||||
sortable: true,
|
||||
render: (record: any) => (
|
||||
<RenderUser instance={record?.issued_by_detail} />
|
||||
)
|
||||
},
|
||||
ResponsibleColumn({})
|
||||
];
|
||||
}
|
||||
|
||||
/*
|
||||
* Construct a table of build orders, according to the provided parameters
|
||||
*/
|
||||
@ -96,7 +39,65 @@ export function BuildOrderTable({
|
||||
parentBuildId?: number;
|
||||
salesOrderId?: number;
|
||||
}) {
|
||||
const tableColumns = useMemo(() => buildOrderTableColumns(), []);
|
||||
const tableColumns = useMemo(() => {
|
||||
return [
|
||||
ReferenceColumn({}),
|
||||
{
|
||||
accessor: 'part',
|
||||
sortable: true,
|
||||
switchable: false,
|
||||
render: (record: any) => PartColumn(record.part_detail)
|
||||
},
|
||||
{
|
||||
accessor: 'part_detail.IPN',
|
||||
sortable: true,
|
||||
switchable: true,
|
||||
title: t`IPN`
|
||||
},
|
||||
{
|
||||
accessor: 'title',
|
||||
sortable: false
|
||||
},
|
||||
{
|
||||
accessor: 'completed',
|
||||
sortable: true,
|
||||
switchable: false,
|
||||
render: (record: any) => (
|
||||
<ProgressBar
|
||||
progressLabel={true}
|
||||
value={record.completed}
|
||||
maximum={record.quantity}
|
||||
/>
|
||||
)
|
||||
},
|
||||
StatusColumn({ model: ModelType.build }),
|
||||
ProjectCodeColumn({}),
|
||||
{
|
||||
accessor: 'level',
|
||||
sortable: true,
|
||||
switchable: true,
|
||||
hidden: !parentBuildId
|
||||
},
|
||||
{
|
||||
accessor: 'priority',
|
||||
sortable: true
|
||||
},
|
||||
CreationDateColumn({}),
|
||||
TargetDateColumn({}),
|
||||
DateColumn({
|
||||
accessor: 'completion_date',
|
||||
sortable: true
|
||||
}),
|
||||
{
|
||||
accessor: 'issued_by',
|
||||
sortable: true,
|
||||
render: (record: any) => (
|
||||
<RenderUser instance={record?.issued_by_detail} />
|
||||
)
|
||||
},
|
||||
ResponsibleColumn({})
|
||||
];
|
||||
}, [parentBuildId]);
|
||||
|
||||
const projectCodeFilters = useProjectCodeFilters();
|
||||
const ownerFilters = useOwnerFilters();
|
||||
@ -109,6 +110,13 @@ export function BuildOrderTable({
|
||||
label: t`Active`,
|
||||
description: t`Show active orders`
|
||||
},
|
||||
{
|
||||
name: 'cascade',
|
||||
type: 'boolean',
|
||||
label: t`Cascade`,
|
||||
description: t`Display recursive child orders`,
|
||||
active: !!parentBuildId
|
||||
},
|
||||
{
|
||||
name: 'status',
|
||||
label: t`Status`,
|
||||
@ -151,7 +159,7 @@ export function BuildOrderTable({
|
||||
choices: ownerFilters.choices
|
||||
}
|
||||
];
|
||||
}, [projectCodeFilters.choices, ownerFilters.choices]);
|
||||
}, [parentBuildId, projectCodeFilters.choices, ownerFilters.choices]);
|
||||
|
||||
const user = useUserState();
|
||||
|
||||
|
Reference in New Issue
Block a user