penambahan notifikasi api
This commit is contained in:
parent
e700439ecf
commit
ec95715177
@ -138,39 +138,20 @@ class ContactApiController extends Controller
|
|||||||
->where('pemilik_kontak', Auth::user()->email)
|
->where('pemilik_kontak', Auth::user()->email)
|
||||||
->select('contacts.id', DB::raw("CONCAT(users.nama_depan, ' ', users.nama_belakang) as nama_lengkap"));
|
->select('contacts.id', DB::raw("CONCAT(users.nama_depan, ' ', users.nama_belakang) as nama_lengkap"));
|
||||||
|
|
||||||
if ($request->has('search') && !empty($request->search['value'])) {
|
if ($request->has('search') && !empty($request->search)) {
|
||||||
$searchContact = $request->search['value'];
|
$searchContact = $request->search;
|
||||||
$subQuery->where(function ($a) use ($searchContact) {
|
$subQuery->where(function ($a) use ($searchContact) {
|
||||||
$a->whereRaw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?", ['%' . strtolower($searchContact) . '%']);
|
$a->whereRaw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?", ['%' . strtolower($searchContact) . '%']);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
$queryContact = Contact::from(DB::raw("({$subQuery->toSql()}) as tmp"))
|
$queryContact = Contact::from(DB::raw("({$subQuery->toSql()}) as tmp"))
|
||||||
->mergeBindings($subQuery->getQuery()) // Menggabungkan binding parameters
|
->mergeBindings($subQuery->getQuery())
|
||||||
->select('*')
|
->select('*')
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
if ($request->ajax()) {
|
return response()->json($queryContact);
|
||||||
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) {
|
} catch (Throwable $e) {
|
||||||
Log::error($e->getMessage());
|
Log::error($e->getMessage());
|
||||||
|
|
||||||
|
@ -6,12 +6,40 @@ use App\Http\Controllers\Controller;
|
|||||||
use App\Models\Notification;
|
use App\Models\Notification;
|
||||||
use App\Models\NotificationReceiver;
|
use App\Models\NotificationReceiver;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Pusher\Pusher;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
class NotificationApiController extends Controller
|
class NotificationApiController extends Controller
|
||||||
{
|
{
|
||||||
public function listNotification(Request $request){
|
public function listNotification(Request $request){
|
||||||
|
try {
|
||||||
|
$subQuery = Notification::join('notification_receivers','notifications.id','=','notification_receivers.notification_id')
|
||||||
|
->where('notification_receivers.receiver','=',auth()->user()->email)
|
||||||
|
->latest('notification_receivers.updated_at')
|
||||||
|
->select('notifications.id', 'notifications.title', 'notifications.teaser', 'notification_receivers.created_at', 'notification_receivers.status');
|
||||||
|
|
||||||
|
if ($request->has('search') && !empty($request->search)) {
|
||||||
|
$searchNotif = $request->search;
|
||||||
|
$subQuery->where(function ($a) use ($searchNotif) {
|
||||||
|
$a->whereRaw('LOWER(notifications.title) LIKE ?', ['%' . strtolower($searchNotif) . '%'])
|
||||||
|
->orWhereRaw('LOWER(notifications.teaser) LIKE ?', ['%' . strtolower($searchNotif) . '%']);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$queryNotif = Notification::from(DB::raw("({$subQuery->toSql()}) as tmp"))
|
||||||
|
->mergeBindings($subQuery->getQuery())
|
||||||
|
->select('*')
|
||||||
|
->get();
|
||||||
|
|
||||||
|
return response()->json($queryNotif);
|
||||||
|
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
Log::error($e->getMessage());
|
||||||
|
|
||||||
|
return response()->json(['success' => false, 'message' => 'Terjadi Kesalahan pada sisi server']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDetailNotification(Request $request){
|
public function getDetailNotification(Request $request){
|
||||||
@ -41,4 +69,34 @@ class NotificationApiController extends Controller
|
|||||||
Log::error($result);
|
Log::error($result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function updateNotificationToAdmin(Request $request){
|
||||||
|
$options = [
|
||||||
|
'cluster' => 'ap1',
|
||||||
|
'useTLS' => true,
|
||||||
|
];
|
||||||
|
|
||||||
|
$pusher = new Pusher('3e5bdc20dddd7fbc655e', 'f2274c37c616d29ff590', '1659859', $options);
|
||||||
|
|
||||||
|
$payload = [
|
||||||
|
'service' => $request->input('service')
|
||||||
|
];
|
||||||
|
|
||||||
|
$pusher->trigger('chanel-update-notifikasi-untuk-admin', 'event-update-notifikasi-untuk-admin', $payload);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateNewNotification(Request $request){
|
||||||
|
$options = [
|
||||||
|
'cluster' => 'ap1',
|
||||||
|
'useTLS' => true,
|
||||||
|
];
|
||||||
|
|
||||||
|
$pusher = new Pusher('3e5bdc20dddd7fbc655e', 'f2274c37c616d29ff590', '1659859', $options);
|
||||||
|
|
||||||
|
$payload = [
|
||||||
|
'receivers' => $request->input('receiver'),
|
||||||
|
];
|
||||||
|
|
||||||
|
$pusher->trigger('chanel-update-notifikasi', 'event-update-notifikasi', $payload);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,11 @@ use Illuminate\Http\Request;
|
|||||||
use Illuminate\Support\Facades\DB;
|
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 App\Models\Notification;
|
||||||
|
use App\Models\NotificationReceiver;
|
||||||
use Illuminate\Support\Facades\Http;
|
use Illuminate\Support\Facades\Http;
|
||||||
use App\Models\TransactionDescription;
|
use App\Models\TransactionDescription;
|
||||||
|
use Pusher\Pusher;
|
||||||
use Yajra\DataTables\Facades\DataTables;
|
use Yajra\DataTables\Facades\DataTables;
|
||||||
|
|
||||||
class PembeliApiController extends Controller
|
class PembeliApiController extends Controller
|
||||||
@ -207,6 +210,8 @@ class PembeliApiController extends Controller
|
|||||||
|
|
||||||
public function finishTransaction(Request $request)
|
public function finishTransaction(Request $request)
|
||||||
{
|
{
|
||||||
|
$transactionDetail = Transaction::where('id', $request->id)->first();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
|
|
||||||
@ -224,11 +229,25 @@ class PembeliApiController extends Controller
|
|||||||
'deskripsi' => 'Pesanan telah diselesaikan oleh ' . auth()->user()->nama_depan . '.',
|
'deskripsi' => 'Pesanan telah diselesaikan oleh ' . auth()->user()->nama_depan . '.',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$url = route('user-transaction.show', ['id' => $transactionDetail->id]);
|
||||||
|
|
||||||
|
$notif = Notification::create([
|
||||||
|
'title' => 'Transaksi Selesai',
|
||||||
|
'content' => auth()->user()->nama_depan.' telah menyelesaikan transaksi. Silahkan terima uang anda. <a href="'.$url.'">Klik disini</a> untuk langsung ke detail transaksi.',
|
||||||
|
'teaser' => auth()->user()->nama_depan.' telah...'
|
||||||
|
]);
|
||||||
|
|
||||||
|
NotificationReceiver::create([
|
||||||
|
'receiver' => $transactionDetail->penjual,
|
||||||
|
'notification_id' => $notif->id
|
||||||
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Pesanan telah diselesaikan oleh ' . auth()->user()->nama_depan . '.',
|
'message' => 'Pesanan telah diselesaikan oleh ' . auth()->user()->nama_depan . '.',
|
||||||
|
'receiver' => $transactionDetail->penjual
|
||||||
]);
|
]);
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
@ -247,6 +266,8 @@ class PembeliApiController extends Controller
|
|||||||
|
|
||||||
$auth = base64_encode(env('MIDTRANS_SERVER_KEY'));
|
$auth = base64_encode(env('MIDTRANS_SERVER_KEY'));
|
||||||
|
|
||||||
|
$transactionDetail = Transaction::where('id', $request->id)->first();
|
||||||
|
|
||||||
$response = Http::withOptions([
|
$response = Http::withOptions([
|
||||||
'verify' => false,
|
'verify' => false,
|
||||||
])
|
])
|
||||||
@ -301,11 +322,26 @@ class PembeliApiController extends Controller
|
|||||||
'user' => auth()->user()->email,
|
'user' => auth()->user()->email,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$url = route('user-transaction.show', ['id' => $transactionDetail->id]);
|
||||||
|
|
||||||
|
$notif = Notification::create([
|
||||||
|
'title' => 'Pembayaran Sukses',
|
||||||
|
'content' => auth()->user()->nama_depan.' telah membayar transaksi. Silahkan proses transaksi ini jika memang dituju kepada anda. <a href="'.$url.'">Klik disini</a> untuk langsung ke detail transaksi.',
|
||||||
|
'teaser' => auth()->user()->nama_depan.' telah...'
|
||||||
|
]);
|
||||||
|
|
||||||
|
NotificationReceiver::create([
|
||||||
|
'receiver' => $transactionDetail->penjual,
|
||||||
|
'notification_id' => $notif->id
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Pembayaran sukses',
|
'message' => 'Pembayaran sukses',
|
||||||
|
'receiver' => $transactionDetail->penjual
|
||||||
]);
|
]);
|
||||||
} elseif ($transaction == 'challenge') {
|
} elseif ($transaction == 'challenge') {
|
||||||
TransactionDescription::create([
|
TransactionDescription::create([
|
||||||
@ -318,6 +354,19 @@ class PembeliApiController extends Controller
|
|||||||
'keterangan' => $result['status_message'],
|
'keterangan' => $result['status_message'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$options = [
|
||||||
|
'cluster' => 'ap1',
|
||||||
|
'useTLS' => true,
|
||||||
|
];
|
||||||
|
|
||||||
|
$pusher = new Pusher('3e5bdc20dddd7fbc655e', 'f2274c37c616d29ff590', '1659859', $options);
|
||||||
|
|
||||||
|
$payload = [
|
||||||
|
'service' => 'Transaksi'
|
||||||
|
];
|
||||||
|
|
||||||
|
$pusher->trigger('chanel-update-notifikasi-untuk-admin', 'event-update-notifikasi-untuk-admin', $payload);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
@ -463,11 +512,25 @@ class PembeliApiController extends Controller
|
|||||||
'deskripsi' => 'Transaksi dibatalkan oleh ' . auth()->user()->nama_depan . '. Alasan : ' . $request->input('complaint'),
|
'deskripsi' => 'Transaksi dibatalkan oleh ' . auth()->user()->nama_depan . '. Alasan : ' . $request->input('complaint'),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$url = route('user-transaction.show', ['id' => $transaction->id]);
|
||||||
|
|
||||||
|
$notif = Notification::create([
|
||||||
|
'title' => 'Transaksi Dibatalkan',
|
||||||
|
'content' => auth()->user()->nama_depan.' telah membatalkan transaksi. <a href="'.$url.'">Klik disini</a> untuk langsung ke detail transaksi.',
|
||||||
|
'teaser' => auth()->user()->nama_depan.' telah...'
|
||||||
|
]);
|
||||||
|
|
||||||
|
NotificationReceiver::create([
|
||||||
|
'receiver' => $transaction->penjual,
|
||||||
|
'notification_id' => $notif->id
|
||||||
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Transaksi telah dibatalkan.',
|
'message' => 'Transaksi telah dibatalkan.',
|
||||||
|
'receiver' => $transaction->penjual
|
||||||
]);
|
]);
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
@ -741,8 +804,8 @@ class PembeliApiController extends Controller
|
|||||||
'transactions.token'
|
'transactions.token'
|
||||||
);
|
);
|
||||||
|
|
||||||
if($request->has('search') && !empty($request->search['value'])){
|
if($request->has('search') && !empty($request->search)){
|
||||||
$searchPembeli = $request->search['value'];
|
$searchPembeli = $request->search;
|
||||||
if(!is_numeric($searchPembeli)){
|
if(!is_numeric($searchPembeli)){
|
||||||
$subQuery->where(function($a) use ($searchPembeli){
|
$subQuery->where(function($a) use ($searchPembeli){
|
||||||
$a->whereRaw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?",['%'.strtolower($searchPembeli).'%'])
|
$a->whereRaw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?",['%'.strtolower($searchPembeli).'%'])
|
||||||
@ -761,71 +824,8 @@ class PembeliApiController extends Controller
|
|||||||
->select('*')
|
->select('*')
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
if ($request->ajax()) {
|
return response()->json($queryPembeli);
|
||||||
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){
|
}catch(Throwable $e){
|
||||||
Log::error($e->getMessage());
|
Log::error($e->getMessage());
|
||||||
|
|
||||||
|
@ -9,6 +9,8 @@ use Illuminate\Http\Request;
|
|||||||
use Illuminate\Support\Facades\DB;
|
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 App\Models\Notification;
|
||||||
|
use App\Models\NotificationReceiver;
|
||||||
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;
|
||||||
@ -18,6 +20,8 @@ class PenjualApiController extends Controller
|
|||||||
{
|
{
|
||||||
public function acceptTransaction(Request $request)
|
public function acceptTransaction(Request $request)
|
||||||
{
|
{
|
||||||
|
$transactionDetail = Transaction::where('id', $request->id)->first();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
|
|
||||||
@ -34,11 +38,25 @@ class PenjualApiController extends Controller
|
|||||||
'deskripsi' => 'Transaksi telah diterima oleh ' . auth()->user()->nama_depan,
|
'deskripsi' => 'Transaksi telah diterima oleh ' . auth()->user()->nama_depan,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$url = route('user-transaction.show', ['id' => $transactionDetail->id]);
|
||||||
|
|
||||||
|
$notif = Notification::create([
|
||||||
|
'title' => 'Transaksi Diproses',
|
||||||
|
'content' => auth()->user()->nama_depan.' telah menerima dan memproses transaksi. <a href="'.$url.'">Klik disini</a> untuk langsung ke detail transaksi.',
|
||||||
|
'teaser' => auth()->user()->nama_depan.' telah...'
|
||||||
|
]);
|
||||||
|
|
||||||
|
NotificationReceiver::create([
|
||||||
|
'receiver' => $transactionDetail->pembeli,
|
||||||
|
'notification_id' => $notif->id
|
||||||
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Transaksi telah diterima. Siapkan pesanan untuk dikirim ke penjual.',
|
'message' => 'Transaksi telah diterima. Siapkan pesanan untuk dikirim ke penjual.',
|
||||||
|
'receiver' => $transactionDetail->pembeli
|
||||||
]);
|
]);
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
@ -103,11 +121,25 @@ class PenjualApiController extends Controller
|
|||||||
'deskripsi' => 'Transaksi ditolak ' . auth()->user()->nama_depan . ', uang akan dikembalikan ke pembeli. Alasan : ' . $request->input('complaint'),
|
'deskripsi' => 'Transaksi ditolak ' . auth()->user()->nama_depan . ', uang akan dikembalikan ke pembeli. Alasan : ' . $request->input('complaint'),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$url = route('user-transaction.show', ['id' => $transaction->id]);
|
||||||
|
|
||||||
|
$notif = Notification::create([
|
||||||
|
'title' => 'Transaksi Diproses',
|
||||||
|
'content' => auth()->user()->nama_depan.' telah menolak transaksi.<a href="'.$url.'">Klik disini</a> untuk langsung ke detail transaksi.',
|
||||||
|
'teaser' => auth()->user()->nama_depan.' telah...'
|
||||||
|
]);
|
||||||
|
|
||||||
|
NotificationReceiver::create([
|
||||||
|
'receiver' => $transaction->pembeli,
|
||||||
|
'notification_id' => $notif->id
|
||||||
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Transaksi telah ditolak. Uang akan dikirimkan ke pembeli.',
|
'message' => 'Transaksi telah ditolak. Uang akan dikirimkan ke pembeli.',
|
||||||
|
'receiver' => $transaction->pembeli
|
||||||
]);
|
]);
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
@ -167,6 +199,8 @@ class PenjualApiController extends Controller
|
|||||||
|
|
||||||
public function sentOrder(Request $request)
|
public function sentOrder(Request $request)
|
||||||
{
|
{
|
||||||
|
$transactionDetail = Transaction::where('id', $request->transaction_id)->first();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
|
|
||||||
@ -194,11 +228,25 @@ class PenjualApiController extends Controller
|
|||||||
'bukti_foto' => $bukti_foto,
|
'bukti_foto' => $bukti_foto,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$url = route('user-transaction.show', ['id' => $transactionDetail->id]);
|
||||||
|
|
||||||
|
$notif = Notification::create([
|
||||||
|
'title' => 'Transaksi Sudah Tiba',
|
||||||
|
'content' => 'Transaksi sudah tiba dan silahkan periksa terlebih dahulu sebelum menyelesaikan transaksi atau mengajukan refund. <a href="'.$url.'">Klik disini</a> untuk langsung ke detail transaksi.',
|
||||||
|
'teaser' => 'Transaksi sudah tiba dan silahkan per...',
|
||||||
|
]);
|
||||||
|
|
||||||
|
NotificationReceiver::create([
|
||||||
|
'receiver' => $transactionDetail->pembeli,
|
||||||
|
'notification_id' => $notif->id
|
||||||
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Pesanan telah sampai di tempat pembeli.',
|
'message' => 'Pesanan telah sampai di tempat pembeli.',
|
||||||
|
'receiver' => $transactionDetail->pembeli
|
||||||
]);
|
]);
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
@ -225,8 +273,8 @@ class PenjualApiController extends Controller
|
|||||||
->where('transactions.penjual', auth()->user()->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');
|
->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'])) {
|
if ($request->has('search') && !empty($request->search)) {
|
||||||
$searchPenjual = $request->search['value'];
|
$searchPenjual = $request->search;
|
||||||
if (!is_numeric($searchPenjual)) {
|
if (!is_numeric($searchPenjual)) {
|
||||||
$subQuery->where(function ($a) use ($searchPenjual) {
|
$subQuery->where(function ($a) use ($searchPenjual) {
|
||||||
$a->whereRaw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?", ['%' . strtolower($searchPenjual) . '%'])
|
$a->whereRaw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?", ['%' . strtolower($searchPenjual) . '%'])
|
||||||
@ -248,90 +296,8 @@ class PenjualApiController extends Controller
|
|||||||
->select('*')
|
->select('*')
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
if ($request->ajax()) {
|
return response()->json($queryPenjual);
|
||||||
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) {
|
} catch (Throwable $e) {
|
||||||
Log::error($e->getMessage());
|
Log::error($e->getMessage());
|
||||||
|
|
||||||
|
@ -138,29 +138,8 @@ class RefundApiController extends Controller
|
|||||||
->select('*')
|
->select('*')
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
if ($request->ajax()) {
|
return response()->json($queryRefund);
|
||||||
return DataTables::of($queryRefund)
|
|
||||||
->addIndexColumn()
|
|
||||||
->addColumn('action', function ($row) {
|
|
||||||
$url = route('user-refund.show', ['id' => $row->id]);
|
|
||||||
$html_code = '
|
|
||||||
<div class="btn-group">
|
|
||||||
<button type="button" class="btn btn-primary dropdown-toggle"
|
|
||||||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
||||||
....
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<ul class="dropdown-menu">
|
|
||||||
<li><a class="dropdown-item"
|
|
||||||
href="'.$url.'">Detail</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>';
|
|
||||||
return $html_code;
|
|
||||||
})
|
|
||||||
->rawColumns(['action'])
|
|
||||||
->make(true);
|
|
||||||
}
|
|
||||||
}catch(Throwable $e){
|
}catch(Throwable $e){
|
||||||
Log::error($e->getMessage());
|
Log::error($e->getMessage());
|
||||||
|
|
||||||
|
@ -18,11 +18,11 @@ class InvoiceController extends Controller
|
|||||||
|
|
||||||
public function exportInvoice(Request $request)
|
public function exportInvoice(Request $request)
|
||||||
{
|
{
|
||||||
$transaction = Transaction::findOrFail($request->id);
|
// $transaction = Transaction::findOrFail($request->id);
|
||||||
$pdf = Pdf::loadView('invoice.export-invoice',compact('transaction'))->setPaper('A4','Portrait');
|
// $pdf = Pdf::loadView('invoice.export-invoice',compact('transaction'))->setPaper('A4','Portrait');
|
||||||
return $pdf->download("invoice-".uniqid().".pdf");
|
// return $pdf->download("invoice-".uniqid().".pdf");
|
||||||
// return view('invoice.export-invoice', [
|
return view('invoice.export-invoice', [
|
||||||
// 'transaction' => Transaction::findOrFail($request->id),
|
'transaction' => Transaction::findOrFail($request->id),
|
||||||
// ]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ class LoginController extends Controller
|
|||||||
{
|
{
|
||||||
public function login()
|
public function login()
|
||||||
{
|
{
|
||||||
return view('index');
|
return view('login.index');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -258,9 +258,11 @@ class PembeliController extends Controller
|
|||||||
'deskripsi' => 'Pesanan telah diselesaikan oleh ' . auth()->user()->nama_depan . '. Uang akan dikirim ke penjual.',
|
'deskripsi' => 'Pesanan telah diselesaikan oleh ' . auth()->user()->nama_depan . '. Uang akan dikirim ke penjual.',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$url = route('user-transaction.show', ['id' => $transactionDetail->id]);
|
||||||
|
|
||||||
$notif = Notification::create([
|
$notif = Notification::create([
|
||||||
'title' => 'Transaksi Selesai',
|
'title' => 'Transaksi Selesai',
|
||||||
'content' => auth()->user()->nama_depan.' telah menyelesaikan transaksi. Silahkan terima uang anda.',
|
'content' => auth()->user()->nama_depan.' telah menyelesaikan transaksi. Silahkan terima uang anda. <a href="'.$url.'">Klik disini</a> untuk langsung ke detail transaksi.',
|
||||||
'teaser' => auth()->user()->nama_depan.' telah...'
|
'teaser' => auth()->user()->nama_depan.' telah...'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
@ -26,10 +26,19 @@ input[type="text"] {
|
|||||||
outline: 0;
|
outline: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
select {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
video {
|
video {
|
||||||
background: primary;
|
background: primary;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.flex {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
.container {
|
.container {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -80,6 +89,11 @@ form.sign-up-form {
|
|||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.form_3 {
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
form.sign-in-form {
|
form.sign-in-form {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: start;
|
align-items: start;
|
||||||
@ -120,6 +134,10 @@ form p {
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.left {
|
||||||
|
margin-left: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
.input {
|
.input {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 55px;
|
height: 55px;
|
||||||
@ -152,7 +170,7 @@ form p {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.up {
|
.up {
|
||||||
margin-top: 3%;
|
margin-top: 17px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-field-signin-flex input,
|
.input-field-signin-flex input,
|
||||||
@ -180,6 +198,7 @@ form p {
|
|||||||
.input-field {
|
.input-field {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 55px;
|
height: 55px;
|
||||||
|
padding: 0rem 1.5rem;
|
||||||
background-color: #f0f0f0;
|
background-color: #f0f0f0;
|
||||||
border-radius: 1rem;
|
border-radius: 1rem;
|
||||||
display: grid;
|
display: grid;
|
||||||
@ -242,7 +261,7 @@ form p {
|
|||||||
color: #fff;
|
color: #fff;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
margin: 10px 0;
|
margin: 20px 0;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: 0.25s;
|
transition: 0.25s;
|
||||||
}
|
}
|
||||||
@ -254,13 +273,11 @@ form p {
|
|||||||
|
|
||||||
.btn-otp,
|
.btn-otp,
|
||||||
.btn-foto {
|
.btn-foto {
|
||||||
/* width: fit-content; */
|
width: fit-content;
|
||||||
width: 110px;
|
height: fit-content;
|
||||||
/* height: fit-content; */
|
margin-left: 12px;
|
||||||
height: 53px;
|
|
||||||
margin-left: 2%;
|
|
||||||
font-size: 0.7rem;
|
font-size: 0.7rem;
|
||||||
padding: 0.85rem 0.9rem;
|
padding: 0.7rem 0.9rem;
|
||||||
border: 1px solid #900c3e;
|
border: 1px solid #900c3e;
|
||||||
color: #900c3e;
|
color: #900c3e;
|
||||||
background: none;
|
background: none;
|
||||||
@ -411,15 +428,15 @@ form p {
|
|||||||
pointer-events: all;
|
pointer-events: all;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 1100px) {
|
@media (max-width: 1150px) {
|
||||||
.container {
|
.container {
|
||||||
min-height: 1000px;
|
min-height: 1100px;
|
||||||
height: 100vh;
|
/* height: 100vh; */
|
||||||
}
|
}
|
||||||
|
|
||||||
form.sign-in-form {
|
/* form.sign-in-form {
|
||||||
justify-content: start;
|
justify-content: start;
|
||||||
}
|
} */
|
||||||
|
|
||||||
.header {
|
.header {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
@ -429,6 +446,10 @@ form p {
|
|||||||
padding: 0 1.2rem;
|
padding: 0 1.2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header ul li {
|
||||||
|
width: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
.signin-signup {
|
.signin-signup {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
top: 95%;
|
top: 95%;
|
||||||
@ -534,6 +555,10 @@ form p {
|
|||||||
width: 90%;
|
width: 90%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header ul li {
|
||||||
|
width: 90px;
|
||||||
|
}
|
||||||
|
|
||||||
.image {
|
.image {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
@ -567,10 +592,13 @@ form p {
|
|||||||
.header {
|
.header {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
width: 100%;
|
||||||
|
margin-right: 10%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header ul {
|
.header ul {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header ul li {
|
.header ul li {
|
||||||
@ -621,6 +649,10 @@ form p {
|
|||||||
background: var(--primary);
|
background: var(--primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.form_wrap {
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
.form_wrap h2 {
|
.form_wrap h2 {
|
||||||
color: var(--header-clr);
|
color: var(--header-clr);
|
||||||
text-align: start;
|
text-align: start;
|
||||||
@ -659,7 +691,7 @@ form p {
|
|||||||
|
|
||||||
.btns_wrap {
|
.btns_wrap {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 4% auto;
|
margin: 24px auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btns_wrap .common_btns {
|
.btns_wrap .common_btns {
|
||||||
@ -671,13 +703,8 @@ form p {
|
|||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btns_wrap .common_btns.form_2_btns {
|
|
||||||
width: 190%;
|
|
||||||
margin-top: 10%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btns_wrap .common_btns.form_3_btns {
|
.btns_wrap .common_btns.form_3_btns {
|
||||||
width: 60%;
|
width: 100%;
|
||||||
margin-top: 2%;
|
margin-top: 2%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -842,12 +869,13 @@ form p {
|
|||||||
color: #fff !important;
|
color: #fff !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.gender-select-menu,
|
/* .gender-select-menu,
|
||||||
.select-menu {
|
.select-menu {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
}
|
} */
|
||||||
.gender-select-menu .gender-select-input,
|
|
||||||
|
/* .gender-select-menu .gender-select-input,
|
||||||
.select-menu .select-btn {
|
.select-menu .select-btn {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 55px;
|
height: 55px;
|
||||||
@ -860,14 +888,17 @@ form p {
|
|||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
position: relative;
|
position: relative;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
} */
|
||||||
.select-btn i {
|
|
||||||
|
/* .select-btn i {
|
||||||
font-size: 25px;
|
font-size: 25px;
|
||||||
transition: 0.3s;
|
transition: 0.3s;
|
||||||
}
|
} */
|
||||||
|
|
||||||
.gender-select,
|
.gender-select,
|
||||||
.sBtn-text {
|
.sBtn-text {
|
||||||
|
width: 100%;
|
||||||
|
height: 55px;
|
||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
color: #aaa;
|
color: #aaa;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
@ -948,8 +979,10 @@ form p {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.slide img {
|
.slide img {
|
||||||
width: 100%;
|
height: 30vh;
|
||||||
height: auto;
|
border-radius: 1rem;
|
||||||
|
/* width: 100%;
|
||||||
|
height: auto; */
|
||||||
}
|
}
|
||||||
|
|
||||||
.dots {
|
.dots {
|
||||||
|
BIN
public/assets/images/logo-oki.webp
Normal file
BIN
public/assets/images/logo-oki.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 32 KiB |
@ -76,7 +76,7 @@ form_2_back_btn.addEventListener("click", function () {
|
|||||||
|
|
||||||
form_2_next_btn.addEventListener("click", function () {
|
form_2_next_btn.addEventListener("click", function () {
|
||||||
form_2.style.display = "none";
|
form_2.style.display = "none";
|
||||||
form_3.style.display = "block";
|
form_3.style.display = "flex";
|
||||||
|
|
||||||
form_3_btns.style.display = "flex";
|
form_3_btns.style.display = "flex";
|
||||||
form_2_btns.style.display = "none";
|
form_2_btns.style.display = "none";
|
||||||
@ -86,7 +86,7 @@ form_2_next_btn.addEventListener("click", function () {
|
|||||||
|
|
||||||
form_3_next_btn.addEventListener("click", function () {
|
form_3_next_btn.addEventListener("click", function () {
|
||||||
form_3.style.display = "none";
|
form_3.style.display = "none";
|
||||||
form_4.style.display = "block";
|
form_4.style.display = "flex";
|
||||||
|
|
||||||
form_4_btns.style.display = "flex";
|
form_4_btns.style.display = "flex";
|
||||||
form_3_btns.style.display = "none";
|
form_3_btns.style.display = "none";
|
||||||
@ -105,7 +105,7 @@ form_3_back_btn.addEventListener("click", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
form_4_back_btn.addEventListener("click", function () {
|
form_4_back_btn.addEventListener("click", function () {
|
||||||
form_3.style.display = "block";
|
form_3.style.display = "flex";
|
||||||
form_4.style.display = "none";
|
form_4.style.display = "none";
|
||||||
|
|
||||||
form_4_btns.style.display = "none";
|
form_4_btns.style.display = "none";
|
||||||
@ -310,19 +310,6 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||||||
selectImageEkyc.style.display = "none";
|
selectImageEkyc.style.display = "none";
|
||||||
});
|
});
|
||||||
|
|
||||||
function dataURLtoBlob(dataURL) {
|
|
||||||
const byteString = atob(dataURL.split(",")[1]);
|
|
||||||
const mimeString = dataURL.split(",")[0].split(":")[1].split(";")[0];
|
|
||||||
const ab = new ArrayBuffer(byteString.length);
|
|
||||||
const ia = new Uint8Array(ab);
|
|
||||||
|
|
||||||
for (let i = 0; i < byteString.length; i++) {
|
|
||||||
ia[i] = byteString.charCodeAt(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Blob([ab], { type: mimeString });
|
|
||||||
}
|
|
||||||
|
|
||||||
captureButtonKtp.addEventListener("click", function () {
|
captureButtonKtp.addEventListener("click", function () {
|
||||||
if (ktpStream) {
|
if (ktpStream) {
|
||||||
const canvas = document.createElement("canvas");
|
const canvas = document.createElement("canvas");
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<section class="section">
|
<section class="section">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-4 col-md-12 col-sm-12">
|
<div class="col-lg-4 col-md-12 col-sm-12" style="height: 100%;">
|
||||||
<div class="card card-statistic-2">
|
<div class="card card-statistic-2">
|
||||||
<div class="card-stats">
|
<div class="card-stats">
|
||||||
<div class="card-stats-title">
|
<div class="card-stats-title">
|
||||||
@ -23,6 +23,8 @@
|
|||||||
<div class="card-stats-item-count" id="countProcessed">{{ $countProcessed }}</div>
|
<div class="card-stats-item-count" id="countProcessed">{{ $countProcessed }}</div>
|
||||||
<div class="card-stats-item-label">Diproses</div>
|
<div class="card-stats-item-label">Diproses</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-items mt-2">
|
||||||
<div class="card-stats-item">
|
<div class="card-stats-item">
|
||||||
<div class="card-stats-item-count" id="countIndicated">{{ $countIndicated }}</div>
|
<div class="card-stats-item-count" id="countIndicated">{{ $countIndicated }}</div>
|
||||||
<div class="card-stats-item-label">Diterindikasi</div>
|
<div class="card-stats-item-label">Diterindikasi</div>
|
||||||
@ -125,7 +127,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-8">
|
<div class="col-lg-8">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no" name="viewport">
|
<meta content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no" name="viewport">
|
||||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||||
<title>REKBER</title>
|
<title>REKBER</title>
|
||||||
|
<link rel="shortcut icon" href="{{ asset('assets/images/logo-oki.webp') }}">
|
||||||
|
|
||||||
@include('layouts.css')
|
@include('layouts.css')
|
||||||
|
|
||||||
|
@ -4,7 +4,8 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>REKBER | Homepage</title>
|
<link rel="shortcut icon" href="{{ asset('assets/images/logo-oki.webp') }}">
|
||||||
|
<title>REKBER | Login</title>
|
||||||
<!-- icon font awesome -->
|
<!-- icon font awesome -->
|
||||||
<script src="https://kit.fontawesome.com/64d58efce2.js" crossorigin="anonymous"></script>
|
<script src="https://kit.fontawesome.com/64d58efce2.js" crossorigin="anonymous"></script>
|
||||||
<!-- css -->
|
<!-- css -->
|
||||||
@ -55,14 +56,14 @@
|
|||||||
color: #fff !important;
|
color: #fff !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#foto-preview-ktp,
|
/* #foto-preview-ktp,
|
||||||
#foto-preview-ekyc {
|
#foto-preview-ekyc {
|
||||||
width: 400px
|
width: 400px;
|
||||||
}
|
} */
|
||||||
|
|
||||||
.image-holder-ktp,
|
.image-holder-ktp,
|
||||||
.image-holder-ekyc {
|
.image-holder-ekyc {
|
||||||
width: 400px
|
width: 400px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
@ -88,7 +89,7 @@
|
|||||||
<button type="button" class="btn-otp solid" id="cekAkun">Cek Akun</button>
|
<button type="button" class="btn-otp solid" id="cekAkun">Cek Akun</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="input-field">
|
<div class="input-field-signin-flex">
|
||||||
<i class="fas fa-unlock-alt" aria-hidden="true"></i>
|
<i class="fas fa-unlock-alt" aria-hidden="true"></i>
|
||||||
<input type="password" class="otp-input" placeholder="Password" name="password" required>
|
<input type="password" class="otp-input" placeholder="Password" name="password" required>
|
||||||
</div>
|
</div>
|
||||||
@ -101,7 +102,7 @@
|
|||||||
method="POST">
|
method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
<h2 class="title">Daftar</h2>
|
<h2 class="title">Daftar</h2>
|
||||||
<p style="width: 90%">
|
<p>
|
||||||
Selamat datang kembali, silakan isi form login di bawah ini untuk masuk ke akun anda.
|
Selamat datang kembali, silakan isi form login di bawah ini untuk masuk ke akun anda.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@ -149,45 +150,42 @@
|
|||||||
name="nama_belakang">
|
name="nama_belakang">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-field up">
|
<div class="input-field-signin-flex up">
|
||||||
<i class="fa fa-id-card" aria-hidden="true"></i>
|
<i class="fa fa-id-card" aria-hidden="true"></i>
|
||||||
<input type="text" placeholder="NIK" class="email-input" name="nik"
|
<input type="text" placeholder="NIK" class="email-input" name="nik"
|
||||||
maxlength="16"
|
maxlength="16"
|
||||||
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 16);" />
|
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 16);" />
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-input-btn">
|
<div class="flex-input-btn">
|
||||||
<div class="input">
|
<div class="input-field-signin-flex">
|
||||||
<i class="fa fa-envelope" aria-hidden="true"></i>
|
<i class="fa fa-envelope" aria-hidden="true"></i>
|
||||||
<input type="email" placeholder="Email" class="email-input" name="new_email"
|
<input type="email" placeholder="Email" class="email-input" name="new_email"
|
||||||
id="newEmail">
|
id="newEmail">
|
||||||
</div>
|
</div>
|
||||||
<button id="verifikasiEmail" class="btn-otp" type="button"
|
<button id="verifikasiEmail" class="btn-otp solid up" type="button"
|
||||||
disabled=true>Verifikasi</button>
|
disabled="true">Verifikasi</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-field up">
|
<div class="input-field-signin-flex up">
|
||||||
<i class="fa fa-ellipsis-h" aria-hidden="true"></i>
|
<i class="fa fa-ellipsis-h" aria-hidden="true"></i>
|
||||||
<input type="text" class="telp-input-signup"
|
<input type="text" class="telp-input-signup"
|
||||||
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 6);"
|
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 6);"
|
||||||
placeholder="Kode Verifikasi Email" name="email_verification"
|
placeholder="Kode Verifikasi Email" name="email_verification"
|
||||||
id="emailVerification">
|
id="emailVerification">
|
||||||
</div>
|
</div>
|
||||||
<div class="input-field up">
|
<div class="input-field-signin-flex up">
|
||||||
<i class="fa fa-phone" aria-hidden="true"></i>
|
<i class="fa fa-phone" aria-hidden="true"></i>
|
||||||
<input type="text" class="telp-input-signup" maxlength="13"
|
<input type="text" class="telp-input-signup" maxlength="13"
|
||||||
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 15);"
|
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 15);"
|
||||||
placeholder="Nomer Telepon. cth: 08xxx" name="nohp">
|
placeholder="Nomer Telepon. cth: 08xxx" name="nohp">
|
||||||
</div>
|
</div>
|
||||||
<div style="display: flex;">
|
<div style="display: flex;">
|
||||||
<div class="input-field-signup-flex up gender-select-menu" style="width: 190%">
|
<div class="input-field">
|
||||||
<div class="gender-select-input" style="width: 100%; padding-left: 1rem;">
|
<select id="gender-select" name="gender">
|
||||||
<select style="width: 190%;" class="gender-select" id="gender-select"
|
<option value="Laki-laki">Laki-laki</option>
|
||||||
name="gender">
|
<option value="Perempuan">Perempuan</option>
|
||||||
<option value="Laki-laki">Laki-laki</option>
|
</select>
|
||||||
<option value="Perempuan">Perempuan</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="input-field-signup-flex up" style="margin-left: 3%">
|
<div class="input-field-signup-flex left">
|
||||||
<i class="fa fa-calendar" aria-hidden="true"></i>
|
<i class="fa fa-calendar" aria-hidden="true"></i>
|
||||||
<input type="date" placeholder="Tanggal Lahir" name="tanggal_lahir" />
|
<input type="date" placeholder="Tanggal Lahir" name="tanggal_lahir" />
|
||||||
</div>
|
</div>
|
||||||
@ -198,44 +196,38 @@
|
|||||||
|
|
||||||
<!-- ======= FORM ADDRESS ======= -->
|
<!-- ======= FORM ADDRESS ======= -->
|
||||||
<div class="form_2 data_info" style="display: none;">
|
<div class="form_2 data_info" style="display: none;">
|
||||||
<div class="input-field" style="width: 190%; padding: 0rem 1rem;">
|
<div class="input-field">
|
||||||
<select id="selectProvince" data-url="{{ route('cari-provinsi') }}"
|
<select id="selectProvince" data-url="{{ route('cari-provinsi') }}"
|
||||||
style="width: 100%; border: 1px solid transparent; " class="input-field"
|
style="width: 100%;" class="input-field" aria-label="Default select example">
|
||||||
aria-label="Default select example">
|
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class='mb-2'>
|
<div class='mb-2'>
|
||||||
<div class="input-field" style="width: 190%; padding: 0rem 1rem;">
|
<div class="input-field">
|
||||||
<select id="selectCity"
|
<select id="selectCity" style="width: 100%;" class="input-field"
|
||||||
style="width: 100%; border: 1px solid transparent; margin-top: 0; outline: none;"
|
aria-label="Default select example">
|
||||||
class="input-field" aria-label="Default select example">
|
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class='mb-2'>
|
<div class='mb-2'>
|
||||||
<div class="input-field" style="width: 190%; padding: 0rem 1rem;">
|
<div class="input-field">
|
||||||
<select id="selectDistrict"
|
<select id="selectDistrict" style="width: 100%;" class="input-field"
|
||||||
style="width: 100%; border: 1px solid transparent; margin-top: 0; outline: none;"
|
aria-label="Default select example">
|
||||||
class="input-field" aria-label="Default select example">
|
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class='mb-2'>
|
<div class='mb-2'>
|
||||||
<div class="input-field" style="width: 190%; padding: 0rem 1rem;">
|
<div class="input-field">
|
||||||
<select id="selectVillage"
|
<select id="selectVillage" style="width: 100%;" class="input-field"
|
||||||
style="width: 100%; border: 1px solid transparent; margin-top: 0; outline: none;"
|
aria-label="Default select example" name="village_code">
|
||||||
class="input-field" aria-label="Default select example"
|
|
||||||
name="village_code">
|
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<input type="text" class="input-field" id="alamat" name="alamat"
|
<input type="text" class="input-field" id="alamat" name="alamat"
|
||||||
placeholder="Alamat lengkap Anda" cols="50" rows="4"
|
placeholder="Alamat lengkap Anda" cols="50" rows="4">
|
||||||
style="width: 190%; padding: 0rem 1rem;">
|
|
||||||
</div>
|
</div>
|
||||||
<!-- ======= END FORM ADDRESS ======= -->
|
<!-- ======= END FORM ADDRESS ======= -->
|
||||||
|
|
||||||
@ -244,8 +236,8 @@
|
|||||||
<div class="slider-container">
|
<div class="slider-container">
|
||||||
<div class="slider">
|
<div class="slider">
|
||||||
<div class="slide fade">
|
<div class="slide fade">
|
||||||
<div style="display: flex; flex-direction: column; align-items: center;">
|
<div style="display: flex; flex-direction: column; align-items: center">
|
||||||
<h3 style="">Foto KTP Anda</h3>
|
<h3>Foto KTP Anda</h3>
|
||||||
<div class="image-holder-ktp">
|
<div class="image-holder-ktp">
|
||||||
<img src="{{ asset('assets/images/dashboard/Asset 3.png') }}"
|
<img src="{{ asset('assets/images/dashboard/Asset 3.png') }}"
|
||||||
alt="logo ambil gambar" id="imageHolderKtp">
|
alt="logo ambil gambar" id="imageHolderKtp">
|
||||||
@ -254,7 +246,7 @@
|
|||||||
<div id="foto-preview-ktp"></div>
|
<div id="foto-preview-ktp"></div>
|
||||||
<input type="hidden" id="fotoKtp" name="ktp"
|
<input type="hidden" id="fotoKtp" name="ktp"
|
||||||
style="display: none;">
|
style="display: none;">
|
||||||
<div style="display: flex; margin-top: 1rem; gap:10px;">
|
<div style="display: flex; margin-top: 1rem;">
|
||||||
<button type="button" class="btn-foto" id="startButtonKtp"
|
<button type="button" class="btn-foto" id="startButtonKtp"
|
||||||
data-state="off">Mulai Kamera</button>
|
data-state="off">Mulai Kamera</button>
|
||||||
<label for="ambilKtp" class="btn-foto text-center" id="gambarKtp"
|
<label for="ambilKtp" class="btn-foto text-center" id="gambarKtp"
|
||||||
@ -269,7 +261,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="slide fade">
|
<div class="slide fade">
|
||||||
<div style="display: flex; flex-direction: column; align-items: center;">
|
<div
|
||||||
|
style="display: flex; flex-direction: column; justify-content: center; align-items: center">
|
||||||
<h3>Foto Wajah Anda</h3>
|
<h3>Foto Wajah Anda</h3>
|
||||||
<div class="image-holder-ekyc">
|
<div class="image-holder-ekyc">
|
||||||
<img src="{{ asset('assets/images/dashboard/Asset 3.png') }}"
|
<img src="{{ asset('assets/images/dashboard/Asset 3.png') }}"
|
||||||
@ -279,7 +272,7 @@
|
|||||||
<div id="foto-preview-ekyc"></div>
|
<div id="foto-preview-ekyc"></div>
|
||||||
<input type="hidden" id="fotoEkyc" name="wajah" accept="image/*"
|
<input type="hidden" id="fotoEkyc" name="wajah" accept="image/*"
|
||||||
style="display: none;">
|
style="display: none;">
|
||||||
<div style="display: flex; margin-top: 1rem; gap: 10px;">
|
<div style="display: flex; margin-top: 1rem;">
|
||||||
<button type="button" class="btn-foto" id="startButtonEkyc"
|
<button type="button" class="btn-foto" id="startButtonEkyc"
|
||||||
data-state="off">Mulai Kamera</button>
|
data-state="off">Mulai Kamera</button>
|
||||||
<label for="ambilEkyc" class="btn-foto text-center"
|
<label for="ambilEkyc" class="btn-foto text-center"
|
||||||
@ -308,13 +301,13 @@
|
|||||||
|
|
||||||
<!-- ======= FORM PIN ======= -->
|
<!-- ======= FORM PIN ======= -->
|
||||||
<div class="form_4 data_info" style="display: none;">
|
<div class="form_4 data_info" style="display: none;">
|
||||||
<div style="display: flex">
|
<div style="display: flex; width: 100%;">
|
||||||
<div class="input-field-signup-flex">
|
<div class="input-field-signup-flex">
|
||||||
<i class="fa fa-unlock-alt" aria-hidden="true"></i>
|
<i class="fa fa-unlock-alt" aria-hidden="true"></i>
|
||||||
<input type="password" class="pin-input" placeholder="Password"
|
<input type="password" class="pin-input" placeholder="Password"
|
||||||
name="new_password">
|
name="new_password">
|
||||||
</div>
|
</div>
|
||||||
<div class="input-field-signup-flex" style="margin-left: 3%">
|
<div class="input-field-signup-flex left" style="margin-left: 3%">
|
||||||
<i class="fa fa-unlock-alt" aria-hidden="true"></i>
|
<i class="fa fa-unlock-alt" aria-hidden="true"></i>
|
||||||
<input type="password" class="konfir-pin-input"
|
<input type="password" class="konfir-pin-input"
|
||||||
placeholder="Konfirmasi Password" name="confirm_password">
|
placeholder="Konfirmasi Password" name="confirm_password">
|
||||||
@ -367,7 +360,7 @@
|
|||||||
<button class="btn transparent" id="sign-up-btn">
|
<button class="btn transparent" id="sign-up-btn">
|
||||||
Daftar
|
Daftar
|
||||||
</button>
|
</button>
|
||||||
<p><a href="{{ route('login') }}">Kembali</a></p>
|
<p><a href="{{ route('homepage') }}">Kembali</a></p>
|
||||||
</div>
|
</div>
|
||||||
<img src="{{ asset('assets/img/login_register/Payment Information-pana.svg') }}" class="image"
|
<img src="{{ asset('assets/img/login_register/Payment Information-pana.svg') }}" class="image"
|
||||||
alt="" />
|
alt="" />
|
||||||
@ -381,7 +374,7 @@
|
|||||||
<button class="btn transparent" id="sign-in-btn">
|
<button class="btn transparent" id="sign-in-btn">
|
||||||
Masuk
|
Masuk
|
||||||
</button>
|
</button>
|
||||||
<p><a href="{{ route('login') }}">Kembali</a></p>
|
<p><a href="{{ route('homepage') }}">Kembali</a></p>
|
||||||
</div>
|
</div>
|
||||||
<img src="{{ asset('assets/img/login_register/Payment Information-pana.svg') }}" class="image"
|
<img src="{{ asset('assets/img/login_register/Payment Information-pana.svg') }}" class="image"
|
||||||
alt="" />
|
alt="" />
|
||||||
@ -438,6 +431,14 @@
|
|||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isValidEmail(email) {
|
||||||
|
// Ekspresi reguler untuk memeriksa validitas alamat email
|
||||||
|
var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||||
|
|
||||||
|
// Menggunakan test() untuk memeriksa apakah email sesuai dengan ekspresi reguler
|
||||||
|
return emailRegex.test(email);
|
||||||
|
}
|
||||||
|
|
||||||
// Login Awal
|
// Login Awal
|
||||||
$('#cekAkun').on('click', function() {
|
$('#cekAkun').on('click', function() {
|
||||||
let email = document.querySelector('[name="email"]').value;
|
let email = document.querySelector('[name="email"]').value;
|
||||||
@ -449,6 +450,12 @@
|
|||||||
text: 'Email tidak boleh kosong',
|
text: 'Email tidak boleh kosong',
|
||||||
icon: 'error'
|
icon: 'error'
|
||||||
});
|
});
|
||||||
|
} else if (!isValidEmail(email)) {
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Gagal!',
|
||||||
|
text: 'Gunakan format email yang benar. Cth: example@example.com',
|
||||||
|
icon: 'error'
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
$.ajaxSetup({
|
$.ajaxSetup({
|
||||||
@ -518,7 +525,7 @@
|
|||||||
verificationButton.disabled = true;
|
verificationButton.disabled = true;
|
||||||
|
|
||||||
const email = newEmail.val().trim(); // Menghapus spasi di awal dan akhir
|
const email = newEmail.val().trim(); // Menghapus spasi di awal dan akhir
|
||||||
if (email != '') {
|
if (email != '' && isValidEmail(email)) {
|
||||||
// Menunggu 5 detik sebelum menghasilkan kode verifikasi
|
// Menunggu 5 detik sebelum menghasilkan kode verifikasi
|
||||||
newEmail.timer = setTimeout(function() {
|
newEmail.timer = setTimeout(function() {
|
||||||
if (waktuSekarangDetik == 0) {
|
if (waktuSekarangDetik == 0) {
|
||||||
@ -530,14 +537,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function isValidEmail(email) {
|
|
||||||
// Ekspresi reguler untuk memeriksa validitas alamat email
|
|
||||||
var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
||||||
|
|
||||||
// Menggunakan test() untuk memeriksa apakah email sesuai dengan ekspresi reguler
|
|
||||||
return emailRegex.test(email);
|
|
||||||
}
|
|
||||||
|
|
||||||
$('#verifikasiEmail').on('click', function() {
|
$('#verifikasiEmail').on('click', function() {
|
||||||
const newEmail = $(this);
|
const newEmail = $(this);
|
||||||
const email = document.querySelector('[name="new_email"]').value;
|
const email = document.querySelector('[name="new_email"]').value;
|
@ -109,6 +109,8 @@ Route::middleware(['auth:api'])->group(function () {
|
|||||||
Route::get('list-notification','listNotification')->name('notification.list-notification');
|
Route::get('list-notification','listNotification')->name('notification.list-notification');
|
||||||
Route::get('get-detail-notification','getDetailNotification')->name('notification.get-detail-notification');
|
Route::get('get-detail-notification','getDetailNotification')->name('notification.get-detail-notification');
|
||||||
Route::get('mark-all-as-read','markAllAsRead')->name('notification.mark-all-as-read');
|
Route::get('mark-all-as-read','markAllAsRead')->name('notification.mark-all-as-read');
|
||||||
|
Route::get('update-new-notification','updateNewNotification')->name('notification.update-new-notification');
|
||||||
|
Route::get('update-notification-to-admin','updateNotificationToAdmin')->name('notification.update-notification-to-admin');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -39,12 +39,12 @@ use App\Http\Controllers\User\Notification\UserNotification;
|
|||||||
| be assigned to the "web" middleware group. Make something great!
|
| be assigned to the "web" middleware group. Make something great!
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
//Index
|
||||||
Route::get('/', function () {
|
Route::get('/', function () {
|
||||||
return view('welcome'
|
return view('welcome'
|
||||||
);
|
);
|
||||||
});
|
})->name('homepage');
|
||||||
|
|
||||||
//Index
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user