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:
@@ -1,7 +1,7 @@
|
|||||||
import type { ModelType } from '@lib/enums/ModelType';
|
import type { ModelType } from '@lib/enums/ModelType';
|
||||||
import { t } from '@lingui/core/macro';
|
import { t } from '@lingui/core/macro';
|
||||||
import { Skeleton } from '@mantine/core';
|
import { Skeleton } from '@mantine/core';
|
||||||
import { IconList } from '@tabler/icons-react';
|
import { IconListDetails } from '@tabler/icons-react';
|
||||||
import { ParameterTable } from '../../tables/general/ParameterTable';
|
import { ParameterTable } from '../../tables/general/ParameterTable';
|
||||||
import type { PanelType } from './Panel';
|
import type { PanelType } from './Panel';
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ export default function ParametersPanel({
|
|||||||
return {
|
return {
|
||||||
name: 'parameters',
|
name: 'parameters',
|
||||||
label: t`Parameters`,
|
label: t`Parameters`,
|
||||||
icon: <IconList />,
|
icon: <IconListDetails />,
|
||||||
content:
|
content:
|
||||||
model_type && model_id ? (
|
model_type && model_id ? (
|
||||||
<ParameterTable modelType={model_type} modelId={model_id} />
|
<ParameterTable modelType={model_type} modelId={model_id} />
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import AttachmentPanel from '../../components/panels/AttachmentPanel';
|
|||||||
import NotesPanel from '../../components/panels/NotesPanel';
|
import NotesPanel from '../../components/panels/NotesPanel';
|
||||||
import type { PanelType } from '../../components/panels/Panel';
|
import type { PanelType } from '../../components/panels/Panel';
|
||||||
import { PanelGroup } from '../../components/panels/PanelGroup';
|
import { PanelGroup } from '../../components/panels/PanelGroup';
|
||||||
|
import ParametersPanel from '../../components/panels/ParametersPanel';
|
||||||
import { StatusRenderer } from '../../components/render/StatusRenderer';
|
import { StatusRenderer } from '../../components/render/StatusRenderer';
|
||||||
import { formatCurrency } from '../../defaults/formatters';
|
import { formatCurrency } from '../../defaults/formatters';
|
||||||
import { usePurchaseOrderFields } from '../../forms/PurchaseOrderForms';
|
import { usePurchaseOrderFields } from '../../forms/PurchaseOrderForms';
|
||||||
@@ -389,6 +390,10 @@ export default function PurchaseOrderDetail() {
|
|||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
ParametersPanel({
|
||||||
|
model_type: ModelType.purchaseorder,
|
||||||
|
model_id: order.pk
|
||||||
|
}),
|
||||||
AttachmentPanel({
|
AttachmentPanel({
|
||||||
model_type: ModelType.purchaseorder,
|
model_type: ModelType.purchaseorder,
|
||||||
model_id: order.pk
|
model_id: order.pk
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import { CompanyTable } from '../../tables/company/CompanyTable';
|
|||||||
import ParametricCompanyTable from '../../tables/company/ParametricCompanyTable';
|
import ParametricCompanyTable from '../../tables/company/ParametricCompanyTable';
|
||||||
import ManufacturerPartParametricTable from '../../tables/purchasing/ManufacturerPartParametricTable';
|
import ManufacturerPartParametricTable from '../../tables/purchasing/ManufacturerPartParametricTable';
|
||||||
import { ManufacturerPartTable } from '../../tables/purchasing/ManufacturerPartTable';
|
import { ManufacturerPartTable } from '../../tables/purchasing/ManufacturerPartTable';
|
||||||
|
import PurchaseOrderParametricTable from '../../tables/purchasing/PurchaseOrderParametricTable';
|
||||||
import { PurchaseOrderTable } from '../../tables/purchasing/PurchaseOrderTable';
|
import { PurchaseOrderTable } from '../../tables/purchasing/PurchaseOrderTable';
|
||||||
import SupplierPartParametricTable from '../../tables/purchasing/SupplierPartParametricTable';
|
import SupplierPartParametricTable from '../../tables/purchasing/SupplierPartParametricTable';
|
||||||
import { SupplierPartTable } from '../../tables/purchasing/SupplierPartTable';
|
import { SupplierPartTable } from '../../tables/purchasing/SupplierPartTable';
|
||||||
@@ -85,6 +86,12 @@ export default function PurchasingIndex() {
|
|||||||
params={{ outstanding: true }}
|
params={{ outstanding: true }}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 'parametric',
|
||||||
|
label: t`Parametric View`,
|
||||||
|
icon: <IconListDetails />,
|
||||||
|
content: <PurchaseOrderParametricTable />
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import AttachmentPanel from '../../components/panels/AttachmentPanel';
|
|||||||
import NotesPanel from '../../components/panels/NotesPanel';
|
import NotesPanel from '../../components/panels/NotesPanel';
|
||||||
import type { PanelType } from '../../components/panels/Panel';
|
import type { PanelType } from '../../components/panels/Panel';
|
||||||
import { PanelGroup } from '../../components/panels/PanelGroup';
|
import { PanelGroup } from '../../components/panels/PanelGroup';
|
||||||
|
import ParametersPanel from '../../components/panels/ParametersPanel';
|
||||||
import { RenderAddress } from '../../components/render/Company';
|
import { RenderAddress } from '../../components/render/Company';
|
||||||
import { StatusRenderer } from '../../components/render/StatusRenderer';
|
import { StatusRenderer } from '../../components/render/StatusRenderer';
|
||||||
import { formatCurrency } from '../../defaults/formatters';
|
import { formatCurrency } from '../../defaults/formatters';
|
||||||
@@ -354,6 +355,10 @@ export default function ReturnOrderDetail() {
|
|||||||
</Accordion>
|
</Accordion>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
ParametersPanel({
|
||||||
|
model_type: ModelType.returnorder,
|
||||||
|
model_id: order.pk
|
||||||
|
}),
|
||||||
AttachmentPanel({
|
AttachmentPanel({
|
||||||
model_type: ModelType.returnorder,
|
model_type: ModelType.returnorder,
|
||||||
model_id: order.pk
|
model_id: order.pk
|
||||||
|
|||||||
@@ -22,7 +22,9 @@ import SegmentedControlPanel from '../../components/panels/SegmentedControlPanel
|
|||||||
import { useUserState } from '../../states/UserState';
|
import { useUserState } from '../../states/UserState';
|
||||||
import { CompanyTable } from '../../tables/company/CompanyTable';
|
import { CompanyTable } from '../../tables/company/CompanyTable';
|
||||||
import ParametricCompanyTable from '../../tables/company/ParametricCompanyTable';
|
import ParametricCompanyTable from '../../tables/company/ParametricCompanyTable';
|
||||||
|
import ReturnOrderParametricTable from '../../tables/sales/ReturnOrderParametricTable';
|
||||||
import { ReturnOrderTable } from '../../tables/sales/ReturnOrderTable';
|
import { ReturnOrderTable } from '../../tables/sales/ReturnOrderTable';
|
||||||
|
import SalesOrderParametricTable from '../../tables/sales/SalesOrderParametricTable';
|
||||||
import SalesOrderShipmentTable from '../../tables/sales/SalesOrderShipmentTable';
|
import SalesOrderShipmentTable from '../../tables/sales/SalesOrderShipmentTable';
|
||||||
import { SalesOrderTable } from '../../tables/sales/SalesOrderTable';
|
import { SalesOrderTable } from '../../tables/sales/SalesOrderTable';
|
||||||
|
|
||||||
@@ -71,6 +73,12 @@ export default function SalesIndex() {
|
|||||||
params={{ outstanding: true }}
|
params={{ outstanding: true }}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 'parametric',
|
||||||
|
label: t`Parametric View`,
|
||||||
|
icon: <IconListDetails />,
|
||||||
|
content: <SalesOrderParametricTable />
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}),
|
}),
|
||||||
@@ -111,6 +119,12 @@ export default function SalesIndex() {
|
|||||||
params={{ outstanding: true }}
|
params={{ outstanding: true }}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 'parametric',
|
||||||
|
label: t`Parametric View`,
|
||||||
|
icon: <IconListDetails />,
|
||||||
|
content: <ReturnOrderParametricTable />
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import AttachmentPanel from '../../components/panels/AttachmentPanel';
|
|||||||
import NotesPanel from '../../components/panels/NotesPanel';
|
import NotesPanel from '../../components/panels/NotesPanel';
|
||||||
import type { PanelType } from '../../components/panels/Panel';
|
import type { PanelType } from '../../components/panels/Panel';
|
||||||
import { PanelGroup } from '../../components/panels/PanelGroup';
|
import { PanelGroup } from '../../components/panels/PanelGroup';
|
||||||
|
import ParametersPanel from '../../components/panels/ParametersPanel';
|
||||||
import { RenderAddress } from '../../components/render/Company';
|
import { RenderAddress } from '../../components/render/Company';
|
||||||
import { StatusRenderer } from '../../components/render/StatusRenderer';
|
import { StatusRenderer } from '../../components/render/StatusRenderer';
|
||||||
import { formatCurrency } from '../../defaults/formatters';
|
import { formatCurrency } from '../../defaults/formatters';
|
||||||
@@ -427,6 +428,10 @@ export default function SalesOrderDetail() {
|
|||||||
<Skeleton />
|
<Skeleton />
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
ParametersPanel({
|
||||||
|
model_type: ModelType.salesorder,
|
||||||
|
model_id: order.pk
|
||||||
|
}),
|
||||||
AttachmentPanel({
|
AttachmentPanel({
|
||||||
model_type: ModelType.salesorder,
|
model_type: ModelType.salesorder,
|
||||||
model_id: order.pk
|
model_id: order.pk
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import {
|
|||||||
ApiEndpoints,
|
ApiEndpoints,
|
||||||
type ApiFormFieldSet,
|
type ApiFormFieldSet,
|
||||||
type ModelType,
|
type ModelType,
|
||||||
RowViewAction,
|
|
||||||
UserRoles,
|
UserRoles,
|
||||||
YesNoButton,
|
YesNoButton,
|
||||||
apiUrl,
|
apiUrl,
|
||||||
@@ -399,14 +398,7 @@ export default function ParametricDataTable({
|
|||||||
setSelectedTemplate(null);
|
setSelectedTemplate(null);
|
||||||
addParameter.open();
|
addParameter.open();
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
RowViewAction({
|
|
||||||
title: t`View`,
|
|
||||||
modelType: modelType,
|
|
||||||
modelId: record.pk,
|
|
||||||
hidden: !user.hasViewPermission(modelType),
|
|
||||||
navigate: navigate
|
|
||||||
})
|
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
[modelType, user]
|
[modelType, user]
|
||||||
@@ -429,6 +421,7 @@ export default function ParametricDataTable({
|
|||||||
parameters: true,
|
parameters: true,
|
||||||
...parametricQueryFilters
|
...parametricQueryFilters
|
||||||
},
|
},
|
||||||
|
modelType: modelType,
|
||||||
onCellClick: ({ event, record, index, column, columnIndex }) => {
|
onCellClick: ({ event, record, index, column, columnIndex }) => {
|
||||||
cancelEvent(event);
|
cancelEvent(event);
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
60
src/frontend/src/tables/sales/ReturnOrderParametricTable.tsx
Normal file
60
src/frontend/src/tables/sales/ReturnOrderParametricTable.tsx
Normal 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
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
60
src/frontend/src/tables/sales/SalesOrderParametricTable.tsx
Normal file
60
src/frontend/src/tables/sales/SalesOrderParametricTable.tsx
Normal 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
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user