refactor(order): menambahkan beberapa counting data untuk top member
This commit is contained in:
parent
a44eef2c7a
commit
09e63a9463
@ -3,6 +3,9 @@
|
||||
namespace App\Livewire\Studio\Loyalty;
|
||||
|
||||
use App\Livewire\Forms\Studio\Loyalty\TierForm;
|
||||
use App\Models\Bottle;
|
||||
use App\Models\Perfume;
|
||||
use App\Models\Product;
|
||||
use App\Models\Tier as TierModel;
|
||||
use App\Traits\WithAuthorization;
|
||||
use App\Traits\WithCloseModal;
|
||||
@ -29,13 +32,13 @@ class Tier extends Component
|
||||
|
||||
public function mount()
|
||||
{
|
||||
$this->tiers = TierModel::with(['memberships.user.customer.orders.items', 'memberships.user.customer.orders.payments'])
|
||||
$this->tiers = TierModel::with(['memberships.user.customer.orders.items'])
|
||||
->withCount('memberships')
|
||||
->orderBy('min_points', 'asc')
|
||||
->get()
|
||||
->map(function ($tier) {
|
||||
$topMembership = $tier->memberships()
|
||||
->with(['user.customer.orders.items', 'user.customer.orders.payments'])
|
||||
->with(['user.customer.orders.items'])
|
||||
->orderByDesc('tier_points')
|
||||
->first();
|
||||
|
||||
@ -44,15 +47,31 @@ public function mount()
|
||||
$orders = $topMembership->user->customer->orders;
|
||||
|
||||
$totalOrders = $orders->count();
|
||||
$totalItems = $orders->flatMap(fn ($order) => $order->items)->sum('quantity');
|
||||
$totalAmount = $orders->flatMap(fn ($order) => $order->payments)->sum('amount');
|
||||
|
||||
// Sum items
|
||||
$totalPerfume = $orders->flatMap(fn ($order) => $order->items->where('orderable_type', Perfume::class))->sum('quantity');
|
||||
$totalProduct = $orders->flatMap(fn ($order) => $order->items->where('orderable_type', Product::class))->sum('quantity');
|
||||
$totalBottle = $orders->flatMap(fn ($order) => $order->items->where('orderable_type', Bottle::class))->sum('quantity');
|
||||
|
||||
// Sum total
|
||||
$subtotal = $orders->sum('subtotal');
|
||||
$totalDiscount = $orders->sum('discount');
|
||||
$grandTotal = $orders->sum('total');
|
||||
|
||||
$topMemberStats = [
|
||||
'name' => $topMembership->user->customer->name,
|
||||
'points' => currency($topMembership->tier_points),
|
||||
'total_orders' => currency($totalOrders),
|
||||
'total_items' => currency($totalItems),
|
||||
'total_amount' => currency($totalAmount),
|
||||
'items' => [
|
||||
'total_perfume' => currency($totalPerfume),
|
||||
'total_product' => currency($totalProduct),
|
||||
'total_bottle' => currency($totalBottle),
|
||||
],
|
||||
'total' => [
|
||||
'subtotal' => currency($subtotal, 'Rp'),
|
||||
'discount' => currency($totalDiscount, 'Rp'),
|
||||
'grand_total' => currency($grandTotal, 'Rp'),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@ -57,16 +57,32 @@ class="mt-1 flex items-center justify-between bg-gradient-to-r from-emerald-400
|
||||
class="mt-2 bg-white dark:bg-gray-800 rounded-lg shadow p-4 text-gray-700 dark:text-gray-300">
|
||||
<h4 class="font-semibold mb-2">Statistik Order</h4>
|
||||
<div class="flex justify-between text-sm">
|
||||
<span>Total Order:</span>
|
||||
<span>Order:</span>
|
||||
<span>{{ $tier['top_member']['total_orders'] }}x</span>
|
||||
</div>
|
||||
<div class="flex justify-between text-sm mt-1">
|
||||
<span>Total Item Yang Dibeli:</span>
|
||||
<span>{{ $tier['top_member']['total_items'] }}</span>
|
||||
<span>Parfum Yang Dibeli:</span>
|
||||
<span>{{ $tier['top_member']['items']['total_perfume'] }} ml</span>
|
||||
</div>
|
||||
<div class="flex justify-between text-sm mt-1">
|
||||
<span>Total Pembayaran:</span>
|
||||
<span>{{ $tier['top_member']['total_amount'] }}</span>
|
||||
<span>Produk Yang Dibeli:</span>
|
||||
<span>{{ $tier['top_member']['items']['total_product'] }} pcs</span>
|
||||
</div>
|
||||
<div class="flex justify-between text-sm mt-1">
|
||||
<span>Botol Yang Dibeli:</span>
|
||||
<span>{{ $tier['top_member']['items']['total_bottle'] }} pcs</span>
|
||||
</div>
|
||||
<div class="flex justify-between text-sm mt-1">
|
||||
<span>Subtotal Belanja:</span>
|
||||
<span>{{ $tier['top_member']['total']['subtotal'] }}</span>
|
||||
</div>
|
||||
<div class="flex justify-between text-sm mt-1">
|
||||
<span>Diskon:</span>
|
||||
<span>{{ $tier['top_member']['total']['discount'] }}</span>
|
||||
</div>
|
||||
<div class="flex justify-between text-sm mt-1">
|
||||
<span>Total Belanja:</span>
|
||||
<span>{{ $tier['top_member']['total']['grand_total'] }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user