prubahan part5

This commit is contained in:
oktaviaramadani 2023-11-14 14:11:55 +07:00
commit f963618e1c
29 changed files with 1783 additions and 1048 deletions

View File

@ -134,6 +134,7 @@ class AdminRefundController extends Controller
public function listRefund(Request $request) public function listRefund(Request $request)
{ {
try {
$subQuery = Refund::join('transactions', 'refunds.transaction_id', '=', 'transactions.id') $subQuery = Refund::join('transactions', 'refunds.transaction_id', '=', 'transactions.id')
->join('users as b', 'transactions.pembeli', '=', 'b.email') ->join('users as b', 'transactions.pembeli', '=', 'b.email')
->join('users as s', 'transactions.penjual', '=', 's.email') ->join('users as s', 'transactions.penjual', '=', 's.email')
@ -143,23 +144,13 @@ class AdminRefundController extends Controller
if ($request->has('search') && !empty($request->search['value'])) { if ($request->has('search') && !empty($request->search['value'])) {
$searchRefund = $request->search['value']; $searchRefund = $request->search['value'];
if (!is_numeric($searchRefund)) { if (!is_numeric($searchRefund)) {
// if(strtotime($searchRefund) != false){
// $subQuery->where(function ($a) use ($searchRefund) {
// $a->whereDate('refunds.created_at','=',Carbon::createFromFormat('d/m/y', ucfirst(strtolower($searchRefund)))->format('Y-m-d'))
// ->orWhereDate('refunds.due_date','=',Carbon::createFromFormat('d/m/y', ucfirst(strtolower($searchRefund)))->format('Y-m-d'));
// });
// }else{
$subQuery->where(function ($a) use ($searchRefund) { $subQuery->where(function ($a) use ($searchRefund) {
$a->whereRaw('LOWER(b.nama_depan) LIKE ?', ['%' . strtolower($searchRefund) . '%']) $a->whereRaw("LOWER(CONCAT(b.nama_depan,' ',b.nama_belakang)) LIKE ?", ['%' . strtolower($searchRefund) . '%'])
->orWhereRaw('LOWER(b.nama_belakang) LIKE ?', ['%' . strtolower($searchRefund) . '%']) ->orWhereRaw("LOWER(CONCAT(s.nama_depan,' ',s.nama_belakang)) LIKE ?", ['%' . strtolower($searchRefund) . '%'])
->orWhereRaw('LOWER(s.nama_depan) LIKE ?', ['%' . strtolower($searchRefund) . '%'])
->orWhereRaw('LOWER(s.nama_belakang) LIKE ?', ['%' . strtolower($searchRefund) . '%'])
->orWhereRaw('LOWER(transactions.nama_barang) LIKE ?', ['%' . strtolower($searchRefund) . '%']) ->orWhereRaw('LOWER(transactions.nama_barang) LIKE ?', ['%' . strtolower($searchRefund) . '%'])
->orWhereRaw('LOWER(refunds.status) LIKE ?', ['%' . strtolower($searchRefund) . '%']); ->orWhereRaw('LOWER(refunds.status) LIKE ?', ['%' . strtolower($searchRefund) . '%']);
}); });
// } } else {
}else {
$subQuery->where(function ($a) use ($searchRefund) { $subQuery->where(function ($a) use ($searchRefund) {
$a->whereDay('refunds.created_at', '=', $searchRefund) $a->whereDay('refunds.created_at', '=', $searchRefund)
->orWhereMonth('refunds.created_at', '=', $searchRefund) ->orWhereMonth('refunds.created_at', '=', $searchRefund)
@ -167,7 +158,7 @@ class AdminRefundController extends Controller
->orWhereDay('refunds.due_date', '=', $searchRefund) ->orWhereDay('refunds.due_date', '=', $searchRefund)
->orWhereMonth('refunds.due_date', '=', $searchRefund) ->orWhereMonth('refunds.due_date', '=', $searchRefund)
->orWhereYear('refunds.due_date', '=', $searchRefund) ->orWhereYear('refunds.due_date', '=', $searchRefund)
->orWhere('refunds.total','=',$searchRefund); ->orWhere('refunds.total', '=', $searchRefund);
}); });
} }
} }
@ -203,5 +194,10 @@ class AdminRefundController extends Controller
->rawColumns(['action']) ->rawColumns(['action'])
->make(true); ->make(true);
} }
} catch (Throwable $e) {
Log::error($e->getMessage());
return response()->json(['success' => false, 'message' => 'Terjadi Kesalahan pada sisi server']);
}
} }
} }

View File

@ -5,8 +5,12 @@ namespace App\Http\Controllers\Admin;
use App\Models\Transaction; use App\Models\Transaction;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\TransactionDescription; use App\Models\TransactionDescription;
use App\Models\TransactionUser;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Throwable; use Throwable;
use Yajra\DataTables\DataTables;
class AdminTransactionController extends Controller class AdminTransactionController extends Controller
{ {
@ -16,8 +20,7 @@ class AdminTransactionController extends Controller
public function index() public function index()
{ {
return view('admin.transaction.index', [ return view('admin.transaction.index', [
'transactions' => Transaction::latest() 'transactions' => Transaction::latest()->get(),
->get(),
]); ]);
} }
@ -34,23 +37,163 @@ class AdminTransactionController extends Controller
]); ]);
} }
public function aprroveTransaction($id){ public function approveTransaction(Request $request)
try{ {
try {
DB::beginTransaction();
}catch(Throwable $e){ Transaction::where('id', $request->id)->update([
'status_transaksi' => 'success',
'status_pembayaran' => 'settlement',
'fraud_status' => 'accept'
]);
TransactionDescription::create([
'transaction_id' => $request->id,
'status' => 'success',
'user' => auth()->user()->email,
'judul' => 'fa fa-check',
'background' => 'bg-primary',
'deskripsi' => 'Admin telah menerima pembayaran transaksi dan dilanjutkan ke penjual.',
]);
DB::commit();
return response()->json([
'status' => true,
'message' => 'Transaksi telah diterima.'
]);
} catch (Throwable $e) {
DB::rollBack();
Log::error($e->getMessage());
return response()->json([
'status' => false,
'message' => 'Terjadi kesalahan di bagian server.',
]);
} }
} }
public function denyTransaction($id){ public function denyTransaction(Request $request)
try{ {
try {
DB::beginTransaction();
}catch(Throwable $e){ Transaction::where('id', $request->id)->update([
'status_transaksi' => 'failure',
'status_pembayaran' => 'failure',
'fraud_status' => 'deny'
]);
TransactionDescription::create([
'transaction_id' => $request->id,
'status' => 'failure',
'user' => auth()->user()->email,
'judul' => 'fa fa-times',
'background' => 'bg-primary',
'deskripsi' => 'Admin telah menolak pembayaran karena terindikasi penipuan.',
]);
DB::commit();
return response()->json([
'status' => true,
'message' => 'Transaksi telah ditolak.'
]);
} catch (Throwable $e) {
DB::rollBack();
Log::error($e->getMessage());
return response()->json([
'status' => false,
'message' => 'Terjadi kesalahan di bagian server.',
]);
} }
} }
public function listTransaction(Request $request){ public function listTransaction(Request $request)
{
try {
$subQuery = Transaction::join('users as b', 'transactions.pembeli', '=', 'b.email')
->join('users as s', 'transactions.penjual', '=', 's.email')
->latest()
->select('transactions.id', 'transactions.nama_barang', DB::raw("CONCAT(b.nama_depan,' ',b.nama_belakang) as nama_pembeli"), DB::raw("CONCAT(s.nama_depan,' ',s.nama_belakang) as nama_penjual"), 'transactions.total_harga', 'transactions.created_at', 'transactions.status_transaksi');
if ($request->has('search') && !empty($request->search['value'])) {
$searchTransaksi = $request->search['value'];
if (!is_numeric($searchTransaksi)) {
$subQuery->where(function ($a) use ($searchTransaksi) {
$a->whereRaw("LOWER(CONCAT(s.nama_depan,' ',s.nama_belakang)) LIKE ?", ['%' . strtolower($searchTransaksi) . '%'])
->orWhereRaw("LOWER(CONCAT(b.nama_depan,' ',b.nama_belakang)) LIKE ?", ['%' . strtolower($searchTransaksi) . '%'])
->orWhereRaw('LOWER(transactions.nama_barang) LIKE ?', ['%' . strtolower($searchTransaksi) . '%'])
->orWhereRaw('LOWER(transactions.status_transaksi) LIKE ?', ['%' . strtolower($searchTransaksi) . '%']);
});
} else {
$subQuery->where(function ($a) use ($searchTransaksi) {
$a->whereDay('transactions.created_at', '=', $searchTransaksi)
->orWhereMonth('transactions.created_at', '=', $searchTransaksi)
->orWhereYear('transactions.created_at', '=', $searchTransaksi)
->orWhere('transactions.total_harga', '=', $searchTransaksi);
});
}
}
$queryTransaction = Transaction::from(DB::raw("({$subQuery->toSql()}) as tmp"))
->mergeBindings($subQuery->getQuery()) // Menggabungkan binding parameters
->select('*')
->get();
if ($request->ajax()) {
return DataTables::of($queryTransaction)
->addIndexColumn()
->addColumn('action', function ($row) {
$url = route('admin-transaction.show', ['id' => $row->id]);
$invoice = route('invoice.get',['id' => $row->id]);
$html_code =
'
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
....
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item"
href="'.$url.'">Detail</a>
</li>
<li><a class="dropdown-item"
href="'.$invoice.'">Invoice</a>
</li>
<li><a class="dropdown-item" data-toggle="modal"
data-target="#modalTracking"
data-id="'.$row->id.'"
href="#">Tracking</a>
</li>
';
$html_code .= '
</ul>
</div>
';
return $html_code;
})
->rawColumns(['action'])
->make(true);
}
} catch (Throwable $e) {
Log::error($e->getMessage());
return response()->json(['success' => false, 'message' => 'Terjadi Kesalahan pada sisi server']);
}
}
public function transactionTracking(Request $request)
{
$data = TransactionDescription::where('transaction_id', $request->id)->get();
return response()->json([
'data' => $data,
]);
} }
} }

View File

