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', [
|
return view('pages.admin.manage.transaction.index', [
|
||||||
'pageTitle' => 'Transaksi',
|
'pageTitle' => 'Transaksi',
|
||||||
'transactions' => Transaction::with(['user', 'user.biography'])
|
'transactions' => Transaction::with(['user', 'user.biography', 'cashier', 'cashier.biography', 'customer', 'service', 'barbershop'])
|
||||||
->barbershop()
|
->barbershop()
|
||||||
->when(auth()->user()->role_id === 5, function ($query) {
|
->when(auth()->user()->role_id === 5, function ($query) {
|
||||||
return $query->where('user_id', auth()->id());
|
return $query->where('user_id', auth()->id());
|
||||||
@ -63,9 +63,9 @@ public function store(TransactionRequest $request): View
|
|||||||
'name' => $validatedData['customer'],
|
'name' => $validatedData['customer'],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$newTransaction = Transaction::create(array_merge($validatedData, [
|
$newTransaction = Transaction::create(array_merge($validatedData, [
|
||||||
'user_id' => $validatedData['barber'],
|
'user_id' => $validatedData['barber'],
|
||||||
|
'cashier_id' => $userId,
|
||||||
'barbershop_id' => $barbershopId,
|
'barbershop_id' => $barbershopId,
|
||||||
'service_id' => $validatedData['service'],
|
'service_id' => $validatedData['service'],
|
||||||
'customer_id' => $customer ? $customer->id : $validatedData['customer'],
|
'customer_id' => $customer ? $customer->id : $validatedData['customer'],
|
||||||
@ -77,18 +77,20 @@ public function store(TransactionRequest $request): View
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (! $newTransaction) {
|
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');
|
notify()->success('Data berhasil ditambahkan', 'Berhasil');
|
||||||
|
|
||||||
return view('pages.admin.manage.transaction.print', [
|
return view('pages.admin.manage.transaction.print', [
|
||||||
'transaction' => $transactionData,
|
'transaction' => $transactionData,
|
||||||
'url' => route('manage.transactions'),
|
'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);
|
], 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', [
|
return view('pages.admin.manage.transaction.print', [
|
||||||
'transaction' => $transaction->load(['user', 'user.biography', 'customer', 'service', 'barbershop']),
|
'transaction' => $transaction->load(['user', 'user.biography', 'customer', 'service', 'barbershop']),
|
||||||
'url' => route('manage.transactions'),
|
'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
|
public function rules(): array
|
||||||
{
|
{
|
||||||
return [
|
if (! $this->route()->named('manage.transaction.print')) {
|
||||||
'barber' => ['required', Rule::exists('users', 'id')],
|
$rules = [
|
||||||
'service' => ['required', Rule::exists('services', 'id')],
|
'barber' => ['required', Rule::exists('users', 'id')],
|
||||||
'customer' => ['required'],
|
'service' => ['required', Rule::exists('services', 'id')],
|
||||||
'price' => ['required', 'numeric', 'min:0', 'max:999999.99'],
|
'customer' => ['required'],
|
||||||
'discount' => ['required', 'numeric', 'min:0', 'max:999999.99'],
|
'price' => ['required', 'numeric', 'min:0', 'max:999999.99'],
|
||||||
'total' => ['required', 'numeric', 'min:0', 'max:999999.99'],
|
'discount' => ['required', 'numeric', 'min:0', 'max:999999.99'],
|
||||||
'image' => ['nullable', 'image', 'mimes:jpeg,png,jpg,gif,svg', 'max:2048'],
|
'total' => ['required', 'numeric', 'min:0', 'max:999999.99'],
|
||||||
'payment_method' => ['required', Rule::in(['1', '2', '3'])],
|
'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
|
protected function failedValidation(Validator $validator): void
|
||||||
|
|||||||
@ -34,4 +34,17 @@ $(document).ready(function () {
|
|||||||
$('#discount').on('input', function () {
|
$('#discount').on('input', function () {
|
||||||
calculateTotal();
|
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>
|
</div>
|
||||||
@enderror
|
@enderror
|
||||||
</div>
|
</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>
|
<label class="form-label" for="payment_method">Metode Pembayaran</label>
|
||||||
<div class="form-check radio ps-0">
|
<div class="form-check radio ps-0">
|
||||||
<ul class="radio-wrapper">
|
<ul class="radio-wrapper">
|
||||||
@ -147,6 +147,58 @@
|
|||||||
</div>
|
</div>
|
||||||
@enderror
|
@enderror
|
||||||
</div>
|
</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">
|
<div class="col-12">
|
||||||
<button class="btn btn-primary button-disable" type="submit">Simpan</button>
|
<button class="btn btn-primary button-disable" type="submit">Simpan</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -20,6 +20,7 @@
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>No</th>
|
<th>No</th>
|
||||||
|
<th>Kasir</th>
|
||||||
<th>Barber</th>
|
<th>Barber</th>
|
||||||
<th>Pelanggan</th>
|
<th>Pelanggan</th>
|
||||||
<th>Layanan</th>
|
<th>Layanan</th>
|
||||||
@ -38,6 +39,7 @@
|
|||||||
@foreach ($transactions as $transaction)
|
@foreach ($transactions as $transaction)
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $loop->iteration }}</td>
|
<td>{{ $loop->iteration }}</td>
|
||||||
|
<td>{{ $transaction->cashier->biography->full_name ?? '-deleted-' }}</td>
|
||||||
<td>{{ $transaction->user->biography->full_name ?? '-deleted-' }}</td>
|
<td>{{ $transaction->user->biography->full_name ?? '-deleted-' }}</td>
|
||||||
<td>{{ $transaction->customer->name }}</td>
|
<td>{{ $transaction->customer->name }}</td>
|
||||||
<td>{{ $transaction->service->name }}</td>
|
<td>{{ $transaction->service->name }}</td>
|
||||||
@ -74,9 +76,12 @@
|
|||||||
<td>
|
<td>
|
||||||
<ul class="action">
|
<ul class="action">
|
||||||
<li class="show">
|
<li class="show">
|
||||||
<a href="{{ route('manage.transaction.print', encryptId($transaction->id)) }}"
|
<a href="javascript:void(0)" data-bs-toggle="modal"
|
||||||
data-bs-toggle="tooltip" data-bs-placement="left"
|
data-bs-target="#createModal"
|
||||||
data-bs-title="Print" target="_blank">
|
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>
|
<i data-feather="printer"></i>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@ -114,6 +119,80 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</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>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
@section('afterScripts')
|
@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/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="{{ asset('assets/js/interactions/confirmation.js?ver=1.0.0') }}"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></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
|
@endsection
|
||||||
|
|||||||
@ -152,16 +152,28 @@
|
|||||||
<div class="invoice-details">
|
<div class="invoice-details">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width: 30%">Tanggal:</th>
|
<th style="width: 30%">Tanggal</th>
|
||||||
<td>{{ date('Y-m-d H:i') }}</td>
|
<td>: {{ date('Y-m-d H:i') }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Invoice:</th>
|
<th>Invoice:</th>
|
||||||
<td>#INV{{ $transaction->id }}</td>
|
<td>: #INV{{ $transaction->id }}</td>
|
||||||
</tr>
|
</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>
|
<tr>
|
||||||
<th>Pelanggan:</th>
|
<th>Pelanggan:</th>
|
||||||
<td>{{ $transaction->customer->name ?? '-' }}</td>
|
<td>: {{ $transaction->customer->name ?? '-' }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
@ -197,11 +209,13 @@
|
|||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
window.onload = function() {
|
window.onload = function() {
|
||||||
window.print();
|
|
||||||
window.onafterprint = function() {
|
window.onafterprint = function() {
|
||||||
window.location.href = "{{ $url }}";
|
setTimeout(() => {
|
||||||
|
window.location.href = "{{ $url }}";
|
||||||
|
}, 3000);
|
||||||
};
|
};
|
||||||
}
|
window.print();
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
|||||||
@ -145,7 +145,7 @@
|
|||||||
Route::get('edit/{transaction}', [TransactionController::class, 'edit'])->name('manage.transaction.edit');
|
Route::get('edit/{transaction}', [TransactionController::class, 'edit'])->name('manage.transaction.edit');
|
||||||
Route::put('update/{transaction}', [TransactionController::class, 'update'])->name('manage.transaction.update');
|
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('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');
|
Route::delete('delete/{transaction}', [TransactionController::class, 'delete'])->name('manage.transaction.delete')->middleware('check_role:1');
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user