diff --git a/src/modules/user/services/itinerary.service.ts b/src/modules/user/services/itinerary.service.ts index 60545e8..37b3821 100644 --- a/src/modules/user/services/itinerary.service.ts +++ b/src/modules/user/services/itinerary.service.ts @@ -2519,6 +2519,142 @@ export class ItineraryService { select: { id: true, activityTitle: true, + ActivityFoodCost: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + foodTypesId: true, + baseAmount: true, + totalAmount: true, + ActivityFoodTaxes: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + taxPer: true, + taxAmount: true, + taxes: { + select: { + id: true, + taxName: true, + taxPer: true, + }, + }, + }, + }, + }, + }, + ActivityTrainers: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + baseAmount: true, + totalAmount: true, + ActivityTrainerTaxes: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + taxPer: true, + taxAmount: true, + taxes: { + select: { + id: true, + taxName: true, + taxPer: true, + }, + }, + }, + }, + }, + }, + ActivityNavigationModes: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + navigationModeName: true, + navigationModesBasePrice: true, + navigationModesTotalPrice: true, + ActivityNavigationModesTaxes: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + taxPer: true, + taxAmount: true, + taxes: { + select: { + id: true, + taxName: true, + taxPer: true, + }, + }, + }, + }, + }, + }, + ActivityPickUpDetails: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + isPickUp: true, + locationLat: true, + locationLong: true, + locationAddress: true, + transportBasePrice: true, + transportTotalPrice: true, + activityPickUpTransportTaxes: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + taxPer: true, + taxAmount: true, + taxes: { + select: { + id: true, + taxName: true, + taxPer: true, + }, + }, + }, + }, + }, + }, + activityPickUpTransports: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + transportModeXid: true, + transportMode: { + select: { + id: true, + transportModeName: true, + transportModeIcon: true, + }, + }, + }, + }, + ActivityEquipments: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + equipmentName: true, + equipmentBasePrice: true, + equipmentTotalPrice: true, + ActivityEquipmentTaxes: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + taxPer: true, + taxAmount: true, + taxes: { + select: { + id: true, + taxName: true, + taxPer: true, + }, + }, + }, + }, + }, + }, }, }, venue: { @@ -2566,6 +2702,88 @@ export class ItineraryService { }, }, }, + itineraryActivitySelections: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + itineraryMemberXid: true, + isFoodOpted: true, + isTrainerOpted: true, + isInActivityNavigationOpted: true, + activityNavigationMode: { + select: { + id: true, + navigationModeName: true, + navigationModesBasePrice: true, + navigationModesTotalPrice: true, + ActivityNavigationModesTaxes: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + taxPer: true, + taxAmount: true, + taxes: { + select: { + id: true, + taxName: true, + taxPer: true, + }, + }, + }, + }, + }, + }, + selectedFoodTypes: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + activityFoodTypeXid: true, + activityFoodType: { + select: { + id: true, + foodTypeXid: true, + foodType: { + select: { + id: true, + foodTypeName: true, + }, + }, + }, + }, + }, + }, + selectedEquipments: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + activityEquipmentXid: true, + activityEquipment: { + select: { + id: true, + equipmentName: true, + equipmentBasePrice: true, + equipmentTotalPrice: true, + ActivityEquipmentTaxes: { + where: { isActive: true, deletedAt: null }, + select: { + id: true, + taxPer: true, + taxAmount: true, + taxes: { + select: { + id: true, + taxName: true, + taxPer: true, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, }, }, }, @@ -2582,6 +2800,81 @@ export class ItineraryService { const bookedActivities = await Promise.all( itinerary.ItineraryActivities.map(async (activity) => { + const activitySelection = + activity.itineraryActivitySelections?.find( + (selection) => selection.itineraryMemberXid === itineraryMember.id, + ) ?? null; + + const selectedFoodTypes = activitySelection?.selectedFoodTypes ?? []; + const selectedEquipments = activitySelection?.selectedEquipments ?? []; + const selectedNavigationMode = + activitySelection?.activityNavigationMode ?? null; + + const foodDetails = selectedFoodTypes.map((selectedFoodType) => { + const matchedCost = + activity.activity?.ActivityFoodCost.find( + (cost) => cost.foodTypesId === selectedFoodType.activityFoodType.foodTypeXid, + ) ?? activity.activity?.ActivityFoodCost?.[0] ?? null; + + return matchedCost + ? { + id: selectedFoodType.id, + activityFoodTypeXid: selectedFoodType.activityFoodTypeXid, + foodTypeXid: selectedFoodType.activityFoodType.foodTypeXid, + foodTypeName: selectedFoodType.activityFoodType.foodType.foodTypeName, + baseAmount: Number(matchedCost.baseAmount) || 0, + totalAmount: Number(matchedCost.totalAmount) || 0, + taxes: mapCheckoutTaxes(matchedCost.ActivityFoodTaxes ?? []), + } + : { + id: selectedFoodType.id, + activityFoodTypeXid: selectedFoodType.activityFoodTypeXid, + foodTypeXid: selectedFoodType.activityFoodType.foodTypeXid, + foodTypeName: selectedFoodType.activityFoodType.foodType.foodTypeName, + baseAmount: 0, + totalAmount: 0, + taxes: [], + }; + }); + + const equipmentDetails = selectedEquipments.map((selectedEquipment) => ({ + id: selectedEquipment.id, + activityEquipmentXid: selectedEquipment.activityEquipmentXid, + equipmentName: selectedEquipment.activityEquipment.equipmentName, + baseAmount: Number(selectedEquipment.activityEquipment.equipmentBasePrice) || 0, + totalAmount: Number(selectedEquipment.activityEquipment.equipmentTotalPrice) || 0, + taxes: mapCheckoutTaxes( + selectedEquipment.activityEquipment.ActivityEquipmentTaxes ?? [], + ), + })); + + const navigationDetails = selectedNavigationMode + ? { + id: selectedNavigationMode.id, + navigationModeName: selectedNavigationMode.navigationModeName, + baseAmount: Number(selectedNavigationMode.navigationModesBasePrice) || 0, + totalAmount: Number(selectedNavigationMode.navigationModesTotalPrice) || 0, + taxes: mapCheckoutTaxes( + selectedNavigationMode.ActivityNavigationModesTaxes ?? [], + ), + } + : null; + + const pickupDetails = (activity.activity?.ActivityPickUpDetails ?? []).map( + (pickUpDetail) => ({ + id: pickUpDetail.id, + isPickUp: pickUpDetail.isPickUp, + locationLat: pickUpDetail.locationLat, + locationLong: pickUpDetail.locationLong, + locationAddress: pickUpDetail.locationAddress, + baseAmount: Number(pickUpDetail.transportBasePrice) || 0, + totalAmount: Number(pickUpDetail.transportTotalPrice) || 0, + taxes: mapCheckoutTaxes( + pickUpDetail.activityPickUpTransportTaxes ?? [], + ), + }), + ); + if ( activity.itineraryType !== 'ACTIVITY' || !activity.activityXid || @@ -2597,6 +2890,10 @@ export class ItineraryService { startTime: activity.startTime, endTime: activity.endTime, }, + foodDetails, + equipmentDetails, + navigationDetails, + pickupDetails, skipped: true, reason: 'not_bookable_activity', }; @@ -2626,6 +2923,10 @@ export class ItineraryService { startTime: activity.startTime, endTime: activity.endTime, }, + foodDetails, + equipmentDetails, + navigationDetails, + pickupDetails, skipped: false, alreadyBooked: true, checkInCode: existingDetail.offlineCode, @@ -2860,6 +3161,10 @@ export class ItineraryService { startTime: activity.startTime, endTime: activity.endTime, }, + foodDetails, + equipmentDetails, + navigationDetails, + pickupDetails, skipped: false, alreadyBooked: false, checkInCode: detail.offlineCode,