@ -32,10 +32,10 @@ class AdminUserController extends Controller
/** /**
* Remove the specified resource from storage. * Remove the specified resource from storage.
*/ */
public function destroy($id) public function destroy(Request $request)
{ {
try { try {
$result = User::destroy($id); $result = User::destroy($request->id);
if ($result) { if ($result) {
return response()->json([ return response()->json([
'message' => 'Berhasil hapus data', 'message' => 'Berhasil hapus data',
@ -50,9 +50,9 @@ class AdminUserController extends Controller
} }
} }
public function approveUser($id) public function approveUser(Request $request)
{ {
$user = User::findOrFail($id); $user = User::findOrFail($request->id);
$user->status = 'Finished'; $user->status = 'Finished';
$result = $user->save(); $result = $user->save();
if ($result) { if ($result) {
@ -68,9 +68,9 @@ class AdminUserController extends Controller
} }
} }
public function denyUser($id) public function denyUser(Request $request)
{ {
$user = User::findOrFail($id); $user = User::findOrFail($request->id);
$user->status = 'Rejected'; $user->status = 'Rejected';
$result = $user->save(); $result = $user->save();
if ($result) { if ($result) {
@ -96,12 +96,16 @@ class AdminUserController extends Controller
if ($request->has('search') && !empty($request->search['value'])) { if ($request->has('search') && !empty($request->search['value'])) {
$searchUser = $request->search['value']; $searchUser = $request->search['value'];
if(!is_numeric($searchUser)){
$subQuery->where(function ($a) use ($searchUser) { $subQuery->where(function ($a) use ($searchUser) {
$a->whereRaw('LOWER(email) LIKE ?', ['%' . strtolower($searchUser) . '%']) $a->whereRaw('LOWER(email) LIKE ?', ['%' . strtolower($searchUser) . '%'])
->orWhereRaw('LOWER(nama_depan) LIKE ?', ['%' . strtolower($searchUser) . '%']) ->orWhereRaw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?", ['%' . strtolower($searchUser) . '%'])
->orWhereRaw('LOWER(nama_belakang) LIKE ?', ['%' . strtolower($searchUser) . '%'])
->orWhereRaw('LOWER(status) LIKE ?',['%'.strtolower($searchUser).'%']); ->orWhereRaw('LOWER(status) LIKE ?',['%'.strtolower($searchUser).'%']);
}); });
}else{
}
} }
$queryUser = User::from(DB::raw("({$subQuery->toSql()}) as tmp")) $queryUser = User::from(DB::raw("({$subQuery->toSql()}) as tmp"))

View File

@ -0,0 +1,24 @@
<?php
namespace App\Http\Controllers\Invoice;
use App\Http\Controllers\Controller;
use App\Models\Transaction;
use App\Models\TransactionDescription;
use App\Models\TransactionUser;
use Illuminate\Http\Request;
class InvoiceController extends Controller
{
public function getInvoice($id)
{
return view('invoice.invoice-transaction', [
'TransactionUser' => TransactionUser::HistoryTransaction(),
// 'transaction' => Transaction::findOrFail($id),
]);
}
public function exportInvoice(Request $request)
{
}
}

View File

@ -8,6 +8,9 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use App\Models\User; use App\Models\User;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
@ -44,7 +47,7 @@ class LoginController extends Controller
'email.email' => 'Alamat email harus berformat valid.', 'email.email' => 'Alamat email harus berformat valid.',
'password.required' => 'Password wajib diisi.', 'password.required' => 'Password wajib diisi.',
'password.min' => 'Password harus memiliki panjang minimal 8 karakter.', 'password.min' => 'Password harus memiliki panjang minimal 8 karakter.',
] ],
); );
if (Auth::attempt($credentials)) { if (Auth::attempt($credentials)) {
@ -55,17 +58,17 @@ class LoginController extends Controller
} else { } else {
return redirect()->intended('user'); return redirect()->intended('user');
} }
} else if(Auth::user()->status == 'Rejected'){ } elseif (Auth::user()->status == 'Rejected') {
Session::flash('message', 'Akun ditolak karena tidak memenuhi persyaratan'); Session::flash('message', 'Akun ditolak karena tidak memenuhi persyaratan');
return redirect()->back(); return redirect()->back();
} else { } else {
Session::flash('message', 'Akun tidak ditemukan atau sedang dalam pengajuan'); Session::flash('message', 'Akun tidak ditemukan atau sedang dalam pengajuan');
return redirect()->back(); return redirect()->back();
} }
}else{ } else {
return redirect() return redirect()
->back() ->back()
->withErrors($credentials) ->withErrors('Email atau password salah')
->onlyInput('email'); ->onlyInput('email');
} }
} }
@ -88,19 +91,88 @@ class LoginController extends Controller
public function register(Request $request) public function register(Request $request)
{ {
$nama_depan = $request->get('nama-depan'); $credentials = $request->validate(
$nama_belakang = $request->get('nama-belakang'); [
$tanggal_lahir = $request->get('tanggal-lahir'); 'nama_depan' => ['required'],
$new_password = $request->get('new-password'); 'nama_belakang' => ['required'],
'nik' => ['required', 'min:16'],
'new_email' => ['required', 'email'],
'email_verification' => ['required'],
'gender' => ['required'],
'tanggal_lahir' => [
'required',
function ($attribute, $value, $fail) {
$minimumBirthYear = Carbon::now()
->subYears(18)
->format('Y');
if ($value > $minimumBirthYear) {
$fail('Anda harus berusia minimal 18 tahun.');
}
},
],
'alamat' => ['required'],
'village_code' => ['required'],
'new_password' => ['required', 'min:8'],
'confirm_password' => ['required', 'same:new_password'],
'kode_verifikasi' => ['required', 'same:email_verification'],
'wajah' => ['required'],
'ktp' => ['required'],
'nohp' => ['required', 'min:10'],
'verification_status' => ['in:true'],
],
[
'nama_depan.required' => 'Nama depan harus diisi.',
'nama_belakang.required' => 'Nama belakang harus diisi. Jika nama hanya satu kata, boleh ketik ulang.',
'nik.required' => 'Nomor NIK harus diisi.',
'nik.min' => 'Nomor NIK harus 16 angka.',
'new_email.required' => 'Email harus diisi.',
'new_email.email' => 'Email harus memiliki @.',
'email_verification.required' => 'Email harus diverifikasi.',
'gender.required' => 'Jenis kelamin harus diisi.',
'tanggal_lahir.required' => 'Tanggal lahir harus diisi.',
'alamat.required' => 'Alamat harus diisi',
'village_code.required' => 'Alamat harus diisi.',
'new_password.required' => 'Password harus diisi.',
'new_password.min' => 'Password minimal 8 karakter.',
'confirm_password.required' => 'Konfirmasi password harus diisi.',
'confirm_password.same' => 'Konfirmasi password harus sama dengan password.',
'kode_verifikasi.required' => 'Silahkan verifikasi email.',
'kode_verifikasi.same' => 'Kode verifikasi tidak sama. Coba masukkan yang benar.',
'wajah.required' => 'Silahkan ambil foto wajah anda.',
'ktp.required' => 'Silahkan ambil foto ktp anda.',
'nohp.required' => 'No HP harus dimasukan.',
'nohp.min' => 'No HP memiliki minimal 10 angka.',
'verification_status.boolean' => 'Masa berlaku kode verifikasi sudah habis. Silahkan lakukan verifikasi lagi.',
],
);
$nama_depan = $request->get('nama_depan');
$nama_belakang = $request->get('nama_belakang');
$tanggal_lahir = $request->get('tanggal_lahir');
$new_password = $request->get('new_password');
$nik = $request->get('nik'); $nik = $request->get('nik');
$email = $request->get('email'); $email = $request->get('new_email');
$nohp = $request->get('nohp'); $nohp = $request->get('nohp');
$alamat = $request->get('alamat'); $alamat = $request->get('alamat');
$foto_ktp = ''; $foto_ktp = '';
$foto_wajah = ''; $foto_wajah = '';
$persentase_kemiripan = 0; $persentase_kemiripan = 0;
$gender = $request->get('gender'); $gender = $request->get('gender');
$kode_kelurahan = $request->get('kode-kelurahan'); $kode_kelurahan = $request->get('village_code');
$ktpBase64 = $request->request->get('ktp'); $ktpBase64 = $request->request->get('ktp');
$wajahBase64 = $request->request->get('wajah'); $wajahBase64 = $request->request->get('wajah');
@ -121,41 +193,41 @@ class LoginController extends Controller
//OCR //OCR
try { try {
$fotoKTP = public_path('storage/foto-ktp/' . $foto_ktp); // $fotoKTP = public_path('storage/foto-ktp/' . $foto_ktp);
$image = Image::make($fotoKTP); // $image = Image::make($fotoKTP);
$image->greyscale(); // Convert to grayscale // $image->greyscale(); // Convert to grayscale
$image->contrast(10); // Increase contrast, adjust the value as needed // $image->contrast(10); // Increase contrast, adjust the value as needed
$preprocessedfotoKTP = public_path('storage/preprocessed/preprocessed_image.jpg'); // $preprocessedfotoKTP = public_path('storage/preprocessed/preprocessed_image.jpg');
$image->save($preprocessedfotoKTP); // $image->save($preprocessedfotoKTP);
$result = (new TesseractOCR($preprocessedfotoKTP))->run(); // $result = (new TesseractOCR($preprocessedfotoKTP))->run();
// (5) Normalize // (5) Normalize
$lines = explode("\n", $result); // $lines = explode("\n", $result);
$namaOCR = ''; // $namaOCR = '';
$nikOCR = ''; // $nikOCR = '';
$nikInputan = $nik; // $nikInputan = $nik;
$namaInputan = $nama_depan . ' ' . $nama_belakang; // $namaInputan = $nama_depan . ' ' . $nama_belakang;
foreach ($lines as $line) { // foreach ($lines as $line) {
// Mencari NIK // // Mencari NIK
if (strpos($line, $nikInputan) !== false) { // if (strpos($line, $nikInputan) !== false) {
$nikOCR = preg_replace('/[^0-9]/', '', $line); // $nikOCR = preg_replace('/[^0-9]/', '', $line);
} // }
// Mencari nama // // Mencari nama
if (strpos($line, $namaInputan) !== false) { // if (strpos($line, $namaInputan) !== false) {
$namaOCR = trim(substr($line, strpos($line, ':') + 1)); // $namaOCR = trim(substr($line, strpos($line, ':') + 1));
} // }
} // }
//Selesai //Selesai
$persentase_kemiripan = (similar_text($nikInputan, $nikOCR, $percent) + similar_text($namaOCR, $namaOCR, $percent)) / 2; // $persentase_kemiripan = (similar_text($nikInputan, $nikOCR, $percent) + similar_text($namaOCR, $namaOCR, $percent)) / 2;
// $status = 'Progress'; // $status = 'Progress';
// if (similar_text($nikInputan, $nikOCR, $percent) >= 70 && similar_text($namaOCR, $namaOCR, $percent) >= 70) { // if (similar_text($nikInputan, $nikOCR, $percent) >= 70 && similar_text($namaOCR, $namaOCR, $percent) >= 70) {
@ -163,17 +235,12 @@ class LoginController extends Controller
// } else { // } else {
// $status = 'Progress'; // $status = 'Progress';
// } // }
} catch (\Exception $e) {
// $status = 'Progress';
}
//OCR
//Deteksi wajah belum DB::beginTransaction();
$password = Hash::make($new_password); $password = Hash::make($new_password);
$result = User::create([ $result = User::create([
'id' => Uuid::uuid4(),
'nama_depan' => $nama_depan, 'nama_depan' => $nama_depan,
'nama_belakang' => $nama_belakang, 'nama_belakang' => $nama_belakang,
'tanggal_lahir' => $tanggal_lahir, 'tanggal_lahir' => $tanggal_lahir,
@ -192,22 +259,27 @@ class LoginController extends Controller
'remember_token' => Str::random(10), 'remember_token' => Str::random(10),
]); ]);
if ($result) { DB::commit();
return response()->json([ return response()->json([
'status' => true, 'status' => true,
'message' => 'Akun anda sudah terdaftar dan butuh verifikasi hingga maksimal 1 hari kerja', 'message' => 'Akun anda sudah terdaftar dan butuh verifikasi hingga maksimal 1 hari kerja',
]); ]);
} else { } catch (\Exception $e) {
DB::rollBack();
Log::error($e->getMessage());
return response()->json([ return response()->json([
'status' => false, 'status' => false,
'message' => 'Akun anda gagal terdaftar. Coba lagi! ' + $result, 'message' => 'Akun anda gagal terdaftar. Coba lagi!',
]); ]);
} }
} }
public function accountStatus($email) public function accountStatus(Request $request)
{ {
$result = User::where('email', $email)->get(); $result = User::where('email', $request->email)->get();
if ($result->isNotEmpty()) { if ($result->isNotEmpty()) {
return response()->json([ return response()->json([
'status' => true, 'status' => true,
@ -228,27 +300,27 @@ class LoginController extends Controller
return response()->json($data); return response()->json($data);
} }
public function searchCity($code) public function searchCity(Request $request)
{ {
$data = City::where('province_code', $code) $data = City::where('province_code', $request->code)
->where('name', 'LIKE', '%' . strtoupper(request('q')) . '%') ->where('name', 'LIKE', '%' . strtoupper(request('q')) . '%')
->paginate(10); ->paginate(10);
return response()->json($data); return response()->json($data);
} }
public function searchDistrict($code) public function searchDistrict(Request $request)
{ {
$data = District::where('city_code', $code) $data = District::where('city_code', $$request->code)
->where('name', 'LIKE', '%' . strtoupper(request('q')) . '%') ->where('name', 'LIKE', '%' . strtoupper(request('q')) . '%')
->paginate(10); ->paginate(10);
return response()->json($data); return response()->json($data);
} }
public function searchVillage($code) public function searchVillage(Request $request)
{ {
$data = Village::where('district_code', $code) $data = Village::where('district_code', $request->code)
->where('name', 'LIKE', '%' . strtoupper(request('q')) . '%') ->where('name', 'LIKE', '%' . strtoupper(request('q')) . '%')
->paginate(10); ->paginate(10);

View File

@ -75,12 +75,12 @@ class UserContactController extends Controller
/** /**
* Remove the specified resource from storage. * Remove the specified resource from storage.
*/ */
public function destroy($id) public function destroy(Request $request)
{ {
try { try {
DB::beginTransaction(); DB::beginTransaction();
Contact::destroy($id); Contact::destroy($request->id);
DB::commit(); DB::commit();
@ -101,9 +101,9 @@ class UserContactController extends Controller
} }
} }
public function cekEmail($email) public function cekEmail(Request $request)
{ {
$result = User::where('email', $email) $result = User::where('email', $request->email)
->where('role', 'User') ->where('role', 'User')
->first(); ->first();
if ($result) { if ($result) {
@ -115,13 +115,13 @@ class UserContactController extends Controller
} else { } else {
return response()->json([ return response()->json([
'status' => false, 'status' => false,
'message' => 'Akun dengen email ' . $email . ' tersedia dan belum diverifikasi', 'message' => 'Akun dengen email ' . $request->email . ' tersedia dan belum diverifikasi',
]); ]);
} }
} else { } else {
return response()->json([ return response()->json([
'status' => false, 'status' => false,
'message' => 'Akun dengen email ' . $email . ' tidak tersedia atau ditolak', 'message' => 'Akun dengen email ' . $request->email . ' tidak tersedia atau ditolak',
]); ]);
} }
} }
@ -129,18 +129,16 @@ class UserContactController extends Controller
public function listContact(Request $request){ public function listContact(Request $request){
try{ try{
$subQuery = Contact::join('users','contacts.relasi_kontak','=','users.email') $subQuery = Contact::join('users','contacts.relasi_kontak','=','users.email')
->join('indonesia_villages','users.kode_kelurahan','=','indonesia_villages.code')
->join('indonesia_districts','indonesia_villages.district_code','=','indonesia_districts.code')
->join('indonesia_cities', 'indonesia_districts.city_code','=','indonesia_cities.code')
->join('indonesia_provinces','indonesia_cities.province_code','=','indonesia_provinces.code')
->where('pemilik_kontak', Auth::user()->email) ->where('pemilik_kontak', Auth::user()->email)
->select('contacts.id', 'users.email as email as email', 'users.nohp as nohp', 'users.alamat as alamat', DB::raw("CONCAT(users.nama_depan, ' ', users.nama_belakang) as nama_lengkap"),'indonesia_villages.name as kelurahan','indonesia_districts.name as kecamatan','indonesia_cities.name as kota','indonesia_provinces.name as provinsi'); ->select(
'contacts.id',
DB::raw("CONCAT(users.nama_depan, ' ', users.nama_belakang) as nama_lengkap"),
);
if($request->has('search') && !empty($request->search['value'])){ if($request->has('search') && !empty($request->search['value'])){
$searchContact = $request->search['value']; $searchContact = $request->search['value'];
$subQuery->where(function($a) use ($searchContact){ $subQuery->where(function($a) use ($searchContact){
$a->whereRaw('LOWER(users.nama_depan) LIKE ?',['%'.strtolower($searchContact).'%']) $a->whereRaw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?",['%'.strtolower($searchContact).'%']);
->orWhereRaw('LOWER(users.nama_belakang) LIKE ?',['%'.strtolower($searchContact).'%']);
}); });
} }
@ -153,21 +151,10 @@ class UserContactController extends Controller
return DataTables::of($queryContact) return DataTables::of($queryContact)
->addIndexColumn() ->addIndexColumn()
->addColumn('action', function($row){ ->addColumn('action', function($row){
$village = $row->kelurahan;
$city = $row->kota;
$district = $row->kecamatan;
$province = $row->provinsi;
$html_code = ' $html_code = '
<button class="btn btn-info open-detail-modal" data-toggle="modal" <button class="btn btn-info open-detail-modal" data-toggle="modal"
data-target="#modaldetail" id="detailContact" data-target="#modaldetail" id="detailContact"
data-nama="'.$row->nama_lengkap.'" data-id="'.$row->id.'">Detail</button>
data-nohp="'.$row->nohp.'"
data-alamat="'.$row->alamat.'"
data-email="'.$row->email.'"
data-province="'.$province.'"
data-city="'.$city.'"
data-district="'.$district.'"
data-village="'.$village.'">Detail</button>
<button class="btn btn-danger open-detail-modal" id="deleteContact" <button class="btn btn-danger open-detail-modal" id="deleteContact"
data-id="'.$row->id.'">Hapus</button> data-id="'.$row->id.'">Hapus</button>
'; ';
@ -182,4 +169,27 @@ class UserContactController extends Controller
return response()->json(['success' => false, 'message' => 'Terjadi Kesalahan pada sisi server']); return response()->json(['success' => false, 'message' => 'Terjadi Kesalahan pada sisi server']);
} }
} }
public function detailContact(Request $request){
$data = Contact::join('users','contacts.relasi_kontak','=','users.email')
->join('indonesia_villages','users.kode_kelurahan','=','indonesia_villages.code')
->join('indonesia_districts','indonesia_villages.district_code','=','indonesia_districts.code')
->join('indonesia_cities','indonesia_districts.city_code','=','indonesia_cities.code')
->join('indonesia_provinces','indonesia_cities.province_code','=','indonesia_provinces.code')
->where('contacts.id',$request->id)
->select(
DB::raw("CONCAT(users.nama_depan,' ',users.nama_belakang) as nama_lengkap"),
'users.alamat',
'users.email',
'users.nohp',
'indonesia_villages.name as kelurahan',
'indonesia_districts.name as kecamatan',
'indonesia_cities.name as kota',
'indonesia_provinces.name as provinsi'
)
->first();
return response()->json([
'data' => $data
]);
}
} }

View File

@ -111,15 +111,38 @@ class UserRefundController extends Controller
public function listRefund(Request $request) public function listRefund(Request $request)
{ {
try{
$subQuery = Refund::join('transactions', 'refunds.transaction_id', '=', 'transactions.id') $subQuery = Refund::join('transactions', 'refunds.transaction_id', '=', 'transactions.id')
->select('refunds.id as id', 'refunds.total as total', 'refunds.due_date as tanggal_pengajuan', 'refunds.status as status','transactions.nama_barang as nama_barang', 'transactions.penjual as penjual', 'transactions.batas_konfirmasi_transaksi as batas_konfirmasi'); ->join('users as s', 'transactions.penjual','=','s.email')
->select(
'refunds.id',
'refunds.total',
'refunds.due_date',
'refunds.created_at',
'refunds.status',
'transactions.nama_barang',
DB::raw("CONCAT(s.nama_depan,' ',s.nama_belakang) as nama_penjual"),
);
if($request->has('search') && !empty($request->search['value'])){ if($request->has('search') && !empty($request->search['value'])){
$searchRefund = $request->search['value']; $searchRefund = $request->search['value'];
if(!is_numeric($searchRefund)){
$subQuery->where(function($a) use ($searchRefund){ $subQuery->where(function($a) use ($searchRefund){
$a->whereRaw('LOWER(transactions.nama_barang) LIKE ?',['%'.strtolower($searchRefund).'%']) $a->whereRaw("LOWER(CONCAT(s.nama_depan,' ',s.nama_belakang)) LIKE ?",['%'.strtolower($searchRefund).'%'])
->orWhereRaw('LOWER(transactions.penjual) LIKE ?',['%'.strtolower($searchRefund).'%']); ->orWhereRaw('LOWER(transactions.nama_barang) LIKE ?',['%'.strtolower($searchRefund).'%'])
->orWhereRaw('LOWER(refunds.status) LIKE ?',['%'.strtolower($searchRefund).'%']);
}); });
}else{
$subQuery->where(function($a) use ($searchRefund){
$a->whereDay('refunds.created_at', '=', $searchRefund)
->orWhereMonth('refunds.created_at', '=', $searchRefund)
->orWhereYear('refunds.created_at', '=', $searchRefund)
->orWhereDay('refunds.due_date', '=', $searchRefund)
->orWhereMonth('refunds.due_date', '=', $searchRefund)
->orWhereYear('refunds.due_date', '=', $searchRefund)
->orWhere('refunds.total', '=', $searchRefund);
});
}
} }
$queryRefund = Refund::from(DB::raw("({$subQuery->toSql()}) as tmp")) $queryRefund = Refund::from(DB::raw("({$subQuery->toSql()}) as tmp"))
@ -130,7 +153,7 @@ class UserRefundController extends Controller
if ($request->ajax()) { if ($request->ajax()) {
return DataTables::of($queryRefund) return DataTables::of($queryRefund)
->addIndexColumn() ->addIndexColumn()
->addColumn('aksi', function ($row) { ->addColumn('action', function ($row) {
$url = route('user-refund.show', ['id' => $row->id]); $url = route('user-refund.show', ['id' => $row->id]);
$html_code = ' $html_code = '
<div class="btn-group"> <div class="btn-group">
@ -147,8 +170,13 @@ class UserRefundController extends Controller
</div>'; </div>';
return $html_code; return $html_code;
}) })
->rawColumns(['aksi']) ->rawColumns(['action'])
->make(true); ->make(true);
} }
}catch(Throwable $e){
Log::error($e->getMessage());
return response()->json(['success' => false, 'message' => 'Terjadi Kesalahan pada sisi server']);
}
} }
} }

View File

@ -30,11 +30,7 @@ class UserTransactionController extends Controller
public function indexPembeli() public function indexPembeli()
{ {
return view('user.transaction.pembeli.index', [ return view('user.transaction.pembeli.index');
'transactions' => Transaction::where('pembeli', Auth::user()->email)
->latest()
->get(),
]);
} }
/** /**
@ -42,11 +38,7 @@ class UserTransactionController extends Controller
*/ */
public function indexPenjual() public function indexPenjual()
{ {
return view('user.transaction.penjual.index', [ return view('user.transaction.penjual.index');
'transactions' => Transaction::where('penjual', Auth::user()->email)
->latest()
->get(),
]);
} }
public function show($id) public function show($id)
@ -84,12 +76,6 @@ class UserTransactionController extends Controller
/** /**
* Store a newly created resource in storage. * Store a newly created resource in storage.
*/ */
public function invoiceTransaction()
{
return view('user.transaction.pembeli.invoice-transaction', [
'TransactionUser' => TransactionUser::HistoryTransaction(),
]);
}
public function store(Request $request) public function store(Request $request)
{ {
@ -546,11 +532,11 @@ class UserTransactionController extends Controller
$result = json_decode($response->body(), true); $result = json_decode($response->body(), true);
$code = substr($result['status_code'], 0, 1); if (in_array($result['status_code'], ['412','401'])) {
if ($code == '4') {
return response()->json([ return response()->json([
'status' => false, 'status' => false,
'message' => 'Transaksi gagal.', 'message' => 'Transaksi gagal.',
'data' => $result
]); ]);
} else { } else {
try { try {
@ -558,7 +544,7 @@ class UserTransactionController extends Controller
Transaction::where('id', $request->id)->update([ Transaction::where('id', $request->id)->update([
'status_transaksi' => 'failure', 'status_transaksi' => 'failure',
'status_pembayaran' => $result['transaction_status'], 'status_pembayaran' => 'cancel'
]); ]);
TransactionDescription::create([ TransactionDescription::create([
@ -825,18 +811,35 @@ class UserTransactionController extends Controller
public function listPembeli(Request $request) public function listPembeli(Request $request)
{ {
$subQuery = transaction::join('transactions', 'refunds.total', '=', 'transactions.id') try{
->select('transactions.id', 'transactions.penjual as penjual', 'transactions.nama_barang as nama_barang', 'refunds.total as total', 'transactions.tanggal_transaksi', 'refunds.due_date as date', 'transactions.status_transaksi as status'); $subQuery = Transaction::join('users','transactions.penjual','=','users.email')
->where('transactions.pembeli',auth()->user()->email)
->select(
'transactions.id',
DB::raw("CONCAT(users.nama_depan,' ',users.nama_belakang) as nama_penjual"),
'transactions.nama_barang',
'transactions.total_harga',
'transactions.created_at',
'transactions.status_transaksi',
'transactions.token'
);
if($request->has('search') && !empty($request->search['value'])){ if($request->has('search') && !empty($request->search['value'])){
$searchPembeli = $request->search['value']; $searchPembeli = $request->search['value'];
if(!is_numeric($searchPembeli)){
$subQuery->where(function($a) use ($searchPembeli){ $subQuery->where(function($a) use ($searchPembeli){
$a->whereRaw('LOWER(transactions.penjual) LIKE ?',['%'.strtolower($searchPembeli).'%']) $a->whereRaw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?",['%'.strtolower($searchPembeli).'%'])
->orWhereRaw('LOWER(transactions.nama_barang) LIKE ?',['%'.strtolower($searchPembeli).'%']); ->orWhereRaw('LOWER(transactions.nama_barang) LIKE ?',['%'.strtolower($searchPembeli).'%'])
->orWhereRaw('LOWER(transactions.status_transaksi) LIKE ?',['%'.strtolower($searchPembeli).'%']);
});
}else{
$subQuery->where(function($a) use ($searchPembeli){
$a->where('transactions.total_harga','=',$searchPembeli);
}); });
} }
}
$queryPembeli = transaction::from(DB::raw("({$subQuery->toSql()}) as tmp")) $queryPembeli = Transaction::from(DB::raw("({$subQuery->toSql()}) as tmp"))
->mergeBindings($subQuery->getQuery()) // Menggabungkan binding parameters ->mergeBindings($subQuery->getQuery()) // Menggabungkan binding parameters
->select('*') ->select('*')
->get(); ->get();
@ -844,8 +847,9 @@ class UserTransactionController extends Controller
if ($request->ajax()) { if ($request->ajax()) {
return DataTables::of($queryPembeli) return DataTables::of($queryPembeli)
->addIndexColumn() ->addIndexColumn()
->addColumn('aksi', function ($row) { ->addColumn('action', function ($row) {
$url = route('user-pembeli.show', ['id' => $row->id]); $url = route('user-pembeli.show', ['id' => $row->id]);
$invoice = route('invoice.get',['id' => $row->id]);
$html_code = ' $html_code = '
<div class="btn-group"> <div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle" <button type="button" class="btn btn-primary dropdown-toggle"
@ -857,14 +861,163 @@ class UserTransactionController extends Controller
<li><a class="dropdown-item" <li><a class="dropdown-item"
href="'.$url.'">Detail</a> href="'.$url.'">Detail</a>
</li> </li>
<li><a class="dropdown-item"
href="'.$invoice.'">Invoice</a>
</li>
<li><a class="dropdown-item" data-toggle="modal"
data-target="#modalTracking"
data-id="'.$row->id.'"
href="#">Tracking</a>
</li>';
if($row->status_transaksi == 'created'){
$html_code .= '
<li><a class="dropdown-item" id="bayar"
data-id="'.$row->id.'"
data-token="'.$row->token.'"
href="#">Bayar</a>
</li>
<li><a href="#" data-id="'.$row->id.'"
id="cancel" class="dropdown-item">Batal</a>
</li>
';
}
if($row->status_transaksi == 'sent'){
$html_code .= '
<li><a class="dropdown-item" data-toggle="modal"
data-target="#modalFinish"
data-id="'.$row->id.'"
href="#">Selesaikan</a>
</li>
';
}
$html_code .= '
</ul> </ul>
</div>'; </div>';
return $html_code; return $html_code;
}) })
->rawColumns(['aksi']) ->rawColumns(['action'])
->make(true); ->make(true);
} }
}catch(Throwable $e){
Log::error($e->getMessage());
return response()->json(['success' => false, 'message' => 'Terjadi Kesalahan pada sisi server']);
} }
}
public function listPenjual(Request $request){
try{
$subQuery = Transaction::join('users','transactions.pembeli','=','users.email')
->where('transactions.penjual',auth()->user()->email)
->select(
'transactions.id',
DB::raw("CONCAT(users.nama_depan,' ',users.nama_belakang) as nama_pembeli"),
'transactions.nama_barang',
'transactions.total_harga',
'transactions.created_at',
'transactions.status_transaksi',
);
if($request->has('search') && !empty($request->search['value'])){
$searchPenjual = $request->search['value'];
if(!is_numeric($searchPenjual)){
$subQuery->where(function($a) use ($searchPenjual){
$a->whereRaw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?",['%'.strtolower($searchPenjual).'%'])
->orWhereRaw('LOWER(transactions.nama_barang) LIKE ?',['%'.strtolower($searchPenjual).'%'])
->orWhereRaw('LOWER(transactions.status_transaksi) LIKE ?',['%'.strtolower($searchPenjual).'%']);
});
}else{
$subQuery->where(function($a) use ($searchPenjual){
$a->whereDay('transactions.created_at', '=', $searchPenjual)
->orWhereMonth('transactions.created_at', '=', $searchPenjual)
->orWhereYear('transactions.created_at', '=', $searchPenjual)
->orWhere('transactions.total_harga', '=', $searchPenjual);
});
}
}
$queryPenjual = Transaction::from(DB::raw("({$subQuery->toSql()}) as tmp"))
->mergeBindings($subQuery->getQuery()) // Menggabungkan binding parameters
->select('*')
->get();
if ($request->ajax()) {
return DataTables::of($queryPenjual)
->addIndexColumn()
->addColumn('action', function ($row) {
$url = route('user-penjual.show', ['id' => $row->id]);
$invoice = route('invoice.get',['id' => $row->id]);
$html_code = '
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
....
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item"
href="'.$url.'">Detail</a>
</li>
<li><a class="dropdown-item"
href="'.$invoice.'">Invoice</a>
</li>
<li><a class="dropdown-item" data-toggle="modal"
data-target="#modalTracking"
data-id="'.$row->id.'"
href="#">Tracking</a>
</li>';
if($row->status_transaksi == 'success'){
$html_code .= '
<li><a class="dropdown-item" id="processTransaction"
data-id="'.$row->id.'"
href="#">Proses Transaksi</a>
</li>
';
}
if($row->status_transaksi == 'progress'){
$html_code .= '
<li><a class="dropdown-item" id="sendOrder"
data-id="'.$row->id.'"
href="#">Kirim barang</a>
</li>
';
}
if($row->status_transaksi == 'sent'){
$html_code .= '
<li><a class="dropdown-item" data-toggle="modal"
data-target="#modalOrderSent"
data-id="'.$row->id.'"
href="#">Barang sudah sampai</a>
</li>
';
}
$html_code .= '
</ul>
</div>';
return $html_code;
})
->rawColumns(['action'])
->make(true);
}
}catch(Throwable $e){
Log::error($e->getMessage());
return response()->json(['success' => false, 'message' => 'Terjadi Kesalahan pada sisi server']);
}
}
public function transactionTracking(Request $request){
$data = TransactionDescription::where('transaction_id', $request->id)->get();
return response()->json([
'data' => $data
]);
}
} }

View File

@ -20,7 +20,6 @@ class User extends Authenticatable
* @var array<int, string> * @var array<int, string>
*/ */
protected $fillable = [ protected $fillable = [
'id',
'nama_depan', 'nama_depan',
'nama_belakang', 'nama_belakang',
'tanggal_lahir', 'tanggal_lahir',

View File

@ -500,7 +500,10 @@ $(document).ready(function () {
$("#selectCity").select2({ $("#selectCity").select2({
placeholder: "Pilih Kabupaten/Kota", placeholder: "Pilih Kabupaten/Kota",
ajax: { ajax: {
url: "/cari-kota/" + code, url: "/cari-kota/",
data: {
code: code,
},
processResults: function ({ data }) { processResults: function ({ data }) {
return { return {
results: $.map(data, function (item) { results: $.map(data, function (item) {
@ -529,7 +532,10 @@ $(document).ready(function () {
$("#selectDistrict").select2({ $("#selectDistrict").select2({
placeholder: "Pilih Kecamatan", placeholder: "Pilih Kecamatan",
ajax: { ajax: {
url: "/cari-kecamatan/" + code, // Isi dengan URL yang sesuai url: "/cari-kecamatan/",
data: {
code: code,
}, // Isi dengan URL yang sesuai
processResults: function ({ data }) { processResults: function ({ data }) {
return { return {
results: $.map(data, function (item) { results: $.map(data, function (item) {
@ -558,7 +564,10 @@ $(document).ready(function () {
$("#selectVillage").select2({ $("#selectVillage").select2({
placeholder: "Pilih Kelurahan", placeholder: "Pilih Kelurahan",
ajax: { ajax: {
url: "/cari-kelurahan/" + code, // Isi dengan URL yang sesuai url: "/cari-kelurahan/",
data: {
code: code,
}, // Isi dengan URL yang sesuai
processResults: function ({ data }) { processResults: function ({ data }) {
return { return {
results: $.map(data, function (item) { results: $.map(data, function (item) {

View File

@ -13,7 +13,7 @@
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped" id="table-refund"> <table class="table table-striped" id="table-refund" style="font-size: 16px;">
<thead> <thead>
<tr> <tr>
<th class="text-center"> <th class="text-center">
@ -39,6 +39,7 @@
</div> </div>
</section> </section>
</div> </div>
@include('admin.refund.modal-keterangan-status')
<script> <script>
$(function() { $(function() {
let listRefund = $('#table-refund').DataTable({ let listRefund = $('#table-refund').DataTable({
@ -49,79 +50,102 @@
data: 'DT_RowIndex', data: 'DT_RowIndex',
name: 'DT_RowIndex', name: 'DT_RowIndex',
orderable: false, orderable: false,
searchable: true, searchable: false,
className: 'text-center'
}, },
{ {
data: 'pembeli', data: 'pembeli',
name: 'pembeli', name: 'pembeli',
className: 'text-center'
}, },
{ {
data: 'nama_barang', data: 'nama_barang',
name: 'nama_barang', name: 'nama_barang',
className: 'text-center'
}, },
{ {
data: 'penjual', data: 'penjual',
name: 'penjual', name: 'penjual',
className: 'text-center'
}, },
{ {
data: 'total', data: 'total',
name: 'total', name: 'total',
render: function(data, type, row) {
// Memastikan bahwa ini adalah tampilan (bukan sorting atau filtering)
if (type === 'display') {
// Mengubah nilai 'total' menjadi format mata uang Indonesia
return new Intl.NumberFormat('id-ID', {
style: 'currency',
currency: 'IDR'
}).format(data);
}
// Untuk tipe yang lain, kembalikan nilai asli
return data;
},
className: 'text-center'
}, },
{ {
data: 'created_at', data: 'created_at',
name: 'created_at', name: 'created_at',
render: function(data, type, row) { render: function(data, type, row) {
if (type == 'display') { if (type === 'display') {
var date = new Date(data); var date = new Date(data);
var formattedDate = date.toLocaleDateString('id-ID', { var day = date.getDate();
year: '2-digit', var month = date.toLocaleString('id-ID', {
month: '2-digit', month: 'short'
day: '2-digit'
}); });
var year = date.getFullYear();
var formattedDate = day + ' ' + month + ' ' + year;
return formattedDate; return formattedDate;
} }
return data; return data;
} },
className: 'text-center'
}, },
{ {
data: 'due_date', data: 'due_date',
name: 'due_date', name: 'due_date',
render: function(data, type, row) { render: function(data, type, row) {
if (type == 'display') { if (type === 'display') {
var date = new Date(data); var date = new Date(data);
var formattedDate = date.toLocaleDateString('id-ID', { var day = date.getDate();
year: '2-digit', var month = date.toLocaleString('id-ID', {
month: '2-digit', month: 'short'
day: '2-digit'
}); });
var year = date.getFullYear();
var formattedDate = day + ' ' + month + ' ' + year;
return formattedDate; return formattedDate;
} }
return data; return data;
} },
className: 'text-center'
}, },
{ {
data: 'status', data: 'status',
render: function(data, type, row) { render: function(data, type, row) {
if (row.status == 'partial refund') { if (row.status == 'partial refund') {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-success">${row.status}</a>`; return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-success">${row.status.charAt(0).toUpperCase()}${row.status.slice(1)}</a>`;
} else if (row.status == 'pending') { } else if (row.status == 'pending') {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-warning">${row.status}</a>`; return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-warning">${row.status.charAt(0).toUpperCase()}${row.status.slice(1)}</a>`;
} else { } else {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-danger">${row.status}</a>`; return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-danger">${row.status.charAt(0).toUpperCase()}${row.status.slice(1)}</a>`;
} }
}, },
orderable: true, className: 'text-center'
searchable: true
}, },
{ {
data: 'action', data: 'action',
name: 'action', name: 'action',
orderable: false, orderable: false,
searchable: false searchable: false,
className: 'text-center'
} }
], ],
}) });
}) });
</script> </script>
@extends('admin.transaction.modal-keterangan-status') @extends('admin.transaction.modal-keterangan-status')
@endsection @endsection

View File

@ -0,0 +1,57 @@
<div class="modal fade" id="modalKeteranganStatus" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header d-flex justify-content-center">
<h3 class="modal-title fs-5" id="staticBackdropLabel">Keterangan Status Transaksi</h3>
</div>
<div class="modal-body">
<div class="mb-3">
<label class="badge badge-light">Created</label>
<p class="form-control">Transaksi baru telah dibuat oleh pembeli.</p>
</div>
<div class="mb-3">
<label class="badge badge-dark">Challenge</label>
<p class="form-control">Transaksi diduga penipuan dan perlu direview oleh admin.</p>
</div>
<div class="mb-3">
<label class="badge badge-info">Success</label>
<p class="form-control">Transaksi sukses dibayar dan akan dilanjutkan ke pihak penjual</p>
</div>
<div class="mb-3">
<label class="badge badge-danger">Failure</label>
<p class="form-control">Terjadi kesalahan pada transaksi seperti pembatalan, pembayaran sudah
kedaluwarsa atau kerusakan di server.</p>
</div>
<div class="mb-3">
<label class="badge badge-warning">Process</label>
<p class="form-control">Transaksi/pesanan pembeli sedang diproses oleh penjual.</p>
</div>
<div class="mb-3">
<label class="badge badge-warning">Sending</label>
<p class="form-control">Pesanan sedang dikirim oleh penjual.</p>
</div>
<div class="mb-3">
<label class="badge badge-warning">Sent</label>
<p class="form-control">Pesanan sudah sampai di tujuan pembeli.</p>
</div>
<div class="mb-3">
<label class="badge badge-success">Finished</label>
<p class="form-control">Transaksi telah selesai dan diselesaikan oleh pembeli.</p>
</div>
<div class="mb-3">
<label class="badge badge-danger">Refund</label>
<p class="form-control">Transaksi ditandai oleh pembeli untuk dikembalikan/retur dikarenakan
kemungkinan barang/jasa yang salah atau terjadi kerusakan.</p>
</div>
</div>
</div>
</div>
</div>

View File

@ -12,15 +12,19 @@
name: 'DT_RowIndex', name: 'DT_RowIndex',
orderable: false, orderable: false,
searchable: false, searchable: false,
className: 'text-center'
}, { }, {
data: 'bulan', data: 'bulan',
name: 'bulan', name: 'bulan',
className: 'text-center'
}, { }, {
data: 'tahun', data: 'tahun',
name: 'tahun', name: 'tahun',
className: 'text-center'
}, { }, {
data: 'persentase', data: 'persentase',
name: 'persentase' name: 'persentase',
className: 'text-center'
}, { }, {
data: 'status', data: 'status',
render: function(data, type, row) { render: function(data, type, row) {
@ -30,13 +34,13 @@
return `<div class="badge badge-danger">${row.status}</div>`; return `<div class="badge badge-danger">${row.status}</div>`;
} }
}, },
orderable: true, className: 'text-center'
searchable: true
}, { }, {
data: 'action', data: 'action',
name: 'action', name: 'action',
orderable: false, orderable: false,
searchable: false searchable: false,
className: 'text-center'
}] }]
}); });
@ -195,7 +199,7 @@
<a class="btn btn-success active" href="#" id="tambahModal">Tambah Data Kebijakan</a> <a class="btn btn-success active" href="#" id="tambahModal">Tambah Data Kebijakan</a>
</div> </div>
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped" id="table-setting"> <table class="table table-striped" id="table-setting" style="font-size: 16px;">
<thead> <thead>
<tr> <tr>
<th class="text-center"> <th class="text-center">

View File

@ -161,19 +161,18 @@
</div> </div>
</div> </div>
</div> </div>
@if ($transaction->status_transaksi == 'challenge')
<hr> <hr>
<div class="text-md-right"> <div class="text-md-center">
<div class="float-lg-left mb-lg-0 mb-3"> <p>Pada transaksi ini terjadi penipuan. Apakah anda ini menerima transaksi ini?</p>
<a href="/pembeli" class="btn btn-primary btn-icon icon-left"><i <button class="btn btn-primary btn-icon icon-left" data-id="{{ $transaction->id }}"
class="fas fa-credit-card" id="payment"></i> Process id="acceptTransaction"><i class="fas fa-credit-card" id="payment"></i>Terima
Payment</a> Transaksi</button>
<a href="/pembeli" class="btn btn-danger btn-icon icon-left"><i <button class="btn btn-danger btn-icon icon-left" data-id="{{ $transaction->id }}"
class="fas fa-times"></i> id="denyTransaction"><i class="fas fa-times"></i>
Cancel</a> Tolak Transaksi</button>
</div>
<button class="btn btn-warning btn-icon icon-left"><i class="fas fa-print"></i>
Print</button>
</div> </div>
@endif
</div> </div>
</div> </div>
</div> </div>
@ -181,4 +180,125 @@
</div> </div>
</section> </section>
</div> </div>
<script>
$(document).ready(function() {
$('#acceptTransaction').on('click', function() {
var id = $(this).data('id');
const csrfToken = $('meta[name="csrf-token"]').attr('content');
Swal.fire({
title: 'Terima Transaksi',
text: 'Apakah anda yakin untuk menerima transaksi ini?',
icon: 'question',
showCancelButton: true,
cancelButtonText: 'Tunggu, Lihat sebentar',
confirmButtonText: 'Ya, terima transaksi ini'
}).then((result) => {
if (result.isConfirmed) {
Swal.fire({
html: '<div class="mt-3"><lord-icon src="https://cdn.lordicon.com/etwtznjn.json" trigger="loop" colors="primary:#0ab39c,secondary:#405189" style="width:120px;height:120px"></lord-icon><div class="mt-4 pt-2 fs-15"><h4>Form Anda sedang diproses!</h4><p class="text-muted mx-4 mb-0">Mohon tunggu...</p></div></div>',
allowEscapeKey: false,
allowOutsideClick: false,
didOpen: () => {
Swal.showLoading();
}
});
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': csrfToken
}
});
$.ajax({
url: "{{ route('admin-transaction.accept-transaction') }}",
data: {
id: id
},
type: 'PUT',
success: function(response) {
Swal.fire({
title: response.status ? 'Berhasil' :
'Gagal',
text: response.message,
icon: response.status ? 'success' : 'error'
}).then(function() {
if (response.status) {
location.reload();
}
});
},
error: function(error) {
Swal.fire({
title: 'Gagal',
text: 'Terjadi kesalahan di server',
icon: 'error'
});
console.log(error);
}
});
}
});
});
$('#denyTransaction').on('click', function() {
var id = $(this).data('id');
const csrfToken = $('meta[name="csrf-token"]').attr('content');
Swal.fire({
title: 'Tolak Transaksi',
text: 'Apakah anda yakin untuk menolak transaksi ini?',
icon: 'question',
showCancelButton: true,
cancelButtonText: 'Tunggu, Lihat sebentar',
confirmButtonText: 'Ya, tolak transaksi ini'
}).then((result) => {
if (result.isConfirmed) {
Swal.fire({
html: '<div class="mt-3"><lord-icon src="https://cdn.lordicon.com/etwtznjn.json" trigger="loop" colors="primary:#0ab39c,secondary:#405189" style="width:120px;height:120px"></lord-icon><div class="mt-4 pt-2 fs-15"><h4>Form Anda sedang diproses!</h4><p class="text-muted mx-4 mb-0">Mohon tunggu...</p></div></div>',
allowEscapeKey: false,
allowOutsideClick: false,
didOpen: () => {
Swal.showLoading();
}
});
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': csrfToken
}
});
$.ajax({
url: "{{ route('admin-transaction.deny-transaction') }}",
data: {
id: id
},
type: 'PUT',
success: function(response) {
Swal.fire({
title: response.status ? 'Berhasil' :
'Gagal',
text: response.message,
icon: response.status ? 'success' : 'error'
}).then(function() {
if (response.status) {
location.reload();
}
});
},
error: function(error) {
Swal.fire({
title: 'Gagal',
text: 'Terjadi kesalahan di server',
icon: 'error'
});
console.log(error);
}
});
}
});
});
});
</script>
@endsection @endsection

View File

@ -13,7 +13,7 @@
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped" id="table-4"> <table class="table table-striped" id="table-transaction" style="font-size: 16px;">
<thead> <thead>
<tr> <tr>
<th class="text-center"> <th class="text-center">
@ -24,80 +24,148 @@
<th>Penjual</th> <th>Penjual</th>
<th>Total</th> <th>Total</th>
<th>Tanggal Transaksi</th> <th>Tanggal Transaksi</th>
<th>Tanggal Update</th>
<th>Status</th> <th>Status</th>
<th>Aksi</th> <th>Aksi</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@foreach ($transactions as $transaction)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $transaction->nama_barang }}</td>
<td>{{ $transaction->data_pembeli->nama_depan . ' ' . $transaction->data_pembeli->nama_belakang }}
</td>
<td>{{ $transaction->data_penjual->nama_depan . ' ' . $transaction->data_penjual->nama_belakang }}
</td>
<td>Rp {{ number_format($transaction->total_bayar, 2, ',', '.') }}</td>
<td>{{ $transaction->created_at }}</td>
<td>{{ $transaction->updated_at }}</td>
<td><a href="#" data-toggle="modal" data-target="#modalKeteranganStatus"
class="badge {{ in_array($transaction->status_transaksi, ['created'])
? 'badge-light'
: (in_array($transaction->status_transaksi, ['success'])
? 'badge-info'
: (in_array($transaction->status_transaksi, ['process', 'sending', 'sent'])
? 'badge-warning'
: (in_array($transaction->status_transaksi, ['cancel', 'failure', 'refund'])
? 'badge-danger'
: ($transaction->status_transaksi == 'finished'
? 'badge-success'
: 'bagde-dark')))) }}">{{ ucwords($transaction->status_transaksi) }}</a>
</td>
<td>
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
....
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item"
href="{{ route('admin-transaction.show', $transaction->id) }}">Detail</a>
</li>
@if (!$transaction->transactionDescription->isEmpty())
<li><a class="dropdown-item" data-toggle="modal"
data-target="#modalTracking"
data-transaction="{{ $transaction->transactionDescription }}">Tracking</a>
</li>
@endif
</ul>
</div>
</td>
</tr>
@endforeach
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</section>
</div> </div>
@include('admin.transaction.modal-tracking') @include('admin.transaction.modal-tracking')
@include('admin.transaction.modal-keterangan-status') @include('admin.transaction.modal-keterangan-status')
<script> <script>
$(document).ready(function() { $(document).ready(function() {
let listTransaction = $('#table-transaction').DataTable({
processing: true,
serverSide: true,
ajax: "{{ route('admin-transaction.list-transaction') }}",
columns: [{
data: 'DT_RowIndex',
name: 'DT_RowIndex',
orderable: false,
searchable: false,
className: 'text-center'
}, {
data: 'nama_barang',
name: 'nama_barang',
className: 'text-center'
}, {
data: 'nama_pembeli',
name: 'nama_pembeli',
className: 'text-center'
}, {
data: 'nama_penjual',
name: 'nama_penjual',
className: 'text-center'
}, {
data: 'total_harga',
name: 'total_harga',
render: function(data, type, row) {
// Memastikan bahwa ini adalah tampilan (bukan sorting atau filtering)
if (type === 'display') {
// Mengubah nilai 'total' menjadi format mata uang Indonesia
return new Intl.NumberFormat('id-ID', {
style: 'currency',
currency: 'IDR'
}).format(data);
}
// Untuk tipe yang lain, kembalikan nilai asli
return data;
},
className: 'text-center'
}, {
data: 'created_at',
name: 'created_at',
render: function(data, type, row) {
if (type === 'display') {
var date = new Date(data);
var day = date.getDate();
var month = date.toLocaleString('id-ID', {
month: 'short'
});
var year = date.getFullYear();
var formattedDate = day + ' ' + month + ' ' + year;
return formattedDate;
}
return data;
},
className: 'text-center'
}, {
data: 'status_transaksi',
name: 'status_transaksi',
render: function(data, type, row) {
if (row.status_transaksi == 'created') {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-light">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
} else if (row.status_transaksi == 'success') {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-info">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
} else if (['process', 'sending', 'sent'].includes(row
.status_transaksi)) {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-warning">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
} else if (['cancel', 'failure', 'refund'].includes(row
.status_transaksi)) {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-danger">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
} else if (row.status_transaksi == 'finished') {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-success">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
} else {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-dark">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
}
},
className: 'text-center'
}, {
data: 'action',
name: 'action',
orderable: false,
searchable: false,
className: 'text-center'
}]
});
$('#modalTracking').on('show.bs.modal', function(event) { $('#modalTracking').on('show.bs.modal', function(event) {
var triggerLink = $(event.relatedTarget); // Tombol yang memicu modal var triggerLink = $(event.relatedTarget); // Tombol yang memicu modal
var transactionDatas = triggerLink.data('transaction'); // Ambil data dari tombol var transactionId = triggerLink.data('id'); // Ambil data dari tombol
const csrfToken = $('meta[name="csrf-token"]').attr('content');
var modal = $(this);
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': csrfToken
}
});
$.ajax({
url: "{{ route('admin.transaction-tracking') }}",
type: 'GET',
data: {
id: transactionId
},
success: function(response) {
var transactionDatas = response.data;
// Buat variabel untuk menyimpan HTML aktivitas // Buat variabel untuk menyimpan HTML aktivitas
transactionDatas = transactionDatas.reverse();
var activitiesHtml = ''; var activitiesHtml = '';
// Periksa apakah ada data transaksi // Periksa apakah ada data transaksi
if (transactionDatas && transactionDatas.length > 0) { if (transactionDatas && transactionDatas.length > 0) {
transactionDatas = transactionDatas.reverse();
// Iterasi melalui data transaksi dan tambahkan ke activitiesHtml // Iterasi melalui data transaksi dan tambahkan ke activitiesHtml
$.each(transactionDatas, function(index, transactionDescription) { $.each(transactionDatas, function(index, transactionDescription) {
activitiesHtml += ` activitiesHtml += `
@ -132,8 +200,19 @@
} }
// Menampilkan data dalam modal // Menampilkan data dalam modal
var modal = $(this);
modal.find('.activities').html(activitiesHtml); modal.find('.activities').html(activitiesHtml);
},
error: function(error) {
Swal.fire({
title: 'Gagal',
text: 'Gagal mendapatkan data',
icon: 'error'
}).then(function() {
Swal.close();
modal.modal('hide');
});
}
});
}); });
}); });

View File

@ -186,6 +186,15 @@
cancelButtonText: 'Tidak' cancelButtonText: 'Tidak'
}).then((result) => { }).then((result) => {
if (result.isConfirmed) { if (result.isConfirmed) {
Swal.fire({
html: '<div class="mt-3"><lord-icon src="https://cdn.lordicon.com/etwtznjn.json" trigger="loop" colors="primary:#0ab39c,secondary:#405189" style="width:120px;height:120px"></lord-icon><div class="mt-4 pt-2 fs-15"><h4>Form Anda sedang diproses!</h4><p class="text-muted mx-4 mb-0">Mohon tunggu...</p></div></div>',
allowEscapeKey: false,
allowOutsideClick: false,
didOpen: () => {
Swal.showLoading();
}
});
$.ajaxSetup({ $.ajaxSetup({
headers: { headers: {
'X-CSRF-TOKEN': csrfToken 'X-CSRF-TOKEN': csrfToken
@ -193,8 +202,10 @@
}); });
$.ajax({ $.ajax({
url: "{{ route('admin-user.approve', ':id') }}".replace( url: "{{ route('admin-user.approve') }}",
':id', id), data: {
id: id
},
type: 'PUT', type: 'PUT',
success: function(response) { success: function(response) {
Swal.fire({ Swal.fire({
@ -234,6 +245,15 @@
cancelButtonText: 'Tidak' cancelButtonText: 'Tidak'
}).then((result) => { }).then((result) => {
if (result.isConfirmed) { if (result.isConfirmed) {
Swal.fire({
html: '<div class="mt-3"><lord-icon src="https://cdn.lordicon.com/etwtznjn.json" trigger="loop" colors="primary:#0ab39c,secondary:#405189" style="width:120px;height:120px"></lord-icon><div class="mt-4 pt-2 fs-15"><h4>Form Anda sedang diproses!</h4><p class="text-muted mx-4 mb-0">Mohon tunggu...</p></div></div>',
allowEscapeKey: false,
allowOutsideClick: false,
didOpen: () => {
Swal.showLoading();
}
});
$.ajaxSetup({ $.ajaxSetup({
headers: { headers: {
'X-CSRF-TOKEN': csrfToken 'X-CSRF-TOKEN': csrfToken
@ -241,8 +261,10 @@
}); });
$.ajax({ $.ajax({
url: "{{ route('admin-user.deny', ':id') }}".replace( url: "{{ route('admin-user.deny') }}",
':id', id), data: {
id: id
}
type: 'PUT', type: 'PUT',
success: function(response) { success: function(response) {
Swal.fire({ Swal.fire({

View File

@ -13,11 +13,10 @@
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped" id="table-user"> <table class="table table-striped" id="table-user" style="font-size: 16px;">
<thead> <thead>
<tr> <tr>
<th class="text-center">#</th> <th class="text-center">#</th>
<th>UID</th>
<th>Foto Profil</th> <th>Foto Profil</th>
<th>Nama Lengkap</th> <th>Nama Lengkap</th>
<th>Email</th> <th>Email</th>
@ -47,11 +46,7 @@
name: 'DT_RowIndex', name: 'DT_RowIndex',
orderable: false, orderable: false,
searchable: false, searchable: false,
}, { className: 'text-center'
data: 'id',
name: 'id',
orderable: false,
searchable: true,
}, { }, {
data: 'foto_profile', data: 'foto_profile',
name: 'foto_profile', name: 'foto_profile',
@ -64,27 +59,33 @@
}, },
orderable: false, orderable: false,
searchable: false, searchable: false,
className: 'text-center'
}, { }, {
data: 'nama_lengkap', data: 'nama_lengkap',
name: 'nama_lengkap' name: 'nama_lengkap',
className: 'text-center'
}, { }, {
data: 'email', data: 'email',
name: 'email' name: 'email',
className: 'text-center'
}, { }, {
data: 'tanggal_daftar', data: 'tanggal_daftar',
name: 'tanggal_daftar', name: 'tanggal_daftar',
render: function(data, type, row) { render: function(data, type, row) {
if (type == 'display') { if (type === 'display') {
var date = new Date(data); var date = new Date(data);
var formattedDate = date.toLocaleDateString('en-US', { var day = date.getDate();
year: '2-digit', var month = date.toLocaleString('id-ID', {
month: '2-digit', month: 'short'
day: '2-digit'
}); });
var year = date.getFullYear();
var formattedDate = day + ' ' + month + ' ' + year;
return formattedDate; return formattedDate;
} }
return data; return data;
} },
className: 'text-center'
}, { }, {
data: 'status', data: 'status',
render: function(data, type, row) { render: function(data, type, row) {
@ -97,12 +98,14 @@
} }
}, },
orderable: true, orderable: true,
searchable: true searchable: true,
className: 'text-center'
}, { }, {
data: 'action', data: 'action',
name: 'action', name: 'action',
orderable: false, orderable: false,
searchable: false searchable: false,
className: 'text-center'
}], }],
}); });
@ -127,10 +130,10 @@
}); });
$.ajax({ $.ajax({
url: "{{ route('admin-user.destroy', ':admin_user') }}" url: "{{ route('admin-user.destroy') }}"
.replace( data: {
':admin_user', id: dataId
dataId), },
type: 'DELETE', type: 'DELETE',
processData: false, processData: false,
contentType: false, contentType: false,

View File

@ -23,7 +23,7 @@
</div> </div>
<div class="card-body"> <div class="card-body">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped" id="table-contact"> <table class="table table-striped" id="table-contact" style="font-size: 16px;">
<thead> <thead>
<tr class="text-center"> <tr class="text-center">
<th>#</th> <th>#</th>
@ -32,6 +32,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
</tbody> </tbody>
</table> </table>
</div> </div>
@ -46,27 +47,45 @@
<script> <script>
$(document).ready(function() { $(document).ready(function() {
let check = false; let check = false;
var teksArea = document.getElementById('resultArea');
var teksNama = document.getElementById('teksNama');
var teksNohp = document.getElementById('teksNoHP');
var teksEmail = document.getElementById('teksEmail');
var teksAlamat = document.getElementById('teksAlamat');
$('#modaldetail').on('show.bs.modal', function(event) { $('#modaldetail').on('show.bs.modal', function(event) {
var triggerLink = $(event.relatedTarget); var triggerLink = $(event.relatedTarget);
let dataNama = triggerLink.data('nama'); let dataId = triggerLink.data('id');
let dataEmail = triggerLink.data('email'); const csrfToken = $('meta[name="csrf-token"]').attr('content');
let dataNoHP = triggerLink.data('nohp'); var modal = $(this);
let dataAlamat = triggerLink.data('alamat');
let dataProvince = triggerLink.data('province'); $.ajaxSetup({
let dataCity = triggerLink.data('city'); headers: {
let dataDistrict = triggerLink.data('district'); 'X-CSRF-TOKEN': csrfToken
let dataVillage = triggerLink.data('village'); }
teksNama.innerHTML = dataNama; });
teksAlamat.innerHTML = dataNama + ", " + capital(dataVillage) + ", " + capital(
dataDistrict) + ", " + capital(dataCity) + ", " + capital(dataProvince); $.ajax({
teksNohp.innerHTML = dataNoHP; url: "{{ route('user-contact.detail-contact') }}",
teksEmail.innerHTML = dataEmail; type: "GET",
data: {
id: dataId
},
success: function(response) {
let alamat = response.data.alamat + ", Kel. " + capital(response.data
.kelurahan) + ", Kec. " + capital(response.data.kecamatan) +
", Kab. " + capital(response.data.kota) + ", " + capital(
response.data.provinsi);
$('#teksNama').text(response.data.nama_lengkap);
$('#teksAlamat').text(alamat);
$('#teksNoHP').text(response.data.nohp);
$('#teksEmail').text(response.data.email);
},
error: function(error) {
Swal.fire({
title: 'Gagal',
text: 'Terjadi error di server',
icon: 'error'
}).then(function() {
modal.modal('hide');
});
}
});
}); });
function capital(text) { function capital(text) {
@ -128,9 +147,10 @@
$.ajax({ $.ajax({
url: "{{ route('user-contact.destroy', ':id') }}".replace( url: "{{ route('user-contact.destroy') }}",
':id', data: {
dataId), id: dataId
}
type: 'DELETE', type: 'DELETE',
contentType: false, contentType: false,
processType: false, processType: false,
@ -184,7 +204,10 @@
}); });
$.ajax({ $.ajax({
url: "{{ route('user-contact.email', ':email') }}".replace(':email', email), url: "{{ route('user-contact.email') }}",
data: {
email: email
}
type: 'GET', type: 'GET',
success: function(response) { success: function(response) {
if (response.status) { if (response.status) {

View File

@ -18,7 +18,7 @@
<form role="form" id="formContact"> <form role="form" id="formContact">
<div class="form-group"> <div class="form-group">
<label for="inputemail">Email</label> <label for="inputemail">Email</label>
<input type="text" class="form-control" name="email" placeholder="Enter your email" /> <input type="text" class="form-control" name="email" placeholder="Masukan email" />
</div> </div>
<div class="form-group"> <div class="form-group">
<button type="button" class="btn btn-primary" id="checkButton">Check</button> <button type="button" class="btn btn-primary" id="checkButton">Check</button>
@ -26,7 +26,7 @@
<div class="form-group"> <div class="form-group">
<label for="exampleFormControlTextarea1" class="form-label">Hasil</label> <label for="exampleFormControlTextarea1" class="form-label">Hasil</label>
<textarea class="form-control" rows="10" cols="10" readonly id="resultArea""></textarea> <textarea class="form-control" rows="10" cols="10" readonly id="resultArea"></textarea>
</div> </div>
</form> </form>
</div> </div>
@ -34,7 +34,7 @@
<!-- Modal Footer --> <!-- Modal Footer -->
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button> <button type="button" class="btn btn-default" data-dismiss="modal">Tutup</button>
<button type="button" class="btn btn-primary submitBtn" id="tambahkanContact">Tambahkan Data</button> <button type="button" class="btn btn-primary submitBtn" id="tambahkanContact">Tambahkan Data</button>
</div> </div>
</div> </div>

View File

@ -9,34 +9,27 @@
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div class="card-body"> <div class="card-body">
@isset($user)
<div class="alert alert-primary" role="alert"> <div class="alert alert-primary" role="alert">
<div class="form-group"> <div class="form-group">
<label for="teksNama" style="font-size: 1.1em;">Nama</label> <label for="teksNama" style="font-size: 1.1em;">Nama</label>
{{-- <p class="form-control-static" id="teksNama"></p> --}} <p class="form-control-static" id="teksNama"></p>
<span
class="text-muted ">{{ ucwords(strtolower($user->nama_depan . ' ' . $user->nama_belakang)) }}</span>
</div> </div>
<hr style="border-top: 1px solid #fff;"> <hr style="border-top: 1px solid #fff;">
<div class="form-group"> <div class="form-group">
<label for="teksNoHP" style="font-size: 1.1em;">No HP</label> <label for="teksNoHP" style="font-size: 1.1em;">No HP</label>
{{-- <p class="form-control-static" id="teksNoHP"></p> --}} <p class="form-control-static" id="teksNoHP"></p>
<span class="text-muted ">{{ $user->nohp }}</span>
</div> </div>
<hr style="border-top: 1px solid #fff;"> <hr style="border-top: 1px solid #fff;">
<div class="form-group"> <div class="form-group">
<label for="teksEmail" style="font-size: 1.1em;">Email</label> <label for="teksEmail" style="font-size: 1.1em;">Email</label>
{{-- <p class="form-control-static" id="teksEmail"></p> --}} <p class="form-control-static" id="teksEmail"></p>
<span class="text-muted ">{{ $user->email }}</span>
</div> </div>
<hr style="border-top: 1px solid #fff;"> <hr style="border-top: 1px solid #fff;">
<div class="form-group"> <div class="form-group">
<label for="teksAlamat" style="font-size: 1.1em;">Alamat</label> <label for="teksAlamat" style="font-size: 1.1em;">Alamat</label>
{{-- <p class="form-control-static" id="teksAlamat"></p> --}} <p class="form-control-static" id="teksAlamat"></p>
<span class="text-muted ">{{ $user->alamat }}</span>
</div> </div>
</div> </div>
@endisset
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">

View File

@ -15,7 +15,7 @@
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped" id="table-refund"> <table class="table table-striped" id="table-refund" style="font-size: 16px;">
<thead> <thead>
<tr> <tr>
<th class="text-center"> <th class="text-center">
@ -30,37 +30,9 @@
<th>Aksi</th> <th>Aksi</th>
</tr> </tr>
</thead> </thead>
{{-- <tbody> <tbody>
@foreach ($refunds as $refund)
<tr> </tbody>
<td>{{ $loop->iteration }}</td>
<td>{{ $refund->transaction->nama_barang }}
</td>
<td>{{ $refund->transaction->data_penjual->nama_depan }}
</td>
<td>{{ $refund->total }}</td>
<td>{{ $refund->created_at }}</td>
<td>{{ $refund->due_date }}</td>
<td><a href="#" data-toggle="modal"
data-target="#modalKeteranganStatus"
class="badge {{ $refund->status == 'refund' ? 'badge-succes' : ($refund->status == 'pending' ? 'badge-warning' : 'badge-danger') }}">{{ ucwords($refund->status) }}</a>
</td>
<td>
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle"
data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">
...
</button>
<div class="dropdown-menu">
<a class="dropdown-item"
href="{{ route('user-refund.show', $refund->id) }}">Detail</a>
</div>
</div>
</td>
</tr>
@endforeach
</tbody> --}}
</table> </table>
</div> </div>
</div> </div>
@ -69,6 +41,7 @@
</div> </div>
</section> </section>
</div> </div>
@include('user.refund.modal-keterangan-status')
<script> <script>
$(function() { $(function() {
let listRefund = $('#table-refund').DataTable({ let listRefund = $('#table-refund').DataTable({
@ -79,65 +52,93 @@
data: 'DT_RowIndex', data: 'DT_RowIndex',
name: 'DT_RowIndex', name: 'DT_RowIndex',
orderable: false, orderable: false,
searchable: true, searchable: false,
}, className: 'text-center'
{
data: 'id',
name: 'id',
orderable: false,
searchable: true,
}, },
{ {
data: 'nama_barang', data: 'nama_barang',
name: 'nama_barang' name: 'nama_barang',
className: 'text-center'
}, },
{ {
data: 'penjual', data: 'nama_penjual',
name: 'penjual' name: 'nama_penjual',
className: 'text-center'
}, },
{ {
date: 'total', data: 'total',
name: 'total' name: 'total',
},
{
data: 'tanggal_pengajuan',
name: 'tanggal_pengajuan',
render: function(data, type, row) { render: function(data, type, row) {
if (type == 'display') { // Memastikan bahwa ini adalah tampilan (bukan sorting atau filtering)
if (type === 'display') {
// Mengubah nilai 'total' menjadi format mata uang Indonesia
return new Intl.NumberFormat('id-ID', {
style: 'currency',
currency: 'IDR'
}).format(data);
}
// Untuk tipe yang lain, kembalikan nilai asli
return data;
},
className: 'text-center'
},
{
data: 'created_at',
name: 'created_at',
render: function(data, type, row) {
if (type === 'display') {
var date = new Date(data); var date = new Date(data);
var formattedDate = date.toLocaleDateString('en-US', { var day = date.getDate();
year: '2-digit', var month = date.toLocaleString('id-ID', {
month: '2-digit', month: 'short'
day: '2-digit'
}); });
var year = date.getFullYear();
var formattedDate = day + ' ' + month + ' ' + year;
return formattedDate; return formattedDate;
} }
return data; return data;
},
className: 'text-center'
},
{
data: 'due_date',
name: 'due_date',
render: function(data, type, row) {
if (type === 'display') {
var date = new Date(data);
var day = date.getDate();
var month = date.toLocaleString('id-ID', {
month: 'short'
});
var year = date.getFullYear();
var formattedDate = day + ' ' + month + ' ' + year;
return formattedDate;
} }
return data;
},
className: 'text-center'
}, },
{ {
data: 'batas_konfirmasi', data: 'status',
name: 'batas_konfirmasi'
},
{
data: null,
render: function(data, type, row) { render: function(data, type, row) {
if (row.status == 'partial refund') { if (row.status == 'partial refund') {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-success">${row.status}</a>`; return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-success">${row.status.charAt(0).toUpperCase()}${row.status.slice(1)}</a>`;
}else if (row.status == 'pending') { } else if (row.status == 'pending') {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-warning">${row.status}</a>`; return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-warning">${row.status.charAt(0).toUpperCase()}${row.status.slice(1)}</a>`;
}else { } else {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-danger">${row.status}</a>`; return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-danger">${row.status.charAt(0).toUpperCase()}${row.status.slice(1)}</a>`;
} }
}, },
orderable: true, className: 'text-center'
searchable: true
}, },
{ {
data: 'aksi', data: 'action',
name: 'aksi', name: 'action',
orderable: false, orderable: false,
searchable: true searchable: false,
className: 'text-center'
} }
], ],
}) })

View File

@ -0,0 +1,57 @@
<div class="modal fade" id="modalKeteranganStatus" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header d-flex justify-content-center">
<h3 class="modal-title fs-5" id="staticBackdropLabel">Keterangan Status Transaksi</h3>
</div>
<div class="modal-body">
<div class="mb-3">
<label class="badge badge-light">Created</label>
<p class="form-control">Transaksi baru telah dibuat oleh pembeli.</p>
</div>
<div class="mb-3">
<label class="badge badge-dark">Challenge</label>
<p class="form-control">Transaksi diduga penipuan dan perlu direview oleh admin.</p>
</div>
<div class="mb-3">
<label class="badge badge-info">Success</label>
<p class="form-control">Transaksi sukses dibayar dan akan dilanjutkan ke pihak penjual</p>
</div>
<div class="mb-3">
<label class="badge badge-danger">Failure</label>
<p class="form-control">Terjadi kesalahan pada transaksi seperti pembatalan, pembayaran sudah
kedaluwarsa atau kerusakan di server.</p>
</div>
<div class="mb-3">
<label class="badge badge-warning">Process</label>
<p class="form-control">Transaksi/pesanan pembeli sedang diproses oleh penjual.</p>
</div>
<div class="mb-3">
<label class="badge badge-warning">Sending</label>
<p class="form-control">Pesanan sedang dikirim oleh penjual.</p>
</div>
<div class="mb-3">
<label class="badge badge-warning">Sent</label>
<p class="form-control">Pesanan sudah sampai di tujuan pembeli.</p>
</div>
<div class="mb-3">
<label class="badge badge-success">Finished</label>
<p class="form-control">Transaksi telah selesai dan diselesaikan oleh pembeli.</p>
</div>
<div class="mb-3">
<label class="badge badge-danger">Refund</label>
<p class="form-control">Transaksi ditandai oleh pembeli untuk dikembalikan/retur dikarenakan
kemungkinan barang/jasa yang salah atau terjadi kerusakan.</p>
</div>
</div>
</div>
</div>
</div>

View File

@ -30,21 +30,23 @@
</div> </div>
<div class="card-body"> <div class="card-body">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped" id="table-pembeli"> <table class="table table-striped" id="table-pembeli" style="font-size: 16px;">
<thead> <thead>
<tr> <tr>
<th class="text-center"> <th class="text-center">
# #
</th> </th>
<th>Penjual</th>
<th>Nama Barang</th> <th>Nama Barang</th>
<th>Penjual</th>
<th>Total</th> <th>Total</th>
<th>Tanggal Transaksi</th> <th>Tanggal Transaksi</th>
<th>Tanggal Update</th>
<th>Status</th> <th>Status</th>
<th>Aksi</th> <th>Aksi</th>
</tr> </tr>
</thead> </thead>
<tbody>
</tbody>
</table> </table>
</div> </div>
</div> </div>
@ -73,80 +75,98 @@
searchable: false, searchable: false,
className: 'text-center' className: 'text-center'
}, },
{
data: 'id',
name: 'id',
orderable: false,
searchable: true,
},
{
data: 'penjual',
name: 'penjual',
},
{ {
data: 'nama_barang', data: 'nama_barang',
name: 'nama_barang' name: 'nama_barang',
className: 'text-center'
}, },
{ {
data: 'total', data: 'nama_penjual',
name: 'total' name: 'nama_penjual',
className: 'text-center'
}, },
{ {
data: 'tanggal_transaksi', data: 'total_harga',
name: 'tanggal_transaksi', name: 'total_harga',
render: function(data, type, row) { render: function(data, type, row) {
if (type == 'display') { // Memastikan bahwa ini adalah tampilan (bukan sorting atau filtering)
if (type === 'display') {
// Mengubah nilai 'total' menjadi format mata uang Indonesia
return new Intl.NumberFormat('id-ID', {
style: 'currency',
currency: 'IDR'
}).format(data);
}
// Untuk tipe yang lain, kembalikan nilai asli
return data;
},
className: 'text-center'
},
{
data: 'created_at',
name: 'created_at',
render: function(data, type, row) {
if (type === 'display') {
var date = new Date(data); var date = new Date(data);
var formattedDate = date.toLocaleDateString('en-US', { var day = date.getDate();
year: '2-digit', var month = date.toLocaleString('id-ID', {
month: '2-digit', month: 'short'
day: '2-digit'
}); });
var year = date.getFullYear();
var formattedDate = day + ' ' + month + ' ' + year;
return formattedDate; return formattedDate;
} }
return data; return data;
} },
className: 'text-center'
}, },
{ {
data: 'date', data: 'status_transaksi',
name: 'date', name: 'status_transaksi',
render: function(data, type, row) { render: function(data, type, row) {
if (type == 'display') { if (row.status_transaksi == 'created') {
var date = new Date(data); return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-light">
var formattedDate = date.toLocaleDateString('en-US', { ${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
year: '2-digit', </a>`;
month: '2-digit', } else if (row.status_transaksi == 'success') {
day: '2-digit' return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-info">
}); ${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
return formattedDate; </a>`;
} } else if (['process', 'sending', 'sent'].includes(row
return data; .status_transaksi)) {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-warning">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
} else if (['cancel', 'failure', 'refund'].includes(row
.status_transaksi)) {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-danger">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
} else if (row.status_transaksi == 'finished') {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-success">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
} else {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-dark">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
} }
}, },
className: 'text-center'
},
{ {
data: null, data: 'action',
render: function(data, type, row) { name: 'action',
if (row.status == 'partial refund') {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-success">${row.status}</a>`;
}else if (row.status == 'pending') {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-warning">${row.status}</a>`;
}else {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-danger">${row.status}</a>`;
}
},
orderable: true,
searchable: true
},
{
data: 'aksi',
name: 'aksi',
orderable: false, orderable: false,
searchable: false searchable: false,
}], className: 'text-center'
}
],
}); });
// Bayar // Bayar
$('#table-3').on('click', '#bayar', function() { $('#table-pembeli').on('click', '#bayar', function() {
const id = $(this).data('id'); const id = $(this).data('id');
const token = $(this).data('token'); const token = $(this).data('token');
const csrfToken = $('meta[name="csrf-token"]').attr('content'); const csrfToken = $('meta[name="csrf-token"]').attr('content');
@ -183,7 +203,7 @@
'error' 'error'
}).then(function() { }).then(function() {
if (response.status) { if (response.status) {
location.reload(); listPembeli.ajax.reload();
} }
}); });
}, },
@ -226,6 +246,10 @@
icon: response.status ? 'info' : icon: response.status ? 'info' :
'error', 'error',
confirmButtonText: 'OK' confirmButtonText: 'OK'
}).then(function() {
if (response.status) {
listPembeli.ajax.reload();
}
}); });
}, },
error: function(error) { error: function(error) {
@ -265,6 +289,10 @@
'Pembayaran Gagal' : 'Gagal', 'Pembayaran Gagal' : 'Gagal',
text: response.message, text: response.message,
icon: 'error', icon: 'error',
}).then(function() {
if (response.status) {
listPembeli.ajax.reload();
}
}); });
}, },
error: function(error) { error: function(error) {
@ -306,6 +334,10 @@
text: response.message, text: response.message,
icon: response.status ? 'info' : icon: response.status ? 'info' :
'error', 'error',
}).then(function() {
if (response.status) {
listPembeli.ajax.reload();
}
}); });
}, },
error: function(fail) { error: function(fail) {
@ -320,7 +352,7 @@
}); });
}); });
$('#table-3').on('click', '#cancel', function() { $('#table-pembeli').on('click', '#cancel', function() {
const id = $(this).data('id'); const id = $(this).data('id');
const csrfToken = $('meta[name="csrf-token"]').attr('content'); const csrfToken = $('meta[name="csrf-token"]').attr('content');
@ -363,7 +395,7 @@
icon: response.status ? 'success' : 'error' icon: response.status ? 'success' : 'error'
}).then(function() { }).then(function() {
if (response.status) { if (response.status) {
location.reload(); listPembeli.ajax.reload();
} }
}); });
}, },
@ -386,14 +418,30 @@
$(document).ready(function() { $(document).ready(function() {
$('#modalTracking').on('show.bs.modal', function(event) { $('#modalTracking').on('show.bs.modal', function(event) {
var triggerLink = $(event.relatedTarget); // Tombol yang memicu modal var triggerLink = $(event.relatedTarget); // Tombol yang memicu modal
var transactionDatas = triggerLink.data('transaction'); // Ambil data dari tombol var transactionId = triggerLink.data('id'); // Ambil data dari tombol
const csrfToken = $('meta[name="csrf-token"]').attr('content');
var modal = $(this);
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': csrfToken
}
});
$.ajax({
url: "{{ route('user.transaction-tracking') }}",
type: 'GET',
data: {
id: transactionId
},
success: function(response) {
var transactionDatas = response.data;
// Buat variabel untuk menyimpan HTML aktivitas // Buat variabel untuk menyimpan HTML aktivitas
transactionDatas = transactionDatas.reverse();
var activitiesHtml = ''; var activitiesHtml = '';
// Periksa apakah ada data transaksi // Periksa apakah ada data transaksi
if (transactionDatas && transactionDatas.length > 0) { if (transactionDatas && transactionDatas.length > 0) {
transactionDatas = transactionDatas.reverse();
// Iterasi melalui data transaksi dan tambahkan ke activitiesHtml // Iterasi melalui data transaksi dan tambahkan ke activitiesHtml
$.each(transactionDatas, function(index, transactionDescription) { $.each(transactionDatas, function(index, transactionDescription) {
activitiesHtml += ` activitiesHtml += `
@ -428,8 +476,19 @@
} }
// Menampilkan data dalam modal // Menampilkan data dalam modal
var modal = $(this);
modal.find('.activities').html(activitiesHtml); modal.find('.activities').html(activitiesHtml);
},
error: function(error) {
Swal.fire({
title: 'Gagal',
text: 'Gagal mendapatkan data',
icon: 'error'
}).then(function() {
Swal.close();
modal.modal('hide');
});
}
});
}); });
$('#modalFinish').on('show.bs.modal', function(event) { $('#modalFinish').on('show.bs.modal', function(event) {

View File

@ -24,104 +24,22 @@
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped" id="table-3"> <table class="table table-striped" id="table-penjual" style="font-size: 16px;">
<thead> <thead>
<tr> <tr>
<th class="text-center"> <th class="text-center">
# #
</th> </th>
<th>Pembeli</th>
<th>Nama Barang</th> <th>Nama Barang</th>
<th>Pembeli</th>
<th>Total</th> <th>Total</th>
<th>Tanggal Pembuatan</th> <th>Tanggal Transaksi</th>
<th>Tanggal Update</th>
<th>Status</th> <th>Status</th>
<th>Aksi</th> <th>Aksi</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@forelse ($transactions as $transaction)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $transaction->data_pembeli->nama_depan . ' ' . $transaction->data_pembeli->nama_belakang }}
</td>
<td>{{ $transaction->nama_barang }}</td>
<td>Rp {{ number_format($transaction->total_bayar, 2, ',', '.') }}</td>
<td>{{ $transaction->created_at }}</td>
<td>{{ $transaction->updated_at }}</td>
<td><a href="#" data-toggle="modal"
data-target="#modalKeteranganStatus"
class="badge {{ in_array($transaction->status_transaksi, ['created'])
? 'badge-light'
: (in_array($transaction->status_transaksi, ['success', 'challenge'])
? 'badge-info'
: (in_array($transaction->status_transaksi, ['process', 'sending', 'sent'])
? 'badge-warning'
: (in_array($transaction->status_transaksi, ['cancel', 'failure', 'refund'])
? 'badge-danger'
: ($transaction->status_transaksi == 'finished'
? 'badge-success'
: 'badge-dark')))) }}">{{ ucwords($transaction->status_transaksi) }}</a>
</td>
<td>
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle"
data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">
...
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item"
href="{{ route('user-penjual.show', $transaction->id) }}">Detail</a>
</li>
@if (!$transaction->transactionDescription->isEmpty())
<li><a class="dropdown-item" data-toggle="modal"
data-target="#modalTracking"
data-transaction="{{ $transaction->transactionDescription }}">Tracking</a>
</li>
@endif
{{-- Setelah dibayar --}}
@if ($transaction->status_transaksi == 'success')
<li><a class="dropdown-item" href="#"
id="processTransaction"
data-id="{{ $transaction->id }}">Proses
Transaksi</a>
</li>
@endif
{{-- Pengiriman barang --}}
@if ($transaction->status_transaksi == 'process')
<li><a class="dropdown-item" href="#"
id="sendOrder"
data-id="{{ $transaction->id }}">Kirim
Barang</a>
</li>
@endif
{{-- Barang sudah sampai --}}
@if ($transaction->status_transaksi == 'sending')
<li><a class="dropdown-item" href="#"
data-toggle="modal"
data-target="#modalOrderSent" id="sentOrder"
data-id="{{ $transaction->id }}">Barang sudah
sampai</a>
</li>
@endif
{{-- Transaksi sudah selesai --}}
@if ($transaction->status_transaksi == 'finished')
<li><a class="dropdown-item" href="#"
id="acceptResult"
data-id="{{ $transaction->id }}">Terima
Uang</a>
</li>
@endif
</ul>
</div>
</td>
</tr>
@empty
@endforelse
</tbody> </tbody>
</table> </table>
</div> </div>
@ -137,16 +55,133 @@
@include('user.transaction.penjual.modal-keterangan-status') @include('user.transaction.penjual.modal-keterangan-status')
<script> <script>
$(document).ready(function() { $(document).ready(function() {
let listPenjual = $('#table-penjual').DataTable({
processing: true,
serverSide: true,
ajax: "{{ route('user-penjual.list-penjual') }}",
columns: [{
data: 'DT_RowIndex',
name: 'DT_RowIndex',
orderable: false,
searchable: false,
className: 'text-center'
},
{
data: 'nama_barang',
name: 'nama_barang',
className: 'text-center'
},
{
data: 'nama_pembeli',
name: 'nama_pembeli',
className: 'text-center'
},
{
data: 'total_harga',
name: 'total_harga',
render: function(data, type, row) {
// Memastikan bahwa ini adalah tampilan (bukan sorting atau filtering)
if (type === 'display') {
// Mengubah nilai 'total' menjadi format mata uang Indonesia
return new Intl.NumberFormat('id-ID', {
style: 'currency',
currency: 'IDR'
}).format(data);
}
// Untuk tipe yang lain, kembalikan nilai asli
return data;
},
className: 'text-center'
},
{
data: 'created_at',
name: 'created_at',
render: function(data, type, row) {
if (type === 'display') {
var date = new Date(data);
var day = date.getDate();
var month = date.toLocaleString('id-ID', {
month: 'short'
});
var year = date.getFullYear();
var formattedDate = day + ' ' + month + ' ' + year;
return formattedDate;
}
return data;
},
className: 'text-center'
},
{
data: 'status_transaksi',
name: 'status_transaksi',
render: function(data, type, row) {
if (row.status_transaksi == 'created') {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-light">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
} else if (row.status_transaksi == 'success') {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-info">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
} else if (['process', 'sending', 'sent'].includes(row
.status_transaksi)) {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-warning">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
} else if (['cancel', 'failure', 'refund'].includes(row
.status_transaksi)) {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-danger">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
} else if (row.status_transaksi == 'finished') {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-success">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
} else {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-dark">
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
</a>`;
}
},
className: 'text-center'
},
{
data: 'action',
name: 'action',
orderable: false,
searchable: false,
className: 'text-center'
}
],
});
$('#modalTracking').on('show.bs.modal', function(event) { $('#modalTracking').on('show.bs.modal', function(event) {
var triggerLink = $(event.relatedTarget); // Tombol yang memicu modal var triggerLink = $(event.relatedTarget); // Tombol yang memicu modal
var transactionDatas = triggerLink.data('transaction'); // Ambil data dari tombol var transactionId = triggerLink.data('id'); // Ambil data dari tombol
const csrfToken = $('meta[name="csrf-token"]').attr('content');
var modal = $(this);
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': csrfToken
}
});
$.ajax({
url: "{{ route('user.transaction-tracking') }}",
type: 'GET',
data: {
id: transactionId
},
success: function(response) {
var transactionDatas = response.data;
// Buat variabel untuk menyimpan HTML aktivitas // Buat variabel untuk menyimpan HTML aktivitas
transactionDatas = transactionDatas.reverse();
var activitiesHtml = ''; var activitiesHtml = '';
// Periksa apakah ada data transaksi // Periksa apakah ada data transaksi
if (transactionDatas && transactionDatas.length > 0) { if (transactionDatas && transactionDatas.length > 0) {
transactionDatas = transactionDatas.reverse();
// Iterasi melalui data transaksi dan tambahkan ke activitiesHtml // Iterasi melalui data transaksi dan tambahkan ke activitiesHtml
$.each(transactionDatas, function(index, transactionDescription) { $.each(transactionDatas, function(index, transactionDescription) {
activitiesHtml += ` activitiesHtml += `
@ -181,11 +216,22 @@
} }
// Menampilkan data dalam modal // Menampilkan data dalam modal
var modal = $(this);
modal.find('.activities').html(activitiesHtml); modal.find('.activities').html(activitiesHtml);
},
error: function(error) {
Swal.fire({
title: 'Gagal',
text: 'Gagal mendapatkan data',
icon: 'error'
}).then(function() {
Swal.close();
modal.modal('hide');
});
}
});
}); });
$('#table-3').on('click', '#processTransaction', function() { $('#table-penjual').on('click', '#processTransaction', function() {
const id = $(this).data('id'); const id = $(this).data('id');
const csrfToken = $('meta[name="csrf-token"]').attr('content'); const csrfToken = $('meta[name="csrf-token"]').attr('content');
@ -215,10 +261,10 @@
title: response.status ? 'Berhasil' : 'Gagal', title: response.status ? 'Berhasil' : 'Gagal',
text: response.message, text: response.message,
icon: response.status ? 'success' : 'error', icon: response.status ? 'success' : 'error',
}).then((result) => { }).then(function() {
Swal.close(); Swal.close();
if (result.isConfirmed) { if (response.status) {
location.reload(); listPenjual.ajax.reload();
} }
}); });
}, },
@ -232,7 +278,7 @@
}); });
}); });
$('#table-3').on('click', '#sendOrder', function() { $('#table-penjual').on('click', '#sendOrder', function() {
const id = $(this).data('id'); const id = $(this).data('id');
const csrfToken = $('meta[name="csrf-token"]').attr('content'); const csrfToken = $('meta[name="csrf-token"]').attr('content');
@ -274,9 +320,9 @@
text: response.message, text: response.message,
icon: response.status ? 'success' : 'error', icon: response.status ? 'success' : 'error',
confirmButtonText: 'OK', confirmButtonText: 'OK',
}).then((result) => { }).then(function() {
if (response.status) { if (response.status) {
location.reload(); listPenjual.ajax.reload();
} }
}); });
}, },
@ -368,7 +414,9 @@
icon: response.status ? 'success' : 'error' icon: response.status ? 'success' : 'error'
}).then(function() { }).then(function() {
if (response.status) { if (response.status) {
location.reload(); $('#formBukti').trigger('reset');
$('#modalOrderSent').modal('hide');
listPenjual.ajax.reload();
} }
}); });
}, },
@ -383,7 +431,7 @@
}); });
$('#acceptResult').on('click', function() { $('#acceptResult').on('click', function() {
const csrfToken = $('meta[name="csrf-token"]').attr('content');
}); });
}); });
</script> </script>

View File

@ -1,130 +0,0 @@
@extends('layouts.main')
@section('content')
<div class="main-content">
<section class="section">
<div class="section-header">
<h1>Invoice</h1>
<div class="section-header-breadcrumb">
<div class="breadcrumb-item active"><a href="{{ route('user.index') }}">Dashboard</a></div>
<div class="breadcrumb-item"><a href="{{ route('user-pembeli.index') }}"> Transaction</a></div>
<div class="breadcrumb-item">Invoice</div>
</div>
</div>
<div class="section-body">
<div class="invoice">
<div class="invoice-print">
<div class="row">
<div class="col-lg-12">
<div class="invoice-title">
<h2>Invoice</h2>
<div class="invoice-number">Order #NVI-1234</div>
</div>
<hr>
<div class="row">
<div class="col-md-6">
<address>
<strong>Billed To:</strong><br>
npannisa<br>
1234 Main<br>
Apt. 4B<br>
Depok City, Indonesia
</address>
</div>
<div class="col-md-6 text-md-right">
<address>
<strong>Shipped To:</strong><br>
Jilhan Haura<br>
12345 Main<br>
Apt. 5B<br>
Bogor Barat, Indonesia
</address>
</div>
</div>
<div class="row">
<div class="col-md-6">
<address>
<strong>Payment Method:</strong><br>
Visa ending **** 4242<br>
npannisa@gmail.com
</address>
</div>
<div class="col-md-6 text-md-right">
<address>
<strong>Order Date:</strong><br>
September 19, 2023<br><br>
</address>
</div>
</div>
</div>
</div>
<div class="row mt-4">
<div class="col-md-12">
<div class="section-title">Order Summary</div>
<p class="section-lead">All items here cannot be deleted.</p>
<div class="table-responsive">
<table class="table table-striped table-hover table-md">
<tr>
<th data-width="40">#</th>
<th>Item</th>
<th class="text-center">Price</th>
<th class="text-center">Quantity</th>
<th class="text-right">Totals</th>
</tr>
<tr>
<td>1</td>
<td>Ayam Warna Warni</td>
<td class="text-center">Rp. 50.000.000</td>
<td class="text-center">1</td>
<td class="text-right">Rp. 50.000.000</td>
</tr>
</table>
</div>
<div class="row mt-4">
<div class="col-lg-8">
<div class="section-title">Payment Method</div>
<p class="section-lead">The payment method that we provide is to make it easier for
you to pay invoices.</p>
<div class="images">
<img src="assets/img/visa.png" alt="visa">
<img src="assets/img/jcb.png" alt="jcb">
<img src="assets/img/mastercard.png" alt="mastercard">
<img src="assets/img/paypal.png" alt="paypal">
</div>
</div>
<div class="col-lg-4 text-right">
<div class="invoice-detail-item">
<div class="invoice-detail-name">Subtotal</div>
<div class="invoice-detail-value">Rp.670.000.000</div>
</div>
<div class="invoice-detail-item">
<div class="invoice-detail-name">Shipping</div>
<div class="invoice-detail-value">Rp.15.000</div>
</div>
<hr class="mt-2 mb-2">
<div class="invoice-detail-item">
<div class="invoice-detail-name">Total</div>
<div class="invoice-detail-value invoice-detail-value-lg">Rp.6715.000.000</div>
</div>
</div>
</div>
</div>
</div>
</div>
<hr>
<div class="text-md-right">
<div class="float-lg-left mb-lg-0 mb-3">
<a href="/pembeli" class="btn btn-primary btn-icon icon-left"><i class="fas fa-credit-card"
id="payment"></i> Process
Payment</a>
<a href="/pembeli" class="btn btn-danger btn-icon icon-left"><i class="fas fa-times"></i>
Cancel</a>
</div>
<button class="btn btn-warning btn-icon icon-left"><i class="fas fa-print"></i> Print</button>
</div>
</div>
</div>
</section>
</div>
@endsection

View File

@ -97,7 +97,8 @@
<!-- ======= END SIGN IN FORM ======= --> <!-- ======= END SIGN IN FORM ======= -->
<!-- ======= SIGN UP FORM ======= --> <!-- ======= SIGN UP FORM ======= -->
<form action="#" class="sign-up-form" id="msform" enctype="multipart/form-data" method="POST"> <form action="javascript:void(0)" class="sign-up-form" id="msform" enctype="multipart/form-data"
method="POST">
@csrf @csrf
<h2 class="title">Daftar</h2> <h2 class="title">Daftar</h2>
<p style="width: 90%"> <p style="width: 90%">
@ -145,20 +146,21 @@
<div class="input-field-signup-flex" style="margin-left: 3%"> <div class="input-field-signup-flex" style="margin-left: 3%">
<i class="fas fa-user"></i> <i class="fas fa-user"></i>
<input type="text" placeholder="Nama Belakang" class="last-name-input" <input type="text" placeholder="Nama Belakang" class="last-name-input"
name="nama_belakang" /> name="nama_belakang" required />
</div> </div>
</div> </div>
<div class="input-field up"> <div class="input-field up">
<i class="fa fa-id-card" aria-hidden="true"></i> <i class="fa fa-id-card" aria-hidden="true"></i>
<input type="text" placeholder="NIK" class="email-input" name="nik" <input type="text" placeholder="NIK" class="email-input" name="nik"
maxlength="16" maxlength="16"
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 16);" /> oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 16);"
required />
</div> </div>
<div class="flex-input-btn"> <div class="flex-input-btn">
<div class="input"> <div class="input">
<i class="fa fa-envelope" aria-hidden="true"></i> <i class="fa fa-envelope" aria-hidden="true"></i>
<input type="email" placeholder="Email" class="email-input" name="new_email" <input type="email" placeholder="Email" class="email-input" name="new_email"
id="newEmail" /> id="newEmail" required />
</div> </div>
<button id="verifikasiEmail" class="btn-otp" type="button" <button id="verifikasiEmail" class="btn-otp" type="button"
disabled=true>Verifikasi</button> disabled=true>Verifikasi</button>
@ -167,19 +169,20 @@
<i class="fa fa-ellipsis-h" aria-hidden="true"></i> <i class="fa fa-ellipsis-h" aria-hidden="true"></i>
<input type="text" class="telp-input-signup" <input type="text" class="telp-input-signup"
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 6);" oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 6);"
placeholder="Kode Verifikasi Email" name="email_verification"> placeholder="Kode Verifikasi Email" name="email_verification" required
id="emailVerification">
</div> </div>
<div class="input-field up"> <div class="input-field up">
<i class="fa fa-phone" aria-hidden="true"></i> <i class="fa fa-phone" aria-hidden="true"></i>
<input type="text" class="telp-input-signup" maxlength="13" <input type="text" class="telp-input-signup" maxlength="13"
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 13);" oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 15);"
placeholder="Nomer Telepon" name="nohp"> placeholder="Nomer Telepon. cth: 08xxx" name="nohp" required>
</div> </div>
<div style="display: flex;"> <div style="display: flex;">
<div class="input-field-signup-flex up gender-select-menu" style="width: 190%"> <div class="input-field-signup-flex up gender-select-menu" style="width: 190%">
<div class="gender-select-input" style="width: 100%; padding-left: 1rem;"> <div class="gender-select-input" style="width: 100%; padding-left: 1rem;">
<select style="width: 190%;" class="gender-select" id="gender-select" <select style="width: 190%;" class="gender-select" id="gender-select"
name="gender"> name="gender" required>
<option value="Laki-laki">Laki-laki</option> <option value="Laki-laki">Laki-laki</option>
<option value="Perempuan">Perempuan</option> <option value="Perempuan">Perempuan</option>
</select> </select>
@ -187,7 +190,8 @@
</div> </div>
<div class="input-field-signup-flex up" style="margin-left: 3%"> <div class="input-field-signup-flex up" style="margin-left: 3%">
<i class="fa fa-calendar" aria-hidden="true"></i> <i class="fa fa-calendar" aria-hidden="true"></i>
<input type="date" placeholder="Tanggal Lahir" name="tanggal_lahir" /> <input type="date" placeholder="Tanggal Lahir" name="tanggal_lahir"
required />
</div> </div>
</div> </div>
@ -226,14 +230,14 @@
<select id="selectVillage" <select id="selectVillage"
style="width: 100%; border: 1px solid transparent; margin-top: 0; outline: none;" style="width: 100%; border: 1px solid transparent; margin-top: 0; outline: none;"
class="input-field" aria-label="Default select example" class="input-field" aria-label="Default select example"
name="village_code"> name="village_code" required>
</select> </select>
</div> </div>
</div> </div>
<input type="text" class="input-field" id="alamat" name="alamat" <input type="text" class="input-field" id="alamat" name="alamat"
placeholder="Alamat lengkap Anda" cols="50" rows="4" placeholder="Alamat lengkap Anda" cols="50" rows="4"
style="width: 190%; padding: 0rem 1rem;"> style="width: 190%; padding: 0rem 1rem;" required>
</div> </div>
<!-- ======= END FORM ADDRESS ======= --> <!-- ======= END FORM ADDRESS ======= -->
@ -250,7 +254,7 @@
</div> </div>
<video id="webcamKtp" autoplay playsinline></video> <video id="webcamKtp" autoplay playsinline></video>
<div id="foto-preview-ktp"></div> <div id="foto-preview-ktp"></div>
<input type="hidden" id="fotoKtp" name="ktp"> <input type="hidden" id="fotoKtp" name="ktp" required>
<div style="display: flex; margin-top: 1rem"> <div style="display: flex; margin-top: 1rem">
<button type="button" class="btn-foto" id="startButtonKtp" <button type="button" class="btn-foto" id="startButtonKtp"
data-state="off">Mulai Kamera</button> data-state="off">Mulai Kamera</button>
@ -272,7 +276,7 @@
</div> </div>
<video id="webcamEkyc" autoplay playsinline></video> <video id="webcamEkyc" autoplay playsinline></video>
<div id="foto-preview-ekyc"></div> <div id="foto-preview-ekyc"></div>
<input type="hidden" id="fotoEkyc" name="wajah"> <input type="hidden" id="fotoEkyc" name="wajah" required>
<div style="display: flex; margin-top: 1rem"> <div style="display: flex; margin-top: 1rem">
<button type="button" class="btn-foto" id="startButtonEkyc" <button type="button" class="btn-foto" id="startButtonEkyc"
data-state="off">Mulai Kamera</button> data-state="off">Mulai Kamera</button>
@ -302,12 +306,12 @@
<div class="input-field-signup-flex"> <div class="input-field-signup-flex">
<i class="fa fa-unlock-alt" aria-hidden="true"></i> <i class="fa fa-unlock-alt" aria-hidden="true"></i>
<input type="password" class="pin-input" placeholder="Password" <input type="password" class="pin-input" placeholder="Password"
name="new_password"> name="new_password" required>
</div> </div>
<div class="input-field-signup-flex" style="margin-left: 3%"> <div class="input-field-signup-flex" style="margin-left: 3%">
<i class="fa fa-unlock-alt" aria-hidden="true"></i> <i class="fa fa-unlock-alt" aria-hidden="true"></i>
<input type="password" class="konfir-pin-input" <input type="password" class="konfir-pin-input"
placeholder="Konfirmasi Password" name="confirm_password"> placeholder="Konfirmasi Password" name="confirm_password" required>
</div> </div>
</div> </div>
@ -335,7 +339,7 @@
<div class="common_btns form_4_btns" style="display: none;"> <div class="common_btns form_4_btns" style="display: none;">
<button type="button" class="btn_back"><span class="icon"><ion-icon <button type="button" class="btn_back"><span class="icon"><ion-icon
name="arrow-back-sharp"></ion-icon></span>Back</button> name="arrow-back-sharp"></ion-icon></span>Back</button>
<button type="button" class="btn_done" id="signUp">Daftar</button> <button type="submit" class="btn_done" id="signUp">Daftar</button>
</div> </div>
</div> </div>
<!-- ======= BTN FORM NEXT & BACK ======= --> <!-- ======= BTN FORM NEXT & BACK ======= -->
@ -357,7 +361,7 @@
<button class="btn transparent" id="sign-up-btn"> <button class="btn transparent" id="sign-up-btn">
Daftar Daftar
</button> </button>
<p><a href="{{ route('login') }}">kembali</a></p> <p><a href="{{ route('login') }}">Kembali</a></p>
</div> </div>
<img src="{{ asset('assets/img/login_register/Payment Information-pana.svg') }}" class="image" <img src="{{ asset('assets/img/login_register/Payment Information-pana.svg') }}" class="image"
alt="" /> alt="" />
@ -371,7 +375,7 @@
<button class="btn transparent" id="sign-in-btn"> <button class="btn transparent" id="sign-in-btn">
Masuk Masuk
</button> </button>
<p><a href="{{ route('login') }}">kembali</a></p> <p><a href="{{ route('login') }}">Kembali</a></p>
</div> </div>
<img src="{{ asset('assets/img/login_register/Payment Information-pana.svg') }}" class="image" <img src="{{ asset('assets/img/login_register/Payment Information-pana.svg') }}" class="image"
alt="" /> alt="" />
@ -447,7 +451,10 @@
}); });
$.ajax({ $.ajax({
url: "{{ route('status-akun', ':email') }}".replace(':email', email), url: "{{ route('status-akun') }}",
data: {
email: email
},
type: 'GET', type: 'GET',
success: function(response) { success: function(response) {
let status = response.message[0].status let status = response.message[0].status
@ -560,6 +567,7 @@
clearInterval(timerInterval); clearInterval(timerInterval);
newEmail.text("Verifikasi"); // Mengembalikan teks awal tombol newEmail.text("Verifikasi"); // Mengembalikan teks awal tombol
newEmail.prop('disabled', false); // Mengaktifkan kembali tombol newEmail.prop('disabled', false); // Mengaktifkan kembali tombol
verificationStatus = false;
} }
}, 1000); // Setiap 1 detik }, 1000); // Setiap 1 detik
@ -581,7 +589,6 @@
text: response.message, text: response.message,
icon: response.status ? 'success' : 'error', icon: response.status ? 'success' : 'error',
}); });
verificationStatus = true;
}, },
error: function(error) { error: function(error) {
Swal.fire({ Swal.fire({
@ -589,7 +596,7 @@
text: 'Gagal karena kesalahan inputan atau jaringan', text: 'Gagal karena kesalahan inputan atau jaringan',
icon: 'error', icon: 'error',
}); });
console.log(error); verificationStatus = false;
}, },
}); });
} else { } else {
@ -598,124 +605,40 @@
text: 'Inputan yang anda masukan bukan alamat email. Silahkan masukan alamat email yang benar.', text: 'Inputan yang anda masukan bukan alamat email. Silahkan masukan alamat email yang benar.',
icon: 'error' icon: 'error'
}); });
verificationStatus = false;
} }
}); });
$('#signUp').on('click', function() { $('#msform').on('submit', function(e) {
let emptyInput = []; e.preventDefault();
const csrfToken = $('meta[name="csrf-token"]').attr('content'); const csrfToken = $('meta[name="csrf-token"]').attr('content');
let namaDepan = document.querySelector('[name="nama_depan"]').value; let kode = $('#emailVerification').val();
let namaBelakang = document.querySelector('[name="nama_belakang"]').value;
let nik = document.querySelector('[name="nik"]').value;
let email = document.querySelector('[name="new_email"]').value;
let nohp = document.querySelector('[name="nohp"]').value;
let gender = document.querySelector('[name="gender"]').value;
let emailVerification = document.querySelector('[name="email_verification"]').value;
// Tanggal lahir let form = this;
let tanggalLahir = document.querySelector('[name="tanggal_lahir"]').value;
// Mencari selisih tahun lahir dengan tahun sekarang
// Parse tanggal lahir ke objek Date
let tanggalLahirDate = new Date(tanggalLahir);
// Dapatkan tahun dari tanggal lahir if (!form.checkValidity()) {
let tahunLahir = tanggalLahirDate.getFullYear(); form.reportValidity();
return;
// Dapatkan tahun sekarang
let tahunSekarang = new Date().getFullYear();
// Hitung selisih tahun
let selisihTahun = tahunSekarang - tahunLahir;
// Akhir mencari selisih tahun
let kodeKelurahan = document.querySelector('[name="village_code"]').value;
let alamat = document.querySelector('[name="alamat"]').value;
let wajah = document.querySelector('[name="wajah"]').value;
let ktp = document.querySelector('[name="ktp"]').value;
let newPassword = document.querySelector('[name="new_password"]').value;
let confirmPassword = document.querySelector('[name="confirm_password"]').value;
// Pengecekan inputan yang kosong
if (namaDepan.trim() === "" && namaBelakang.trim() === "") {
emptyInput.push("Nama depan dan nama belakang tidak boleh kosong");
} }
if (nik.trim() === "") { if (verificationCode == kode && waktuSekarangDetik > 0) {
emptyInput.push("Nik tidak boleh kosong"); verificationStatus = true;
} }
if (email.trim() === "") { let formData = new FormData(this);
emptyInput.push("Email tidak boleh kosong"); formData.append('kode_verifikasi', verificationCode);
} formData.append('verification_status', verificationStatus ? 'true' : 'false');
if (!verificationStatus) {
emptyInput.push("Verifikasi email terlebih dahulu");
}
if (emailVerification.trim() === "") {
emptyInput.push("Kode verifikasi harus diisi");
}
if (emailVerification != verificationCode) {
emptyInput.push('Kode verifikasi harus sama dengan kode yang dikirim ke email');
}
if (nohp.trim() === "") {
emptyInput.push("nomor HP tidak boleh kosong");
}
if (gender.trim() === "") {
emptyInput.push("Jenis kelamin tidak boleh kosong");
}
if (tanggalLahir.trim() === "") {
emptyInput.push("Tanggal lahir tidak boleh kosong");
} else if (selisihTahun < 17) {
// kondisi dimana usia dibawah 18 tahun
emptyInput.push("Anda harus berusia 17 keatas");
}
if (kodeKelurahan.trim() === "" || alamat.trim() === "") {
emptyInput.push("Alamat tidak boleh kosong");
}
if (wajah.trim() === "") {
emptyInput.push("Silahkan ambil foto wajah anda");
}
if (ktp.trim() === "") {
emptyInput.push("Silahkan ambil foto KTP anda");
}
if (newPassword.trim() === "" && confirmPassword === "") {
emptyInput.push("Password tidak boleh kosong");
} else if (newPassword.trim() != confirmPassword) {
emptyInput.push("Password baru harus sama dengan password yang dikonfirmasi");
}
// kalau terdapat inputan kosong
if (emptyInput.length > 0) {
const emptyInputError = emptyInput.join(', ');
Swal.fire({ Swal.fire({
title: 'Gagal', html: '<div class="mt-3"><lord-icon src="https://cdn.lordicon.com/etwtznjn.json" trigger="loop" colors="primary:#0ab39c,secondary:#405189" style="width:120px;height:120px"></lord-icon><div class="mt-4 pt-2 fs-15"><h4>Form Anda sedang diproses!</h4><p class="text-muted mx-4 mb-0">Mohon tunggu...</p></div></div>',
text: emptyInputError, allowEscapeKey: false,
icon: 'error', allowOutsideClick: false,
confirmButtonText: 'OK', didOpen: () => {
Swal.showLoading();
}
}); });
} else {
const formData = new FormData();
formData.append('nama-depan', namaDepan);
formData.append('nama-belakang', namaBelakang);
formData.append('nik', nik);
formData.append('email', email);
formData.append('nohp', nohp);
formData.append('gender', gender);
formData.append('tanggal-lahir', tanggalLahir);
formData.append('kode-kelurahan', kodeKelurahan);
formData.append('alamat', alamat);
formData.append('wajah', wajah);
formData.append('ktp', ktp);
formData.append('new-password', newPassword);
formData.append('confirm-password', confirmPassword);
$.ajaxSetup({ $.ajaxSetup({
headers: { headers: {
@ -736,7 +659,7 @@
icon: response.status ? 'success' : 'error', icon: response.status ? 'success' : 'error',
confirmButtonText: 'OK', confirmButtonText: 'OK',
}).then(function() { }).then(function() {
if (response.status == true) { if (response.status) {
location.reload(); location.reload();
} }
}); });
@ -750,7 +673,6 @@
}); });
} }
}); });
}
}); });
// Register Akhir // Register Akhir
}); });

View File

@ -114,14 +114,7 @@
</div> </div>
<hr> <hr>
<div class="text-md-right"> <div class="text-md-right">
<div class="float-lg-left mb-lg-0 mb-3"> <button class="btn btn-warning btn-icon icon-left"><i class="fas fa-print"></i>Print</button>
<a href="/pembeli" class="btn btn-primary btn-icon icon-left"><i class="fas fa-credit-card"
id="payment"></i> Process
Payment</a>
<a href="/pembeli" class="btn btn-danger btn-icon icon-left"><i class="fas fa-times"></i>
Cancel</a>
</div>
<button class="btn btn-warning btn-icon icon-left"><i class="fas fa-print"></i> Print</button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -431,7 +431,10 @@
$("#selectCity").select2({ $("#selectCity").select2({
placeholder: "Pilih Kabupaten/Kota", placeholder: "Pilih Kabupaten/Kota",
ajax: { ajax: {
url: "/cari-kota/" + code, url: "/cari-kota/",
data: {
code: code,
},
processResults: function({ processResults: function({
data data
}) { }) {
@ -462,7 +465,10 @@
$("#selectDistrict").select2({ $("#selectDistrict").select2({
placeholder: "Pilih Kecamatan", placeholder: "Pilih Kecamatan",
ajax: { ajax: {
url: "/cari-kecamatan/" + code, // Isi dengan URL yang sesuai url: "/cari-kecamatan/", // Isi dengan URL yang sesuai
data: {
code: code,
},
processResults: function({ processResults: function({
data data
}) { }) {
@ -493,7 +499,10 @@
$("#selectVillage").select2({ $("#selectVillage").select2({
placeholder: "Pilih Kelurahan", placeholder: "Pilih Kelurahan",
ajax: { ajax: {
url: "/cari-kelurahan/" + code, // Isi dengan URL yang sesuai url: "/cari-kelurahan/", // Isi dengan URL yang sesuai
data: {
code: code,
},
processResults: function({ processResults: function({
data data
}) { }) {

View File

@ -2,11 +2,10 @@
use App\Models\Refunds; use App\Models\Refunds;
use App\Models\Transactions; use App\Models\Transactions;
//Admin
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
//Admin
use App\Http\Controllers\Login\LoginController; use App\Http\Controllers\Login\LoginController;
use App\Http\Controllers\Admin\AdminUserController; use App\Http\Controllers\Admin\AdminUserController;
use App\Http\Controllers\Profile\ProfileController;
use App\Http\Controllers\User\UserRefundController; use App\Http\Controllers\User\UserRefundController;
//Login //Login
use App\Http\Controllers\User\UserContactController; use App\Http\Controllers\User\UserContactController;
@ -18,6 +17,12 @@ use App\Http\Controllers\Admin\AdminDashboardController;
use App\Http\Controllers\User\UserTransactionController; use App\Http\Controllers\User\UserTransactionController;
use App\Http\Controllers\Admin\AdminTransactionController; use App\Http\Controllers\Admin\AdminTransactionController;
//Profile
use App\Http\Controllers\Profile\ProfileController;
//Invoice
use App\Http\Controllers\Invoice\InvoiceController;
// use Illuminate\Foundation\Auth\User; // use Illuminate\Foundation\Auth\User;
/* /*
@ -65,11 +70,11 @@ Route::controller(LoginController::class)->group(function(){
Route::get('logout','logout')->name('logout'); Route::get('logout','logout')->name('logout');
Route::post('authenticate','authenticate')->name('autentikasi'); Route::post('authenticate','authenticate')->name('autentikasi');
Route::post('register','register')->name('register'); Route::post('register','register')->name('register');
Route::get('cek-email/{email}','accountStatus')->name('status-akun'); Route::get('cek-email','accountStatus')->name('status-akun');
Route::get('cari-provinsi','searchProvince')->name('cari-provinsi'); Route::get('cari-provinsi','searchProvince')->name('cari-provinsi');
Route::get('cari-kota/{code}','searchCity')->name('cari-kota'); Route::get('cari-kota','searchCity')->name('cari-kota');
Route::get('cari-kecamatan/{code}','searchDistrict')->name('cari-kecamatan'); Route::get('cari-kecamatan','searchDistrict')->name('cari-kecamatan');
Route::get('cari-kelurahan/{code}','searchVillage')->name('cari-kelurahan'); Route::get('cari-kelurahan','searchVillage')->name('cari-kelurahan');
Route::post('kode-verifikasi','sendVerificationCode')->name('kirim-kode'); Route::post('kode-verifikasi','sendVerificationCode')->name('kirim-kode');
Route::get('ocr','getOcr'); Route::get('ocr','getOcr');
}); });
@ -85,6 +90,13 @@ Route::middleware(['auth'])->group(function(){
}); });
}); });
Route::prefix('invoice')->group(function(){
Route::controller(InvoiceController::class)->group(function(){
Route::get('/{id}','getInvoice')->name('invoice.get');
Route::get('export-invoice','exportInvoice')->name('invoice.export');
});
});
Route::middleware(['admin'])->group(function(){ Route::middleware(['admin'])->group(function(){
Route::prefix('admin')->group(function(){ Route::prefix('admin')->group(function(){
@ -98,9 +110,9 @@ Route::middleware(['auth'])->group(function(){
Route::get('admin-user','index')->name('admin-user.index'); Route::get('admin-user','index')->name('admin-user.index');
Route::get('admin-user/list-user','listUser')->name('admin-user.list-user'); Route::get('admin-user/list-user','listUser')->name('admin-user.list-user');
Route::get('admin-user/{id}','show')->name('admin-user.show'); Route::get('admin-user/{id}','show')->name('admin-user.show');
Route::delete('admin-user/{id}','delete')->name('admin-user.destroy'); Route::delete('admin-user/hapus-user','delete')->name('admin-user.destroy');
Route::put('admin-user/approve-user/{id}', 'approveUser')->name('admin-user.approve'); Route::put('admin-user/approve-user', 'approveUser')->name('admin-user.approve');
Route::put('admin-user/deny-user/{id}', 'denyUser')->name('admin-user.deny'); Route::put('admin-user/deny-user', 'denyUser')->name('admin-user.deny');
}); });
// Tampilan transaksi (Sudah) // Tampilan transaksi (Sudah)
@ -108,6 +120,9 @@ Route::middleware(['auth'])->group(function(){
Route::get('admin-transaction','index')->name('admin-transaction.index'); Route::get('admin-transaction','index')->name('admin-transaction.index');
Route::get('admin-transaction/detail/{id}','show')->name('admin-transaction.show'); Route::get('admin-transaction/detail/{id}','show')->name('admin-transaction.show');
Route::get('admin-transaction/list-transaction','listTransaction')->name('admin-transaction.list-transaction'); Route::get('admin-transaction/list-transaction','listTransaction')->name('admin-transaction.list-transaction');
Route::get('admin-transacion/transaction-tracking','transactionTracking')->name('admin.transaction-tracking');
Route::put('admin-transaction/accept-transaction','approveTransaction')->name('admin-transaction.accept-transaction');
Route::put('admin-transaction/deny-transaction','denyTransaction')->name('admin-transaction.deny-transaction');
}); });
// Tampilan, approve atau deny dan hapus refund // Tampilan, approve atau deny dan hapus refund
@ -135,8 +150,6 @@ Route::middleware(['auth'])->group(function(){
// Tampilan dashboard user beserta perhitungan // Tampilan dashboard user beserta perhitungan
Route::controller(UserDashboardController::class)->group(function(){ Route::controller(UserDashboardController::class)->group(function(){
Route::get('/','index')->name('user.index'); Route::get('/','index')->name('user.index');
//
}); });
// Tampilan, tambah dan hapus kontak // Tampilan, tambah dan hapus kontak
@ -145,9 +158,10 @@ Route::middleware(['auth'])->group(function(){
Route::get('user-contact/list-contact','listContact')->name('user-contact.list-contact'); Route::get('user-contact/list-contact','listContact')->name('user-contact.list-contact');
Route::post('user-contact','store')->name('user-contact.store'); Route::post('user-contact','store')->name('user-contact.store');
Route::get('admin-contact/{id}','show')->name('admin-contact.show'); Route::get('admin-contact/{id}','show')->name('admin-contact.show');
Route::delete('user-contact/delete/{id}','destroy')->name('user-contact.destroy'); Route::delete('user-contact/delete','destroy')->name('user-contact.destroy');
Route::get('user-contact/get-user-contact','getContact')->name('user-contact.get'); Route::get('user-contact/get-user-contact','getContact')->name('user-contact.get');
Route::get('user-contact/cek-contact/{email}','cekEmail')->name('user-contact.email'); Route::get('user-contact/cek-contact','cekEmail')->name('user-contact.email');
Route::get('user-contact/detailContact','detailContact')->name('user-contact.detail-contact');
}); });
// Tampilan transaksi, bayar, update status pengiriman dan refund // Tampilan transaksi, bayar, update status pengiriman dan refund
@ -157,7 +171,6 @@ Route::middleware(['auth'])->group(function(){
Route::get('user-pembeli/list-pembeli','listPembeli')->name('user-pembeli.list-pembeli'); Route::get('user-pembeli/list-pembeli','listPembeli')->name('user-pembeli.list-pembeli');
Route::get('user-pembeli/detail-transaksi/{id}','show')->name('user-pembeli.show'); Route::get('user-pembeli/detail-transaksi/{id}','show')->name('user-pembeli.show');
Route::get('user-pembeli/tambah-transaksi','create')->name('user-pembeli.create'); Route::get('user-pembeli/tambah-transaksi','create')->name('user-pembeli.create');
Route::get('user-pembeli/invoice/{id}','invoice')->name('user-pembeli.invoice');
Route::post('user-pembeli','store')->name('user-pembeli.store'); Route::post('user-pembeli','store')->name('user-pembeli.store');
Route::put('user-pembeli/bayar-transaksi','payTransaction')->name('user-pembeli.pay'); Route::put('user-pembeli/bayar-transaksi','payTransaction')->name('user-pembeli.pay');
Route::put('user-pembeli/batal-transaksi','cancelTransaction')->name('user-pembeli.cancel'); Route::put('user-pembeli/batal-transaksi','cancelTransaction')->name('user-pembeli.cancel');
@ -176,7 +189,7 @@ Route::middleware(['auth'])->group(function(){
Route::put('user-penjual/kirim-pesanan','sendingOrder')->name('user-penjual.sending'); Route::put('user-penjual/kirim-pesanan','sendingOrder')->name('user-penjual.sending');
Route::post('user-penjual/selesai-kirim-pesanan','sentOrder')->name('user-penjual.sent'); Route::post('user-penjual/selesai-kirim-pesanan','sentOrder')->name('user-penjual.sent');
Route::get('user-pembeli/invoice','invoiceTransaction'); Route::get('transaction-tracking','transactionTracking')->name('user.transaction-tracking');
}); });
// Tampilan refund // Tampilan refund