2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-05-07 07:48:50 +00:00

Add "View Part" action in BuildLineTable (#8335)

This commit is contained in:
Oliver 2024-10-23 07:16:38 +11:00 committed by GitHub
parent ca31bb0322
commit cbe547b873
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -8,6 +8,7 @@ import {
IconWand IconWand
} from '@tabler/icons-react'; } from '@tabler/icons-react';
import { useCallback, useMemo, useState } from 'react'; import { useCallback, useMemo, useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { ActionButton } from '../../components/buttons/ActionButton'; import { ActionButton } from '../../components/buttons/ActionButton';
import { ProgressBar } from '../../components/items/ProgressBar'; import { ProgressBar } from '../../components/items/ProgressBar';
@ -18,7 +19,9 @@ import {
useAllocateStockToBuildForm, useAllocateStockToBuildForm,
useBuildOrderFields useBuildOrderFields
} from '../../forms/BuildForms'; } from '../../forms/BuildForms';
import { navigateToLink } from '../../functions/navigation';
import { notYetImplemented } from '../../functions/notifications'; import { notYetImplemented } from '../../functions/notifications';
import { getDetailUrl } from '../../functions/urls';
import { useCreateApiFormModal } from '../../hooks/UseForm'; import { useCreateApiFormModal } from '../../hooks/UseForm';
import useStatusCodes from '../../hooks/UseStatusCodes'; import useStatusCodes from '../../hooks/UseStatusCodes';
import { useTable } from '../../hooks/UseTable'; import { useTable } from '../../hooks/UseTable';
@ -44,6 +47,7 @@ export default function BuildLineTable({
}>) { }>) {
const table = useTable('buildline'); const table = useTable('buildline');
const user = useUserState(); const user = useUserState();
const navigate = useNavigate();
const buildStatus = useStatusCodes({ modelType: ModelType.build }); const buildStatus = useStatusCodes({ modelType: ModelType.build });
const isActive: boolean = useMemo(() => { const isActive: boolean = useMemo(() => {
@ -367,34 +371,38 @@ export default function BuildLineTable({
const rowActions = useCallback( const rowActions = useCallback(
(record: any): RowAction[] => { (record: any): RowAction[] => {
let part = record.part_detail ?? {}; let part = record.part_detail ?? {};
const in_production = build.status == buildStatus.PRODUCTION;
// Consumable items have no appropriate actions const consumable = record.bom_item_detail?.consumable ?? false;
if (record?.bom_item_detail?.consumable) {
return [];
}
// Only allow actions when build is in production
if (!build?.status || build.status != buildStatus.PRODUCTION) {
return [];
}
const hasOutput = !!outputId; const hasOutput = !!outputId;
// Can allocate // Can allocate
let canAllocate = let canAllocate =
in_production &&
!consumable &&
user.hasChangeRole(UserRoles.build) && user.hasChangeRole(UserRoles.build) &&
record.allocated < record.quantity && record.allocated < record.quantity &&
record.trackable == hasOutput; record.trackable == hasOutput;
// Can de-allocate // Can de-allocate
let canDeallocate = let canDeallocate =
in_production &&
!consumable &&
user.hasChangeRole(UserRoles.build) && user.hasChangeRole(UserRoles.build) &&
record.allocated > 0 && record.allocated > 0 &&
record.trackable == hasOutput; record.trackable == hasOutput;
let canOrder = let canOrder =
user.hasAddRole(UserRoles.purchase_order) && part.purchaseable; in_production &&
let canBuild = user.hasAddRole(UserRoles.build) && part.assembly; !consumable &&
user.hasAddRole(UserRoles.purchase_order) &&
part.purchaseable;
let canBuild =
in_production &&
!consumable &&
user.hasAddRole(UserRoles.build) &&
part.assembly;
return [ return [
{ {
@ -437,6 +445,17 @@ export default function BuildLineTable({
}); });
newBuildOrder.open(); newBuildOrder.open();
} }
},
{
icon: <IconArrowRight />,
title: t`View Part`,
onClick: (event: any) => {
navigateToLink(
getDetailUrl(ModelType.part, record.part),
navigate,
event
);
}
} }
]; ];
}, },