ajax()) { $data = Order::select('*')->orderBy('created_at', 'desc'); return Datatables::of($data) ->addIndexColumn() ->addColumn('ticket-invoice', function($row){ $text = '

#' . $row->invoice_number . '

'; return $text; }) ->addColumn('title-post', function($row){ $text = '

' . removeUrlPrefix($row->website_url) . '

Terakhir diperbarui pada ' . date_formatting($row->updated_at, 'timeago') . '

'; return $text; }) ->addColumn('author', function($row){ return '
' . $row->user->first()->name . '
'; }) ->addColumn('status', function($row){ if ($row->is_status == GlobalEnum::isOrderRequested) { return 'Menunggu'; } elseif($row->is_status == GlobalEnum::isOrderOnWorking) { return 'Dalam pengerjaan'; } elseif($row->is_status == GlobalEnum::isOrderSubmitted) { return 'Dikirim'; } elseif($row->is_status == GlobalEnum::isOrderCompleted) { return 'Selesai'; } elseif($row->is_status == GlobalEnum::isOrderReqCancel) { return 'Permintaan Ditolak'; } elseif($row->is_status == GlobalEnum::isOrderCancelled) { return 'Dibatalkan'; } elseif($row->is_status == GlobalEnum::isOrderRejected) { return 'Ditolak'; } }) ->addColumn('price', function($row){ return 'Rp. ' . number_format($row->total, 0, ',', '.'); }) ->filter(function ($query) use ($request) { if ($request->has('search')) { $search = $request->get('search')['value']; $filterCategory = explode('|', $search); if($filterCategory[0] === 'status') { if(!empty($filterCategory[1])) { $query->where('is_status', '=', $filterCategory[1]); } else { $query->get(); } } elseif($filterCategory[0] === 'orders') { if(!empty($filterCategory[1])) { $query->where('invoice_number', 'LIKE', "%$filterCategory[1]%"); } else { $query->get(); } } elseif($filterCategory[0] === 'owned') { if(!empty($filterCategory[1])) { if($filterCategory[1] == 0) { $query->get(); } else { $query->where('sell_id', '=', auth()->user()->id); } } else { $query->get(); } } } }) ->rawColumns(['author','ticket-invoice','title-post','status','price']) ->make(true); } $data = [ 'subtitle' => 'Semua Pesanan' ]; return view('admin.app.transaction.orders.index', compact('data')); } public function view($invoice) { $check = Order::where('id', $invoice)->first(); if($check) { $data = [ 'subtitle' => 'Detil Pesanan' ]; $getInfoOrders = $check; return view('admin.app.transaction.orders.detail', compact('data', 'getInfoOrders')); } else { return redirect()->back()->with('swal', swal_alert('error', 'Tidak ditemukan data yang anda cari')); } } public function cancelOrder(Request $request, $invoice) { $check = Order::where('id', $invoice)->first(); if($check) { $check->is_status = GlobalEnum::isOrderCancelled; $check->cancel_reason = $request->cancel_reason; $check->save(); OrderHistory::create([ 'id' => Str::uuid(), 'order_id' => $check->id, 'asActor' => 1, 'is_status' => 5, 'comment' => $request->cancel_reason ]); return redirect()->back()->with('swal', swal_alert('success', 'Pesanan anda telah dibatalkan')); } else { return redirect()->back()->with('swal', swal_alert('error', 'Tidak ditemukan data yang anda cari')); } } public function accept(Request $request, $invoice) { $check = Order::where('id', $invoice)->first(); if($check) { $check->is_status = GlobalEnum::isOrderOnWorking; $check->save(); OrderHistory::create([ 'id' => Str::uuid(), 'order_id' => $check->id, 'asActor' => 3, 'is_status' => 0, 'comment' => 'Reseller menerima pesanan ini' ]); return redirect()->back()->with('swal', swal_alert('success', 'Pesanan telah anda terima, Mohon segera kerjakan dalam kurung waktu produk yang telah anda tentukan!')); } else { return redirect()->back()->with('swal', swal_alert('error', 'Tidak ditemukan data yang anda cari')); } } public function process(Request $request, $invoice) { $check = Order::where('id', $invoice)->first(); if($check) { $check->is_status = GlobalEnum::isOrderSubmitted; $check->save(); OrderHistory::create([ 'id' => Str::uuid(), 'order_id' => $check->id, 'url' => $request->url, 'asActor' => 3, 'is_status' => GlobalEnum::isHistoryDone, 'comment' => 'Reseller mengirimkan laporan tugas' ]); return redirect()->back()->with('swal', swal_alert('success', 'Anda telah berhasil mengirimkan laporan tugas, silahkan tunggu 1x24 jam agar pemesan dapat melakukan review pesanan.')); } else { return redirect()->back()->with('swal', swal_alert('error', 'Tidak ditemukan data yang anda cari')); } } public function revision(Request $request, $invoice) { $check = Order::where('id', $invoice)->first(); if($check) { $check->is_status = GlobalEnum::isOrderSubmitted; $check->save(); OrderHistory::create([ 'id' => Str::uuid(), 'order_id' => $check->id, 'url' => $request->url, 'asActor' => 3, 'is_status' => GlobalEnum::isHistoryDone, 'comment' => 'Reseller mengirimkan laporan tugas revisi' ]); return redirect()->back()->with('swal', swal_alert('success', 'Anda telah berhasil mengirimkan laporan tugas revisi, silahkan tunggu 1x24 jam agar pemesan dapat melakukan review pesanan.')); } else { return redirect()->back()->with('swal', swal_alert('error', 'Tidak ditemukan data yang anda cari')); } } public function feedback(Request $request, $invoice) { $check = Order::where('id', $invoice)->first(); if($check) { $check->last_seller_message = clean($request->feedback); $check->save(); $save = auth()->user()->update([ 'income' => auth()->user()->income + $check->price ]); if($save) { LogActivites::default([ 'causedBy' => user()->id, 'withContent' => [ 'status' => 'add', 'text' => 'Anda telah menerima saldo sebesar ' . $check->price, ] ]); return redirect()->back()->with('swal', swal_alert('success', 'Anda telah berhasil mengirimkan ulasan untuk buyer dan tugas telah dinyatakan selesai.')); } else { return redirect()->back()->with('swal', swal_alert('error', 'Tidak ditemukan data yang anda cari')); } } else { return redirect()->back()->with('swal', swal_alert('error', 'Tidak ditemukan data yang anda cari')); } } public function billing(Request $request) { if ($request->ajax()) { $data = Billing::select('*')->orderBy('invoice_id', 'DESC'); return Datatables::of($data) ->addIndexColumn() ->addColumn('ticket-invoice', function($row){ $text = $row->invoice_id; return $text; }) ->addColumn('author', function($row){ $checkInOrder = Order::where('invoice_number', $row->invoice_id)->first(); if($checkInOrder) { return '
' . findUser($checkInOrder->buy_id)->name . '
'; } else { $checkInDeposit = Payment::where('deposit_number', $row->invoice_id)->first(); if($checkInDeposit) { return '
' . findUser($checkInDeposit->user_id)->name . '
'; } } }) ->addColumn('status', function($row){ $checkInOrder = Order::where('invoice_number', $row->invoice_id)->first(); if($checkInOrder) { if($checkInOrder->is_status == GlobalEnum::isOrderCompleted) { return 'Tuntas'; } else { return 'Belum'; } } else { $checkInDeposit = Payment::where('deposit_number', $row->invoice_id)->first(); if($checkInDeposit) { if($checkInDeposit->is_status == GlobalEnum::isDepositPaid) { return 'Tuntas'; } else { return 'Belum'; } } } }) ->addColumn('type', function($row){ $checkInOrder = Order::where('invoice_number', $row->invoice_id)->first(); if($checkInOrder) { return 'Transaksi Umum'; } else { $checkInDeposit = Payment::where('deposit_number', $row->invoice_id)->first(); if($checkInDeposit) { return 'Deposit'; } } }) ->addColumn('price', function($row){ $checkInOrder = Order::where('invoice_number', $row->invoice_id)->first(); if($checkInOrder) { return 'Rp. ' . number_format($checkInOrder->price, 0, ',', '.'); } else { $checkInDeposit = Payment::where('deposit_number', $row->invoice_id)->first(); if($checkInDeposit) { return 'Rp. ' . number_format($checkInDeposit->amount, 0, ',', '.'); } } }) ->filter(function ($query) use ($request) { if ($request->has('search')) { $search = $request->get('search')['value']; $query->where('invoice_id', 'LIKE', "%$search%"); } }) ->rawColumns(['type','ticket-invoice','author','status','price']) ->make(true); } $data = [ 'subtitle' => 'Semua Tagihan' ]; return view('admin.app.transaction.billing.index', compact('data')); } // deposit public function deposit(Request $request) { if ($request->ajax()) { $data = Payment::select('*')->orderBy('created_at', 'DESC'); return Datatables::eloquent($data) ->addIndexColumn() ->addColumn('invoice-number', function($row){ $text = '

#' . $row->deposit_number . '

'; return $text; }) ->addColumn('author', function($row) { return '
' . $row->user->first()->name . '
'; }) ->addColumn('is_status', function($row){ if ($row->is_status == GlobalEnum::isDepositPending) { return 'Menunggu Pembayaran'; } elseif($row->is_status == GlobalEnum::isDepositInquiry) { return 'Butuh Tindakan'; } elseif($row->is_status == GlobalEnum::isDepositFailed) { return 'Gagal'; } elseif($row->is_status == GlobalEnum::isDepositPaid) { return 'Sukses'; } elseif($row->is_status == GlobalEnum::isDepositCancel) { return 'Dibatalkan'; } }) ->addColumn('post_price', function($row){ return 'Rp. ' . number_format($row->total, 0, ',', '.'); }) ->addColumn('metode-deposit', function($row){ if($row->methodWith == 1) { return 'gatewayVirtual Gateway'; } else { return 'directBayar Nanti'; } }) ->rawColumns(['author', 'invoice-number','action','is_status','post_price','metode-deposit']) ->filter(function ($query) use ($request) { if ($request->has('search')) { $search = $request->get('search')['value']; $filterCategory = explode('|', $search); if($filterCategory[0] === 'status') { if(!empty($filterCategory[1])) { $query->where('is_status', '=', $filterCategory[1]); } else { $query->get(); } } elseif($filterCategory[0] === 'invoice') { if(!empty($filterCategory[1])) { $query->where('deposit_number', 'LIKE', "%$filterCategory[1]%"); } else { $query->get(); } } } }) ->make(true); } $data = [ 'subtitle' => 'Deposit', 'button' => true, 'module' => [ 'name' => 'Tambah Saldo', 'url' => route('billing.deposit.add'), ] ]; return view('admin.app.transaction.deposit.index', compact('data')); } public function createDeposit() { $data = [ 'subtitle' => 'Tambah Saldo', ]; $getListUsers = Account::all(); return view('admin.app.transaction.deposit.add', compact('data', 'getListUsers')); } public function storeDeposit(Request $request) { $validator = Validator::make($request->all(), [ 'amount' => 'required|numeric', 'user_id' => 'required|numeric' ]); if($validator->fails()) { return redirect()->back()->with('swal', swal_alert('error', $validator->errors()->first()))->withInput(); } $input = $request->all(); $invoice_number = invoiceGenerator(); $post = new Payment([ 'id' => Str::uuid(), 'user_id' => $input['user_id'], 'deposit_number' => $invoice_number, 'payment_method' => null, 'methodWith' => 1, 'amount' => $input['amount'], 'total' => $input['amount'], 'is_status' => GlobalEnum::isDepositPaid ]); $bill = new Billing([ 'id' => Str::uuid(), 'invoice_id' => $invoice_number, 'user_id' => $input['user_id'], ]); $save = auth()->user()->update([ 'balance' => auth()->user()->balance + $input['amount'] ]); if($post->save() && $bill->save() && $save) { LogActivites::default([ 'causedBy' => user()->id, 'withContent' => [ 'status' => 'add', 'text' => 'Anda telah menambahkan saldo kepada pengguna sebesar ' . $input['amount'], ] ]); return redirect()->route('billing.deposit.view', ['invoice' => $post->id])->with('swal', swal_alert('success', 'Anda berhasil melakukan penambahan deposit pada pengguna.')); } else { return redirect()->route('billing.deposit')->with('swal', swal_alert('error', 'Terjadi kesalahan saat melakukan permintaan deposit.')); } } public function viewDeposit($invoice) { $payment = Payment::find($invoice); if($payment) { $data = [ 'subtitle' => '#' . $payment->deposit_number, ]; return view('admin.app.transaction.deposit.detail', compact('data', 'payment')); } else { return redirect()->route('billing.deposit'); } } public function withdrawal(Request $request) { if ($request->ajax()) { $data = Withdrawal::select('id', 'invoice_id', 'user_id', 'amount', 'is_status', 'is_account', 'created_at'); return Datatables::of($data) ->addIndexColumn() ->addColumn('invoice-number', function($row){ $text = '

#' . $row->invoice_id . '

Dibuat pada ' . date('j F Y', strtotime($row->created_at)) . '

'; return $text; }) ->addColumn('account', function($row){ $checkBank = ListBank::where('id', $row->rekening->first()->rid)->first(); $text = ' ' . $checkBank->nama . '

'; return $text; }) ->addColumn('author', function($row){ return '
' . $row->user->first()->name . '
'; }) ->addColumn('status', function($row){ if ($row->is_status == GlobalEnum::isWithdrawPending) { return 'Menunggu Pembayaran'; } elseif($row->is_status == GlobalEnum::isWithdrawOnProgress) { return 'Sedang Proses'; } elseif($row->is_status == GlobalEnum::isWithdrawPaid) { return 'Dibayarkan'; } elseif($row->is_status == GlobalEnum::isWithdrawCancel) { return 'Dibatalkan'; } }) ->addColumn('price', function($row){ return 'Rp. ' . number_format($row->amount, 0, ',', '.'); }) ->rawColumns(['invoice-number','account','status','price','author']) ->filter(function ($query) use ($request) { if ($request->has('search')) { $search = $request->get('search')['value']; $filterCategory = explode('|', $search); if($filterCategory[0] === 'status') { if(!empty($filterCategory[1])) { $query->where('is_status', '=', $filterCategory[1]); } else { $query->get(); } } elseif($filterCategory[0] === 'invoice') { if(!empty($filterCategory[1])) { $query->where('invoice_id', 'LIKE', "%$filterCategory[1]%"); } else { $query->get(); } } } }) ->make(true); } $data = [ 'subtitle' => 'Daftar Penarikan' ]; return view('admin.app.transaction.withdrawal.index', compact('data')); } public function storeRequest(Request $request) { $validator = Validator::make($request->all(), [ 'id' => 'required', 'image' => 'required|image|mimes:jpg,jpeg,png,svg|max:7048', ], [ 'image.mimes' => 'Tipe file yang diunggah harus jpg, jpeg, png, atau svg.', ]); if($validator->fails()) { return redirect()->back()->withInput()->with('swal', swal_alert('error', 'Unexpected error, please try again. code: ' . $validator->errors()->first())); } $input = $request->all(); $withdraw = Withdrawal::find($input['id']); if($withdraw) { // Jika ada file baru yang diunggah, simpan file baru di storage if ($request->hasFile('image') && $request->file('image')->isValid()) { $foto_namaBaru = $request->file('image')->store('public/images'); $withdraw->is_attachment = $foto_namaBaru; } $withdraw->is_status = GlobalEnum::isWithdrawPaid; if($withdraw->save()) { $sendEmailToUser = Mailers::to(findUser($withdraw->user_id)->email, false, 'email.transaction.place-withdrawal', [ 'message' => 'Anda berhasil menerima penarikan saldo pada tanggal ' . date('j F Y H:i:s'), 'subject' => 'Informasi Penarikan Tunai', 'amount' => $withdraw->amount, 'name' => findUser($withdraw->user_id)->name, 'status' => 'Telah dibayarkan oleh admin.', ]); if($sendEmailToUser) { $users = Account::where('id', $withdraw->user_id)->first(); $users->update([ 'income' => $users->income - $withdraw->amount ]); LogActivites::default([ 'causedBy' => $withdraw->user_id, 'logType' => GlobalEnum::LogOfGeneral, 'withContent' => [ 'status' => 'add', 'text' => 'Anda berhasil menerima penarikan saldo sejumlah ' . rupiah_changer($withdraw->amount) . ' pada tanggal ' . date('Y-m-d H:i:s'), ] ]); return redirect()->back()->with('swal', swal_alert('success', 'Anda berhasil melakukan konfirmasi penarikan tarik tunai.')); } else { return redirect()->back()->with('swal', swal_alert('error', 'Terjadi kesalahan saat melakukan konfirmasi penarika penarikan.')); } } else { return redirect()->back()->with('swal', swal_alert('error', 'Terjadi kesalahan/data pada saat menyimpan data.')); } } else { return redirect()->back()->with('swal', swal_alert('error', 'Terjadi kesalahan/data tidak ditemukan pada sistem.')); } } public function viewRequest($invoice) { $payment = Withdrawal::find($invoice); if($payment) { $data = [ 'subtitle' => 'Detil Penarikan', ]; return view('admin.app.transaction.withdrawal.detail', compact('data', 'payment')); } else { return redirect()->back()->with('swal', swal_alert('error', 'Data tidak ditemukan.')); } } public function cancelRequest($invoice) { $payment = Withdrawal::find($invoice); if($payment) { $payment->is_status = GlobalEnum::isWithdrawCancel; if($payment->save()) { LogActivites::default([ 'causedBy' => user()->id, 'logType' => GlobalEnum::LogOfGeneral, 'withContent' => [ 'status' => 'minus', 'text' => 'Admin melakukan pembatalan tarik tunai dengan kode invoice ' . $payment->invoice_id .' pada tanggal ' . date('Y-m-d H:i:s'), ] ]); return redirect()->back()->with('swal', swal_alert('success', 'Anda berhasil melakukan pembatalan tarik tunai.')); } else { return redirect()->back()->with('swal', swal_alert('error', 'Terjadi kesalahan saat melakukan pembatalan penarikan.')); } } else { return redirect()->back()->with('swal', swal_alert('error', 'Data tidak ditemukan.')); } } }