diff --git a/app/Http/Controllers/PesananController.php b/app/Http/Controllers/PesananController.php index 963a9be..47311bb 100644 --- a/app/Http/Controllers/PesananController.php +++ b/app/Http/Controllers/PesananController.php @@ -3,7 +3,9 @@ namespace App\Http\Controllers; use App\Models\Order; +use Carbon\Carbon; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; class PesananController extends Controller { @@ -24,6 +26,36 @@ class PesananController extends Controller return $data; } + public function actionOrder(Request $request, string $order_id){ + DB::connection('dbOrderGizi')->beginTransaction(); + try { + $order = Order::where('order_id', $order_id)->first(); + $action = $request->query('action'); + $payload = [ + 'pegawai_id_confirm_order' => auth()->user()->id, + 'pegawai_name_confirm_order' => auth()->user()->full_name, + 'pegawai_at_confirm_order' => Carbon::now(), + 'status_order' => $action ?? 'Dibatalkan', + ]; + if(!$action){ + $payload['note_dibatalkan'] = request('note_dibatalkan'); + } + $order->update($payload); + DB::connection('dbOrderGizi')->commit(); + return response()->json([ + 'status' => true, + 'message' => $action ? 'Konfirmasi Order Gizi telah disetujui!' : 'Konfirmasi Order Gizi telah dibatalkan' + ]); + } catch (\Throwable $th) { + DB::connection('dbOrderGizi')->rollBack(); + return response()->json([ + 'status' => false, + 'message' => 'Gagal melakukan Konfirmasi Order Gizi' + ]); + //throw $th; + } + } + /** * Show the form for creating a new resource. */ diff --git a/app/Models/Order.php b/app/Models/Order.php index 3e2ae75..0cd63a0 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -33,6 +33,7 @@ class Order extends Model 'tinggi_badan', 'berat_badan', 'ruang_perawatan', - 'bagian_instalasi' + 'bagian_instalasi', + 'note_dibatalkan' ]; } diff --git a/config/queue.php b/config/queue.php index 116bd8d..f022e81 100644 --- a/config/queue.php +++ b/config/queue.php @@ -86,7 +86,7 @@ return [ */ 'batching' => [ - 'database' => env('DB_CONNECTION', 'sqlite'), + 'database' => env('DB_CONNECTION_ORDER_GIZI', 'sqlite'), 'table' => 'job_batches', ], @@ -105,7 +105,7 @@ return [ 'failed' => [ 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), - 'database' => env('DB_CONNECTION', 'sqlite'), + 'database' => env('DB_CONNECTION_ORDER_GIZI', 'sqlite'), 'table' => 'failed_jobs', ], diff --git a/public/assets/css/demo.css b/public/assets/css/demo.css index b47f2e8..90d2ef6 100644 --- a/public/assets/css/demo.css +++ b/public/assets/css/demo.css @@ -120,3 +120,10 @@ background-color: #584ce0; } +.swal2-container { + z-index: 9999 !important; +} + +.swal2-backdrop-show { + z-index: 9998 !important; +} diff --git a/public/js/pesanan_pending/_init.js b/public/js/pesanan_pending/_init.js index 33fbb83..54470ed 100644 --- a/public/js/pesanan_pending/_init.js +++ b/public/js/pesanan_pending/_init.js @@ -1 +1,6 @@ const datatablePending = $("#datatablePesananPending") + +const modalActionOrder = document.getElementById("modalActionOrder") +const formActionOrder = $("#formActionOrder") +const containerCancel = document.getElementById("note_dibatalkan") +const noteCancelTextArea = document.getElementById("textarea_note_dibatalkan") diff --git a/public/js/pesanan_pending/action.js b/public/js/pesanan_pending/action.js new file mode 100644 index 0000000..580dc78 --- /dev/null +++ b/public/js/pesanan_pending/action.js @@ -0,0 +1,85 @@ +function approveOrder(e) { + const data = $(e).data(); + const form = document.getElementById('formActionOrder'); + const img = document.getElementById('imageConfirmActionOrder'); + $("#confirmActionOrder").text('Konfirmasi Pembayaran '+ data.nama_pemesan + ' / ' + data.no_order) + containerCancel.classList.add('d-none'); + // Set gambar bukti bayar + if (data.bukti_bayar) { + img.src = `/storage/${data.bukti_bayar}`; + img.classList.remove('d-none'); + } else { + img.classList.add('d-none'); + img.src = ''; + $("#tidak_ada_bukti_pembayaran").text('Pembayaran Menggunakan Billing') + } + + // Set action form + form.setAttribute('action', `/dashboard/pending/action/${data.order_id}?action=Lunas`); + + // Tampilkan modal + new bootstrap.Modal(modalActionOrder).show(); +} + +document.getElementById('formActionOrder').addEventListener('submit', function (e) { + e.preventDefault(); + + const form = this; + const actionUrl = form.getAttribute('action'); + const formData = new FormData(form); + + fetch(actionUrl, { + method: 'POST', + headers: { + 'X-CSRF-TOKEN': document.querySelector('input[name="_token"]').value, + }, + body: formData + }).then(async (res) => { + const data = await res.json(); + + if (res.status) { + const handler = function () { + Swal.fire({ + icon: 'success', + title: 'Berhasil', + text: data.message || 'Status berhasil diubah!', + timer: 2000, + showConfirmButton: false, + backdrop: true, + }); + + datatablePending.bootstrapTable('refresh'); + modalActionOrder.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM + }; + + modalActionOrder.addEventListener('hidden.bs.modal', handler); // ✅ pakai DOM + bootstrap.Modal.getInstance(modalActionOrder).hide(); // ✅ pakai instance + } else { + throw new Error(data.message || 'Terjadi kesalahan saat mengubah status.'); + } + }).catch(err => { + console.error(err); + Swal.fire({ + icon: 'error', + title: 'Gagal', + text: err.message || 'Terjadi kesalahan pada server.', + }); + }); +}); + + +function rejectOrder(e){ + document.getElementById('imageConfirmActionOrder').classList.add('d-none') + containerCancel.classList.remove('d-none'); + const data = $(e).data(); + new bootstrap.Modal(modalActionOrder).show(); + $("#confirmActionOrder").text('Batalkan Pembayaran '+ data.nama_pemesan + ' / ' + data.no_order) + formActionOrder.attr('action', `/dashboard/pending/action/${data.order_id}`); + $("#textarea_note_dibatalkan").val('') +} + + +noteCancelTextArea.addEventListener('input', function () { + this.style.height = 'auto'; // Reset height dulu + this.style.height = this.scrollHeight + 'px'; // Set height sesuai isi +}); diff --git a/public/js/pesanan_pending/dt.js b/public/js/pesanan_pending/dt.js index 3cf11a3..7fa4485 100644 --- a/public/js/pesanan_pending/dt.js +++ b/public/js/pesanan_pending/dt.js @@ -24,51 +24,49 @@ title: "Action", field:'order_id', formatter: function(value, row) { - const rowData = row; // jika butuh ID atau status dari baris - return ` -