2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-12-16 17:28:11 +00:00

Add UI support for parameters against orders

This commit is contained in:
Oliver Walters
2025-11-25 09:18:04 +00:00
parent 9e3f3b27db
commit e2089312c4
10 changed files with 220 additions and 11 deletions

View File

@@ -1,7 +1,7 @@
import type { ModelType } from '@lib/enums/ModelType';
import { t } from '@lingui/core/macro';
import { Skeleton } from '@mantine/core';
import { IconList } from '@tabler/icons-react';
import { IconListDetails } from '@tabler/icons-react';
import { ParameterTable } from '../../tables/general/ParameterTable';
import type { PanelType } from './Panel';
@@ -15,7 +15,7 @@ export default function ParametersPanel({
return {
name: 'parameters',
label: t`Parameters`,
icon: <IconList />,
icon: <IconListDetails />,
content:
model_type && model_id ? (
<ParameterTable modelType={model_type} modelId={model_id} />

View File

@@ -32,6 +32,7 @@ import AttachmentPanel from '../../components/panels/AttachmentPanel';
import NotesPanel from '../../components/panels/NotesPanel';
import type { PanelType } from '../../components/panels/Panel';
import { PanelGroup } from '../../components/panels/PanelGroup';
import ParametersPanel from '../../components/panels/ParametersPanel';
import { StatusRenderer } from '../../components/render/StatusRenderer';
import { formatCurrency } from '../../defaults/formatters';
import { usePurchaseOrderFields } from '../../forms/PurchaseOrderForms';
@@ -389,6 +390,10 @@ export default function PurchaseOrderDetail() {
/>
)
},
ParametersPanel({
model_type: ModelType.purchaseorder,
model_id: order.pk
}),
AttachmentPanel({
model_type: ModelType.purchaseorder,
model_id: order.pk

View File

@@ -25,6 +25,7 @@ import { CompanyTable } from '../../tables/company/CompanyTable';
import ParametricCompanyTable from '../../tables/company/ParametricCompanyTable';
import ManufacturerPartParametricTable from '../../tables/purchasing/ManufacturerPartParametricTable';
import { ManufacturerPartTable } from '../../tables/purchasing/ManufacturerPartTable';
import PurchaseOrderParametricTable from '../../tables/purchasing/PurchaseOrderParametricTable';
import { PurchaseOrderTable } from '../../tables/purchasing/PurchaseOrderTable';
import SupplierPartParametricTable from '../../tables/purchasing/SupplierPartParametricTable';
import { SupplierPartTable } from '../../tables/purchasing/SupplierPartTable';
@@ -85,6 +86,12 @@ export default function PurchasingIndex() {
params={{ outstanding: true }}
/>
)
},
{
value: 'parametric',
label: t`Parametric View`,
icon: <IconListDetails />,
content: <PurchaseOrderParametricTable />
}
]
}),

View File

@@ -32,6 +32,7 @@ import AttachmentPanel from '../../components/panels/AttachmentPanel';
import NotesPanel from '../../components/panels/NotesPanel';
import type { PanelType } from '../../components/panels/Panel';
import { PanelGroup } from '../../components/panels/PanelGroup';
import ParametersPanel from '../../components/panels/ParametersPanel';
import { RenderAddress } from '../../components/render/Company';
import { StatusRenderer } from '../../components/render/StatusRenderer';
import { formatCurrency } from '../../defaults/formatters';
@@ -354,6 +355,10 @@ export default function ReturnOrderDetail() {
</Accordion>
)
},
ParametersPanel({
model_type: ModelType.returnorder,
model_id: order.pk
}),
AttachmentPanel({
model_type: ModelType.returnorder,
model_id: order.pk

View File

@@ -22,7 +22,9 @@ import SegmentedControlPanel from '../../components/panels/SegmentedControlPanel
import { useUserState } from '../../states/UserState';
import { CompanyTable } from '../../tables/company/CompanyTable';
import ParametricCompanyTable from '../../tables/company/ParametricCompanyTable';
import ReturnOrderParametricTable from '../../tables/sales/ReturnOrderParametricTable';
import { ReturnOrderTable } from '../../tables/sales/ReturnOrderTable';
import SalesOrderParametricTable from '../../tables/sales/SalesOrderParametricTable';
import SalesOrderShipmentTable from '../../tables/sales/SalesOrderShipmentTable';
import { SalesOrderTable } from '../../tables/sales/SalesOrderTable';
@@ -71,6 +73,12 @@ export default function SalesIndex() {
params={{ outstanding: true }}
/>
)
},
{
value: 'parametric',
label: t`Parametric View`,
icon: <IconListDetails />,
content: <SalesOrderParametricTable />
}
]
}),
@@ -111,6 +119,12 @@ export default function SalesIndex() {
params={{ outstanding: true }}
/>
)
},
{
value: 'parametric',
label: t`Parametric View`,
icon: <IconListDetails />,
content: <ReturnOrderParametricTable />
}
]
}),

