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 +49 -7 1.5.3 → 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,
@@ -258,8 +283,9 @@
258 283 'total_amount' => $order->total_amount,
259 284 'total_paid' => $order->total_paid,
260 285 'total_refund' => $order->total_refund,
261 286 'shipping_total' => $order->shipping_total,
287 + 'shipping_method_title' => (string) Arr::get($order->config, 'shipping_method_title', ''),
262 288 'coupon_discount_total' => $order->coupon_discount_total,
263 289 'manual_discount_total' => $order->manual_discount_total,
264 290 'prorate_credit' => (int) Arr::get($order->config, 'prorate_credit', 0),
265 291 'tax_total' => $order->tax_total,
@@ -276,9 +302,9 @@
276 302 ];
277 303
278 304 $formattedOrderData['subscriptions'] = $order->subscriptions
279 305 ->filter(function ($subscription) {
280 - return !in_array($subscription->status, [Status::SUBSCRIPTION_PENDING, Status::SUBSCRIPTION_INTENDED]);
306 + return $subscription->isVisibleToCustomer();
281 307 })
282 308 ->map(function ($subscription) {
283 309 return OrderService::transformSubscription($subscription);
284 310 });
@@ -313,9 +339,11 @@
313 339 $transactions = OrderTransaction::query()
314 340 ->whereIn('order_id', $orderIds)
315 341 ->whereIn('status', [
316 342 Status::TRANSACTION_SUCCEEDED,
317 - Status::TRANSACTION_REFUNDED
343 + Status::TRANSACTION_REFUNDED,
344 + Status::TRANSACTION_FAILED,
345 + Status::TRANSACTION_PENDING,
318 346 ])
319 347 ->orderBy('id', 'DESC')
320 348 ->with(['order'])
321 349 ->get();
@@ -320,9 +348,15 @@
320 348 ->with(['order'])
321 349 ->get();
322 350
323 351 $formattedOrderData['transactions'] = $transactions->map(function ($transaction) {
324 - 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;
325 359 });
326 360
327 361 $formattedOrderData = apply_filters('fluent_cart/customer/order_data', $formattedOrderData, [
328 362 'order' => $order,
@@ -396,8 +430,16 @@
396 430 {
397 431 if (!intval($order->total_amount - $order->total_paid)) {
398 432 return false;
399 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 +
400 442 return PaymentHelper::getCustomPaymentLink($order->uuid);
401 443 }
402 444
403 445 public function getTransactionBillingAddress(Request $request, $transaction_uuid)