From f73bbf54ada13c1ae769bfe9d5e75be255edb203 Mon Sep 17 00:00:00 2001 From: Danel Kungla Date: Wed, 1 Oct 2025 18:55:53 +0300 Subject: [PATCH 1/3] MED-177: add booking confirmation --- .env.example | 1 + .../(user)/_components/orders/order-block.tsx | 3 +- .../_components/orders/order-items-table.tsx | 19 +- app/home/(user)/_lib/server/actions.ts | 23 +- app/home/(user)/_lib/server/cart-actions.ts | 37 +- .../_lib/server/members-page.loader.ts | 19 +- lib/services/connected-online.service.ts | 92 +- .../medipostPrivateMessage.service.ts | 3 - lib/types/order.ts | 1 + .../features/medusa-storefront/package.json | 4 - .../medusa-storefront/src/lib/data/cart.ts | 2 +- .../members/account-members-table.tsx | 30 +- pnpm-lock.yaml | 2033 +---------------- 13 files changed, 215 insertions(+), 2052 deletions(-) diff --git a/.env.example b/.env.example index 091949f..084e916 100644 --- a/.env.example +++ b/.env.example @@ -10,6 +10,7 @@ MEDIPOST_PASSWORD=your-medipost-password MEDIPOST_RECIPIENT=your-medipost-recipient CONNECTED_ONLINE_URL=your-connected-online-url +CONNECTED_ONLINE_CONFIRMED_URL=your-connected-confirmed-url EMAIL_SENDER= EMAIL_USER= # refer to your email provider's documentation diff --git a/app/home/(user)/_components/orders/order-block.tsx b/app/home/(user)/_components/orders/order-block.tsx index b43b3a2..12094bd 100644 --- a/app/home/(user)/_components/orders/order-block.tsx +++ b/app/home/(user)/_components/orders/order-block.tsx @@ -69,11 +69,12 @@ export default function OrderBlock({ title="orders:table.ttoService" type="ttoService" order={{ - status: medusaOrderStatus.toUpperCase(), + status: ttoReservation?.status, medusaOrderId, location: ttoLocation?.name, bookingCode: ttoReservation?.booking_code, clinicId: ttoReservation?.clinic_id, + medusaLineItemId: ttoReservation?.medusa_cart_line_item_id, }} /> )} diff --git a/app/home/(user)/_components/orders/order-items-table.tsx b/app/home/(user)/_components/orders/order-items-table.tsx index 18ba3a1..516b098 100644 --- a/app/home/(user)/_components/orders/order-items-table.tsx +++ b/app/home/(user)/_components/orders/order-items-table.tsx @@ -2,7 +2,7 @@ import { useState } from 'react'; -import { useRouter } from 'next/navigation'; +import { redirect, useRouter } from 'next/navigation'; import ConfirmationModal from '@/packages/shared/src/components/confirmation-modal'; import { StoreOrderLineItem } from '@medusajs/types'; @@ -40,6 +40,11 @@ export default function OrderItemsTable({ }) { const router = useRouter(); const [isConfirmOpen, setIsConfirmOpen] = useState(false); + const isCancelOrderAllowed = + order?.bookingCode && + order?.clinicId && + order?.medusaLineItemId && + order?.status === 'CONFIRMED'; if (!items || items.length === 0) { return null; @@ -109,7 +114,7 @@ export default function OrderItemsTable({ - {isTtoservice && order.bookingCode && ( + {isCancelOrderAllowed && ( - {isCancelOrderAllowed && ( - - )} - - - ))} - + {isCancelOrderAllowed && ( + + )} + + + ))} + + {isCancelOrderAllowed && ( { + if (product.metadata?.serviceIds) { + const serviceIds: number[] = JSON.parse( + product.metadata.serviceIds as string, + ); + for (const serviceId of serviceIds) { + const requiresPayment = await isPaymentRequiredForService(serviceId); + if (requiresPayment) { + return false; + } + } + return true; + } + return false; + }, + ); + return { category: { color: @@ -36,7 +55,7 @@ async function categoryLoader({ handle }: { handle: string }) { handle: category?.handle || '', name: category?.name || '', countryCode, - products: categoryProducts, + products: productsWithNoRequiredPayment, }, }; } diff --git a/lib/services/order.service.ts b/lib/services/order.service.ts index 66ca175..a7128e3 100644 --- a/lib/services/order.service.ts +++ b/lib/services/order.service.ts @@ -194,6 +194,7 @@ export async function getTtoLocation(syncId?: number | null) { .from('connected_online_locations') .select('name') .eq('sync_id', syncId) + .limit(1) .single(); if (error) { diff --git a/packages/features/medusa-storefront/src/lib/data/cart.ts b/packages/features/medusa-storefront/src/lib/data/cart.ts index d8d347a..aca6162 100644 --- a/packages/features/medusa-storefront/src/lib/data/cart.ts +++ b/packages/features/medusa-storefront/src/lib/data/cart.ts @@ -5,7 +5,9 @@ import { redirect } from 'next/navigation'; import { sdk } from '@lib/config'; import medusaError from '@lib/util/medusa-error'; -import type { HttpTypes, StoreCart } from '@medusajs/types'; +import type { HttpTypes, StoreCart, StoreCartPromotion } from '@medusajs/types'; + +import { getLogger } from '@kit/shared/logger'; import { getAuthHeaders, diff --git a/public/locales/et/orders.json b/public/locales/et/orders.json index 93da54b..1460353 100644 --- a/public/locales/et/orders.json +++ b/public/locales/et/orders.json @@ -25,7 +25,8 @@ "FULL_ANALYSIS_RESPONSE": "Kõik tulemused käes", "COMPLETED": "Kinnitatud", "REJECTED": "Tagastatud", - "CANCELLED": "Tühistatud" + "CANCELLED": "Tühistatud", + "CONFIRMED": "Kinnitatud" }, "analysisPackageOrder": { "QUEUED": "Esitatud",