PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.7.0
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.7.0
1.7.0 1.6.6 1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.4 1.5.5 1.5.3 1.5.2 1.5.1 1.5.0 1.4.2 1.4.1 1.4.0 1.3.28 1.3.27 1.3.26 1.3.25 1.3.23 1.3.22 1.3.21 1.3.20 All 50 releases
← All changes | app/Http/Controllers/FrontendControllers/CustomerOrderController.php +48 -7 1.5.4 → 1.7.0 View file →
@@ -20,8 +20,9 @@
20 20 use FluentCart\App\Models\OrderTransaction;
21 21 use FluentCart\App\Models\ProductDownload;
22 22 use FluentCart\App\Models\ProductVariation;
23 23 use FluentCart\App\Models\Subscription;
24 +use FluentCart\App\Modules\Subscriptions\Services\SystemChargeService;
24 25 use FluentCart\App\Services\FileSystem\FileManager;
25 26 use FluentCart\App\Services\Localization\LocalizationManager;
26 27 use FluentCart\App\Services\OrderService;
27 28 use FluentCart\App\Services\Payments\PaymentHelper;
@@ -28,9 +29,8 @@
28 29 use FluentCart\App\Services\Renderer\Receipt\TaxSummaryHelper;
29 30 use FluentCart\Framework\Database\Orm\Builder;
30 31 use FluentCart\Framework\Database\Orm\Relations\HasMany;
31 32 use FluentCart\Framework\Http\Request\Request;
32 -use FluentCart\App\Services\DateTime\DateTime;
33 33 use FluentCart\Framework\Support\Arr;
34 34 use FluentCart\Framework\Support\Collection;
35 35 use FluentCart\Framework\Validator\Validator;
36 36 use FluentCartPro\App\Modules\Licensing\Models\License;
@@ -62,9 +62,9 @@
62 62 $page = (int)$request->get('page', 1);
63 63 $search = $request->getSafe('search', 'sanitize_text_field');
64 64
65 65 $orders = Order::query()
66 - ->select(['invoice_no', 'id', 'parent_id', 'total_amount', 'fee_total', 'uuid', 'type', 'status', 'created_at'])
66 + ->select(['invoice_no', 'id', 'parent_id', 'total_amount', 'fee_total', 'currency', 'uuid', 'type', 'status', 'created_at'])
67 67 ->with(['order_items' => function ($query) {
68 68 $query->select('id', 'order_id', 'object_id', 'post_title', 'title', 'quantity', 'payment_type', 'line_meta', 'other_info');
69 69 }])
70 70 ->where('customer_id', $customer->id)
@@ -81,11 +81,12 @@
81 81 ->paginate($perPage, ['*'], 'page', $page);
82 82
83 83 $orders->transform(function ($order) {
84 84 return [
85 - 'created_at' => DateTime::gmtToTimezone($order->created_at, Arr::get($order->config, 'user_tz', wp_timezone_string()))->format('Y-m-d H:i:s'),
85 + 'created_at' => $order->created_at->format('Y-m-d H:i:s'),
86 86 'invoice_no' => $order->invoice_no,
87 87 'total_amount' => $order->total_amount,
88 + 'currency' => $order->currency,
88 89 'uuid' => $order->uuid,
89 90 'type' => $order->type,
90 91 'status' => $order->status,
91 92 'renewals_count' => $order->renewals_count,
@@ -237,12 +238,36 @@
237 238 $variationIds[] = $item->object_id;
238 239 $productIds[] = $item->post_id;
239 240 }
240 241
242 +
243 + $upgradableVariationIds = [];
244 + $isUpgradeEligibleOrder = in_array($order->payment_status, [
245 + Status::PAYMENT_PAID,
246 + Status::PAYMENT_PARTIALLY_PAID,
247 + Status::PAYMENT_PARTIALLY_REFUNDED
248 + ]);
249 +
250 + if ($isUpgradeEligibleOrder && $variationIds) {
251 + $upgradableVariationIds = Meta::query()
252 + ->where('meta_key', 'variant_upgrade_path')
253 + ->where('object_type', 'variant_upgrade')
254 + ->whereIn('object_id', $variationIds)
255 + ->pluck('object_id')
256 + ->toArray();
257 + }
258 +
259 + foreach ($orderItems as &$orderItem) {
260 + $orderItem['has_upgrade_paths'] = Arr::get($orderItem, 'payment_type') === 'onetime'
261 + && !Arr::get($orderItem, 'line_meta.parent_item_id')
262 + && in_array(Arr::get($orderItem, 'variation_id'), $upgradableVariationIds);
263 + }
264 + unset($orderItem);
265 +
241 266 $formattedOrderData = [
242 267 'fulfillment_type' => $order->fulfillment_type,
243 268 'type' => $order->type,
244 - 'created_at' => DateTime::gmtToTimezone($order->created_at, Arr::get($order->config, 'user_tz', wp_timezone_string()))->format('Y-m-d H:i:s'),
269 + 'created_at' => $order->created_at->format('Y-m-d H:i:s'),
245 270 'invoice_no' => $order->invoice_no,
246 271 'currency' => $order->currency,
247 272 'uuid' => $order->uuid,
248 273 'order_items' => $orderItems,
@@ -277,9 +302,9 @@
277 302 ];
278 303
279 304 $formattedOrderData['subscriptions'] = $order->subscriptions
280 305 ->filter(function ($subscription) {
281 - return !in_array($subscription->status, [Status::SUBSCRIPTION_PENDING, Status::SUBSCRIPTION_INTENDED]);
306 + return $subscription->isVisibleToCustomer();
282 307 })
283 308 ->map(function ($subscription) {
284 309 return OrderService::transformSubscription($subscription);
285 310 });
@@ -314,9 +339,11 @@
314 339 $transactions = OrderTransaction::query()
315 340 ->whereIn('order_id', $orderIds)
316 341 ->whereIn('status', [
317 342 Status::TRANSACTION_SUCCEEDED,
318 - Status::TRANSACTION_REFUNDED
343 + Status::TRANSACTION_REFUNDED,
344 + Status::TRANSACTION_FAILED,
345 + Status::TRANSACTION_PENDING,
319 346 ])
320 347 ->orderBy('id', 'DESC')
321 348 ->with(['order'])
322 349 ->get();
@@ -321,9 +348,15 @@
321 348 ->with(['order'])
322 349 ->get();
323 350
324 351 $formattedOrderData['transactions'] = $transactions->map(function ($transaction) {
325 - return OrderService::transformTransaction($transaction);
352 + $transformedTransaction = OrderService::transformTransaction($transaction);
353 + if ($transaction->status === Status::TRANSACTION_PENDING
354 + && !empty($transformedTransaction['custom_checkout_url'])
355 + ) {
356 + $transformedTransaction['show_pay_now'] = true;
357 + }
358 + return $transformedTransaction;
326 359 });
327 360
328 361 $formattedOrderData = apply_filters('fluent_cart/customer/order_data', $formattedOrderData, [
329 362 'order' => $order,
@@ -397,8 +430,16 @@
397 430 {
398 431 if (!intval($order->total_amount - $order->total_paid)) {
399 432 return false;
400 433 }
434 +
435 + if ($order->parent_id) {
436 + $subscription = Subscription::query()->where('parent_order_id', $order->parent_id)->first();
437 + if ($subscription && $subscription->isSystem() && !SystemChargeService::isExhausted($subscription, $order)) {
438 + return false;
439 + }
440 + }
441 +
401 442 return PaymentHelper::getCustomPaymentLink($order->uuid);
402 443 }
403 444
404 445 public function getTransactionBillingAddress(Request $request, $transaction_uuid)