DataTable Server Side
This commit is contained in:
parent
0d50202f43
commit
676f05a162
@ -144,14 +144,12 @@ class AdminRefundController extends Controller
|
||||
if ($request->has('search') && !empty($request->search['value'])) {
|
||||
$searchRefund = $request->search['value'];
|
||||
if (!is_numeric($searchRefund)) {
|
||||
$subQuery->where(function ($a) use ($searchRefund) {
|
||||
$a->whereRaw('LOWER(b.nama_depan) LIKE ?', ['%' . strtolower($searchRefund) . '%'])
|
||||
->orWhereRaw('LOWER(b.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(refunds.status) LIKE ?', ['%' . strtolower($searchRefund) . '%']);
|
||||
});
|
||||
$subQuery->where(function ($a) use ($searchRefund) {
|
||||
$a->whereRaw("LOWER(CONCAT(b.nama_depan,' ',b.nama_belakang)) LIKE ?", ['%' . strtolower($searchRefund) . '%'])
|
||||
->orWhereRaw("LOWER(CONCAT(s.nama_depan,' ',s.nama_belakang)) 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)
|
||||
|
@ -5,8 +5,12 @@ namespace App\Http\Controllers\Admin;
|
||||
use App\Models\Transaction;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\TransactionDescription;
|
||||
use App\Models\TransactionUser;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Throwable;
|
||||
use Yajra\DataTables\DataTables;
|
||||
|
||||
class AdminTransactionController extends Controller
|
||||
{
|
||||
@ -16,8 +20,7 @@ class AdminTransactionController extends Controller
|
||||
public function index()
|
||||
{
|
||||
return view('admin.transaction.index', [
|
||||
'transactions' => Transaction::latest()
|
||||
->get(),
|
||||
'transactions' => Transaction::latest()->get(),
|
||||
]);
|
||||
}
|
||||
|
||||
@ -34,23 +37,163 @@ class AdminTransactionController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
public function aprroveTransaction($id){
|
||||
try{
|
||||
public function approveTransaction(Request $request)
|
||||
{
|
||||
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){
|
||||
try{
|
||||
public function denyTransaction(Request $request)
|
||||
{
|
||||
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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@ -32,10 +32,10 @@ class AdminUserController extends Controller
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy($id)
|
||||
public function destroy(Request $request)
|
||||
{
|
||||
try {
|
||||
$result = User::destroy($id);
|
||||
$result = User::destroy($request->id);
|
||||
if ($result) {
|
||||
return response()->json([
|
||||
'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';
|
||||
$result = $user->save();
|
||||
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';
|
||||
$result = $user->save();
|
||||
if ($result) {
|
||||
@ -96,12 +96,16 @@ class AdminUserController extends Controller
|
||||
|
||||
if ($request->has('search') && !empty($request->search['value'])) {
|
||||
$searchUser = $request->search['value'];
|
||||
$subQuery->where(function ($a) use ($searchUser) {
|
||||
$a->whereRaw('LOWER(email) LIKE ?', ['%' . strtolower($searchUser) . '%'])
|
||||
->orWhereRaw('LOWER(nama_depan) LIKE ?', ['%' . strtolower($searchUser) . '%'])
|
||||
->orWhereRaw('LOWER(nama_belakang) LIKE ?', ['%' . strtolower($searchUser) . '%'])
|
||||
->orWhereRaw('LOWER(status) LIKE ?',['%'.strtolower($searchUser).'%']);
|
||||
});
|
||||
if(!is_numeric($searchUser)){
|
||||
$subQuery->where(function ($a) use ($searchUser) {
|
||||
$a->whereRaw('LOWER(email) LIKE ?', ['%' . strtolower($searchUser) . '%'])
|
||||
->orWhereRaw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?", ['%' . strtolower($searchUser) . '%'])
|
||||
->orWhereRaw('LOWER(status) LIKE ?',['%'.strtolower($searchUser).'%']);
|
||||
});
|
||||
}else{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$queryUser = User::from(DB::raw("({$subQuery->toSql()}) as tmp"))
|
||||
|
24
app/Http/Controllers/Invoice/InvoiceController.php
Normal file
24
app/Http/Controllers/Invoice/InvoiceController.php
Normal 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)
|
||||
{
|
||||
}
|
||||
}
|
@ -8,6 +8,9 @@ use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
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\Str;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
@ -44,7 +47,7 @@ class LoginController extends Controller
|
||||
'email.email' => 'Alamat email harus berformat valid.',
|
||||
'password.required' => 'Password wajib diisi.',
|
||||
'password.min' => 'Password harus memiliki panjang minimal 8 karakter.',
|
||||
]
|
||||
],
|
||||
);
|
||||
|
||||
if (Auth::attempt($credentials)) {
|
||||
@ -55,18 +58,18 @@ class LoginController extends Controller
|
||||
} else {
|
||||
return redirect()->intended('user');
|
||||
}
|
||||
} else if(Auth::user()->status == 'Rejected'){
|
||||
} elseif (Auth::user()->status == 'Rejected') {
|
||||
Session::flash('message', 'Akun ditolak karena tidak memenuhi persyaratan');
|
||||
return redirect()->back();
|
||||
} else {
|
||||
Session::flash('message', 'Akun tidak ditemukan atau sedang dalam pengajuan');
|
||||
return redirect()->back();
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
return redirect()
|
||||
->back()
|
||||
->withErrors($credentials)
|
||||
->onlyInput('email');
|
||||
->back()
|
||||
->withErrors('Email atau password salah')
|
||||
->onlyInput('email');
|
||||
}
|
||||
}
|
||||
|
||||
@ -88,19 +91,88 @@ class LoginController extends Controller
|
||||
|
||||
public function register(Request $request)
|
||||
{
|
||||
$nama_depan = $request->get('nama-depan');
|
||||
$nama_belakang = $request->get('nama-belakang');
|
||||
$tanggal_lahir = $request->get('tanggal-lahir');
|
||||
$new_password = $request->get('new-password');
|
||||
$credentials = $request->validate(
|
||||
[
|
||||
'nama_depan' => ['required'],
|
||||
'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');
|
||||
$email = $request->get('email');
|
||||
$email = $request->get('new_email');
|
||||
$nohp = $request->get('nohp');
|
||||
$alamat = $request->get('alamat');
|
||||
$foto_ktp = '';
|
||||
$foto_wajah = '';
|
||||
$persentase_kemiripan = 0;
|
||||
$gender = $request->get('gender');
|
||||
$kode_kelurahan = $request->get('kode-kelurahan');
|
||||
$kode_kelurahan = $request->get('village_code');
|
||||
|
||||
$ktpBase64 = $request->request->get('ktp');
|
||||
$wajahBase64 = $request->request->get('wajah');
|
||||
@ -121,41 +193,41 @@ class LoginController extends Controller
|
||||
|
||||
//OCR
|
||||
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->contrast(10); // Increase contrast, adjust the value as needed
|
||||
// $image->greyscale(); // Convert to grayscale
|
||||
// $image->contrast(10); // Increase contrast, adjust the value as needed
|
||||
|
||||
$preprocessedfotoKTP = public_path('storage/preprocessed/preprocessed_image.jpg');
|
||||
$image->save($preprocessedfotoKTP);
|
||||
// $preprocessedfotoKTP = public_path('storage/preprocessed/preprocessed_image.jpg');
|
||||
// $image->save($preprocessedfotoKTP);
|
||||
|
||||
$result = (new TesseractOCR($preprocessedfotoKTP))->run();
|
||||
// $result = (new TesseractOCR($preprocessedfotoKTP))->run();
|
||||
|
||||
// (5) Normalize
|
||||
|
||||
$lines = explode("\n", $result);
|
||||
$namaOCR = '';
|
||||
$nikOCR = '';
|
||||
$nikInputan = $nik;
|
||||
$namaInputan = $nama_depan . ' ' . $nama_belakang;
|
||||
// $lines = explode("\n", $result);
|
||||
// $namaOCR = '';
|
||||
// $nikOCR = '';
|
||||
// $nikInputan = $nik;
|
||||
// $namaInputan = $nama_depan . ' ' . $nama_belakang;
|
||||
|
||||
foreach ($lines as $line) {
|
||||
// Mencari NIK
|
||||
if (strpos($line, $nikInputan) !== false) {
|
||||
$nikOCR = preg_replace('/[^0-9]/', '', $line);
|
||||
}
|
||||
// foreach ($lines as $line) {
|
||||
// // Mencari NIK
|
||||
// if (strpos($line, $nikInputan) !== false) {
|
||||
// $nikOCR = preg_replace('/[^0-9]/', '', $line);
|
||||
// }
|
||||
|
||||
// Mencari nama
|
||||
if (strpos($line, $namaInputan) !== false) {
|
||||
$namaOCR = trim(substr($line, strpos($line, ':') + 1));
|
||||
}
|
||||
}
|
||||
// // Mencari nama
|
||||
// if (strpos($line, $namaInputan) !== false) {
|
||||
// $namaOCR = trim(substr($line, strpos($line, ':') + 1));
|
||||
// }
|
||||
// }
|
||||
|
||||
//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';
|
||||
|
||||
// if (similar_text($nikInputan, $nikOCR, $percent) >= 70 && similar_text($namaOCR, $namaOCR, $percent) >= 70) {
|
||||
@ -163,51 +235,51 @@ class LoginController extends Controller
|
||||
// } else {
|
||||
// $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([
|
||||
'id' => Uuid::uuid4(),
|
||||
'nama_depan' => $nama_depan,
|
||||
'nama_belakang' => $nama_belakang,
|
||||
'tanggal_lahir' => $tanggal_lahir,
|
||||
'email' => $email,
|
||||
'email_verified_at' => now(),
|
||||
'password' => $password,
|
||||
'nohp' => $nohp,
|
||||
'nik' => $nik,
|
||||
'alamat' => $alamat,
|
||||
'foto_ktp' => $foto_ktp,
|
||||
'foto_wajah' => $foto_wajah,
|
||||
'foto_profile' => null,
|
||||
'persentase_kemiripan' => $persentase_kemiripan,
|
||||
'gender' => $gender,
|
||||
'kode_kelurahan' => $kode_kelurahan,
|
||||
'remember_token' => Str::random(10),
|
||||
]);
|
||||
$result = User::create([
|
||||
'nama_depan' => $nama_depan,
|
||||
'nama_belakang' => $nama_belakang,
|
||||
'tanggal_lahir' => $tanggal_lahir,
|
||||
'email' => $email,
|
||||
'email_verified_at' => now(),
|
||||
'password' => $password,
|
||||
'nohp' => $nohp,
|
||||
'nik' => $nik,
|
||||
'alamat' => $alamat,
|
||||
'foto_ktp' => $foto_ktp,
|
||||
'foto_wajah' => $foto_wajah,
|
||||
'foto_profile' => null,
|
||||
'persentase_kemiripan' => $persentase_kemiripan,
|
||||
'gender' => $gender,
|
||||
'kode_kelurahan' => $kode_kelurahan,
|
||||
'remember_token' => Str::random(10),
|
||||
]);
|
||||
|
||||
DB::commit();
|
||||
|
||||
if ($result) {
|
||||
return response()->json([
|
||||
'status' => true,
|
||||
'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([
|
||||
'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()) {
|
||||
return response()->json([
|
||||
'status' => true,
|
||||
@ -228,27 +300,27 @@ class LoginController extends Controller
|
||||
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')) . '%')
|
||||
->paginate(10);
|
||||
|
||||
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')) . '%')
|
||||
->paginate(10);
|
||||
|
||||
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')) . '%')
|
||||
->paginate(10);
|
||||
|
||||
|
@ -75,12 +75,12 @@ class UserContactController extends Controller
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy($id)
|
||||
public function destroy(Request $request)
|
||||
{
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
Contact::destroy($id);
|
||||
Contact::destroy($request->id);
|
||||
|
||||
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')
|
||||
->first();
|
||||
if ($result) {
|
||||
@ -115,13 +115,13 @@ class UserContactController extends Controller
|
||||
} else {
|
||||
return response()->json([
|
||||
'status' => false,
|
||||
'message' => 'Akun dengen email ' . $email . ' tersedia dan belum diverifikasi',
|
||||
'message' => 'Akun dengen email ' . $request->email . ' tersedia dan belum diverifikasi',
|
||||
]);
|
||||
}
|
||||
} else {
|
||||
return response()->json([
|
||||
'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){
|
||||
try{
|
||||
$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)
|
||||
->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'])){
|
||||
$searchContact = $request->search['value'];
|
||||
$subQuery->where(function($a) use ($searchContact){
|
||||
$a->whereRaw('LOWER(users.nama_depan) LIKE ?',['%'.strtolower($searchContact).'%'])
|
||||
->orWhereRaw('LOWER(users.nama_belakang) LIKE ?',['%'.strtolower($searchContact).'%']);
|
||||
$a->whereRaw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?",['%'.strtolower($searchContact).'%']);
|
||||
});
|
||||
}
|
||||
|
||||
@ -153,21 +151,10 @@ class UserContactController extends Controller
|
||||
return DataTables::of($queryContact)
|
||||
->addIndexColumn()
|
||||
->addColumn('action', function($row){
|
||||
$village = $row->kelurahan;
|
||||
$city = $row->kota;
|
||||
$district = $row->kecamatan;
|
||||
$province = $row->provinsi;
|
||||
$html_code = '
|
||||
<button class="btn btn-info open-detail-modal" data-toggle="modal"
|
||||
data-target="#modaldetail" id="detailContact"
|
||||
data-nama="'.$row->nama_lengkap.'"
|
||||
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>
|
||||
data-id="'.$row->id.'">Detail</button>
|
||||
<button class="btn btn-danger open-detail-modal" id="deleteContact"
|
||||
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']);
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@ -111,44 +111,72 @@ class UserRefundController extends Controller
|
||||
|
||||
public function listRefund(Request $request)
|
||||
{
|
||||
$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');
|
||||
try{
|
||||
$subQuery = Refund::join('transactions', 'refunds.transaction_id', '=', 'transactions.id')
|
||||
->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'])){
|
||||
$searchRefund = $request->search['value'];
|
||||
$subQuery->where(function($a) use ($searchRefund){
|
||||
$a->whereRaw('LOWER(transactions.nama_barang) LIKE ?',['%'.strtolower($searchRefund).'%'])
|
||||
->orWhereRaw('LOWER(transactions.penjual) LIKE ?',['%'.strtolower($searchRefund).'%']);
|
||||
});
|
||||
}
|
||||
|
||||
$queryRefund = Refund::from(DB::raw("({$subQuery->toSql()}) as tmp"))
|
||||
->mergeBindings($subQuery->getQuery()) // Menggabungkan binding parameters
|
||||
->select('*')
|
||||
->get();
|
||||
|
||||
if ($request->ajax()) {
|
||||
return DataTables::of($queryRefund)
|
||||
->addIndexColumn()
|
||||
->addColumn('aksi', function ($row) {
|
||||
$url = route('user-refund.show', ['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>
|
||||
</ul>
|
||||
</div>';
|
||||
return $html_code;
|
||||
})
|
||||
->rawColumns(['aksi'])
|
||||
->make(true);
|
||||
if($request->has('search') && !empty($request->search['value'])){
|
||||
$searchRefund = $request->search['value'];
|
||||
if(!is_numeric($searchRefund)){
|
||||
$subQuery->where(function($a) use ($searchRefund){
|
||||
$a->whereRaw("LOWER(CONCAT(s.nama_depan,' ',s.nama_belakang)) 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"))
|
||||
->mergeBindings($subQuery->getQuery()) // Menggabungkan binding parameters
|
||||
->select('*')
|
||||
->get();
|
||||
|
||||
if ($request->ajax()) {
|
||||
return DataTables::of($queryRefund)
|
||||
->addIndexColumn()
|
||||
->addColumn('action', function ($row) {
|
||||
$url = route('user-refund.show', ['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>
|
||||
</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']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -30,11 +30,7 @@ class UserTransactionController extends Controller
|
||||
|
||||
public function indexPembeli()
|
||||
{
|
||||
return view('user.transaction.pembeli.index', [
|
||||
'transactions' => Transaction::where('pembeli', Auth::user()->email)
|
||||
->latest()
|
||||
->get(),
|
||||
]);
|
||||
return view('user.transaction.pembeli.index');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -42,11 +38,7 @@ class UserTransactionController extends Controller
|
||||
*/
|
||||
public function indexPenjual()
|
||||
{
|
||||
return view('user.transaction.penjual.index', [
|
||||
'transactions' => Transaction::where('penjual', Auth::user()->email)
|
||||
->latest()
|
||||
->get(),
|
||||
]);
|
||||
return view('user.transaction.penjual.index');
|
||||
}
|
||||
|
||||
public function show($id)
|
||||
@ -84,12 +76,6 @@ class UserTransactionController extends Controller
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
@ -546,11 +532,11 @@ class UserTransactionController extends Controller
|
||||
|
||||
$result = json_decode($response->body(), true);
|
||||
|
||||
$code = substr($result['status_code'], 0, 1);
|
||||
if ($code == '4') {
|
||||
if (in_array($result['status_code'], ['412','401'])) {
|
||||
return response()->json([
|
||||
'status' => false,
|
||||
'message' => 'Transaksi gagal.',
|
||||
'data' => $result
|
||||
]);
|
||||
} else {
|
||||
try {
|
||||
@ -558,7 +544,7 @@ class UserTransactionController extends Controller
|
||||
|
||||
Transaction::where('id', $request->id)->update([
|
||||
'status_transaksi' => 'failure',
|
||||
'status_pembayaran' => $result['transaction_status'],
|
||||
'status_pembayaran' => 'cancel'
|
||||
]);
|
||||
|
||||
TransactionDescription::create([
|
||||
@ -825,46 +811,213 @@ class UserTransactionController extends Controller
|
||||
|
||||
public function listPembeli(Request $request)
|
||||
{
|
||||
$subQuery = transaction::join('transactions', 'refunds.total', '=', 'transactions.id')
|
||||
->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');
|
||||
try{
|
||||
$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'])){
|
||||
$searchPembeli = $request->search['value'];
|
||||
$subQuery->where(function($a) use ($searchPembeli){
|
||||
$a->whereRaw('LOWER(transactions.penjual) LIKE ?',['%'.strtolower($searchPembeli).'%'])
|
||||
->orWhereRaw('LOWER(transactions.nama_barang) LIKE ?',['%'.strtolower($searchPembeli).'%']);
|
||||
});
|
||||
if($request->has('search') && !empty($request->search['value'])){
|
||||
$searchPembeli = $request->search['value'];
|
||||
if(!is_numeric($searchPembeli)){
|
||||
$subQuery->where(function($a) use ($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.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"))
|
||||
->mergeBindings($subQuery->getQuery()) // Menggabungkan binding parameters
|
||||
->select('*')
|
||||
->get();
|
||||
|
||||
if ($request->ajax()) {
|
||||
return DataTables::of($queryPembeli)
|
||||
->addIndexColumn()
|
||||
->addColumn('action', function ($row) {
|
||||
$url = route('user-pembeli.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 == '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>
|
||||
</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']);
|
||||
}
|
||||
|
||||
$queryPembeli = transaction::from(DB::raw("({$subQuery->toSql()}) as tmp"))
|
||||
->mergeBindings($subQuery->getQuery()) // Menggabungkan binding parameters
|
||||
->select('*')
|
||||
->get();
|
||||
|
||||
if ($request->ajax()) {
|
||||
return DataTables::of($queryPembeli)
|
||||
->addIndexColumn()
|
||||
->addColumn('aksi', function ($row) {
|
||||
$url = route('user-pembeli.show', ['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>
|
||||
</ul>
|
||||
</div>';
|
||||
return $html_code;
|
||||
})
|
||||
->rawColumns(['aksi'])
|
||||
->make(true);
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@ -20,7 +20,6 @@ class User extends Authenticatable
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $fillable = [
|
||||
'id',
|
||||
'nama_depan',
|
||||
'nama_belakang',
|
||||
'tanggal_lahir',
|
||||
|
@ -500,7 +500,10 @@ $(document).ready(function () {
|
||||
$("#selectCity").select2({
|
||||
placeholder: "Pilih Kabupaten/Kota",
|
||||
ajax: {
|
||||
url: "/cari-kota/" + code,
|
||||
url: "/cari-kota/",
|
||||
data: {
|
||||
code: code,
|
||||
},
|
||||
processResults: function ({ data }) {
|
||||
return {
|
||||
results: $.map(data, function (item) {
|
||||
@ -529,7 +532,10 @@ $(document).ready(function () {
|
||||
$("#selectDistrict").select2({
|
||||
placeholder: "Pilih Kecamatan",
|
||||
ajax: {
|
||||
url: "/cari-kecamatan/" + code, // Isi dengan URL yang sesuai
|
||||
url: "/cari-kecamatan/",
|
||||
data: {
|
||||
code: code,
|
||||
}, // Isi dengan URL yang sesuai
|
||||
processResults: function ({ data }) {
|
||||
return {
|
||||
results: $.map(data, function (item) {
|
||||
@ -558,7 +564,10 @@ $(document).ready(function () {
|
||||
$("#selectVillage").select2({
|
||||
placeholder: "Pilih Kelurahan",
|
||||
ajax: {
|
||||
url: "/cari-kelurahan/" + code, // Isi dengan URL yang sesuai
|
||||
url: "/cari-kelurahan/",
|
||||
data: {
|
||||
code: code,
|
||||
}, // Isi dengan URL yang sesuai
|
||||
processResults: function ({ data }) {
|
||||
return {
|
||||
results: $.map(data, function (item) {
|
||||
|
@ -13,7 +13,7 @@
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<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>
|
||||
<tr>
|
||||
<th class="text-center">
|
||||
@ -39,38 +39,34 @@
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
@include('admin.refund.modal-keterangan-status')
|
||||
<script>
|
||||
$(function() {
|
||||
let listRefund = $('#table-refund').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
// ajax: "{{ route('admin-refund.list-refund') }}",
|
||||
ajax: {
|
||||
url: `{{ route('admin-refund.list-refund') }}`,
|
||||
data: function(d) {
|
||||
// Validasi dan pembersihan input sebelum dikirim
|
||||
d.search.value = cleanAndValidateInput(d.search.value);
|
||||
// Tambahan data lain yang akan dikirim
|
||||
// ...
|
||||
}
|
||||
},
|
||||
ajax: `{{ route('admin-refund.list-refund') }}`,
|
||||
columns: [{
|
||||
data: 'DT_RowIndex',
|
||||
name: 'DT_RowIndex',
|
||||
orderable: false,
|
||||
searchable: true,
|
||||
searchable: false,
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: 'pembeli',
|
||||
name: 'pembeli',
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: 'nama_barang',
|
||||
name: 'nama_barang',
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: 'penjual',
|
||||
name: 'penjual',
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: 'total',
|
||||
@ -87,6 +83,7 @@
|
||||
// Untuk tipe yang lain, kembalikan nilai asli
|
||||
return data;
|
||||
},
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: 'created_at',
|
||||
@ -95,7 +92,7 @@
|
||||
if (type === 'display') {
|
||||
var date = new Date(data);
|
||||
var day = date.getDate();
|
||||
var month = date.toLocaleString('en-US', {
|
||||
var month = date.toLocaleString('id-ID', {
|
||||
month: 'short'
|
||||
});
|
||||
var year = date.getFullYear();
|
||||
@ -104,7 +101,8 @@
|
||||
return formattedDate;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
},
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: 'due_date',
|
||||
@ -113,7 +111,7 @@
|
||||
if (type === 'display') {
|
||||
var date = new Date(data);
|
||||
var day = date.getDate();
|
||||
var month = date.toLocaleString('en-US', {
|
||||
var month = date.toLocaleString('id-ID', {
|
||||
month: 'short'
|
||||
});
|
||||
var year = date.getFullYear();
|
||||
@ -122,37 +120,31 @@
|
||||
return formattedDate;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
},
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: 'status',
|
||||
render: function(data, type, row) {
|
||||
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') {
|
||||
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 {
|
||||
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,
|
||||
searchable: true
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: 'action',
|
||||
name: 'action',
|
||||
orderable: false,
|
||||
searchable: false
|
||||
searchable: false,
|
||||
className: 'text-center'
|
||||
}
|
||||
],
|
||||
});
|
||||
|
||||
// Fungsi untuk membersihkan dan validasi input
|
||||
function cleanAndValidateInput(input) {
|
||||
// Lakukan pembersihan atau validasi sesuai kebutuhan
|
||||
// Contoh: Mengganti karakter yang tidak diizinkan dengan spasi
|
||||
return input.replace(/[^a-zA-Z0-9\s]/g, '');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@extends('admin.transaction.modal-keterangan-status')
|
||||
|
@ -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>
|
@ -12,15 +12,19 @@
|
||||
name: 'DT_RowIndex',
|
||||
orderable: false,
|
||||
searchable: false,
|
||||
className: 'text-center'
|
||||
}, {
|
||||
data: 'bulan',
|
||||
name: 'bulan',
|
||||
className: 'text-center'
|
||||
}, {
|
||||
data: 'tahun',
|
||||
name: 'tahun',
|
||||
className: 'text-center'
|
||||
}, {
|
||||
data: 'persentase',
|
||||
name: 'persentase'
|
||||
name: 'persentase',
|
||||
className: 'text-center'
|
||||
}, {
|
||||
data: 'status',
|
||||
render: function(data, type, row) {
|
||||
@ -30,13 +34,13 @@
|
||||
return `<div class="badge badge-danger">${row.status}</div>`;
|
||||
}
|
||||
},
|
||||
orderable: true,
|
||||
searchable: true
|
||||
className: 'text-center'
|
||||
}, {
|
||||
data: 'action',
|
||||
name: 'action',
|
||||
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>
|
||||
</div>
|
||||
<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>
|
||||
<tr>
|
||||
<th class="text-center">
|
||||
|
@ -161,19 +161,18 @@
|
||||
</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>
|
||||
@if ($transaction->status_transaksi == 'challenge')
|
||||
<hr>
|
||||
<div class="text-md-center">
|
||||
<p>Pada transaksi ini terjadi penipuan. Apakah anda ini menerima transaksi ini?</p>
|
||||
<button class="btn btn-primary btn-icon icon-left" data-id="{{ $transaction->id }}"
|
||||
id="acceptTransaction"><i class="fas fa-credit-card" id="payment"></i>Terima
|
||||
Transaksi</button>
|
||||
<button class="btn btn-danger btn-icon icon-left" data-id="{{ $transaction->id }}"
|
||||
id="denyTransaction"><i class="fas fa-times"></i>
|
||||
Tolak Transaksi</button>
|
||||
</div>
|
||||
<button class="btn btn-warning btn-icon icon-left"><i class="fas fa-print"></i>
|
||||
Print</button>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -181,4 +180,125 @@
|
||||
</div>
|
||||
</section>
|
||||
</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
|
||||
|
@ -13,7 +13,7 @@
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<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>
|
||||
<tr>
|
||||
<th class="text-center">
|
||||
@ -24,83 +24,151 @@
|
||||
<th>Penjual</th>
|
||||
<th>Total</th>
|
||||
<th>Tanggal Transaksi</th>
|
||||
<th>Tanggal Update</th>
|
||||
<th>Status</th>
|
||||
<th>Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<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>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
@include('admin.transaction.modal-tracking')
|
||||
@include('admin.transaction.modal-keterangan-status')
|
||||
<script>
|
||||
$(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) {
|
||||
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);
|
||||
|
||||
// Buat variabel untuk menyimpan HTML aktivitas
|
||||
transactionDatas = transactionDatas.reverse();
|
||||
var activitiesHtml = '';
|
||||
$.ajaxSetup({
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': csrfToken
|
||||
}
|
||||
});
|
||||
|
||||
// Periksa apakah ada data transaksi
|
||||
if (transactionDatas && transactionDatas.length > 0) {
|
||||
// Iterasi melalui data transaksi dan tambahkan ke activitiesHtml
|
||||
$.each(transactionDatas, function(index, transactionDescription) {
|
||||
activitiesHtml += `
|
||||
$.ajax({
|
||||
url: "{{ route('admin.transaction-tracking') }}",
|
||||
type: 'GET',
|
||||
data: {
|
||||
id: transactionId
|
||||
},
|
||||
success: function(response) {
|
||||
var transactionDatas = response.data;
|
||||
// Buat variabel untuk menyimpan HTML aktivitas
|
||||
var activitiesHtml = '';
|
||||
|
||||
// Periksa apakah ada data transaksi
|
||||
if (transactionDatas && transactionDatas.length > 0) {
|
||||
transactionDatas = transactionDatas.reverse();
|
||||
// Iterasi melalui data transaksi dan tambahkan ke activitiesHtml
|
||||
$.each(transactionDatas, function(index, transactionDescription) {
|
||||
activitiesHtml += `
|
||||
<div class="activity">
|
||||
<div class="activity-icon ${transactionDescription.background} text-white shadow-primary">
|
||||
<i class="${transactionDescription.judul}" style="font-size: 36px;"></i>
|
||||
@ -113,10 +181,10 @@
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
} else {
|
||||
// Tidak ada data transaksi, tambahkan pesan kosong
|
||||
activitiesHtml += `
|
||||
});
|
||||
} else {
|
||||
// Tidak ada data transaksi, tambahkan pesan kosong
|
||||
activitiesHtml += `
|
||||
<div class="activity">
|
||||
<div class="activity-icon bg-primary text-white shadow-primary">
|
||||
<i class="fas fa-ban" style="font-size: 36px;"></i>
|
||||
@ -129,11 +197,22 @@
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
// Menampilkan data dalam modal
|
||||
var modal = $(this);
|
||||
modal.find('.activities').html(activitiesHtml);
|
||||
// Menampilkan data dalam modal
|
||||
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');
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
@ -186,6 +186,15 @@
|
||||
cancelButtonText: 'Tidak'
|
||||
}).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
|
||||
@ -193,8 +202,10 @@
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
url: "{{ route('admin-user.approve', ':id') }}".replace(
|
||||
':id', id),
|
||||
url: "{{ route('admin-user.approve') }}",
|
||||
data: {
|
||||
id: id
|
||||
},
|
||||
type: 'PUT',
|
||||
success: function(response) {
|
||||
Swal.fire({
|
||||
@ -234,6 +245,15 @@
|
||||
cancelButtonText: 'Tidak'
|
||||
}).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
|
||||
@ -241,8 +261,10 @@
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
url: "{{ route('admin-user.deny', ':id') }}".replace(
|
||||
':id', id),
|
||||
url: "{{ route('admin-user.deny') }}",
|
||||
data: {
|
||||
id: id
|
||||
}
|
||||
type: 'PUT',
|
||||
success: function(response) {
|
||||
Swal.fire({
|
||||
|
@ -13,11 +13,10 @@
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<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>
|
||||
<tr>
|
||||
<th class="text-center">#</th>
|
||||
<th>UID</th>
|
||||
<th>Foto Profil</th>
|
||||
<th>Nama Lengkap</th>
|
||||
<th>Email</th>
|
||||
@ -47,11 +46,7 @@
|
||||
name: 'DT_RowIndex',
|
||||
orderable: false,
|
||||
searchable: false,
|
||||
}, {
|
||||
data: 'id',
|
||||
name: 'id',
|
||||
orderable: false,
|
||||
searchable: true,
|
||||
className: 'text-center'
|
||||
}, {
|
||||
data: 'foto_profile',
|
||||
name: 'foto_profile',
|
||||
@ -64,27 +59,33 @@
|
||||
},
|
||||
orderable: false,
|
||||
searchable: false,
|
||||
className: 'text-center'
|
||||
}, {
|
||||
data: 'nama_lengkap',
|
||||
name: 'nama_lengkap'
|
||||
name: 'nama_lengkap',
|
||||
className: 'text-center'
|
||||
}, {
|
||||
data: 'email',
|
||||
name: 'email'
|
||||
name: 'email',
|
||||
className: 'text-center'
|
||||
}, {
|
||||
data: 'tanggal_daftar',
|
||||
name: 'tanggal_daftar',
|
||||
render: function(data, type, row) {
|
||||
if (type == 'display') {
|
||||
if (type === 'display') {
|
||||
var date = new Date(data);
|
||||
var formattedDate = date.toLocaleDateString('en-US', {
|
||||
year: '2-digit',
|
||||
month: '2-digit',
|
||||
day: '2-digit'
|
||||
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',
|
||||
render: function(data, type, row) {
|
||||
@ -97,12 +98,14 @@
|
||||
}
|
||||
},
|
||||
orderable: true,
|
||||
searchable: true
|
||||
searchable: true,
|
||||
className: 'text-center'
|
||||
}, {
|
||||
data: 'action',
|
||||
name: 'action',
|
||||
orderable: false,
|
||||
searchable: false
|
||||
searchable: false,
|
||||
className: 'text-center'
|
||||
}],
|
||||
});
|
||||
|
||||
@ -127,10 +130,10 @@
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
url: "{{ route('admin-user.destroy', ':admin_user') }}"
|
||||
.replace(
|
||||
':admin_user',
|
||||
dataId),
|
||||
url: "{{ route('admin-user.destroy') }}"
|
||||
data: {
|
||||
id: dataId
|
||||
},
|
||||
type: 'DELETE',
|
||||
processData: false,
|
||||
contentType: false,
|
||||
|
@ -23,7 +23,7 @@
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<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>
|
||||
<tr class="text-center">
|
||||
<th>#</th>
|
||||
@ -32,6 +32,7 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@ -46,27 +47,45 @@
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
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) {
|
||||
var triggerLink = $(event.relatedTarget);
|
||||
let dataNama = triggerLink.data('nama');
|
||||
let dataEmail = triggerLink.data('email');
|
||||
let dataNoHP = triggerLink.data('nohp');
|
||||
let dataAlamat = triggerLink.data('alamat');
|
||||
let dataProvince = triggerLink.data('province');
|
||||
let dataCity = triggerLink.data('city');
|
||||
let dataDistrict = triggerLink.data('district');
|
||||
let dataVillage = triggerLink.data('village');
|
||||
teksNama.innerHTML = dataNama;
|
||||
teksAlamat.innerHTML = dataNama + ", " + capital(dataVillage) + ", " + capital(
|
||||
dataDistrict) + ", " + capital(dataCity) + ", " + capital(dataProvince);
|
||||
teksNohp.innerHTML = dataNoHP;
|
||||
teksEmail.innerHTML = dataEmail;
|
||||
let dataId = triggerLink.data('id');
|
||||
const csrfToken = $('meta[name="csrf-token"]').attr('content');
|
||||
var modal = $(this);
|
||||
|
||||
$.ajaxSetup({
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': csrfToken
|
||||
}
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
url: "{{ route('user-contact.detail-contact') }}",
|
||||
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) {
|
||||
@ -128,9 +147,10 @@
|
||||
|
||||
|
||||
$.ajax({
|
||||
url: "{{ route('user-contact.destroy', ':id') }}".replace(
|
||||
':id',
|
||||
dataId),
|
||||
url: "{{ route('user-contact.destroy') }}",
|
||||
data: {
|
||||
id: dataId
|
||||
}
|
||||
type: 'DELETE',
|
||||
contentType: false,
|
||||
processType: false,
|
||||
@ -184,7 +204,10 @@
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
url: "{{ route('user-contact.email', ':email') }}".replace(':email', email),
|
||||
url: "{{ route('user-contact.email') }}",
|
||||
data: {
|
||||
email: email
|
||||
}
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
if (response.status) {
|
||||
|
@ -18,7 +18,7 @@
|
||||
<form role="form" id="formContact">
|
||||
<div class="form-group">
|
||||
<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 class="form-group">
|
||||
<button type="button" class="btn btn-primary" id="checkButton">Check</button>
|
||||
@ -26,7 +26,7 @@
|
||||
|
||||
<div class="form-group">
|
||||
<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>
|
||||
</form>
|
||||
</div>
|
||||
@ -34,7 +34,7 @@
|
||||
|
||||
<!-- 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>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -9,34 +9,27 @@
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="card-body">
|
||||
@isset($user)
|
||||
<div class="alert alert-primary" role="alert">
|
||||
<div class="form-group">
|
||||
<label for="teksNama" style="font-size: 1.1em;">Nama</label>
|
||||
{{-- <p class="form-control-static" id="teksNama"></p> --}}
|
||||
<span
|
||||
class="text-muted ">{{ ucwords(strtolower($user->nama_depan . ' ' . $user->nama_belakang)) }}</span>
|
||||
<p class="form-control-static" id="teksNama"></p>
|
||||
</div>
|
||||
<hr style="border-top: 1px solid #fff;">
|
||||
<div class="form-group">
|
||||
<label for="teksNoHP" style="font-size: 1.1em;">No HP</label>
|
||||
{{-- <p class="form-control-static" id="teksNoHP"></p> --}}
|
||||
<span class="text-muted ">{{ $user->nohp }}</span>
|
||||
<p class="form-control-static" id="teksNoHP"></p>
|
||||
</div>
|
||||
<hr style="border-top: 1px solid #fff;">
|
||||
<div class="form-group">
|
||||
<label for="teksEmail" style="font-size: 1.1em;">Email</label>
|
||||
{{-- <p class="form-control-static" id="teksEmail"></p> --}}
|
||||
<span class="text-muted ">{{ $user->email }}</span>
|
||||
<p class="form-control-static" id="teksEmail"></p>
|
||||
</div>
|
||||
<hr style="border-top: 1px solid #fff;">
|
||||
<div class="form-group">
|
||||
<label for="teksAlamat" style="font-size: 1.1em;">Alamat</label>
|
||||
{{-- <p class="form-control-static" id="teksAlamat"></p> --}}
|
||||
<span class="text-muted ">{{ $user->alamat }}</span>
|
||||
<p class="form-control-static" id="teksAlamat"></p>
|
||||
</div>
|
||||
</div>
|
||||
@endisset
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
|
@ -15,7 +15,7 @@
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<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>
|
||||
<tr>
|
||||
<th class="text-center">
|
||||
@ -30,37 +30,9 @@
|
||||
<th>Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{{-- <tbody>
|
||||
@foreach ($refunds as $refund)
|
||||
<tr>
|
||||
<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> --}}
|
||||
<tbody>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
@ -69,6 +41,7 @@
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
@include('user.refund.modal-keterangan-status')
|
||||
<script>
|
||||
$(function() {
|
||||
let listRefund = $('#table-refund').DataTable({
|
||||
@ -76,69 +49,97 @@
|
||||
serverSide: true,
|
||||
ajax: "{{ route('user-refund.list-refund') }}",
|
||||
columns: [{
|
||||
data: 'DT_RowIndex',
|
||||
name: 'DT_RowIndex',
|
||||
orderable: false,
|
||||
searchable: true,
|
||||
},
|
||||
{
|
||||
data: 'id',
|
||||
name: 'id',
|
||||
orderable: false,
|
||||
searchable: true,
|
||||
},
|
||||
{
|
||||
data: 'nama_barang',
|
||||
name: 'nama_barang'
|
||||
},
|
||||
{
|
||||
data: 'penjual',
|
||||
name: 'penjual'
|
||||
},
|
||||
{
|
||||
date: 'total',
|
||||
name: 'total'
|
||||
},
|
||||
{
|
||||
data: 'tanggal_pengajuan',
|
||||
name: 'tanggal_pengajuan',
|
||||
render: function(data, type, row) {
|
||||
if (type == 'display') {
|
||||
var date = new Date(data);
|
||||
var formattedDate = date.toLocaleDateString('en-US', {
|
||||
year: '2-digit',
|
||||
month: '2-digit',
|
||||
day: '2-digit'
|
||||
});
|
||||
return formattedDate;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
},
|
||||
{
|
||||
data: 'batas_konfirmasi',
|
||||
name: 'batas_konfirmasi'
|
||||
},
|
||||
{
|
||||
data: null,
|
||||
render: function(data, type, row) {
|
||||
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>`;
|
||||
}
|
||||
data: 'DT_RowIndex',
|
||||
name: 'DT_RowIndex',
|
||||
orderable: false,
|
||||
searchable: false,
|
||||
className: 'text-center'
|
||||
},
|
||||
orderable: true,
|
||||
searchable: true
|
||||
},
|
||||
{
|
||||
data: 'aksi',
|
||||
name: 'aksi',
|
||||
orderable: false,
|
||||
searchable: true
|
||||
}
|
||||
{
|
||||
data: 'nama_barang',
|
||||
name: 'nama_barang',
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: 'nama_penjual',
|
||||
name: 'nama_penjual',
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: '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',
|
||||
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: '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: 'status',
|
||||
render: function(data, type, row) {
|
||||
if (row.status == 'partial refund') {
|
||||
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') {
|
||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-warning">${row.status.charAt(0).toUpperCase()}${row.status.slice(1)}</a>`;
|
||||
} else {
|
||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-danger">${row.status.charAt(0).toUpperCase()}${row.status.slice(1)}</a>`;
|
||||
}
|
||||
},
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: 'action',
|
||||
name: 'action',
|
||||
orderable: false,
|
||||
searchable: false,
|
||||
className: 'text-center'
|
||||
}
|
||||
],
|
||||
})
|
||||
})
|
||||
|
@ -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>
|
@ -30,21 +30,23 @@
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<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>
|
||||
<tr>
|
||||
<th class="text-center">
|
||||
#
|
||||
</th>
|
||||
<th>Penjual</th>
|
||||
<th>Nama Barang</th>
|
||||
<th>Penjual</th>
|
||||
<th>Total</th>
|
||||
<th>Tanggal Transaksi</th>
|
||||
<th>Tanggal Update</th>
|
||||
<th>Status</th>
|
||||
<th>Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
@ -67,86 +69,104 @@
|
||||
serverSide: true,
|
||||
ajax: "{{ route('user-pembeli.list-pembeli') }}",
|
||||
columns: [{
|
||||
data: 'DT_RowIndex',
|
||||
name: 'DT_RowIndex',
|
||||
orderable: false,
|
||||
searchable: false,
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: 'id',
|
||||
name: 'id',
|
||||
orderable: false,
|
||||
searchable: true,
|
||||
},
|
||||
{
|
||||
data: 'penjual',
|
||||
name: 'penjual',
|
||||
},
|
||||
{
|
||||
data: 'nama_barang',
|
||||
name: 'nama_barang'
|
||||
},
|
||||
{
|
||||
data: 'total',
|
||||
name: 'total'
|
||||
},
|
||||
{
|
||||
data: 'tanggal_transaksi',
|
||||
name: 'tanggal_transaksi',
|
||||
render: function(data, type, row) {
|
||||
if (type == 'display') {
|
||||
var date = new Date(data);
|
||||
var formattedDate = date.toLocaleDateString('en-US', {
|
||||
year: '2-digit',
|
||||
month: '2-digit',
|
||||
day: '2-digit'
|
||||
});
|
||||
return formattedDate;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
},
|
||||
{
|
||||
data: 'tanggal_update',
|
||||
name: 'tanggal_update',
|
||||
render: function(data, type, row) {
|
||||
if (type == 'display') {
|
||||
var date = new Date(data);
|
||||
var formattedDate = date.toLocaleDateString('en-US', {
|
||||
year: '2-digit',
|
||||
month: '2-digit',
|
||||
day: '2-digit'
|
||||
});
|
||||
return formattedDate;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
},
|
||||
{
|
||||
data: null,
|
||||
render: function(data, type, row) {
|
||||
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>`;
|
||||
}
|
||||
data: 'DT_RowIndex',
|
||||
name: 'DT_RowIndex',
|
||||
orderable: false,
|
||||
searchable: false,
|
||||
className: 'text-center'
|
||||
},
|
||||
orderable: true,
|
||||
searchable: true
|
||||
},
|
||||
{
|
||||
data: 'aksi',
|
||||
name: 'aksi',
|
||||
orderable: false,
|
||||
searchable: false
|
||||
}],
|
||||
{
|
||||
data: 'nama_barang',
|
||||
name: 'nama_barang',
|
||||
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'
|
||||
}
|
||||
],
|
||||
});
|
||||
|
||||
// Bayar
|
||||
$('#table-3').on('click', '#bayar', function() {
|
||||
$('#table-pembeli').on('click', '#bayar', function() {
|
||||
const id = $(this).data('id');
|
||||
const token = $(this).data('token');
|
||||
const csrfToken = $('meta[name="csrf-token"]').attr('content');
|
||||
@ -183,7 +203,7 @@
|
||||
'error'
|
||||
}).then(function() {
|
||||
if (response.status) {
|
||||
location.reload();
|
||||
listPembeli.ajax.reload();
|
||||
}
|
||||
});
|
||||
},
|
||||
@ -226,6 +246,10 @@
|
||||
icon: response.status ? 'info' :
|
||||
'error',
|
||||
confirmButtonText: 'OK'
|
||||
}).then(function() {
|
||||
if (response.status) {
|
||||
listPembeli.ajax.reload();
|
||||
}
|
||||
});
|
||||
},
|
||||
error: function(error) {
|
||||
@ -265,6 +289,10 @@
|
||||
'Pembayaran Gagal' : 'Gagal',
|
||||
text: response.message,
|
||||
icon: 'error',
|
||||
}).then(function() {
|
||||
if (response.status) {
|
||||
listPembeli.ajax.reload();
|
||||
}
|
||||
});
|
||||
},
|
||||
error: function(error) {
|
||||
@ -306,6 +334,10 @@
|
||||
text: response.message,
|
||||
icon: response.status ? 'info' :
|
||||
'error',
|
||||
}).then(function() {
|
||||
if (response.status) {
|
||||
listPembeli.ajax.reload();
|
||||
}
|
||||
});
|
||||
},
|
||||
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 csrfToken = $('meta[name="csrf-token"]').attr('content');
|
||||
|
||||
@ -363,7 +395,7 @@
|
||||
icon: response.status ? 'success' : 'error'
|
||||
}).then(function() {
|
||||
if (response.status) {
|
||||
location.reload();
|
||||
listPembeli.ajax.reload();
|
||||
}
|
||||
});
|
||||
},
|
||||
@ -386,17 +418,33 @@
|
||||
$(document).ready(function() {
|
||||
$('#modalTracking').on('show.bs.modal', function(event) {
|
||||
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);
|
||||
|
||||
// Buat variabel untuk menyimpan HTML aktivitas
|
||||
transactionDatas = transactionDatas.reverse();
|
||||
var activitiesHtml = '';
|
||||
$.ajaxSetup({
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': csrfToken
|
||||
}
|
||||
});
|
||||
|
||||
// Periksa apakah ada data transaksi
|
||||
if (transactionDatas && transactionDatas.length > 0) {
|
||||
// Iterasi melalui data transaksi dan tambahkan ke activitiesHtml
|
||||
$.each(transactionDatas, function(index, transactionDescription) {
|
||||
activitiesHtml += `
|
||||
$.ajax({
|
||||
url: "{{ route('user.transaction-tracking') }}",
|
||||
type: 'GET',
|
||||
data: {
|
||||
id: transactionId
|
||||
},
|
||||
success: function(response) {
|
||||
var transactionDatas = response.data;
|
||||
// Buat variabel untuk menyimpan HTML aktivitas
|
||||
var activitiesHtml = '';
|
||||
|
||||
// Periksa apakah ada data transaksi
|
||||
if (transactionDatas && transactionDatas.length > 0) {
|
||||
transactionDatas = transactionDatas.reverse();
|
||||
// Iterasi melalui data transaksi dan tambahkan ke activitiesHtml
|
||||
$.each(transactionDatas, function(index, transactionDescription) {
|
||||
activitiesHtml += `
|
||||
<div class="activity">
|
||||
<div class="activity-icon ${transactionDescription.background} text-white shadow-primary">
|
||||
<i class="${transactionDescription.judul}" style="font-size: 36px;"></i>
|
||||
@ -409,10 +457,10 @@
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
} else {
|
||||
// Tidak ada data transaksi, tambahkan pesan kosong
|
||||
activitiesHtml += `
|
||||
});
|
||||
} else {
|
||||
// Tidak ada data transaksi, tambahkan pesan kosong
|
||||
activitiesHtml += `
|
||||
<div class="activity">
|
||||
<div class="activity-icon bg-primary text-white shadow-primary">
|
||||
<i class="fas fa-ban" style="font-size: 36px;"></i>
|
||||
@ -425,11 +473,22 @@
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
// Menampilkan data dalam modal
|
||||
var modal = $(this);
|
||||
modal.find('.activities').html(activitiesHtml);
|
||||
// Menampilkan data dalam modal
|
||||
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) {
|
||||
|
@ -24,104 +24,22 @@
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<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>
|
||||
<tr>
|
||||
<th class="text-center">
|
||||
#
|
||||
</th>
|
||||
<th>Pembeli</th>
|
||||
<th>Nama Barang</th>
|
||||
<th>Pembeli</th>
|
||||
<th>Total</th>
|
||||
<th>Tanggal Pembuatan</th>
|
||||
<th>Tanggal Update</th>
|
||||
<th>Tanggal Transaksi</th>
|
||||
<th>Status</th>
|
||||
<th>Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<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>
|
||||
</table>
|
||||
</div>
|
||||
@ -137,19 +55,136 @@
|
||||
@include('user.transaction.penjual.modal-keterangan-status')
|
||||
<script>
|
||||
$(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) {
|
||||
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);
|
||||
|
||||
// Buat variabel untuk menyimpan HTML aktivitas
|
||||
transactionDatas = transactionDatas.reverse();
|
||||
var activitiesHtml = '';
|
||||
$.ajaxSetup({
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': csrfToken
|
||||
}
|
||||
});
|
||||
|
||||
// Periksa apakah ada data transaksi
|
||||
if (transactionDatas && transactionDatas.length > 0) {
|
||||
// Iterasi melalui data transaksi dan tambahkan ke activitiesHtml
|
||||
$.each(transactionDatas, function(index, transactionDescription) {
|
||||
activitiesHtml += `
|
||||
$.ajax({
|
||||
url: "{{ route('user.transaction-tracking') }}",
|
||||
type: 'GET',
|
||||
data: {
|
||||
id: transactionId
|
||||
},
|
||||
success: function(response) {
|
||||
var transactionDatas = response.data;
|
||||
// Buat variabel untuk menyimpan HTML aktivitas
|
||||
var activitiesHtml = '';
|
||||
|
||||
// Periksa apakah ada data transaksi
|
||||
if (transactionDatas && transactionDatas.length > 0) {
|
||||
transactionDatas = transactionDatas.reverse();
|
||||
// Iterasi melalui data transaksi dan tambahkan ke activitiesHtml
|
||||
$.each(transactionDatas, function(index, transactionDescription) {
|
||||
activitiesHtml += `
|
||||
<div class="activity">
|
||||
<div class="activity-icon ${transactionDescription.background} text-white shadow-primary">
|
||||
<i class="${transactionDescription.judul}" style="font-size: 36px;"></i>
|
||||
@ -162,10 +197,10 @@
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
} else {
|
||||
// Tidak ada data transaksi, tambahkan pesan kosong
|
||||
activitiesHtml += `
|
||||
});
|
||||
} else {
|
||||
// Tidak ada data transaksi, tambahkan pesan kosong
|
||||
activitiesHtml += `
|
||||
<div class="activity">
|
||||
<div class="activity-icon bg-primary text-white shadow-primary">
|
||||
<i class="fas fa-ban" style="font-size: 36px;"></i>
|
||||
@ -178,14 +213,25 @@
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
// Menampilkan data dalam modal
|
||||
var modal = $(this);
|
||||
modal.find('.activities').html(activitiesHtml);
|
||||
// Menampilkan data dalam modal
|
||||
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 csrfToken = $('meta[name="csrf-token"]').attr('content');
|
||||
|
||||
@ -215,10 +261,10 @@
|
||||
title: response.status ? 'Berhasil' : 'Gagal',
|
||||
text: response.message,
|
||||
icon: response.status ? 'success' : 'error',
|
||||
}).then((result) => {
|
||||
}).then(function() {
|
||||
Swal.close();
|
||||
if (result.isConfirmed) {
|
||||
location.reload();
|
||||
if (response.status) {
|
||||
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 csrfToken = $('meta[name="csrf-token"]').attr('content');
|
||||
|
||||
@ -274,9 +320,9 @@
|
||||
text: response.message,
|
||||
icon: response.status ? 'success' : 'error',
|
||||
confirmButtonText: 'OK',
|
||||
}).then((result) => {
|
||||
}).then(function() {
|
||||
if (response.status) {
|
||||
location.reload();
|
||||
listPenjual.ajax.reload();
|
||||
}
|
||||
});
|
||||
},
|
||||
@ -368,7 +414,9 @@
|
||||
icon: response.status ? 'success' : 'error'
|
||||
}).then(function() {
|
||||
if (response.status) {
|
||||
location.reload();
|
||||
$('#formBukti').trigger('reset');
|
||||
$('#modalOrderSent').modal('hide');
|
||||
listPenjual.ajax.reload();
|
||||
}
|
||||
});
|
||||
},
|
||||
@ -383,7 +431,7 @@
|
||||
});
|
||||
|
||||
$('#acceptResult').on('click', function() {
|
||||
|
||||
const csrfToken = $('meta[name="csrf-token"]').attr('content');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
@ -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
|
@ -97,7 +97,8 @@
|
||||
<!-- ======= END SIGN IN 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
|
||||
<h2 class="title">Daftar</h2>
|
||||
<p style="width: 90%">
|
||||
@ -145,20 +146,21 @@
|
||||
<div class="input-field-signup-flex" style="margin-left: 3%">
|
||||
<i class="fas fa-user"></i>
|
||||
<input type="text" placeholder="Nama Belakang" class="last-name-input"
|
||||
name="nama_belakang" />
|
||||
name="nama_belakang" required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-field up">
|
||||
<i class="fa fa-id-card" aria-hidden="true"></i>
|
||||
<input type="text" placeholder="NIK" class="email-input" name="nik"
|
||||
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 class="flex-input-btn">
|
||||
<div class="input">
|
||||
<i class="fa fa-envelope" aria-hidden="true"></i>
|
||||
<input type="email" placeholder="Email" class="email-input" name="new_email"
|
||||
id="newEmail" />
|
||||
id="newEmail" required />
|
||||
</div>
|
||||
<button id="verifikasiEmail" class="btn-otp" type="button"
|
||||
disabled=true>Verifikasi</button>
|
||||
@ -167,19 +169,20 @@
|
||||
<i class="fa fa-ellipsis-h" aria-hidden="true"></i>
|
||||
<input type="text" class="telp-input-signup"
|
||||
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 class="input-field up">
|
||||
<i class="fa fa-phone" aria-hidden="true"></i>
|
||||
<input type="text" class="telp-input-signup" maxlength="13"
|
||||
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 13);"
|
||||
placeholder="Nomer Telepon" name="nohp">
|
||||
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 15);"
|
||||
placeholder="Nomer Telepon. cth: 08xxx" name="nohp" required>
|
||||
</div>
|
||||
<div style="display: flex;">
|
||||
<div class="input-field-signup-flex up gender-select-menu" style="width: 190%">
|
||||
<div class="gender-select-input" style="width: 100%; padding-left: 1rem;">
|
||||
<select style="width: 190%;" class="gender-select" id="gender-select"
|
||||
name="gender">
|
||||
name="gender" required>
|
||||
<option value="Laki-laki">Laki-laki</option>
|
||||
<option value="Perempuan">Perempuan</option>
|
||||
</select>
|
||||
@ -187,7 +190,8 @@
|
||||
</div>
|
||||
<div class="input-field-signup-flex up" style="margin-left: 3%">
|
||||
<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>
|
||||
|
||||
@ -226,14 +230,14 @@
|
||||
<select id="selectVillage"
|
||||
style="width: 100%; border: 1px solid transparent; margin-top: 0; outline: none;"
|
||||
class="input-field" aria-label="Default select example"
|
||||
name="village_code">
|
||||
name="village_code" required>
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" class="input-field" id="alamat" name="alamat"
|
||||
placeholder="Alamat lengkap Anda" cols="50" rows="4"
|
||||
style="width: 190%; padding: 0rem 1rem;">
|
||||
style="width: 190%; padding: 0rem 1rem;" required>
|
||||
</div>
|
||||
<!-- ======= END FORM ADDRESS ======= -->
|
||||
|
||||
@ -250,7 +254,7 @@
|
||||
</div>
|
||||
<video id="webcamKtp" autoplay playsinline></video>
|
||||
<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">
|
||||
<button type="button" class="btn-foto" id="startButtonKtp"
|
||||
data-state="off">Mulai Kamera</button>
|
||||
@ -272,7 +276,7 @@
|
||||
</div>
|
||||
<video id="webcamEkyc" autoplay playsinline></video>
|
||||
<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">
|
||||
<button type="button" class="btn-foto" id="startButtonEkyc"
|
||||
data-state="off">Mulai Kamera</button>
|
||||
@ -302,12 +306,12 @@
|
||||
<div class="input-field-signup-flex">
|
||||
<i class="fa fa-unlock-alt" aria-hidden="true"></i>
|
||||
<input type="password" class="pin-input" placeholder="Password"
|
||||
name="new_password">
|
||||
name="new_password" required>
|
||||
</div>
|
||||
<div class="input-field-signup-flex" style="margin-left: 3%">
|
||||
<i class="fa fa-unlock-alt" aria-hidden="true"></i>
|
||||
<input type="password" class="konfir-pin-input"
|
||||
placeholder="Konfirmasi Password" name="confirm_password">
|
||||
placeholder="Konfirmasi Password" name="confirm_password" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -335,7 +339,7 @@
|
||||
<div class="common_btns form_4_btns" style="display: none;">
|
||||
<button type="button" class="btn_back"><span class="icon"><ion-icon
|
||||
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>
|
||||
<!-- ======= BTN FORM NEXT & BACK ======= -->
|
||||
@ -357,7 +361,7 @@
|
||||
<button class="btn transparent" id="sign-up-btn">
|
||||
Daftar
|
||||
</button>
|
||||
<p><a href="{{ route('login') }}">kembali</a></p>
|
||||
<p><a href="{{ route('login') }}">Kembali</a></p>
|
||||
</div>
|
||||
<img src="{{ asset('assets/img/login_register/Payment Information-pana.svg') }}" class="image"
|
||||
alt="" />
|
||||
@ -371,7 +375,7 @@
|
||||
<button class="btn transparent" id="sign-in-btn">
|
||||
Masuk
|
||||
</button>
|
||||
<p><a href="{{ route('login') }}">kembali</a></p>
|
||||
<p><a href="{{ route('login') }}">Kembali</a></p>
|
||||
</div>
|
||||
<img src="{{ asset('assets/img/login_register/Payment Information-pana.svg') }}" class="image"
|
||||
alt="" />
|
||||
@ -447,7 +451,10 @@
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
url: "{{ route('status-akun', ':email') }}".replace(':email', email),
|
||||
url: "{{ route('status-akun') }}",
|
||||
data: {
|
||||
email: email
|
||||
},
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let status = response.message[0].status
|
||||
@ -560,6 +567,7 @@
|
||||
clearInterval(timerInterval);
|
||||
newEmail.text("Verifikasi"); // Mengembalikan teks awal tombol
|
||||
newEmail.prop('disabled', false); // Mengaktifkan kembali tombol
|
||||
verificationStatus = false;
|
||||
}
|
||||
}, 1000); // Setiap 1 detik
|
||||
|
||||
@ -581,7 +589,6 @@
|
||||
text: response.message,
|
||||
icon: response.status ? 'success' : 'error',
|
||||
});
|
||||
verificationStatus = true;
|
||||
},
|
||||
error: function(error) {
|
||||
Swal.fire({
|
||||
@ -589,7 +596,7 @@
|
||||
text: 'Gagal karena kesalahan inputan atau jaringan',
|
||||
icon: 'error',
|
||||
});
|
||||
console.log(error);
|
||||
verificationStatus = false;
|
||||
},
|
||||
});
|
||||
} else {
|
||||
@ -598,159 +605,74 @@
|
||||
text: 'Inputan yang anda masukan bukan alamat email. Silahkan masukan alamat email yang benar.',
|
||||
icon: 'error'
|
||||
});
|
||||
verificationStatus = false;
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
$('#signUp').on('click', function() {
|
||||
let emptyInput = [];
|
||||
$('#msform').on('submit', function(e) {
|
||||
e.preventDefault();
|
||||
const csrfToken = $('meta[name="csrf-token"]').attr('content');
|
||||
let namaDepan = document.querySelector('[name="nama_depan"]').value;
|
||||
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;
|
||||
let kode = $('#emailVerification').val();
|
||||
|
||||
// Tanggal lahir
|
||||
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);
|
||||
let form = this;
|
||||
|
||||
// Dapatkan tahun dari tanggal lahir
|
||||
let tahunLahir = tanggalLahirDate.getFullYear();
|
||||
|
||||
// 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 (!form.checkValidity()) {
|
||||
form.reportValidity();
|
||||
return;
|
||||
}
|
||||
|
||||
if (nik.trim() === "") {
|
||||
emptyInput.push("Nik tidak boleh kosong");
|
||||
if (verificationCode == kode && waktuSekarangDetik > 0) {
|
||||
verificationStatus = true;
|
||||
}
|
||||
|
||||
if (email.trim() === "") {
|
||||
emptyInput.push("Email tidak boleh kosong");
|
||||
}
|
||||
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');
|
||||
}
|
||||
let formData = new FormData(this);
|
||||
formData.append('kode_verifikasi', verificationCode);
|
||||
formData.append('verification_status', verificationStatus ? 'true' : 'false');
|
||||
|
||||
if (nohp.trim() === "") {
|
||||
emptyInput.push("nomor HP tidak boleh kosong");
|
||||
}
|
||||
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();
|
||||
}
|
||||
});
|
||||
|
||||
if (gender.trim() === "") {
|
||||
emptyInput.push("Jenis kelamin tidak boleh kosong");
|
||||
}
|
||||
$.ajaxSetup({
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': csrfToken
|
||||
}
|
||||
});
|
||||
|
||||
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({
|
||||
title: 'Gagal',
|
||||
text: emptyInputError,
|
||||
icon: 'error',
|
||||
confirmButtonText: 'OK',
|
||||
});
|
||||
} 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({
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': csrfToken
|
||||
}
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
url: "{{ route('register') }}",
|
||||
type: 'POST',
|
||||
data: formData,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success: function(response) {
|
||||
Swal.fire({
|
||||
title: response.status ? 'Berhasil' : 'Gagal',
|
||||
text: response.message,
|
||||
icon: response.status ? 'success' : 'error',
|
||||
confirmButtonText: 'OK',
|
||||
}).then(function() {
|
||||
if (response.status == true) {
|
||||
location.reload();
|
||||
}
|
||||
});
|
||||
},
|
||||
error: function(error) {
|
||||
Swal.fire({
|
||||
title: 'Gagal',
|
||||
text: 'Ada form yang kosong atau kesalahan internet. penyebab ' +
|
||||
error,
|
||||
icon: 'error',
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
$.ajax({
|
||||
url: "{{ route('register') }}",
|
||||
type: 'POST',
|
||||
data: formData,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success: function(response) {
|
||||
Swal.fire({
|
||||
title: response.status ? 'Berhasil' : 'Gagal',
|
||||
text: response.message,
|
||||
icon: response.status ? 'success' : 'error',
|
||||
confirmButtonText: 'OK',
|
||||
}).then(function() {
|
||||
if (response.status) {
|
||||
location.reload();
|
||||
}
|
||||
});
|
||||
},
|
||||
error: function(error) {
|
||||
Swal.fire({
|
||||
title: 'Gagal',
|
||||
text: 'Ada form yang kosong atau kesalahan internet. penyebab ' +
|
||||
error,
|
||||
icon: 'error',
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
// Register Akhir
|
||||
});
|
||||
|
@ -114,14 +114,7 @@
|
||||
</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>
|
||||
<button class="btn btn-warning btn-icon icon-left"><i class="fas fa-print"></i>Print</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -431,7 +431,10 @@
|
||||
$("#selectCity").select2({
|
||||
placeholder: "Pilih Kabupaten/Kota",
|
||||
ajax: {
|
||||
url: "/cari-kota/" + code,
|
||||
url: "/cari-kota/",
|
||||
data: {
|
||||
code: code,
|
||||
},
|
||||
processResults: function({
|
||||
data
|
||||
}) {
|
||||
@ -462,7 +465,10 @@
|
||||
$("#selectDistrict").select2({
|
||||
placeholder: "Pilih Kecamatan",
|
||||
ajax: {
|
||||
url: "/cari-kecamatan/" + code, // Isi dengan URL yang sesuai
|
||||
url: "/cari-kecamatan/", // Isi dengan URL yang sesuai
|
||||
data: {
|
||||
code: code,
|
||||
},
|
||||
processResults: function({
|
||||
data
|
||||
}) {
|
||||
@ -493,7 +499,10 @@
|
||||
$("#selectVillage").select2({
|
||||
placeholder: "Pilih Kelurahan",
|
||||
ajax: {
|
||||
url: "/cari-kelurahan/" + code, // Isi dengan URL yang sesuai
|
||||
url: "/cari-kelurahan/", // Isi dengan URL yang sesuai
|
||||
data: {
|
||||
code: code,
|
||||
},
|
||||
processResults: function({
|
||||
data
|
||||
}) {
|
||||
|
@ -2,11 +2,10 @@
|
||||
|
||||
use App\Models\Refunds;
|
||||
use App\Models\Transactions;
|
||||
//Admin
|
||||
use Illuminate\Support\Facades\Route;
|
||||
//Admin
|
||||
use App\Http\Controllers\Login\LoginController;
|
||||
use App\Http\Controllers\Admin\AdminUserController;
|
||||
use App\Http\Controllers\Profile\ProfileController;
|
||||
use App\Http\Controllers\User\UserRefundController;
|
||||
//Login
|
||||
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\Admin\AdminTransactionController;
|
||||
|
||||
//Profile
|
||||
use App\Http\Controllers\Profile\ProfileController;
|
||||
|
||||
//Invoice
|
||||
use App\Http\Controllers\Invoice\InvoiceController;
|
||||
|
||||
// use Illuminate\Foundation\Auth\User;
|
||||
|
||||
/*
|
||||
@ -65,11 +70,11 @@ Route::controller(LoginController::class)->group(function(){
|
||||
Route::get('logout','logout')->name('logout');
|
||||
Route::post('authenticate','authenticate')->name('autentikasi');
|
||||
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-kota/{code}','searchCity')->name('cari-kota');
|
||||
Route::get('cari-kecamatan/{code}','searchDistrict')->name('cari-kecamatan');
|
||||
Route::get('cari-kelurahan/{code}','searchVillage')->name('cari-kelurahan');
|
||||
Route::get('cari-kota','searchCity')->name('cari-kota');
|
||||
Route::get('cari-kecamatan','searchDistrict')->name('cari-kecamatan');
|
||||
Route::get('cari-kelurahan','searchVillage')->name('cari-kelurahan');
|
||||
Route::post('kode-verifikasi','sendVerificationCode')->name('kirim-kode');
|
||||
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::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/list-user','listUser')->name('admin-user.list-user');
|
||||
Route::get('admin-user/{id}','show')->name('admin-user.show');
|
||||
Route::delete('admin-user/{id}','delete')->name('admin-user.destroy');
|
||||
Route::put('admin-user/approve-user/{id}', 'approveUser')->name('admin-user.approve');
|
||||
Route::put('admin-user/deny-user/{id}', 'denyUser')->name('admin-user.deny');
|
||||
Route::delete('admin-user/hapus-user','delete')->name('admin-user.destroy');
|
||||
Route::put('admin-user/approve-user', 'approveUser')->name('admin-user.approve');
|
||||
Route::put('admin-user/deny-user', 'denyUser')->name('admin-user.deny');
|
||||
});
|
||||
|
||||
// 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/detail/{id}','show')->name('admin-transaction.show');
|
||||
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
|
||||
@ -135,8 +150,6 @@ Route::middleware(['auth'])->group(function(){
|
||||
// Tampilan dashboard user beserta perhitungan
|
||||
Route::controller(UserDashboardController::class)->group(function(){
|
||||
Route::get('/','index')->name('user.index');
|
||||
|
||||
//
|
||||
});
|
||||
|
||||
// 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::post('user-contact','store')->name('user-contact.store');
|
||||
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/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
|
||||
@ -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/detail-transaksi/{id}','show')->name('user-pembeli.show');
|
||||
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::put('user-pembeli/bayar-transaksi','payTransaction')->name('user-pembeli.pay');
|
||||
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::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
|
||||
|
Loading…
Reference in New Issue
Block a user