Transaction::where('pembeli', Auth::user()->email) // ->orderByRaw("CASE WHEN status = 'pending' THEN 1 WHEN status = 'Finished' THEN 2 WHEN status = 'Rejected' THEN 3 ELSE 4 END ASC") ->latest() ->get(), ]); } /** * Display a listing of the resource. */ public function indexPenjual() { return view('user.transaction.penjual.index', [ 'transactions' => Transaction::where('penjual', Auth::user()->email) // ->orderByRaw("CASE WHEN status = 'Progress' THEN 1 WHEN status = 'Finished' THEN 2 WHEN status = 'Rejected' THEN 3 ELSE 4 END ASC") ->latest() ->get(), ]); } public function show($id) { return view('user.transaction.pembeli.detail-transaction', [ 'transaction' => Transaction::findOrFail($id), 'trackings' => TransactionDescription::where('order_id', $id) ->latest() ->get(), ]); } /** * Show the form for creating a new resource. */ public function create() { $now = Carbon::now(); $bulan = $now->format('F'); $tahun = $now->year; $persentase_keuntungan = Setting::where('status', 'Active') ->where('bulan', '=', $bulan) ->where('tahun', '=', $tahun) ->value('persentase'); if (is_null($persentase_keuntungan)) { $persentase_keuntungan = Setting::where('status', 'Active') ->latest() ->value('persentase'); } return view('user.transaction.pembeli.new-transaction', [ 'persentase_keuntungan' => $persentase_keuntungan, ]); } /** * Store a newly created resource in storage. */ public function invoiceTransaction($id) { return view('user.transaction.pembeli.invoice-transaction', [ 'TransactionUser' => TransactionUser::HistoryTransaction(), ]); } public function store(Request $request) { $pembeli = Auth::user()->email; $penjual = $request->get('email_penjual'); $nama_barang = $request->get('nama_barang'); $satuan_barang = $request->get('satuan_barang'); $deskripsi_transaksi = $request->get('deskripsi'); $harga_barang = $request->get('harga_barang'); $jumlah_barang = $request->get('jumlah_barang'); $nama_depan_pembeli = Auth::user()->nama_depan; $nama_belakang_pembeli = Auth::user()->nama_belakang; $nohp_pembeli = Auth::user()->nohp; $nama_penjual = User::where('email', $penjual)->value('nama_depan'); $alamat = ucwords(strtolower(Auth::user()->alamat)); $id = Uuid::uuid4(); $now = Carbon::now(); $persentase_keuntungan = $request->get('persentase_keuntungan'); $total_harga = $request->get('total_harga'); $total_keuntungan = $request->get('total_keuntungan'); $total_bayar = $request->get('total_bayar'); $batas_pembayaran = $now->addDays(1)->toDateTimeString(); $batas_pengiriman_barang_awal = $now->addDays(2)->toDateTimeString(); $batas_pengiriman_barang_akhir = $now->addDays(4)->toDateTimeString(); $params = [ 'transaction_details' => [ 'order_id' => $id, 'gross_amount' => $total_bayar, ], 'item_details' => [ [ 'id' => $nama_barang . time(), 'price' => $harga_barang, 'quantity' => $jumlah_barang, 'name' => $nama_barang, ], [ 'id' => 'BA01', 'price' => $total_keuntungan, 'quantity' => 1, 'name' => 'Biaya Admin', ], ], 'customer_details' => [ 'firts_name' => $nama_depan_pembeli, 'last_name' => $nama_belakang_pembeli, 'email' => $pembeli, 'phone' => $nohp_pembeli, 'billing' => [ 'first_name' => $nama_depan_pembeli, 'last_name' => $nama_belakang_pembeli, 'email' => $pembeli, 'phone' => $nohp_pembeli, 'address' => $alamat, 'city' => Auth::user()->village->district->city->name, 'country_code' => 'IDN', ], ], 'callbacks' => [ 'finish' => route('user-transaction.index.pembeli'), ], 'enabled_payments' => [ 'credit_card', 'gopay', 'shopeepay' ], 'expiry' => [ 'start_time' => $now->format('Y-m-d H:i:s P'), 'unit' => 'days', 'duration' => 1, ], ]; $snap_token = Snap::getSnapToken($params); $token = $snap_token; $status = 'created'; $query = Transaction::create([ 'id' => $id, 'pembeli' => $pembeli, 'penjual' => $penjual, 'nama_barang' => $nama_barang, 'deskripsi_transaksi' => $deskripsi_transaksi, 'satuan_barang' => $satuan_barang, 'harga_barang' => $harga_barang, 'jumlah_barang' => $jumlah_barang, 'persentase_keuntungan' => $persentase_keuntungan, 'total_keuntungan' => $total_keuntungan, 'total_harga' => $total_harga, 'total_bayar' => $total_bayar, 'token' => $token, 'status' => $status, 'batas_pembayaran' => $batas_pembayaran, 'batas_pengiriman_barang_awal' => $batas_pengiriman_barang_awal, 'batas_pengiriman_barang_akhir' => $batas_pengiriman_barang_akhir, ]); if ($query) { $contact = Contact::where('pemilik_kontak', $pembeli) ->where('relasi_kontak', $penjual) ->count(); if ($contact == 0) { Contact::create([ 'pemilik_kontak' => $pembeli, 'relasi_kontak' => $penjual, ]); } TransactionDescription::create([ 'transaction_id' => $id, 'status' => $status, 'user' => $pembeli, 'judul' => 'fa fa-plus', 'background' => 'bg-buyer', 'deskripsi' => $nama_depan_pembeli . ' telah membuat transaksi baru dengan ' . $nama_penjual, ]); return response()->json([ 'status' => true, 'message' => 'Berhasil menambahkan transaksi. Silahkan lakukan pembayaran.', ]); } else { return response()->json([ 'status' => false, 'message' => 'Gagal menambahkan transaksi.', ]); } } public function acceptTransaction($id) { $query = Transaction::where('id', $id)->update([ 'status' => 'process', ]); if ($query) { TransactionDescription::create([ 'transaction_id' => $id, 'status' => 'process', 'background' => 'bg-seller', 'user' => Auth::user()->email, 'judul' => 'fas fa-handshake', 'deskripsi' => 'Transaksi telah diterima oleh ' . Auth::user()->nama_depan, ]); return response()->json([ 'status' => true, 'message' => 'Transaksi telah diterima. Siapkan pesanan untuk dikirim ke penjual.', ]); } else { return response()->json([ 'status' => false, 'message' => 'Gagal update status karena kesalahan server.', ]); } } public function sendingOrder($id) { $query = Transaction::where('id', $id)->update([ 'status' => 'sending', ]); if ($query) { TransactionDescription::create([ 'transaction_id' => $id, 'status' => 'sending', 'background' => 'bg-seller', 'user' => Auth::user()->email, 'judul' => 'fas fa-truck-moving', 'deskripsi' => 'Pesanan telah dikirim oleh ' . Auth::user()->nama_depan . ' dan sedang dalam perjalanan menuju pembeli.', ]); return response()->json([ 'status' => true, 'message' => 'Pesanan sedang dikirim dan menuju pembeli.', ]); } else { return response()->json([ 'status' => false, 'message' => 'Gagal update status karena kesalahan server.', ]); } } public function sentOrder($id) { $query = Transaction::where('id', $id)->update([ 'status' => 'sended', ]); if ($query) { TransactionDescription::create([ 'transaction_id' => $id, 'status' => 'sended', 'background' => 'bg-seller', 'user' => Auth::user()->email, 'judul' => 'fas fa-check', 'deskripsi' => 'Pesanan telah sampai di tempat pembeli.', ]); return response()->json([ 'status' => true, 'message' => 'Pesanan telah sampai di tempat pembeli.', ]); } else { return response()->json([ 'status' => false, 'message' => 'Gagal update status karena kesalahan server.', ]); } } public function finishTransaction($id) { $query = Transaction::where('id', $id)->update([ 'status' => 'finished', ]); if ($query) { TransactionDescription::create([ 'transaction_id' => $id, 'status' => 'sended', 'background' => 'bg-buyer', 'user' => Auth::user()->email, 'judul' => 'fas fa-check', 'deskripsi' => 'Pesanan telah sampai di tempat pembeli.', ]); return response()->json([ 'status' => true, 'message' => 'Pesanan telah sampai di tempat pembeli.', ]); } else { return response()->json([ 'status' => false, 'message' => 'Gagal update status karena kesalahan server.', ]); } } public function payTransaction($id) { // Membuat objek Google Translate $translator = new GoogleTranslate(); // Mengatur bahasa sumber (Inggris) dan bahasa target (Indonesia) $translator->setSource('en'); $translator->setTarget('id'); $payment = Trans::status($id); $result = json_decode(json_encode($payment), true); if (in_array($result['status_code'], ['200', '201', '202'])) { $query = Transaction::where('id', $id)->update([ 'currency' => $result['currency'], 'merchant_id' => $result['merchant_id'], 'metode_pembayaran' => $result['payment_type'], 'tanggal_transaksi' => $result['transaction_time'], 'signature_key' => $result['signature_key'], 'status' => $result['transaction_status'], 'fraud_status' => $result['fraud_status'], ]); if ($query) { if ($result['transaction_status'] == 'pending') { TransactionDescription::create([ 'transaction_id' => $id, 'status' => $result['transaction_status'], 'user' => Auth::user()->email, 'judul' => 'fas fa-clock', 'status_code' => $result['status_code'], 'background' => 'bg-buyer', 'deskripsi' => 'Pembayaran ditunda.', ]); return response()->json([ 'status' => true, 'message' => 'Transaksi ditunda. Silahkan bayar nanti selama dalam waktu batas pembayaran.', ]); } else { TransactionDescription::create([ 'transaction_id' => $id, 'status' => $result['transaction_status'], 'user' => Auth::user()->email, 'judul' => 'fas fa-plus', 'status_code' => $result['status_code'], 'background' => 'bg-buyer', 'deskripsi' => Auth::user()->nama_depan . ' telah sukses melakukan pembayaran. Transaksi diteruskan ke penjual.', ]); return response()->json([ 'status' => true, 'message' => 'Pembayaran sukses.', ]); } } else { return response()->json([ 'status' => false, 'message' => 'Transaksi pembayaran gagal.', ]); } } elseif (in_array($result['status_code'], ['400', '401', '402', '403', '404', '405', '406', '407', '408', '409', '410', '411', '412', '413'])) { return response()->json([ 'status' => false, 'message' => 'Terjadi kesalahan di server.', ]); } else { return response()->json([ 'status' => false, 'message' => 'Transaksi pembayaran gagal', ]); } } public function cancelTransaction($id) { // Membuat objek Google Translate $translator = new GoogleTranslate(); // Mengatur bahasa sumber (Inggris) dan bahasa target (Indonesia) $translator->setSource('en'); $translator->setTarget('id'); $transaction = Transaction::where('id', $id)->first(); if ($transaction->status == 'created') { $query = Transaction::where('id', $id)->update([ 'status' => 'cancel', ]); if ($query) { TransactionDescription::create([ 'transcation_id' => $id, 'status' => 'cancel', 'user' => Auth::user()->email, 'judul' => 'fas fa-exclamation', 'background' => 'bg-buyer', 'deskripsi' => 'Transaksi dibatalkan', ]); return response()->json([ 'status' => true, 'message' => 'Transaksi berhasil dibatal', ]); } else { return response()->json([ 'status' => false, 'message' => 'Transaksi gagal dibatalkan', ]); } } else { $cancel = json_decode(json_encode(Trans::cancel($id)), true); if ($cancel['status_code'] == '200') { $query = Transaction::where('id', $id)->update([ 'status' => $cancel['transaction_status'], ]); if ($query) { TransactionDescription::create([ 'transaction_id' => $id, 'status' => $cancel['transaction_status'], 'user' => Auth::user()->email, 'judul' => 'fas fa-exclamation', 'status_code' => $cancel['status_code'], 'background' => 'bg-buyer', 'deskripsi' => $translator->translate($cancel['status_message']), ]); return response()->json([ 'status' => true, 'message' => $translator->translate($cancel['status_message']), ]); } else { return response()->json([ 'status' => false, 'message' => $translator->translate($cancel['status_message']), ]); } } elseif ($cancel['status_code'] == '412') { return response()->json([ 'status' => false, 'message' => $translator->translate($cancel['status_message']), ]); } } } public function complainTransaction($id) { return view('user.refund.new-refund', compact('id')); } }