/* eslint-disable no-nested-ternary */ /* eslint-disable no-console */ "use client"; import dayjs from "dayjs"; import { useRouter } from "next/navigation"; import React, { useEffect, useRef } from "react"; import { useBoolean } from "usehooks-ts"; import type { FormHandles } from "@/components/form/form"; import Form from "@/components/form/form"; import Container from "@/components/shared/container"; import Card from "@/components/ui/card/card"; import { ReservationSummaryImage, ReservationSummaryPriceBox, ReservationSummaryProvider, ReservationSummaryRoutes, ReservationSummarySeperator, ReservationSummaryTitle, } from "@/components/widget/reservation-summary/reservation-summary"; import { CoreSummaryHeader, CoreSummaryPassengerGroup, } from "@/features/core/summary/components/core-summary"; import CoreSummaryActionButton from "@/features/core/summary/components/core-summary-action-button"; import { CoreSummaryAdditionalPrices } from "@/features/core/summary/components/core-summary-additional-prices"; import CoreSummaryContent from "@/features/core/summary/components/core-summary-content"; import CoreSummaryCouponCode from "@/features/core/summary/components/core-summary-coupon-code/core-summary-coupon-code"; import type { CoreSummaryHandles } from "@/features/core/summary/components/core-summary-form"; import CoreSummaryForm, { GROUP_KEY_PREFIX, } from "@/features/core/summary/components/core-summary-form"; import CoreSummaryInvoiceNoteFormItem from "@/features/core/summary/components/core-summary-invoice-note-form-item"; import CoreSummaryMainColumn from "@/features/core/summary/components/core-summary-main-column"; import CoreSummaryNoteFormItem from "@/features/core/summary/components/core-summary-note-form-input"; import CoreSummaryPolicyFormItem from "@/features/core/summary/components/core-summary-policy-form-item"; import CoreSummaryRequestNoteFormItem from "@/features/core/summary/components/core-summary-request-note-form-item"; import CoreSummarySideColumn from "@/features/core/summary/components/core-summary-side-column"; import CoreSummarySteps from "@/features/core/summary/components/core-summary-steps"; import { CoreSummaryCtxProvider } from "@/features/core/summary/context/core-summary-context"; import { getBillingRequestDataFromPassengerInfo } from "@/features/core/summary/libs/billing-helper"; import type { ICoreSummaryPassenger } from "@/features/core/summary/types/core-summary.types"; import BillingInfoForm from "@/features/customer/billing-info/billing-info-form"; import PaymentList from "@/features/modules/payment/payment-list"; import { useApp } from "@/hooks/useApp"; import { useBreakpoints } from "@/hooks/useBreakpoints"; import { useLocale } from "@/hooks/useLocale"; import { useLocalStateCache } from "@/libs/helpers/local-state-cache-helper"; import { CorePassengerHelper } from "@/libs/helpers/passenger-helper"; import { PriceManager } from "@/libs/price-manager/price-manager"; import DefautlImage from "@/public/assets/images/defaultImage.jpg"; import type { ITransferAddToCartResponse } from "@/services/eva-display/transfer/transfer-cart/transfer-add-to-cart.service"; import { useTransferCreatePostMutation } from "@/services/eva-display/transfer/transfer-create-post/transfer-create-post.service"; import { useTransferValidateMutation } from "@/services/eva-display/transfer/transfer-validate/transfer-validate.service"; import { useMasterpassStore } from "@/store/masterpass-store/use-masterpass-store"; import { useNotifyStore } from "@/store/notify-store/use-notify-store"; import { usePayment } from "../../payment/hooks/use-transfer-payment"; import { useTransferTravelPlanner } from "../../travel-planner/hooks/use-transfer-travel-planner"; import { useTransferSummary } from "../hooks/use-transfer-summary"; import TransferSummaryInfoForm from "./transfer-summary-info-form"; interface TransferSummaryViewProps { addToCardData: ITransferAddToCartResponse; passengersGroups: Array; } export interface TransferPaymentListHandles extends FormHandles {} export default function TransferSummaryView(props: TransferSummaryViewProps) { const router = useRouter(); const coreSummaryRef = useRef(null); const { isB2E, isB2C } = useApp(); const { setNotify } = useNotifyStore(); const bookingRequestMutation = useTransferCreatePostMutation(); const { data: tpData } = useTransferTravelPlanner(); const { data: summaryData } = useTransferSummary(); const { paymentState, setBookingData } = usePayment(); const { setMasterpassData } = useMasterpassStore(); const diffrentBillingInfoBoolean = useBoolean(); const transferPaymentRef = useRef(null); const paymentFormRef = useRef(null); const validateMutation = useTransferValidateMutation(); const { t } = useLocale(); const { getLocalStateCacheValues } = useLocalStateCache( "transferFormFields", props.passengersGroups, ); function getDefaultValues() { const defaultValues: any = getLocalStateCacheValues(); if (defaultValues) { return defaultValues; } props.passengersGroups.forEach((passengerGroup) => { passengerGroup.forEach((passenger) => { if (passenger.type === "employee") { defaultValues[`${GROUP_KEY_PREFIX}_${0}-${passenger.key}-employee`] = passenger.defaultValue; } }); }); return defaultValues; } const defaultValues = getDefaultValues(); const { isDesktop } = useBreakpoints(); const isReturn = props.addToCardData.transferItemList.length > 1; const sortedTransferItemsByGroupId = props.addToCardData.transferItemList.sort((a, b) => a.groupId - b.groupId); function handleSubmitButtonClick() { if (paymentState?.payload.paymentStatus === "payment") { paymentFormRef.current?.submit(); transferPaymentRef.current?.onlyValidate(); } else { coreSummaryRef.current?.submit(); } } function renderCouponCode() { if (isB2C && !!paymentState?.payload?.transactionId) { return ( ); } return null; } useEffect(() => { window.scrollTo(0, 0); }, [paymentState?.payload?.paymentStatus]); return ( {({ discounts }) => (
{isB2C && ( )}
{isB2C ? paymentState?.payload?.paymentStatus === "payment" ? t("Ödeme Seçenekleri") : "Yolcu Bilgileri" : "Kişi Bilgileri"} {isB2C && paymentState?.payload?.paymentStatus === "payment" ? ( {!isDesktop && renderCouponCode()}
transferPaymentRef.current?.submit()} shouldAutoScroll > x.type === "CouponCode"), )} />
) : ( ref={coreSummaryRef} wrapperClassName="space-y-4" formItemPrefixes={[ "departureInfo", "arrivalInfo", "billingInfo", ]} onSubmit={async (values) => { const passengersInformations = values.passengers.map( (psg) => CorePassengerHelper.corePassengerToPassengerInformation( psg, ), ); const passengerWithBillingInfo = passengersInformations.find( (x) => x.Address.Street !== "", ); // const billingInfo = diffrentBillingInfoBoolean.value // ? getBillingRequestDataFromBillingForm( // values.values?.billingInfo!, // ) : const billingInfo = getBillingRequestDataFromPassengerInfo( passengerWithBillingInfo!, ); if (isB2E) { const passengersWithoutGenderInfo = CorePassengerHelper.getPassengersWithoutGenderInfo( values.passengers, ); if (passengersWithoutGenderInfo.length > 0) { setNotify({ variant: "error", title: "Bir Hata Oluştu!", message: `${"Seçilen kullanıcının cinsiyet bilgisini doldurunuz."} \n ${passengersWithoutGenderInfo.reduce((acc, curr) => `${acc} ${curr.name} ${curr.surname},`, "").slice(0, -1)}`, }); return; } const resp = await bookingRequestMutation.mutateAsync({ CorpCreateTransferRequest: { CartId: "", IsPreBook: true, KvkkStatus: true, PassengerInformations: passengersInformations as any, LinkId: "", TravelReasonId: tpData.payload?.reason?.value ? +tpData.payload.reason.value : 0, BranchId: tpData.payload?.branchOffice?.value ? +tpData.payload.branchOffice.value : undefined, RequesterUserIds: values.passengers .filter((x) => x.type === "employee") .map((x) => x.employeeGUID ?? ""), ProjectCode: values.invoiceNote ?? "", ReservationNote: values.requestNote ?? "", ProductKeys: summaryData.payload .detailKey as string[], SearchId: summaryData.payload.searchId ?? "", SearchProductKey: summaryData.payload.searchItemKey ?? "", CancelWarrantySearchId: "", RequestId: null, RoundTripInformations: [ { SegmentGroupId: 0, TransferProductFlightDetails: { FlightDate: values.values?.departureInfo ?.flightDate?.date ? dayjs( values.values?.departureInfo .flightDate.date, ).format("YYYY-MM-DD") : null, FlightNumber: values.values?.departureInfo ?.flightNo ?? null, FlightTimeDeparture: values.values?.departureInfo ?.departureTime, FlightTimeArrival: values.values?.departureInfo ?.arrivalTime, FlightAirline: values.values?.departureInfo ?.airlineName, FlightAirport: null, FlightAddressDeparture: null, FlightAddressArrival: values.values?.departureInfo .address ?? null, }, }, ...(values.values?.arrivalInfo ? [ { SegmentGroupId: 1, TransferProductFlightDetails: { FlightDate: values.values ?.arrivalInfo?.flightDate?.date ? dayjs( values.values?.arrivalInfo .flightDate.date, ).format("YYYY-MM-DD") : null, FlightNumber: values.values?.arrivalInfo ?.flightNo ?? null, FlightTimeDeparture: values.values?.arrivalInfo ?.departureTime, FlightTimeArrival: values.values?.arrivalInfo ?.arrivalTime, FlightAirline: values.values?.arrivalInfo ?.airlineName, FlightAirport: null, FlightAddressDeparture: null, FlightAddressArrival: values.values?.arrivalInfo ?.address ?? null, }, }, ] : []), ], }, }); if ( !!resp?.result?.requestId && resp?.result?.requestId !== 0 ) { router.push( `/booking-request-success?bookingId=${resp.result.requestId}`, ); } else { setNotify({ message: resp?.errors?.[0]?.message ?? "Bir hata oluştu", title: "Hata", variant: "error", }); } } else { try { const resp = await validateMutation.mutateAsync({ TransferValidateBookingRequest: { AddOnsKeyList: [], CartId: props.addToCardData.cartId, SearchId: summaryData.payload.searchId!, BookingPassengers: passengersInformations.map( (x) => ({ ...x, PhoneNumbers: x.PhoneNumbers as unknown as string[], Gender: x.Gender ? +x.Gender : 0, }), ), KvkkApproval: true, CancelWarrantySearchId: "", BillingRequest: billingInfo as any, ReservationNotes: (values as any).specialNote ?? "", }, }); setBookingData({ cartId: props.addToCardData.cartId, searchId: summaryData.payload.searchId!, transactionId: resp.data.result.serviceResponse.result .transactionKey, preSaleAgreementText: resp.data.result.serviceResponse.result .preSaleAgreementText, saleAgreementText: resp.data.result.serviceResponse.result .saleAgreementText, }); if ( resp.data.result.serviceResponse.result .masterPassUserData ) { setMasterpassData({ moduleName: "Transfer", payload: { masterpassLoginState: false, masterpassOtherUser: false, cardList: [], masterpassUserData: resp.data.result.serviceResponse.result .masterPassUserData, customerEmail: values.passengers[0]!.email, masterPassengerName: values.passengers[0]!.name! + values.passengers[0]!.surname!, }, }); } } catch (error) { setNotify({ title: "Bir Hata Oluştu!", message: "Bir hata oluştu", variant: "error", }); } } }} defaultValues={defaultValues} >
Seyahat Bilgileriniz Transferinizi size uygun şekilde planlayabilmemiz için lütfen aşağıdaki bilgileri dikkatlice doldurun.

Gidiş Bilgileriniz
{isReturn && ( <>
Dönüş Bilgileriniz
)}
{isB2E && ( <> )} {isB2C && ( <> { diffrentBillingInfoBoolean.setValue(value); }} /> )}
)} acc + +item.price, 0), })} button={ { handleSubmitButtonClick(); }} variant="primary" loading={ bookingRequestMutation.isLoading // || validateMutation.isLoading } /> } > {sortedTransferItemsByGroupId.map((item, index) => ( <> {index !== 0 && (
)}
{isReturn && (
{index === 0 ? "Gidiş Transferi" : "Dönüş Transferi"}
)}
{item.transferName} {dayjs .utc(item.startDate) .format("DD MMMM YYYY HH:mm")}
))}
Yolcu Sayısı {props.addToCardData.passengersCount}
{`${ (tpData.payload.passengers.employee?.count ?? 0) + (tpData.payload.passengers.guest?.count ?? 0) } Yetişkin${ (tpData.payload.passengers.child?.count ?? 0) > 0 ? `, ${tpData.payload.passengers.child?.count} Çocuk` : "" }`}
{isReturn && (
{sortedTransferItemsByGroupId.map((item, index) => (
{index === 0 ? "Gidiş Transferi" : "Dönüş Transferi"} {PriceManager({ currency: item.totalPrice.slice(0, 3), value: +item.totalPrice.slice(3), })}
))}
)} acc + +item.price, 0, ), })} /> {isDesktop && renderCouponCode()} { handleSubmitButtonClick(); }} variant="primary" loading={ bookingRequestMutation.isLoading // || validateMutation.isLoading } />
)}
); }