Surveys: Add Feature Alamat

main
mikhailkusuma 2024-07-02 14:14:50 +07:00
parent 11d6bc7bf2
commit abf95979f8
6 changed files with 430 additions and 5 deletions

View File

@ -3,7 +3,11 @@
namespace App\Http\Controllers\Admins;
use App\Http\Controllers\Controller;
use App\Models\Master\Kabupatens;
use App\Models\Master\Kecamatans;
use App\Models\Master\Kelurahans;
use App\Models\Master\ManagementMasters;
use App\Models\Master\Provinsis;
use App\Models\QuestionAnswers;
use App\Models\QuestionDetails;
use App\Models\QuestionSurveys;
@ -69,6 +73,7 @@ class SurveyController extends Controller
->findOrFail($id);
// $responden = User::role('Staff')->get();
// return json_decode($survey->questionSurveys[15]->questionDetails->question_value)[0];
// return view
return view('pages.admins.surveys.preview-admin', compact('survey'));
}
@ -239,7 +244,7 @@ class SurveyController extends Controller
// Add Data Answers
public function addAnswers(Request $request)
{
// return $request->responden;
// return $request;
// create unique answer_id
$unique_answer_id = QuestionAnswers::select('answer_id')->groupby('answer_id')->latest()->first();
$unique_answer_id = empty($unique_answer_id) ? 1 : $unique_answer_id['answer_id'] + 1;
@ -304,6 +309,61 @@ class SurveyController extends Controller
return response()->json($data);
}
public function cariProvinsi(Request $request)
{
$data = [];
if ($request->has('q')) {
$search = $request->q;
$data = Provinsis::selectRaw('nama as name, id')
->where('nama', 'LIKE', "%$search%")
->limit(15)
->get();
}
return response()->json($data);
}
public function cariKabupaten(Request $request, String $provId)
{
$data = [];
if ($request->has('q')) {
$search = $request->q;
$data = Kabupatens::selectRaw('nama as name, id')
->where('nama', 'LIKE', "%$search%")
->where('provinsi_id', $provId)
->limit(15)
->get();
}
return response()->json($data);
}
public function cariKecamatan(Request $request, String $kabId)
{
$data = [];
if ($request->has('q')) {
$search = $request->q;
$data = Kecamatans::selectRaw('nama as name, id')
->where('nama', 'LIKE', "%$search%")
->where('kabupaten_id', $kabId)
->limit(15)
->get();
}
return response()->json($data);
}
public function cariKelurahan(Request $request, String $kecId)
{
$data = [];
if ($request->has('q')) {
$search = $request->q;
$data = Kelurahans::selectRaw('nama as name, id')
->where('nama', 'LIKE', "%$search%")
->where('kecamatan_id', $kecId)
->limit(15)
->get();
}
return response()->json($data);
}
/**
* Remove the specified resource from storage.
*/

View File

@ -9,6 +9,7 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Spatie\Permission\Models\Role;
class UserController extends Controller
@ -110,9 +111,16 @@ class UserController extends Controller
*/
public function update(Request $request, string $id)
{
$userId = User::findOrFail($id);
// validation
$rules = array(
'nik' => 'required|unique:users|min:16|max:16',
'nik' => [
'required',
'min:16',
'max:16',
Rule::unique('users')->ignore($userId),
],
'name' => 'required|min:5',
'password' => 'required|min:8',
'gender' => 'required',
@ -148,7 +156,9 @@ class UserController extends Controller
]);
// Update role for user
$user->removeRole($user->roles[0]->name);
if (isset($user->roles[0])) {
$user->removeRole($user->roles[0]->name);
}
$user->assignRole($request->role);
// Create Session message

View File

