push kode lagi
This commit is contained in:
parent
8f1b4b7cdf
commit
5dc02c6b64
|
@ -18,22 +18,20 @@ public function __construct()
|
|||
|
||||
public function index()
|
||||
{
|
||||
|
||||
$alternatif = Alternatif::with('penilaian.crips')->get();
|
||||
$kriteria = Kriteria::with('crips')->orderBy('nama_kriteria','ASC')->get();
|
||||
$kriteria = Kriteria::get();
|
||||
$penilaian = Penilaian::with('crips', 'alternatif')->get();
|
||||
|
||||
if (count($penilaian) == 0) {
|
||||
return redirect(route('penilaian.index'))->with('empty','Data Kosong Silahkan Isi Terlbih Dahulu');
|
||||
return redirect(route('penilaian.index'))->with('empty', 'Data Kosong Silahkan Isi Terlebih Dahulu');
|
||||
}
|
||||
|
||||
//mencari min max normalisasi
|
||||
foreach ($kriteria as $key => $value) {
|
||||
foreach ($penilaian as $key_1 => $value_1) {
|
||||
if ($value->id == $value_1->crips->kriteria_id)
|
||||
{
|
||||
if ($value->attribut == 'Benefit') {
|
||||
$minMax[$value->id][] = $value_1->crips->bobot;
|
||||
}elseif ($value->attribut == 'Cost') {
|
||||
// Mencari min max untuk normalisasi
|
||||
$minMax = [];
|
||||
foreach ($kriteria as $value) {
|
||||
foreach ($penilaian as $value_1) {
|
||||
if ($value->id == $value_1->crips->kriteria_id) {
|
||||
if ($value->attribut == 'Benefit' || $value->attribut == 'Cost') {
|
||||
$minMax[$value->id][] = $value_1->crips->bobot;
|
||||
}
|
||||
}
|
||||
|
@ -41,68 +39,64 @@ public function index()
|
|||
}
|
||||
|
||||
// Normalisasi
|
||||
|
||||
foreach ($penilaian as $key_1 => $value_1) {
|
||||
foreach ($kriteria as $key => $value) {
|
||||
$normalisasi = [];
|
||||
foreach ($penilaian as $value_1) {
|
||||
$namaAlternatif = $value_1->alternatif->nama_alternatif ?? 'Alternatif_' . $value_1->alternatif_id;
|
||||
foreach ($kriteria as $value) {
|
||||
if ($value->id == $value_1->crips->kriteria_id) {
|
||||
if ($value->attribut == 'Benefit') {
|
||||
$normalisasi[$value_1->alternatif->nama_alternatif][$value->id] = $value_1->crips->bobot / max($minMax[$value->id]);
|
||||
$normalisasi[$namaAlternatif][$value->id] = $value_1->crips->bobot / max($minMax[$value->id]);
|
||||
} elseif ($value->attribut == 'Cost') {
|
||||
$normalisasi[$value_1->alternatif->nama_alternatif][$value->id] = min($minMax[$value->id]) / $value_1->crips->bobot;
|
||||
$normalisasi[$namaAlternatif][$value->id] = min($minMax[$value->id]) / $value_1->crips->bobot;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Perangkingan
|
||||
$ranking = [];
|
||||
foreach ($normalisasi as $key => $value) {
|
||||
foreach ($kriteria as $key_1 => $value_1) {
|
||||
$rank[$key][] = $value[$value_1->id] * $value_1->bobot;
|
||||
$rank = [];
|
||||
foreach ($kriteria as $value_1) {
|
||||
$rank[] = $value[$value_1->id] * ($value_1->bobot / 100);
|
||||
}
|
||||
$ranking[] = [
|
||||
'name' => $key,
|
||||
'normalisasi' => $value,
|
||||
'score' => array_sum($rank)
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
$ranking = $normalisasi;
|
||||
foreach ($normalisasi as $key => $value) {
|
||||
$ranking[$key][] = array_sum($rank[$key]);
|
||||
}
|
||||
// arsort($ranking);
|
||||
|
||||
$sortedData = collect($ranking)->sortByDesc(function ($value) {
|
||||
return array_sum($value);
|
||||
// Urutkan berdasarkan skor dan tambahkan peringkat
|
||||
$sortedData = collect($ranking)->sortByDesc('score')->values()->map(function ($item, $index) {
|
||||
$item['rank'] = $index + 1;
|
||||
return $item;
|
||||
})->toArray();
|
||||
|
||||
// Debugging (hapus setelah verifikasi)
|
||||
// dd($sortedData);
|
||||
return view('admin.perhitungan.index', compact('alternatif','kriteria','normalisasi','sortedData'));
|
||||
|
||||
return view('admin.perhitungan.index', compact('alternatif', 'kriteria', 'normalisasi', 'sortedData'));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public function downloadPDF() {
|
||||
public function downloadPDF()
|
||||
{
|
||||
setlocale(LC_ALL, 'IND');
|
||||
$tanggal = Carbon::now()->formatLocalized('%A, %d %B %Y');
|
||||
$alternatif = Alternatif::with('penilaian.crips')->get();
|
||||
$kriteria = Kriteria::with('crips')->orderBy('nama_kriteria', 'ASC')->get();
|
||||
$penilaian = Penilaian::with('crips', 'alternatif')->get();
|
||||
|
||||
|
||||
if (count($penilaian) == 0) {
|
||||
return redirect(route('penilaian.index'));
|
||||
}
|
||||
//mencari min max normalisasi
|
||||
foreach ($kriteria as $key => $value) {
|
||||
foreach ($penilaian as $key_1 => $value_1) {
|
||||
if ($value->id == $value_1->crips->kriteria_id)
|
||||
{
|
||||
if ($value->attribut == 'Benefit') {
|
||||
$minMax[$value->id][] = $value_1->crips->bobot;
|
||||
}elseif ($value->attribut == 'Cost') {
|
||||
|
||||
// Mencari min max untuk normalisasi
|
||||
$minMax = [];
|
||||
foreach ($kriteria as $value) {
|
||||
foreach ($penilaian as $value_1) {
|
||||
if ($value->id == $value_1->crips->kriteria_id) {
|
||||
if ($value->attribut == 'Benefit' || $value->attribut == 'Cost') {
|
||||
$minMax[$value->id][] = $value_1->crips->bobot;
|
||||
}
|
||||
}
|
||||
|
@ -110,40 +104,42 @@ public function downloadPDF() {
|
|||
}
|
||||
|
||||
// Normalisasi
|
||||
|
||||
foreach ($penilaian as $key_1 => $value_1) {
|
||||
foreach ($kriteria as $key => $value) {
|
||||
$normalisasi = [];
|
||||
foreach ($penilaian as $value_1) {
|
||||
$namaAlternatif = $value_1->alternatif->nama_alternatif ?? 'Alternatif_' . $value_1->alternatif_id;
|
||||
foreach ($kriteria as $value) {
|
||||
if ($value->id == $value_1->crips->kriteria_id) {
|
||||
if ($value->attribut == 'Benefit') {
|
||||
$normalisasi[$value_1->alternatif->nama_alternatif][$value->id] = $value_1->crips->bobot / max($minMax[$value->id]);
|
||||
$normalisasi[$namaAlternatif][$value->id] = $value_1->crips->bobot / max($minMax[$value->id]);
|
||||
} elseif ($value->attribut == 'Cost') {
|
||||
$normalisasi[$value_1->alternatif->nama_alternatif][$value->id] = min($minMax[$value->id]) / $value_1->crips->bobot;
|
||||
$normalisasi[$namaAlternatif][$value->id] = min($minMax[$value->id]) / $value_1->crips->bobot;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Perangkingan
|
||||
$ranking = [];
|
||||
foreach ($normalisasi as $key => $value) {
|
||||
foreach ($kriteria as $key_1 => $value_1) {
|
||||
$rank[$key][] = $value[$value_1->id] * $value_1->bobot;
|
||||
$rank = [];
|
||||
foreach ($kriteria as $value_1) {
|
||||
$rank[] = $value[$value_1->id] * ($value_1->bobot / 100);
|
||||
}
|
||||
}
|
||||
$ranking = $normalisasi;
|
||||
foreach ($normalisasi as $key => $value) {
|
||||
$ranking[$key][] = array_sum($rank[$key]);
|
||||
$ranking[] = [
|
||||
'name' => $key,
|
||||
'normalisasi' => $value,
|
||||
'score' => array_sum($rank)
|
||||
];
|
||||
}
|
||||
|
||||
// arsort($ranking);
|
||||
|
||||
$sortedData = collect($ranking)->sortByDesc(function ($value) {
|
||||
return array_sum($value);
|
||||
// Urutkan berdasarkan skor dan tambahkan peringkat
|
||||
$sortedData = collect($ranking)->sortByDesc('score')->values()->map(function ($item, $index) {
|
||||
$item['rank'] = $index + 1;
|
||||
return $item;
|
||||
})->toArray();
|
||||
|
||||
|
||||
$pdf = PDF::loadView('admin.perhitungan.perhitungan-pdf', compact('alternatif', 'kriteria', 'normalisasi', 'sortedData', 'tanggal'));
|
||||
$pdf->setPaper('A3', 'potrait');
|
||||
$pdf->setPaper('A3', 'portrait');
|
||||
return $pdf->stream('perhitungan.pdf');
|
||||
}
|
||||
}
|
|
@ -7,6 +7,8 @@
|
|||
use App\Models\Penilaian;
|
||||
use Barryvdh\DomPDF\Facade\Pdf;
|
||||
use Carbon\Carbon;
|
||||
use App\Models\User;
|
||||
use App\Models\Crips;
|
||||
use Exception;
|
||||
|
||||
class AlternatifController extends Controller
|
||||
|
@ -35,17 +37,115 @@ public function store(Request $request){
|
|||
'pendidikan' => 'required',
|
||||
'ipk' => 'required|numeric',
|
||||
'jurusan' => 'required',
|
||||
'lama_studi' => 'required|numeric',
|
||||
'pengalaman' => 'required|numeric',
|
||||
'lama_studi' => 'required|integer|min:0|max:10',
|
||||
'pengalaman' => 'required|integer|min:0|max:10',
|
||||
'serkom' => 'required',
|
||||
'cv' => 'required|file|mimes:pdf,doc,docx|max:2048',
|
||||
'dokumen_pendukung.*' => 'nullable|file|mimes:pdf,doc,docx,jpg,jpeg,png|max:2048',
|
||||
]);
|
||||
|
||||
Alternatif::create($validated);
|
||||
// Upload CV
|
||||
if ($request->hasFile('cv')) {
|
||||
$validated['cv'] = $request->file('cv')->store('cv', 'public');
|
||||
}
|
||||
|
||||
// Upload dokumen pendukung (opsional)
|
||||
$dokumenPendukungPaths = [];
|
||||
if ($request->hasFile('dokumen_pendukung')) {
|
||||
foreach ($request->file('dokumen_pendukung') as $file) {
|
||||
$dokumenPendukungPaths[] = $file->store('dokumen_pendukung', 'public');
|
||||
}
|
||||
}
|
||||
|
||||
$validated['dokumen_pendukung'] = json_encode($dokumenPendukungPaths);
|
||||
|
||||
$alternatif = Alternatif::create($validated);
|
||||
|
||||
for ($kriteria_id = 1; $kriteria_id <= 7; $kriteria_id++) {
|
||||
$crips_id = $this->mapToCrips($alternatif, $kriteria_id);
|
||||
if ($crips_id) {
|
||||
Penilaian::create([
|
||||
'alternatif_id' => $alternatif->id,
|
||||
'kriteria_id' => $kriteria_id,
|
||||
'crips_id' => $crips_id,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
return redirect()->route('alternatif.index')->with('msg', 'Data pelamar berhasil ditambahkan!');
|
||||
|
||||
}
|
||||
private function mapToCrips($alternatif, $kriteria_id)
|
||||
{
|
||||
$crips = Crips::where('kriteria_id', $kriteria_id)->get();
|
||||
$crips_id = null;
|
||||
|
||||
switch ($kriteria_id) {
|
||||
case 1: // Usia
|
||||
$usia = $alternatif->usia;
|
||||
foreach ($crips as $crip) {
|
||||
if ($crip->nama_crips == '23-24' && $usia >= 23 && $usia <= 24) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '25-26' && $usia >= 25 && $usia <= 26) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '27-28' && $usia >= 27 && $usia <= 28) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '29-30' && $usia >= 29 && $usia <= 30) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '> 30' && $usia > 30) $crips_id = $crip->id;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: // Pendidikan
|
||||
$pendidikan = $alternatif->pendidikan;
|
||||
foreach ($crips as $crip) {
|
||||
if ($crip->nama_crips == $pendidikan) $crips_id = $crip->id;
|
||||
}
|
||||
break;
|
||||
|
||||
case 3: // IPK
|
||||
$ipk = $alternatif->ipk;
|
||||
foreach ($crips as $crip) {
|
||||
if ($crip->nama_crips == '3.5-4.0' && $ipk >= 3.5 && $ipk <= 4.0) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '3.0-3.49' && $ipk >= 3.0 && $ipk < 3.5) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '2.75-2.99' && $ipk >= 2.75 && $ipk < 3.0) $crips_id= $crip->id;
|
||||
elseif ($crip->nama_crips == '2.5-2.74' && $ipk >= 2.5 && $ipk < 2.75) $crips_id = $crip->id;
|
||||
}
|
||||
break;
|
||||
|
||||
case 4: // Jurusan
|
||||
$jurusan = $alternatif->jurusan;
|
||||
foreach ($crips as $crip) {
|
||||
if ($crip->nama_crips == $jurusan) $crips_id = $crip->id;
|
||||
}
|
||||
break;
|
||||
|
||||
case 5: // Lama Studi
|
||||
$lama_studi = $alternatif->lama_studi;
|
||||
foreach ($crips as $crip) {
|
||||
if ($crip->nama_crips == '<4 tahun' && $lama_studi < 4) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '4-5 tahun' && $lama_studi >= 4 && $lama_studi <= 5) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '>5 tahun' && $lama_studi > 5) $crips_id = $crip->id;
|
||||
}
|
||||
break;
|
||||
|
||||
case 6: // Pengalaman
|
||||
$pengalaman = $alternatif->pengalaman;
|
||||
foreach ($crips as $crip) {
|
||||
if ($crip->nama_crips == '>3 tahun' && $pengalaman > 3) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '1-3 tahun' && $pengalaman >= 1 && $pengalaman <= 3) $crips_id = $crip->id;
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case 7: // Serkom
|
||||
$serkom = $alternatif->serkom;
|
||||
foreach ($crips as $crip) {
|
||||
if ($crip->nama_crips == 'Punya' && $serkom == 1) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == 'Tidak punya' && $serkom == 0) $crips_id = $crip->id;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return $crips_id;
|
||||
}
|
||||
|
||||
public function edit($id)
|
||||
{
|
||||
|
@ -62,7 +162,7 @@ public function update(Request $request, $id)
|
|||
'pendidikan' => 'required|string',
|
||||
'ipk' => 'required|numeric|min:0|max:4',
|
||||
'jurusan' => 'required|string',
|
||||
'lama_studi' => 'required|numeric|min:0|max:10',
|
||||
'lama_studi' => 'required|integer |min:0|max:10',
|
||||
'pengalaman' => 'required|integer|min:0|max:50',
|
||||
'serkom' => 'required|boolean',
|
||||
]);
|
||||
|
@ -70,6 +170,10 @@ public function update(Request $request, $id)
|
|||
try {
|
||||
$alternatif = Alternatif::findOrFail($id);
|
||||
$alternatif->update($validated);
|
||||
|
||||
Penilaian::where('alternatif_id', $id)->delete();
|
||||
|
||||
// Buat ulang penilaian berdasarkan data terbar
|
||||
return back()->with('msg','Berhasil Mengubah Data');
|
||||
} catch (Exception $e) {
|
||||
\Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage());
|
||||
|
@ -84,8 +188,9 @@ public function destroy($id){
|
|||
|
||||
$alternatif = Alternatif::findOrFail($id);
|
||||
$alternatif->delete();
|
||||
Penilaian::truncate();
|
||||
Penilaian::where('alternatif_id', $id)->delete();
|
||||
|
||||
return back()->with('msg', 'Data pelamar berhasil dihapus!');
|
||||
} catch (Exception $e) {
|
||||
\Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage());
|
||||
die("Gagal");
|
||||
|
|
|
@ -30,8 +30,9 @@ protected function redirectTo()
|
|||
}
|
||||
}
|
||||
|
||||
public function __construct()
|
||||
public function logout()
|
||||
{
|
||||
$this->middleware('guest')->except('logout');
|
||||
Auth::logout();
|
||||
return redirect('/');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,40 +3,29 @@
|
|||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Foundation\Auth\VerifiesEmails;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class VerificationController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Email Verification Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling email verification for any
|
||||
| user that recently registered with the application. Emails may also
|
||||
| be re-sent if the user didn't receive the original email message.
|
||||
|
|
||||
*/
|
||||
|
||||
use VerifiesEmails;
|
||||
|
||||
/**
|
||||
* Where to redirect users after verification.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = RouteServiceProvider::HOME;
|
||||
// Redirect ke halaman login setelah verifikasi berhasil
|
||||
protected function redirectTo()
|
||||
{
|
||||
return '/login';
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
$this->middleware('signed')->only('verify');
|
||||
$this->middleware('throttle:6,1')->only('verify', 'resend');
|
||||
}
|
||||
|
||||
// Tambahan opsional: tampilkan pesan sukses setelah redirect ke login
|
||||
public function verified(Request $request)
|
||||
{
|
||||
return redirect('/login')->with('status', 'Email berhasil diverifikasi. Silakan login.');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ForgotPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password reset emails and
|
||||
| includes a trait which assists in sending these notifications from
|
||||
| your application to your users. Feel free to explore this trait.
|
||||
|
|
||||
*/
|
||||
|
||||
use SendsPasswordResetEmails;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the form to request a password reset link.
|
||||
*
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function showLinkRequestForm()
|
||||
{
|
||||
return view('auth.forgot-password');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the response for a successful password reset link request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
protected function sendResetLinkResponse(Request $request, $response)
|
||||
{
|
||||
return back()->with('status', trans($response));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the response for a failed password reset link request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param string $response
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
protected function sendResetLinkFailedResponse(Request $request, $response)
|
||||
{
|
||||
return back()->withErrors(['email' => trans($response)]);
|
||||
}
|
||||
}
|
|
@ -1,67 +1,149 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Penilaian;
|
||||
|
||||
use App\Models\Alternatif;
|
||||
use App\Models\Kriteria;
|
||||
use App\Models\Penilaian;
|
||||
use App\Models\Crips;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Exception;
|
||||
use PDF;
|
||||
|
||||
|
||||
use App\Models\Kriteria;
|
||||
use App\Http\Controllers\AlgoritmaController; // Impor AlgoritmaController
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class PenilaianController extends Controller
|
||||
{
|
||||
public function index(){
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$penilaians = Penilaian::with(['alternatif', 'kriteria', 'crips'])->get();
|
||||
$kriteria = Kriteria::all();
|
||||
$alternatif = Alternatif::with('penilaian.crips')->get();
|
||||
$kriteria = Kriteria::with('crips')->orderBy('id','ASC')->get();
|
||||
//return response()->json($alternatif);
|
||||
return view('admin.penilaian.index', compact('alternatif', 'kriteria'));
|
||||
|
||||
return view('admin.penilaian.index', compact('penilaians', 'kriteria', 'alternatif'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$alternatifs = Alternatif::all();
|
||||
$kriteria = Kriteria::all();
|
||||
$crips = Crips::all();
|
||||
return view('penilaian.create', compact('alternatifs', 'kriteria', 'crips'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
DB::table('penilaian')->truncate(); // lebih aman
|
||||
|
||||
$kriteria = Kriteria::orderBy('id', 'ASC')->get(); // urutan penting
|
||||
|
||||
foreach ($request->crips_id as $alternatif_id => $crips_list) {
|
||||
foreach ($crips_list as $index => $crips_id) {
|
||||
Penilaian::create([
|
||||
'alternatif_id' => $alternatif_id,
|
||||
'kriteria_id' => $kriteria[$index]->id, // ambil kriteria berdasarkan urutan
|
||||
'crips_id' => $crips_id
|
||||
$validated = $request->validate([
|
||||
'alternatif_id' => 'required|exists:alternatif,id',
|
||||
'kriteria_id' => 'required|exists:kriteria,id',
|
||||
]);
|
||||
}
|
||||
|
||||
// Ambil data alternatif berdasarkan id_alternatif
|
||||
$alternatif = Alternatif::find($validated['alternatif_id']);
|
||||
$kriteria = Kriteria::find($validated['kriteria_id']);
|
||||
|
||||
// Tentukan nilai berdasarkan id_kriteria
|
||||
$nilai = null;
|
||||
switch ($kriteria->id) {
|
||||
case 1: $nilai = $alternatif->usia; break; // Usia
|
||||
case 2: $nilai = $alternatif->pendidikan; break; // Pendidikan
|
||||
case 3: $nilai = $alternatif->ipk; break; // IPK
|
||||
case 4: $nilai = $alternatif->jurusan; break; // Jurusan
|
||||
case 5: $nilai = $alternatif->lama_studi; break; // Lama Studi
|
||||
case 6: $nilai = $alternatif->pengalaman; break; // Pengalaman
|
||||
case 7: $nilai = $alternatif->serkom; break; // Serkom
|
||||
}
|
||||
|
||||
return back()->with('msg', 'Berhasil Disimpan!');
|
||||
} catch (Exception $e) {
|
||||
Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage());
|
||||
die("Gagal");
|
||||
}
|
||||
// Panggil getCripsId untuk mendapatkan id_crips
|
||||
$crips_id = $this->getCripsId($kriteria->id, $nilai);
|
||||
|
||||
if (!$crips_id) {
|
||||
return redirect()->back()->with('error', 'Sub-kriteria tidak ditemukan untuk kriteria ini.');
|
||||
}
|
||||
|
||||
// Simpan data penilaian
|
||||
$penilaian = Penilaian::create([
|
||||
'alternatif_Id' => $validated['alternatif_id'],
|
||||
'kriteria_id' => $validated['kriteria_id'],
|
||||
'crips_id' => $crips_id,
|
||||
]);
|
||||
|
||||
public function downloadPDF() {
|
||||
setlocale(LC_ALL, 'IND');
|
||||
$tanggal = Carbon::now()->formatLocalized('%A, %d %B %Y');
|
||||
// $penilaian = Kriteria::get();
|
||||
// $alternatif = Alternatif::with('penilaian.crips')->get();
|
||||
// $kriteria = Kriteria::with('crips')->get();
|
||||
$alternatifs = Alternatif::with('penilaian.crips')->get();
|
||||
$kriteria = Kriteria::with('crips')->orderBy('nama_kriteria','ASC')->get();
|
||||
$penilaian = Penilaian::with('crips','alternatif')->get();
|
||||
// Panggil perhitungan SAW dari AlgoritmaController
|
||||
$algoritmaController = new AlgoritmaController();
|
||||
$algoritmaController->calculateSAW(
|
||||
Alternatif::with('penilaian.crips')->get(),
|
||||
Kriteria::get(),
|
||||
Penilaian::with('crips', 'alternatif')->get()
|
||||
);
|
||||
|
||||
$pdf = PDF::loadView('admin.penilaian.penilaian-pdf',compact('kriteria','tanggal','alternatif','penilaian'));
|
||||
$pdf->setPaper('A3', 'potrait');
|
||||
return $pdf->stream('penilaian.pdf');
|
||||
return redirect()->route('penilaian.index')->with('msg', 'Penilaian berhasil disimpan dan dihitung!');
|
||||
}
|
||||
|
||||
private function getCripsId($kriteria_id, $nilai)
|
||||
{
|
||||
$crips = Crips::where('kriteria_id', $kriteria_id)->get();
|
||||
$crips_id = null;
|
||||
|
||||
switch ($kriteria_id) {
|
||||
case 1: // Usia
|
||||
foreach ($crips as $crip) {
|
||||
if ($crip->nama_crips == '23-24' && $nilai >= 23 & $nilai <= 24) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '25-26' && $nilai >= 25 && $nilai <= 26) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '27-28' && $nilai >= 27 && $nilai <= 28) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '29-30' && $nilai >= 29 && $nilai <= 30) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '> 30' && $nilai > 30) $crips_id = $crip->id;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: // Pendidikan
|
||||
foreach ($crips as $crip) {
|
||||
if ($crip->nama_crips == $nilai) $crips_id = $crip->id;
|
||||
}
|
||||
break;
|
||||
|
||||
case 3: // IPK
|
||||
foreach ($crips as $crip) {
|
||||
if ($crip->nama_crips == '3.5-4.0' && $nilai >= 3.5 && $nilai <= 4.0) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '3.0-3.49' && $nilai >= 3.0 && $nilai < 3.5) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '2.75-2.99' && $nilai >= 2.75 && $nilai < 3.0) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '2.5-2.74' && $nilai >= 2.5 && $nilai < 2.75) $crips_id = $crip->id;
|
||||
}
|
||||
break;
|
||||
|
||||
case 4: // Jurusan
|
||||
foreach ($crips as $crip) {
|
||||
if ($crip->nama_crips == 'Teknik Sipil' && $nilai == 'Teknik Sipil') $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == 'Arsitektur' && $nilai == 'Arsitektur') $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == 'Teknologi Rekayasa Konstruksi Bangunan Gedung' && $nilai == 'Teknologi Rekayasa Konstruksi Bangunan Gedung') $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == 'Akuntansi' && $nilai == 'Akuntansi') $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == 'Lainnya' && $nilai == 'Lainnya') $crips_id = $crips->id;
|
||||
}
|
||||
break;
|
||||
|
||||
case 5: // Lama Studi
|
||||
foreach ($crips as $crip) {
|
||||
if ($crip->nama_crips == '<4 tahun' && $nilai < 4) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '4-5 tahun' && $nilai >= 4 && $nilai <= 5) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '>5 tahun' && $nilai > 5) $crips_id = $crip->id;
|
||||
}
|
||||
break;
|
||||
|
||||
case 6: // Pengalaman
|
||||
foreach ($crips as $crip) {
|
||||
if ($crip->nama_crips == '1-3 tahun' && $nilai >= 1 && $nilai <= 3) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == '>3 tahun' && $nilai > 3) $crips_id = $crip->id;
|
||||
}
|
||||
break;
|
||||
|
||||
case 7: // Serkom
|
||||
foreach ($crips as $crip) {
|
||||
if ($crip->nama_crips == 'Punya' && $nilai == 1) $crips_id = $crip->id;
|
||||
elseif ($crip->nama_crips == 'Tidak punya' && $nilai == 0) $crips_id = $crip->id;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return $crips_id;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class ProfileController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
|
||||
$user = Auth::user();
|
||||
|
||||
// Cek role-nya
|
||||
if ($user->role === 'admin') {
|
||||
// Tampilkan view untuk admin
|
||||
return view('admin.profile.index', compact('user'));
|
||||
} else {
|
||||
// Tampilkan view untuk user biasa
|
||||
return view('user.profile.index', compact('user'));
|
||||
}
|
||||
|
||||
}
|
||||
public function updatePhoto(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'photo' => 'image|mimes:jpeg,png,jpg|max:2048',
|
||||
]);
|
||||
|
||||
$user = Auth::user();
|
||||
|
||||
if ($request->hasFile('photo')) {
|
||||
$filename = time() . '.' . $request->photo->extension();
|
||||
$request->photo->move(public_path('assets/images'), $filename);
|
||||
$user->photo = 'assets/images/'.$filename;
|
||||
$user->save();
|
||||
}
|
||||
return redirect()->back()->with('success', 'Foto profil berhasil diperbarui.');
|
||||
}
|
||||
|
||||
public function updatePassword(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'current_password' =>'required',
|
||||
'new_password' => 'required', 'min:8', 'confirmed',
|
||||
'new_password_confirmation' => 'required',
|
||||
]);
|
||||
|
||||
$user = Auth::user();
|
||||
|
||||
if (!Hash::check($request->current_password, $user->password)) {
|
||||
return back()->withErrors(['current_password' => 'Password lama tidak cocok.']);
|
||||
}
|
||||
|
||||
// Update password baru
|
||||
$user->update([
|
||||
'password' => Hash::make($request->new_password),
|
||||
]);
|
||||
|
||||
return redirect()->back()->with('success', 'Password berhasil diperbarui!');
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -6,6 +6,7 @@
|
|||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
|
||||
class RegisterUserController extends Controller
|
||||
{
|
||||
public function showRegistrationForm()
|
||||
|
@ -15,6 +16,7 @@ public function showRegistrationForm()
|
|||
|
||||
public function register(Request $request)
|
||||
{
|
||||
// Validasi input
|
||||
$request->validate([
|
||||
'name' => 'required|string|max:191',
|
||||
'email' => 'required|email|unique:users',
|
||||
|
@ -22,19 +24,26 @@ public function register(Request $request)
|
|||
'alamat' => 'required|string|max:255',
|
||||
'telepon' => 'required|string|max:20',
|
||||
'keterangan' => 'nullable|string|max:255',
|
||||
'g-recaptcha-response' => 'required|captcha',
|
||||
]);
|
||||
|
||||
User::create([
|
||||
// Buat pengguna
|
||||
$user = User::create([
|
||||
'name' => $request->name,
|
||||
'email' => $request->email,
|
||||
'password' => Hash::make($request->password),
|
||||
'alamat' => $request->alamat,
|
||||
'telepon' => $request->telepon,
|
||||
'keterangan' => $request->keterangan,
|
||||
'role' => 'user', // langsung set role user
|
||||
'role' => 'user',
|
||||
]);
|
||||
|
||||
return redirect()->route('login')->with('success', 'Akun berhasil didaftarkan, silakan login!');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Login pengguna secara otomatis (opsional)
|
||||
//auth()->login($user);
|
||||
|
||||
// Arahkan ke halaman verifikasi
|
||||
return redirect()->route('home')->with('success', 'Akun berhasil didaftarkan, silakan verifikasi email Anda!');
|
||||
}
|
||||
}
|
|
@ -66,5 +66,6 @@ class Kernel extends HttpKernel
|
|||
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
||||
'admin' => \App\Http\Middleware\AdminMiddleware::class,
|
||||
'user' => \App\Http\Middleware\UserMiddleware::class,
|
||||
|
||||
];
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ class Alternatif extends Model
|
|||
protected $guarded = [];
|
||||
protected $fillable = [
|
||||
'nama_alternatif', 'usia', 'pendidikan', 'ipk',
|
||||
'jurusan', 'lama_studi', 'pengalaman', 'serkom'
|
||||
'jurusan', 'lama_studi', 'pengalaman', 'serkom', 'cv', 'dokumen_pendukung'
|
||||
];
|
||||
|
||||
|
||||
|
|
|
@ -11,8 +11,5 @@ class Kriteria extends Model
|
|||
protected $table = 'kriteria';
|
||||
protected $guarded = [];
|
||||
|
||||
public function crips()
|
||||
{
|
||||
return $this->hasMany(Crips::class,'kriteria_id');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -13,11 +13,16 @@ class Penilaian extends Model
|
|||
|
||||
public function crips()
|
||||
{
|
||||
return $this->belongsTo(Crips::class, 'crips_id');
|
||||
return $this->belongsTo(Crips::class, 'crips_id', 'id');
|
||||
}
|
||||
|
||||
public function kriteria()
|
||||
{
|
||||
return $this->belongsTo(Kriteria::class, 'kriteria_id', 'id');
|
||||
}
|
||||
public function alternatif()
|
||||
{
|
||||
return $this->belongsTo(Alternatif::class, 'alternatif_id');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,16 +2,15 @@
|
|||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
|
||||
|
||||
class User extends Authenticatable
|
||||
{
|
||||
use HasApiTokens, HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
|
|
|
@ -17,7 +17,7 @@ class RouteServiceProvider extends ServiceProvider
|
|||
*
|
||||
* @var string
|
||||
*/
|
||||
public const HOME = '/ ';
|
||||
public const HOME = '/redirect ';
|
||||
|
||||
/**
|
||||
* The controller namespace for the application.
|
||||
|
|
|
@ -6,7 +6,8 @@
|
|||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^8.0",
|
||||
"barryvdh/laravel-dompdf": "^2.0",
|
||||
"anhskohbo/no-captcha": "^3.7",
|
||||
"barryvdh/laravel-dompdf": "^2.2",
|
||||
"guzzlehttp/guzzle": "^7.2",
|
||||
"laravel/framework": "^9.0",
|
||||
"laravel/sanctum": "^2.14",
|
||||
|
|
|
@ -4,8 +4,72 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "cb2e4801c4d5a6d3b45e0bc7d7035ecf",
|
||||
"content-hash": "910e867f92f12159e6b1cdfff092548a",
|
||||
"packages": [
|
||||
{
|
||||
"name": "anhskohbo/no-captcha",
|
||||
"version": "3.7.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/anhskohbo/no-captcha.git",
|
||||
"reference": "87666572f0dbe1e3380a2e9ae7574bf3a2d0804e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/anhskohbo/no-captcha/zipball/87666572f0dbe1e3380a2e9ae7574bf3a2d0804e",
|
||||
"reference": "87666572f0dbe1e3380a2e9ae7574bf3a2d0804e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"guzzlehttp/guzzle": "^6.2|^7.0",
|
||||
"illuminate/support": "^5.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
|
||||
"php": ">=5.5.5"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~4.8|^9.5.10|^10.5"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"aliases": {
|
||||
"NoCaptcha": "Anhskohbo\\NoCaptcha\\Facades\\NoCaptcha"
|
||||
},
|
||||
"providers": [
|
||||
"Anhskohbo\\NoCaptcha\\NoCaptchaServiceProvider"
|
||||
]
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Anhskohbo\\NoCaptcha\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "anhskohbo",
|
||||
"email": "anhskohbo@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "No CAPTCHA reCAPTCHA For Laravel.",
|
||||
"keywords": [
|
||||
"captcha",
|
||||
"laravel",
|
||||
"laravel4",
|
||||
"laravel5",
|
||||
"laravel6",
|
||||
"no-captcha",
|
||||
"recaptcha"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/anhskohbo/no-captcha/issues",
|
||||
"source": "https://github.com/anhskohbo/no-captcha/tree/3.7.0"
|
||||
},
|
||||
"time": "2025-02-25T18:53:34+00:00"
|
||||
},
|
||||
{
|
||||
"name": "barryvdh/laravel-dompdf",
|
||||
"version": "v2.2.0",
|
||||
|
|
|
@ -18,7 +18,7 @@ public function up()
|
|||
$table->string('name',191);
|
||||
$table->string('email',191)->unique();
|
||||
$table->timestamp('email_verified_at')->nullable();
|
||||
$table->string('password',191);
|
||||
$table->string('password');
|
||||
$table->string('alamat');
|
||||
$table->string('telepon');
|
||||
$table->string('keterangan');
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
Schema::create('notifications', function (Blueprint $table) {
|
||||
$table->uuid('id')->primary();
|
||||
$table->string('type');
|
||||
$table->morphs('notifiable');
|
||||
$table->text('data');
|
||||
$table->timestamp('read_at')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('notifications');
|
||||
}
|
||||
};
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('jobs', function (Blueprint $table) {
|
||||
$table->bigIncrements('id');
|
||||
$table->string('queue')->index();
|
||||
$table->longText('payload');
|
||||
$table->unsignedTinyInteger('attempts');
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('jobs');
|
||||
}
|
||||
};
|
Binary file not shown.
After Width: | Height: | Size: 44 KiB |
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
Binary file not shown.
After Width: | Height: | Size: 44 KiB |
|
@ -0,0 +1,126 @@
|
|||
/* Gaya untuk halaman verifikasi email */
|
||||
.verify-container {
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: linear-gradient(135deg, #e6f3fa 0%, #d4e9f2 100%);
|
||||
font-family: 'Arial', sans-serif;
|
||||
}
|
||||
|
||||
.verify-card {
|
||||
background: #ffffff;
|
||||
border-radius: 15px;
|
||||
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
|
||||
padding: 2rem;
|
||||
max-width: 500px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
animation: fadeIn 1s ease-in-out;
|
||||
}
|
||||
|
||||
.verify-icon {
|
||||
display: inline-block;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
background: #28a745;
|
||||
border-radius: 50%;
|
||||
position: relative;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.verify-icon::before {
|
||||
content: '✉️';
|
||||
font-size: 2rem;
|
||||
color: #ffffff;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.verify-title {
|
||||
font-size: 1.8rem;
|
||||
font-weight: bold;
|
||||
color: #2c3e50;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.verify-text {
|
||||
font-size: 1rem;
|
||||
color: #6c757d;
|
||||
margin-bottom: 1.5rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.verify-resend-btn {
|
||||
font-size: 1rem;
|
||||
color: #007bff;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
transition: color 0.3s ease;
|
||||
}
|
||||
|
||||
.verify-resend-btn:hover {
|
||||
color: #0056b3;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.verify-home-btn {
|
||||
display: inline-block;
|
||||
padding: 0.75rem 1.5rem;
|
||||
background: #f8f9fa;
|
||||
color: #2c3e50;
|
||||
border: 2px solid #dee2e6;
|
||||
border-radius: 25px;
|
||||
text-decoration: none;
|
||||
font-size: 1rem;
|
||||
font-weight: 500;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.verify-home-btn:hover {
|
||||
background: #dee2e6;
|
||||
border-color: #ced4da;
|
||||
color: #212529;
|
||||
}
|
||||
|
||||
.verify-alert {
|
||||
background: #d4edda;
|
||||
color: #155724;
|
||||
border: 1px solid #c3e6cb;
|
||||
border-radius: 8px;
|
||||
padding: 1rem;
|
||||
margin-bottom: 1.5rem;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.verify-alert-close {
|
||||
position: absolute;
|
||||
top: 0.5rem;
|
||||
right: 0.75rem;
|
||||
background: none;
|
||||
border: none;
|
||||
font-size: 1rem;
|
||||
color: #155724;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
0% { opacity: 0; transform: translateY(20px); }
|
||||
100% { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
/* Responsif */
|
||||
@media (max-width: 576px) {
|
||||
.verify-card {
|
||||
padding: 1.5rem;
|
||||
margin: 1rem;
|
||||
}
|
||||
.verify-title {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
.verify-text {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
}
|
|
@ -4,7 +4,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>Document</title>
|
||||
<title>Data Alternatif</title>
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
|
||||
<style type="text/css">
|
||||
.garis1{
|
||||
|
@ -14,10 +14,10 @@
|
|||
|
||||
}
|
||||
|
||||
#camat{
|
||||
#hrd{
|
||||
text-align:center;
|
||||
}
|
||||
#nama-camat{
|
||||
#nama-hrd{
|
||||
margin-top:100px;
|
||||
text-align:center;
|
||||
}
|
||||
|
@ -35,13 +35,13 @@
|
|||
<div>
|
||||
<table>
|
||||
<tr>
|
||||
<td style="padding-right: 240px; padding-left: 20px"><img src="https://4.bp.blogspot.com/-TBASjipimVM/WM-xhIQc5yI/AAAAAAAAD5o/NeSO8wMRISQMLeTCfKBFmewY4vQt1y-NQCEw/s1600/Logo%2BJakarta%2BHitam.png" width="90" height="90" ></td>
|
||||
<td style="padding-right: 240px; padding-left: 20px"><img src="{{ asset('assets/images/logo no bg.png') }}" width="90" height="90" ></td>
|
||||
<td>
|
||||
<center>
|
||||
<font size="4">RUKUN TETANGGA 004</font><br>
|
||||
<font size="4">RUKUN WARGA 001</font><br>
|
||||
<font size="2">KELURAHAN KRAMAT JATI KECAMATAN KRAMAT JATI</font><br>
|
||||
<font size="2">KOTA ADMINISTRASI JAKARTA TIMUR</font><br>
|
||||
<font size="4">PT.Intecon Bangun Persada</font><br>
|
||||
<font size="2">Alamat: Jl. Cadika No. 4A, Sempusari, Kaliwates, Jember, Jawa Timur, Indonesia</font><br>
|
||||
<font size="2">Email: <a href="mailto:inteconbangunpersada@gmail.com">inteconbangunpersada@gmail.com</a></font><br>
|
||||
<font size="2">Phone: +62 331 423445</font><br>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -49,7 +49,7 @@
|
|||
|
||||
<hr class="garis1"/>
|
||||
<div style="margin-top: 25px; margin-bottom: 25px;">
|
||||
<center><strong><u>LIST WARGA</u></strong></center>
|
||||
<center><strong><u>DATA ALTERNATIF</u></strong></center>
|
||||
</div>
|
||||
|
||||
<div class="collapse show" id="listkriteria">
|
||||
|
@ -58,22 +58,26 @@
|
|||
<table class="table table-striped table-hover" id="DataTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>No</th>
|
||||
<th>Nama Warga</th>
|
||||
<th>NIK</th>
|
||||
<th>Alamat</th>
|
||||
<th>Telepon</th>
|
||||
<th>Nama</th>
|
||||
<th>Usia</th>
|
||||
<th>Pendidikan</th>
|
||||
<th>IPK</th>
|
||||
<th>Jurusan</th>
|
||||
<th>Lama Studi</th>
|
||||
<th>Pengalaman</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@php $no = 1; @endphp
|
||||
@foreach ($alternatif as $row)
|
||||
<tr>
|
||||
<td>{{ $no++ }}</td>
|
||||
<td>{{ $row->nama_alternatif }}</td>
|
||||
<td>{{ $row->nik }}</td>
|
||||
<td>{{ $row->alamat }}</td>
|
||||
<td>{{ $row->telepon }}</td>
|
||||
<td>{{ $row->usia }}</td>
|
||||
<td>{{ $row->pendidikan }}</td>
|
||||
<td>{{ $row->ipk }}</td>
|
||||
<td>{{ $row->jurusan }}</td>
|
||||
<td>{{ $row->lama_studi }}</td>
|
||||
<td>{{ $row->pengalaman }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
|
@ -85,9 +89,9 @@
|
|||
<div id="ttd" class="row">
|
||||
<div class="col-md-4"></div>
|
||||
<div class="col-md-4">
|
||||
<p id="camat">Jakarta, {{ $tanggal }}</p>
|
||||
<p id="camat"><strong>KETUA RT 004 / RW 001</strong></p>
|
||||
<div id="nama-camat"><strong><u>AGUSTINA</u></strong><br />
|
||||
<p id="hrd">Jember, {{ $tanggal }}</p>
|
||||
<p id="hrd"><strong>HRD & staff admin</strong></p>
|
||||
<div id="nama-hrd"><strong><u>Yudi Sulistiawan</u></strong><br />
|
||||
NIP. 3175044408730004</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -33,6 +33,8 @@ class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
|
|||
<th>Lama Studi</th>
|
||||
<th>Pengalaman</th>
|
||||
<th>Serkom</th>
|
||||
<th>CV</th>
|
||||
<th>Dokumen Pendukung</th>
|
||||
<th>Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
@ -47,6 +49,12 @@ class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
|
|||
<td>{{ $row->lama_studi }}</td>
|
||||
<td>{{ $row->pengalaman }}</td>
|
||||
<td>{{ $row->serkom ? 'Punya' : 'Tidak punya' }}</td>
|
||||
<td>
|
||||
<a href="{{ asset('storage/' . $row->cv) }}" target="_blank">Lihat CV</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ asset('storage/' . $row->dokumen_pendukung) }}" target="_blank">Lihat Dokumen Pendukung</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ route('alternatif.edit',$row->id) }}" class="btn btn-sm btn-circle btn-warning">
|
||||
<i class="fa fa-edit"></i>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
@extends('layouts.app')
|
||||
@section('title', 'SPK Penerima Bantuan | Crips')
|
||||
@section('title', 'SPK Penerimaan Karyawan | Crips')
|
||||
@section('topbar', 'Data Crips')
|
||||
@section('css')
|
||||
|
||||
|
@ -60,13 +60,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
@stop
|
||||
|
|
@ -42,6 +42,7 @@
|
|||
<a href="{{ route('kriteria.index') }}">
|
||||
<div class="card border-left-success shadow h-100 py-2">
|
||||
<div class="card-body">
|
||||
<div class="row no-gutters align-items-center">
|
||||
<div class="col mr-2">
|
||||
<div class="text-xs font-weight-bold text-success text-uppercase mb-1">
|
||||
Jumlah Kriteria</div>
|
||||
|
@ -52,6 +53,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
@extends('layouts.app')
|
||||
@section('title', 'Tambah Crips '. $kriteria->nama_kriteria)
|
||||
@section('topbar', 'Data Crips')
|
||||
@section('title', 'Tambah Sub Kriteria '. $kriteria->nama_kriteria)
|
||||
@section('topbar', 'Data Sub Kriteria')
|
||||
@section('css')
|
||||
|
||||
<!-- Custom styles for this page -->
|
||||
|
@ -13,7 +13,7 @@
|
|||
<!-- Card Header - Accordion -->
|
||||
<a href="#tambahcrips" class="d-block card-header py-3" data-toggle="collapse"
|
||||
role="button" aria-expanded="true" aria-controls="collapseCardExample">
|
||||
<h6 class="m-0 font-weight-bold text-primary">Tambah Crips</h6>
|
||||
<h6 class="m-0 font-weight-bold text-primary">Tambah Sub Kriteria</h6>
|
||||
</a>
|
||||
|
||||
<!-- Card Content - Collapse -->
|
||||
|
@ -32,7 +32,7 @@
|
|||
@csrf
|
||||
<input type="hidden" value="{{ $kriteria->id }}" name="kriteria_id">
|
||||
<div class="form-group">
|
||||
<label for="nama">Nama Crips</label>
|
||||
<label for="nama">Nama Sub Kriteria</label>
|
||||
<input type="text" class="form-control @error ('nama_crips') is-invalid @enderror" name="nama_crips" value="{{ old('nama_crips') }}">
|
||||
|
||||
@error('nama_crips')
|
||||
|
@ -43,7 +43,7 @@
|
|||
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="bobot">Bobot Crips</label>
|
||||
<label for="bobot">Bobot</label>
|
||||
<input type="text" class="form-control @error ('bobot') is-invalid @enderror" name="bobot" value="{{ old('bobot') }}">
|
||||
|
||||
@error('bobot')
|
||||
|
@ -66,7 +66,7 @@
|
|||
<!-- Card Header - Accordion -->
|
||||
<a href="#listcrips" class="d-block card-header py-3" data-toggle="collapse"
|
||||
role="button" aria-expanded="true" aria-controls="collapseCardExample">
|
||||
<h6 class="m-0 font-weight-bold text-primary">List Crips {{ $kriteria->nama_kriteria }}</h6>
|
||||
<h6 class="m-0 font-weight-bold text-primary">List Sub Kriteria {{ $kriteria->nama_kriteria }}</h6>
|
||||
</a>
|
||||
|
||||
<!-- Card Content - Collapse -->
|
||||
|
@ -80,7 +80,7 @@ class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a> --}}
|
|||
<thead>
|
||||
<tr>
|
||||
<th>No</th>
|
||||
<th>Nama Crips</th>
|
||||
<th>Nama Sub Kriteria</th>
|
||||
<th>Bobot</th>
|
||||
<th>Aksi</th>
|
||||
</tr>
|
||||
|
|
|
@ -56,45 +56,27 @@ class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
|
|||
@endforeach
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
@forelse ($alternatif as $alt => $valt)
|
||||
<tr>
|
||||
<td>{{ $valt->nama_alternatif }}</td>
|
||||
@if (count($valt->penilaian) > 0)
|
||||
@foreach($kriteria as $key => $value)
|
||||
@foreach($kriteria as $k)
|
||||
<td>
|
||||
<select name="crips_id[{{$valt->id}}][]" class="form-control">
|
||||
@foreach($value->crips as $k_1 => $v_1)
|
||||
<option value="{{ $v_1->id }}" {{ $v_1->id == $valt->penilaian[$key]->crips_id ? 'selected' : '' }}>
|
||||
{{ $v_1->nama_crips }}</option>
|
||||
|
||||
@endforeach
|
||||
</select>
|
||||
@php
|
||||
$penilaian = $valt->penilaian->firstWhere('kriteria_id', $k->id);
|
||||
@endphp
|
||||
{{ $penilaian ? $penilaian->crips->nama_crips : '-' }}
|
||||
</td>
|
||||
@endforeach
|
||||
@else
|
||||
@foreach($kriteria as $key => $value)
|
||||
<td>
|
||||
<select name="crips_id[{{$valt->id}}][]" class="form-control">
|
||||
@foreach($value->crips as $k_1 => $v_1)
|
||||
<option value="{{ $v_1->id }}">
|
||||
{{ $v_1->nama_crips }}</option>
|
||||
|
||||
@endforeach
|
||||
</select>
|
||||
</td>
|
||||
@endforeach
|
||||
@endif
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td>Tidak ada data!</td>
|
||||
<td colspan="{{ count($kriteria) + 1 }}">Tidak ada data!</td>
|
||||
</tr>
|
||||
|
||||
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -67,7 +67,7 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse ($alternatif as $alt => $valt)
|
||||
@forelse ($alternatifs as $alt => $valt)
|
||||
<tr>
|
||||
<td>{{ $valt->nama_alternatif }}</td>
|
||||
@if (count($valt->penilaian) > 0)
|
||||
|
|
|
@ -3,24 +3,11 @@
|
|||
@section('topbar', 'Data Perhitungan')
|
||||
@section('content')
|
||||
|
||||
{{-- <div class="mb-4">
|
||||
<!-- Card Header - Accordion -->
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<a href="{{ URL::to('download-perhitungan-pdf') }}" target="_blank" class="d-none d-sm-inline-block btn btn-sm btn-success shadow-sm float-right"><i
|
||||
class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
|
||||
</div>
|
||||
</div>
|
||||
</div> --}}
|
||||
|
||||
<div class="card shadow mb-4">
|
||||
<!-- Card Header - Accordion -->
|
||||
<a href="#listkriteria" class="d-block card-header py-3" data-toggle="collapse"
|
||||
role="button" aria-expanded="true" aria-controls="collapseCardExample">
|
||||
<h6 class="m-0 font-weight-bold text-primary">Tahap Analisa</h6>
|
||||
</a>
|
||||
|
||||
<!-- Card Content - Collapse -->
|
||||
<div class="collapse show" id="listkriteria">
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
|
@ -43,15 +30,12 @@ class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
|
|||
{{ $value->crips->bobot }}
|
||||
</td>
|
||||
@endforeach
|
||||
|
||||
@endif
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td>Tidak ada data!</td>
|
||||
</tr>
|
||||
|
||||
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -61,13 +45,10 @@ class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
|
|||
</div>
|
||||
|
||||
<div class="card shadow mb-4">
|
||||
<!-- Card Header - Accordion -->
|
||||
<a href="#normalisasi" class="d-block card-header py-3" data-toggle="collapse"
|
||||
role="button" aria-expanded="true" aria-controls="collapseCardExample">
|
||||
<h6 class="m-0 font-weight-bold text-primary">Tahap Normalisasi</h6>
|
||||
</a>
|
||||
|
||||
<!-- Card Content - Collapse -->
|
||||
<div class="collapse show" id="normalisasi">
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
|
@ -84,12 +65,8 @@ class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
|
|||
@foreach ($normalisasi as $key => $value)
|
||||
<tr>
|
||||
<td>{{ $key }}</td>
|
||||
@foreach($value as $key_1 => $value_1)
|
||||
<td>
|
||||
@if($value[count($value)-1] != $key_1)
|
||||
{{ $value_1 }}
|
||||
@endif
|
||||
</td>
|
||||
@foreach ($kriteria as $k)
|
||||
<td>{{ number_format($value[$k->id] ?? 0, 2) }}</td>
|
||||
@endforeach
|
||||
</tr>
|
||||
@endforeach
|
||||
|
@ -101,13 +78,10 @@ class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
|
|||
</div>
|
||||
|
||||
<div class="card shadow mb-4">
|
||||
<!-- Card Header - Accordion -->
|
||||
<a href="#rank" class="d-block card-header py-3" data-toggle="collapse"
|
||||
role="button" aria-expanded="true" aria-controls="collapseCardExample">
|
||||
<h6 class="m-0 font-weight-bold text-primary">Tahap Perangkingan</h6>
|
||||
</a>
|
||||
|
||||
<!-- Card Content - Collapse -->
|
||||
<div class="collapse show" id="rank">
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
|
@ -129,14 +103,14 @@ class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@php $no = 1;@endphp
|
||||
@foreach($sortedData as $key => $value)
|
||||
@foreach($sortedData as $data)
|
||||
<tr>
|
||||
<td>{{ $key }}</td>
|
||||
@foreach($value as $key_1 => $value_1)
|
||||
<td>{{ number_format($value_1, 1) }}</td>
|
||||
<td>{{ $data['name'] }}</td>
|
||||
@foreach($kriteria as $k)
|
||||
<td>{{ number_format($data['normalisasi'][$k->id] ?? 0, 2) }}</td>
|
||||
@endforeach
|
||||
<td>{{ $no++ }}</td>
|
||||
<td>{{ number_format($data['score'], 2) }}</td>
|
||||
<td>{{ $data['rank'] }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
|
|
|
@ -0,0 +1,169 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="id">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Profil Pengguna</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css" rel="stylesheet">
|
||||
|
||||
<style>
|
||||
body {
|
||||
background: rgb(120, 150, 193);
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
}
|
||||
.profile-card {
|
||||
max-width: 600px;
|
||||
margin: 80px auto;
|
||||
background: #fff;
|
||||
border-radius: 15px;
|
||||
padding: 30px;
|
||||
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.08);
|
||||
text-align: center;
|
||||
}
|
||||
.profile-title {
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.profile-info {
|
||||
text-align: left;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.profile-info p {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- Tombol kembali di pojok kiri atas -->
|
||||
<a href="{{ route('admin.home') }}" class="btn btn-light shadow-sm d-inline-flex align-items-center"
|
||||
style="position: absolute; top: 20px; left: 20px; z-index: 1000; gap: 6px;">
|
||||
<i class="bi bi-house-fill" style="font-size: 20px;"></i>
|
||||
Beranda
|
||||
</a>
|
||||
|
||||
|
||||
<!-- Alert session -->
|
||||
@if (session('success'))
|
||||
<div class="alert alert-success container mt-4">
|
||||
{{ session('success') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger container mt-4">
|
||||
<ul class="mb-0">
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="profile-card">
|
||||
<!-- Tombol kembali -->
|
||||
|
||||
|
||||
<!-- Foto & upload -->
|
||||
<form action="{{ route('profile.updatePhoto') }}" method="POST" enctype="multipart/form-data">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
|
||||
<div class="avatar-container text-center" style="position: relative; display: inline-block;">
|
||||
<label for="photo" style="cursor: pointer;">
|
||||
@if ($user->photo)
|
||||
<img src="{{ asset( $user->photo) }}" alt="Foto Profil"
|
||||
style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;">
|
||||
@else
|
||||
<div style="
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
background-color: #007bff;
|
||||
border-radius: 50%;
|
||||
color: white;
|
||||
font-size: 36px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;">
|
||||
{{ strtoupper(substr($user->name, 0, 2)) }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<!-- Ikon Edit -->
|
||||
<div style="
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background-color: #fff;
|
||||
border-radius: 50%;
|
||||
padding: 6px;
|
||||
box-shadow: 0 0 5px rgba(0,0,0,0.3);">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"
|
||||
fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M15.502 1.94a.5.5 0 0 1 0 .706l-1.293 1.293-2.121-2.121
|
||||
1.293-1.293a.5.5 0 0 1 .707 0l1.414 1.415zm-2.561
|
||||
2.561L5 12.44V14h1.561l7.941-7.941-2.561-2.561z"/>
|
||||
</svg>
|
||||
</div>
|
||||
</label>
|
||||
<input type="file" id="photo" name="photo" accept="image/*" style="display: none;" onchange="this.form.submit()">
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="profile-title mt-3">{{ $user->name }}</div>
|
||||
|
||||
<!-- Info Profil -->
|
||||
<div class="profile-info mt-4">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-4 font-weight-bold">Email</div>
|
||||
<div class="col-sm-8">{{ $user->email }}</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-4 font-weight-bold">No Telepon</div>
|
||||
<div class="col-sm-8">{{ $user->telepon }}</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-4 font-weight-bold">Alamat</div>
|
||||
<div class="col-sm-8">{{ $user->alamat }}</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4 font-weight-bold">Role</div>
|
||||
<div class="col-sm-8">{{ ucfirst($user->role ?? 'User') }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- Ubah Password -->
|
||||
@if ($user->role != 'admin')
|
||||
<hr>
|
||||
<form action="{{ route('profile.updatePassword') }}" method="POST">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<h5>Ubah Password</h5>
|
||||
|
||||
<div class="mb-2">
|
||||
<label for="current_password">Password Lama</label>
|
||||
<input type="password" name="current_password" id="current_password" class="form-control" required>
|
||||
</div>
|
||||
|
||||
<div class="mb-2">
|
||||
<label for="new_password">Password Baru</label>
|
||||
<input type="password" name="new_password" id="new_password" class="form-control" required>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="new_password_confirmation">Konfirmasi Password Baru</label>
|
||||
<input type="password" name="new_password_confirmation" id="new_password_confirmation" class="form-control" required>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary w-100">Simpan Password Baru</button>
|
||||
</form>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<!-- Optional: Bootstrap JS -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -8,29 +8,18 @@
|
|||
@stop
|
||||
@section('content')
|
||||
|
||||
|
||||
{{-- <div class="mb-4">
|
||||
<!-- Card Header - Accordion -->
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<a href="{{ URL::to('download-user-pdf') }}" target="_blank" class="d-none d-sm-inline-block btn btn-sm btn-success shadow-sm float-right"><i
|
||||
class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div> --}}
|
||||
|
||||
<div class="card shadow mb-4">
|
||||
<!-- Card Header - Accordion -->
|
||||
<a href="#listkriteria" class="d-block card-header py-3" data-toggle="collapse"
|
||||
role="button" aria-expanded="true" aria-controls="collapseCardExample">
|
||||
<h6 class="m-0 font-weight-bold text-primary">List Pengguna</h6>
|
||||
</a>
|
||||
|
||||
<!-- Card Content - Collapse -->
|
||||
<div class="collapse show" id="listkriteria">
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<a href="{{ URL::to('download-user-pdf') }}" target="_blank" class="d-none d-sm-inline-block btn btn-sm btn-success shadow-sm float-right"><i
|
||||
class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
|
||||
<a href="{{ route('register.user')}}">
|
||||
<!--<button class="btn btn-sm btn-primary">Tambah Pengguna</button>-->
|
||||
</a>
|
||||
|
|
|
@ -14,10 +14,10 @@
|
|||
|
||||
}
|
||||
|
||||
#camat{
|
||||
#hrd{
|
||||
text-align:center;
|
||||
}
|
||||
#nama-camat{
|
||||
#nama-hrd{
|
||||
margin-top:100px;
|
||||
text-align:center;
|
||||
}
|
||||
|
@ -35,13 +35,13 @@
|
|||
<div>
|
||||
<table>
|
||||
<tr>
|
||||
<td style="padding-right: 240px; padding-left: 20px"><img src="https://4.bp.blogspot.com/-TBASjipimVM/WM-xhIQc5yI/AAAAAAAAD5o/NeSO8wMRISQMLeTCfKBFmewY4vQt1y-NQCEw/s1600/Logo%2BJakarta%2BHitam.png" width="90" height="90" ></td>
|
||||
<td style="padding-right: 240px; padding-left: 20px"><img src="{{ asset('assets/images/logo no bg.png') }}" width="90" height="90" ></td>
|
||||
<td>
|
||||
<center>
|
||||
<font size="4">RUKUN TETANGGA 004</font><br>
|
||||
<font size="4">RUKUN WARGA 001</font><br>
|
||||
<font size="2">KELURAHAN KRAMAT JATI KECAMATAN KRAMAT JATI</font><br>
|
||||
<font size="2">KOTA ADMINISTRASI JAKARTA TIMUR</font><br>
|
||||
<font size="4">PT.Intecon Bangun Persada</font><br>
|
||||
<font size="2">Alamat: Jl. Cadika No. 4A, Sempusari, Kaliwates, Jember, Jawa Timur, Indonesia</font><br>
|
||||
<font size="2">Email: <a href="mailto:inteconbangunpersada@gmail.com">inteconbangunpersada@gmail.com</a></font><br>
|
||||
<font size="2">Phone: +62 331 423445</font><br>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -49,7 +49,7 @@
|
|||
|
||||
<hr class="garis1"/>
|
||||
<div style="margin-top: 25px; margin-bottom: 25px;">
|
||||
<center><strong><u>LIST PENGGUNA</u></strong></center>
|
||||
<center><strong><u>Daftar Pengguna</u></strong></center>
|
||||
</div>
|
||||
|
||||
<div class="collapse show" id="listkriteria">
|
||||
|
@ -88,9 +88,9 @@
|
|||
<div id="ttd" class="row">
|
||||
<div class="col-md-4"></div>
|
||||
<div class="col-md-4">
|
||||
<p id="camat">Jakarta, {{ $tanggal }}</p>
|
||||
<p id="camat"><strong>KETUA RT 004 / RW 001</strong></p>
|
||||
<div id="nama-camat"><strong><u>AGUSTINA</u></strong><br />
|
||||
<p id="hrd">Jember, {{ $tanggal }}</p>
|
||||
<p id="hrd"><strong>HRD & stadd admin</strong></p>
|
||||
<div id="nama-camat"><strong><u>Yudi Sulistiawan</u></strong><br />
|
||||
NIP. 3175044408730004</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -64,8 +64,8 @@
|
|||
<div class="row">
|
||||
<img src="assets/images/logo no bg.png" alt="Logo Intecon" class="logo">
|
||||
<div class="left-content">
|
||||
<h1>Welcome !</h1>
|
||||
<p class="mt-3">PT. Intecon Bangun Persada</p>
|
||||
<h1>SIPKAR !</h1>
|
||||
<p class="mt-3">Sistem Penerimaan karyawan</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
@ -116,7 +116,7 @@
|
|||
</div>
|
||||
</form>
|
||||
<div class="text-center">
|
||||
<a class="small" href="forgot-password.html">Forgot Password?</a>
|
||||
<a class="small" href="{{ route("password.request")}}">Forgot Password?</a>
|
||||
</div>
|
||||
{{-- <div class="text-center">
|
||||
<a class="small" href="{{ route('register')}}">Buat Akun Baru!</a>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.app')
|
||||
@extends('layouts.guest')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.app')
|
||||
@extends('layouts.guest')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.app')
|
||||
@extends('layouts.guest')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
|
|
|
@ -4,9 +4,19 @@
|
|||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="col-md-7">
|
||||
<div class="card shadow">
|
||||
<div class="card-header">{{ __('Register') }}</div>
|
||||
<div class="card-header d-flex align-items-center " style="background-color:rgb(11, 128, 200)">
|
||||
<img src="{{ asset('assets/images/logo.png') }}"
|
||||
alt="Logo" width="50" height="50" style="object-fit: contain; margin-right: 15px;">
|
||||
<span class="fw-bold" style="font-size: 1.45rem; font-family: 'Poppins', sans-serif; color: white;">
|
||||
Daftar Akun
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="card-body">
|
||||
<form action="{{ route('register.user.submit') }}" method="post">
|
||||
|
@ -101,6 +111,17 @@ class="form-control @error('keterangan') is-invalid @enderror" name="keterangan"
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-6 offset-md-4">
|
||||
<div class="g-recaptcha" data-sitekey="{{ env('NOCAPTCHA_SITEKEY') }}"></div>
|
||||
@error('g-recaptcha-response')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-0">
|
||||
<div class="col-md-6 offset-md-4">
|
||||
<button type="submit" class="btn btn-primary float-right">
|
||||
|
@ -109,6 +130,7 @@ class="form-control @error('keterangan') is-invalid @enderror" name="keterangan"
|
|||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,28 +1,35 @@
|
|||
@extends('layouts.app')
|
||||
@extends('layouts.verify-email')
|
||||
|
||||
@section('title', __('Email Verification'))
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">{{ __('Verify Your Email Address') }}</div>
|
||||
|
||||
<div class="card-body">
|
||||
<div class="verify-container">
|
||||
<div class="verify-card">
|
||||
<!-- Ikon Email -->
|
||||
<div class="verify-icon"></div>
|
||||
<!-- Judul -->
|
||||
<h2 class="verify-title">{{ __('Verifikasi alamat email mu!') }}</h2>
|
||||
<!-- Pesan Sukses (Jika Resend) -->
|
||||
@if (session('resent'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ __('A fresh verification link has been sent to your email address.') }}
|
||||
<div class="verify-alert">
|
||||
{{ __('Link verifikasi sudah terkirim. Silahkan cek inbox email anda!') }}
|
||||
<button type="button" class="verify-alert-close" onclick="this.parentElement.style.display='none'">×</button>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
{{ __('Before proceeding, please check your email for a verification link.') }}
|
||||
{{ __('If you did not receive the email') }},
|
||||
<!-- Instruksi -->
|
||||
<p class="verify-text">
|
||||
{{ __('Terimakasih sudah mendaftar, silahkan verifikasi email mu!') }}
|
||||
</p>
|
||||
<!-- Form Resend -->
|
||||
<p class="verify-text">
|
||||
{{ __() }}
|
||||
<form class="d-inline" method="POST" action="{{ route('verification.resend') }}">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-link p-0 m-0 align-baseline">{{ __('click here to request another') }}</button>.
|
||||
<button type="submit" class="verify-resend-btn">{{ __('Verifikasi sekarang') }}</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</p>
|
||||
<!-- Tombol Kembali ke Beranda -->
|
||||
<a href="{{ url('/') }}" class="verify-home-btn">{{ __('Kembali ke halaman Utama') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
|
@ -2,7 +2,10 @@
|
|||
|
||||
<!-- Sidebar - Brand -->
|
||||
<a class="sidebar-brand d-flex align-items-center justify-content-center" href="{{ route('home') }}">
|
||||
<div class="sidebar-brand-text mx-3">SPK Penerimaan Karyawan</div>
|
||||
<div class="sidebar-brand-icon">
|
||||
<img src="{{ asset('assets/images/logo.png') }}" class="rounded-circle" style="height: 45px; with: auto;">
|
||||
</div>
|
||||
<div class="sidebar-brand-text mx-3" style="margin-left: 8px;">SIPKAR</div>
|
||||
</a>
|
||||
|
||||
<!-- Divider -->
|
||||
|
@ -65,11 +68,11 @@
|
|||
<span>Data Pengguna</span></a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item {{ request()->Is('laporan*') ? 'active':'' }}">
|
||||
<!-- <li class="nav-item {{ request()->Is('laporan*') ? 'active':'' }}">
|
||||
<a class="nav-link" href="{{ route('laporan')}}">
|
||||
<i class="fas fa-fw fa-file-alt"></i>
|
||||
<span>Laporan</span></a>
|
||||
</li>
|
||||
</li> -->
|
||||
|
||||
<!-- Divider -->
|
||||
<hr class="sidebar-divider d-none d-md-block">
|
||||
|
|
|
@ -2,7 +2,10 @@
|
|||
|
||||
<!-- Sidebar - Brand -->
|
||||
<a class="sidebar-brand d-flex align-items-center justify-content-center" href="{{ route('home') }}">
|
||||
<div class="sidebar-brand-text mx-3">SPK Penerimaan Karyawan</div>
|
||||
<div class="sidebar-brand-icon">
|
||||
<img src="{{ asset('assets/images/logo.png') }}" class="rounded-circle" style="height: 45px; with: auto;">
|
||||
</div>
|
||||
<div class="sidebar-brand-text mx-3" style="margin-left: 8px;">SIPKAR</div>
|
||||
</a>
|
||||
|
||||
<!-- Divider -->
|
||||
|
@ -40,9 +43,9 @@
|
|||
<hr class="sidebar-divider d-none d-md-block">
|
||||
|
||||
<!-- Heading -->
|
||||
<div class="sidebar-heading">
|
||||
<!-- <div class="sidebar-heading">
|
||||
HASIL LAMARAN
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<!-- <li class="nav-item {{ request()->Is('penilaian*') ? 'active':'' }}">
|
||||
<a class="nav-link" href="{{ route('penilaian.index') }}">
|
||||
|
|
|
@ -13,6 +13,42 @@
|
|||
|
||||
<!-- Topbar Navbar -->
|
||||
<ul class="navbar-nav ml-auto">
|
||||
@auth
|
||||
<li class="nav-item dropdown no-arrow mx-1">
|
||||
<a class="nav-link dropdown-toggle" href="#" id="alertsDropdown" role="button"
|
||||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<i class="fas fa-bell fa-fw"></i>
|
||||
<!-- Counter - Alerts -->
|
||||
<span class="badge badge-danger badge-counter">
|
||||
{{ auth()->user()->unreadNotifications->count() }}
|
||||
</span>
|
||||
</a>
|
||||
<!-- Dropdown - Notifications -->
|
||||
<div class="dropdown-list dropdown-menu dropdown-menu-right shadow animated--grow-in"
|
||||
aria-labelledby="alertsDropdown">
|
||||
<h6 class="dropdown-header">
|
||||
Notifikasi
|
||||
</h6>
|
||||
@forelse(auth()->user()->unreadNotifications as $notification)
|
||||
<a class="dropdown-item d-flex align-items-center" href="{{ route('alternatif.index') }}">
|
||||
<div class="mr-3">
|
||||
<div class="icon-circle bg-primary">
|
||||
<i class="fas fa-user text-white"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="small text-gray-500">{{ $notification->created_at->diffForHumans() }}</div>
|
||||
<span class="font-weight-bold">{{ $notification->data['message'] }}</span>
|
||||
</div>
|
||||
</a>
|
||||
@empty
|
||||
<div class="dropdown-item text-center small text-gray-500">Tidak ada notifikasi baru</div>
|
||||
@endforelse
|
||||
<a class="dropdown-item text-center small text-gray-500" href="#">Tampilkan Semua Notifikasi</a>
|
||||
</div>
|
||||
</li>
|
||||
@else
|
||||
@endauth
|
||||
|
||||
<div class="topbar-divider d-none d-sm-block"></div>
|
||||
|
||||
|
@ -30,7 +66,7 @@
|
|||
<!-- Dropdown - User Information -->
|
||||
<div class="dropdown-menu dropdown-menu-right shadow animated--grow-in"
|
||||
aria-labelledby="userDropdown">
|
||||
<a class="dropdown-item" href="#">
|
||||
<a class="dropdown-item" href="{{ route('profile') }}">
|
||||
<i class="fas fa-user fa-sm fa-fw mr-2 text-gray-400"></i>
|
||||
Profile
|
||||
</a>
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
<nav class="navbar navbar-expand navbar-light bg-white topbar mb-4 static-top shadow">
|
||||
|
||||
<!-- Sidebar Toggle (Topbar) -->
|
||||
<button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3">
|
||||
<i class="fa fa-bars"></i>
|
||||
</button>
|
||||
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-brand">@yield('topbar')</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Topbar Navbar -->
|
||||
<ul class="navbar-nav ml-auto">
|
||||
|
||||
|
||||
<div class="topbar-divider d-none d-sm-block"></div>
|
||||
|
||||
@auth
|
||||
<!-- Nav Item - User Information -->
|
||||
<li class="nav-item dropdown no-arrow">
|
||||
<a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button"
|
||||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
|
||||
<i class="fas fa-user-circle fa-lg text-gray-600 mr-2"></i>
|
||||
<span class="mr-2 d-none d-lg-inline text-gray-600 small">{{ Auth::user()->name }}</span>
|
||||
{{-- <img class="img-profile rounded-circle" src="img/undraw_profile.svg"> --}}
|
||||
</a>
|
||||
|
||||
<!-- Dropdown - User Information -->
|
||||
<div class="dropdown-menu dropdown-menu-right shadow animated--grow-in"
|
||||
aria-labelledby="userDropdown">
|
||||
<a class="dropdown-item" href="{{ route('profile') }}">
|
||||
<i class="fas fa-user fa-sm fa-fw mr-2 text-gray-400"></i>
|
||||
Profile
|
||||
</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#logoutModal">
|
||||
<i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400"></i>
|
||||
Logout
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
@endauth
|
||||
|
||||
@guest
|
||||
<!-- Jika belum login -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ route('login') }}">
|
||||
<i class="fas fa-sign-in-alt fa-lg text-gray-600 mr-2"></i>
|
||||
<span class="mr-2 d-none d-lg-inline text-gray-600 small">Login</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ route('register.user') }}">
|
||||
<i class="fas fa-user-plus fa-lg text-gray-600 mr-2"></i>
|
||||
<span class="mr-2 d-none d-lg-inline text-gray-600 small">Daftar</span>
|
||||
</a>
|
||||
</li>
|
||||
@endguest
|
||||
</ul>
|
||||
</nav>
|
|
@ -29,7 +29,7 @@
|
|||
<!-- Topbar -->
|
||||
|
||||
@include('layouts/_partials/topbar')
|
||||
|
||||
<!-- Di bagian navbar, tambahkan: -->
|
||||
<!-- End of Topbar -->
|
||||
|
||||
<!-- Begin Page Content -->
|
||||
|
@ -54,7 +54,9 @@
|
|||
<!-- End of Main Content -->
|
||||
|
||||
<!-- Footer -->
|
||||
<div style="margin-top: 85px;">
|
||||
@include('layouts/_partials/footer')
|
||||
</div>
|
||||
<!-- End of Footer -->
|
||||
|
||||
</div>
|
||||
|
@ -101,6 +103,8 @@
|
|||
<!-- Custom scripts for all pages-->
|
||||
<script src="{{ asset('js/sb-admin-2.min.js') }}"></script>
|
||||
|
||||
<script src="{{ asset('js/notifications.js') }}"></script>
|
||||
|
||||
@yield('js')
|
||||
|
||||
</body>
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
@include('layouts/_partials/head')
|
||||
|
||||
@yield('css')
|
||||
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@600&display=swap" rel="stylesheet">
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
|
@ -53,7 +55,9 @@
|
|||
<!-- End of Main Content -->
|
||||
|
||||
<!-- Footer -->
|
||||
<div style="margin-top: 85px;">
|
||||
@include('layouts/_partials/footer')
|
||||
</div>
|
||||
<!-- End of Footer -->
|
||||
|
||||
</div>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
|
||||
<!-- Topbar -->
|
||||
|
||||
@include('layouts/_partials/topbar')
|
||||
@include('layouts/_partials/topbar2')
|
||||
|
||||
<!-- End of Topbar -->
|
||||
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{ config('app.name', 'SPK Penerimaan Karyawan') }} - @yield('title')</title>
|
||||
<!-- Bootstrap CSS (opsional, hapus jika tidak digunakan) -->
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<!-- Custom CSS -->
|
||||
<link href="{{ asset('css/custom.css') }}" rel="stylesheet">
|
||||
@yield('styles')
|
||||
</head>
|
||||
<body>
|
||||
@yield('content')
|
||||
<!-- Bootstrap JS (opsional, hapus jika tidak digunakan) -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
@yield('scripts')
|
||||
</body>
|
||||
</html>
|
|
@ -57,13 +57,13 @@
|
|||
|
||||
<div class="form-group">
|
||||
<label for="lama_studi">Lama Studi (tahun)</label>
|
||||
<input type="number" step="0.1" class="form-control @error ('lama_studi') is-invalid @enderror" name="lama_studi" value="{{ $alternatif->lama_studi }}">
|
||||
<input type="number" min="0" max="10" step="1" class="form-control @error ('lama_studi') is-invalid @enderror" name="lama_studi" value="{{ $alternatif->lama_studi }}">
|
||||
@error('lama_studi')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="pengalaman">Pengalaman Kerja (tahun)</label>
|
||||
<input type="number" class="form-control @error ('pengalaman') is-invalid @enderror" name="pengalaman" value="{{ $alternatif->pengalaman }}">
|
||||
<input type="number" min="0" max="10" step="1" class="form-control @error ('pengalaman') is-invalid @enderror" name="pengalaman" value="{{ $alternatif->pengalaman }}">
|
||||
@error('pengalaman')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
|
||||
|
@ -81,9 +81,7 @@
|
|||
</form>
|
||||
|
||||
</div>
|
||||
<button class="btn btn-primary">Simpan</button>
|
||||
<a href="{{ route('alternatif.index') }}" class="btn btn-success">Kembali</a>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -100,7 +100,7 @@ class="form-control @error('jurusan') is-invalid @enderror"
|
|||
|
||||
<div class="form-group">
|
||||
<label for="lama_studi">Lama Studi (tahun) <span class="text-danger">*</span></label>
|
||||
<input type="number" step="0.1" name="lama_studi"
|
||||
<input type="number" name="lama_studi" min="0" max="10" step="1"
|
||||
class="form-control @error('lama_studi') is-invalid @enderror"
|
||||
value="{{ old('lama_studi') }}">
|
||||
@error('lama_studi')
|
||||
|
@ -113,7 +113,7 @@ class="form-control @error('lama_studi') is-invalid @enderror"
|
|||
|
||||
<!-- Pengalaman & Sertifikasi -->
|
||||
<div class="form-section">
|
||||
<h5 class="section-title">Pengalaman & Sertifikasi</h5>
|
||||
<h5 class="section-title">Pengalaman & Upload Sertifikat Kompetensi</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
|
@ -137,6 +137,33 @@ class="form-control @error('pengalaman') is-invalid @enderror"
|
|||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Upload Dokumen -->
|
||||
<div class="form-section">
|
||||
<h5 class="section-title">Upload Dokumen</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="cv">Upload CV (PDF/DOC) <span class="text-danger">*</span></label>
|
||||
<input type="file" name="cv" accept=".pdf,.doc,.docx"
|
||||
class="form-control-file @error('cv') is-invalid @enderror">
|
||||
@error('cv')
|
||||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="dokumen_pendukung">Dokumen Pendukung Lainnya (Opsional)</label>
|
||||
<input type="file" name="dokumen_pendukung[]" accept=".pdf,.doc,.docx,.jpg,.png"
|
||||
multiple class="form-control-file @error('dokumen_pendukung') is-invalid @enderror">
|
||||
@error('dokumen_pendukung')
|
||||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -38,12 +38,11 @@
|
|||
@stop
|
||||
@section('content')
|
||||
|
||||
<div class="scrollable-content">
|
||||
<div class="content-wrapper">
|
||||
|
||||
<div class="scrollable-content" style="padding-top: 0;">
|
||||
<div class="content-wrapper" style="margin-top: 0;">
|
||||
<!-- Page Heading -->
|
||||
<div class="d-sm-flex align-items-center justify-content-between mb-4">
|
||||
<h1 class="h3 mb-0 text-gray-800">Selamat Datang di Portal Rekrutmen</h1>
|
||||
<h1 class="h3 mb-0 text-gray-800">Selamat Datang, {{ Auth::user()->name }}</h1>
|
||||
</div>
|
||||
|
||||
<!-- Content Row -->
|
||||
|
@ -67,18 +66,13 @@
|
|||
<li>Data Pribadi</li>
|
||||
<li>Riwayat Pendidikan</li>
|
||||
<li>Pengalaman Kerja</li>
|
||||
<li>Keterampilan</li>
|
||||
<li>Sertifikat Kompetensi (jika ada)</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<h5 class="text-primary">3. Proses Penilaian</h5>
|
||||
<p>Setelah mengajukan lamaran, tim kami akan melakukan penilaian menggunakan metode SAW (Simple Additive Weighting).</p>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<h5 class="text-primary">4. Hasil Penilaian</h5>
|
||||
<p>Anda dapat melihat hasil penilaian melalui menu "Hasil Penilaian" pada sidebar setelah proses penilaian selesai.</p>
|
||||
<p>Setelah Anda mengisi data dan dokumen, tim HR akan melakukan peninjauan. Mohon menunggu informasi selanjutnya melalui email</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,189 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="id">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Profil Pengguna</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css" rel="stylesheet">
|
||||
|
||||
<style>
|
||||
body {
|
||||
background: rgb(120, 150, 193);
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
}
|
||||
.profile-card {
|
||||
max-width: 600px;
|
||||
margin: 80px auto;
|
||||
background: #fff;
|
||||
border-radius: 15px;
|
||||
padding: 30px;
|
||||
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.08);
|
||||
text-align: center;
|
||||
}
|
||||
.profile-title {
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.profile-info {
|
||||
text-align: left;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.profile-info p {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- Tombol kembali di pojok kiri atas -->
|
||||
<a href="{{ route('user.home') }}" class="btn btn-light shadow-sm d-inline-flex align-items-center"
|
||||
style="position: absolute; top: 20px; left: 20px; z-index: 1000; gap: 6px;">
|
||||
<i class="bi bi-house-fill" style="font-size: 20px;"></i>
|
||||
Beranda
|
||||
</a>
|
||||
|
||||
|
||||
<!-- Alert session -->
|
||||
@if (session('success'))
|
||||
<div class="alert alert-success container mt-4">
|
||||
{{ session('success') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger container mt-4">
|
||||
<ul class="mb-0">
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="profile-card">
|
||||
<!-- Foto & upload -->
|
||||
<form action="{{ route('profile.updatePhoto') }}" method="POST" enctype="multipart/form-data">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
|
||||
<div class="avatar-container text-center" style="position: relative; display: inline-block;">
|
||||
<label for="photo" style="cursor: pointer;">
|
||||
@if ($user->photo)
|
||||
<img src="{{ asset( $user->photo) }}" alt="Foto Profil"
|
||||
style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;">
|
||||
@else
|
||||
<div style="
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
background-color: #007bff;
|
||||
border-radius: 50%;
|
||||
color: white;
|
||||
font-size: 36px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;">
|
||||
{{ strtoupper(substr($user->name, 0, 2)) }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<!-- Ikon Edit -->
|
||||
<div style="
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background-color: #fff;
|
||||
border-radius: 50%;
|
||||
padding: 6px;
|
||||
box-shadow: 0 0 5px rgba(0,0,0,0.3);">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"
|
||||
fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M15.502 1.94a.5.5 0 0 1 0 .706l-1.293 1.293-2.121-2.121
|
||||
1.293-1.293a.5.5 0 0 1 .707 0l1.414 1.415zm-2.561
|
||||
2.561L5 12.44V14h1.561l7.941-7.941-2.561-2.561z"/>
|
||||
</svg>
|
||||
</div>
|
||||
</label>
|
||||
<input type="file" id="photo" name="photo" accept="image/*" style="display: none;" onchange="this.form.submit()">
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="profile-title mt-3">{{ $user->name }}</div>
|
||||
|
||||
<!-- Info Profil -->
|
||||
<div class="profile-info mt-4">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-4 font-weight-bold">Email</div>
|
||||
<div class="col-sm-8">{{ $user->email }}</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-4 font-weight-bold">No Telepon</div>
|
||||
<div class="col-sm-8">{{ $user->telepon }}</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-4 font-weight-bold">Alamat</div>
|
||||
<div class="col-sm-8">{{ $user->alamat }}</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4 font-weight-bold">Role</div>
|
||||
<div class="col-sm-8">{{ ucfirst($user->role ?? 'User') }}</div>
|
||||
</div>
|
||||
<div class="row mb-2 align-items-center">
|
||||
<div class="col-sm-4 font-weight-bold">Password</div>
|
||||
<div class="col-sm-8 d-flex justify-content-between align-items-center">
|
||||
<span>*******</span>
|
||||
<button type="button" class="btn btn-sm btn-outline-secondary ml-2" data-toggle="modal" data-target="#ubahPasswordModal">
|
||||
<i class="bi bi-pencil-square"></i> Ubah
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- Ubah Password -->
|
||||
@if ($user->role != 'admin')
|
||||
<!-- Modal Ubah Password -->
|
||||
<div class="modal fade" id="ubahPasswordModal" tabindex="-1" role="dialog" aria-labelledby="ubahPasswordModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<form action="{{ route('profile.updatePassword') }}" method="POST">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="ubahPasswordModalLabel">Ubah Password</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Tutup">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label for="current_password">Password Lama</label>
|
||||
<input type="password" class="form-control" id="current_password" name="current_password" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="new_password">Password Baru</label>
|
||||
<input type="password" class="form-control" id="new_password" name="new_password" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="new_password_confirmation">Konfirmasi Password Baru</label>
|
||||
<input type="password" class="form-control" id="new_password_confirmation" name="new_password_confirmation" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button>
|
||||
<button type="submit" class="btn btn-primary">Simpan Password Baru</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<!-- Optional: Bootstrap JS -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -11,18 +11,73 @@
|
|||
<style>
|
||||
body {
|
||||
font-family: 'Poppins', sans-serif;
|
||||
background-color: #f8f9fa;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: linear-gradient(135deg, #0070b7, #008fea);
|
||||
min-height: 100vh;
|
||||
color: #fff;
|
||||
}
|
||||
.navbar {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
backdrop-filter: blur(10px);
|
||||
padding: 1rem 2rem;
|
||||
}
|
||||
|
||||
.navbar .logo-img {
|
||||
max-width: 50px; /* Ukuran logo diperkecil */
|
||||
height: auto;
|
||||
margin-right: 1rem;
|
||||
}
|
||||
|
||||
.navbar .brand-text {
|
||||
font-size: 2rem;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
margin: 0;
|
||||
}
|
||||
.navbar .nav-link {
|
||||
color: #fff !important;
|
||||
margin-left: 1.5rem;
|
||||
font-weight: 500;
|
||||
font-size: 1rem;
|
||||
}
|
||||
.navbar .nav-link:hover {
|
||||
color: #ddd !important;
|
||||
}
|
||||
.hero-section {
|
||||
min-height: 100vh;
|
||||
position: relative;
|
||||
min-height: 80vh;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background: linear-gradient(rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.9));
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
padding: 4rem 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
.logo-img {
|
||||
max-width: 300px;
|
||||
.hero-section .wave {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100px;
|
||||
background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNDQwIDEzMCI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE0NDAgNTFjLTQxLjYgMjkuNy0xMDQuMyA1NC43LTE2OC41IDU0LjctNjQuMiAwLTEyNi45LTI1LTE2OC41LTU0LjctNDEuNi0yOS43LTExNi4yLTU0LjctMTgwLjUtNTQuNy0xNjcuOCAwLTI3MC45IDQyLjItMzQwLjUgNzYuN3MtMTcyLjcgNzYuNy0zNDAuNSA3Ni43Yy02Ny42IDAtMTM4LjktMjcuMS0xODAuNS01NC43UzAgMjkuNyAwIDBjMCAwIDAgMCAwIDB2MTMwaDE0NDB6IiBvcGFjaXR5PSIuMSI+PC9wYXRoPjwvc3ZnPg==') repeat-x;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
.hero-content h1 {
|
||||
font-size: 3rem;
|
||||
font-weight: 700;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
.hero-content p {
|
||||
font-size: 1.2rem;
|
||||
color: #ddd;
|
||||
max-width: 600px;
|
||||
margin: 0 auto 2rem;
|
||||
}
|
||||
.hero-img {
|
||||
max-width: 50%;
|
||||
height: auto;
|
||||
margin-bottom: 2rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
.btn-custom {
|
||||
padding: 10px 30px;
|
||||
|
@ -31,61 +86,145 @@
|
|||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
margin: 0 10px;
|
||||
border: none;
|
||||
}
|
||||
.btn-login {
|
||||
background-color: #007bff;
|
||||
background-color: #00b747;
|
||||
color: white;
|
||||
}
|
||||
.btn-register {
|
||||
background-color: #28a745;
|
||||
background-color: #a6a6a6;
|
||||
color: white;
|
||||
}
|
||||
.btn-login:hover, .btn-register:hover {
|
||||
opacity: 0.9;
|
||||
color: white;
|
||||
}
|
||||
.description {
|
||||
max-width: 600px;
|
||||
margin: 0 auto 2rem auto;
|
||||
color: #6c757d;
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.6;
|
||||
.services-section {
|
||||
padding: 5rem 0;
|
||||
background-color: #fff;
|
||||
color: #333;
|
||||
text-align: center;
|
||||
}
|
||||
.services-section h2 {
|
||||
font-weight: 600;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
.service-card {
|
||||
background:rgb(234, 236, 237);
|
||||
padding: 2rem;
|
||||
border-radius: 10px;
|
||||
margin-bottom: 2rem;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
.service-card:hover {
|
||||
transform: translateY(-10px);
|
||||
}
|
||||
.service-card i {
|
||||
font-size: 2rem;
|
||||
color: #0070B7;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
footer {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
padding: 2rem 0;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="hero-section">
|
||||
<div class="container text-center">
|
||||
<!-- Ganti src dengan path logo Intecon yang sesuai -->
|
||||
<!-- Navbar -->
|
||||
<nav class="navbar navbar-expand-lg">
|
||||
<div class="container">
|
||||
<img src="{{ asset('assets/images/logo.png') }}" alt= "Intecon Logo" class="logo-img">
|
||||
<a class="navbar-brand text-white" href="#">SIPKAR</a>
|
||||
<div class="collapse navbar-collapse">
|
||||
<!-- <ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item"><a class="nav-link" href="#">Home</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="#">About</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="#">Contact</a></li>
|
||||
</ul> -->
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<h1 class="mb-4">Welcome to SIPKAR</h1>
|
||||
|
||||
<p class="description">
|
||||
Selamat Datang di Sistem Pendukung Keputusan Penerimaan Karyawan PT Intecon Bangun Persada
|
||||
</p>
|
||||
<!-- Hero Section -->
|
||||
<div class="hero-section">
|
||||
<div class="container hero-content">
|
||||
|
||||
<h1>Welcome to SIPKAR</h1>
|
||||
<p>Selamat Datang di Sistem Pendukung Keputusan Penerimaan Karyawan PT Intecon Bangun Persada</p>
|
||||
<div class="d-flex justify-content-center gap-3">
|
||||
@if (Route::has('login'))
|
||||
@auth
|
||||
<a href="{{ url('/dashboard') }}" class="btn btn-custom btn-login">Dashboard</a>
|
||||
<!-- Dashboard button removed -->
|
||||
@else
|
||||
<a href="{{ route('login') }}" class="btn btn-custom btn-login">Login</a>
|
||||
|
||||
@if (Route::has('register.user'))
|
||||
<a href="{{ route('register.user') }}" class="btn btn-custom btn-register">Register</a>
|
||||
@endif
|
||||
@endauth
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="wave"></div>
|
||||
</div>
|
||||
|
||||
<div class="mt-5">
|
||||
<p class="text-muted">© {{ date('Y') }} Intecon. All rights reserved.</p>
|
||||
<!-- Services Section -->
|
||||
<section class="services-section">
|
||||
<div class="container">
|
||||
<h2>Tentang PT Intecon Bangun Persada</h2>
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="service-card">
|
||||
<i class="fas fa-eye"></i>
|
||||
<h4>Visi</h4>
|
||||
<p>Sebagai perusahaan Kontraktor Umum yang paling inovatif dan kompeten dalam memberikan pelayanan dan solusi atas keinginan
|
||||
dan permasalahan</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="service-card">
|
||||
<i class="fas fa-building"></i>
|
||||
<h4>Sejarah Perusahaan</h4>
|
||||
<p>PT Intecon Bangun Persada (IBP), didirikan pada tahun 2016, adalah perusahaan konstruksi terkemuka
|
||||
yang berbasis di Jember, Jawa Timur, Indonesia. Berawal dari CV Integritas Karya Buana (IKB) pada tahun 2005
|
||||
sebagai pemasok bahan bangunan dan kemudian sebagai sub-kontraktor di bawah CV Long Fortune Construction,
|
||||
IBP mengkhususkan diri dalam konstruksi komersial dan residensial. Keahlian kami mencakup pekerjaan interior,
|
||||
teknik sipil, arsitektur, pengembangan properti, dan perencanaan desain, dengan fokus pada penyampaian proyek
|
||||
yang berkualitas, inovatif, dan memuaskan klien</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="service-card">
|
||||
<i class="fas fa-bullseye"></i>
|
||||
<h4>Misi</h4>
|
||||
<p>Untuk menjadi penyedia jasa konstruksi yang unggul dengan konsisten meningkatkan kualitas produk kami, untuk menyediakan
|
||||
tingkat tertinggi profesionalisme bagi klien melalui inovasi</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="contact-info mt-5">
|
||||
<p><strong>Contact Us:</strong></p>
|
||||
<p>Email: <a href="mailto:inteconbangunpersada@gmail.com">inteconbangunpersada@gmail.com</a></p>
|
||||
<p>Phone: +62 331 423445</p>
|
||||
<p>Alamat: Jl. Cadika No. 4A, Sempusari, Kaliwates, Jember, Jawa Timur, Indonesia</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer>
|
||||
<div class="container">
|
||||
<p>© {{ date('Y') }} Intecon Bangun Persada.</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- Bootstrap JS -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<!-- Font Awesome for icons -->
|
||||
<script src="https://kit.fontawesome.com/a076d05399.js" crossorigin="anonymous"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -5,6 +5,8 @@
|
|||
use Illuminate\Support\Facades\Route;
|
||||
use App\Http\Controllers\HomeController;
|
||||
use App\Http\Controllers\RegisterUserController;
|
||||
use App\Http\Controllers\ProfileController;
|
||||
use App\Http\Controllers\Auth\ForgotPasswordController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
@ -19,15 +21,15 @@
|
|||
|
||||
|
||||
|
||||
Auth::routes(['register' => false]);
|
||||
Route::get('/forgot-password', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('password.request');
|
||||
Route::post('/forgot-password', [ForgotPasswordController::class, 'sendResetLinkEmail'])->name('password.email');
|
||||
Auth::routes(['verify' => false, 'register' => false]);
|
||||
|
||||
// Route untuk halaman welcome dan redirect ke home jika sudah login
|
||||
Route::get('/', function () {
|
||||
if (Auth::check()) {
|
||||
return redirect('/home');
|
||||
}
|
||||
return view('welcome');
|
||||
});
|
||||
})->name('welcome');
|
||||
|
||||
|
||||
// Route untuk dashboard yang memerlukan autentikasi
|
||||
Route::get('/home', [HomeController::class, 'index'])->name('home');
|
||||
|
@ -47,9 +49,10 @@
|
|||
->middleware('user');
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
Route::get('/profile', [ProfileController::class, 'index'])->name('profile');
|
||||
Route::put('/profile/update-photo', [ProfileController::class, 'updatePhoto'])->name('profile.updatePhoto');
|
||||
Route::put('/profile/change-password', [ProfileController::class, 'updatePassword'])->name('profile.updatePassword') ->middleware('auth');
|
||||
|
||||
Route::resource('kriteria', 'App\Http\Controllers\KriteriaController')->except(['create']);
|
||||
Route::resource('alternatif', 'App\Http\Controllers\AlternatifController')->except(['create']);
|
||||
|
@ -61,6 +64,8 @@
|
|||
return view('admin.report.index');
|
||||
})->name('laporan');
|
||||
|
||||
//Route::get('/perhitungan', [PenilaianController::class, 'perhitungan'])->name('perhitungan.index'); ga kepake
|
||||
|
||||
Route::get('/perhitungan', [App\Http\Controllers\AlgoritmaController::class, 'index'])->name('perhitungan.index');
|
||||
Route::get('download-perhitungan-pdf', [App\Http\Controllers\AlgoritmaController::class, 'downloadPDF']);
|
||||
Route::get('download-alternatif-pdf', [App\Http\Controllers\AlternatifController::class, 'downloadPDF']);
|
||||
|
|
Loading…
Reference in New Issue