feat : print saat input data
This commit is contained in:
parent
7dbaf4f5da
commit
e8a7e7c279
@ -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'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -28,16 +28,25 @@ protected function prepareForValidation(): void
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'barber' => ['required', Rule::exists('users', 'id')],
|
||||
'service' => ['required', Rule::exists('services', 'id')],
|
||||
'customer' => ['required'],
|
||||
'price' => ['required', 'numeric', 'min:0', 'max:999999.99'],
|
||||
'discount' => ['required', 'numeric', 'min:0', 'max:999999.99'],
|
||||
'total' => ['required', 'numeric', 'min:0', 'max:999999.99'],
|
||||
'image' => ['nullable', 'image', 'mimes:jpeg,png,jpg,gif,svg', 'max:2048'],
|
||||
'payment_method' => ['required', Rule::in(['1', '2', '3'])],
|
||||
];
|
||||
if (! $this->route()->named('manage.transaction.print')) {
|
||||
$rules = [
|
||||
'barber' => ['required', Rule::exists('users', 'id')],
|
||||
'service' => ['required', Rule::exists('services', 'id')],
|
||||
'customer' => ['required'],
|
||||
'price' => ['required', 'numeric', 'min:0', 'max:999999.99'],
|
||||
'discount' => ['required', 'numeric', 'min:0', 'max:999999.99'],
|
||||
'total' => ['required', 'numeric', 'min:0', 'max:999999.99'],
|
||||
'image' => ['nullable', 'image', 'mimes:jpeg,png,jpg,gif,svg', 'max:2048'],
|
||||
'payment_method' => ['required', Rule::in(['1', '2', '3'])],
|
||||
];
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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() {
|
||||
window.location.href = "{{ $url }}";
|
||||
setTimeout(() => {
|
||||
window.location.href = "{{ $url }}";
|
||||
}, 3000);
|
||||
};
|
||||
}
|
||||
window.print();
|
||||
};
|
||||
</script>
|
||||
</body>
|
||||
|
||||
|
||||
@ -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');
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user