@ -98,6 +98,180 @@
<textarea class="form-control" name="question[{{ $questionSurveys->id }}][answer]" rows="3"
placeholder="Jawaban berupa teks atau esai" required></textarea>
</div>
@elseif (
$questionSurveys->type == 'Master' &&
json_decode($questionSurveys->questionDetails->question_value)[0] == 'Alamats')
<div class="col-lg-12 row">
<div class="mt-3 col-lg-6">
@php
// $master = 'App\Models\Master\\' . json_decode($questionSurveys->questionDetails->question_value)[0];
$master = json_decode(
$questionSurveys->questionDetails->question_value,
)[0];
$prov_unique_id =
'question-' . $questionSurveys->id . '-answer-provinsi';
@endphp
<select class="form-select" id="{{ $prov_unique_id }}"
name="question[{{ $questionSurveys->id }}][answer]" style="width:100%;"
required>
</select>
</div>
<div class="mt-3 col-lg-6">
@php
// $master = 'App\Models\Master\\' . json_decode($questionSurveys->questionDetails->question_value)[0];
$master = json_decode(
$questionSurveys->questionDetails->question_value,
)[0];
$kab_unique_id =
'question-' . $questionSurveys->id . '-answer-kabupaten';
@endphp
<select class="form-select" id="{{ $kab_unique_id }}"
name="question[{{ $questionSurveys->id }}][answer]" style="width:100%;"
required>
</select>
</div>
<div class="mt-3 col-lg-6">
@php
// $master = 'App\Models\Master\\' . json_decode($questionSurveys->questionDetails->question_value)[0];
$master = json_decode(
$questionSurveys->questionDetails->question_value,
)[0];
$kec_unique_id =
'question-' . $questionSurveys->id . '-answer-kecamatan';
@endphp
<select class="form-select" id="{{ $kec_unique_id }}"
name="question[{{ $questionSurveys->id }}][answer]" style="width:100%;"
required>
</select>
</div>
<div class="mt-3 col-lg-6">
@php
// $master = 'App\Models\Master\\' . json_decode($questionSurveys->questionDetails->question_value)[0];
$master = json_decode(
$questionSurveys->questionDetails->question_value,
)[0];
$kel_unique_id =
'question-' . $questionSurveys->id . '-answer-kelurahan';
@endphp
<select class="form-select" id="{{ $kel_unique_id }}"
name="question[{{ $questionSurveys->id }}][answer]" style="width:100%;"
required>
</select>
</div>
</div>
<script>
// Disabled
$('#{{ $kab_unique_id }}').prop('disabled', true).val(null).trigger('change');
$('#{{ $kec_unique_id }}').prop('disabled', true).val(null).trigger('change');
$('#{{ $kel_unique_id }}').prop('disabled', true).val(null).trigger('change');
$('#{{ $prov_unique_id }}').select2({
placeholder: 'Cari Provinsi',
ajax: {
url: '{{ URL::to('admin/surveys/cari/provinsi' . '?q=') }}',
dataType: 'json',
delay: 250,
processResults: function(data) {
return {
results: $.map(data, function(item) {
return {
text: item.name,
id: item.id + '-' + item.name
}
})
};
},
cache: true
}
});
$('#{{ $prov_unique_id }}').on('change', function() {
$('#{{ $kab_unique_id }}').prop('disabled', false);
$('#{{ $kab_unique_id }}').val(null).trigger('change');
$('#{{ $kec_unique_id }}').prop('disabled', true).val(null).trigger('change');
$('#{{ $kel_unique_id }}').prop('disabled', true).val(null).trigger('change');
});
$('#{{ $kab_unique_id }}').select2({
placeholder: 'Cari Kabupaten',
ajax: {
url: function() {
return "{{ route('admin.surveys.cari.kabupaten', ':provId') }}".replace(':provId', $(
'#{{ $prov_unique_id }}').val().split('-')[0]);
},
dataType: 'json',
delay: 250,
processResults: function(data) {
return {
results: $.map(data, function(item) {
return {
text: item.name,
id: item.id + '-' + item.name
}
})
};
},
cache: true
}
});
$('#{{ $kab_unique_id }}').on('change', function() {
$('#{{ $kec_unique_id }}').prop('disabled', false);
$('#{{ $kec_unique_id }}').val(null).trigger('change');
$('#{{ $kel_unique_id }}').prop('disabled', true).val(null).trigger('change');
});
$('#{{ $kec_unique_id }}').select2({
placeholder: 'Cari Kecamatan',
ajax: {
url: function() {
return "{{ route('admin.surveys.cari.kecamatan', ':kabId') }}".replace(':kabId', $(
'#{{ $kab_unique_id }}').val().split('-')[0]);
},
dataType: 'json',
delay: 250,
processResults: function(data) {
return {
results: $.map(data, function(item) {
return {
text: item.name,
id: item.id + '-' + item.name
}
})
};
},
cache: true
}
});
$('#{{ $kec_unique_id }}').on('change', function() {
$('#{{ $kel_unique_id }}').prop('disabled', false);
$('#{{ $kel_unique_id }}').val(null).trigger('change');
});
$('#{{ $kel_unique_id }}').select2({
placeholder: 'Cari Kelurahan',
ajax: {
url: function() {
return "{{ route('admin.surveys.cari.kelurahan', ':kecId') }}".replace(':kecId', $(
'#{{ $kec_unique_id }}').val().split('-')[0]);
},
dataType: 'json',
delay: 250,
processResults: function(data) {
return {
results: $.map(data, function(item) {
return {
text: item.name,
id: item.id + '-' + item.name
}
})
};
},
cache: true
}
});
</script>
@elseif ($questionSurveys->type == 'Master')
<div class="mt-3 col-lg-12">
@php

