From f73bbf54ada13c1ae769bfe9d5e75be255edb203 Mon Sep 17 00:00:00 2001 From: Danel Kungla Date: Wed, 1 Oct 2025 18:55:53 +0300 Subject: [PATCH 1/6] 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", From cc1de3e2f3adfc3a9f87627ae9e118bb02968967 Mon Sep 17 00:00:00 2001 From: Danel Kungla Date: Wed, 22 Oct 2025 15:25:17 +0300 Subject: [PATCH 4/6] update order --- .../(user)/_components/orders/order-block.tsx | 1 - .../_components/orders/order-items-table.tsx | 16 ++++++++++++---- app/home/(user)/_lib/server/load-category.ts | 18 ++++++++++++++++-- public/locales/et/orders.json | 1 + 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/app/home/(user)/_components/orders/order-block.tsx b/app/home/(user)/_components/orders/order-block.tsx index e94a2fb..abe1519 100644 --- a/app/home/(user)/_components/orders/order-block.tsx +++ b/app/home/(user)/_components/orders/order-block.tsx @@ -74,7 +74,6 @@ export default function OrderBlock({ bookingCode: ttoReservation?.booking_code, clinicId: ttoReservation?.clinic_id, medusaLineItemId: ttoReservation?.medusa_cart_line_item_id, - id: ttoReservation?.id, }} /> )} diff --git a/app/home/(user)/_components/orders/order-items-table.tsx b/app/home/(user)/_components/orders/order-items-table.tsx index 0020068..ca9ade4 100644 --- a/app/home/(user)/_components/orders/order-items-table.tsx +++ b/app/home/(user)/_components/orders/order-items-table.tsx @@ -65,7 +65,7 @@ export default function OrderItemsTable({ await logAnalysisResultsNavigateAction(order.medusaOrderId); router.push(`${pathsConfig.app.analysisResults}/${order.id}`); } else { - router.push(`${pathsConfig.app.myOrders}/${order.id}`); + router.push(`${pathsConfig.app.myOrders}/${order.medusaOrderId}`); } }; @@ -107,9 +107,13 @@ export default function OrderItemsTable({ /> - + {isTtoservice && order.bookingCode && ( {isCancelOrderAllowed && ( From bdd740c9ae462d37bcf05162feed38b7b1e6ac39 Mon Sep 17 00:00:00 2001 From: Danel Kungla Date: Thu, 23 Oct 2025 12:05:57 +0300 Subject: [PATCH 6/6] added updated_at field when changing time --- app/home/(user)/_components/cart/cart-item-delete.tsx | 1 + app/home/(user)/_components/cart/mobile-cart-service-items.tsx | 2 +- lib/services/reservation.service.ts | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/home/(user)/_components/cart/cart-item-delete.tsx b/app/home/(user)/_components/cart/cart-item-delete.tsx index fb52074..6b4657e 100644 --- a/app/home/(user)/_components/cart/cart-item-delete.tsx +++ b/app/home/(user)/_components/cart/cart-item-delete.tsx @@ -38,6 +38,7 @@ const CartItemDelete = ({ diff --git a/lib/services/reservation.service.ts b/lib/services/reservation.service.ts index 7abf1d1..39cd002 100644 --- a/lib/services/reservation.service.ts +++ b/lib/services/reservation.service.ts @@ -317,6 +317,7 @@ export async function updateReservationTime({ sync_user_id: newSyncUserId, start_time: newStartTime.toString(), location_sync_id: newLocationId, + updated_at: new Date().toISOString(), }) .eq('id', reservationId) .eq('user_id', user.id)