View File

@@ -38,6 +38,7 @@ import AttachmentPanel from '../../components/panels/AttachmentPanel';
import NotesPanel from '../../components/panels/NotesPanel';
import type { PanelType } from '../../components/panels/Panel';
import { PanelGroup } from '../../components/panels/PanelGroup';
import ParametersPanel from '../../components/panels/ParametersPanel';
import { RenderAddress } from '../../components/render/Company';
import { StatusRenderer } from '../../components/render/StatusRenderer';
import { formatCurrency } from '../../defaults/formatters';
@@ -427,6 +428,10 @@ export default function SalesOrderDetail() {
<Skeleton />
)
},
ParametersPanel({
model_type: ModelType.salesorder,
model_id: order.pk
}),
AttachmentPanel({
model_type: ModelType.salesorder,
model_id: order.pk

View File

@@ -3,7 +3,6 @@ import {
ApiEndpoints,
type ApiFormFieldSet,
type ModelType,
RowViewAction,
UserRoles,
YesNoButton,
apiUrl,
@@ -399,14 +398,7 @@ export default function ParametricDataTable({
setSelectedTemplate(null);
addParameter.open();
}
},
RowViewAction({
title: t`View`,
modelType: modelType,
modelId: record.pk,
hidden: !user.hasViewPermission(modelType),
navigate: navigate
})
}
];
},
[modelType, user]
@@ -429,6 +421,7 @@ export default function ParametricDataTable({
parameters: true,
...parametricQueryFilters
},
modelType: modelType,
onCellClick: ({ event, record, index, column, columnIndex }) => {
cancelEvent(event);

View File

@@ -0,0 +1,60 @@
import { ApiEndpoints } from '@lib/enums/ApiEndpoints';
import { ModelType } from '@lib/enums/ModelType';
import type { TableFilter } from '@lib/types/Filters';
import type { TableColumn } from '@lib/types/Tables';
import { t } from '@lingui/core/macro';
import { type ReactNode, useMemo } from 'react';
import { CompanyColumn, ReferenceColumn } from '../ColumnRenderers';
import {
AssignedToMeFilter,
OrderStatusFilter,
OutstandingFilter,
OverdueFilter,
ProjectCodeFilter,
ResponsibleFilter
} from '../Filter';
import ParametricDataTable from '../general/ParametricDataTable';
export default function PurchaseOrderParametricTable({
queryParams
}: {
queryParams?: Record<string, any>;
}): ReactNode {
const customColumns: TableColumn[] = useMemo(() => {
return [
ReferenceColumn({}),
{
accessor: 'supplier__name',
title: t`Supplier`,
sortable: true,
render: (record: any) => (
<CompanyColumn company={record.supplier_detail} />
)
}
];
}, []);
const customFilters: TableFilter[] = useMemo(() => {
return [
OrderStatusFilter({ model: ModelType.purchaseorder }),
OutstandingFilter(),
OverdueFilter(),
AssignedToMeFilter(),
ProjectCodeFilter(),
ResponsibleFilter()
];
}, []);
return (
<ParametricDataTable
modelType={ModelType.purchaseorder}
endpoint={ApiEndpoints.purchase_order_list}
customColumns={customColumns}
customFilters={customFilters}
queryParams={{
...queryParams,
supplier_detail: true
}}
/>
);
}

View File

@@ -0,0 +1,60 @@
import { ApiEndpoints } from '@lib/enums/ApiEndpoints';
import { ModelType } from '@lib/enums/ModelType';
import type { TableFilter } from '@lib/types/Filters';
import type { TableColumn } from '@lib/types/Tables';
import { t } from '@lingui/core/macro';
import { type ReactNode, useMemo } from 'react';
import { CompanyColumn, ReferenceColumn } from '../ColumnRenderers';
import {
AssignedToMeFilter,
OrderStatusFilter,
OutstandingFilter,
OverdueFilter,
ProjectCodeFilter,
ResponsibleFilter
} from '../Filter';
import ParametricDataTable from '../general/ParametricDataTable';
export default function ReturnOrderParametricTable({
queryParams
}: {
queryParams?: Record<string, any>;
}): ReactNode {
const customColumns: TableColumn[] = useMemo(() => {
return [
ReferenceColumn({}),
{
accessor: 'customer__name',
title: t`Customer`,
sortable: true,
render: (record: any) => (
<CompanyColumn company={record.customer_detail} />
)
}
];
}, []);
const customFilters: TableFilter[] = useMemo(() => {
return [
OrderStatusFilter({ model: ModelType.returnorder }),
OutstandingFilter(),
OverdueFilter(),
AssignedToMeFilter(),
ProjectCodeFilter(),
ResponsibleFilter()
];
}, []);
return (
<ParametricDataTable
modelType={ModelType.returnorder}
endpoint={ApiEndpoints.return_order_list}
customColumns={customColumns}
customFilters={customFilters}
queryParams={{
...queryParams,
customer_detail: true
}}
/>
);
}

View File

@@ -0,0 +1,60 @@
import { ApiEndpoints } from '@lib/enums/ApiEndpoints';
import { ModelType } from '@lib/enums/ModelType';
import type { TableFilter } from '@lib/types/Filters';
import type { TableColumn } from '@lib/types/Tables';
import { t } from '@lingui/core/macro';
import { type ReactNode, useMemo } from 'react';
import { CompanyColumn, ReferenceColumn } from '../ColumnRenderers';
import {
AssignedToMeFilter,
OrderStatusFilter,
OutstandingFilter,
OverdueFilter,
ProjectCodeFilter,
ResponsibleFilter
} from '../Filter';
import ParametricDataTable from '../general/ParametricDataTable';
export default function SalesOrderParametricTable({
queryParams
}: {
queryParams?: Record<string, any>;
}): ReactNode {
const customColumns: TableColumn[] = useMemo(() => {
return [
ReferenceColumn({}),
{
accessor: 'customer__name',
title: t`Customer`,
sortable: true,
render: (record: any) => (
<CompanyColumn company={record.customer_detail} />
)
}
];
}, []);
const customFilters: TableFilter[] = useMemo(() => {
return [
OrderStatusFilter({ model: ModelType.salesorder }),
OutstandingFilter(),
OverdueFilter(),
AssignedToMeFilter(),
ProjectCodeFilter(),
ResponsibleFilter()
];
}, []);
return (
<ParametricDataTable
modelType={ModelType.salesorder}
endpoint={ApiEndpoints.sales_order_list}
customColumns={customColumns}
customFilters={customFilters}
queryParams={{
...queryParams,
customer_detail: true
}}
/>
);
}