halaman-psikolog #1
|
|
@ -41,6 +41,7 @@ public function show(string $id)
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'msg' => 'Data ditemukan (' . $id . ')',
|
'msg' => 'Data ditemukan (' . $id . ')',
|
||||||
|
'id_booking' => $data->id_booking,
|
||||||
'status_data' => $data->status_tes,
|
'status_data' => $data->status_tes,
|
||||||
'nama_lengkap' => $data->nama_lengkap,
|
'nama_lengkap' => $data->nama_lengkap,
|
||||||
'kode_unik' => $data->kode_unik,
|
'kode_unik' => $data->kode_unik,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,88 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\TestSessionsModel;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class TestSessionsController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for creating a new resource.
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
$request->validate([
|
||||||
|
'id_booking' => 'required|exists:booking,id_booking',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$testSession = TestSessionsModel::create([
|
||||||
|
'id_booking' => $request->id_booking,
|
||||||
|
'status_session' => 0, // Set status awal sebagai "Belum Dimulai"
|
||||||
|
]);
|
||||||
|
|
||||||
|
return redirect()->route('cek-status.show', $request->id_booking)->with('success', 'Sesi tes berhasil dibuat. Token: ' . $testSession->token_session);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*/
|
||||||
|
public function show(string $id)
|
||||||
|
{
|
||||||
|
$data = TestSessionsModel::where('id_booking', $id)->first();
|
||||||
|
if($data != null) {
|
||||||
|
return response()->json([
|
||||||
|
'status' => true,
|
||||||
|
'msg' => 'Data ditemukan (' . $id . ')',
|
||||||
|
'status_session' => $data->status_session,
|
||||||
|
'token_session' => $data->token_session,
|
||||||
|
'id_booking' => $data->id_booking,
|
||||||
|
]);
|
||||||
|
|
||||||
|
}
|
||||||
|
return response()->json([
|
||||||
|
'status' => false,
|
||||||
|
'msg' => 'Data tidak ditemukan (' . $id . ')',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for editing the specified resource.
|
||||||
|
*/
|
||||||
|
public function edit(string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(Request $request, string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*/
|
||||||
|
public function destroy(string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -38,7 +38,7 @@ protected static function boot()
|
||||||
}
|
}
|
||||||
|
|
||||||
if(empty($model->status_tes)) {
|
if(empty($model->status_tes)) {
|
||||||
$model->status_tes = 0;
|
$model->status_tes = '0';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class TestSessionsModel extends Model
|
||||||
|
{
|
||||||
|
protected $table = 'test_sessions';
|
||||||
|
|
||||||
|
protected $primaryKey = 'id_test_sessions';
|
||||||
|
|
||||||
|
protected $keyType = 'string';
|
||||||
|
|
||||||
|
public $incrementing = false;
|
||||||
|
|
||||||
|
protected $fillable = [
|
||||||
|
'status_session',
|
||||||
|
'token_session',
|
||||||
|
'id_booking'
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $casts = [
|
||||||
|
'id_test_sessions' => 'string',
|
||||||
|
'id_booking' => 'string',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected static function boot()
|
||||||
|
{
|
||||||
|
parent::boot();
|
||||||
|
static::creating(function ($model) {
|
||||||
|
if (empty($model->id_test_sessions)) {
|
||||||
|
$model->id_test_sessions = (string) \Illuminate\Support\Str::uuid();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($model->token_session)) {
|
||||||
|
$model->token_session = \Illuminate\Support\Str::random(50);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -14,7 +14,7 @@ public function up(): void
|
||||||
Schema::create('test_sessions', function (Blueprint $table) {
|
Schema::create('test_sessions', function (Blueprint $table) {
|
||||||
$table->uuid('id_test_sessions')->primary();
|
$table->uuid('id_test_sessions')->primary();
|
||||||
$table->enum('status_session', [0, 1, 2]);
|
$table->enum('status_session', [0, 1, 2]);
|
||||||
$table->string();
|
$table->string('token_session', 50)->unique();
|
||||||
$table->uuid('id_booking');
|
$table->uuid('id_booking');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -71,18 +71,25 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-8 my-3">
|
<div class="col-md-8 my-3" id="result_test">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title text-center">Lakukan Tes</h5>
|
<h5 class="card-title text-center">Lakukan Tes</h5>
|
||||||
<h6 class="card-subtitle mb-2 text-body-secondary text-center">Kalau kamu sudah siap menjalankan tes, klik tombol di bawah untuk mulai tes kecemasan dari sistem kami!</h6>
|
<h6 class="card-subtitle mb-2 text-body-secondary text-center" id="result_test_title">Kalau kamu sudah siap menjalankan tes, klik tombol di bawah untuk mulai tes kecemasan dari sistem kami!</h6>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-12 text-center my-3">
|
<div class="col-md-12 text-center my-3">
|
||||||
<span>Status tes kamu: <span id="status_tes_down" class="fw-bold text-white bg-secondary p-2 rounded-pill">Belum Dimulai</span></span>
|
<span>Status tes kamu: <span id="result_test_status" class="fw-bold text-white bg-secondary p-2 rounded-pill">Belum Dimulai</span></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-9 mb-3">
|
<div class="col-md-9 mb-3">
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<a href="#" class="btn btn-primary text-white fw-bold">Cari</a>
|
<form action="" method="POST" id="result_test_form">
|
||||||
|
@csrf
|
||||||
|
<input type="hidden" name="id_booking" id="id_booking_input">
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<button type="button" class="btn btn-primary text-white fw-bold" onclick="startSessionTest()">Mulai Tes</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<a href="#" class="btn btn-primary text-white fw-bold" id="result_test_link">Mulai Tes</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -98,8 +105,12 @@
|
||||||
@section('script')
|
@section('script')
|
||||||
<script>
|
<script>
|
||||||
$('#result_data').hide();
|
$('#result_data').hide();
|
||||||
|
$('#result_test').hide();
|
||||||
|
$('#result_test_form').hide();
|
||||||
|
$('#result_test_link').hide();
|
||||||
function searchUserStatus() {
|
function searchUserStatus() {
|
||||||
$('#result_data').hide();
|
$('#result_data').hide();
|
||||||
|
$('#result_test').hide();
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: 'Status',
|
title: 'Status',
|
||||||
text: 'Mencari data...',
|
text: 'Mencari data...',
|
||||||
|
|
@ -132,6 +143,35 @@ function searchUserStatus() {
|
||||||
$('#alert_status').removeClass();
|
$('#alert_status').removeClass();
|
||||||
$('#alert_status').addClass('alert alert-info');
|
$('#alert_status').addClass('alert alert-info');
|
||||||
$('#alert_status').html('Kamu sudah dikonfirmasi oleh psikolog!');
|
$('#alert_status').html('Kamu sudah dikonfirmasi oleh psikolog!');
|
||||||
|
|
||||||
|
let test_session = getTestSession(response.id_booking);
|
||||||
|
$('#result_test').show();
|
||||||
|
$('#result_test_title').html('Kamu sudah dikonfirmasi oleh psikolog! Kalau kamu sudah siap menjalankan tes, klik tombol di bawah untuk mulai tes kecemasan dari sistem kami!');
|
||||||
|
if(test_session.status) {
|
||||||
|
if(test_session.status_session == 0) {
|
||||||
|
$('#result_test_status').html('Belum Dimulai');
|
||||||
|
$('#result_test_status').removeClass();
|
||||||
|
$('#result_test_status').addClass('fw-bold text-white bg-secondary p-2 rounded-pill');
|
||||||
|
$('#result_test_form').show();
|
||||||
|
} else if(test_session.status_session == 1) {
|
||||||
|
$('#result_test_status').html('Sedang Berlangsung');
|
||||||
|
$('#result_test_status').removeClass();
|
||||||
|
$('#result_test_status').addClass('fw-bold text-white bg-warning p-2 rounded-pill');
|
||||||
|
} else if(test_session.status_session == 2) {
|
||||||
|
$('#result_test_status').html('Selesai');
|
||||||
|
$('#result_test_status').removeClass();
|
||||||
|
$('#result_test_status').addClass('fw-bold text-white bg-success p-2 rounded-pill');
|
||||||
|
}
|
||||||
|
} else if(!test_session.status) {
|
||||||
|
console.log(test_session.msg);
|
||||||
|
$('#result_test').show();
|
||||||
|
$('#result_test_title').html('Kamu sudah dikonfirmasi oleh psikolog! Kalau kamu sudah siap menjalankan tes, klik tombol di bawah untuk mulai tes kecemasan dari sistem kami!');
|
||||||
|
|
||||||
|
$('#result_test_status').html('Belum Dimulai');
|
||||||
|
$('#result_test_status').removeClass();
|
||||||
|
$('#result_test_status').addClass('fw-bold text-white bg-secondary p-2 rounded-pill');
|
||||||
|
$('#result_test_form').show();
|
||||||
|
}
|
||||||
} else if(response.status_data == 2) {
|
} else if(response.status_data == 2) {
|
||||||
$('#alert_status').removeClass();
|
$('#alert_status').removeClass();
|
||||||
$('#alert_status').addClass('alert alert-success');
|
$('#alert_status').addClass('alert alert-success');
|
||||||
|
|
@ -152,5 +192,53 @@ function searchUserStatus() {
|
||||||
xhttp.open('GET', url.replace('__CODE__', the_code));
|
xhttp.open('GET', url.replace('__CODE__', the_code));
|
||||||
xhttp.send();
|
xhttp.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getTestSession(id_booking) {
|
||||||
|
let xhttp = new XMLHttpRequest();
|
||||||
|
let result = {
|
||||||
|
'status': false,
|
||||||
|
'msg': 'Data tidak ditemukan (' + id_booking + ')',
|
||||||
|
};
|
||||||
|
|
||||||
|
xhttp.onreadystatechange = function() {
|
||||||
|
if(this.readyState == 4 && this.status == 200) {
|
||||||
|
let response = JSON.parse(this.responseText);
|
||||||
|
if(response.status) {
|
||||||
|
result = {
|
||||||
|
'status': true,
|
||||||
|
'msg': 'Data ditemukan (' + id_booking + ')',
|
||||||
|
'id_booking': response.id_booking,
|
||||||
|
'status_session': response.status_session,
|
||||||
|
'token_session': response.token_session
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let url = '{{ route('test-sessions.show', ['__ID__']) }}';
|
||||||
|
xhttp.open('GET', url.replace('__ID__', id_booking), false);
|
||||||
|
xhttp.send();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
function startSessionTest() {
|
||||||
|
let id_booking = $('#id_booking_input').val();
|
||||||
|
let url = '{{ route('test-sessions.store') }}';
|
||||||
|
let form = $('#result_test_form');
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Konfirmasi',
|
||||||
|
text: 'Apakah kamu yakin ingin memulai tes sekarang?',
|
||||||
|
icon: 'question',
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonText: 'Ya, mulai tes!',
|
||||||
|
cancelButtonText: 'Nggak jadi deh'
|
||||||
|
}).then((result) => {
|
||||||
|
if(result.isConfirmed) {
|
||||||
|
form.attr('action', url);
|
||||||
|
form.submit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
use App\Http\Controllers\HasilTesController;
|
use App\Http\Controllers\HasilTesController;
|
||||||
use App\Http\Controllers\LandingController;
|
use App\Http\Controllers\LandingController;
|
||||||
use App\Http\Controllers\ProfileController;
|
use App\Http\Controllers\ProfileController;
|
||||||
|
use App\Http\Controllers\TestSessionsController;
|
||||||
use App\Http\Controllers\UsersController;
|
use App\Http\Controllers\UsersController;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
@ -29,6 +30,7 @@
|
||||||
Route::get('/about', [LandingController::class, 'about'])->name('beranda.about');
|
Route::get('/about', [LandingController::class, 'about'])->name('beranda.about');
|
||||||
Route::resource('booking', BookingController::class)->only(['store']);
|
Route::resource('booking', BookingController::class)->only(['store']);
|
||||||
Route::resource('cek-status', CekStatusController::class)->only(['index', 'show']);
|
Route::resource('cek-status', CekStatusController::class)->only(['index', 'show']);
|
||||||
|
Route::resource('test-sessions', TestSessionsController::class)->only(['store', 'show']);
|
||||||
Route::middleware(['auth', 'role.auth'])->group(function() {
|
Route::middleware(['auth', 'role.auth'])->group(function() {
|
||||||
Route::resource('dashboard', DashboardController::class);
|
Route::resource('dashboard', DashboardController::class);
|
||||||
Route::resource('users', UsersController::class);
|
Route::resource('users', UsersController::class);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue