From 2a96abb3462a44ba1b39a48ba55dd9d80adb4442 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 1 Mar 2024 03:14:58 +0000 Subject: [PATCH] ReturnOrder detail --- .../src/pages/sales/ReturnOrderDetail.tsx | 157 +++++++++++++++++- .../src/pages/sales/SalesOrderDetail.tsx | 2 +- 2 files changed, 155 insertions(+), 4 deletions(-) diff --git a/src/frontend/src/pages/sales/ReturnOrderDetail.tsx b/src/frontend/src/pages/sales/ReturnOrderDetail.tsx index d08be33201..04e1564b97 100644 --- a/src/frontend/src/pages/sales/ReturnOrderDetail.tsx +++ b/src/frontend/src/pages/sales/ReturnOrderDetail.tsx @@ -1,15 +1,25 @@ import { t } from '@lingui/macro'; -import { LoadingOverlay, Stack } from '@mantine/core'; -import { IconInfoCircle, IconNotes, IconPaperclip } from '@tabler/icons-react'; +import { Grid, LoadingOverlay, Skeleton, Stack } from '@mantine/core'; +import { + IconInfoCircle, + IconList, + IconNotes, + IconPaperclip +} from '@tabler/icons-react'; import { useMemo } from 'react'; import { useParams } from 'react-router-dom'; +import { DetailsImage } from '../../components/details/DetailsImage'; +import { ItemDetailsGrid } from '../../components/details/ItemDetails'; import { PageDetail } from '../../components/nav/PageDetail'; import { PanelGroup, PanelType } from '../../components/nav/PanelGroup'; import { NotesEditor } from '../../components/widgets/MarkdownEditor'; import { ApiEndpoints } from '../../enums/ApiEndpoints'; +import { ModelType } from '../../enums/ModelType'; +import { UserRoles } from '../../enums/Roles'; import { useInstance } from '../../hooks/UseInstance'; import { apiUrl } from '../../states/ApiState'; +import { DetailsField, DetailsTable } from '../../tables/Details'; import { AttachmentTable } from '../../tables/general/AttachmentTable'; /** @@ -26,12 +36,153 @@ export default function ReturnOrderDetail() { } }); + const detailsPanel = useMemo(() => { + if (instanceQuery.isFetching) { + return ; + } + + let tl: DetailsField[] = [ + { + type: 'text', + name: 'reference', + label: t`Reference`, + copy: true + }, + { + type: 'link', + name: 'customer', + icon: 'customers', + label: t`Customer`, + model: ModelType.company + }, + { + type: 'text', + name: 'description', + label: t`Description`, + copy: true + }, + { + type: 'status', + name: 'status', + label: t`Status`, + model: ModelType.salesorder + } + ]; + + let tr: DetailsField[] = [ + { + type: 'text', + name: 'line_items', + label: t`Line Items`, + icon: 'list' + }, + { + type: 'progressbar', + name: 'completed', + icon: 'progress', + label: t`Completed Line Items`, + total: order.line_items, + progress: order.completed_lines + }, + { + type: 'progressbar', + name: 'shipments', + icon: 'shipment', + label: t`Completed Shipments`, + total: order.shipments, + progress: order.completed_shipments + // TODO: Fix this progress bar + }, + { + type: 'text', + name: 'currency', + label: t`Order Currency,` + }, + { + type: 'text', + name: 'total_cost', + label: t`Total Cost` + // TODO: Implement this! + } + ]; + + let bl: DetailsField[] = [ + { + type: 'link', + external: true, + name: 'link', + label: t`Link`, + copy: true, + hidden: !order.link + }, + { + type: 'link', + model: ModelType.contact, + link: false, + name: 'contact', + icon: 'user', + copy: true + } + // TODO: Project code + ]; + + let br: DetailsField[] = [ + { + type: 'text', + name: 'creation_date', + label: t`Created On`, + icon: 'calendar' + }, + { + type: 'text', + name: 'target_date', + label: t`Target Date`, + icon: 'calendar', + hidden: !order.target_date + }, + { + type: 'text', + name: 'responsible', + label: t`Responsible`, + badge: 'owner', + hidden: !order.responsible + } + ]; + + return ( + + + + + + + + + + + + + + ); + }, [order, instanceQuery]); + const orderPanels: PanelType[] = useMemo(() => { return [ { name: 'detail', label: t`Order Details`, - icon: + icon: , + content: detailsPanel + }, + { + name: 'line-items', + label: t`Line Items`, + icon: }, { name: 'attachments', diff --git a/src/frontend/src/pages/sales/SalesOrderDetail.tsx b/src/frontend/src/pages/sales/SalesOrderDetail.tsx index c067f4d073..272f230f3a 100644 --- a/src/frontend/src/pages/sales/SalesOrderDetail.tsx +++ b/src/frontend/src/pages/sales/SalesOrderDetail.tsx @@ -127,7 +127,7 @@ export default function SalesOrderDetail() { icon: 'user', copy: true } - // TODO : Address + // TODO: Project code ]; let br: DetailsField[] = [