PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.6.5
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.6.5
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 1.3.19 All 49 releases
← All changes | app/Http/Controllers/FrontendControllers/CustomerOrderController.php +50 -7 1.5.0 → 1.6.5 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,11 +62,11 @@
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 - $query->select('id', 'order_id', 'object_id', 'post_title', 'title', 'quantity', 'payment_type', 'line_meta');
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)
71 71 ->where(function ($query) {
72 72 $query
@@ -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,
@@ -93,8 +94,9 @@
93 94 return [
94 95 'id' => $item->id,
95 96 'post_title' => $item->post_title,
96 97 'title' => $item->title,
98 + 'variation_display_title' => $item->variation_display_title,
97 99 'quantity' => $item->quantity,
98 100 'payment_type' => $item->payment_type,
99 101 'line_meta' => [
100 102 'bundle_parent_item_id' => Arr::get($item, 'line_meta.bundle_parent_item_id', null),
@@ -214,8 +216,9 @@
214 216 'variation_id' => $item->object_id,
215 217 'product_id' => $item->post_id,
216 218 'post_title' => $item->post_title,
217 219 'title' => $item->title,
220 + 'variation_display_title' => $item->variation_display_title,
218 221 'quantity' => $item->quantity,
219 222 'unit_price' => $item->unit_price,
220 223 'subtotal' => $item->subtotal,
221 224 'payment_type' => $item->payment_type,
@@ -235,12 +238,35 @@
235 238 $variationIds[] = $item->object_id;
236 239 $productIds[] = $item->post_id;
237 240 }
238 241
242 + $upgradableVariationIds = [];
243 + $isUpgradeEligibleOrder = in_array($order->payment_status, [
244 + Status::PAYMENT_PAID,
245 + Status::PAYMENT_PARTIALLY_PAID,
246 + Status::PAYMENT_PARTIALLY_REFUNDED
247 + ]);
248 +
249 + if ($isUpgradeEligibleOrder && $variationIds) {
250 + $upgradableVariationIds = Meta::query()
251 + ->where('meta_key', 'variant_upgrade_path')
252 + ->where('object_type', 'variant_upgrade')
253 + ->whereIn('object_id', $variationIds)
254 + ->pluck('object_id')
255 + ->toArray();
256 + }
257 +
258 + foreach ($orderItems as &$orderItem) {
259 + $orderItem['has_upgrade_paths'] = Arr::get($orderItem, 'payment_type') === 'onetime'
260 + && !Arr::get($orderItem, 'line_meta.parent_item_id')
261 + && in_array(Arr::get($orderItem, 'variation_id'), $upgradableVariationIds);
262 + }
263 + unset($orderItem);
264 +
239 265 $formattedOrderData = [
240 266 'fulfillment_type' => $order->fulfillment_type,
241 267 'type' => $order->type,
242 - 'created_at' => DateTime::gmtToTimezone($order->created_at, Arr::get($order->config, 'user_tz', wp_timezone_string()))->format('Y-m-d H:i:s'),
268 + 'created_at' => $order->created_at->format('Y-m-d H:i:s'),
243 269 'invoice_no' => $order->invoice_no,
244 270 'currency' => $order->currency,
245 271 'uuid' => $order->uuid,
246 272 'order_items' => $orderItems,
@@ -256,8 +282,9 @@
256 282 'total_amount' => $order->total_amount,
257 283 'total_paid' => $order->total_paid,
258 284 'total_refund' => $order->total_refund,
259 285 'shipping_total' => $order->shipping_total,
286 + 'shipping_method_title' => (string) Arr::get($order->config, 'shipping_method_title', ''),
260 287 'coupon_discount_total' => $order->coupon_discount_total,
261 288 'manual_discount_total' => $order->manual_discount_total,
262 289 'prorate_credit' => (int) Arr::get($order->config, 'prorate_credit', 0),
263 290 'tax_total' => $order->tax_total,
@@ -311,9 +338,11 @@
311 338 $transactions = OrderTransaction::query()
312 339 ->whereIn('order_id', $orderIds)
313 340 ->whereIn('status', [
314 341 Status::TRANSACTION_SUCCEEDED,
315 - Status::TRANSACTION_REFUNDED
342 + Status::TRANSACTION_REFUNDED,
343 + Status::TRANSACTION_FAILED,
344 + Status::TRANSACTION_PENDING,
316 345 ])
317 346 ->orderBy('id', 'DESC')
318 347 ->with(['order'])
319 348 ->get();
@@ -318,9 +347,15 @@
318 347 ->with(['order'])
319 348 ->get();
320 349
321 350 $formattedOrderData['transactions'] = $transactions->map(function ($transaction) {
322 - return OrderService::transformTransaction($transaction);
351 + $transformedTransaction = OrderService::transformTransaction($transaction);
352 + if ($transaction->status === Status::TRANSACTION_PENDING
353 + && !empty($transformedTransaction['custom_checkout_url'])
354 + ) {
355 + $transformedTransaction['show_pay_now'] = true;
356 + }
357 + return $transformedTransaction;
323 358 });
324 359
325 360 $formattedOrderData = apply_filters('fluent_cart/customer/order_data', $formattedOrderData, [
326 361 'order' => $order,
@@ -394,8 +429,16 @@
394 429 {
395 430 if (!intval($order->total_amount - $order->total_paid)) {
396 431 return false;
397 432 }
433 +
434 + if ($order->parent_id) {
435 + $subscription = Subscription::query()->where('parent_order_id', $order->parent_id)->first();
436 + if ($subscription && $subscription->isSystem() && !SystemChargeService::isExhausted($subscription, $order)) {
437 + return false;
438 + }
439 + }
440 +
398 441 return PaymentHelper::getCustomPaymentLink($order->uuid);
399 442 }
400 443
401 444 public function getTransactionBillingAddress(Request $request, $transaction_uuid)