menerapkan harga promo
This commit is contained in:
parent
33f1cd84c1
commit
ef86fd79e5
|
@ -216,7 +216,6 @@ public static function table(Table $table): Table
|
|||
->color(fn (string $state): string => match (strtolower($state)) {
|
||||
'full' => 'success',
|
||||
'dp' => 'danger',
|
||||
default => 'secondary',
|
||||
}),
|
||||
|
||||
Tables\Columns\TextColumn::make('metode_pembayaran')
|
||||
|
|
|
@ -17,6 +17,9 @@ class BookingPage extends Component
|
|||
public $tipe_pembayaran = '';
|
||||
public $bookedTimes = [];
|
||||
public $unavailableTimes = [];
|
||||
public $promoApplied = false;
|
||||
public $promoDiscount = 0;
|
||||
public $promoData = null;
|
||||
|
||||
public function mount($id = null)
|
||||
{
|
||||
|
@ -80,6 +83,45 @@ public function getBookedTimesProperty()
|
|||
return $this->bookedTimes;
|
||||
}
|
||||
|
||||
public function applyPromo()
|
||||
{
|
||||
$this->promoApplied = false;
|
||||
$this->promoDiscount = 0;
|
||||
$this->promoData = null;
|
||||
|
||||
if (empty($this->promo)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$promo = \App\Models\Promo::where('kode', $this->promo)
|
||||
->where('aktif', true)
|
||||
->first();
|
||||
|
||||
if (!$promo) {
|
||||
$this->addError('promo', 'Kode promo tidak valid');
|
||||
return;
|
||||
}
|
||||
|
||||
$this->promoData = $promo;
|
||||
$this->promoApplied = true;
|
||||
|
||||
// Hitung diskon berdasarkan tipe promo
|
||||
if ($promo->tipe === 'fix') {
|
||||
$this->promoDiscount = $promo->diskon;
|
||||
} else if ($promo->tipe === 'persen') {
|
||||
$this->promoDiscount = ($this->paketfoto->harga_paket_foto * $promo->diskon) / 100;
|
||||
}
|
||||
}
|
||||
|
||||
public function getTotalPriceProperty()
|
||||
{
|
||||
$total = $this->paketfoto->harga_paket_foto;
|
||||
if ($this->promoApplied) {
|
||||
$total -= $this->promoDiscount;
|
||||
}
|
||||
return max(0, $total); // Pastikan total tidak negatif
|
||||
}
|
||||
|
||||
public function placeOrder()
|
||||
{
|
||||
$this->validate([
|
||||
|
@ -111,8 +153,8 @@ public function placeOrder()
|
|||
'nama' => $this->nama,
|
||||
'tanggal' => $this->tanggal,
|
||||
'waktu' => $this->waktu,
|
||||
'promo_id' => null, // Logika promo bisa ditambahkan di sini
|
||||
'total' => $this->paketfoto->harga_paket_foto,
|
||||
'promo_id' => $this->promoData ? $this->promoData->id : null,
|
||||
'total' => $this->totalPrice,
|
||||
'tipe_pembayaran' => $this->tipe_pembayaran,
|
||||
'metode_pembayaran' => 'transfer', // Default transfer, bisa diubah sesuai pilihan
|
||||
]);
|
||||
|
@ -123,7 +165,7 @@ public function placeOrder()
|
|||
'warna' => $this->warna,
|
||||
'jumlah' => 1,
|
||||
'harga' => $this->paketfoto->harga_paket_foto,
|
||||
'total_harga' => $this->paketfoto->harga_paket_foto,
|
||||
'total_harga' => $this->totalPrice,
|
||||
]);
|
||||
|
||||
// Tampilkan pesan sukses dan redirect
|
||||
|
|
|
@ -17,7 +17,7 @@ public function mount($id = null)
|
|||
}
|
||||
|
||||
// Ambil booking berdasarkan ID jika ada, jika tidak ambil yang terakhir
|
||||
$this->booking = Reservasii::with(['user', 'detail.paketFoto'])
|
||||
$this->booking = Reservasii::with(['user', 'detail.paketFoto', 'promo'])
|
||||
->where('user_id', auth()->id())
|
||||
->when($id, function($query) use ($id) {
|
||||
return $query->where('id', $id);
|
||||
|
|
|
@ -89,9 +89,15 @@ class="{{ $isUnavailable ? 'text-gray-400 bg-gray-100' : '' }}"
|
|||
Kode Promo (jika ada)
|
||||
</label>
|
||||
<div class="flex gap-2">
|
||||
<input wire:model="promo" class="w-full rounded-lg border py-2 px-3 dark:bg-gray-700 dark:text-white dark:border-none " id="promo" type="text" placeholder="Masukkan kode promo">
|
||||
<button type="button" class="bg-blue-500 text-white px-4 py-2 rounded-lg hover:bg-blue-600">Terapkan</button>
|
||||
<input wire:model="promo" class="w-full rounded-lg border py-2 px-3 dark:bg-gray-700 dark:text-white dark:border-none @error('promo') border-red-500 @enderror" id="promo" type="text" placeholder="Masukkan kode promo">
|
||||
<button type="button" wire:click="applyPromo" class="bg-blue-500 text-white px-4 py-2 rounded-lg hover:bg-blue-600">Terapkan</button>
|
||||
</div>
|
||||
@error('promo')
|
||||
<div class="text-red-500 text-sm">{{ $message }}</div>
|
||||
@enderror
|
||||
@if($promoApplied)
|
||||
<div class="text-green-500 text-sm mt-1">Promo berhasil diterapkan!</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -210,25 +216,23 @@ class="{{ $isUnavailable ? 'text-gray-400 bg-gray-100' : '' }}"
|
|||
@endif
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex justify-between mb-2 font-bold">
|
||||
@if($promoApplied)
|
||||
<div class="flex justify-between mb-2">
|
||||
<span>
|
||||
Potongan
|
||||
Potongan Promo
|
||||
</span>
|
||||
<span>
|
||||
{{ Number::currency(0, 'IDR') }}
|
||||
<span class="text-green-500">
|
||||
- {{ Number::currency($promoDiscount, 'IDR') }}
|
||||
</span>
|
||||
</div>
|
||||
@endif
|
||||
<hr class="bg-slate-400 my-4 h-1 rounded">
|
||||
<div class="flex justify-between mb-2 font-bold">
|
||||
<span>
|
||||
Grand Total
|
||||
</span>
|
||||
<span>
|
||||
@if($paketfoto)
|
||||
{{ Number::currency($paketfoto->harga_paket_foto, 'IDR') }}
|
||||
@else
|
||||
{{ Number::currency(0, 'IDR') }}
|
||||
@endif
|
||||
{{ Number::currency($this->totalPrice, 'IDR') }}
|
||||
</span>
|
||||
</div>
|
||||
</hr>
|
||||
|
|
|
@ -56,13 +56,19 @@
|
|||
@foreach($booking->detail as $detail)
|
||||
<div class="flex justify-between w-full">
|
||||
<p class="text-base leading-4 text-gray-800 dark:text-gray-400">{{ $detail->paketFoto->nama_paket_foto }}</p>
|
||||
<p class="text-base leading-4 text-gray-600 dark:text-gray-400">Rp {{ number_format($detail->total_harga, 0, ',', '.') }}</p>
|
||||
<p class="text-base leading-4 text-gray-600 dark:text-gray-400">Rp {{ number_format($detail->harga, 0, ',', '.') }}</p>
|
||||
</div>
|
||||
<div class="flex justify-between w-full">
|
||||
<p class="text-base leading-4 text-gray-800 dark:text-gray-400">Background: {{ ucfirst($detail->warna) }}</p>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@if($booking->promo)
|
||||
<div class="flex items-center justify-between w-full">
|
||||
<p class="text-base leading-4 text-gray-800 dark:text-gray-400">Promo: {{ $booking->promo->kode }}</p>
|
||||
<p class="text-base leading-4 text-green-600 dark:text-green-400">- Rp {{ number_format($booking->detail->sum('harga') - $booking->total, 0, ',', '.') }}</p>
|
||||
</div>
|
||||
@endif
|
||||
<div class="flex items-center justify-between w-full">
|
||||
<p class="text-base font-semibold leading-4 text-gray-800 dark:text-gray-400">Total</p>
|
||||
<p class="text-base font-semibold leading-4 text-gray-600 dark:text-gray-400">Rp {{ number_format($booking->total, 0, ',', '.') }}</p>
|
||||
|
|
Loading…
Reference in New Issue