From beccd8b24ff3c2ce76941591badf1e43981f7c29 Mon Sep 17 00:00:00 2001 From: mouazkh Date: Thu, 16 Apr 2026 22:33:19 +0300 Subject: [PATCH] added debugging on the admin confirm --- app/components/admin/BookingRequests.js | 43 +++++++++++++++++++++---- app/utils/api.js | 28 ++++++++++++++-- 2 files changed, 63 insertions(+), 8 deletions(-) diff --git a/app/components/admin/BookingRequests.js b/app/components/admin/BookingRequests.js index f9b2c45..cf0a7a5 100644 --- a/app/components/admin/BookingRequests.js +++ b/app/components/admin/BookingRequests.js @@ -1177,12 +1177,6 @@ const RequestCard = ({ request, onConfirmDeposit, onViewDetails, confirmingDepos )} - {canConfirmDeposit && ( -
- يظهر زر تأكيد العربون فقط عندما تكون حالة الحجز depositPaid (2). -
- )} - {Number(request.status) === RESERVATION_STATUS.depositConfirmed && (
تم تأكيد العربون من قبل الإدارة. @@ -1372,11 +1366,21 @@ export default function BookingRequests() { const handleDepositConfirmation = async (request) => { if (!AuthService.isAdmin()) { + console.warn('[Admin] Deposit confirmation blocked: current user is not admin', { + user: AuthService.getUser(), + roles: AuthService.getRoles?.(), + request, + }); toast.error('هذا الإجراء متاح للإدارة فقط'); return; } if (Number(request?.status) !== RESERVATION_STATUS.depositPaid) { + console.warn('[Admin] Deposit confirmation blocked: reservation is not in depositPaid state', { + requestId: request?.id, + reservationId: request?.reservationId, + status: request?.status, + }); toast.error('يمكن تأكيد العربون فقط عندما تكون الحالة depositPaid'); return; } @@ -1391,7 +1395,25 @@ export default function BookingRequests() { const parsedAdminId = Number(adminUser?.id); const adminId = Number.isFinite(parsedAdminId) ? parsedAdminId : adminUser?.id; + console.log('[Admin] Preparing admin confirm deposit request', { + requestId: request?.id, + reservationId, + adminId, + adminUser, + status: request?.status, + endpoint: '/Reservations/AdminConfirmDeposit/admin-confirm-deposit', + payload: { + reservationId, + adminId, + comment: null, + }, + }); + if (adminId == null || adminId === '') { + console.warn('[Admin] Deposit confirmation blocked: adminId is missing', { + adminUser, + parsedAdminId, + }); toast.error('لم نتمكن من تحديد هوية المدير'); return; } @@ -1401,6 +1423,15 @@ export default function BookingRequests() { try { const result = await adminConfirmDeposit(reservationId, adminId, null); + console.log('[Admin] Deposit confirmation response', { + requestId: request?.id, + reservationId, + status: result?.status, + ok: result?.ok, + message: result?.message, + data: result?.data, + }); + if (!result.ok) { throw new Error(result.message || result.data?.message || `HTTP ${result.status}`); } diff --git a/app/utils/api.js b/app/utils/api.js index ee12017..35de4e2 100644 --- a/app/utils/api.js +++ b/app/utils/api.js @@ -382,19 +382,36 @@ export async function confirmDepositPayment(bookingId) { export async function adminConfirmDeposit(reservationId, adminId, comment = null) { const token = AuthService.getToken(); + const endpoint = `${API_BASE}/Reservations/AdminConfirmDeposit/admin-confirm-deposit`; + const payload = { reservationId, adminId, comment }; - const res = await fetch(`${API_BASE}/Reservations/AdminConfirmDeposit/admin-confirm-deposit`, { + console.log('[API] AdminConfirmDeposit request', { + method: 'PUT', + endpoint, + payload, + hasToken: Boolean(token), + tokenPreview: token ? `${token.slice(0, 18)}...${token.slice(-8)}` : null, + }); + + const res = await fetch(endpoint, { method: 'PUT', headers: { 'Content-Type': 'application/json', ...(token && { Authorization: `Bearer ${token}` }), }, - body: JSON.stringify({ reservationId, adminId, comment }), + body: JSON.stringify(payload), }); const text = await res.text(); let data = null; + console.log('[API] AdminConfirmDeposit raw response', { + status: res.status, + ok: res.ok, + endpoint, + rawText: text, + }); + try { data = text ? JSON.parse(text) : null; if (data && typeof data === 'object' && 'data' in data) { @@ -406,6 +423,13 @@ export async function adminConfirmDeposit(reservationId, adminId, comment = null const message = typeof data === 'object' && data?.message ? data.message : null; + console.log('[API] AdminConfirmDeposit parsed response', { + status: res.status, + ok: res.ok, + message, + data, + }); + return { status: res.status, data, ok: res.ok, message }; }