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 +52 -8 1.5.0 → 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,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,36 @@
235 238 $variationIds[] = $item->object_id;
236 239 $productIds[] = $item->post_id;
237 240 }
238 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 +
239 266 $formattedOrderData = [
240 267 'fulfillment_type' => $order->fulfillment_type,
241 268 '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'),
269 + 'created_at' => $order->created_at->format('Y-m-d H:i:s'),
243 270 'invoice_no' => $order->invoice_no,
244 271 'currency' => $order->currency,
245 272 'uuid' => $order->uuid,
246 273 'order_items' => $orderItems,
@@ -256,8 +283,9 @@
256 283 'total_amount' => $order->total_amount,
257 284 'total_paid' => $order->total_paid,
258 285 'total_refund' => $order->total_refund,
259 286 'shipping_total' => $order->shipping_total,
287 + 'shipping_method_title' => (string) Arr::get($order->config, 'shipping_method_title', ''),
260 288 'coupon_discount_total' => $order->coupon_discount_total,
261 289 'manual_discount_total' => $order->manual_discount_total,
262 290 'prorate_credit' => (int) Arr::get($order->config, 'prorate_credit', 0),
263 291 'tax_total' => $order->tax_total,
@@ -274,9 +302,9 @@
274 302 ];
275 303
276 304 $formattedOrderData['subscriptions'] = $order->subscriptions
277 305 ->filter(function ($subscription) {
278 - return !in_array($subscription->status, [Status::SUBSCRIPTION_PENDING, Status::SUBSCRIPTION_INTENDED]);
306 + return $subscription->isVisibleToCustomer();
279 307 })
280 308 ->map(function ($subscription) {
281 309 return OrderService::transformSubscription($subscription);
282 310 });
@@ -311,9 +339,11 @@
311 339 $transactions = OrderTransaction::query()
312 340 ->whereIn('order_id', $orderIds)
313 341 ->whereIn('status', [
314 342 Status::TRANSACTION_SUCCEEDED,
315 - Status::TRANSACTION_REFUNDED
343 + Status::TRANSACTION_REFUNDED,
344 + Status::TRANSACTION_FAILED,
345 + Status::TRANSACTION_PENDING,
316 346 ])
317 347 ->orderBy('id', 'DESC')
318 348 ->with(['order'])
319 349 ->get();
@@ -318,9 +348,15 @@
318 348 ->with(['order'])
319 349 ->get();
320 350
321 351 $formattedOrderData['transactions'] = $transactions->map(function ($transaction) {
322 - 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;
323 359 });
324 360
325 361 $formattedOrderData = apply_filters('fluent_cart/customer/order_data', $formattedOrderData, [
326 362 'order' => $order,
@@ -394,8 +430,16 @@
394 430 {
395 431 if (!intval($order->total_amount - $order->total_paid)) {
396 432 return false;
397 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 +
398 442 return PaymentHelper::getCustomPaymentLink($order->uuid);
399 443 }
400 444
401 445 public function getTransactionBillingAddress(Request $request, $transaction_uuid)