View File

@ -81,6 +81,180 @@
<textarea class="form-control" name="question[{{ $questionSurveys->id }}][answer]" rows="3"
placeholder="Jawaban berupa teks atau esai" required></textarea>
</div>
@elseif (
$questionSurveys->type == 'Master' &&
json_decode($questionSurveys->questionDetails->question_value)[0] == 'Alamats')
<div class="col-lg-12 row">
<div class="mt-3 col-lg-6">
@php
// $master = 'App\Models\Master\\' . json_decode($questionSurveys->questionDetails->question_value)[0];
$master = json_decode(
$questionSurveys->questionDetails->question_value,
)[0];
$prov_unique_id =
'question-' . $questionSurveys->id . '-answer-provinsi';
@endphp
<select class="form-select" id="{{ $prov_unique_id }}"
name="question[{{ $questionSurveys->id }}][answer]" style="width:100%;"
required>
</select>
</div>
<div class="mt-3 col-lg-6">
@php
// $master = 'App\Models\Master\\' . json_decode($questionSurveys->questionDetails->question_value)[0];
$master = json_decode(
$questionSurveys->questionDetails->question_value,
)[0];
$kab_unique_id =
'question-' . $questionSurveys->id . '-answer-kabupaten';
@endphp
<select class="form-select" id="{{ $kab_unique_id }}"
name="question[{{ $questionSurveys->id }}][answer]" style="width:100%;"
required>
</select>
</div>
<div class="mt-3 col-lg-6">
@php
// $master = 'App\Models\Master\\' . json_decode($questionSurveys->questionDetails->question_value)[0];
$master = json_decode(
$questionSurveys->questionDetails->question_value,
)[0];
$kec_unique_id =
'question-' . $questionSurveys->id . '-answer-kecamatan';
@endphp
<select class="form-select" id="{{ $kec_unique_id }}"
name="question[{{ $questionSurveys->id }}][answer]" style="width:100%;"
required>
</select>
</div>
<div class="mt-3 col-lg-6">
@php
// $master = 'App\Models\Master\\' . json_decode($questionSurveys->questionDetails->question_value)[0];
$master = json_decode(
$questionSurveys->questionDetails->question_value,
)[0];
$kel_unique_id =
'question-' . $questionSurveys->id . '-answer-kelurahan';
@endphp
<select class="form-select" id="{{ $kel_unique_id }}"
name="question[{{ $questionSurveys->id }}][answer]" style="width:100%;"
required>
</select>
</div>
</div>
<script>
// Disabled
$('#{{ $kab_unique_id }}').prop('disabled', true).val(null).trigger('change');
$('#{{ $kec_unique_id }}').prop('disabled', true).val(null).trigger('change');
$('#{{ $kel_unique_id }}').prop('disabled', true).val(null).trigger('change');
$('#{{ $prov_unique_id }}').select2({
placeholder: 'Cari Provinsi',
ajax: {
url: '{{ URL::to('admin/surveys/cari/provinsi' . '?q=') }}',
dataType: 'json',
delay: 250,
processResults: function(data) {
return {
results: $.map(data, function(item) {
return {
text: item.name,
id: item.id + '-' + item.name
}
})
};
},
cache: true
}
});
$('#{{ $prov_unique_id }}').on('change', function() {
$('#{{ $kab_unique_id }}').prop('disabled', false);
$('#{{ $kab_unique_id }}').val(null).trigger('change');
$('#{{ $kec_unique_id }}').prop('disabled', true).val(null).trigger('change');
$('#{{ $kel_unique_id }}').prop('disabled', true).val(null).trigger('change');
});
$('#{{ $kab_unique_id }}').select2({
placeholder: 'Cari Kabupaten',
ajax: {
url: function() {
return "{{ route('admin.surveys.cari.kabupaten', ':provId') }}".replace(':provId', $(
'#{{ $prov_unique_id }}').val().split('-')[0]);
},
dataType: 'json',
delay: 250,
processResults: function(data) {
return {
results: $.map(data, function(item) {
return {
text: item.name,
id: item.id + '-' + item.name
}
})
};
},
cache: true
}
});
$('#{{ $kab_unique_id }}').on('change', function() {
$('#{{ $kec_unique_id }}').prop('disabled', false);
$('#{{ $kec_unique_id }}').val(null).trigger('change');
$('#{{ $kel_unique_id }}').prop('disabled', true).val(null).trigger('change');
});
$('#{{ $kec_unique_id }}').select2({
placeholder: 'Cari Kecamatan',
ajax: {
url: function() {
return "{{ route('admin.surveys.cari.kecamatan', ':kabId') }}".replace(':kabId', $(
'#{{ $kab_unique_id }}').val().split('-')[0]);
},
dataType: 'json',
delay: 250,
processResults: function(data) {
return {
results: $.map(data, function(item) {
return {
text: item.name,
id: item.id + '-' + item.name
}
})
};
},
cache: true
}
});
$('#{{ $kec_unique_id }}').on('change', function() {
$('#{{ $kel_unique_id }}').prop('disabled', false);
$('#{{ $kel_unique_id }}').val(null).trigger('change');
});
$('#{{ $kel_unique_id }}').select2({
placeholder: 'Cari Kelurahan',
ajax: {
url: function() {
return "{{ route('admin.surveys.cari.kelurahan', ':kecId') }}".replace(':kecId', $(
'#{{ $kec_unique_id }}').val().split('-')[0]);
},
dataType: 'json',
delay: 250,
processResults: function(data) {
return {
results: $.map(data, function(item) {
return {
text: item.name,
id: item.id + '-' + item.name
}
})
};
},
cache: true
}
});
</script>
@elseif ($questionSurveys->type == 'Master')
<div class="mt-3 col-lg-12">
@php

