feat : print saat input data

This commit is contained in:
Yoga Pangestu 2024-12-23 21:57:48 +07:00
parent 7dbaf4f5da
commit e8a7e7c279
7 changed files with 202 additions and 28 deletions

View File

@ -24,7 +24,7 @@ public function index(): View
{
return view('pages.admin.manage.transaction.index', [
'pageTitle' => 'Transaksi',
'transactions' => Transaction::with(['user', 'user.biography'])
'transactions' => Transaction::with(['user', 'user.biography', 'cashier', 'cashier.biography', 'customer', 'service', 'barbershop'])
->barbershop()
->when(auth()->user()->role_id === 5, function ($query) {
return $query->where('user_id', auth()->id());
@ -63,9 +63,9 @@ public function store(TransactionRequest $request): View
'name' => $validatedData['customer'],
]);
}
$newTransaction = Transaction::create(array_merge($validatedData, [
'user_id' => $validatedData['barber'],
'cashier_id' => $userId,
'barbershop_id' => $barbershopId,
'service_id' => $validatedData['service'],
'customer_id' => $customer ? $customer->id : $validatedData['customer'],
@ -77,18 +77,20 @@ public function store(TransactionRequest $request): View
});
if (! $newTransaction) {
notify()->error('Transaction could not be created', 'Error');
notify()->error('Transaksi tidak dapat dibuat, silakan coba lagi', 'Kesalahan');
return redirect()->back();
return redirect()->back()->withInput();
}
$transactionData = $newTransaction->load(['user', 'user.biography', 'customer', 'service', 'barbershop']);
$transactionData = $newTransaction->load(['user', 'user.biography', 'cashier', 'cashier.biography', 'customer', 'service', 'barbershop']);
notify()->success('Data berhasil ditambahkan', 'Berhasil');
return view('pages.admin.manage.transaction.print', [
'transaction' => $transactionData,
'url' => route('manage.transactions'),
'showingBarberName' => $validatedData['showing_barber_name'],
'showingCashierName' => $validatedData['showing_cashier_name'],
]);
}
@ -153,11 +155,15 @@ public function getPrice(string $serviceId): JsonResponse
], 200);
}
public function print(Transaction $transaction): View
public function print(Transaction $transaction, TransactionRequest $request): View
{
$validatedData = $request->validated();
return view('pages.admin.manage.transaction.print', [
'transaction' => $transaction->load(['user', 'user.biography', 'customer', 'service', 'barbershop']),
'url' => route('manage.transactions'),
'showingBarberName' => $validatedData['showing_barber_name'],
'showingCashierName' => $validatedData['showing_cashier_name'],
]);
}
}

View File

@ -28,7 +28,8 @@ protected function prepareForValidation(): void
public function rules(): array
{
return [
if (! $this->route()->named('manage.transaction.print')) {
$rules = [
'barber' => ['required', Rule::exists('users', 'id')],
'service' => ['required', Rule::exists('services', 'id')],
'customer' => ['required'],
@ -40,6 +41,14 @@ public function rules(): array
];
}
if ($this->isMethod('post') || $this->route()->named('manage.transaction.print')) {
$rules['showing_barber_name'] = ['required', Rule::in(['1', '2'])];
$rules['showing_cashier_name'] = ['required', Rule::in(['1', '2'])];
}
return $rules;
}
protected function failedValidation(Validator $validator): void
{
$this->handleValidationFailure($validator);

View File

@ -34,4 +34,17 @@ $(document).ready(function () {
$('#discount').on('input', function () {
calculateTotal();
});
$("#createModal").on("show.bs.modal", function (event) {
const button = $(event.relatedTarget);
const data = {
modalTitle: button.data("modal-title"),
url: button.data("url"),
method: button.data("method"),
};
$(".modal-title").text(data.modalTitle);
$("#form").attr('action', data.url);
$("#form-method").val(data.method);
});
});

View File

@ -114,7 +114,7 @@
</div>
@enderror
</div>
<div class="col-lg-12 position-relative">
<div class="col-lg-4 position-relative">
<label class="form-label" for="payment_method">Metode Pembayaran</label>
<div class="form-check radio ps-0">
<ul class="radio-wrapper">
@ -147,6 +147,58 @@
</div>
@enderror
</div>
<div class="col-lg-4 position-relative">
<label class="form-label" for="showing_barber_name">Munculkan Nama Barber</label>
<div class="form-check radio ps-0">
<ul class="radio-wrapper">
<li>
<input class="form-check-input" id="radio-yes" type="radio"
name="showing_barber_name" value="1" @checked(old('showing_barber_name') == '1')>
<label class="form-check-label" for="radio-yes">
Ya
</label>
</li>
<li>
<input class="form-check-input" id="radio-no" type="radio"
name="showing_barber_name" value="2" @checked(old('showing_barber_name') == '2')>
<label class="form-check-label" for="radio-no">
Tidak
</label>
</li>
</ul>
</div>
@error('showing_barber_name')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<div class="col-lg-4 position-relative">
<label class="form-label" for="showing_cashier_name">Munculkan Nama Kasir</label>
<div class="form-check radio ps-0">
<ul class="radio-wrapper">
<li>
<input class="form-check-input" id="radio-yes" type="radio"
name="showing_cashier_name" value="1" @checked(old('showing_cashier_name') == '1')>
<label class="form-check-label" for="radio-yes">
Ya
</label>
</li>
<li>
<input class="form-check-input" id="radio-no" type="radio"
name="showing_cashier_name" value="2" @checked(old('showing_cashier_name') == '2')>
<label class="form-check-label" for="radio-no">
Tidak
</label>
</li>
</ul>
</div>
@error('showing_cashier_name')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<div class="col-12">
<button class="btn btn-primary button-disable" type="submit">Simpan</button>
</div>

View File

@ -20,6 +20,7 @@
<thead>
<tr>
<th>No</th>
<th>Kasir</th>
<th>Barber</th>
<th>Pelanggan</th>
<th>Layanan</th>
@ -38,6 +39,7 @@
@foreach ($transactions as $transaction)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $transaction->cashier->biography->full_name ?? '-deleted-' }}</td>
<td>{{ $transaction->user->biography->full_name ?? '-deleted-' }}</td>
<td>{{ $transaction->customer->name }}</td>
<td>{{ $transaction->service->name }}</td>
@ -74,9 +76,12 @@
<td>
<ul class="action">
<li class="show">
<a href="{{ route('manage.transaction.print', encryptId($transaction->id)) }}"
data-bs-toggle="tooltip" data-bs-placement="left"
data-bs-title="Print" target="_blank">
<a href="javascript:void(0)" data-bs-toggle="modal"
data-bs-target="#createModal"
data-modal-title="Print Transaksi"
data-url="{{ route('manage.transaction.print', encryptId($transaction->id)) }}"
data-method="post" data-bs-toggle="tooltip"
data-bs-placement="left" data-bs-title="Print">
<i data-feather="printer"></i>
</a>
</li>
@ -114,6 +119,80 @@
</div>
</div>
</div>
<div class="modal fade" id="createModal" tabindex="-1" role="dialog" aria-labelledby="createModal"
aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"></h5>
<button class="btn-close py-0" type="button" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form class="row g-3 custom-input" method="post" id="form" enctype="multipart/form-data">
<input type="hidden" name="_method" id="form-method">
@csrf
<div class="col-lg-12 position-relative">
<label class="form-label" for="showing_barber_name">Munculkan Nama Barber</label>
<div class="form-check radio ps-0">
<ul class="radio-wrapper">
<li>
<input class="form-check-input" id="radio-yes" type="radio"
name="showing_barber_name" value="1" @checked(old('showing_barber_name') == '1')>
<label class="form-check-label" for="radio-yes">
Ya
</label>
</li>
<li>
<input class="form-check-input" id="radio-no" type="radio"
name="showing_barber_name" value="2" @checked(old('showing_barber_name') == '2')>
<label class="form-check-label" for="radio-no">
Tidak
</label>
</li>
</ul>
</div>
@error('showing_barber_name')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<div class="col-lg-12 position-relative">
<label class="form-label" for="showing_cashier_name">Munculkan Nama Kasir</label>
<div class="form-check radio ps-0">
<ul class="radio-wrapper">
<li>
<input class="form-check-input" id="radio-yes" type="radio"
name="showing_cashier_name" value="1" @checked(old('showing_cashier_name') == '1')>
<label class="form-check-label" for="radio-yes">
Ya
</label>
</li>
<li>
<input class="form-check-input" id="radio-no" type="radio"
name="showing_cashier_name" value="2" @checked(old('showing_cashier_name') == '2')>
<label class="form-check-label" for="radio-no">
Tidak
</label>
</li>
</ul>
</div>
@error('showing_cashier_name')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<div class="col-lg-12 position-relative">
<button class="btn btn-secondary" type="button" data-bs-dismiss="modal">Tutup</button>
<button class="btn btn-primary">Print</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('afterScripts')
@ -121,4 +200,5 @@
<script src="{{ asset('assets/admin/js/datatable/client-side.js?ver=1.0.0') }}"></script>
<script src="{{ asset('assets/js/interactions/confirmation.js?ver=1.0.0') }}"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script src="{{ asset('assets/admin/js/custom/transaction.js?ver=1.0.0') }}"></script>
@endsection

View File

@ -152,16 +152,28 @@
<div class="invoice-details">
<table>
<tr>
<th style="width: 30%">Tanggal:</th>
<td>{{ date('Y-m-d H:i') }}</td>
<th style="width: 30%">Tanggal</th>
<td>: {{ date('Y-m-d H:i') }}</td>
</tr>
<tr>
<th>Invoice:</th>
<td>#INV{{ $transaction->id }}</td>
<td>: #INV{{ $transaction->id }}</td>
</tr>
@if ($showingCashierName === '1')
<tr>
<th>Kasir:</th>
<td>: {{ $transaction->cashier->biography->full_name ?? '-' }}</td>
</tr>
@endif
@if ($showingBarberName === '1')
<tr>
<th>Barber:</th>
<td>: {{ $transaction->user->biography->full_name ?? '-' }}</td>
</tr>
@endif
<tr>
<th>Pelanggan:</th>
<td>{{ $transaction->customer->name ?? '-' }}</td>
<td>: {{ $transaction->customer->name ?? '-' }}</td>
</tr>
</table>
</div>
@ -197,11 +209,13 @@
</div>
<script>
window.onload = function() {
window.print();
window.onafterprint = function() {
setTimeout(() => {
window.location.href = "{{ $url }}";
}, 3000);
};
window.print();
};
}
</script>
</body>

View File

@ -145,7 +145,7 @@
Route::get('edit/{transaction}', [TransactionController::class, 'edit'])->name('manage.transaction.edit');
Route::put('update/{transaction}', [TransactionController::class, 'update'])->name('manage.transaction.update');
Route::get('get-price/{serviceId}', [TransactionController::class, 'getPrice'])->name('manage.transaction.getPrice');
Route::get('print/{transaction}', [TransactionController::class, 'print'])->name('manage.transaction.print');
Route::post('print/{transaction}', [TransactionController::class, 'print'])->name('manage.transaction.print');
});
Route::delete('delete/{transaction}', [TransactionController::class, 'delete'])->name('manage.transaction.delete')->middleware('check_role:1');
});