676 lines
31 KiB
PHP
676 lines
31 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Str;
|
|
use DataTables;
|
|
|
|
// additional library loaded
|
|
use App\Enums\GlobalEnum;
|
|
use App\Helpers\MailerHelper as Mailers;
|
|
|
|
// additional model binding
|
|
use Modules\User\Entities\OrderModel as Order;
|
|
use Modules\User\Entities\OrderHistoryModel as OrderHistory;
|
|
use Modules\Seller\Entities\BillingModel as Billing;
|
|
use Modules\Seller\Entities\AccountModel as Account;
|
|
use Modules\Seller\Entities\PaymentModel as Payment;
|
|
use Modules\Seller\Entities\WithdrawalModel as Withdrawal;
|
|
use Modules\Seller\Entities\RekeningBankModel as ListBank;
|
|
use Modules\Seller\Entities\RekeningModel;
|
|
use App\Models\LogActivites;
|
|
|
|
class OrdersController extends Controller
|
|
{
|
|
|
|
public function index(Request $request)
|
|
{
|
|
if ($request->ajax()) {
|
|
$data = Order::select('*')->orderBy('created_at', 'desc');
|
|
return Datatables::of($data)
|
|
->addIndexColumn()
|
|
->addColumn('ticket-invoice', function($row){
|
|
$text = '
|
|
<p class="fw-bold">#' . $row->invoice_number . '</p>
|
|
';
|
|
return $text;
|
|
})
|
|
->addColumn('title-post', function($row){
|
|
$text = '
|
|
<p class="mb-0 fw-bold">' . removeUrlPrefix($row->website_url) . '</p>
|
|
<p class="mb-0 small text-muted">Terakhir diperbarui pada ' . date_formatting($row->updated_at, 'timeago') . '</p>
|
|
';
|
|
return $text;
|
|
})
|
|
->addColumn('author', function($row){
|
|
return '
|
|
<div class="d-flex align-items-center">
|
|
<div class="ms-3" data-bs-toggle="tooltip" data-bs-placement="top" title="' . $row->user->first()->name . '"><span>' . $row->user->first()->name . '</span></div>
|
|
</div>
|
|
';
|
|
})
|
|
->addColumn('status', function($row){
|
|
if ($row->is_status == GlobalEnum::isOrderRequested) {
|
|
return '<span class="mb-1 badge font-medium bg-dark text-white py-3 px-4 fs-7 w-100 text-center">Menunggu</span>';
|
|
} elseif($row->is_status == GlobalEnum::isOrderOnWorking) {
|
|
return '<span class="mb-1 badge font-medium bg-primary text-white py-3 px-4 fs-7 w-100 text-center">Dalam pengerjaan</span>';
|
|
} elseif($row->is_status == GlobalEnum::isOrderSubmitted) {
|
|
return '<span class="mb-1 badge font-medium bg-danger text-white py-3 px-4 fs-7 w-100 text-center">Dikirim</span>';
|
|
} elseif($row->is_status == GlobalEnum::isOrderCompleted) {
|
|
return '<span class="mb-1 badge font-medium bg-success text-white py-3 px-4 fs-7 w-100 text-center">Selesai</span>';
|
|
} elseif($row->is_status == GlobalEnum::isOrderReqCancel) {
|
|
return '<span class="mb-1 badge font-medium bg-danger text-white py-3 px-4 fs-7 w-100 text-center">Permintaan Ditolak</span>';
|
|
} elseif($row->is_status == GlobalEnum::isOrderCancelled) {
|
|
return '<span class="mb-1 badge font-medium bg-danger text-white py-3 px-4 fs-7 w-100 text-center">Dibatalkan</span>';
|
|
} elseif($row->is_status == GlobalEnum::isOrderRejected) {
|
|
return '<span class="mb-1 badge font-medium bg-danger text-white py-3 px-4 fs-7 w-100 text-center">Ditolak</span>';
|
|
}
|
|
})
|
|
->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 '
|
|
<div class="d-flex align-items-center">
|
|
<div class="symbol symbol-25px symbol-circle">
|
|
<div class="symbol-label" style="background-image:url(' . gravatar_team(findUser($checkInOrder->buy_id)->email) . ')"></div>
|
|
</div>
|
|
<div class="ms-3"><span>' . findUser($checkInOrder->buy_id)->name . '</span></div>
|
|
</div>
|
|
';
|
|
} else {
|
|
$checkInDeposit = Payment::where('deposit_number', $row->invoice_id)->first();
|
|
if($checkInDeposit) {
|
|
return '
|
|
<div class="d-flex align-items-center">
|
|
<div class="symbol symbol-25px symbol-circle">
|
|
<div class="symbol-label" style="background-image:url(' . gravatar_team(findUser($checkInDeposit->user_id)) . ')"></div>
|
|
</div>
|
|
<div class="ms-3"><span>' . findUser($checkInDeposit->user_id)->name . '</span></div>
|
|
</div>
|
|
';
|
|
}
|
|
}
|
|
})
|
|
->addColumn('status', function($row){
|
|
$checkInOrder = Order::where('invoice_number', $row->invoice_id)->first();
|
|
if($checkInOrder) {
|
|
if($checkInOrder->is_status == GlobalEnum::isOrderCompleted) {
|
|
return '<span class="mb-1 badge font-medium bg-light-success text-success py-3 px-4 fs-7"><i class="ki-outline ki-check fs-6 me-2 text-success"></i>Tuntas</span>';
|
|
} else {
|
|
return '<span class="mb-1 badge font-medium bg-light-danger text-danger py-3 px-4 fs-7"><i class="ki-outline ki-cross fs-6 me-2 text-danger"></i>Belum</span>';
|
|
}
|
|
} else {
|
|
$checkInDeposit = Payment::where('deposit_number', $row->invoice_id)->first();
|
|
if($checkInDeposit) {
|
|
if($checkInDeposit->is_status == GlobalEnum::isDepositPaid) {
|
|
return '<span class="mb-1 badge font-medium bg-light-success text-success py-3 px-4 fs-7"><i class="ki-outline ki-check fs-6 me-2 text-success"></i>Tuntas</span>';
|
|
} else {
|
|
return '<span class="mb-1 badge font-medium bg-light-danger text-danger py-3 px-4 fs-7"><i class="ki-outline ki-cross fs-6 me-2 text-danger"></i>Belum</span>';
|
|
}
|
|
}
|
|
}
|
|
})
|
|
->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 = '
|
|
<p class="fw-bold mb-n1">#' . $row->deposit_number . '</p>
|
|
';
|
|
return $text;
|
|
})
|
|
->addColumn('author', function($row) {
|
|
return '
|
|
<div class="d-flex align-items-center">
|
|
<div class="symbol symbol-25px symbol-circle">
|
|
<div class="symbol-label" style="background-image:url(' . gravatar_team($row->user->first()->email) . ')"></div>
|
|
</div>
|
|
<div class="ms-3"><span>' . $row->user->first()->name . '</span></div>
|
|
</div>
|
|
';
|
|
})
|
|
->addColumn('is_status', function($row){
|
|
if ($row->is_status == GlobalEnum::isDepositPending) {
|
|
return '<span class="mb-1 badge font-medium bg-light-dark text-dark py-3 px-4 fs-7">Menunggu Pembayaran</span>';
|
|
} elseif($row->is_status == GlobalEnum::isDepositInquiry) {
|
|
return '<span class="mb-1 badge font-medium bg-light-primary text-primary py-3 px-4 fs-7">Butuh Tindakan</span>';
|
|
} elseif($row->is_status == GlobalEnum::isDepositFailed) {
|
|
return '<span class="mb-1 badge font-medium bg-light-danger text-danger py-3 px-4 fs-7">Gagal</span>';
|
|
} elseif($row->is_status == GlobalEnum::isDepositPaid) {
|
|
return '<span class="mb-1 badge font-medium bg-light-success text-success py-3 px-4 fs-7">Sukses</span>';
|
|
} elseif($row->is_status == GlobalEnum::isDepositCancel) {
|
|
return '<span class="mb-1 badge font-medium bg-light-warning text-warning py-3 px-4 fs-7">Dibatalkan</span>';
|
|
}
|
|
})
|
|
->addColumn('post_price', function($row){
|
|
return 'Rp. ' . number_format($row->total, 0, ',', '.');
|
|
})
|
|
->addColumn('metode-deposit', function($row){
|
|
if($row->methodWith == 1) {
|
|
return '<img src="' . frontend('media/svg/gateway.svg') . '" alt="gateway" width="30" /><span class="ms-2">Virtual Gateway</span>';
|
|
} else {
|
|
return '<img src="' . frontend('media/svg/direct.svg') . '" alt="direct" width="30" /><span class="ms-2">Bayar Nanti</span>';
|
|
}
|
|
})
|
|
->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 = '
|
|
<p class="fw-bold mb-0">#' . $row->invoice_id . '</p>
|
|
<p class="small text-gray-400 mb-0">Dibuat pada ' . date('j F Y', strtotime($row->created_at)) . '</p>
|
|
';
|
|
return $text;
|
|
})
|
|
->addColumn('account', function($row){
|
|
$checkBank = ListBank::where('id', $row->rekening->first()->rid)->first();
|
|
$text = '
|
|
<span class="mb-1 badge font-medium bg-light-primary text-primary py-3 px-4 fs-7">' . $checkBank->nama . '</p>
|
|
';
|
|
return $text;
|
|
})
|
|
->addColumn('author', function($row){
|
|
return '
|
|
<div class="d-flex align-items-center">
|
|
<div class="symbol symbol-25px symbol-circle">
|
|
<div class="symbol-label" style="background-image:url(' . gravatar_team($row->user->first()->email) . ')"></div>
|
|
</div>
|
|
<div class="ms-3"><span>' . $row->user->first()->name . '</span></div>
|
|
</div>
|
|
';
|
|
})
|
|
->addColumn('status', function($row){
|
|
if ($row->is_status == GlobalEnum::isWithdrawPending) {
|
|
return '<span class="mb-1 badge font-medium bg-light-warning text-warning py-3 px-4 fs-7">Menunggu Pembayaran</span>';
|
|
} elseif($row->is_status == GlobalEnum::isWithdrawOnProgress) {
|
|
return '<span class="mb-1 badge font-medium bg-light-primary text-primary py-3 px-4 fs-7">Sedang Proses</span>';
|
|
} elseif($row->is_status == GlobalEnum::isWithdrawPaid) {
|
|
return '<span class="mb-1 badge font-medium bg-light-success text-success py-3 px-4 fs-7">Dibayarkan</span>';
|
|
} elseif($row->is_status == GlobalEnum::isWithdrawCancel) {
|
|
return '<span class="mb-1 badge font-medium bg-light-danger text-danger py-3 px-4 fs-7">Dibatalkan</span>';
|
|
}
|
|
})
|
|
->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.'));
|
|
}
|
|
}
|
|
}
|