View File

@ -54,7 +54,8 @@
<option value="">Pilih Level Pengguna</option>
@forelse ($roles as $role)
<option value="{{ $role->name }}"
{{ $user->roles[0]->name == $role->name ? 'selected' : '' }}>{{ $role->name }}
{{ isset($user->roles[0]) ? ($user->roles[0]->name == $role->name ? 'selected' : '') : '' }}>
{{ $role->name }}
</option>
@empty
<option value="">Data Kosong</option>

View File

@ -112,9 +112,15 @@ Route::group(['prefix' => 'admin', 'middleware' => ['role:Admin|Staff|Responden'
Route::get('surveys', [SurveyController::class, 'index'])->name('admin.surveys');
Route::get('surveys/{id}', [SurveyController::class, 'show'])->name('admin.surveys');
Route::get('surveys/cari-responden/{survey_id}', [SurveyController::class, "cariResponden"])->name("admin.surveys.cari-responden");
Route::get('surveys/cari-master/{master}', [SurveyController::class, "cariMaster"])->name("admin.surveys.cari-master");
Route::get('surveys/preview-user/{id}', [SurveyController::class, 'preview_user'])->name('admin.surveys.preview-user');
// Search master with ajax
Route::get('surveys/cari-master/{master}', [SurveyController::class, "cariMaster"])->name("admin.surveys.cari-master");
Route::get('surveys/cari/provinsi', [SurveyController::class, "cariProvinsi"])->name("admin.surveys.cari.provinsi");
Route::get('surveys/cari/kabupaten/{provId}', [SurveyController::class, "cariKabupaten"])->name("admin.surveys.cari.kabupaten");
Route::get('surveys/cari/kecamatan/{kabId}', [SurveyController::class, "cariKecamatan"])->name("admin.surveys.cari.kecamatan");
Route::get('surveys/cari/kelurahan/{kecId}', [SurveyController::class, "cariKelurahan"])->name("admin.surveys.cari.kelurahan");
// Surveys (Answers)
Route::post('surveys/question-answers', [SurveyController::class, 'addAnswers'])->name('admin.surveys.question-answers');
});