mirror of
https://github.com/inventree/InvenTree.git
synced 2025-10-03 15:52:51 +00:00
[UI] Part test result table (#10368)
* Add generic test result table for part * Adjust table identifier * Additional table filters * Update permissions * Consolidate naming * Tweak playwright tests
This commit is contained in:
@@ -59,8 +59,8 @@ import { useUserState } from '../../states/UserState';
|
||||
import BuildAllocatedStockTable from '../../tables/build/BuildAllocatedStockTable';
|
||||
import BuildLineTable from '../../tables/build/BuildLineTable';
|
||||
import { BuildOrderTable } from '../../tables/build/BuildOrderTable';
|
||||
import BuildOrderTestTable from '../../tables/build/BuildOrderTestTable';
|
||||
import BuildOutputTable from '../../tables/build/BuildOutputTable';
|
||||
import PartTestResultTable from '../../tables/part/PartTestResultTable';
|
||||
import { PurchaseOrderTable } from '../../tables/purchasing/PurchaseOrderTable';
|
||||
import { StockItemTable } from '../../tables/stock/StockItemTable';
|
||||
|
||||
@@ -525,7 +525,7 @@ export default function BuildDetail() {
|
||||
icon: <IconChecklist />,
|
||||
hidden: !build.part_detail?.testable,
|
||||
content: build.pk ? (
|
||||
<BuildOrderTestTable buildId={build.pk} partId={build.part} />
|
||||
<PartTestResultTable buildId={build.pk} partId={build.part} />
|
||||
) : (
|
||||
<Skeleton />
|
||||
)
|
||||
|
@@ -15,6 +15,7 @@ import {
|
||||
import {
|
||||
IconBookmarks,
|
||||
IconBuilding,
|
||||
IconChecklist,
|
||||
IconCircleCheck,
|
||||
IconClipboardList,
|
||||
IconCurrencyDollar,
|
||||
@@ -101,6 +102,7 @@ import { UsedInTable } from '../../tables/bom/UsedInTable';
|
||||
import { BuildOrderTable } from '../../tables/build/BuildOrderTable';
|
||||
import { PartParameterTable } from '../../tables/part/PartParameterTable';
|
||||
import PartPurchaseOrdersTable from '../../tables/part/PartPurchaseOrdersTable';
|
||||
import PartTestResultTable from '../../tables/part/PartTestResultTable';
|
||||
import PartTestTemplateTable from '../../tables/part/PartTestTemplateTable';
|
||||
import { PartVariantTable } from '../../tables/part/PartVariantTable';
|
||||
import { RelatedPartTable } from '../../tables/part/RelatedPartTable';
|
||||
@@ -933,6 +935,17 @@ export default function PartDetail() {
|
||||
<Skeleton />
|
||||
)
|
||||
},
|
||||
{
|
||||
name: 'test_results',
|
||||
label: t`Test Results`,
|
||||
icon: <IconChecklist />,
|
||||
hidden: !part.testable || !user.hasViewRole(UserRoles.stock),
|
||||
content: part?.pk ? (
|
||||
<PartTestResultTable partId={part.pk} />
|
||||
) : (
|
||||
<Skeleton />
|
||||
)
|
||||
},
|
||||
{
|
||||
name: 'related_parts',
|
||||
label: t`Related Parts`,
|
||||
|
@@ -575,8 +575,8 @@ export default function StockDetail() {
|
||||
)
|
||||
},
|
||||
{
|
||||
name: 'testdata',
|
||||
label: t`Test Data`,
|
||||
name: 'test-results',
|
||||
label: t`Test Results`,
|
||||
icon: <IconChecklist />,
|
||||
hidden: !stockitem?.part_detail?.testable,
|
||||
content: stockitem?.pk ? (
|
||||
|
@@ -86,6 +86,14 @@ export function BatchFilter(): TableFilter {
|
||||
};
|
||||
}
|
||||
|
||||
export function InStockFilter(): TableFilter {
|
||||
return {
|
||||
name: 'in_stock',
|
||||
label: t`In Stock`,
|
||||
description: t`Show items which are in stock`
|
||||
};
|
||||
}
|
||||
|
||||
export function IsSerializedFilter(): TableFilter {
|
||||
return {
|
||||
name: 'serialized',
|
||||
|
@@ -27,20 +27,38 @@ import { useTestResultFields } from '../../forms/StockForms';
|
||||
import { useCreateApiFormModal } from '../../hooks/UseForm';
|
||||
import { useTable } from '../../hooks/UseTable';
|
||||
import { LocationColumn } from '../ColumnRenderers';
|
||||
import {
|
||||
BatchFilter,
|
||||
HasBatchCodeFilter,
|
||||
InStockFilter,
|
||||
IsSerializedFilter,
|
||||
SerialFilter,
|
||||
SerialGTEFilter,
|
||||
SerialLTEFilter,
|
||||
StatusFilterOptions
|
||||
} from '../Filter';
|
||||
import { InvenTreeTable } from '../InvenTreeTable';
|
||||
import { TableHoverCard } from '../TableHoverCard';
|
||||
|
||||
/**
|
||||
* A table which displays all "test results" for the outputs generated by a build order.
|
||||
*/
|
||||
export default function BuildOrderTestTable({
|
||||
export default function PartTestResultTable({
|
||||
buildId,
|
||||
partId
|
||||
}: Readonly<{
|
||||
buildId: number;
|
||||
buildId?: number;
|
||||
partId: number;
|
||||
}>) {
|
||||
const table = useTable('build-tests');
|
||||
const tableName = useMemo(() => {
|
||||
if (buildId) {
|
||||
return 'build-test-results';
|
||||
} else {
|
||||
return 'part-test-results';
|
||||
}
|
||||
}, [buildId]);
|
||||
|
||||
const table = useTable(tableName);
|
||||
const api = useApi();
|
||||
|
||||
// Fetch the test templates required for this build order
|
||||
@@ -227,7 +245,7 @@ export default function BuildOrderTestTable({
|
||||
const columns: TableColumn[] = [
|
||||
{
|
||||
accessor: 'stock',
|
||||
title: t`Build Output`,
|
||||
title: t`Stock Item`,
|
||||
sortable: true,
|
||||
switchable: false,
|
||||
render: (record: any) => {
|
||||
@@ -258,6 +276,12 @@ export default function BuildOrderTestTable({
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
accessor: 'batch',
|
||||
title: t`Batch Code`,
|
||||
sortable: true,
|
||||
switchable: true
|
||||
},
|
||||
LocationColumn({
|
||||
accessor: 'location_detail'
|
||||
})
|
||||
@@ -272,6 +296,19 @@ export default function BuildOrderTestTable({
|
||||
name: 'is_building',
|
||||
label: t`In Production`,
|
||||
description: t`Show build outputs currently in production`
|
||||
},
|
||||
InStockFilter(),
|
||||
SerialFilter(),
|
||||
SerialGTEFilter(),
|
||||
SerialLTEFilter(),
|
||||
HasBatchCodeFilter(),
|
||||
BatchFilter(),
|
||||
IsSerializedFilter(),
|
||||
{
|
||||
name: 'status',
|
||||
label: t`Status`,
|
||||
description: t`Filter by stock status`,
|
||||
choiceFunction: StatusFilterOptions(ModelType.stockitem)
|
||||
}
|
||||
];
|
||||
}, []);
|
@@ -38,6 +38,7 @@ import {
|
||||
import {
|
||||
BatchFilter,
|
||||
HasBatchCodeFilter,
|
||||
InStockFilter,
|
||||
IncludeVariantsFilter,
|
||||
IsSerializedFilter,
|
||||
ManufacturerFilter,
|
||||
@@ -354,11 +355,7 @@ function stockItemTableFilters({
|
||||
label: t`Depleted`,
|
||||
description: t`Show depleted stock items`
|
||||
},
|
||||
{
|
||||
name: 'in_stock',
|
||||
label: t`In Stock`,
|
||||
description: t`Show items which are in stock`
|
||||
},
|
||||
InStockFilter(),
|
||||
{
|
||||
name: 'is_building',
|
||||
label: t`In Production`,
|
||||
|
@@ -33,7 +33,7 @@ test('Stock - Basic Tests', async ({ browser }) => {
|
||||
await page.getByText('D.123 | Doohickey').waitFor();
|
||||
await page.getByText('Batch Code: BX-123-2024-2-7').waitFor();
|
||||
await loadTab(page, 'Stock Tracking');
|
||||
await loadTab(page, 'Test Data');
|
||||
await loadTab(page, 'Test Results');
|
||||
await page.getByText('395c6d5586e5fb656901d047be27e1f7').waitFor();
|
||||
await loadTab(page, 'Installed Items');
|
||||
});
|
||||
|
Reference in New Issue
Block a user