From 9d2bbbd2c81d09db46698d20676ad12cf643c84a Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Tue, 11 Nov 2025 00:40:33 +0700 Subject: [PATCH] feat(order): memperbaiki logika untuk menggunakan voucher - menambahkan kolom ordered_at - nullable kan kolom quantity di user_voucher --- app/Traits/Order/WithMember.php | 29 +++++---- .../2025_10_06_135045_create_orders_table.php | 1 + ...11_04_220210_create_user_voucher_table.php | 2 +- .../studio/manage/order/form.blade.php | 63 ++++++++++--------- 4 files changed, 52 insertions(+), 43 deletions(-) diff --git a/app/Traits/Order/WithMember.php b/app/Traits/Order/WithMember.php index e5f49a6..60cd31a 100644 --- a/app/Traits/Order/WithMember.php +++ b/app/Traits/Order/WithMember.php @@ -29,23 +29,30 @@ public function members() ->toArray(); } - public function updatedFormMemberId(?string $member_id = null) + public function updatedFormMemberId(?string $memberId = null) { - $customer = Customer::with('user')->find($member_id); - + $customer = Customer::with('user')->find($memberId); if (! $customer) { return; } - $memberId = $customer->user?->id; - $outletId = $this->form->outlet_id; + $this->loadVouchers($customer->user?->id, $this->form->outlet_id); + } - $this->vouchers = Voucher::whereHas('users', function ($q) use ($memberId) { - $q->where('user_id', $memberId); - }) - ->whereHas('outlets', function ($q) use ($outletId) { - $q->where('outlet_id', $outletId); - }) + public function updatedFormOutletId(?string $outletId = null) + { + $customer = Customer::with('user')->find($this->form->member_id); + if (! $customer) { + return; + } + + $this->loadVouchers($customer->user?->id, $outletId); + } + + private function loadVouchers(?string $memberId, ?string $outletId) + { + $this->vouchers = Voucher::whereHas('users', fn ($q) => $q->where('user_id', $memberId)) + ->whereHas('outlets', fn ($q) => $q->where('outlet_id', $outletId)) ->active() ->select('id', 'name', 'type', 'discount_amount', 'max_discount') ->orderByRaw(" diff --git a/database/migrations/2025_10_06_135045_create_orders_table.php b/database/migrations/2025_10_06_135045_create_orders_table.php index c23fc97..e3a6b23 100644 --- a/database/migrations/2025_10_06_135045_create_orders_table.php +++ b/database/migrations/2025_10_06_135045_create_orders_table.php @@ -26,6 +26,7 @@ public function up(): void $table->unsignedInteger('total'); $table->enum('channel', [OrderChannel::values()])->default(OrderChannel::OUTLET)->comment(OrderChannel::comment()); $table->enum('status', [OrderStatus::values()])->default(OrderStatus::PENDING)->comment(OrderStatus::comment()); + $table->dateTime('ordered_at'); $table->timestamp('created_at')->useCurrent(); $table->timestamp('updated_at')->nullable()->useCurrentOnUpdate(); $table->softDeletes(); diff --git a/database/migrations/2025_11_04_220210_create_user_voucher_table.php b/database/migrations/2025_11_04_220210_create_user_voucher_table.php index 673babf..67adda7 100644 --- a/database/migrations/2025_11_04_220210_create_user_voucher_table.php +++ b/database/migrations/2025_11_04_220210_create_user_voucher_table.php @@ -15,7 +15,7 @@ public function up(): void $table->id(); $table->foreignId('user_id')->constrained()->cascadeOnDelete(); $table->foreignId('voucher_id')->constrained()->cascadeOnDelete(); - $table->unsignedInteger('quantity'); + $table->unsignedInteger('quantity')->nullable(); $table->timestamp('created_at')->useCurrent(); $table->timestamp('updated_at')->nullable()->useCurrentOnUpdate(); }); diff --git a/resources/views/livewire/studio/manage/order/form.blade.php b/resources/views/livewire/studio/manage/order/form.blade.php index 76da8d9..1d7ce99 100644 --- a/resources/views/livewire/studio/manage/order/form.blade.php +++ b/resources/views/livewire/studio/manage/order/form.blade.php @@ -272,42 +272,43 @@ class="text-xs text-gray-400">{{ currency($item->quantity, '') }} - - - - Member - Silakan ketikkan nomor telepon. - - - - - @foreach ($this->members as $member) - - {{ $member['name'] }} - {{ $member['phone_number'] }} - - @endforeach - - - - - @if (!empty($vouchers)) + @if ($this->form->outlet_id !== '' && $items->isNotEmpty()) + - Voucher - Voucher diurutkan berdasarkan dengan diskon yang paling besar. - - - @foreach ($vouchers as $key => $name) - - {{ $name }} + Member + Silakan ketikkan nomor telepon. + + + + + @foreach ($this->members as $member) + + {{ $member['name'] }} - {{ $member['phone_number'] }} @endforeach - + - @endif - + + @if (!empty($vouchers)) + + Voucher + Voucher diurutkan berdasarkan dengan diskon yang paling besar. + + + @foreach ($vouchers as $key => $name) + + {{ $name }} + + @endforeach + + + + @endif + + @endif