From 59aa63be93a48763fe3e6483c866d7f2ac023acb Mon Sep 17 00:00:00 2001 From: Raihan Surya Date: Mon, 20 Nov 2023 15:01:37 +0700 Subject: [PATCH] API Flutter --- .../API/Contact/ContactApiController.php | 118 ++++++--- .../API/Invoice/InvoiceApiController.php | 27 ++ .../API/Login/LoginApiController.php | 94 ++++--- .../API/Pembeli/PembeliApiController.php | 242 +++++++++++++----- .../API/Penjual/PenjualApiController.php | 148 ++++++++++- .../API/Profile/ProfileApiController.php | 104 +++++++- .../API/Refund/RefundApiController.php | 20 +- .../Transaction/TransactionApiController.php | 8 +- .../Controllers/Login/LoginController.php | 2 +- .../Controllers/Profile/ProfileController.php | 4 +- .../User/Contact/UserContactController.php | 14 +- .../User/Refund/UserRefundController.php | 2 +- app/Models/User.php | 8 +- resources/views/Admin/index.blade.php | 4 +- resources/views/User/contact/index.blade.php | 12 +- .../views/User/refund/new-refund.blade.php | 2 +- resources/views/profile/index.blade.php | 38 ++- routes/api.php | 116 ++++++--- routes/web.php | 26 +- 19 files changed, 735 insertions(+), 254 deletions(-) create mode 100644 app/Http/Controllers/API/Invoice/InvoiceApiController.php diff --git a/app/Http/Controllers/API/Contact/ContactApiController.php b/app/Http/Controllers/API/Contact/ContactApiController.php index 4f39678..0d35cce 100644 --- a/app/Http/Controllers/API/Contact/ContactApiController.php +++ b/app/Http/Controllers/API/Contact/ContactApiController.php @@ -10,22 +10,31 @@ use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; +use Tymon\JWTAuth\Facades\JWTAuth; +use Yajra\DataTables\Facades\DataTables; class ContactApiController extends Controller { - public function getContact() + public function getListContact(Request $request) { + // $token = JWTAuth::getToken(); + // $user = JWTAuth::user($token); + $data = DB::table('contacts') ->join('users', 'contacts.relasi_kontak', '=', 'users.email') - ->select('contacts.relasi_kontak', 'users.nama_depan', 'users.nama_belakang') - ->where('contacts.pemilik_kontak', '=', Auth::user()->email) + ->select('contacts.relasi_kontak', DB::raw("CONCAT(users.nama_depan, ' ', users.nama_belakang) as nama_lengkap") ) + ->where('contacts.pemilik_kontak', '=', auth()->user()->email) + ->whereRaw("LOWER(CONCAT(users.nama_depan, ' ', users.nama_belakang)) LIKE ?", ['%' . strtolower($request->input('search')) . '%']) ->paginate(10); - return response()->json($data); + + return response()->json([ + 'data' => $data + ]); } - public function store(Request $request) + public function storeContact(Request $request) { - $email_relasi = $request->email; + $email_relasi = $request->input('email'); if ($email_relasi == Auth::user()->email) { return response()->json([ 'status' => false, @@ -33,7 +42,7 @@ class ContactApiController extends Controller ]); } - try{ + try { DB::beginTransaction(); Contact::create([ @@ -45,10 +54,9 @@ class ContactApiController extends Controller return response()->json([ 'status' => true, - 'message' => 'Kontak berhasil ditambahkan.' + 'message' => 'Kontak berhasil ditambahkan.', ]); - - }catch(Throwable $e){ + } catch (Throwable $e) { DB::rollBack(); Log::error($e->getMessage()); @@ -60,12 +68,12 @@ class ContactApiController extends Controller } } - public function destroy(Request $request) + public function deleteContact(Request $request) { try { DB::beginTransaction(); - Contact::destroy($request->id); + Contact::destroy($request->input('id')); DB::commit(); @@ -73,7 +81,6 @@ class ContactApiController extends Controller 'message' => 'Berhasil hapus data', 'status' => true, ]); - } catch (Throwable $e) { DB::rollBack(); @@ -86,9 +93,9 @@ class ContactApiController extends Controller } } - public function cekEmail(Request $request) + public function checkContact(Request $request) { - $result = User::where('email', $request->email) + $result = User::where('email', $request->input('email')) ->where('role', 'User') ->first(); if ($result) { @@ -100,37 +107,76 @@ class ContactApiController extends Controller } else { return response()->json([ 'status' => false, - 'message' => 'Akun dengen email ' . $request->email . ' tersedia dan belum diverifikasi', + 'message' => 'Akun dengen email ' . $request->input('email') . ' tersedia dan belum diverifikasi', ]); } } else { return response()->json([ 'status' => false, - 'message' => 'Akun dengen email ' . $request->email . ' tidak tersedia atau ditolak', + 'message' => 'Akun dengen email ' . $request->input('email') . ' tidak tersedia atau ditolak', ]); } } - 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(); + 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->input('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 + 'data' => $data, ]); } + + public function listContact(Request $request) + { + try { + $subQuery = Contact::join('users', 'contacts.relasi_kontak', '=', 'users.email') + ->where('pemilik_kontak', Auth::user()->email) + ->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(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?", ['%' . strtolower($searchContact) . '%']); + }); + } + + $queryContact = Contact::from(DB::raw("({$subQuery->toSql()}) as tmp")) + ->mergeBindings($subQuery->getQuery()) // Menggabungkan binding parameters + ->select('*') + ->get(); + + if ($request->ajax()) { + return DataTables::of($queryContact) + ->addIndexColumn() + ->addColumn('action', function ($row) { + $html_code = + ' + + + '; + 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']); + } + } } diff --git a/app/Http/Controllers/API/Invoice/InvoiceApiController.php b/app/Http/Controllers/API/Invoice/InvoiceApiController.php new file mode 100644 index 0000000..86f174a --- /dev/null +++ b/app/Http/Controllers/API/Invoice/InvoiceApiController.php @@ -0,0 +1,27 @@ +json([ + 'transaction' => Transaction::findOrFail($id), + ]); + } + + public function exportInvoice($id) + { + // $transaction = Transaction::findOrFail($request->id); + // $pdf = Pdf::loadView('invoice.export-invoice',compact('transaction'))->setPaper('A4','Portrait'); + // return $pdf->download("invoice-$request->id.pdf"); + return response()->json([ + 'transaction' => Transaction::findOrFail($id), + ]); + } +} diff --git a/app/Http/Controllers/API/Login/LoginApiController.php b/app/Http/Controllers/API/Login/LoginApiController.php index f11d0ab..deade7e 100644 --- a/app/Http/Controllers/API/Login/LoginApiController.php +++ b/app/Http/Controllers/API/Login/LoginApiController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\API\Login; use App\Http\Controllers\Controller; +use App\Mail\verificationMail; use Illuminate\Http\Request; use Tymon\JWTAuth\Facades\JWTFactory; use Illuminate\Support\Facades\Hash; @@ -11,8 +12,13 @@ use Carbon\Carbon; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; +use Laravolt\Indonesia\Models\City; +use Laravolt\Indonesia\Models\District; +use Laravolt\Indonesia\Models\Province; +use Laravolt\Indonesia\Models\Village; use Tymon\JWTAuth\Facades\JWTAuth; class LoginApiController extends Controller @@ -22,42 +28,14 @@ class LoginApiController extends Controller * * @return void */ - public function __construct() - { - $this->middleware('auth:api', ['except' => ['login', 'register', 'hai']]); - } /** * Get a JWT via given credentials. * * @return \Illuminate\Http\JsonResponse */ - public function login(Request $request) + public function login() { - // $credentials = $request->validate( - // [ - // 'email' => ['required', 'email'], - // 'password' => ['required', 'min:8'], - // ], - // [ - // 'email.required' => 'Alamat email wajib diisi.', - // 'email.email' => 'Alamat email harus berformat valid.', - // 'password.required' => 'Password wajib diisi.', - // 'password.min' => 'Password harus memiliki panjang minimal 8 karakter.', - // ], - // ); - - // $credentials = $request->only('email', 'password'); - - // if (!$token = Auth::attempt($credentials)) { - // return response()->json(['error' => 'Unauthorized', 'message' => $credentials ], 401); - // } - - // // return $this->respondWithToken($token); - // return response()->json([ - // 'token' => $token - // ]); - $credentials = request(['email', 'password']); if (!($token = Auth::guard('api')->attempt($credentials))) { @@ -82,7 +60,7 @@ class LoginApiController extends Controller { return response()->json([ 'message' => 'Hello from API', - 'data' => $request->input('data'), + 'data' => $request->all(), ]); } @@ -251,4 +229,60 @@ class LoginApiController extends Controller ]); } } + + public function verificationCode(Request $request){ + $email = $request->input('email'); + $code = $request->input('code'); + + $verificationEmail = [ + 'code' => $code, + 'email' => $email, + ]; + try { + Mail::to($email)->send(new verificationMail($verificationEmail)); + return response()->json([ + 'message' => 'Kode verifikasi berhasil dikirim ke email. Silahkan cek di email anda.', + 'status' => true, + ]); + } catch (\Exception $e) { + return response()->json([ + 'message' => 'Kode verifikasi gagal dikirim ke email. ' . $e, + 'status' => false, + ]); + } + } + + public function searchProvince() + { + $data = Province::where('name', 'LIKE', '%' . strtoupper(request('q')) . '%')->paginate(10); + + return response()->json($data); + } + + public function searchCity(Request $request) + { + $data = City::where('province_code', $request->input('code')) + ->where('name', 'LIKE', '%' . strtoupper(request('q')) . '%') + ->paginate(10); + + return response()->json($data); + } + + public function searchDistrict(Request $request) + { + $data = District::where('city_code', $request->input('code')) + ->where('name', 'LIKE', '%' . strtoupper(request('q')) . '%') + ->paginate(10); + + return response()->json($data); + } + + public function searchVillage(Request $request) + { + $data = Village::where('district_code', $request->input('code')) + ->where('name', 'LIKE', '%' . strtoupper(request('q')) . '%') + ->paginate(10); + + return response()->json($data); + } } diff --git a/app/Http/Controllers/API/Pembeli/PembeliApiController.php b/app/Http/Controllers/API/Pembeli/PembeliApiController.php index 4c447ca..86ef230 100644 --- a/app/Http/Controllers/API/Pembeli/PembeliApiController.php +++ b/app/Http/Controllers/API/Pembeli/PembeliApiController.php @@ -16,10 +16,11 @@ use Illuminate\Support\Facades\Log; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Http; use App\Models\TransactionDescription; +use Yajra\DataTables\Facades\DataTables; class PembeliApiController extends Controller { - public function create() + public function createTransaction() { $now = Carbon::now(); $bulan = $now->format('F'); @@ -33,20 +34,21 @@ class PembeliApiController extends Controller ->latest() ->value('persentase'); } - return view('user.transaction.pembeli.new-transaction', [ - 'persentase_keuntungan' => $persentase_keuntungan, + + return response()->json([ + 'persentase_keuntungan' => $persentase_keuntungan ]); } - public function store(Request $request) + public function storeTransaction(Request $request) { $pembeli = auth()->user()->email; - $penjual = $request->email_penjual; - $nama_barang = $request->nama_barang; - $satuan_barang = $request->satuan_barang; - $deskripsi_transaksi = $request->deskripsi; - $harga_barang = $request->harga_barang; - $jumlah_barang = $request->jumlah_barang; + $penjual = $request->input('email_penjual'); + $nama_barang = $request->input('nama_barang'); + $satuan_barang = $request->input('satuan_barang'); + $deskripsi_transaksi = $request->input('deskripsi'); + $harga_barang = $request->input('harga_barang'); + $jumlah_barang = $request->input('jumlah_barang'); $nama_depan_pembeli = auth()->user()->nama_depan; $nama_belakang_pembeli = auth()->user()->nama_belakang; @@ -66,11 +68,11 @@ class PembeliApiController extends Controller $now = Carbon::now(); - $persentase_keuntungan = $request->persentase_keuntungan; + $persentase_keuntungan = $request->input('persentase_keuntungan'); - $total_harga = $request->total_harga; - $total_keuntungan = $request->total_keuntungan; - $total_bayar = $request->total_bayar; + $total_harga = $request->input('total_harga'); + $total_keuntungan = $request->input('total_keuntungan'); + $total_bayar = $request->input('total_bayar'); $batas_pembayaran = $now->addDays(1)->toTimeString(); $batas_konfirmasi_transaksi = $now->addDays(2)->toDateTimeString(); @@ -143,26 +145,26 @@ class PembeliApiController extends Controller 'enabled_payments' => ['credit_card', 'shopeepay', 'gopay', 'other_qris'], ]; - // $client = new Client([ - // 'verify' => false, - // ]); + $client = new Client([ + 'verify' => false, + ]); - // $auth = base64_encode(env('MIDTRANS_SERVER_KEY')); + $auth = base64_encode(env('MIDTRANS_SERVER_KEY')); - // $response = $client->request('POST', 'https://app.sandbox.midtrans.com/snap/v1/transactions', [ - // 'body' => json_encode($params), - // 'headers' => [ - // 'accept' => 'application/json', - // 'authorization' => 'Basic ' . $auth, - // 'content-type' => 'application/json', - // ], - // ]); + $response = $client->request('POST', 'https://app.sandbox.midtrans.com/snap/v1/transactions', [ + 'body' => json_encode($params), + 'headers' => [ + 'accept' => 'application/json', + 'authorization' => 'Basic ' . $auth, + 'content-type' => 'application/json', + ], + ]); - // $result = json_decode($response->getBody(), true); + $result = json_decode($response->getBody(), true); - // Transaction::where('id', $query->id)->update([ - // 'token' => $result['token'], - // ]); + Transaction::where('id', $query->id)->update([ + 'token' => $result['token'], + ]); $contact = Contact::where('pemilik_kontak', $pembeli) ->where('relasi_kontak', $penjual) @@ -207,13 +209,13 @@ class PembeliApiController extends Controller try { DB::beginTransaction(); - Transaction::where('id', $request->id)->update([ + Transaction::where('id', $request->input('id'))->update([ 'status_transaksi' => 'finished', 'status_pembayaran' => 'settlement', ]); TransactionDescription::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'status' => 'finished', 'background' => 'bg-buyer', 'user' => auth()->user()->email, @@ -239,7 +241,7 @@ class PembeliApiController extends Controller } } - public function payTransaction(Request $request) + public function payPayment(Request $request) { $auth = base64_encode(env('MIDTRANS_SERVER_KEY')); @@ -250,7 +252,7 @@ class PembeliApiController extends Controller 'Content-Type' => 'application/json', 'Authorization' => "Basic $auth", ]) - ->get('https://api.sandbox.midtrans.com/v2/' . $request->id . '/status'); + ->get('https://api.sandbox.midtrans.com/v2/' . $request->input('id') . '/status'); $result = json_decode($response->body(), true); @@ -263,8 +265,8 @@ class PembeliApiController extends Controller return response()->json([ 'status' => false, 'message' => 'Terjadi error di server.', - 'data' => $result, ]); + Log::error($result); } else { if ($result['transaction_status'] == 'settlement') { $transaction = 'success'; @@ -278,7 +280,7 @@ class PembeliApiController extends Controller $transaction = 'failure'; } - Transaction::where('id', $request->id)->update([ + Transaction::where('id', $request->input('id'))->update([ 'metode_pembayaran' => $result['payment_type'], 'tanggal_transaksi' => $result['transaction_time'], 'status_transaksi' => $transaction, @@ -289,7 +291,7 @@ class PembeliApiController extends Controller if ($transaction == 'success') { TransactionDescription::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'status' => 'success', 'background' => 'bg-buyer', 'judul' => 'fas fa-money-bill', @@ -305,7 +307,7 @@ class PembeliApiController extends Controller ]); } elseif ($transaction == 'challenge') { TransactionDescription::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'status' => 'challenge', 'background' => 'bg-primary', 'judul' => 'fas fa-clock', @@ -322,7 +324,7 @@ class PembeliApiController extends Controller ]); } else { TransactionDescription::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'status' => 'failure', 'background' => 'bg-primary', 'judul' => 'fas fa-exclamation', @@ -364,7 +366,7 @@ class PembeliApiController extends Controller 'Content-Type' => 'application/json', 'Authorization' => "Basic $auth", ]) - ->post('https://api.sandbox.midtrans.com/v2/' . $request->id . '/cancel'); + ->post('https://api.sandbox.midtrans.com/v2/' . $request->input('id') . '/cancel'); $result = json_decode($response->body(), true); @@ -372,19 +374,19 @@ class PembeliApiController extends Controller return response()->json([ 'status' => false, 'message' => 'Transaksi gagal.', - 'data' => $result ]); + Log::error($result); } else { try { DB::beginTransaction(); - Transaction::where('id', $request->id)->update([ + Transaction::where('id', $request->input('id'))->update([ 'status_transaksi' => 'failure', 'status_pembayaran' => 'cancel' ]); TransactionDescription::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'status' => 'cancel', 'background' => 'bg-buyer', 'judul' => 'fas fa-exclamation', @@ -412,12 +414,12 @@ class PembeliApiController extends Controller } public function cancelTransaction(Request $request){ - $transaction = Transaction::where('id', $request->id)->first(); + $transaction = Transaction::where('id', $request->input('id'))->first(); $params = [ - 'refund_key' => $request->id . '-ref1', + 'refund_key' => $request->input('id') . '-ref1', 'amount' => $transaction->total_bayar, - 'reason' => $request->complaint, + 'reason' => $request->input('complaint'), ]; $auth = base64_encode(env('MIDTRANS_SERVER_KEY')); @@ -429,7 +431,7 @@ class PembeliApiController extends Controller 'Content-Type' => 'application/json', 'Authorization' => "Basic $auth", ]) - ->post('https://api.sandbox.midtrans.com/v2/' . $request->id . '/refund', $params); + ->post('https://api.sandbox.midtrans.com/v2/' . $request->input('id') . '/refund', $params); $result = json_decode($response->body(), true); $code = $result['status_code']; @@ -439,26 +441,26 @@ class PembeliApiController extends Controller try { DB::beginTransaction(); - Transaction::where('id', $request->id)->update([ + Transaction::where('id', $request->input('id'))->update([ 'status_transaksi' => 'failure', 'status_pembayaran' => 'refund', ]); Refund::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'total' => $transaction->total_bayar, 'due_date' => now(), 'status' => 'refund', - 'complaint' => $request->complaint, + 'complaint' => $request->input('complaint'), ]); TransactionDescription::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'status' => 'refund', 'background' => 'bg-seller', 'user' => auth()->user()->email, 'judul' => 'fas fa-times', - 'deskripsi' => 'Transaksi dibatalkan oleh ' . auth()->user()->nama_depan . '. Alasan : ' . $request->complaint, + 'deskripsi' => 'Transaksi dibatalkan oleh ' . auth()->user()->nama_depan . '. Alasan : ' . $request->input('complaint'), ]); DB::commit(); @@ -487,7 +489,7 @@ class PembeliApiController extends Controller } } - public function pendingTransaction(Request $request) + public function pendingPayment(Request $request) { $auth = base64_encode(env('MIDTRANS_SERVER_KEY')); @@ -498,14 +500,14 @@ class PembeliApiController extends Controller 'Content-Type' => 'application/json', 'Authorization' => "Basic $auth", ]) - ->get('https://api.sandbox.midtrans.com/v2/' . $request->id . '/status'); + ->get('https://api.sandbox.midtrans.com/v2/' . $request->input('id') . '/status'); $result = json_decode($response->body(), true); try { DB::beginTransaction(); - Transaction::where('id', $request->id)->update([ + Transaction::where('id', $request->input('id'))->update([ 'status_pembayaran' => $result['transaction_status'], ]); @@ -513,7 +515,7 @@ class PembeliApiController extends Controller return response()->json([ 'status' => true, - 'message' => 'Pembayaran di-pending, silahkan masuk lagi dan bayar secepat mungkin.', + 'message' => 'Pembayaran di-pending, silahkan lalukan pembayaran lagi.', ]); } catch (Throwable $e) { DB::rollBack(); @@ -529,10 +531,12 @@ class PembeliApiController extends Controller public function complaintTransaction($id) { - return view('user.refund.new-refund', compact('id')); + return response()->json([ + 'id' => $id + ]); } - public function onErrorTransaction(Request $request) + public function errorPayment(Request $request) { $auth = base64_encode(env('MIDTRANS_SERVER_KEY')); @@ -543,20 +547,20 @@ class PembeliApiController extends Controller 'Content-Type' => 'application/json', 'Authorization' => "Basic $auth", ]) - ->get('https://api.sandbox.midtrans.com/v2/' . $request->id . '/status'); + ->get('https://api.sandbox.midtrans.com/v2/' . $request->input('id') . '/status'); $result = json_decode($response->body(), true); try { DB::beginTransaction(); - Transaction::where('id', $request->id)->update([ + Transaction::where('id', $request->input('id'))->update([ 'status_pembayaran' => $result['transaction_status'], ]); if ($result['transaction_status'] == 'expire') { TransactionDescription::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'status' => 'cancel', 'background' => 'bg-buyer', 'judul' => 'fas fa-exclamation', @@ -572,7 +576,7 @@ class PembeliApiController extends Controller ]); } elseif ($result['transaction'] == 'failure') { TransactionDescription::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'status' => 'failure', 'background' => 'bg-buyer', 'judul' => 'fas fa-exclamation', @@ -589,7 +593,7 @@ class PembeliApiController extends Controller ]); } else { TransactionDescription::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'status' => $result['transaction_status'], 'background' => 'bg-primary', 'judul' => 'fas fa-exclamation', @@ -618,7 +622,7 @@ class PembeliApiController extends Controller } } - public function onCloseTransaction(Request $request) + public function closePayment(Request $request) { $auth = base64_encode(env('MIDTRANS_SERVER_KEY')); @@ -722,6 +726,112 @@ class PembeliApiController extends Controller } } - - + public function listPembeli(Request $request) + { + 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']; + 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-transaction.show', ['id' => $row->id]); + $invoice = route('invoice.get',['id' => $row->id]); + $html_code = ' +
+ + + +
'; + 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']); + } + + } + } diff --git a/app/Http/Controllers/API/Penjual/PenjualApiController.php b/app/Http/Controllers/API/Penjual/PenjualApiController.php index 024544e..14c8d7b 100644 --- a/app/Http/Controllers/API/Penjual/PenjualApiController.php +++ b/app/Http/Controllers/API/Penjual/PenjualApiController.php @@ -12,6 +12,7 @@ use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Http; use App\Models\TransactionDescription; use Illuminate\Support\Facades\Storage; +use Yajra\DataTables\Facades\DataTables; class PenjualApiController extends Controller { @@ -20,12 +21,12 @@ class PenjualApiController extends Controller try { DB::beginTransaction(); - Transaction::where('id', $request->id)->update([ + Transaction::where('id', $request->input('id'))->update([ 'status_transaksi' => 'process', ]); TransactionDescription::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'status' => 'process', 'background' => 'bg-seller', 'user' => auth()->user()->email, @@ -51,12 +52,12 @@ class PenjualApiController extends Controller } } - public function denyTransaction(Request $request) + public function rejectTransaction(Request $request) { - $transaction = Transaction::where('id', $request->id)->first(); + $transaction = Transaction::where('id', $request->input('id'))->first(); $params = [ - 'refund_key' => $request->id . '-ref1', + 'refund_key' => $request->input('id') . '-ref1', 'amount' => $transaction->total_bayar, 'reason' => $request->complaint, ]; @@ -70,7 +71,7 @@ class PenjualApiController extends Controller 'Content-Type' => 'application/json', 'Authorization' => "Basic $auth", ]) - ->post('https://api.sandbox.midtrans.com/v2/' . $request->id . '/refund', $params); + ->post('https://api.sandbox.midtrans.com/v2/' . $request->input('id') . '/refund', $params); $result = json_decode($response->body(), true); $code = $result['status_code']; @@ -80,13 +81,13 @@ class PenjualApiController extends Controller try { DB::beginTransaction(); - Transaction::where('id', $request->id)->update([ + Transaction::where('id', $request->input('id'))->update([ 'status_transaksi' => 'failure', 'status_pembayaran' => 'refund', ]); Refund::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'total' => $transaction->total_bayar, 'due_date' => now(), 'status' => 'refund', @@ -94,7 +95,7 @@ class PenjualApiController extends Controller ]); TransactionDescription::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'status' => 'refund', 'background' => 'bg-seller', 'user' => auth()->user()->email, @@ -133,12 +134,12 @@ class PenjualApiController extends Controller try { DB::beginTransaction(); - Transaction::where('id', $request->id)->update([ + Transaction::where('id', $request->input('id'))->update([ 'status_transaksi' => 'sending', ]); TransactionDescription::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'status' => 'sending', 'background' => 'bg-seller', 'user' => auth()->user()->email, @@ -169,7 +170,7 @@ class PenjualApiController extends Controller try { DB::beginTransaction(); - Transaction::where('id', $request->transaction_id)->update([ + Transaction::where('id', $request->input('id'))->update([ 'status_transaksi' => 'sent', ]); @@ -184,7 +185,7 @@ class PenjualApiController extends Controller } TransactionDescription::create([ - 'transaction_id' => $request->transaction_id, + 'transaction_id' => $request->input('id'), 'status' => 'sent', 'background' => 'bg-seller', 'user' => auth()->user()->email, @@ -217,4 +218,125 @@ class PenjualApiController extends Controller ]); } + 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-transaction.show', ['id' => $row->id]); + $invoice = route('invoice.get', ['id' => $row->id]); + $html_code = + ' +
+ + + +
'; + 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']); + } + } + } diff --git a/app/Http/Controllers/API/Profile/ProfileApiController.php b/app/Http/Controllers/API/Profile/ProfileApiController.php index ea18806..a974b35 100644 --- a/app/Http/Controllers/API/Profile/ProfileApiController.php +++ b/app/Http/Controllers/API/Profile/ProfileApiController.php @@ -3,9 +3,111 @@ namespace App\Http\Controllers\API\Profile; use App\Http\Controllers\Controller; +use App\Models\User; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Storage; +use Laravolt\Indonesia\Models\City; +use Laravolt\Indonesia\Models\District; +use Laravolt\Indonesia\Models\Provinsi; +use Laravolt\Indonesia\Models\Village; +use Throwable; +use Tymon\JWTAuth\Facades\JWTAuth; class ProfileApiController extends Controller { - // + public function getProfile() + { + $provinces = Provinsi::where('code', auth()->user()->village->district->city->province->code)->get(); + $cities = City::where('province_code', auth()->user()->village->district->city->province->code)->get(); + $districts = District::where('city_code', auth()->user()->village->district->city->code)->get(); + $villages = Village::where('district_code', auth()->user()->village->district->code)->get(); + $token = JWTAuth::getToken(); + $user = JWTAuth::user($token); + return response()->json([ + 'user' => $user, + 'provinces' => $provinces, + 'cities' => $cities, + 'districts' => $districts, + 'villages' => $villages + ]); + } + + public function updateProfile(Request $request) + { + $nama_depan = str_replace(' ', '_', $request->input('nama_depan')); + $nama_belakang = str_replace(' ', '_', $request->input('nama_belakang')); + $nohp = $request->input('nohp'); + $kode_kelurahan = $request->input('kelurahan'); + $alamat = $request->input('alamat'); + $nama_bank = $request->input('nama_bank'); + $no_rek = $request->input('no_rek'); + $foto_profile = ''; + if ($request->hasFile('foto')) { + $file = $request->file('foto'); + $foto_profile = 'Foto_Profil_' . $nama_depan . '_' . $nama_belakang .'.'. $file->getClientOriginalExtension(); + $path = 'foto-profile/' . $foto_profile; + + Storage::disk('public')->put($path, file_get_contents($file)); + } + + try { + DB::beginTransaction(); + + User::where('id', auth()->user()->id)->update([ + 'nama_depan' => $nama_depan, + 'nama_belakang' => $nama_belakang, + 'nohp' => $nohp, + 'kode_kelurahan' => $kode_kelurahan, + 'alamat' => $alamat, + 'nama_bank' => $nama_bank, + 'no_rek' => $no_rek, + 'foto_profile' => $foto_profile, + ]); + + DB::commit(); + + return response()->json(['status' => true, 'message' => 'Data Profile berhasil diupdate']); + } catch (Throwable $e) { + DB::rollBack(); + + Log::error($e->getMessage()); + + return response()->json(['status' => false, 'message' => 'Terjadi Kesalahan pada sisi server']); + } + } + + public function updateProfilePassword(Request $request){ + $currentPassword = $request->input('currentPassword'); + $newPassword = $request->input('newPassword'); + $renewPassword = $request->input('renewPassword'); + + if(!Hash::check($currentPassword, auth()->user()->password)){ + return response()->json(['status' => false, 'message' => 'Password sekarang tidak sama','password' => $currentPassword]); + } + + if($renewPassword != $newPassword){ + return response()->json(['status' => false, 'message' => 'Ketikan ulang password baru']); + } + + try{ + DB::beginTransaction(); + + User::where('id', auth()->user()->id)->update([ + 'password' => Hash::make($newPassword) + ]); + + DB::commit(); + + return response()->json(['status' => true, 'message' => 'Password Berhasil diubah']); + }catch(Throwable $e){ + DB::rollBack(); + + Log::error($e->getMessage()); + + return response()->json(['status' => false, 'message' => 'Terjadi Kesalahan pada sisi server']); + } + } } diff --git a/app/Http/Controllers/API/Refund/RefundApiController.php b/app/Http/Controllers/API/Refund/RefundApiController.php index 2a8f11e..0711c46 100644 --- a/app/Http/Controllers/API/Refund/RefundApiController.php +++ b/app/Http/Controllers/API/Refund/RefundApiController.php @@ -15,29 +15,29 @@ use App\Models\TransactionDescription; class RefundApiController extends Controller { - public function create($id) + public function createRefund($id) { - return view('user.refund.new-refund',['id' => $id]); + return response()->json(['transaction_id' => $id]); } - public function store(Request $request){ + public function storeRefund(Request $request){ $now = Carbon::now(); $due_date = $now->addDays(2)->toDateTimeString(); try{ DB::beginTransaction(); - $transaction = Transaction::where('id',$request->id)->first(); + $transaction = Transaction::where('id',$request->input('id'))->first(); - Transaction::where('id', $request->id)->update([ + Transaction::where('id', $request->input('id'))->update([ 'status_transaksi' => 'refund' ]); $refund = Refund::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'total' => $transaction->total_harga, 'due_date' => $due_date, - 'complaint' => $request->complaint + 'complaint' => $request->input('complaint') ]); if ($request->hasFile('files')) { @@ -64,7 +64,7 @@ class RefundApiController extends Controller } TransactionDescription::create([ - 'transaction_id' => $request->id, + 'transaction_id' => $request->input('id'), 'status' => 'pending', 'user' => auth()->user()->email, 'judul' => 'fas fa-clock', @@ -87,10 +87,10 @@ class RefundApiController extends Controller } } - public function show($id){ + public function getDetailRefund($id){ $refund = Refund::find($id); $refundDescription = RefundDescription::where('refund_id',$id)->get(); - return view('user.refund.detail-refund',[ + return response()->json([ 'refund' => $refund, 'descriptions' => $refundDescription ]); diff --git a/app/Http/Controllers/API/Transaction/TransactionApiController.php b/app/Http/Controllers/API/Transaction/TransactionApiController.php index d13991d..5ba7edb 100644 --- a/app/Http/Controllers/API/Transaction/TransactionApiController.php +++ b/app/Http/Controllers/API/Transaction/TransactionApiController.php @@ -9,17 +9,17 @@ use App\Models\Transaction; class TransactionApiController extends Controller { - public function transactionTracking(Request $request){ - $data = TransactionDescription::where('transaction_id', $request->id)->get(); + public function getTrackingTransaction($id){ + $data = TransactionDescription::where('transaction_id', $id)->get(); return response()->json([ 'data' => $data ]); } - public function show($id) + public function getDetailTransaction($id) { - return view('user.transaction.pembeli.detail-transaction', [ + return response()->json([ 'transaction' => Transaction::findOrFail($id), 'trackings' => TransactionDescription::where('transaction_id', $id) ->latest() diff --git a/app/Http/Controllers/Login/LoginController.php b/app/Http/Controllers/Login/LoginController.php index 6e58734..e8163c7 100644 --- a/app/Http/Controllers/Login/LoginController.php +++ b/app/Http/Controllers/Login/LoginController.php @@ -313,7 +313,7 @@ class LoginController extends Controller public function searchDistrict(Request $request) { - $data = District::where('city_code', $$request->code) + $data = District::where('city_code', $request->code) ->where('name', 'LIKE', '%' . strtoupper(request('q')) . '%') ->paginate(10); diff --git a/app/Http/Controllers/Profile/ProfileController.php b/app/Http/Controllers/Profile/ProfileController.php index ca7dc51..f2380ec 100644 --- a/app/Http/Controllers/Profile/ProfileController.php +++ b/app/Http/Controllers/Profile/ProfileController.php @@ -13,14 +13,14 @@ use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Storage; use Laravolt\Indonesia\Models\City; use Laravolt\Indonesia\Models\District; -use Laravolt\Indonesia\Models\Provinsi; +use Laravolt\Indonesia\Models\Province; use Laravolt\Indonesia\Models\Village; class ProfileController extends Controller { public function index() { - $provinces = Provinsi::all(); + $provinces = Province::all(); $cities = City::where('province_code', auth()->user()->village->district->city->province->code)->get(); $districts = District::where('city_code', auth()->user()->village->district->city->code)->get(); $villages = Village::where('district_code', auth()->user()->village->district->code)->get(); diff --git a/app/Http/Controllers/User/Contact/UserContactController.php b/app/Http/Controllers/User/Contact/UserContactController.php index 6ab1866..1311a97 100644 --- a/app/Http/Controllers/User/Contact/UserContactController.php +++ b/app/Http/Controllers/User/Contact/UserContactController.php @@ -22,13 +22,23 @@ class UserContactController extends Controller return view('user.contact.index'); } - public function getContact() + public function getContact(Request $request) { - $data = DB::table('contacts') + if($request->input == '' || $request->input == null){ + $data = DB::table('contacts') ->join('users', 'contacts.relasi_kontak', '=', 'users.email') ->select('contacts.relasi_kontak', 'users.nama_depan', 'users.nama_belakang') ->where('contacts.pemilik_kontak', '=', Auth::user()->email) ->paginate(10); + }else{ + $data = DB::table('contacts') + ->join('users', 'contacts.relasi_kontak', '=', 'users.email') + ->select('contacts.relasi_kontak', 'users.nama_depan', 'users.nama_belakang') + ->where('contacts.pemilik_kontak', '=', Auth::user()->email) + ->whereRaw(DB::raw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?",['%'.strtolower($request->input).'%'])) + ->paginate(10); + } + return response()->json($data); } diff --git a/app/Http/Controllers/User/Refund/UserRefundController.php b/app/Http/Controllers/User/Refund/UserRefundController.php index cab7fbe..317e4c4 100644 --- a/app/Http/Controllers/User/Refund/UserRefundController.php +++ b/app/Http/Controllers/User/Refund/UserRefundController.php @@ -23,7 +23,7 @@ class UserRefundController extends Controller public function create($id) { - return view('user.refund.new-refund',['id' => $id]); + return view('user.refund.new-refund',['transaction_id' => $id]); } public function store(Request $request){ diff --git a/app/Models/User.php b/app/Models/User.php index c8a8bd9..72e9c86 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -110,19 +110,19 @@ class User extends Authenticatable implements JWTSubject //function alamat public function getVillageName(){ - return $this->village->name; + return ucwords(strtolower($this->village->name)); } public function getDistrictName(){ - return $this->village->district->name; + return ucwords(strtolower($this->village->district->name)); } public function getCityName(){ - return $this->village->district->city->name; + return ucwords(strtolower($this->village->district->city->name)); } public function getProvinceName(){ - return $this->village->district->city->province->name; + return ucwords(strtolower($this->village->district->city->province->name)); } public function contacts() diff --git a/resources/views/Admin/index.blade.php b/resources/views/Admin/index.blade.php index 81be7ce..c263cc0 100644 --- a/resources/views/Admin/index.blade.php +++ b/resources/views/Admin/index.blade.php @@ -298,7 +298,7 @@ -
+ {{--
@@ -380,7 +380,7 @@
-
+
--}} @include('admin.transaction.modal-tracking') diff --git a/resources/views/User/contact/index.blade.php b/resources/views/User/contact/index.blade.php index a657c93..7f930de 100644 --- a/resources/views/User/contact/index.blade.php +++ b/resources/views/User/contact/index.blade.php @@ -47,6 +47,7 @@