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)
|
||||
->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'];
|
||||
if ($request->has('search') && !empty($request->search)) {
|
||||
$searchContact = $request->search;
|
||||
$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
|
||||
->mergeBindings($subQuery->getQuery())
|
||||
->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);
|
||||
}
|
||||
return response()->json($queryContact);
|
||||
|
||||
} catch (Throwable $e) {
|
||||
Log::error($e->getMessage());
|
||||
|
||||
|
@ -6,12 +6,40 @@ use App\Http\Controllers\Controller;
|
||||
use App\Models\Notification;
|
||||
use App\Models\NotificationReceiver;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Pusher\Pusher;
|
||||
use Throwable;
|
||||
|
||||
class NotificationApiController extends Controller
|
||||
{
|
||||
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){
|
||||
@ -41,4 +69,34 @@ class NotificationApiController extends Controller
|
||||
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\Log;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Notification;
|
||||
use App\Models\NotificationReceiver;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use App\Models\TransactionDescription;
|
||||
use Pusher\Pusher;
|
||||
use Yajra\DataTables\Facades\DataTables;
|
||||
|
||||
class PembeliApiController extends Controller
|
||||
@ -207,6 +210,8 @@ class PembeliApiController extends Controller
|
||||
|
||||
public function finishTransaction(Request $request)
|
||||
{
|
||||
$transactionDetail = Transaction::where('id', $request->id)->first();
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
@ -224,11 +229,25 @@ class PembeliApiController extends Controller
|
||||
'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();
|
||||
|
||||
return response()->json([
|
||||
'status' => true,
|
||||
'message' => 'Pesanan telah diselesaikan oleh ' . auth()->user()->nama_depan . '.',
|
||||
'receiver' => $transactionDetail->penjual
|
||||
]);
|
||||
} catch (Throwable $e) {
|
||||
DB::rollBack();
|
||||
@ -247,6 +266,8 @@ class PembeliApiController extends Controller
|
||||
|
||||
$auth = base64_encode(env('MIDTRANS_SERVER_KEY'));
|
||||
|
||||
$transactionDetail = Transaction::where('id', $request->id)->first();
|
||||
|
||||
$response = Http::withOptions([
|
||||
'verify' => false,
|
||||
])
|
||||
@ -301,11 +322,26 @@ class PembeliApiController extends Controller
|
||||
'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();
|
||||
|
||||
return response()->json([
|
||||
'status' => true,
|
||||
'message' => 'Pembayaran sukses',
|
||||
'receiver' => $transactionDetail->penjual
|
||||
]);
|
||||
} elseif ($transaction == 'challenge') {
|
||||
TransactionDescription::create([
|
||||
@ -318,6 +354,19 @@ class PembeliApiController extends Controller
|
||||
'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();
|
||||
|
||||
return response()->json([
|
||||
@ -463,11 +512,25 @@ class PembeliApiController extends Controller
|
||||
'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();
|
||||
|
||||
return response()->json([
|
||||
'status' => true,
|
||||
'message' => 'Transaksi telah dibatalkan.',
|
||||
'receiver' => $transaction->penjual
|
||||
]);
|
||||
} catch (Throwable $e) {
|
||||
DB::rollBack();
|
||||
@ -741,8 +804,8 @@ class PembeliApiController extends Controller
|
||||
'transactions.token'
|
||||
);
|
||||
|
||||
if($request->has('search') && !empty($request->search['value'])){
|
||||
$searchPembeli = $request->search['value'];
|
||||
if($request->has('search') && !empty($request->search)){
|
||||
$searchPembeli = $request->search;
|
||||
if(!is_numeric($searchPembeli)){
|
||||
$subQuery->where(function($a) use ($searchPembeli){
|
||||
$a->whereRaw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?",['%'.strtolower($searchPembeli).'%'])
|
||||
@ -761,71 +824,8 @@ class PembeliApiController extends Controller
|
||||
->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>
|
||||
return response()->json($queryPembeli);
|
||||
|
||||
<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());
|
||||
|
||||
|
@ -9,6 +9,8 @@ use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Notification;
|
||||
use App\Models\NotificationReceiver;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use App\Models\TransactionDescription;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
@ -18,6 +20,8 @@ class PenjualApiController extends Controller
|
||||
{
|
||||
public function acceptTransaction(Request $request)
|
||||
{
|
||||
$transactionDetail = Transaction::where('id', $request->id)->first();
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
@ -34,11 +38,25 @@ class PenjualApiController extends Controller
|
||||
'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();
|
||||
|
||||
return response()->json([
|
||||
'status' => true,
|
||||
'message' => 'Transaksi telah diterima. Siapkan pesanan untuk dikirim ke penjual.',
|
||||
'receiver' => $transactionDetail->pembeli
|
||||
]);
|
||||
} catch (Throwable $e) {
|
||||
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'),
|
||||
]);
|
||||
|
||||
$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();
|
||||
|
||||
return response()->json([
|
||||
'status' => true,
|
||||
'message' => 'Transaksi telah ditolak. Uang akan dikirimkan ke pembeli.',
|
||||
'receiver' => $transaction->pembeli
|
||||
]);
|
||||
} catch (Throwable $e) {
|
||||
DB::rollBack();
|
||||
@ -167,6 +199,8 @@ class PenjualApiController extends Controller
|
||||
|
||||
public function sentOrder(Request $request)
|
||||
{
|
||||
$transactionDetail = Transaction::where('id', $request->transaction_id)->first();
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
@ -194,11 +228,25 @@ class PenjualApiController extends Controller
|
||||
'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();
|
||||
|
||||
return response()->json([
|
||||
'status' => true,
|
||||
'message' => 'Pesanan telah sampai di tempat pembeli.',
|
||||
'receiver' => $transactionDetail->pembeli
|
||||
]);
|
||||
} catch (Throwable $e) {
|
||||
DB::rollBack();
|
||||
@ -225,8 +273,8 @@ class PenjualApiController extends Controller
|
||||
->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 ($request->has('search') && !empty($request->search)) {
|
||||
$searchPenjual = $request->search;
|
||||
if (!is_numeric($searchPenjual)) {
|
||||
$subQuery->where(function ($a) use ($searchPenjual) {
|
||||
$a->whereRaw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?", ['%' . strtolower($searchPenjual) . '%'])
|
||||
@ -248,90 +296,8 @@ class PenjualApiController extends Controller
|
||||
->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>
|
||||
return response()->json($queryPenjual);
|
||||
|
||||
<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());
|
||||
|
||||
|
@ -138,29 +138,8 @@ class RefundApiController extends Controller
|
||||
->select('*')
|
||||
->get();
|
||||
|
||||
if ($request->ajax()) {
|
||||
return DataTables::of($queryRefund)
|
||||
->addIndexColumn()
|
||||
->addColumn('action', function ($row) {
|
||||
$url = route('user-refund.show', ['id' => $row->id]);
|
||||
$html_code = '
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-primary dropdown-toggle"
|
||||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
....
|
||||
</button>
|
||||
return response()->json($queryRefund);
|
||||
|
||||
<ul class="dropdown-menu">
|
||||
<li><a class="dropdown-item"
|
||||
href="'.$url.'">Detail</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>';
|
||||
return $html_code;
|
||||
})
|
||||
->rawColumns(['action'])
|
||||
->make(true);
|
||||
}
|
||||
}catch(Throwable $e){
|
||||
Log::error($e->getMessage());
|
||||
|
||||
|
@ -18,11 +18,11 @@ class InvoiceController extends Controller
|
||||
|
||||
public function exportInvoice(Request $request)
|
||||
{
|
||||
$transaction = Transaction::findOrFail($request->id);
|
||||
$pdf = Pdf::loadView('invoice.export-invoice',compact('transaction'))->setPaper('A4','Portrait');
|
||||
return $pdf->download("invoice-".uniqid().".pdf");
|
||||
// return view('invoice.export-invoice', [
|
||||
// 'transaction' => Transaction::findOrFail($request->id),
|
||||
// ]);
|
||||
// $transaction = Transaction::findOrFail($request->id);
|
||||
// $pdf = Pdf::loadView('invoice.export-invoice',compact('transaction'))->setPaper('A4','Portrait');
|
||||
// return $pdf->download("invoice-".uniqid().".pdf");
|
||||
return view('invoice.export-invoice', [
|
||||
'transaction' => Transaction::findOrFail($request->id),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ class LoginController extends Controller
|
||||
{
|
||||
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.',
|
||||
]);
|
||||
|
||||
$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.',
|
||||
'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...'
|
||||
]);
|
||||
|
||||
|
@ -26,10 +26,19 @@ input[type="text"] {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
video {
|
||||
background: primary;
|
||||
}
|
||||
|
||||
.flex {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
@ -80,6 +89,11 @@ form.sign-up-form {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.form_3 {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
form.sign-in-form {
|
||||
display: flex;
|
||||
align-items: start;
|
||||
@ -120,6 +134,10 @@ form p {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.left {
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
.input {
|
||||
width: 100%;
|
||||
height: 55px;
|
||||
@ -152,7 +170,7 @@ form p {
|
||||
}
|
||||
|
||||
.up {
|
||||
margin-top: 3%;
|
||||
margin-top: 17px;
|
||||
}
|
||||
|
||||
.input-field-signin-flex input,
|
||||
@ -180,6 +198,7 @@ form p {
|
||||
.input-field {
|
||||
width: 100%;
|
||||
height: 55px;
|
||||
padding: 0rem 1.5rem;
|
||||
background-color: #f0f0f0;
|
||||
border-radius: 1rem;
|
||||
display: grid;
|
||||
@ -242,7 +261,7 @@ form p {
|
||||
color: #fff;
|
||||
text-transform: uppercase;
|
||||
font-weight: 600;
|
||||
margin: 10px 0;
|
||||
margin: 20px 0;
|
||||
cursor: pointer;
|
||||
transition: 0.25s;
|
||||
}
|
||||
@ -254,13 +273,11 @@ form p {
|
||||
|
||||
.btn-otp,
|
||||
.btn-foto {
|
||||
/* width: fit-content; */
|
||||
width: 110px;
|
||||
/* height: fit-content; */
|
||||
height: 53px;
|
||||
margin-left: 2%;
|
||||
width: fit-content;
|
||||
height: fit-content;
|
||||
margin-left: 12px;
|
||||
font-size: 0.7rem;
|
||||
padding: 0.85rem 0.9rem;
|
||||
padding: 0.7rem 0.9rem;
|
||||
border: 1px solid #900c3e;
|
||||
color: #900c3e;
|
||||
background: none;
|
||||
@ -411,15 +428,15 @@ form p {
|
||||
pointer-events: all;
|
||||
}
|
||||
|
||||
@media (max-width: 1100px) {
|
||||
@media (max-width: 1150px) {
|
||||
.container {
|
||||
min-height: 1000px;
|
||||
height: 100vh;
|
||||
min-height: 1100px;
|
||||
/* height: 100vh; */
|
||||
}
|
||||
|
||||
form.sign-in-form {
|
||||
/* form.sign-in-form {
|
||||
justify-content: start;
|
||||
}
|
||||
} */
|
||||
|
||||
.header {
|
||||
padding: 0;
|
||||
@ -429,6 +446,10 @@ form p {
|
||||
padding: 0 1.2rem;
|
||||
}
|
||||
|
||||
.header ul li {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.signin-signup {
|
||||
width: 100%;
|
||||
top: 95%;
|
||||
@ -534,6 +555,10 @@ form p {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.header ul li {
|
||||
width: 90px;
|
||||
}
|
||||
|
||||
.image {
|
||||
display: none;
|
||||
}
|
||||
@ -567,10 +592,13 @@ form p {
|
||||
.header {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
margin-right: 10%;
|
||||
}
|
||||
|
||||
.header ul {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.header ul li {
|
||||
@ -621,6 +649,10 @@ form p {
|
||||
background: var(--primary);
|
||||
}
|
||||
|
||||
.form_wrap {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.form_wrap h2 {
|
||||
color: var(--header-clr);
|
||||
text-align: start;
|
||||
@ -659,7 +691,7 @@ form p {
|
||||
|
||||
.btns_wrap {
|
||||
width: 100%;
|
||||
margin: 4% auto;
|
||||
margin: 24px auto;
|
||||
}
|
||||
|
||||
.btns_wrap .common_btns {
|
||||
@ -671,13 +703,8 @@ form p {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.btns_wrap .common_btns.form_2_btns {
|
||||
width: 190%;
|
||||
margin-top: 10%;
|
||||
}
|
||||
|
||||
.btns_wrap .common_btns.form_3_btns {
|
||||
width: 60%;
|
||||
width: 100%;
|
||||
margin-top: 2%;
|
||||
}
|
||||
|
||||
@ -842,12 +869,13 @@ form p {
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.gender-select-menu,
|
||||
/* .gender-select-menu,
|
||||
.select-menu {
|
||||
height: 100%;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.gender-select-menu .gender-select-input,
|
||||
} */
|
||||
|
||||
/* .gender-select-menu .gender-select-input,
|
||||
.select-menu .select-btn {
|
||||
width: 100%;
|
||||
height: 55px;
|
||||
@ -860,14 +888,17 @@ form p {
|
||||
justify-content: space-between;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
}
|
||||
.select-btn i {
|
||||
} */
|
||||
|
||||
/* .select-btn i {
|
||||
font-size: 25px;
|
||||
transition: 0.3s;
|
||||
}
|
||||
} */
|
||||
|
||||
.gender-select,
|
||||
.sBtn-text {
|
||||
width: 100%;
|
||||
height: 55px;
|
||||
font-size: 0.8rem;
|
||||
color: #aaa;
|
||||
font-weight: 500;
|
||||
@ -948,8 +979,10 @@ form p {
|
||||
}
|
||||
|
||||
.slide img {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
height: 30vh;
|
||||
border-radius: 1rem;
|
||||
/* width: 100%;
|
||||
height: auto; */
|
||||
}
|
||||
|
||||
.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.style.display = "none";
|
||||
form_3.style.display = "block";
|
||||
form_3.style.display = "flex";
|
||||
|
||||
form_3_btns.style.display = "flex";
|
||||
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.style.display = "none";
|
||||
form_4.style.display = "block";
|
||||
form_4.style.display = "flex";
|
||||
|
||||
form_4_btns.style.display = "flex";
|
||||
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_3.style.display = "block";
|
||||
form_3.style.display = "flex";
|
||||
form_4.style.display = "none";
|
||||
|
||||
form_4_btns.style.display = "none";
|
||||
@ -310,19 +310,6 @@ document.addEventListener("DOMContentLoaded", function () {
|
||||
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 () {
|
||||
if (ktpStream) {
|
||||
const canvas = document.createElement("canvas");
|
||||
|
@ -4,7 +4,7 @@
|
||||
<div class="main-content">
|
||||
<section class="section">
|
||||
<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-stats">
|
||||
<div class="card-stats-title">
|
||||
@ -23,6 +23,8 @@
|
||||
<div class="card-stats-item-count" id="countProcessed">{{ $countProcessed }}</div>
|
||||
<div class="card-stats-item-label">Diproses</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-stats-items mt-2">
|
||||
<div class="card-stats-item">
|
||||
<div class="card-stats-item-count" id="countIndicated">{{ $countIndicated }}</div>
|
||||
<div class="card-stats-item-label">Diterindikasi</div>
|
||||
@ -125,7 +127,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="row">
|
||||
<div class="col-lg-8">
|
||||
<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 name="csrf-token" content="{{ csrf_token() }}">
|
||||
<title>REKBER</title>
|
||||
<link rel="shortcut icon" href="{{ asset('assets/images/logo-oki.webp') }}">
|
||||
|
||||
@include('layouts.css')
|
||||
|
||||
|
@ -4,7 +4,8 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<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 -->
|
||||
<script src="https://kit.fontawesome.com/64d58efce2.js" crossorigin="anonymous"></script>
|
||||
<!-- css -->
|
||||
@ -55,14 +56,14 @@
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
#foto-preview-ktp,
|
||||
/* #foto-preview-ktp,
|
||||
#foto-preview-ekyc {
|
||||
width: 400px
|
||||
}
|
||||
width: 400px;
|
||||
} */
|
||||
|
||||
.image-holder-ktp,
|
||||
.image-holder-ekyc {
|
||||
width: 400px
|
||||
width: 400px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
@ -88,7 +89,7 @@
|
||||
<button type="button" class="btn-otp solid" id="cekAkun">Cek Akun</button>
|
||||
|
||||
</div>
|
||||
<div class="input-field">
|
||||
<div class="input-field-signin-flex">
|
||||
<i class="fas fa-unlock-alt" aria-hidden="true"></i>
|
||||
<input type="password" class="otp-input" placeholder="Password" name="password" required>
|
||||
</div>
|
||||
@ -101,7 +102,7 @@
|
||||
method="POST">
|
||||
@csrf
|
||||
<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.
|
||||
</p>
|
||||
|
||||
@ -149,45 +150,42 @@
|
||||
name="nama_belakang">
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-field up">
|
||||
<div class="input-field-signin-flex up">
|
||||
<i class="fa fa-id-card" aria-hidden="true"></i>
|
||||
<input type="text" placeholder="NIK" class="email-input" name="nik"
|
||||
maxlength="16"
|
||||
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 16);" />
|
||||
</div>
|
||||
<div class="flex-input-btn">
|
||||
<div class="input">
|
||||
<div class="input-field-signin-flex">
|
||||
<i class="fa fa-envelope" aria-hidden="true"></i>
|
||||
<input type="email" placeholder="Email" class="email-input" name="new_email"
|
||||
id="newEmail">
|
||||
</div>
|
||||
<button id="verifikasiEmail" class="btn-otp" type="button"
|
||||
disabled=true>Verifikasi</button>
|
||||
<button id="verifikasiEmail" class="btn-otp solid up" type="button"
|
||||
disabled="true">Verifikasi</button>
|
||||
</div>
|
||||
<div class="input-field up">
|
||||
<div class="input-field-signin-flex up">
|
||||
<i class="fa fa-ellipsis-h" aria-hidden="true"></i>
|
||||
<input type="text" class="telp-input-signup"
|
||||
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 6);"
|
||||
placeholder="Kode Verifikasi Email" name="email_verification"
|
||||
id="emailVerification">
|
||||
</div>
|
||||
<div class="input-field up">
|
||||
<div class="input-field-signin-flex up">
|
||||
<i class="fa fa-phone" aria-hidden="true"></i>
|
||||
<input type="text" class="telp-input-signup" maxlength="13"
|
||||
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 15);"
|
||||
placeholder="Nomer Telepon. cth: 08xxx" name="nohp">
|
||||
</div>
|
||||
<div style="display: flex;">
|
||||
<div class="input-field-signup-flex up gender-select-menu" style="width: 190%">
|
||||
<div class="gender-select-input" style="width: 100%; padding-left: 1rem;">
|
||||
<select style="width: 190%;" class="gender-select" id="gender-select"
|
||||
name="gender">
|
||||
<option value="Laki-laki">Laki-laki</option>
|
||||
<option value="Perempuan">Perempuan</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="input-field">
|
||||
<select id="gender-select" name="gender">
|
||||
<option value="Laki-laki">Laki-laki</option>
|
||||
<option value="Perempuan">Perempuan</option>
|
||||
</select>
|
||||
</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>
|
||||
<input type="date" placeholder="Tanggal Lahir" name="tanggal_lahir" />
|
||||
</div>
|
||||
@ -198,44 +196,38 @@
|
||||
|
||||
<!-- ======= FORM ADDRESS ======= -->
|
||||
<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') }}"
|
||||
style="width: 100%; border: 1px solid transparent; " class="input-field"
|
||||
aria-label="Default select example">
|
||||
style="width: 100%;" class="input-field" aria-label="Default select example">
|
||||
|
||||
</select>
|
||||
</div>
|
||||
<div class='mb-2'>
|
||||
<div class="input-field" style="width: 190%; padding: 0rem 1rem;">
|
||||
<select id="selectCity"
|
||||
style="width: 100%; border: 1px solid transparent; margin-top: 0; outline: none;"
|
||||
class="input-field" aria-label="Default select example">
|
||||
<div class="input-field">
|
||||
<select id="selectCity" style="width: 100%;" class="input-field"
|
||||
aria-label="Default select example">
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class='mb-2'>
|
||||
<div class="input-field" style="width: 190%; padding: 0rem 1rem;">
|
||||
<select id="selectDistrict"
|
||||
style="width: 100%; border: 1px solid transparent; margin-top: 0; outline: none;"
|
||||
class="input-field" aria-label="Default select example">
|
||||
<div class="input-field">
|
||||
<select id="selectDistrict" style="width: 100%;" class="input-field"
|
||||
aria-label="Default select example">
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class='mb-2'>
|
||||
<div class="input-field" style="width: 190%; padding: 0rem 1rem;">
|
||||
<select id="selectVillage"
|
||||
style="width: 100%; border: 1px solid transparent; margin-top: 0; outline: none;"
|
||||
class="input-field" aria-label="Default select example"
|
||||
name="village_code">
|
||||
<div class="input-field">
|
||||
<select id="selectVillage" style="width: 100%;" class="input-field"
|
||||
aria-label="Default select example" name="village_code">
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" class="input-field" id="alamat" name="alamat"
|
||||
placeholder="Alamat lengkap Anda" cols="50" rows="4"
|
||||
style="width: 190%; padding: 0rem 1rem;">
|
||||
placeholder="Alamat lengkap Anda" cols="50" rows="4">
|
||||
</div>
|
||||
<!-- ======= END FORM ADDRESS ======= -->
|
||||
|
||||
@ -244,8 +236,8 @@
|
||||
<div class="slider-container">
|
||||
<div class="slider">
|
||||
<div class="slide fade">
|
||||
<div style="display: flex; flex-direction: column; align-items: center;">
|
||||
<h3 style="">Foto KTP Anda</h3>
|
||||
<div style="display: flex; flex-direction: column; align-items: center">
|
||||
<h3>Foto KTP Anda</h3>
|
||||
<div class="image-holder-ktp">
|
||||
<img src="{{ asset('assets/images/dashboard/Asset 3.png') }}"
|
||||
alt="logo ambil gambar" id="imageHolderKtp">
|
||||
@ -254,7 +246,7 @@
|
||||
<div id="foto-preview-ktp"></div>
|
||||
<input type="hidden" id="fotoKtp" name="ktp"
|
||||
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"
|
||||
data-state="off">Mulai Kamera</button>
|
||||
<label for="ambilKtp" class="btn-foto text-center" id="gambarKtp"
|
||||
@ -269,7 +261,8 @@
|
||||
</div>
|
||||
</div>
|
||||
<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>
|
||||
<div class="image-holder-ekyc">
|
||||
<img src="{{ asset('assets/images/dashboard/Asset 3.png') }}"
|
||||
@ -279,7 +272,7 @@
|
||||
<div id="foto-preview-ekyc"></div>
|
||||
<input type="hidden" id="fotoEkyc" name="wajah" accept="image/*"
|
||||
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"
|
||||
data-state="off">Mulai Kamera</button>
|
||||
<label for="ambilEkyc" class="btn-foto text-center"
|
||||
@ -308,13 +301,13 @@
|
||||
|
||||
<!-- ======= FORM PIN ======= -->
|
||||
<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">
|
||||
<i class="fa fa-unlock-alt" aria-hidden="true"></i>
|
||||
<input type="password" class="pin-input" placeholder="Password"
|
||||
name="new_password">
|
||||
</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>
|
||||
<input type="password" class="konfir-pin-input"
|
||||
placeholder="Konfirmasi Password" name="confirm_password">
|
||||
@ -367,7 +360,7 @@
|
||||
<button class="btn transparent" id="sign-up-btn">
|
||||
Daftar
|
||||
</button>
|
||||
<p><a href="{{ route('login') }}">Kembali</a></p>
|
||||
<p><a href="{{ route('homepage') }}">Kembali</a></p>
|
||||
</div>
|
||||
<img src="{{ asset('assets/img/login_register/Payment Information-pana.svg') }}" class="image"
|
||||
alt="" />
|
||||
@ -381,7 +374,7 @@
|
||||
<button class="btn transparent" id="sign-in-btn">
|
||||
Masuk
|
||||
</button>
|
||||
<p><a href="{{ route('login') }}">Kembali</a></p>
|
||||
<p><a href="{{ route('homepage') }}">Kembali</a></p>
|
||||
</div>
|
||||
<img src="{{ asset('assets/img/login_register/Payment Information-pana.svg') }}" class="image"
|
||||
alt="" />
|
||||
@ -438,6 +431,14 @@
|
||||
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
|
||||
$('#cekAkun').on('click', function() {
|
||||
let email = document.querySelector('[name="email"]').value;
|
||||
@ -449,6 +450,12 @@
|
||||
text: 'Email tidak boleh kosong',
|
||||
icon: 'error'
|
||||
});
|
||||
} else if (!isValidEmail(email)) {
|
||||
Swal.fire({
|
||||
title: 'Gagal!',
|
||||
text: 'Gunakan format email yang benar. Cth: example@example.com',
|
||||
icon: 'error'
|
||||
});
|
||||
} else {
|
||||
try {
|
||||
$.ajaxSetup({
|
||||
@ -518,7 +525,7 @@
|
||||
verificationButton.disabled = true;
|
||||
|
||||
const email = newEmail.val().trim(); // Menghapus spasi di awal dan akhir
|
||||
if (email != '') {
|
||||
if (email != '' && isValidEmail(email)) {
|
||||
// Menunggu 5 detik sebelum menghasilkan kode verifikasi
|
||||
newEmail.timer = setTimeout(function() {
|
||||
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() {
|
||||
const newEmail = $(this);
|
||||
const email = document.querySelector('[name="new_email"]').value;
|
@ -109,7 +109,9 @@ Route::middleware(['auth:api'])->group(function () {
|
||||
Route::get('list-notification','listNotification')->name('notification.list-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('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!
|
||||
|
|
||||
*/
|
||||
|
||||
//Index
|
||||
Route::get('/', function () {
|
||||
return view('welcome'
|
||||
);
|
||||
});
|
||||
|
||||
//Index
|
||||
})->name('homepage');
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user