API Flutter

This commit is contained in:
Muhammad Raihan Surya 2023-11-20 15:01:37 +07:00
parent c353a83bd4
commit 59aa63be93
19 changed files with 735 additions and 254 deletions

View File

@ -10,22 +10,31 @@ use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Tymon\JWTAuth\Facades\JWTAuth;
use Yajra\DataTables\Facades\DataTables;
class ContactApiController extends Controller class ContactApiController extends Controller
{ {
public function getContact() public function getListContact(Request $request)
{ {
// $token = JWTAuth::getToken();
// $user = JWTAuth::user($token);
$data = DB::table('contacts') $data = DB::table('contacts')
->join('users', 'contacts.relasi_kontak', '=', 'users.email') ->join('users', 'contacts.relasi_kontak', '=', 'users.email')
->select('contacts.relasi_kontak', 'users.nama_depan', 'users.nama_belakang') ->select('contacts.relasi_kontak', DB::raw("CONCAT(users.nama_depan, ' ', users.nama_belakang) as nama_lengkap") )
->where('contacts.pemilik_kontak', '=', Auth::user()->email) ->where('contacts.pemilik_kontak', '=', auth()->user()->email)
->whereRaw("LOWER(CONCAT(users.nama_depan, ' ', users.nama_belakang)) LIKE ?", ['%' . strtolower($request->input('search')) . '%'])
->paginate(10); ->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) { if ($email_relasi == Auth::user()->email) {
return response()->json([ return response()->json([
'status' => false, 'status' => false,
@ -33,7 +42,7 @@ class ContactApiController extends Controller
]); ]);
} }
try{ try {
DB::beginTransaction(); DB::beginTransaction();
Contact::create([ Contact::create([
@ -45,10 +54,9 @@ class ContactApiController extends Controller
return response()->json([ return response()->json([
'status' => true, 'status' => true,
'message' => 'Kontak berhasil ditambahkan.' 'message' => 'Kontak berhasil ditambahkan.',
]); ]);
} catch (Throwable $e) {
}catch(Throwable $e){
DB::rollBack(); DB::rollBack();
Log::error($e->getMessage()); Log::error($e->getMessage());
@ -60,12 +68,12 @@ class ContactApiController extends Controller
} }
} }
public function destroy(Request $request) public function deleteContact(Request $request)
{ {
try { try {
DB::beginTransaction(); DB::beginTransaction();
Contact::destroy($request->id); Contact::destroy($request->input('id'));
DB::commit(); DB::commit();
@ -73,7 +81,6 @@ class ContactApiController extends Controller
'message' => 'Berhasil hapus data', 'message' => 'Berhasil hapus data',
'status' => true, 'status' => true,
]); ]);
} catch (Throwable $e) { } catch (Throwable $e) {
DB::rollBack(); 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') ->where('role', 'User')
->first(); ->first();
if ($result) { if ($result) {
@ -100,37 +107,76 @@ class ContactApiController extends Controller
} else { } else {
return response()->json([ return response()->json([
'status' => false, 'status' => false,
'message' => 'Akun dengen email ' . $request->email . ' tersedia dan belum diverifikasi', 'message' => 'Akun dengen email ' . $request->input('email') . ' tersedia dan belum diverifikasi',
]); ]);
} }
} else { } else {
return response()->json([ return response()->json([
'status' => false, '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){ public function detailContact(Request $request)
$data = Contact::join('users','contacts.relasi_kontak','=','users.email') {
->join('indonesia_villages','users.kode_kelurahan','=','indonesia_villages.code') $data = Contact::join('users', 'contacts.relasi_kontak', '=', 'users.email')
->join('indonesia_districts','indonesia_villages.district_code','=','indonesia_districts.code') ->join('indonesia_villages', 'users.kode_kelurahan', '=', 'indonesia_villages.code')
->join('indonesia_cities','indonesia_districts.city_code','=','indonesia_cities.code') ->join('indonesia_districts', 'indonesia_villages.district_code', '=', 'indonesia_districts.code')
->join('indonesia_provinces','indonesia_cities.province_code','=','indonesia_provinces.code') ->join('indonesia_cities', 'indonesia_districts.city_code', '=', 'indonesia_cities.code')
->where('contacts.id',$request->id) ->join('indonesia_provinces', 'indonesia_cities.province_code', '=', 'indonesia_provinces.code')
->select( ->where('contacts.id', $request->input('id'))
DB::raw("CONCAT(users.nama_depan,' ',users.nama_belakang) as nama_lengkap"), ->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')
'users.alamat', ->first();
'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([ 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 =
'
<button class="btn btn-info open-detail-modal" data-toggle="modal"
data-target="#modaldetail" id="detailContact"
data-id="' .
$row->id .
'">Detail</button>
<button class="btn btn-danger open-detail-modal" id="deleteContact"
data-id="' .
$row->id .
'">Hapus</button>
';
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']);
}
}
} }

View File

@ -0,0 +1,27 @@
<?php
namespace App\Http\Controllers\API\Invoice;
use App\Http\Controllers\Controller;
use App\Models\Transaction;
use Illuminate\Http\Request;
class InvoiceApiController extends Controller
{
public function getInvoice($id)
{
return response()->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),
]);
}
}

View File

@ -3,6 +3,7 @@
namespace App\Http\Controllers\API\Login; namespace App\Http\Controllers\API\Login;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Mail\verificationMail;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Tymon\JWTAuth\Facades\JWTFactory; use Tymon\JWTAuth\Facades\JWTFactory;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
@ -11,8 +12,13 @@ use Carbon\Carbon;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str; 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; use Tymon\JWTAuth\Facades\JWTAuth;
class LoginApiController extends Controller class LoginApiController extends Controller
@ -22,42 +28,14 @@ class LoginApiController extends Controller
* *
* @return void * @return void
*/ */
public function __construct()
{
$this->middleware('auth:api', ['except' => ['login', 'register', 'hai']]);
}
/** /**
* Get a JWT via given credentials. * Get a JWT via given credentials.
* *
* @return \Illuminate\Http\JsonResponse * @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']); $credentials = request(['email', 'password']);
if (!($token = Auth::guard('api')->attempt($credentials))) { if (!($token = Auth::guard('api')->attempt($credentials))) {
@ -82,7 +60,7 @@ class LoginApiController extends Controller
{ {
return response()->json([ return response()->json([
'message' => 'Hello from API', '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);
}
} }

View File

@ -16,10 +16,11 @@ use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Http;
use App\Models\TransactionDescription; use App\Models\TransactionDescription;
use Yajra\DataTables\Facades\DataTables;
class PembeliApiController extends Controller class PembeliApiController extends Controller
{ {
public function create() public function createTransaction()
{ {
$now = Carbon::now(); $now = Carbon::now();
$bulan = $now->format('F'); $bulan = $now->format('F');
@ -33,20 +34,21 @@ class PembeliApiController extends Controller
->latest() ->latest()
->value('persentase'); ->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; $pembeli = auth()->user()->email;
$penjual = $request->email_penjual; $penjual = $request->input('email_penjual');
$nama_barang = $request->nama_barang; $nama_barang = $request->input('nama_barang');
$satuan_barang = $request->satuan_barang; $satuan_barang = $request->input('satuan_barang');
$deskripsi_transaksi = $request->deskripsi; $deskripsi_transaksi = $request->input('deskripsi');
$harga_barang = $request->harga_barang; $harga_barang = $request->input('harga_barang');
$jumlah_barang = $request->jumlah_barang; $jumlah_barang = $request->input('jumlah_barang');
$nama_depan_pembeli = auth()->user()->nama_depan; $nama_depan_pembeli = auth()->user()->nama_depan;
$nama_belakang_pembeli = auth()->user()->nama_belakang; $nama_belakang_pembeli = auth()->user()->nama_belakang;
@ -66,11 +68,11 @@ class PembeliApiController extends Controller
$now = Carbon::now(); $now = Carbon::now();
$persentase_keuntungan = $request->persentase_keuntungan; $persentase_keuntungan = $request->input('persentase_keuntungan');
$total_harga = $request->total_harga; $total_harga = $request->input('total_harga');
$total_keuntungan = $request->total_keuntungan; $total_keuntungan = $request->input('total_keuntungan');
$total_bayar = $request->total_bayar; $total_bayar = $request->input('total_bayar');
$batas_pembayaran = $now->addDays(1)->toTimeString(); $batas_pembayaran = $now->addDays(1)->toTimeString();
$batas_konfirmasi_transaksi = $now->addDays(2)->toDateTimeString(); $batas_konfirmasi_transaksi = $now->addDays(2)->toDateTimeString();
@ -143,26 +145,26 @@ class PembeliApiController extends Controller
'enabled_payments' => ['credit_card', 'shopeepay', 'gopay', 'other_qris'], 'enabled_payments' => ['credit_card', 'shopeepay', 'gopay', 'other_qris'],
]; ];
// $client = new Client([ $client = new Client([
// 'verify' => false, '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', [ $response = $client->request('POST', 'https://app.sandbox.midtrans.com/snap/v1/transactions', [
// 'body' => json_encode($params), 'body' => json_encode($params),
// 'headers' => [ 'headers' => [
// 'accept' => 'application/json', 'accept' => 'application/json',
// 'authorization' => 'Basic ' . $auth, 'authorization' => 'Basic ' . $auth,
// 'content-type' => 'application/json', 'content-type' => 'application/json',
// ], ],
// ]); ]);
// $result = json_decode($response->getBody(), true); $result = json_decode($response->getBody(), true);
// Transaction::where('id', $query->id)->update([ Transaction::where('id', $query->id)->update([
// 'token' => $result['token'], 'token' => $result['token'],
// ]); ]);
$contact = Contact::where('pemilik_kontak', $pembeli) $contact = Contact::where('pemilik_kontak', $pembeli)
->where('relasi_kontak', $penjual) ->where('relasi_kontak', $penjual)
@ -207,13 +209,13 @@ class PembeliApiController extends Controller
try { try {
DB::beginTransaction(); DB::beginTransaction();
Transaction::where('id', $request->id)->update([ Transaction::where('id', $request->input('id'))->update([
'status_transaksi' => 'finished', 'status_transaksi' => 'finished',
'status_pembayaran' => 'settlement', 'status_pembayaran' => 'settlement',
]); ]);
TransactionDescription::create([ TransactionDescription::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'status' => 'finished', 'status' => 'finished',
'background' => 'bg-buyer', 'background' => 'bg-buyer',
'user' => auth()->user()->email, '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')); $auth = base64_encode(env('MIDTRANS_SERVER_KEY'));
@ -250,7 +252,7 @@ class PembeliApiController extends Controller
'Content-Type' => 'application/json', 'Content-Type' => 'application/json',
'Authorization' => "Basic $auth", '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); $result = json_decode($response->body(), true);
@ -263,8 +265,8 @@ class PembeliApiController extends Controller
return response()->json([ return response()->json([
'status' => false, 'status' => false,
'message' => 'Terjadi error di server.', 'message' => 'Terjadi error di server.',
'data' => $result,
]); ]);
Log::error($result);
} else { } else {
if ($result['transaction_status'] == 'settlement') { if ($result['transaction_status'] == 'settlement') {
$transaction = 'success'; $transaction = 'success';
@ -278,7 +280,7 @@ class PembeliApiController extends Controller
$transaction = 'failure'; $transaction = 'failure';
} }
Transaction::where('id', $request->id)->update([ Transaction::where('id', $request->input('id'))->update([
'metode_pembayaran' => $result['payment_type'], 'metode_pembayaran' => $result['payment_type'],
'tanggal_transaksi' => $result['transaction_time'], 'tanggal_transaksi' => $result['transaction_time'],
'status_transaksi' => $transaction, 'status_transaksi' => $transaction,
@ -289,7 +291,7 @@ class PembeliApiController extends Controller
if ($transaction == 'success') { if ($transaction == 'success') {
TransactionDescription::create([ TransactionDescription::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'status' => 'success', 'status' => 'success',
'background' => 'bg-buyer', 'background' => 'bg-buyer',
'judul' => 'fas fa-money-bill', 'judul' => 'fas fa-money-bill',
@ -305,7 +307,7 @@ class PembeliApiController extends Controller
]); ]);
} elseif ($transaction == 'challenge') { } elseif ($transaction == 'challenge') {
TransactionDescription::create([ TransactionDescription::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'status' => 'challenge', 'status' => 'challenge',
'background' => 'bg-primary', 'background' => 'bg-primary',
'judul' => 'fas fa-clock', 'judul' => 'fas fa-clock',
@ -322,7 +324,7 @@ class PembeliApiController extends Controller
]); ]);
} else { } else {
TransactionDescription::create([ TransactionDescription::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'status' => 'failure', 'status' => 'failure',
'background' => 'bg-primary', 'background' => 'bg-primary',
'judul' => 'fas fa-exclamation', 'judul' => 'fas fa-exclamation',
@ -364,7 +366,7 @@ class PembeliApiController extends Controller
'Content-Type' => 'application/json', 'Content-Type' => 'application/json',
'Authorization' => "Basic $auth", '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); $result = json_decode($response->body(), true);
@ -372,19 +374,19 @@ class PembeliApiController extends Controller
return response()->json([ return response()->json([
'status' => false, 'status' => false,
'message' => 'Transaksi gagal.', 'message' => 'Transaksi gagal.',
'data' => $result
]); ]);
Log::error($result);
} else { } else {
try { try {
DB::beginTransaction(); DB::beginTransaction();
Transaction::where('id', $request->id)->update([ Transaction::where('id', $request->input('id'))->update([
'status_transaksi' => 'failure', 'status_transaksi' => 'failure',
'status_pembayaran' => 'cancel' 'status_pembayaran' => 'cancel'
]); ]);
TransactionDescription::create([ TransactionDescription::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'status' => 'cancel', 'status' => 'cancel',
'background' => 'bg-buyer', 'background' => 'bg-buyer',
'judul' => 'fas fa-exclamation', 'judul' => 'fas fa-exclamation',
@ -412,12 +414,12 @@ class PembeliApiController extends Controller
} }
public function cancelTransaction(Request $request){ public function cancelTransaction(Request $request){
$transaction = Transaction::where('id', $request->id)->first(); $transaction = Transaction::where('id', $request->input('id'))->first();
$params = [ $params = [
'refund_key' => $request->id . '-ref1', 'refund_key' => $request->input('id') . '-ref1',
'amount' => $transaction->total_bayar, 'amount' => $transaction->total_bayar,
'reason' => $request->complaint, 'reason' => $request->input('complaint'),
]; ];
$auth = base64_encode(env('MIDTRANS_SERVER_KEY')); $auth = base64_encode(env('MIDTRANS_SERVER_KEY'));
@ -429,7 +431,7 @@ class PembeliApiController extends Controller
'Content-Type' => 'application/json', 'Content-Type' => 'application/json',
'Authorization' => "Basic $auth", '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); $result = json_decode($response->body(), true);
$code = $result['status_code']; $code = $result['status_code'];
@ -439,26 +441,26 @@ class PembeliApiController extends Controller
try { try {
DB::beginTransaction(); DB::beginTransaction();
Transaction::where('id', $request->id)->update([ Transaction::where('id', $request->input('id'))->update([
'status_transaksi' => 'failure', 'status_transaksi' => 'failure',
'status_pembayaran' => 'refund', 'status_pembayaran' => 'refund',
]); ]);
Refund::create([ Refund::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'total' => $transaction->total_bayar, 'total' => $transaction->total_bayar,
'due_date' => now(), 'due_date' => now(),
'status' => 'refund', 'status' => 'refund',
'complaint' => $request->complaint, 'complaint' => $request->input('complaint'),
]); ]);
TransactionDescription::create([ TransactionDescription::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'status' => 'refund', 'status' => 'refund',
'background' => 'bg-seller', 'background' => 'bg-seller',
'user' => auth()->user()->email, 'user' => auth()->user()->email,
'judul' => 'fas fa-times', '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(); 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')); $auth = base64_encode(env('MIDTRANS_SERVER_KEY'));
@ -498,14 +500,14 @@ class PembeliApiController extends Controller
'Content-Type' => 'application/json', 'Content-Type' => 'application/json',
'Authorization' => "Basic $auth", '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); $result = json_decode($response->body(), true);
try { try {
DB::beginTransaction(); DB::beginTransaction();
Transaction::where('id', $request->id)->update([ Transaction::where('id', $request->input('id'))->update([
'status_pembayaran' => $result['transaction_status'], 'status_pembayaran' => $result['transaction_status'],
]); ]);
@ -513,7 +515,7 @@ class PembeliApiController extends Controller
return response()->json([ return response()->json([
'status' => true, 'status' => true,
'message' => 'Pembayaran di-pending, silahkan masuk lagi dan bayar secepat mungkin.', 'message' => 'Pembayaran di-pending, silahkan lalukan pembayaran lagi.',
]); ]);
} catch (Throwable $e) { } catch (Throwable $e) {
DB::rollBack(); DB::rollBack();
@ -529,10 +531,12 @@ class PembeliApiController extends Controller
public function complaintTransaction($id) 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')); $auth = base64_encode(env('MIDTRANS_SERVER_KEY'));
@ -543,20 +547,20 @@ class PembeliApiController extends Controller
'Content-Type' => 'application/json', 'Content-Type' => 'application/json',
'Authorization' => "Basic $auth", '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); $result = json_decode($response->body(), true);
try { try {
DB::beginTransaction(); DB::beginTransaction();
Transaction::where('id', $request->id)->update([ Transaction::where('id', $request->input('id'))->update([
'status_pembayaran' => $result['transaction_status'], 'status_pembayaran' => $result['transaction_status'],
]); ]);
if ($result['transaction_status'] == 'expire') { if ($result['transaction_status'] == 'expire') {
TransactionDescription::create([ TransactionDescription::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'status' => 'cancel', 'status' => 'cancel',
'background' => 'bg-buyer', 'background' => 'bg-buyer',
'judul' => 'fas fa-exclamation', 'judul' => 'fas fa-exclamation',
@ -572,7 +576,7 @@ class PembeliApiController extends Controller
]); ]);
} elseif ($result['transaction'] == 'failure') { } elseif ($result['transaction'] == 'failure') {
TransactionDescription::create([ TransactionDescription::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'status' => 'failure', 'status' => 'failure',
'background' => 'bg-buyer', 'background' => 'bg-buyer',
'judul' => 'fas fa-exclamation', 'judul' => 'fas fa-exclamation',
@ -589,7 +593,7 @@ class PembeliApiController extends Controller
]); ]);
} else { } else {
TransactionDescription::create([ TransactionDescription::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'status' => $result['transaction_status'], 'status' => $result['transaction_status'],
'background' => 'bg-primary', 'background' => 'bg-primary',
'judul' => 'fas fa-exclamation', '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')); $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 = '
<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="cancelPayment" class="dropdown-item">Batal Pembayaran</a>
</li>
';
}
if($row->status_transaksi == 'success'){
$html_code .= '
<li><a href="#" data-id="'.$row->id.'"
id="cancelTransaction" class="dropdown-item">Batal Transaksi</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']);
}
}
} }

View File

@ -12,6 +12,7 @@ use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Http;
use App\Models\TransactionDescription; use App\Models\TransactionDescription;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Yajra\DataTables\Facades\DataTables;
class PenjualApiController extends Controller class PenjualApiController extends Controller
{ {
@ -20,12 +21,12 @@ class PenjualApiController extends Controller
try { try {
DB::beginTransaction(); DB::beginTransaction();
Transaction::where('id', $request->id)->update([ Transaction::where('id', $request->input('id'))->update([
'status_transaksi' => 'process', 'status_transaksi' => 'process',
]); ]);
TransactionDescription::create([ TransactionDescription::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'status' => 'process', 'status' => 'process',
'background' => 'bg-seller', 'background' => 'bg-seller',
'user' => auth()->user()->email, '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 = [ $params = [
'refund_key' => $request->id . '-ref1', 'refund_key' => $request->input('id') . '-ref1',
'amount' => $transaction->total_bayar, 'amount' => $transaction->total_bayar,
'reason' => $request->complaint, 'reason' => $request->complaint,
]; ];
@ -70,7 +71,7 @@ class PenjualApiController extends Controller
'Content-Type' => 'application/json', 'Content-Type' => 'application/json',
'Authorization' => "Basic $auth", '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); $result = json_decode($response->body(), true);
$code = $result['status_code']; $code = $result['status_code'];
@ -80,13 +81,13 @@ class PenjualApiController extends Controller
try { try {
DB::beginTransaction(); DB::beginTransaction();
Transaction::where('id', $request->id)->update([ Transaction::where('id', $request->input('id'))->update([
'status_transaksi' => 'failure', 'status_transaksi' => 'failure',
'status_pembayaran' => 'refund', 'status_pembayaran' => 'refund',
]); ]);
Refund::create([ Refund::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'total' => $transaction->total_bayar, 'total' => $transaction->total_bayar,
'due_date' => now(), 'due_date' => now(),
'status' => 'refund', 'status' => 'refund',
@ -94,7 +95,7 @@ class PenjualApiController extends Controller
]); ]);
TransactionDescription::create([ TransactionDescription::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'status' => 'refund', 'status' => 'refund',
'background' => 'bg-seller', 'background' => 'bg-seller',
'user' => auth()->user()->email, 'user' => auth()->user()->email,
@ -133,12 +134,12 @@ class PenjualApiController extends Controller
try { try {
DB::beginTransaction(); DB::beginTransaction();
Transaction::where('id', $request->id)->update([ Transaction::where('id', $request->input('id'))->update([
'status_transaksi' => 'sending', 'status_transaksi' => 'sending',
]); ]);
TransactionDescription::create([ TransactionDescription::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'status' => 'sending', 'status' => 'sending',
'background' => 'bg-seller', 'background' => 'bg-seller',
'user' => auth()->user()->email, 'user' => auth()->user()->email,
@ -169,7 +170,7 @@ class PenjualApiController extends Controller
try { try {
DB::beginTransaction(); DB::beginTransaction();
Transaction::where('id', $request->transaction_id)->update([ Transaction::where('id', $request->input('id'))->update([
'status_transaksi' => 'sent', 'status_transaksi' => 'sent',
]); ]);
@ -184,7 +185,7 @@ class PenjualApiController extends Controller
} }
TransactionDescription::create([ TransactionDescription::create([
'transaction_id' => $request->transaction_id, 'transaction_id' => $request->input('id'),
'status' => 'sent', 'status' => 'sent',
'background' => 'bg-seller', 'background' => 'bg-seller',
'user' => auth()->user()->email, '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 =
'
<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>
<li><a class="dropdown-item" id="denyTransaction"
data-id="' .
$row->id .
'"
href="#">Tolak 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']);
}
}
} }

View File

@ -3,9 +3,111 @@
namespace App\Http\Controllers\API\Profile; namespace App\Http\Controllers\API\Profile;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request; 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 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']);
}
}
} }

View File

@ -15,29 +15,29 @@ use App\Models\TransactionDescription;
class RefundApiController extends Controller 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(); $now = Carbon::now();
$due_date = $now->addDays(2)->toDateTimeString(); $due_date = $now->addDays(2)->toDateTimeString();
try{ try{
DB::beginTransaction(); 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' 'status_transaksi' => 'refund'
]); ]);
$refund = Refund::create([ $refund = Refund::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'total' => $transaction->total_harga, 'total' => $transaction->total_harga,
'due_date' => $due_date, 'due_date' => $due_date,
'complaint' => $request->complaint 'complaint' => $request->input('complaint')
]); ]);
if ($request->hasFile('files')) { if ($request->hasFile('files')) {
@ -64,7 +64,7 @@ class RefundApiController extends Controller
} }
TransactionDescription::create([ TransactionDescription::create([
'transaction_id' => $request->id, 'transaction_id' => $request->input('id'),
'status' => 'pending', 'status' => 'pending',
'user' => auth()->user()->email, 'user' => auth()->user()->email,
'judul' => 'fas fa-clock', 'judul' => 'fas fa-clock',
@ -87,10 +87,10 @@ class RefundApiController extends Controller
} }
} }
public function show($id){ public function getDetailRefund($id){
$refund = Refund::find($id); $refund = Refund::find($id);
$refundDescription = RefundDescription::where('refund_id',$id)->get(); $refundDescription = RefundDescription::where('refund_id',$id)->get();
return view('user.refund.detail-refund',[ return response()->json([
'refund' => $refund, 'refund' => $refund,
'descriptions' => $refundDescription 'descriptions' => $refundDescription
]); ]);

View File

@ -9,17 +9,17 @@ use App\Models\Transaction;
class TransactionApiController extends Controller class TransactionApiController extends Controller
{ {
public function transactionTracking(Request $request){ public function getTrackingTransaction($id){
$data = TransactionDescription::where('transaction_id', $request->id)->get(); $data = TransactionDescription::where('transaction_id', $id)->get();
return response()->json([ return response()->json([
'data' => $data 'data' => $data
]); ]);
} }
public function show($id) public function getDetailTransaction($id)
{ {
return view('user.transaction.pembeli.detail-transaction', [ return response()->json([
'transaction' => Transaction::findOrFail($id), 'transaction' => Transaction::findOrFail($id),
'trackings' => TransactionDescription::where('transaction_id', $id) 'trackings' => TransactionDescription::where('transaction_id', $id)
->latest() ->latest()

View File

@ -313,7 +313,7 @@ class LoginController extends Controller
public function searchDistrict(Request $request) 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')) . '%') ->where('name', 'LIKE', '%' . strtoupper(request('q')) . '%')
->paginate(10); ->paginate(10);

View File

@ -13,14 +13,14 @@ use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Laravolt\Indonesia\Models\City; use Laravolt\Indonesia\Models\City;
use Laravolt\Indonesia\Models\District; use Laravolt\Indonesia\Models\District;
use Laravolt\Indonesia\Models\Provinsi; use Laravolt\Indonesia\Models\Province;
use Laravolt\Indonesia\Models\Village; use Laravolt\Indonesia\Models\Village;
class ProfileController extends Controller class ProfileController extends Controller
{ {
public function index() public function index()
{ {
$provinces = Provinsi::all(); $provinces = Province::all();
$cities = City::where('province_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(); $districts = District::where('city_code', auth()->user()->village->district->city->code)->get();
$villages = Village::where('district_code', auth()->user()->village->district->code)->get(); $villages = Village::where('district_code', auth()->user()->village->district->code)->get();

View File

@ -22,13 +22,23 @@ class UserContactController extends Controller
return view('user.contact.index'); 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') ->join('users', 'contacts.relasi_kontak', '=', 'users.email')
->select('contacts.relasi_kontak', 'users.nama_depan', 'users.nama_belakang') ->select('contacts.relasi_kontak', 'users.nama_depan', 'users.nama_belakang')
->where('contacts.pemilik_kontak', '=', Auth::user()->email) ->where('contacts.pemilik_kontak', '=', Auth::user()->email)
->paginate(10); ->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); return response()->json($data);
} }

View File

@ -23,7 +23,7 @@ class UserRefundController extends Controller
public function create($id) 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){ public function store(Request $request){

View File

@ -110,19 +110,19 @@ class User extends Authenticatable implements JWTSubject
//function alamat //function alamat
public function getVillageName(){ public function getVillageName(){
return $this->village->name; return ucwords(strtolower($this->village->name));
} }
public function getDistrictName(){ public function getDistrictName(){
return $this->village->district->name; return ucwords(strtolower($this->village->district->name));
} }
public function getCityName(){ public function getCityName(){
return $this->village->district->city->name; return ucwords(strtolower($this->village->district->city->name));
} }
public function getProvinceName(){ public function getProvinceName(){
return $this->village->district->city->province->name; return ucwords(strtolower($this->village->district->city->province->name));
} }
public function contacts() public function contacts()

View File

@ -298,7 +298,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="row"> {{-- <div class="row">
<div class="col-12"> <div class="col-12">
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
@ -380,7 +380,7 @@
</div> </div>
</div> </div>
</div> </div>
</div> </div> --}}
</section> </section>
</div> </div>
@include('admin.transaction.modal-tracking') @include('admin.transaction.modal-tracking')

View File

@ -47,6 +47,7 @@
<script> <script>
$(document).ready(function() { $(document).ready(function() {
let check = false; let check = false;
var teksArea = document.getElementById('resultArea');
$('#modaldetail').on('show.bs.modal', function(event) { $('#modaldetail').on('show.bs.modal', function(event) {
var triggerLink = $(event.relatedTarget); var triggerLink = $(event.relatedTarget);
@ -150,7 +151,7 @@
url: "{{ route('user-contact.destroy') }}", url: "{{ route('user-contact.destroy') }}",
data: { data: {
id: dataId id: dataId
} },
type: 'DELETE', type: 'DELETE',
contentType: false, contentType: false,
processType: false, processType: false,
@ -207,11 +208,10 @@
url: "{{ route('user-contact.email') }}", url: "{{ route('user-contact.email') }}",
data: { data: {
email: email email: email
} },
type: 'GET', type: 'GET',
success: function(response) { success: function(response) {
if (response.status) { if (response.status) {
let status = response.message.status
Swal.fire({ Swal.fire({
title: response.status ? 'Akun ditemukan' : title: response.status ? 'Akun ditemukan' :
'Akun tidak ditemukan', 'Akun tidak ditemukan',
@ -239,6 +239,8 @@
}).then(function() { }).then(function() {
Swal.close(); Swal.close();
}); });
teksArea.value = '';
teksArea.style.height = 'auto';
check = false; check = false;
} }
}, },
@ -251,6 +253,8 @@
}).then(function() { }).then(function() {
Swal.close(); Swal.close();
}); });
teksArea.value = '';
teksArea.style.height = 'auto';
check = false; check = false;
} }
}); });
@ -280,7 +284,7 @@
}); });
$.ajax({ $.ajax({
url: '{{ route('user-contact.store') }}', url: "{{ route('user-contact.store') }}",
type: 'POST', type: 'POST',
data: formData, data: formData,
processData: false, processData: false,

View File

@ -14,7 +14,7 @@
<div class="card-header d-flex justify-content-center"> <div class="card-header d-flex justify-content-center">
<h2>Form Refund Pesanan</h2> <h2>Form Refund Pesanan</h2>
</div> </div>
<input type="hidden" name="id" value="{{ $id }}"> <input type="hidden" name="id" value="{{ $transaction_id }}">
<div class="card-body"> <div class="card-body">
<div class="section-title mt-0">Alasan Komplain</div> <div class="section-title mt-0">Alasan Komplain</div>
<div class="col-md-12"> <div class="col-md-12">

View File

@ -155,7 +155,8 @@
<div class="col-md-8 col-lg-9"> <div class="col-md-8 col-lg-9">
<select style="width: 100%;" name="provinsi" id="selectProvince"> <select style="width: 100%;" name="provinsi" id="selectProvince">
@foreach ($provinces as $province) @foreach ($provinces as $province)
<option value="{{ $province->code }}">{{ $province->name }}</option> <option value="{{ $province->code }}">
{{ ucwords(strtolower($province->name)) }}</option>
@endforeach @endforeach
</select> </select>
</div> </div>
@ -167,7 +168,8 @@
<div class="col-md-8 col-lg-9"> <div class="col-md-8 col-lg-9">
<select style="width: 100%;" name="kota" id="selectCity"> <select style="width: 100%;" name="kota" id="selectCity">
@foreach ($cities as $city) @foreach ($cities as $city)
<option value="{{ $city->code }}">{{ $city->name }}</option> <option value="{{ $city->code }}">
{{ ucwords(strtolower($city->name)) }}</option>
@endforeach @endforeach
</select> </select>
</div> </div>
@ -178,7 +180,8 @@
<div class="col-md-8 col-lg-9"> <div class="col-md-8 col-lg-9">
<select style="width: 100%;" name="kecamatan" id="selectDistrict"> <select style="width: 100%;" name="kecamatan" id="selectDistrict">
@foreach ($districts as $district) @foreach ($districts as $district)
<option value="{{ $district->code }}">{{ $district->name }}</option> <option value="{{ $district->code }}">
{{ ucwords(strtolower($district->name)) }}</option>
@endforeach @endforeach
</select> </select>
</div> </div>
@ -189,7 +192,8 @@
<div class="col-md-8 col-lg-9"> <div class="col-md-8 col-lg-9">
<select style="width: 100%;" name="kelurahan" id="selectVillage" required> <select style="width: 100%;" name="kelurahan" id="selectVillage" required>
@foreach ($villages as $village) @foreach ($villages as $village)
<option value="{{ $village->code }}">{{ $village->name }}</option> <option value="{{ $village->code }}">
{{ ucwords(strtolower($village->name)) }}</option>
@endforeach @endforeach
</select> </select>
</div> </div>
@ -205,7 +209,7 @@
<div class="row mb-3"> <div class="row mb-3">
<label for="namaBank" class="col-md-4 col-lg-3 col-form-label">Bank/e-Wallet <label for="namaBank" class="col-md-4 col-lg-3 col-form-label">Bank/e-Wallet
Tujuan</label> Tujuan (Digunakan untuk pengiriman uang jika menjadi penjual)</label>
<div class="col-md-4 col-lg-4"> <div class="col-md-4 col-lg-4">
<select style="width: 100%;" name="nama_bank" id="namaBank" required> <select style="width: 100%;" name="nama_bank" id="namaBank" required>
<option selected disabled>Silahkan Pilih Bank/e-Wallet</option> <option selected disabled>Silahkan Pilih Bank/e-Wallet</option>
@ -390,16 +394,6 @@
$(document).ready(function() { $(document).ready(function() {
var selectedVillage = "{{ Auth::user()->kode_kelurahan }}";
var selectedDistrict = "{{ Auth::user()->village->district->code }}";
var selectedCity = "{{ Auth::user()->village->district->city->code }}";
var selectedProvince = "{{ Auth::user()->village->district->city->province->code }}";
$("#selectProvince").val(selectedProvince).trigger('change');
$("#selectCity").val(selectedCity).trigger('change');
$("#selectDistrict").val(selectedDistrict).trigger('change');
$("#selectVillage").val(selectedVillage).trigger('change');
function ucwords(str) { function ucwords(str) {
return str.toLowerCase().replace(/\b\w/g, function(l) { return str.toLowerCase().replace(/\b\w/g, function(l) {
return l.toUpperCase(); return l.toUpperCase();
@ -419,10 +413,10 @@
let code = $("#selectProvince").val(); let code = $("#selectProvince").val();
// Mengosongkan pilihan di selectCity dan selectDistrict dan selectVillage // Mengosongkan pilihan di selectCity dan selectDistrict dan selectVillage
$("#selectCity", "#selectDistrict", "#selectVillage").empty(); $("#selectCity, #selectDistrict, #selectVillage").empty();
// Menghapus properti 'disabled' pada selectCity dan selectDistrict dan selectVillage // Menghapus properti 'disabled' pada selectCity dan selectDistrict dan selectVillage
$("#selectCity", "#selectDistrict", "#selectVillage").prop( $("#selectCity, #selectDistrict, #selectVillage").prop(
"disable", "disable",
false false
); );
@ -431,7 +425,7 @@
$("#selectCity").select2({ $("#selectCity").select2({
placeholder: "Pilih Kabupaten/Kota", placeholder: "Pilih Kabupaten/Kota",
ajax: { ajax: {
url: "/cari-kota/", url: "{{ route('cari-kota') }}",
data: { data: {
code: code, code: code,
}, },
@ -456,16 +450,16 @@
let code = $("#selectCity").val(); let code = $("#selectCity").val();
// Mengosongkan pilihan di selectDistrict dan selectVillage // Mengosongkan pilihan di selectDistrict dan selectVillage
$("#selectDristrict", "#selectVillage").empty(); $("#selectDristrict, #selectVillage").empty();
// Menghapus properti 'disable' pada selectDistrict dan selectVillage // Menghapus properti 'disable' pada selectDistrict dan selectVillage
$("#selectDistrict", "#selectVillage").prop("disabled", false); $("#selectDistrict, #selectVillage").prop("disabled", false);
// Memuat ulang data berdasarkan wilayah yang baru dipilih di selectCity // Memuat ulang data berdasarkan wilayah yang baru dipilih di selectCity
$("#selectDistrict").select2({ $("#selectDistrict").select2({
placeholder: "Pilih Kecamatan", placeholder: "Pilih Kecamatan",
ajax: { ajax: {
url: "/cari-kecamatan/", // Isi dengan URL yang sesuai url: "{{ route('cari-kecamatan') }}", // Isi dengan URL yang sesuai
data: { data: {
code: code, code: code,
}, },
@ -499,7 +493,7 @@
$("#selectVillage").select2({ $("#selectVillage").select2({
placeholder: "Pilih Kelurahan", placeholder: "Pilih Kelurahan",
ajax: { ajax: {
url: "/cari-kelurahan/", // Isi dengan URL yang sesuai url: "{{ route('cari-kelurahan') }}", // Isi dengan URL yang sesuai
data: { data: {
code: code, code: code,
}, },

View File

@ -2,6 +2,13 @@
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use App\Http\Controllers\API\Login\LoginApiController; use App\Http\Controllers\API\Login\LoginApiController;
use App\Http\Controllers\API\Refund\RefundApiController;
use App\Http\Controllers\API\Contact\ContactApiController;
use App\Http\Controllers\API\Pembeli\PembeliApiController;
use App\Http\Controllers\API\Penjual\PenjualApiController;
use App\Http\Controllers\API\Profile\ProfileApiController;
use App\Http\Controllers\API\Transaction\TransactionApiController;
use App\Http\Controllers\API\Invoice\InvoiceApiController;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
/* /*
@ -19,48 +26,97 @@ use Illuminate\Support\Facades\Auth;
// return $request->user(); // return $request->user();
// }); // });
Route::group( // Login
[ // Route::group(
'middleware' => 'api', // [
'prefix' => 'auth', // 'middleware' => 'api',
], // 'prefix' => 'auth',
function () { // ],
Route::post('login', [LoginApiController::class,'login']); // function () {
Route::get('logout', [LoginApiController::class,'logout']);
Route::get('refresh', [LoginApiController::class,'refresh']);
Route::get('me', [LoginApiController::class,'me']);
Route::post('register',[LoginApiController::class,'register']);
Route::post('hai',[LoginApiController::class,'test']);
Route::get('status',[LoginApiController::class,'check']);
},
);
//
// Route::get('me', [LoginApiController::class,'me']);
Route::middleware(['auth'])->group(function(){ // Route::get('status',[LoginApiController::class,'check']);
// },
// );
Route::prefix('profile')->group(function(){ Route::prefix('auth')->group(function () {
Route::controller(ProfileController::class)->group(function(){ Route::controller(LoginApiController::class)->group(function () {
Route::post('login', 'login')->name('auth.login'); // bisa
Route::post('test', 'test')->name('auth.test'); // bisa
Route::post('register', 'register')->name('auth.register'); // bisa
Route::get('cari-provinsi', 'searchProvince')->name('auth.cari-provinsi'); // bisa
Route::get('cari-kota', 'searchCity')->name('auth.cari-kota'); // bisa
Route::get('cari-kecamatan', 'searchDistrict')->name('auth.cari-kecamatan'); // bisa
Route::get('cari-kelurahan', 'searchVillage')->name('auth.cari-kelurahan'); // bisa
Route::post('verification-code', 'verificationCode')->name('auth.verification-code'); // bisa
});
});
}); Route::middleware(['auth:api'])->group(function () {
Route::prefix('auth')->group(function () {
Route::controller(LoginApiController::class)->group(function () {
Route::get('logout', 'logout')->name('auth.logout'); // bisa
Route::get('me', 'me')->name('auth.me'); // bisa
Route::get('refresh', 'refresh')->name('auth.refresh'); // bisa
}); // sudah
}); });
Route::middleware(['user'])->group(function(){ Route::middleware(['user'])->group(function () {
Route::prefix('user')->group(function(){ Route::prefix('user')->group(function () {
Route::controller(UserDashboardController::class)->group(function(){ Route::controller(ContactApiController::class)->group(function () {
Route::get('list-contact', 'listContact')->name('contact.list-contact');
Route::get('check-contact', 'checkContact')->name('contact.check-contact'); // Bisa
Route::get('get-list-contact', 'getListContact')->name('contact.get-list-contact'); // bisa // untuk list kontak pembeli membuat transaksi baru
Route::get('detail-contact', 'detailContact')->name('contact.detail-contact'); // Bisa
Route::delete('delete-contact', 'deleteContact')->name('contact.delete-contact'); // Bisa
Route::post('store-contact', 'storeContact')->name('contact.store-contact'); // Bisa
}); // sudah
}); Route::controller(TransactionApiController::class)->group(function () {
Route::get('get-transaction-tracking/{id}', 'getTrackingTransaction')->name('transaction.get-transaction-tracking');
Route::get('get-detail-transaction/{id}', 'getDetailTransaction')->name('transaction.get-detail-transaction');
}); // sudah
Route::controller(UserContactController::class)->group(function(){ Route::controller(RefundApiController::class)->group(function () {
Route::get('list-refund', 'listRefund')->name('refund.list-refund');
Route::get('create-refund/{id}','createRefund')->name('refund.create-refund');
Route::get('detail-refund/{id}','getDetailRefund')->name('refund.get-detail-refund');
Route::post('store-refund', 'storeRefund')->name('refund.store-refund');
}); // sudah
}); Route::controller(PembeliApiController::class)->group(function () {
Route::get('list-pembeli', 'listPembeli')->name('pembeli.list-pembeli');
Route::get('create-transaction', 'createTransaction')->name('pembeli.create-transaction');
Route::post('store-transaction', 'storeTransaction')->name('pembeli.store-transaction');
Route::post('pay-payment', 'payPayment')->name('pembeli.pay-payment');
Route::post('cancel-payment', 'cancelPayment')->name('pembeli.cancel-payment');
Route::post('pending-payment', 'pendingPayment')->name('pembeli.pending-payment');
Route::post('error-payment', 'errorPayment')->name('pembeli.error-paymennt');
Route::post('close-payment', 'closePayment')->name('pembeli.close-payment');
Route::post('finish-transaction', 'finishTransaction')->name('pembeli.finish-transaction');
Route::post('cancel-transaction', 'cancelTransaction')->name('pembeli.cancel-transaction');
}); // sudah
Route::controller(UserTransactionController::class)->group(function(){ Route::controller(PenjualApiController::class)->group(function () {
Route::get('list-penjual', 'listPenjual')->name('penjual.list-penjual');
Route::post('accept-transaction', 'acceptTransaction')->name('penjual.accept-transaction');
Route::post('reject-transaction', 'rejectTransaction')->name('penjual.reject-transaction');
Route::post('sending-order', 'sendingOrder')->name('penjual.sending-order');
Route::post('sent-order', 'sentOrder')->name('penjual.sent-order');
}); // sudah
}); Route::controller(ProfileApiController::class)->group(function () {
Route::get('get-profile', 'getProfile')->name('profile.get-profile');
Route::post('update-profile', 'updateProfile')->name('profile.update-profile');
Route::post('update-profile-password', 'updateProfilePassword')->name('profile.update-profile-password');
}); // sudah
Route::controller(UserRefundController::class)->group(function(){ Route::controller(InvoiceApiController::class)->group(function () {
Route::get('get-invoice/{id}', 'getInvoice')->name('invoice.get-invoice');
}); Route::get('export-invoice/{id}', 'exportInvoice')->name('invoice.export-invoice');
}); // sudah
}); });
}); });
}); });

View File

@ -1,7 +1,4 @@
<?php <?php
use App\Models\Refunds;
use App\Models\Transactions;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
//Admin //Admin
@ -45,26 +42,6 @@ Route::get('/', function () {
); );
}); });
Route::get('/detail_transaction', function () {
return view('admin/transaction/detail-transaction',[
'name'=>'Jilhn Haura',
'detail_transaction' => Transactions::allDetailTransactions()
]);
})->name('transaction.detail');
Route::get('/detail_refund',function() {
return view('admin/refund/detail-refund',[
'name'=>'Jilhan Haura',
"detail_refund"=> Refunds::DetailRefund()
]);
})->name('refund.detail');
Route::get('/next_detail_refund',function() {
return view('admin/refund/next-detail-refund',[
'name'=>"Jilhan Haura"
]);
});
//Index //Index
@ -165,7 +142,7 @@ Route::middleware(['auth'])->group(function(){
Route::get('user-contact/list-contact','listContact')->name('user-contact.list-contact'); Route::get('user-contact/list-contact','listContact')->name('user-contact.list-contact');
Route::post('user-contact','store')->name('user-contact.store'); Route::post('user-contact','store')->name('user-contact.store');
Route::delete('user-contact/delete','destroy')->name('user-contact.destroy'); Route::delete('user-contact/delete','destroy')->name('user-contact.destroy');
Route::get('user-contact/get-user-contact','getContact')->name('user-contact.get'); Route::get('user-contact/get-user-contact','getContact')->name('user-contact.get'); // select2
Route::get('user-contact/cek-contact','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'); Route::get('user-contact/detailContact','detailContact')->name('user-contact.detail-contact');
}); });
@ -189,7 +166,6 @@ Route::middleware(['auth'])->group(function(){
Route::put('user-pembeli/transaksi-error','onErrorTransaction')->name('user-pembeli.error'); Route::put('user-pembeli/transaksi-error','onErrorTransaction')->name('user-pembeli.error');
Route::put('user-pembeli/transaksi-close','onCloseTransaction')->name('user-pembeli.close'); Route::put('user-pembeli/transaksi-close','onCloseTransaction')->name('user-pembeli.close');
Route::put('user-pembeli/transaksi-selesai','finishTransaction')->name('user-pembeli.finish'); Route::put('user-pembeli/transaksi-selesai','finishTransaction')->name('user-pembeli.finish');
Route::put('user-pembeli/transaksi-komplain/{id}','complaintTransaction')->name('user-pembeli.complain');
}); });
// Penjual // Penjual