From 6c3ae1eda6823e4a87ee579e0a33189633be4e07 Mon Sep 17 00:00:00 2001 From: Danel Kungla Date: Thu, 25 Sep 2025 15:30:07 +0300 Subject: [PATCH] MED-102: clean order page for tto orders --- app/home/(user)/(dashboard)/order/page.tsx | 4 +- .../(user)/_components/booking/time-slots.tsx | 8 +-- .../_components/order/order-details.tsx | 2 +- .../(user)/_components/orders/order-block.tsx | 15 ++++-- .../_components/orders/order-items-table.tsx | 14 ++--- app/home/(user)/_lib/server/actions.ts | 8 +-- .../medipostPrivateMessage.service.ts | 2 +- lib/services/order.service.ts | 7 +-- lib/services/reservation.service.ts | 53 ++++++++++++------- lib/types/analysis-order.ts | 3 -- lib/types/order.ts | 12 +++++ public/locales/et/orders.json | 2 +- 12 files changed, 82 insertions(+), 48 deletions(-) delete mode 100644 lib/types/analysis-order.ts create mode 100644 lib/types/order.ts diff --git a/app/home/(user)/(dashboard)/order/page.tsx b/app/home/(user)/(dashboard)/order/page.tsx index 2e9fe68..ee168ff 100644 --- a/app/home/(user)/(dashboard)/order/page.tsx +++ b/app/home/(user)/(dashboard)/order/page.tsx @@ -56,6 +56,7 @@ async function OrdersPage() { const analysisOrder = analysisOrders.find( ({ medusa_order_id }) => medusa_order_id === medusaOrder.id, ); + if (!medusaOrder) { return null; } @@ -81,6 +82,7 @@ async function OrdersPage() { ); })} - {analysisOrders.length === 0 && ( + {analysisOrders.length === 0 && ttoOrders.length === 0 && (
diff --git a/app/home/(user)/_components/booking/time-slots.tsx b/app/home/(user)/_components/booking/time-slots.tsx index 220a79f..4e28adc 100644 --- a/app/home/(user)/_components/booking/time-slots.tsx +++ b/app/home/(user)/_components/booking/time-slots.tsx @@ -167,15 +167,15 @@ const TimeSlots = ({ return toast.error(t('booking:serviceNotFound')); } - const bookTimePromise = updateReservationTime( + const bookTimePromise = updateReservationTime({ reservationId, - timeSlot.StartTime, - Number(syncedService.id), + newStartTime: timeSlot.StartTime, + newServiceId: Number(syncedService.id), timeSlot.UserID, timeSlot.SyncUserID, booking.selectedLocationId ? booking.selectedLocationId : null, cartId, - ); + }); toast.promise(() => bookTimePromise, { success: , diff --git a/app/home/(user)/_components/order/order-details.tsx b/app/home/(user)/_components/order/order-details.tsx index 1cda501..8dcff3f 100644 --- a/app/home/(user)/_components/order/order-details.tsx +++ b/app/home/(user)/_components/order/order-details.tsx @@ -2,7 +2,7 @@ import { formatDate } from 'date-fns'; import { Trans } from '@kit/ui/trans'; -import type { AnalysisOrder } from '~/lib/types/analysis-order'; +import type { AnalysisOrder } from '~/lib/types/order'; export default function OrderDetails({ order }: { order: AnalysisOrder }) { return ( diff --git a/app/home/(user)/_components/orders/order-block.tsx b/app/home/(user)/_components/orders/order-block.tsx index 4071b0f..ef6ab6d 100644 --- a/app/home/(user)/_components/orders/order-block.tsx +++ b/app/home/(user)/_components/orders/order-block.tsx @@ -5,18 +5,20 @@ import { Eye } from 'lucide-react'; import { Trans } from '@kit/ui/makerkit/trans'; -import type { AnalysisOrder } from '~/lib/types/analysis-order'; +import type { AnalysisOrder } from '~/lib/types/order'; import OrderItemsTable from './order-items-table'; export default function OrderBlock({ analysisOrder, + medusaOrderStatus, itemsAnalysisPackage, itemsTtoService, itemsOther, medusaOrderId, }: { analysisOrder?: AnalysisOrder; + medusaOrderStatus: string; itemsAnalysisPackage: StoreOrderLineItem[]; itemsTtoService: StoreOrderLineItem[]; itemsOther: StoreOrderLineItem[]; @@ -50,7 +52,11 @@ export default function OrderBlock({ )} {itemsTtoService && ( @@ -58,12 +64,15 @@ export default function OrderBlock({ items={itemsTtoService} title="orders:table.ttoService" type="ttoService" + order={{ status: medusaOrderStatus.toUpperCase() }} /> )} diff --git a/app/home/(user)/_components/orders/order-items-table.tsx b/app/home/(user)/_components/orders/order-items-table.tsx index 39ec1de..3495cea 100644 --- a/app/home/(user)/_components/orders/order-items-table.tsx +++ b/app/home/(user)/_components/orders/order-items-table.tsx @@ -17,7 +17,7 @@ import { } from '@kit/ui/table'; import { Trans } from '@kit/ui/trans'; -import type { AnalysisOrder } from '~/lib/types/analysis-order'; +import type { Order } from '~/lib/types/order'; import { logAnalysisResultsNavigateAction } from './actions'; @@ -26,12 +26,12 @@ export type OrderItemType = 'analysisOrder' | 'ttoService'; export default function OrderItemsTable({ items, title, - analysisOrder, + order, type = 'analysisOrder', }: { items: StoreOrderLineItem[]; title: string; - analysisOrder?: AnalysisOrder; + order: Order; type?: OrderItemType; }) { const router = useRouter(); @@ -43,9 +43,9 @@ export default function OrderItemsTable({ const isAnalysisOrder = type === 'analysisOrder'; const openAnalysisResults = async () => { - if (analysisOrder) { - await logAnalysisResultsNavigateAction(analysisOrder.medusa_order_id); - router.push(`${pathsConfig.app.analysisResults}/${analysisOrder.id}`); + if (isAnalysisOrder && order?.medusaOrderId && order?.id) { + await logAnalysisResultsNavigateAction(order.medusaOrderId); + router.push(`${pathsConfig.app.analysisResults}/${order.id}`); } }; @@ -84,7 +84,7 @@ export default function OrderItemsTable({ diff --git a/app/home/(user)/_lib/server/actions.ts b/app/home/(user)/_lib/server/actions.ts index 43d90b8..f3998ca 100644 --- a/app/home/(user)/_lib/server/actions.ts +++ b/app/home/(user)/_lib/server/actions.ts @@ -23,16 +23,16 @@ export async function createInitialReservationAction( }); if (addedItem) { - const reservation = await createInitialReservation( + const reservation = await createInitialReservation({ serviceId, clinicId, appointmentUserId, - syncUserId, + syncUserID: syncUserId, startTime, - addedItem.id, + medusaLineItemId: addedItem.id, locationId, comments, - ); + }); await updateLineItem({ lineId: addedItem.id, diff --git a/lib/services/medipost/medipostPrivateMessage.service.ts b/lib/services/medipost/medipostPrivateMessage.service.ts index 055acd6..997a12f 100644 --- a/lib/services/medipost/medipostPrivateMessage.service.ts +++ b/lib/services/medipost/medipostPrivateMessage.service.ts @@ -16,8 +16,8 @@ import axios from 'axios'; import { toArray } from '@kit/shared/utils'; import { Tables } from '@kit/supabase/database'; -import type { AnalysisOrder } from '~/lib/types/analysis-order'; import type { AnalysisResponseElement } from '~/lib/types/analysis-response-element'; +import type { AnalysisOrder } from '~/lib/types/order'; import { getAccountAdmin } from '../account.service'; import { getAnalyses } from '../analyses.service'; diff --git a/lib/services/order.service.ts b/lib/services/order.service.ts index 12368be..c554ae9 100644 --- a/lib/services/order.service.ts +++ b/lib/services/order.service.ts @@ -4,7 +4,7 @@ import type { Tables } from '@kit/supabase/database'; import { getSupabaseServerAdminClient } from '@kit/supabase/server-admin-client'; import { getSupabaseServerClient } from '@kit/supabase/server-client'; -import type { AnalysisOrder } from '../types/analysis-order'; +import type { AnalysisOrder, TTOOrder } from '../types/order'; export async function createAnalysisOrder({ medusaOrder, @@ -176,10 +176,7 @@ export async function getTtoOrders({ orderStatus, lineItemIds, }: { - orderStatus?: Tables< - { schema: 'medreport' }, - 'connected_online_reservation' - >['status']; + orderStatus?: TTOOrder['status']; lineItemIds?: string[]; } = {}) { const client = getSupabaseServerClient(); diff --git a/lib/services/reservation.service.ts b/lib/services/reservation.service.ts index 330a8b2..7abf1d1 100644 --- a/lib/services/reservation.service.ts +++ b/lib/services/reservation.service.ts @@ -150,16 +150,25 @@ export async function getCartReservations( return results; } -export async function createInitialReservation( - serviceId: number, - clinicId: number, - appointmentUserId: number, - syncUserID: number, - startTime: Date, - medusaLineItemId: string, - locationId?: number | null, +export async function createInitialReservation({ + serviceId, + clinicId, + appointmentUserId, + syncUserID, + startTime, + medusaLineItemId, + locationId, comments = '', -) { +}: { + serviceId: number; + clinicId: number; + appointmentUserId: number; + syncUserID: number; + startTime: Date; + medusaLineItemId: string; + locationId?: number | null; + comments?: string; +}) { const logger = await getLogger(); const supabase = getSupabaseServerClient(); @@ -255,15 +264,23 @@ export async function getOrderedTtoServices({ return orderedTtoServices; } -export async function updateReservationTime( - reservationId: number, - newStartTime: Date, - newServiceId: number, - newAppointmentUserId: number, - newSyncUserId: number, - newLocationId: number | null, // TODO stop allowing null when Connected starts returning the correct ids instead of -1 - cartId: string, -) { +export async function updateReservationTime({ + reservationId, + newStartTime, + newServiceId, + newAppointmentUserId, + newSyncUserId, + newLocationId, // TODO stop allowing null when Connected starts returning the correct ids instead of -1 + cartId, +}: { + reservationId: number; + newStartTime: Date; + newServiceId: number; + newAppointmentUserId: number; + newSyncUserId: number; + newLocationId: number | null; + cartId: string; +}) { const logger = await getLogger(); const supabase = getSupabaseServerClient(); diff --git a/lib/types/analysis-order.ts b/lib/types/analysis-order.ts deleted file mode 100644 index a7ce721..0000000 --- a/lib/types/analysis-order.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { Tables } from '@kit/supabase/database'; - -export type AnalysisOrder = Tables<{ schema: 'medreport' }, 'analysis_orders'>; diff --git a/lib/types/order.ts b/lib/types/order.ts new file mode 100644 index 0000000..92ce3f7 --- /dev/null +++ b/lib/types/order.ts @@ -0,0 +1,12 @@ +import type { Tables } from '@kit/supabase/database'; + +export type AnalysisOrder = Tables<{ schema: 'medreport' }, 'analysis_orders'>; +export type TTOOrder = Tables< + { schema: 'medreport' }, + 'connected_online_reservation' +>; +export type Order = { + medusaOrderId?: string; + id?: number; + status?: string; +}; diff --git a/public/locales/et/orders.json b/public/locales/et/orders.json index 036c076..a57ff1c 100644 --- a/public/locales/et/orders.json +++ b/public/locales/et/orders.json @@ -27,7 +27,7 @@ "CANCELLED": "Tühistatud" }, "ttoService": { - "PENDING": "Alustatud", + "PENDING": "Laekumise ootel", "CONFIRMED": "Kinnitatud", "REJECTED": "Tagasi lükatud", "CANCELLED": "Tühistatud"