whereHas('product', function ($query) { $query->whereIn('post_status', ['publish', 'private']); }) ->first(); } public static function getOrder($orderId) { return CartOrder::find($orderId); } public static function getEventProductId($calendarEvent, $duration = null) { $paymentSettings = $calendarEvent->getPaymentSettings(); if ($calendarEvent->isMultiDurationEnabled() && Arr::get($paymentSettings, 'multi_payment_enabled') == 'yes') { if ($productId = Arr::get($paymentSettings, 'multi_payment_cart_ids.'. $duration)) { return (int) $productId; } return null; } $productId = Arr::get($paymentSettings, 'cart_product_id'); if ($productId) { return (int) $productId; } return null; } public static function getProductVariationOptions($product) { $placeholder = self::getPlaceholderImage(); $isSimple = Arr::get($product->detail, 'variation_type') == 'simple'; $options = []; foreach ($product->variants as $variant) { $thumbnail = $isSimple ? $product->thumbnail : $variant->thumbnail; $options[] = [ 'value' => strval($variant->id), 'title' => $variant->variation_title, 'price' => $variant->formatted_total, 'image' => $thumbnail ?? $placeholder ]; } if (!empty($options)) { return [ 'id' => $product->ID, 'title' => $product->post_title, 'options' => $options ]; } return []; } public static function getPlaceholderImage() { return \FluentCart\App\Vite::getAssetUrl('images/placeholder.svg'); } public static function getCartProductPrice($paymentSettings, $defaultDuration, $formatted = true) { $productId = $paymentSettings['cart_product_id']; if (Arr::get($paymentSettings, 'multi_payment_enabled') == 'yes') { $productId = Arr::get($paymentSettings, 'multi_payment_cart_ids.' . $defaultDuration); } $price = ''; $product = self::getProduct($productId); if ($product) { if ($formatted) { $price = $product->formatted_total; } else { $price = floatval($product->item_price / 100) ?? 0; } } return $price; } public static function getCartProductPriceByDuration($productIds = []) { $productPrices = []; if (empty($productIds)) { return $productPrices; } $products = CartProductVariant::whereIn('id', array_values($productIds)) ->whereHas('product', function ($query) { $query->whereIn('post_status', ['publish', 'private']); }) ->get() ->keyBy('id'); foreach ($productIds as $duration => $productId) { if (!isset($products[$productId])) { continue; } $product = $products[$productId]; $productPrices[$duration] = [ 'value' => $product->formatted_total ]; } return $productPrices; } public static function isEnabled($calendarEvent = null) { if (!$calendarEvent) { return false; } return $calendarEvent->isPaidEvent() && $calendarEvent->isCartEnabled(); } public static function getSuccessLog($bookingId, $order) { return [ 'booking_id' => $bookingId, 'status' => 'closed', 'type' => 'success', 'title' => __('Cart: Booking status changed to scheduled', 'fluent-booking'), 'description' => sprintf( /* translators: Notification message for the change of Woocommerce order status and booking status to scheduled. %1$s is a link to view the order, %2$s is the closing link tag */ __('Cart order status changed to paid and booking status changed to scheduled. %1$sView Order%2$s', 'fluent-booking'), '', '' ) ]; } }