main
ilhamwara 2025-03-17 15:14:01 +07:00
parent 19667aeb83
commit 5fd898ce44
20 changed files with 1525 additions and 62 deletions

View File

@ -5,7 +5,18 @@ use App\Models\Master\MasterAccessMenu;
use App\Models\Kuesioner; use App\Models\Kuesioner;
use App\Models\Master\FormKriteria; use App\Models\Master\FormKriteria;
use App\Models\Penilaian; use App\Models\Penilaian;
if (!function_exists('checkPenilaian')) {
/**
* @param $val
*
* @return string
*/
function checkPenilaian($page_number)
{
$penilaian = Penilaian::where('page_number',$page_number)->where('ms_sekolah_id',session('sekolah_id'))->first();
return @$penilaian ? true : false;
}
}
if (!function_exists('hitungSkor')) { if (!function_exists('hitungSkor')) {
/** /**
* @param $val * @param $val
@ -358,7 +369,9 @@ if (!function_exists('formKriteria')) {
$html = ''; $html = '';
foreach($kriteria as $keyKriteria => $data){ foreach($kriteria as $keyKriteria => $data){
$penilaian = Penilaian::where('key',$data->key)->first(); $penilaian = Penilaian::where('key',$data->key)->where('ms_sekolah_id',session('sekolah_id'))->first();
// dd();
$html .= '<div class="card mb-2 removeFormKriteria">'; $html .= '<div class="card mb-2 removeFormKriteria">';
$html .= '<div class="card-body">'; $html .= '<div class="card-body">';
@ -366,44 +379,50 @@ if (!function_exists('formKriteria')) {
//QUESTION //QUESTION
if($data->type == 'textarea'){ if($data->type == 'textarea'){
$value = json_decode(@$penilaian->value);
$html .= '<div class="form-group m-2">'; $html .= '<div class="form-group m-2">';
$html .= '<textarea class="form-control is-required" name="input_'.$data->key.'"></textarea>'; $html .= '<textarea class="form-control is-required" name="input_'.$data->key.'">'.@$value.'</textarea>';
$html .= '</div>'; $html .= '</div>';
}elseif($data->type == 'freetext'){ }elseif($data->type == 'freetext'){
$value = json_decode(@$penilaian->value);
$html .= '<div class="form-group m-2">'; $html .= '<div class="form-group m-2">';
$html .= '<input type="text" class="form-control is-required" name="input_'.$data->key.'">'; $html .= '<input type="text" class="form-control is-required" name="input_'.$data->key.'" value="'.@$value.'">';
$html .= '</div>'; $html .= '</div>';
}elseif($data->type == 'checkbox'){ }elseif($data->type == 'checkbox'){
$option = json_decode($data->option); $option = json_decode($data->option);
$value = json_decode(@$penilaian->value);
foreach($option as $keyOption => $dataOption){ foreach($option as $keyOption => $dataOption){
$key = 'number_'.$keyKriteria.'_'.$keyOption; $key = 'number_'.$keyKriteria.'_'.$keyOption;
$html .= '<div class="custom-control custom-checkbox m-2">'; $html .= '<div class="custom-control custom-checkbox m-2">';
$html .= '<input type="checkbox" class="custom-control-input is-required" id="'.$key.'" value="'.$dataOption.'" name="input_'.$data->key.'[]">'; $html .= '<input type="checkbox" '.(@$value ? in_array($dataOption, @$value) ? 'checked' : '' : '').' class="custom-control-input is-required" id="'.$key.'" value="'.$dataOption.'" name="input_'.$data->key.'[]">';
$html .= '<label class="custom-control-label" for="'.$key.'">'.$dataOption.'</label>'; $html .= '<label class="custom-control-label" for="'.$key.'">'.$dataOption.'</label>';
$html .= '</div>'; $html .= '</div>';
} }
}elseif($data->type == 'radio_button'){ }elseif($data->type == 'radio_button'){
$option = json_decode($data->option); $option = json_decode($data->option);
$value = json_decode(@$penilaian->value);
foreach($option as $keyOption => $dataOption){ foreach($option as $keyOption => $dataOption){
$key = 'number_'.$keyKriteria.'_'.$keyOption; $key = 'number_'.$keyKriteria.'_'.$keyOption;
$html .= '<div class="custom-control custom-radio m-2">'; $html .= '<div class="custom-control custom-radio m-2">';
$html .= '<input type="radio" class="custom-control-input is-required" id="'.$key.'" value="'.$dataOption.'" name="input_'.$data->key.'">'; $html .= '<input '.(@$value == $dataOption ? 'checked' : '').' type="radio" class="custom-control-input is-required" id="'.$key.'" value="'.$dataOption.'" name="input_'.$data->key.'">';
$html .= '<label class="custom-control-label" for="'.$key.'">'.$dataOption.'</label>'; $html .= '<label class="custom-control-label" for="'.$key.'">'.$dataOption.'</label>';
$html .= '</div>'; $html .= '</div>';
} }
}elseif($data->type == 'number'){ }elseif($data->type == 'number'){
$value = json_decode(@$penilaian->value);
$html .= '<div class="form-group m-2">'; $html .= '<div class="form-group m-2">';
$html .= '<input type="text" class="form-control is-required numberInput" name="input_'.$data->key.'">'; $html .= '<input type="text" class="form-control is-required numberInput" name="input_'.$data->key.'" value="'.@$value.'">';
$html .= '</div>'; $html .= '</div>';
} }
@ -411,13 +430,17 @@ if (!function_exists('formKriteria')) {
$html .= '</div>'; $html .= '</div>';
if($data->active_lainnya == 1){ if($data->active_lainnya == 1){
$lainnya = Penilaian::where('key','lainnya')->where('page_number',$page_number)->where('ms_sekolah_id',session('sekolah_id'))->first();
$valueLainnya = json_decode(@$lainnya->value);
// dd($valueLainnya);
$html .= '<div class="card mb-2 removeFormKriteria">'; $html .= '<div class="card mb-2 removeFormKriteria">';
$html .= '<div class="card-body">'; $html .= '<div class="card-body">';
$html .= '<h6><b>'.$data->judul_lainnya.'</b></h6>'; $html .= '<h6><b>'.$data->judul_lainnya.'</b></h6>';
for($i = 1; $i <= $data->number_answer_lainnya; $i++){ for($i = 1; $i <= $data->number_answer_lainnya; $i++){
$html .= '<div class="form-group m-2">'; $html .= '<div class="form-group m-2">';
$html .= '<input type="text" class="form-control" placeholder="Jawaban" name="input_lainnya[]">'; $html .= '<input type="text" value="'.@$valueLainnya[$i-1].'" class="form-control" placeholder="Jawaban" name="input_lainnya[]">';
$html .= '</div>'; $html .= '</div>';
} }
$html .= '</div>'; $html .= '</div>';
@ -425,12 +448,15 @@ if (!function_exists('formKriteria')) {
} }
} }
$link = Penilaian::where('key','link_grdive')->where('page_number',$page_number)->where('ms_sekolah_id',session('sekolah_id'))->first();
$valueLink = json_decode(@$link->value);
$html .= '<div class="card mb-2 removeFormKriteria">'; $html .= '<div class="card mb-2 removeFormKriteria">';
$html .= '<input type="hidden" name="key" value="'.encode_id($page_number).'">'; $html .= '<input type="hidden" name="key" value="'.encode_id($page_number).'">';
$html .= '<div class="card-body">'; $html .= '<div class="card-body">';
$html .= '<h6><b>Link Google Drive (folder/File penyimpanan bukti)</b></h6>'; $html .= '<h6><b>Link Google Drive (folder/File penyimpanan bukti)</b></h6>';
$html .= '<div class="form-group">'; $html .= '<div class="form-group">';
$html .= '<input type="text" class="form-control" name="input_link_grdive" placeholder="Link Google Drive (folder penyimpanan bukti)">'; $html .= '<input type="text" class="form-control" name="input_link_grdive" placeholder="Link Google Drive (folder penyimpanan bukti)" value="'.@$valueLink.'">';
$html .= '<small><i>Contoh link : https://example.com</i></small>'; $html .= '<small><i>Contoh link : https://example.com</i></small>';
$html .= '</div>'; $html .= '</div>';
$html .= '</div>'; $html .= '</div>';

View File

@ -9,6 +9,7 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use App\Models\ProfileSekolah as Profile; use App\Models\ProfileSekolah as Profile;
use App\Models\Kuesioner; use App\Models\Kuesioner;
use App\Models\Master\Provinsi;
class KuesionerController extends Controller class KuesionerController extends Controller
{ {
@ -18,34 +19,98 @@ class KuesionerController extends Controller
public function index() public function index()
{ {
permission('is_read', $this->route, 'module',true); permission('is_read', $this->route, 'module',true);
if(auth()->user()->group->alias != 'administrator'){
return redirect('kuesioner/update');
}
$data['provinsi'] = Provinsi::where('kode_wilayah','010000')->get();
$data['title'] = 'Kuesioner Leveling';
$data['route'] = $this->route;
return view($this->template.'.index', $data);
}
public function grid(Request $request)
{
$kuesioner = Kuesioner::orderBy('created_at','DESC')->get();
foreach ($kuesioner as $key => $row) {
$action = '';
if((permission('is_create', $this->route.'.*','module',false)) || (permission('is_update', $this->route.'.*','module',false))){
$action .= '<a href="'.url('kuesioner/update/'.encode_id($row->ms_sekolah_id)).'" data-toggle="tooltip" title="View Data" class="btn btn-xs btn-block btn-primary"><i class="fal fa-eye text-white"></i></a>';
}
if($row->level == 0){
$penghargaan = '<i class="fal fa-trophy"></i>&nbsp;Belum Pernah';
}elseif($row->level == 1){
$penghargaan = '<i class="fal fa-trophy"></i>&nbsp;Adiwiyata Kab/Kota';
}elseif($row->level == 2){
$penghargaan = '<i class="fal fa-trophy"></i>&nbsp;Adiwiyata Provinsi';
}elseif($row->level == 3){
$penghargaan = '<i class="fal fa-trophy"></i>&nbsp;Adiwiyata Nasional';
}elseif($row->level == 4){
$penghargaan = '<i class="fal fa-trophy"></i>&nbsp;Adiwiyata Mandiri';
}
$_data[] = [
'no' => $key+1,
'id' => encode_id($row->id),
'npsn' => $row->sekolah->npsn,
'nama' => $row->sekolah->nama_sekolah,
'status_level' => '<span style="width:100%" class="badge badge-secondary">Level '.levelAdiwiyata($row->npsn).'</span>',
'wilayah' => $row->sekolah->kabupaten->name,
'alamat_sekolah' => $row->sekolah->alamat_sekolah,
'tingkat_sekolah' => $row->sekolah->tingkat->name,
'status_sekolah' => $row->sekolah->status,
'alamat_sekolah' => $row->profile->alamat_sekolah,
'penghargaan' => $penghargaan,
'action' => $action,
];
}
return response()->json($_data);
}
public function update($id = null)
{
permission('is_read', $this->route, 'module',true);
$keyId = @$id ? decode_id(@$id) : session('sekolah_id');
$data['title'] = 'Kuesioner Leveling'; $data['title'] = 'Kuesioner Leveling';
$data['route'] = $this->route; $data['route'] = $this->route;
$kuesioner = Kuesioner::where('user_id',auth()->user()->id)->where('tahun',date('Y'))->first(); $kuesioner = Kuesioner::where('ms_sekolah_id',$keyId)->where('tahun',date('Y'))->first();
if(@$kuesioner){ if(@$kuesioner){
$data['kuesioner'] = $kuesioner; $data['kuesioner'] = $kuesioner;
}else{ }else{
$kuesioner = Kuesioner::where('user_id',auth()->user()->id)->where('tahun',(date('Y')-1))->first(); $kuesioner = Kuesioner::where('ms_sekolah_id',$keyId)->where('tahun',(date('Y')-1))->first();
$data['kuesioner'] = $kuesioner; $data['kuesioner'] = $kuesioner;
} }
$media = json_decode(@$kuesioner->media); $data['nama_sekolah'] = $kuesioner->sekolah->nama_sekolah;
$data['selectedMediaValues'] = collect($media)->pluck('value')->toArray(); // Ambil value yang dipilih $data['npsn'] = $kuesioner->sekolah->npsn;
$data['selectedMediaTexts'] = collect($media)->keyBy('name'); $data['status'] = $kuesioner->sekolah->status;
$data['alamat_sekolah'] = $kuesioner->profile->alamat_sekolah;
$data['tingkat'] = $kuesioner->profile->tingkat->name;
$materi = json_decode(@$kuesioner->materi); $media = json_decode(@$kuesioner->media);
$data['selectedMateriValues'] = collect($materi)->pluck('value')->toArray(); // Ambil value yang dipilih $data['selectedMediaValues'] = collect($media)->pluck('value')->toArray(); // Ambil value yang dipilih
$data['selectedMateriTexts'] = collect($materi)->keyBy('name'); $data['selectedMediaTexts'] = collect($media)->keyBy('name');
$komitmen = json_decode(@$kuesioner->komitmen); $materi = json_decode(@$kuesioner->materi);
$data['selectedKomitmenValues'] = collect($komitmen)->pluck('value')->toArray(); // Ambil value yang dipilih $data['selectedMateriValues'] = collect($materi)->pluck('value')->toArray(); // Ambil value yang dipilih
$data['selectedKomitmenTexts'] = collect($komitmen)->keyBy('name'); $data['selectedMateriTexts'] = collect($materi)->keyBy('name');
$kegiatan_lingkungan = json_decode(@$kuesioner->kegiatan_lingkungan); $komitmen = json_decode(@$kuesioner->komitmen);
$data['selectedKegiatanLingkunganValues'] = collect($kegiatan_lingkungan)->pluck('value')->toArray(); // Ambil value yang dipilih $data['selectedKomitmenValues'] = collect($komitmen)->pluck('value')->toArray(); // Ambil value yang dipilih
$data['selectedKegiatanLingkunganTexts'] = collect($kegiatan_lingkungan)->keyBy('name'); $data['selectedKomitmenTexts'] = collect($komitmen)->keyBy('name');
$pihak_kegiatan_lingkungan = json_decode(@$kuesioner->pihak_kegiatan_lingkungan); $kegiatan_lingkungan = json_decode(@$kuesioner->kegiatan_lingkungan);
$data['selectedKegiatanLingkunganValues'] = collect($kegiatan_lingkungan)->pluck('value')->toArray(); // Ambil value yang dipilih
$data['selectedKegiatanLingkunganTexts'] = collect($kegiatan_lingkungan)->keyBy('name');
$pihak_kegiatan_lingkungan = json_decode(@$kuesioner->pihak_kegiatan_lingkungan);
$data['selectedPihakKegiatanLingkunganValues'] = collect($pihak_kegiatan_lingkungan)->pluck('value')->toArray(); // Ambil value yang dipilih $data['selectedPihakKegiatanLingkunganValues'] = collect($pihak_kegiatan_lingkungan)->pluck('value')->toArray(); // Ambil value yang dipilih
$data['selectedPihakKegiatanLingkunganTexts'] = collect($pihak_kegiatan_lingkungan)->keyBy('name'); $data['selectedPihakKegiatanLingkunganTexts'] = collect($pihak_kegiatan_lingkungan)->keyBy('name');
@ -216,7 +281,8 @@ class KuesionerController extends Controller
} }
$insert = new Kuesioner; $insert = new Kuesioner;
$insert->user_id = auth()->user()->id; $insert->ms_sekolah_id = session('sekolah_id');
$insert->created_by = auth()->user()->id;
$insert->npsn = session('npsn'); $insert->npsn = session('npsn');
$insert->level = @$request->level; $insert->level = @$request->level;
$insert->tim_adiwiyata = @$request->tim_adiwiyata; $insert->tim_adiwiyata = @$request->tim_adiwiyata;

View File

@ -24,6 +24,27 @@ class KriteriaController extends Controller
return view($this->template.'.form',$data); return view($this->template.'.form',$data);
} }
public function resume()
{
// permission('is_read', $this->route, 'module',true);
$data['title'] = $this->title;
$data['route'] = $this->route;
$data['page'] = FormKriteria::select('page_number')->groupBy('page_number')->orderBy('page_number','ASC')->pluck('page_number')->toArray();
return view($this->template.'.resume',$data);
}
public function progress()
{
// permission('is_read', $this->route, 'module',true);
$data['title'] = $this->title;
$data['route'] = $this->route;
$data['page'] = FormKriteria::select('page_number')->groupBy('page_number')->orderBy('page_number','ASC')->pluck('page_number')->toArray();
return view($this->template.'.progress',$data);
}
public function store(Request $request) public function store(Request $request)
{ {
// dd(); // dd();
@ -104,6 +125,8 @@ class KriteriaController extends Controller
]); ]);
} }
} }
return response()->json(['status' => true,'data' => $_value,'message' => 'Berhasil Update Data','page' => $data['key']]);
} }

View File

@ -8,6 +8,8 @@ use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use App\Models\ProfileSekolah as Profile; use App\Models\ProfileSekolah as Profile;
use App\Models\Master\Sekolah;
use App\Models\Master\Provinsi;
class ProfileController extends Controller class ProfileController extends Controller
{ {
@ -45,10 +47,45 @@ class ProfileController extends Controller
return view($this->template.'.sekolah', $data); return view($this->template.'.sekolah', $data);
}else{ }else{
$data['provinsi'] = Provinsi::where('kode_wilayah','010000')->get();
return view($this->template.'.admin', $data); return view($this->template.'.admin', $data);
} }
} }
public function grid(Request $request)
{
$profile = Profile::groupBy('ms_sekolah_id')->pluck('ms_sekolah_id')->toArray();
$sekolah = Sekolah::whereIn('MsSekolahId',$profile)->get();
foreach ($sekolah as $key => $row) {
$action = '';
if((permission('is_create', $this->route.'.*','module',false)) || (permission('is_update', $this->route.'.*','module',false))){
$action .= '<a href="'.url('profile-sekolah/update/'.encode_id($row->id)).'" data-toggle="tooltip" title="Edit Data" class="btn btn-xs btn-block btn-primary"><i class="fal fa-pencil text-white"></i></a>';
}
$_data[] = [
'no' => $key+1,
'id' => encode_id($row->id),
'npsn' => $row->npsn,
'nama' => $row->nama_sekolah,
'status_level' => '<span class="badge badge-success">Level '.levelAdiwiyata($row->npsn).'</span>',
'wilayah' => $row->kabupaten->name,
'tanggal_level' => '-',
'penghargaan' => '',
'dok' => '',
'kriteria' => '',
'jenis_usulan' => 'Nasional',
'usulkan_csa' => 'Diusulkan/ Proses Penilaian',
'perpanjang_csa' => '-',
'action' => $action,
];
}
return response()->json($_data);
}
public function store(Request $request) public function store(Request $request)
{ {
permission('is_update', $this->route, 'module',true); permission('is_update', $this->route, 'module',true);

View File

@ -13,7 +13,7 @@ class Kuesioner extends Model
protected $primaryKey = 'KuesionerId'; protected $primaryKey = 'KuesionerId';
protected $fillable = [ protected $fillable = [
'user_id', 'ms_sekolah_id',
'level', 'level',
'tim_adiwiyata', 'tim_adiwiyata',
'info_pblhs', 'info_pblhs',
@ -27,5 +27,16 @@ class Kuesioner extends Model
'link_sk_adiwiyata', 'link_sk_adiwiyata',
'tim_adiwiyata_nomor_sk', 'tim_adiwiyata_nomor_sk',
'tim_adiwiyata_link', 'tim_adiwiyata_link',
'created_by',
]; ];
public function sekolah()
{
return $this->belongsTo(\App\Models\Master\Sekolah::class,'ms_sekolah_id','MsSekolahId');
}
public function profile()
{
return $this->belongsTo(\App\Models\ProfileSekolah::class,'ms_sekolah_id','ms_sekolah_id');
}
} }

View File

@ -23,4 +23,24 @@ class Sekolah extends Model
'lat', 'lat',
'long', 'long',
]; ];
public function provinsi()
{
return $this->belongsTo(\App\Models\Master\Provinsi::class,'ms_provinsi_id','MsProvinsiId');
}
public function tingkat()
{
return $this->belongsTo(\App\Models\Master\MasterTingkatSekolah::class,'ms_tingkat_sekolah_id','MsTingkatSekolahId');
}
public function kabupaten()
{
return $this->belongsTo(\App\Models\Master\Kabupaten::class,'ms_kabupaten_id','MsKabupatenId');
}
public function kecamatan()
{
return $this->belongsTo(\App\Models\Master\Kecamatan::class,'ms_kecamatan_id','MsKecamatanId');
}
} }

View File

@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Usulan extends Model
{
use HasFactory;
}

View File

@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class UsulanApproval extends Model
{
use HasFactory;
}

View File

@ -13,7 +13,7 @@ return new class extends Migration
{ {
Schema::create('kuesioner', function (Blueprint $table) { Schema::create('kuesioner', function (Blueprint $table) {
$table->id('KuesionerId'); $table->id('KuesionerId');
$table->integer('user_id'); $table->integer('ms_sekolah_id');
$table->string('npsn')->nullable(); $table->string('npsn')->nullable();
$table->integer('level')->default(0); $table->integer('level')->default(0);
$table->integer('tim_adiwiyata')->default(0); $table->integer('tim_adiwiyata')->default(0);
@ -26,9 +26,11 @@ return new class extends Migration
$table->year('tahun')->nullable(); $table->year('tahun')->nullable();
$table->year('tahun_penghargaan')->nullable(); $table->year('tahun_penghargaan')->nullable();
$table->text('link_sk_adiwiyata')->nullable(); $table->text('link_sk_adiwiyata')->nullable();
$table->integer('created_by');
$table->timestampsTz(); $table->timestampsTz();
$table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete(); $table->foreign('created_by')->references('id')->on('users')->cascadeOnDelete();
$table->foreign('ms_sekolah_id')->references('MsSekolahId')->on('ms_sekolah')->cascadeOnDelete();
}); });
} }

View File

@ -0,0 +1,27 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('usulans', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('usulans');
}
};

View File

@ -0,0 +1,27 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('usulan_approvals', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('usulan_approvals');
}
};

View File

@ -19,18 +19,24 @@
<div class="ml-auto d-flex"> <div class="ml-auto d-flex">
<div> <div>
<a href="#" data-toggle="dropdown" title="drlantern@gotbootstrap.com" class="header-icon d-flex align-items-center justify-content-center ml-2"> <a href="#" data-toggle="dropdown" title="drlantern@gotbootstrap.com" class="header-icon d-flex align-items-center justify-content-center">
<img src="{{asset('assets/img/demo/avatars/avatar-admin.png')}}" class="profile-image rounded-circle" alt="Administrator"> <div class="rounded-circle bg-fusion-50 width-3 height-3 d-inline-block bg-secondary d-flex align-items-center justify-content-center">
<i class="fal fa-user fa-1x"></i>
</div>
<!-- <img src="{{asset('assets/img/demo/avatars/avatar-admin.png')}}" class="profile-image rounded-circle" alt="Administrator"> -->
</a> </a>
<div class="dropdown-menu dropdown-menu-animated dropdown-lg"> <div class="dropdown-menu dropdown-menu-animated dropdown-lg">
<div class="dropdown-header bg-trans-gradient d-flex flex-row py-4 rounded-top"> <div class="dropdown-header d-flex flex-row py-4 rounded-top" style="background: #D9EAFD !important;">
<div class="d-flex flex-row align-items-center mt-1 mb-1 color-white"> <div class="d-flex flex-row align-items-center mt-1 mb-1 color-black">
<span class="mr-2"> <span class="mr-2">
<img src="{{asset('assets/img/demo/avatars/avatar-admin.png')}}" class="rounded-circle profile-image" alt="Administrator"> <div class="rounded-circle bg-fusion-50 width-3 height-3 d-inline-block bg-secondary d-flex align-items-center justify-content-center">
<i class="fal fa-user fa-1x"></i>
</div>
<!-- <img src="{{asset('assets/img/demo/avatars/avatar-admin.png')}}" class="rounded-circle profile-image" alt="Administrator"> -->
</span> </span>
<div class="info-card-text"> <div class="info-card-text">
<div class="fs-lg text-truncate text-truncate-lg">Administrator</div> <div class="fs-lg text-truncate text-truncate-lg">{{auth()->user()->name}}</div>
<span class="text-truncate text-truncate-md opacity-80">admin@sekolahadiwiyata.dlh.go.id</span> <span class="text-truncate text-truncate-md opacity-80">{{session('email')}}</span>
</div> </div>
</div> </div>
</div> </div>

View File

@ -30,7 +30,11 @@
</div> </div>
<br> <br>
<br> <br>
<span><b>{{session('name')}}</b><br>{{session('group_name')}}</span> <span><b>{{session('name')}}</b></span>
<br>
<span class="badge badge-success">
{{session('group_name')}}
</span>
</div> </div>
<ul id="js-nav-menu" class="nav-menu"> <ul id="js-nav-menu" class="nav-menu">
<li class="{{activeMenuClass('modules.dashboard') ? 'active' : ''}}"> <li class="{{activeMenuClass('modules.dashboard') ? 'active' : ''}}">

View File

@ -63,21 +63,21 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td colspan="2"><h5 class="text-success">NPSN: {{session('npsn')}}</h5></td> <td colspan="2"><h5 class="text-success">NPSN: {{@$npsn}}</h5></td>
<td rowspan="4" style="vertical-align: top;"> <td rowspan="4" style="vertical-align: top;">
<div class="level rounded-plus bg-fusion-50 width-1 height-1 d-inline-block bg-success"> <div class="level rounded-plus bg-fusion-50 width-1 height-1 d-inline-block bg-success">
<h4>Level {{levelAdiwiyata(session('npsn'))}}</h4> <h4>Level {{levelAdiwiyata(@$npsn)}}</h4>
</div> </div>
</td> </td>
</tr> </tr>
<tr> <tr>
<td colspan="2"><h4><b>{{session('name')}}</b></h4></td> <td colspan="2"><h4><b>{{@$nama_sekolah}}</b></h4></td>
</tr> </tr>
<tr> <tr>
<td colspan="2"><span class="badge badge-primary">{{session('tingkat_sekolah')}}</span> <span class="badge badge-success">{{session('status_sekolah')}}</span></td> <td colspan="2"><span class="badge badge-primary">{{@$tingkat}}</span> <span class="badge badge-success">{{$status}}</span></td>
</tr> </tr>
<tr> <tr>
<td colspan="2"><p>{{session('alamat_sekolah')}}</p></td> <td colspan="2"><p>{{@$alamat_sekolah}}</p></td>
</tr> </tr>
</table> </table>
</div> </div>

View File

@ -0,0 +1,270 @@
@extends('layouts.master')
@section('page-css')
<link rel="stylesheet" media="screen, print" href="{{asset('assets/css/datagrid/datatables/datatables.bundle.css')}}">
<link rel="stylesheet" href="{{asset('assets/css/bootstrap-table.min.css')}}">
@endsection
@section('content')
<div class="subheader">
<h1 class="subheader-title">
<i class='subheader-icon fal fa-building'></i> {{$title}}
</h1>
</div>
<div class="row">
<div class="col-lg-12">
<div class="accordion" id="accordionExample">
<div class="card">
<div class="card-header" id="headingOne">
<h2 class="mb-0">
<button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
<i class="fal fa-filter"></i>&nbsp;Filter
</button>
</h2>
</div>
<div id="collapseOne" class="collapse" aria-labelledby="headingOne" data-parent="#accordionExample">
<div class="card-body">
<div class="row">
<div class="col-md-12 mb-2">
<div class="row">
<div class="col-md-3">
<div class="form-group">
<select class="form-control select2">
<option value="">-- PILIH TINGKAT --</option>
<option value="1">SD</option>
<option value="2">SMP</option>
<option value="3">SMA</option>
<option value="4">SMK</option>
<option value="5">MI</option>
<option value="6">MTs</option>
<option value="7">MA</option>
<option value="8">SD LB</option>
<option value="9">SMP LB</option>
<option value="10">SMA LM</option>
<option value="11">SLB Khusus</option>
</select>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<select class="form-control select2">
<option value="">-- PILIH STATUS --</option>
<option value="Negeri">Negeri</option>
<option value="Swasta">Swasta</option>
</select>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<select class="form-control select2">
<option value="">-- PILIH LEVEL --</option>
<option value="1"> LEVEL 1</option>
<option value="2"> LEVEL 2</option>
<option value="3"> LEVEL 3</option>
<option value="4"> LEVEL 4</option>
<option value="5"> LEVEL 5</option>
</select>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<select class="form-control select2">
<option value="">-- PILIH JENIS USULAN --</option>
<option value="1">Kab/Kota</option>
<option value="2">Provinsi</option>
<option value="3">Nasional</option>
<option value="4">Mandiri</option>
</select>
</div>
</div>
</div>
</div>
<div class="col-md-12 mb-2">
<div class="row">
<div class="col-md-3">
<div class="form-group">
<select name="provinsi" class="form-control select2" id="provinsi">
<option value="0">- PILIH PROVINSI -</option>
@foreach($provinsi as $datProv)
<option value="{{encode_id($datProv->MsProvinsiId)}}">{{$datProv->name}}</option>
@endforeach
</select>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<select name="kabupaten" class="form-control select2" id="kabupaten">
<option value="0">- PILIH KABUPATEN/KOTA -</option>
</select>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<select name="kecamatan" class="form-control select2" id="kecamatan" required>
<option value="0">- PILIH KECAMATAN -</option>
</select>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<button class="btn btn-warning btn-block"><i class="fal fa-search"></i>&nbsp;Cari Data</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="panel-4" class="panel">
<div class="panel-container show">
<div class="panel-content">
<div id="toolbar"></div>
<table class="table table-bordered table-hover table-striped w-100"
data-search="true"
data-toggle="table"
data-pagination="true"
data-toolbar="#toolbar"
data-show-refresh="false"
data-url="{{route($route.'.grid')}}"
data-sort-name="ids"
data-sort-order="desc"
data-page-size="10"
data-id-field="id"
id="grid-data">
<thead class="text-white">
<tr class="table-primary">
<th data-field="action">#</th>
<th data-field="no">No</th>
<th data-field="status_level">Status Level</th>
<th data-field="npsn">NPSN</th>
<th data-field="nama">Nama Sekolah</th>
<th data-field="wilayah">Wilayah</th>
<th data-field="tingkat_sekolah">Tingkat Sekolah</th>
<th data-field="status_sekolah">Status Sekolah</th>
<th data-field="alamat_sekolah">Alamat</th>
<th data-field="penghargaan">Penghargaan Terakhir</th>
</tr>
</thead>
<tbody></tbody>
</table>
<!-- datatable end -->
</div>
</div>
</div>
</div>
</div>
@endsection
@section('page-js')
<script src="{{asset('assets/js/datagrid/datatables/datatables.bundle.js')}}"></script>
<script src="{{asset('assets/js/bootstrap-table.min.js')}}"></script>
<script type="text/javascript">
$('select').on("select2:selecting", function(e) {
var selectorOrigin = this.id;
var id = e.params.args.data.id;
if(selectorOrigin=='provinsi'){
$('#loading-spinner').show();
clear('kabupaten');
selector = 'kabupaten';
url_to = 'kabupaten';
getSelect(id, selector, url_to);
}
if(selectorOrigin=='kabupaten'){
$('#loading-spinner').show();
clear('kecamatan');
selector = 'kecamatan';
url_to = 'kecamatan';
getSelect(id, selector, url_to);
}
if(selectorOrigin=='kecamatan'){
$('#loading-spinner').show();
clear('sekolah');
selector = 'sekolah';
url_to = 'sekolah';
getSelect(id, selector, url_to);
}
});
function clear(elementId) {
$('#' + elementId).empty();
$('#' + elementId).select2();
}
function getSelect(id, selectTo, urlTo, selected = "") {
id = id;
var base_url = "{{url('/')}}";
//alert(id);
destino = "#" + selectTo;
valor = $('#' + id).find(":selected").val();
$.ajax({
method: "POST",
url: base_url + "/get/" + urlTo,
data: {
_token: '{{csrf_token()}}',
id: id
}
}).done(function(msg) {
obj = msg.data;
if (obj.length > 0) {
//Clear the current options
$(destino).empty();
if(selectTo=='kabupaten'){
$(destino).append('<option value="">-PILIH KABUPATEN/KOTA-</option>').select2("val", "0");
$.each(obj, function(index) {
value = obj[index].id;
text = obj[index].name;
$(destino).append('<option value=' + value + '>' + text + '</option>');
});
console.log(selected)
if (selected) {
$(destino).val(selected).trigger('change');
selected = "";
}
}
if(selectTo=='kecamatan'){
$(destino).append('<option value="">-PILIH KECAMATAN-</option>').select2("val", "0");
$.each(obj, function(index) {
value = obj[index].id;
text = obj[index].name;
$(destino).append('<option value=' + value + '>' + text + '</option>');
});
console.log(selected)
if (selected) {
$(destino).val(selected).trigger('change');
selected = "";
}
}
} else {
if(selectTo=='provinsi'){
$(destino).empty().append('<option value="0">-PILIH PROVINSI-</option>').select2("val", "0");
}
if(selectTo=='kabupaten'){
$(destino).empty().append('<option value="0">-PILIH KABUPATEN/KOTA-</option>').select2("val", "0");
}
if(selectTo=='kecamatan'){
$(destino).empty().append('<option value="0">-PILIH KECAMATAN-</option>').select2("val", "0");
}
}
$('#loading-spinner').hide();
});
return false;
}
</script>
@endsection

View File

@ -6,15 +6,122 @@
@section('content') @section('content')
<div class="subheader"> <div class="subheader">
<h1 class="subheader-title"> <h1 class="subheader-title">
<i class='subheader-icon fal fa-building'></i> Profile Sekolah <i class='subheader-icon fal fa-building'></i> {{$title}}
</h1> </h1>
</div> </div>
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<div class="accordion" id="accordionExample">
<div class="card">
<div class="card-header" id="headingOne">
<h2 class="mb-0">
<button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
<i class="fal fa-filter"></i>&nbsp;Filter
</button>
</h2>
</div>
<div id="collapseOne" class="collapse" aria-labelledby="headingOne" data-parent="#accordionExample">
<div class="card-body">
<div class="row">
<div class="col-md-12 mb-2">
<div class="row">
<div class="col-md-3">
<div class="form-group">
<select class="form-control select2">
<option value="">-- PILIH TINGKAT --</option>
<option value="1">SD</option>
<option value="2">SMP</option>
<option value="3">SMA</option>
<option value="4">SMK</option>
<option value="5">MI</option>
<option value="6">MTs</option>
<option value="7">MA</option>
<option value="8">SD LB</option>
<option value="9">SMP LB</option>
<option value="10">SMA LM</option>
<option value="11">SLB Khusus</option>
</select>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<select class="form-control select2">
<option value="">-- PILIH STATUS --</option>
<option value="Negeri">Negeri</option>
<option value="Swasta">Swasta</option>
</select>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<select class="form-control select2">
<option value="">-- PILIH LEVEL --</option>
<option value="1"> LEVEL 1</option>
<option value="2"> LEVEL 2</option>
<option value="3"> LEVEL 3</option>
<option value="4"> LEVEL 4</option>
<option value="5"> LEVEL 5</option>
</select>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<select class="form-control select2">
<option value="">-- PILIH JENIS USULAN --</option>
<option value="1">Kab/Kota</option>
<option value="2">Provinsi</option>
<option value="3">Nasional</option>
<option value="4">Mandiri</option>
</select>
</div>
</div>
</div>
</div>
<div class="col-md-12 mb-2">
<div class="row">
<div class="col-md-3">
<div class="form-group">
<select name="provinsi" class="form-control select2" id="provinsi">
<option value="0">- PILIH PROVINSI -</option>
@foreach($provinsi as $datProv)
<option value="{{encode_id($datProv->MsProvinsiId)}}">{{$datProv->name}}</option>
@endforeach
</select>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<select name="kabupaten" class="form-control select2" id="kabupaten">
<option value="0">- PILIH KABUPATEN/KOTA -</option>
</select>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<select name="kecamatan" class="form-control select2" id="kecamatan" required>
<option value="0">- PILIH KECAMATAN -</option>
</select>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<button class="btn btn-warning btn-block"><i class="fal fa-search"></i>&nbsp;Cari Data</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="panel-4" class="panel"> <div id="panel-4" class="panel">
<div class="panel-container show"> <div class="panel-container show">
<div class="panel-content"> <div class="panel-content">
<div id="toolbar"> <div id="toolbar">
<button id="btn-add" class="btn btn-primary"> <button id="btn-add" class="btn btn-primary">
<i class="fal fa-plus"></i> Tambah Data <i class="fal fa-plus"></i> Tambah Data
</button> </button>
@ -26,25 +133,27 @@
data-pagination="true" data-pagination="true"
data-toolbar="#toolbar" data-toolbar="#toolbar"
data-show-refresh="false" data-show-refresh="false"
data-url="{{route($route.'.grid')}}"
data-sort-name="ids" data-sort-name="ids"
data-sort-order="desc" data-sort-order="desc"
data-page-size="10" data-page-size="10"
data-id-field="id" data-id-field="id"
id="grid-data"> id="grid-data">
<thead> <thead class="text-white">
<tr class="table-success"> <tr class="table-primary">
<th>#</th> <th data-field="action">#</th>
<th>No</th> <th data-field="no">No</th>
<th>NPSN</th> <th data-field="npsn">NPSN</th>
<th>Nama Sekolah</th> <th data-field="nama">Nama Sekolah</th>
<th>Status Level</th> <th data-field="wilayah">Wilayah</th>
<th>Tanggal Level</th> <th data-field="status_level">Status Level</th>
<th>Penghargaan Terakhir</th> <th data-field="tanggal_level">Tanggal Level</th>
<th>DOK Administrasi</th> <th data-field="penghargaan">Penghargaan Terakhir</th>
<th>Pemenuhan Kriteria</th> <th data-field="dok">DOK Administrasi</th>
<th>Jenis Usulan</th> <th data-field="kriteria">Pemenuhan Kriteria</th>
<th>Usulankan CSA</th> <th data-field="jenis_usulan">Jenis Usulan</th>
<th>Perpanjangan CSA</th> <th data-field="usulkan_csa">Usulkan CSA</th>
<th data-field="perpanjang_csa">Perpanjangan CSA</th>
</tr> </tr>
</thead> </thead>
<tbody></tbody> <tbody></tbody>
@ -59,4 +168,111 @@
@section('page-js') @section('page-js')
<script src="{{asset('assets/js/datagrid/datatables/datatables.bundle.js')}}"></script> <script src="{{asset('assets/js/datagrid/datatables/datatables.bundle.js')}}"></script>
<script src="{{asset('assets/js/bootstrap-table.min.js')}}"></script> <script src="{{asset('assets/js/bootstrap-table.min.js')}}"></script>
<script type="text/javascript">
$('select').on("select2:selecting", function(e) {
var selectorOrigin = this.id;
var id = e.params.args.data.id;
if(selectorOrigin=='provinsi'){
$('#loading-spinner').show();
clear('kabupaten');
selector = 'kabupaten';
url_to = 'kabupaten';
getSelect(id, selector, url_to);
}
if(selectorOrigin=='kabupaten'){
$('#loading-spinner').show();
clear('kecamatan');
selector = 'kecamatan';
url_to = 'kecamatan';
getSelect(id, selector, url_to);
}
if(selectorOrigin=='kecamatan'){
$('#loading-spinner').show();
clear('sekolah');
selector = 'sekolah';
url_to = 'sekolah';
getSelect(id, selector, url_to);
}
});
function clear(elementId) {
$('#' + elementId).empty();
$('#' + elementId).select2();
}
function getSelect(id, selectTo, urlTo, selected = "") {
id = id;
var base_url = "{{url('/')}}";
//alert(id);
destino = "#" + selectTo;
valor = $('#' + id).find(":selected").val();
$.ajax({
method: "POST",
url: base_url + "/get/" + urlTo,
data: {
_token: '{{csrf_token()}}',
id: id
}
}).done(function(msg) {
obj = msg.data;
if (obj.length > 0) {
//Clear the current options
$(destino).empty();
if(selectTo=='kabupaten'){
$(destino).append('<option value="">-PILIH KABUPATEN/KOTA-</option>').select2("val", "0");
$.each(obj, function(index) {
value = obj[index].id;
text = obj[index].name;
$(destino).append('<option value=' + value + '>' + text + '</option>');
});
console.log(selected)
if (selected) {
$(destino).val(selected).trigger('change');
selected = "";
}
}
if(selectTo=='kecamatan'){
$(destino).append('<option value="">-PILIH KECAMATAN-</option>').select2("val", "0");
$.each(obj, function(index) {
value = obj[index].id;
text = obj[index].name;
$(destino).append('<option value=' + value + '>' + text + '</option>');
});
console.log(selected)
if (selected) {
$(destino).val(selected).trigger('change');
selected = "";
}
}
} else {
if(selectTo=='provinsi'){
$(destino).empty().append('<option value="0">-PILIH PROVINSI-</option>').select2("val", "0");
}
if(selectTo=='kabupaten'){
$(destino).empty().append('<option value="0">-PILIH KABUPATEN/KOTA-</option>').select2("val", "0");
}
if(selectTo=='kecamatan'){
$(destino).empty().append('<option value="0">-PILIH KECAMATAN-</option>').select2("val", "0");
}
}
$('#loading-spinner').hide();
});
return false;
}
</script>
@endsection @endsection

View File

@ -87,16 +87,16 @@
<div class="col-md-12"> <div class="col-md-12">
<div class="alert alert-warning"> <div class="alert alert-warning">
<p class="mb-0"><i class="fal fa-info-circle"></i>&nbsp;Anda Belum Melakukan Finalisasi Proses Data Kriteria</p> <p class="mb-0"><i class="fal fa-info-circle"></i>&nbsp;Anda Belum Melakukan Finalisasi Proses Data Kriteria</p>
<p class="mb-0"><i class="fal fa-info-circle"></i>&nbsp;Klik <b class="text-danger">Resume</b> untuk melakukan Finalisasi Proses Data Kriteria</p> <p class="mb-0"><i class="fal fa-info-circle"></i>&nbsp;Klik <b class="text-danger">Progress Usulan</b> untuk melakukan Finalisasi Proses Data Kriteria</p>
</div> </div>
</div> </div>
<div class="col-md-12" style="background: rgba(23, 162, 184, 0.2) !important;"> <div class="col-md-12" style="background: rgba(23, 162, 184, 0.2) !important;">
<ul class="pageNumber"> <ul class="pageNumber">
@foreach($page as $hal) @foreach($page as $hal)
<li class="page" data-number={{$hal}}>{{$hal}}</li> <li class="page {{ (checkPenilaian($hal) == true ? 'bg-success text-white' : '' )}}" data-number={{$hal}}>{{$hal}}</li>
@endforeach @endforeach
<li class="resume">Resume</li> <li class="resume">Resume</li>
<li><a href="{{url('usulan/kriteria/progress')}}">Progress Usulan</a></li> <li class="progress_usulan">Progress Usulan</li>
</ul> </ul>
</div> </div>
<div class="col-md-12 mt-3"> <div class="col-md-12 mt-3">
@ -165,6 +165,14 @@
}); });
}); });
$('.resume').on('click',function(e){
window.location.href = "{{url('usulan/kriteria/resume/'.encode_id(session('sekolah_id')))}}";
});
$('.progress_usulan').on('click',function(e){
window.location.href = "{{url('usulan/kriteria/progress/'.encode_id(session('sekolah_id')))}}";
});
$('#btnSave').on('click',function(e){ $('#btnSave').on('click',function(e){
e.preventDefault(); e.preventDefault();
let currentForm = $("#form").serializeArray(); let currentForm = $("#form").serializeArray();
@ -230,11 +238,19 @@
$('#loading-spinner').show(); // Menampilkan spinner $('#loading-spinner').show(); // Menampilkan spinner
}, },
success: function (response) { success: function (response) {
console.log('Response:', response); // console.log('Response:', response);
toastr.success("Berhasil menyimpan data", 'Success!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
$('.page').closest('.active').addClass('bg-success');
$('.page').closest('.active').addClass('text-white');
$('.page').removeClass('active');
// (checkPenilaian($hal) == true ? 'bg-success text-white' : '' )
}, },
error: function (xhr, status, error) { error: function (xhr, status, error) {
console.error('AJAX Error:', status, error); // console.error('AJAX Error:', status, error);
alert('Failed to fetch data!'); // alert('Failed to fetch data!');
toastr.error("Maaf Terjadi Kesalahan Menyimpan Data", 'Error!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
}, },
complete: function () { complete: function () {
$('#loading-spinner').hide(); // Sembunyikan spinner setelah request selesai $('#loading-spinner').hide(); // Sembunyikan spinner setelah request selesai

View File

@ -0,0 +1,420 @@
@extends('layouts.master')
@section('page-css')
<link rel="stylesheet" media="screen, print" href="{{asset('assets/css/datagrid/datatables/datatables.bundle.css')}}">
<style type="text/css">
/* The actual timeline (the vertical ruler) */
.main-timeline {
position: relative;
}
/* The actual timeline (the vertical ruler) */
.main-timeline::after {
content: '';
position: absolute;
width: 6px;
background-color: #939597;
top: 0;
bottom: 0;
left: 50%;
margin-left: -3px;
}
/* Container around content */
.timeline {
position: relative;
background-color: inherit;
width: 50%;
}
/* The circles on the timeline */
.timeline::after {
content: '';
position: absolute;
width: 25px;
height: 25px;
right: -13px;
background-color: #939597;
border: 5px solid #F5DF4D;
top: 15px;
border-radius: 50%;
z-index: 1;
}
/* Place the container to the left */
.left {
padding: 0px 40px 20px 0px;
left: 0;
}
/* Place the container to the right */
.right {
padding: 0px 0px 20px 40px;
left: 50%;
}
/* Add arrows to the left container (pointing right) */
.left::before {
content: " ";
position: absolute;
top: 18px;
z-index: 1;
right: 30px;
border: medium solid white;
border-width: 10px 0 10px 10px;
border-color: transparent transparent transparent white;
}
/* Add arrows to the right container (pointing left) */
.right::before {
content: " ";
position: absolute;
top: 18px;
z-index: 1;
left: 30px;
border: medium solid white;
border-width: 10px 10px 10px 0;
border-color: transparent white transparent transparent;
}
/* Fix the circle for containers on the right side */
.right::after {
left: -12px;
}
/* Media queries - Responsive timeline on screens less than 600px wide */
@media screen and (max-width: 600px) {
/* Place the timelime to the left */
.main-timeline::after {
left: 31px;
}
/* Full-width containers */
.timeline {
width: 100%;
padding-left: 70px;
padding-right: 25px;
}
/* Make sure that all arrows are pointing leftwards */
.timeline::before {
left: 60px;
border: medium solid white;
border-width: 10px 10px 10px 0;
border-color: transparent white transparent transparent;
}
/* Make sure all circles are at the same spot */
.left::after, .right::after {
left: 18px;
}
.left::before {
right: auto;
}
/* Make all right containers behave like the left ones */
.right {
left: 0%;
}
}
.listItem{
list-style: none;
margin: 0;
padding: 0;
}
.listItem > li{
display: inline-block;
margin: 10px;
}
.listItem > li:hover{
cursor: pointer;
}
.listItem > li .number{
font-size: 14px;
color: #fff;
background: #0ba360 !important;
padding: 10px;
border-radius: 10%;
}
.level{
float: right;
color: #fff;
text-align: center;
width: 100px;
}
.nav-link{
border-radius: 0px!important;
}
.pageNumber{ list-style:none; padding:0px; margin: 0px;}
.pageNumber > li{ display: inline-block; padding: 12px; background: rgba(255, 255, 255, 0.5); margin: 5px 1px;}
.pageNumber > li:hover{cursor: pointer;}
.pageNumber > li.active {
background-color: #007bff; /* Warna biru */
color: white;
font-weight: bold;
}
</style>
@endsection
@section('content')
<div class="subheader">
<h1 class="subheader-title">
<i class='subheader-icon fal fa-edit'></i> {{$title}}
</h1>
</div>
<div class="row">
<div class="col-lg-12">
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form method="POST" id="form">
{{csrf_field()}}
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-md-12 p-3">
<table class="" border="0" style="width:100%">
<tr>
<td rowspan="5" width="5" style="vertical-align: middle; padding-right: 10px;">
<i class="fal fa-building fa-5x"></i>
</td>
</tr>
<tr>
<td colspan="2"><h5 class="text-success">NPSN: {{session('npsn')}}</h5></td>
</tr>
<tr>
<td colspan="2"><h4><b>{{session('name')}}</b></h4></td>
</tr>
<tr>
<td colspan="2"><span class="badge badge-primary">{{session('tingkat_sekolah')}}</span> <span class="badge badge-success">{{session('status_sekolah')}}</span></td>
</tr>
<tr>
<td colspan="2"><p>{{session('alamat_sekolah')}}</p></td>
</tr>
</table>
</div>
<div class="col-md-12">
<div class="alert alert-warning">
<p class="mb-0"><i class="fal fa-info-circle"></i>&nbsp;Anda Belum Melakukan Finalisasi Proses Data Kriteria</p>
<p class="mb-0"><i class="fal fa-info-circle"></i>&nbsp;Klik <b class="text-danger">Progress Usulan</b> untuk melakukan Finalisasi Proses Data Kriteria</p>
</div>
</div>
<div class="col-md-12 mb-4" style="background: rgba(23, 162, 184, 0.2) !important;">
<ul class="pageNumber">
<li class="back"><i class="fal fa-arrow-left"></i></li>
<li class="resume">Resume</li>
<li class="progress_usulan active">Progress Usulan</li>
</ul>
</div>
<div class="col-md-12 bodyInput">
<section style="background-color: #F0F2F5;">
<div class="container py-5">
<div class="main-timeline">
<div class="timeline left">
<div class="card">
<div class="card-body p-4">
<h3>2017</h3>
<p class="mb-0">Lorem ipsum dolor sit amet, quo ei simul congue exerci, ad nec admodum perfecto mnesarchum, vim ea mazim fierent detracto. Ea quis iuvaret expetendis his, te elit voluptua dignissim per, habeo iusto primis ea eam.</p>
</div>
</div>
</div>
<div class="timeline right">
<div class="card">
<div class="card-body p-4">
<h3>2016</h3>
<p class="mb-0">Lorem ipsum dolor sit amet, quo ei simul congue exerci, ad nec admodum perfecto mnesarchum, vim ea mazim fierent detracto. Ea quis iuvaret expetendis his, te elit voluptua dignissim per, habeo iusto primis ea eam.</p>
</div>
</div>
</div>
<div class="timeline left">
<div class="card">
<div class="card-body p-4">
<h3>2015</h3>
<p class="mb-0">Lorem ipsum dolor sit amet, quo ei simul congue exerci, ad nec admodum perfecto mnesarchum, vim ea mazim fierent detracto. Ea quis iuvaret expetendis his, te elit voluptua dignissim per, habeo iusto primis ea eam.</p>
</div>
</div>
</div>
<div class="timeline right">
<div class="card">
<div class="card-body p-4">
<h3>2012</h3>
<p class="mb-0">Lorem ipsum dolor sit amet, quo ei simul congue exerci, ad nec admodum perfecto mnesarchum, vim ea mazim fierent detracto. Ea quis iuvaret expetendis his, te elit voluptua dignissim per, habeo iusto primis ea eam.</p>
</div>
</div>
</div>
<div class="timeline left">
<div class="card">
<div class="card-body p-4">
<h3>2011</h3>
<p class="mb-0">Lorem ipsum dolor sit amet, quo ei simul congue exerci, ad nec admodum perfecto mnesarchum, vim ea mazim fierent detracto. Ea quis iuvaret expetendis his, te elit voluptua dignissim per, habeo iusto primis ea eam.</p>
</div>
</div>
</div>
<div class="timeline right">
<div class="card">
<div class="card-body p-4">
<h3>2007</h3>
<p class="mb-0">Lorem ipsum dolor sit amet, quo ei simul congue exerci, ad nec admodum perfecto mnesarchum, vim ea mazim fierent detracto. Ea quis iuvaret expetendis his, te elit voluptua dignissim per, habeo iusto primis ea eam.</p>
</div>
</div>
</div>
</div>
</div>
</section>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
@endsection
@section('page-js')
<script type="text/javascript">
$(document).ready(function() {
$('input[type="checkbox"], input[type="radio"], input[type="text"], textarea').attr('disabled', true);
});
$('.page').on('click',function(e){
e.preventDefault();
let number = $(this).data('number');
let base_url = "{{url('/')}}";
// Tambahkan kelas active dan hapus dari yang lain
$('.page').removeClass('active');
$(this).addClass('active');
$.ajax({
url: base_url+'/getForm', // Ganti dengan URL API-mu
type: 'POST', // Bisa juga 'POST' kalau perlu
data: {
_token:'{{csrf_token()}}',
page: number
}, // Kirim number sebagai parameter
dataType: 'json', // Format respons JSON
beforeSend: function () {
$('#loading-spinner').show(); // Menampilkan spinner
$('.removeFormKriteria').remove();
},
success: function (response) {
console.log('Response:', response);
$('.changeForm').append(response.data);
$('.changeTitle').html(response.title);
$('.numberInput').on('input', function() {
this.value = this.value.replace(/[^0-9]/g, ''); // Hanya angka 0-9
});
},
error: function (xhr, status, error) {
console.error('AJAX Error:', status, error);
alert('Failed to fetch data!');
},
complete: function () {
$('#loading-spinner').hide(); // Sembunyikan spinner setelah request selesai
}
});
});
$('.back').on('click',function(e){
window.location.href = "{{url('usulan/kriteria')}}";
});
$('.progress_usulan').on('click',function(e){
window.location.href = "{{url('usulan/kriteria/progress/'.encode_id(session('sekolah_id')))}}";
});
$('#btnSave').on('click',function(e){
e.preventDefault();
let currentForm = $("#form").serializeArray();
console.log(currentForm);
let formData = {};
let allData = {};
let isValid = true; // Flag validasi
currentForm.forEach(field => {
let name = field.name.replace(/\[\]$/, ''); // Hapus "[]" di akhir nama input
if (allData[name]) {
if (!Array.isArray(allData[name])) {
allData[name] = [allData[name]];
}
allData[name].push(field.value);
} else {
allData[name] = field.value;
}
});
$('.is-required').each(function () {
let type = $(this).attr('type');
let name = $(this).attr('name');
let value = $(this).val()?.trim(); // Pastikan nilai di-trim untuk menghindari spasi kosong
if (type === 'radio' || type === 'checkbox') {
// Validasi radio: setidaknya satu opsi harus dipilih
if ($(`input[name="${name}"]:checked`).length === 0) {
isValid = false;
$(`input[name="${name}"]`).closest('.custom-control-input').addClass("is-invalid");
} else {
$(`input[name="${name}"]`).closest('.custom-control-input').removeClass("is-invalid");
}
} else {
// Validasi input teks atau lainnya
if (!value) {
isValid = false;
$(this).addClass("is-invalid");
} else {
$(this).removeClass("is-invalid");
}
}
});
// Jika validasi gagal, hentikan submit
if (!isValid) {
toastr.error("Harap isi semua field yang wajib diisi", 'Error!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
// alert(".");
return;
}
$.ajax({
url: "{{route($route.'.store')}}", // Ganti dengan URL API-mu
type: 'POST', // Bisa juga 'POST' kalau perlu
data: {
_token:'{{csrf_token()}}',
data: allData
}, // Kirim number sebagai parameter
dataType: 'json', // Format respons JSON
beforeSend: function () {
$('#loading-spinner').show(); // Menampilkan spinner
},
success: function (response) {
// console.log('Response:', response);
toastr.success("Berhasil menyimpan data", 'Success!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
$('.page').closest('.active').addClass('bg-success');
$('.page').closest('.active').addClass('text-white');
$('.page').removeClass('active');
// (checkPenilaian($hal) == true ? 'bg-success text-white' : '' )
},
error: function (xhr, status, error) {
// console.error('AJAX Error:', status, error);
// alert('Failed to fetch data!');
toastr.error("Maaf Terjadi Kesalahan Menyimpan Data", 'Error!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
},
complete: function () {
$('#loading-spinner').hide(); // Sembunyikan spinner setelah request selesai
}
});
});
</script>
@endsection

View File

@ -0,0 +1,265 @@
@extends('layouts.master')
@section('page-css')
<link rel="stylesheet" media="screen, print" href="{{asset('assets/css/datagrid/datatables/datatables.bundle.css')}}">
<style type="text/css">
.listItem{
list-style: none;
margin: 0;
padding: 0;
}
.listItem > li{
display: inline-block;
margin: 10px;
}
.listItem > li:hover{
cursor: pointer;
}
.listItem > li .number{
font-size: 14px;
color: #fff;
background: #0ba360 !important;
padding: 10px;
border-radius: 10%;
}
.level{
float: right;
color: #fff;
text-align: center;
width: 100px;
}
.nav-link{
border-radius: 0px!important;
}
.pageNumber{ list-style:none; padding:0px; margin: 0px;}
.pageNumber > li{ display: inline-block; padding: 12px; background: rgba(255, 255, 255, 0.5); margin: 5px 1px;}
.pageNumber > li:hover{cursor: pointer;}
.pageNumber > li.active {
background-color: #007bff; /* Warna biru */
color: white;
font-weight: bold;
}
</style>
@endsection
@section('content')
<div class="subheader">
<h1 class="subheader-title">
<i class='subheader-icon fal fa-edit'></i> {{$title}}
</h1>
</div>
<div class="row">
<div class="col-lg-12">
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form method="POST" id="form">
{{csrf_field()}}
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-md-12 p-3">
<table class="" border="0" style="width:100%">
<tr>
<td rowspan="5" width="5" style="vertical-align: middle; padding-right: 10px;">
<i class="fal fa-building fa-5x"></i>
</td>
</tr>
<tr>
<td colspan="2"><h5 class="text-success">NPSN: {{session('npsn')}}</h5></td>
</tr>
<tr>
<td colspan="2"><h4><b>{{session('name')}}</b></h4></td>
</tr>
<tr>
<td colspan="2"><span class="badge badge-primary">{{session('tingkat_sekolah')}}</span> <span class="badge badge-success">{{session('status_sekolah')}}</span></td>
</tr>
<tr>
<td colspan="2"><p>{{session('alamat_sekolah')}}</p></td>
</tr>
</table>
</div>
<div class="col-md-12">
<div class="alert alert-warning">
<p class="mb-0"><i class="fal fa-info-circle"></i>&nbsp;Anda Belum Melakukan Finalisasi Proses Data Kriteria</p>
<p class="mb-0"><i class="fal fa-info-circle"></i>&nbsp;Klik <b class="text-danger">Progress Usulan</b> untuk melakukan Finalisasi Proses Data Kriteria</p>
</div>
</div>
<div class="col-md-12 mb-4" style="background: rgba(23, 162, 184, 0.2) !important;">
<ul class="pageNumber">
<li class="back"><i class="fal fa-arrow-left"></i></li>
<li class="resume active">Resume</li>
<li class="progress_usulan">Progress Usulan</li>
</ul>
</div>
<div class="col-md-12 bodyInput">
<div id="loading-spinner" style="display: none; text-align: center;">
<img src="{{ asset('assets/spinner.gif') }}" alt="Loading..." width="20">
</div>
<div class="changeForm">
@foreach($page as $dataNumber)
<div class="card mb-2" style="background:#EDE8DC;">
<div class="card-header color-white" style="background:#A5B68D;">
{{$dataNumber}}
</div>
<div class="card-body color-black">
{!! formKriteria($dataNumber) !!}
</div>
</div>
@endforeach
</div>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
@endsection
@section('page-js')
<script type="text/javascript">
$(document).ready(function() {
$('input[type="checkbox"], input[type="radio"], input[type="text"], textarea').attr('disabled', true);
});
$('.page').on('click',function(e){
e.preventDefault();
let number = $(this).data('number');
let base_url = "{{url('/')}}";
// Tambahkan kelas active dan hapus dari yang lain
$('.page').removeClass('active');
$(this).addClass('active');
$.ajax({
url: base_url+'/getForm', // Ganti dengan URL API-mu
type: 'POST', // Bisa juga 'POST' kalau perlu
data: {
_token:'{{csrf_token()}}',
page: number
}, // Kirim number sebagai parameter
dataType: 'json', // Format respons JSON
beforeSend: function () {
$('#loading-spinner').show(); // Menampilkan spinner
$('.removeFormKriteria').remove();
},
success: function (response) {
console.log('Response:', response);
$('.changeForm').append(response.data);
$('.changeTitle').html(response.title);
$('.numberInput').on('input', function() {
this.value = this.value.replace(/[^0-9]/g, ''); // Hanya angka 0-9
});
},
error: function (xhr, status, error) {
console.error('AJAX Error:', status, error);
alert('Failed to fetch data!');
},
complete: function () {
$('#loading-spinner').hide(); // Sembunyikan spinner setelah request selesai
}
});
});
$('.back').on('click',function(e){
window.location.href = "{{url('usulan/kriteria')}}";
});
$('.progress_usulan').on('click',function(e){
window.location.href = "{{url('usulan/kriteria/progress/'.encode_id(session('sekolah_id')))}}";
});
$('#btnSave').on('click',function(e){
e.preventDefault();
let currentForm = $("#form").serializeArray();
console.log(currentForm);
let formData = {};
let allData = {};
let isValid = true; // Flag validasi
currentForm.forEach(field => {
let name = field.name.replace(/\[\]$/, ''); // Hapus "[]" di akhir nama input
if (allData[name]) {
if (!Array.isArray(allData[name])) {
allData[name] = [allData[name]];
}
allData[name].push(field.value);
} else {
allData[name] = field.value;
}
});
$('.is-required').each(function () {
let type = $(this).attr('type');
let name = $(this).attr('name');
let value = $(this).val()?.trim(); // Pastikan nilai di-trim untuk menghindari spasi kosong
if (type === 'radio' || type === 'checkbox') {
// Validasi radio: setidaknya satu opsi harus dipilih
if ($(`input[name="${name}"]:checked`).length === 0) {
isValid = false;
$(`input[name="${name}"]`).closest('.custom-control-input').addClass("is-invalid");
} else {
$(`input[name="${name}"]`).closest('.custom-control-input').removeClass("is-invalid");
}
} else {
// Validasi input teks atau lainnya
if (!value) {
isValid = false;
$(this).addClass("is-invalid");
} else {
$(this).removeClass("is-invalid");
}
}
});
// Jika validasi gagal, hentikan submit
if (!isValid) {
toastr.error("Harap isi semua field yang wajib diisi", 'Error!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
// alert(".");
return;
}
$.ajax({
url: "{{route($route.'.store')}}", // Ganti dengan URL API-mu
type: 'POST', // Bisa juga 'POST' kalau perlu
data: {
_token:'{{csrf_token()}}',
data: allData
}, // Kirim number sebagai parameter
dataType: 'json', // Format respons JSON
beforeSend: function () {
$('#loading-spinner').show(); // Menampilkan spinner
},
success: function (response) {
// console.log('Response:', response);
toastr.success("Berhasil menyimpan data", 'Success!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
$('.page').closest('.active').addClass('bg-success');
$('.page').closest('.active').addClass('text-white');
$('.page').removeClass('active');
// (checkPenilaian($hal) == true ? 'bg-success text-white' : '' )
},
error: function (xhr, status, error) {
// console.error('AJAX Error:', status, error);
// alert('Failed to fetch data!');
toastr.error("Maaf Terjadi Kesalahan Menyimpan Data", 'Error!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
},
complete: function () {
$('#loading-spinner').hide(); // Sembunyikan spinner setelah request selesai
}
});
});
</script>
@endsection

View File

@ -20,6 +20,7 @@ use App\Http\Controllers\Modules\Usulan\SekolahBinaanController;
Route::get('dashboard',[HomeController::class,'dashboard'])->name('dashboard'); Route::get('dashboard',[HomeController::class,'dashboard'])->name('dashboard');
Route::get('profile-sekolah',[ProfileController::class,'index'])->name('profile.index'); Route::get('profile-sekolah',[ProfileController::class,'index'])->name('profile.index');
Route::get('profile-sekolah/grid',[ProfileController::class,'grid'])->name('profile.grid');
Route::post('profile-sekolah',[ProfileController::class,'store'])->name('profile.store'); Route::post('profile-sekolah',[ProfileController::class,'store'])->name('profile.store');
Route::post('getForm',[AjaxController::class,'getForm'])->name('getForm'); Route::post('getForm',[AjaxController::class,'getForm'])->name('getForm');
@ -38,12 +39,16 @@ Route::name('master.')->prefix('master')->group(function () {
Route::name('kuesioner.')->prefix('kuesioner')->group(function () { Route::name('kuesioner.')->prefix('kuesioner')->group(function () {
Route::get('/',[KuesionerController::class,'index'])->name('index'); Route::get('/',[KuesionerController::class,'index'])->name('index');
Route::get('/grid',[KuesionerController::class,'grid'])->name('grid');
Route::get('/update/{id?}',[KuesionerController::class,'update'])->name('update');
Route::post('/store',[KuesionerController::class,'store'])->name('store'); Route::post('/store',[KuesionerController::class,'store'])->name('store');
}); });
Route::name('usulan.')->prefix('usulan')->group(function () { Route::name('usulan.')->prefix('usulan')->group(function () {
Route::name('kriteria.')->prefix('kriteria')->group(function () { Route::name('kriteria.')->prefix('kriteria')->group(function () {
Route::get('/',[KriteriaController::class,'index'])->name('index'); Route::get('/',[KriteriaController::class,'index'])->name('index');
Route::get('/resume/{sekolah_id}',[KriteriaController::class,'resume'])->name('resume');
Route::get('/progress/{sekolah_id}',[KriteriaController::class,'progress'])->name('progress');
Route::post('/store',[KriteriaController::class,'store'])->name('store'); Route::post('/store',[KriteriaController::class,'store'])->name('store');
}); });