push finish

This commit is contained in:
Ulill 2025-06-26 15:34:21 +07:00
parent 5dc02c6b64
commit 77d30e54cf
35 changed files with 820 additions and 350 deletions

View File

@ -0,0 +1,70 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\LamaranUser;
use App\Models\Alternatif;
use Illuminate\Support\Facades\Storage;
class AdminController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
// Tampilkan daftar lamaran yang belum dikonfirmasi
public function daftarLamaran()
{
$lamarans = LamaranUser::latest()->get();
return view('admin.home.blade', compact('lamarans'));
}
// Admin menerima lamaran dan memindahkan ke tabel alternatif
public function terimaLamaran($id)
{
$lamaran = LamaranUser::findOrFail($id);
Alternatif::create([
'nama_alternatif' => $lamaran->name,
'usia' => $lamaran->usia,
'pendidikan' => $lamaran->pendidikan,
'ipk' => $lamaran->ipk,
'jurusan' => $lamaran->jurusan,
'lama_studi' => $lamaran->lama_studi,
'pengalaman' => $lamaran->pengalaman,
'serkom' => $lamaran->serkom,
'cv' => $lamaran->cv,
'dokumen_pendukung' => $lamaran->dokumen_pendukung,
]);
// Hapus dari tabel lamaran_users
$lamaran->delete();
return redirect()->back()->with('msg', 'Lamaran berhasil diterima dan dipindahkan ke data pelamar.');
}
// ✅ Admin menolak lamaran dan menghapus datanya
public function tolakLamaran($id)
{
$lamaran = LamaranUser::findOrFail($id);
// Hapus file yang diupload
if (Storage::disk('public')->exists($lamaran->cv)) {
Storage::disk('public')->delete($lamaran->cv);
}
if ($lamaran->dokumen_pendukung) {
foreach (json_decode($lamaran->dokumen_pendukung, true) as $file) {
if (Storage::disk('public')->exists($file)) {
Storage::disk('public')->delete($file);
}
}
}
$lamaran->delete();
return redirect()->back()->with('msg', 'Lamaran ditolak dan data telah dihapus.');
}
}

View File

@ -58,7 +58,7 @@ public function index()
foreach ($normalisasi as $key => $value) {
$rank = [];
foreach ($kriteria as $value_1) {
$rank[] = $value[$value_1->id] * ($value_1->bobot / 100);
$rank[] = $value[$value_1->id] * ($value_1->bobot);
}
$ranking[] = [
'name' => $key,
@ -123,7 +123,7 @@ public function downloadPDF()
foreach ($normalisasi as $key => $value) {
$rank = [];
foreach ($kriteria as $value_1) {
$rank[] = $value[$value_1->id] * ($value_1->bobot / 100);
$rank[] = $value[$value_1->id] * ($value_1->bobot);
}
$ranking[] = [
'name' => $key,

View File

@ -7,10 +7,12 @@
use App\Models\Penilaian;
use Barryvdh\DomPDF\Facade\Pdf;
use Carbon\Carbon;
use App\Models\User;
use App\Models\LamaranUser;
use App\Models\Crips;
use Illuminate\Support\Facades\Storage;
use Exception;
class AlternatifController extends Controller
{
public function __construct()
@ -30,53 +32,42 @@ public function index(){
}
public function store(Request $request){
$validated = $request->validate([
'nama_alternatif' => 'required|string|max:255',
'usia' => 'required|numeric',
'pendidikan' => 'required',
'ipk' => 'required|numeric',
'jurusan' => 'required',
'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',
public function terimaLamaran($id)
{
$lamaran = LamaranUser::findOrFail($id);
$alternatif = Alternatif::create([
'nama_alternatif' => $lamaran->name,
'usia' => $lamaran->usia,
'pendidikan' => $lamaran->pendidikan,
'ipk' => $lamaran->ipk,
'jurusan' => $lamaran->jurusan,
'lama_studi' => $lamaran->lama_studi,
'pengalaman' => $lamaran->pengalaman,
'serkom' => $lamaran->serkom,
'cv' => $lamaran->cv,
'dokumen_pendukung' => $lamaran->dokumen_pendukung,
]);
// Upload CV
if ($request->hasFile('cv')) {
$validated['cv'] = $request->file('cv')->store('cv', 'public');
}
// Hapus dari tabel lamaran_users
$kriteria = \App\Models\Kriteria::all(); // pastikan sudah ada model Kriteria
// Upload dokumen pendukung (opsional)
$dokumenPendukungPaths = [];
if ($request->hasFile('dokumen_pendukung')) {
foreach ($request->file('dokumen_pendukung') as $file) {
$dokumenPendukungPaths[] = $file->store('dokumen_pendukung', 'public');
}
}
foreach ($kriteria as $k) {
$crips_id = $this->mapToCrips($alternatif, $k->id);
if ($crips_id) {
Penilaian::create([
'alternatif_id' => $alternatif->id,
'kriteria_id' => $k->id,
'crips_id' => $crips_id
]);
}
}
$validated['dokumen_pendukung'] = json_encode($dokumenPendukungPaths);
$lamaran->delete();
$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)
return redirect()->back()->with('msg', 'Lamaran berhasil diterima dan dipindahkan ke data pelamar.');
}
private function mapToCrips($alternatif, $kriteria_id)
{
$crips = Crips::where('kriteria_id', $kriteria_id)->get();
$crips_id = null;
@ -107,6 +98,7 @@ private function mapToCrips($alternatif, $kriteria_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;
elseif ($crip->nama_crips == '2.0-2.49' && $ipk >= 2.0 && $ipk < 2.49) $crips_id = $crip->id;
}
break;
@ -182,21 +174,36 @@ public function update(Request $request, $id)
}
public function destroy($id){
public function destroy($id)
{
\DB::beginTransaction();
try {
$alternatif = Alternatif::findOrFail($id);
try {
$alternatif = Alternatif::findOrFail($id);
$alternatif->delete();
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");
// Hapus file CV
if ($alternatif->cv) {
\Storage::disk('public')->delete($alternatif->cv);
}
// Hapus dokumen pendukung
if ($alternatif->dokumen_pendukung) {
$docs = json_decode($alternatif->dokumen_pendukung, true);
foreach ($docs as $doc) {
\Storage::disk('public')->delete($doc);
}
}
$alternatif->delete();
Penilaian::where('alternatif_id', $id)->delete();
\DB::commit();
return response()->json(['message' => 'Data pelamar berhasil dihapus!'], 200);
} catch (\Exception $e) {
\DB::rollBack();
\Log::emergency("File:" . $e->getFile() . " Line:" . $e->getLine() . " Message:" . $e->getMessage());
return response()->json(['error' => 'Gagal menghapus data'], 500);
}
}
public function downloadPDF() {
setlocale(LC_ALL, 'IND');
@ -207,4 +214,25 @@ public function downloadPDF() {
$pdf->setPaper('A3', 'potrait');
return $pdf->stream('alternatif.pdf');
}
public function tolakLamaran($id)
{
$lamaran = LamaranUser::findOrFail($id);
// Hapus file yang diupload
if (Storage::disk('public')->exists($lamaran->cv)) {
Storage::disk('public')->delete($lamaran->cv);
}
if ($lamaran->dokumen_pendukung) {
foreach (json_decode($lamaran->dokumen_pendukung, true) as $file) {
if (Storage::disk('public')->exists($file)) {
Storage::disk('public')->delete($file);
}
}
}
$lamaran->delete();
return redirect()->back()->with('msg', 'Lamaran ditolak dan data telah dihapus.');
}
}

View File

@ -3,21 +3,17 @@
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\ValidationException;
class LoginController extends Controller
{
use AuthenticatesUsers;
// Hapus atau komentar $redirectTo karena akan pakai function
// protected $redirectTo = RouteServiceProvider::HOME;
/**
* Arahkan user setelah login sesuai role
*
* @return string
*/
protected function redirectTo()
{
@ -30,6 +26,11 @@ protected function redirectTo()
}
}
/**
* Jika login gagal karena belum dikonfirmasi
*/
public function logout()
{
Auth::logout();

View File

@ -2,9 +2,12 @@
namespace App\Http\Controllers;
use App\Models\LamaranUser;
use Illuminate\Http\Request;
use App\Models\Alternatif;
use App\Models\Kriteria;
use App\Models\User;
use App\Models\PendaftaranUser;
class HomeController extends Controller
{
@ -37,7 +40,8 @@ public function adminHome()
// Untuk admin, hitung jumlah data
$alternatifs = Alternatif::count();
$kriteria = Kriteria::count();
return view('admin.home', compact('alternatifs', 'kriteria'));
$lamarans = LamaranUser::latest()->get();
return view('admin.home', compact('alternatifs', 'kriteria', 'lamarans'));
}
public function userHome()
{
@ -47,5 +51,6 @@ public function userHome()
$kriteria = Kriteria::count();
return view('user.home',compact('alternatifs', 'kriteria'));
}
}

View File

@ -29,7 +29,7 @@ public function store(Request $request){
'nama_kriteria' => 'required|string',
'attribut' => 'required|string',
'bobot' => 'required|numeric'
'bobot' => 'required|numeric',
]);
@ -64,7 +64,7 @@ public function update(Request $request, $id)
'nama_kriteria' => 'required|string',
'attribut' => 'required|string',
'bobot' => 'required|numeric'
'bobot' => 'required|numeric',
]);

View File

@ -0,0 +1,56 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\LamaranUser;
use App\Notifications\PelamarBaruNotification;
use Illuminate\Support\Facades\Notification;
use App\Models\User;
class LamaranUserController extends Controller
{
public function store(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'usia' => 'required|integer|min:17|max:60',
'pendidikan' => 'required|string',
'ipk' => 'required|numeric|min:0|max:4',
'jurusan' => 'required|string',
'lama_studi' => 'required|integer|min:0|max:10',
'pengalaman' => 'required|integer|min:0|max:50',
'serkom' => 'required|boolean',
'cv' => 'required|file|mimes:pdf,doc,docx|max:2048',
'dokumen_pendukung.*' => 'nullable|file|mimes:pdf,doc,docx,jpg,png|max:2048',
]);
// Upload CV
$cvPath = $request->file('cv')->store('dokumen/cv', 'public');
// Upload dokumen pendukung (bisa lebih dari satu file)
$dokumenPaths = [];
if ($request->hasFile('dokumen_pendukung')) {
foreach ($request->file('dokumen_pendukung') as $file) {
$dokumenPaths[] = $file->store('dokumen/pendukung', 'public');
}
}
$lamaran = LamaranUser::create([
'name' => $request->name,
'usia' => $request->usia,
'pendidikan' => $request->pendidikan,
'ipk' => $request->ipk,
'jurusan' => $request->jurusan,
'lama_studi' => $request->lama_studi,
'pengalaman' => $request->pengalaman,
'serkom' => $request->serkom,
'cv' => $cvPath,
'dokumen_pendukung' => json_encode($dokumenPaths),
]);
$adminUsers = User::where('role', 'admin')->get(); // Pastikan 'role' sesuai
Notification::send($adminUsers, new PelamarBaruNotification([
'message' => "Pelamar baru: {$lamaran->name}"
]));
return redirect()->back()->with('msg', 'Lamaran Anda berhasil diajukan. Silakan tunggu konfirmasi dari admin.');
}
}

View File

@ -108,6 +108,7 @@ private function getCripsId($kriteria_id, $nilai)
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;
elseif ($crip->nama_crips == '2.0-2.49' && $nilai >= 2.0 && $nilai < 2.49) $crips_id = $crip->id;
}
break;

View File

@ -5,8 +5,6 @@
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class RegisterUserController extends Controller
{
public function showRegistrationForm()
@ -20,30 +18,25 @@ public function register(Request $request)
$request->validate([
'name' => 'required|string|max:191',
'email' => 'required|email|unique:users',
'password' => 'required|confirmed|min:6',
'password' => 'required|confirmed|min:8',
'alamat' => 'required|string|max:255',
'telepon' => 'required|string|max:20',
'keterangan' => 'nullable|string|max:255',
'g-recaptcha-response' => 'required|captcha',
]);
// Buat pengguna
$user = User::create([
User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
'password' => Hash::make($request->password), // hash password wajib
'alamat' => $request->alamat,
'telepon' => $request->telepon,
'keterangan' => $request->keterangan,
'role' => 'user',
'role' => 'user', // default role jika perlu
]);
// 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!');
// Arahkan ke halaman dengan pesan sukses
return redirect()->route('login')->with('success', 'Akun berhasi didaftarkan, silahkan anda dapat login.');
}
}

View File

@ -0,0 +1,33 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class LamaranUser extends Model
{
use HasFactory;
protected $table = 'lamaran_users';
protected $fillable = [
'name',
'usia',
'pendidikan',
'ipk',
'jurusan',
'lama_studi',
'pengalaman',
'serkom',
'cv',
'dokumen_pendukung',
'status',
];
public function user()
{
return $this->belongsTo(User::class);
}
}

View File

@ -0,0 +1,34 @@
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
class AkunDikonfirmasi extends Notification
{
use Queueable;
public function via($notifiable)
{
return ['mail'];
}
public function toMail($notifiable)
{
return (new MailMessage)
->subject('Akun Anda Telah Dikonfirmasi')
->greeting('Halo, ' . $notifiable->name)
->line('Akun Anda telah dikonfirmasi oleh admin.')
->line('Sekarang Anda dapat login ke sistem.')
->action('Login Sekarang', url('/login'))
->line('Terima kasih telah mendaftar!');
}
public function toArray($notifiable)
{
return [];
}
}

View File

@ -0,0 +1,30 @@
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
class PelamarBaruNotification extends Notification
{
use Queueable;
public $data;
public function __construct($data)
{
$this->data = $data;
}
public function via($notifiable)
{
return ['database'];
}
public function toArray($notifiable)
{
return [
'message' => $this->data['message']
];
}
}

View File

@ -0,0 +1,30 @@
<?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('lamaran_users', function (Blueprint $table) {
$table->id(); // primary key
$table->string('name');
$table->integer('usia');
$table->string('pendidikan');
$table->decimal('ipk', 3, 2);
$table->string('jurusan');
$table->integer('lama_studi');
$table->integer('pengalaman');
$table->boolean('serkom'); // 0 atau 1
$table->string('cv')->nullable();
$table->longText('dokumen_pendukung')->nullable();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('lamaran_users');
}
};

View File

@ -16,5 +16,6 @@
'failed' => 'These credentials do not match our records.',
'password' => 'The provided password is incorrect.',
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
'not_approved' => 'Akun Anda sedang menunggu persetujuan admin. Silakan tunggu hingga akun Anda dikonfirmasi.',
];

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@ -35,7 +35,7 @@
<div>
<table>
<tr>
<td style="padding-right: 240px; padding-left: 20px"><img src="{{ asset('assets/images/logo no bg.png') }}" width="90" height="90" ></td>
<td style="padding-right: 240px; padding-left: 20px"></td>
<td>
<center>
<font size="4">PT.Intecon Bangun Persada</font><br>

View File

@ -19,7 +19,7 @@
<div class="collapse show" id="listkriteria">
<div class="card-body">
<div class="table-responsive">
<div class="table-responsive" style="max-height: 500px; overflow-y: auto;">
<a href="{{ URL::to('download-alternatif-pdf') }}" target="_blank" class="d-none d-sm-inline-block btn btn-sm btn-success shadow-sm float-left"><i
class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
<table class="table table-striped table-hover" id="DataTable" data-paging="false">
@ -84,10 +84,21 @@ class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
<script src="{{ asset('vendor/datatables/dataTables.bootstrap4.min.js') }}"></script>
<script src="{{ asset('js/sweetalert.js')}}"></script>
<script>
$(document).ready(function(){
$('#DataTable').DataTable();
$('.hapus').on('click', function(){
$(document).ready(function(){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$('#DataTable').DataTable({
paging: false
});
$('.hapus').on('click', function(event){
event.preventDefault();
const url = $(this).attr('href');
swal({
title: "Apa anda yakin?",
text: "Sekali anda menghapus data, data tidak dapat dikembalikan lagi!",
@ -115,8 +126,6 @@ class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
swal("Data Aman!");
}
});
return false;
})
})
</script>

View File

@ -43,7 +43,7 @@
</div>
<div class="form-group">
<label for="bobot">Bobot Crips</label>
<label for="bobot">Nilai Crips</label>
<input type="text" class="form-control @error ('bobot') is-invalid @enderror" name="bobot" value="{{ $crips->bobot }}">
@error('bobot')
@ -54,7 +54,7 @@
</div>
<button class="btn btn-primary">Simpan</button>
<a href="{{ route('kriteria.index') }}" class="btn btn-success">Kembali</a>
<a href="{{ route( 'kriteria.index') }}" class="btn btn-success">Kembali</a>
</form>
</div>
</div>

View File

@ -11,7 +11,7 @@
<!-- 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! </h1>
<h1 class="h3 mb-0 text-dark">Selamat Datang! </h1>
</div>
<!-- Content Row -->
@ -49,7 +49,7 @@
<div class="h5 mb-0 font-weight-bold text-gray-800">{{ $kriteria }}</div>
</div>
<div class="col-auto">
<i class="fas fa-code fa-2x text-gray-300"></i>
<i class="fas fa-list-ol fa-2x text-gray-300"></i>
</div>
</div>
</div>
@ -58,7 +58,91 @@
</div>
</div>
</div>
<!--
<!-- tabel lamaran pengguna -->
<div class="row mt-4">
<div class="col-md-12">
<div class="card shadow">
<div class="card-header bg-info text-white font-weight-bold">
<i class="fas fa-clipboard-list"></i> Daftar Lamaran Masuk
</div>
<div class="card-body">
@if($lamarans->count() > 0)
<table class="table table-bordered table-hover">
<thead class="thead-light">
<tr>
<th>Nama</th>
<th>Usia</th>
<th>Pendidikan</th>
<th>IPK</th>
<th>Jurusan</th>
<th>Lama Studi</th>
<th>Pengalaman</th>
<th>Serkom</th>
<th>CV</th>
<th>Dokumen</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
@foreach($lamarans as $lamaran)
<tr>
<td>{{ $lamaran->name }}</td>
<td>{{ $lamaran->usia }} tahun</td>
<td>{{ $lamaran->pendidikan }}</td>
<td>{{ $lamaran->ipk }}</td>
<td>{{ $lamaran->jurusan }}</td>
<td>{{ $lamaran->lama_studi }} tahun</td>
<td>{{ $lamaran->pengalaman }} tahun</td>
<td>
@if($lamaran->serkom == 1)
<span class="badge badge-success">Ada</span>
@else
<span class="badge badge-danger">Tidak</span>
@endif
</td>
<td>
<a href="{{ asset('storage/' . $lamaran->cv) }}" target="_blank" class="btn btn-sm btn-info">Lihat CV</a>
</td>
<td>
@if($lamaran->dokumen_pendukung)
@foreach(json_decode($lamaran->dokumen_pendukung, true) as $file)
<a href="{{ asset('storage/' . $file) }}" target="_blank" class="btn btn-sm btn-secondary mb-1">Dokumen</a><br>
@endforeach
@else
<span class="text-muted">Tidak Ada</span>
@endif
</td>
<td class="d-flex">
<form action="{{ route('admin.lamaran.terima', $lamaran->id) }}" method="POST" class="mr-2">
@csrf
<button type="submit" class="btn btn-sm btn-success">
<i class="fas fa-check"></i> Terima
</button>
</form>
<form action="{{ route('admin.lamaran.tolak', $lamaran->id) }}" method="POST">
@csrf
<button type="submit" class="btn btn-sm btn-danger" onclick="return confirm('Yakin ingin menolak lamaran ini?')">
<i class="fas fa-times"></i> Tolak
</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
@else
<div class="alert alert-info mb-0">
<i class="fas fa-info-circle"></i> Belum ada lamaran yang masuk.
</div>
@endif
</div>
</div>
</div>
</div>
<!--
//** Earnings (Monthly) Card Example */
<div class="col-xl-3 col-md-6 mb-4">
<a href="{{ route('penilaian.index') }}">

View File

@ -60,7 +60,7 @@
</div>
<div class="form-group">
<label for="bobot">Bobot Kriteria</label>
<input type="text" class="form-control @error ('bobot') is-invalid @enderror" name="bobot">
<input type="number" name="bobot" step="0.1" class="form-control @error ('bobot') is-invalid @enderror" name="bobot">
@error('bobot')
<div class="invalid-feedback" role="alert">
@ -90,7 +90,7 @@
<div class="table-responsive">
<a href="{{ URL::to('download-kriteria-pdf') }}" target="_blank" class="d-none d-sm-inline-block btn btn-sm btn-success shadow-sm float-left"><i class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
<table class="table table-striped table-hover" id="DataTable" data-paging="false">
<table class="table table-striped table-hover text-dark" id="DataTable" data-paging="false">
<thead>
<tr>
<th>No</th>

View File

@ -43,7 +43,7 @@
</div>
<div class="form-group">
<label for="bobot">Bobot</label>
<label for="bobot">Nilai</label>
<input type="text" class="form-control @error ('bobot') is-invalid @enderror" name="bobot" value="{{ old('bobot') }}">
@error('bobot')
@ -76,12 +76,12 @@
{{-- <a href="{{ URL::to('download-crips-pdf') }}" target="_blank" class="d-none d-sm-inline-block btn btn-sm btn-primary shadow-sm float-right"><i
class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a> --}}
<br><br>
<table class="table table-striped table-hover" id="DataTable" data-paging="false">
<table class="table table-striped table-hover text-dark" id="DataTable" data-paging="false">
<thead>
<tr>
<th>No</th>
<th>Nama Sub Kriteria</th>
<th>Bobot</th>
<th>Sub Kriteria</th>
<th>Nilai</th>
<th>Aksi</th>
</tr>
</thead>

View File

@ -38,7 +38,7 @@ class="fas fa-download fa-sm text-white-50"></i>Download Laporan</a>
{{ session('empty') }}
</div>
@endif
<div class="table-responsive">
<div class="table-responsive" style="max-height: 500px; overflow-y: auto;">
<div class="row">
<div class="col-12">
<form action="{{ route('penilaian.store')}}" method="post">

View File

@ -3,6 +3,14 @@
@section('topbar', 'Data Perhitungan')
@section('content')
<style>
.scrollable-content {
max-height: 80vh;
overflow-y: auto;
padding-right: 10px;
}
</style>
<div class="scrollable-content">
<div class="card shadow mb-4">
<a href="#listkriteria" class="d-block card-header py-3" data-toggle="collapse"
role="button" aria-expanded="true" aria-controls="collapseCardExample">
@ -10,7 +18,7 @@
</a>
<div class="collapse show" id="listkriteria">
<div class="card-body">
<div class="table-responsive">
<div class="table-responsive" style="max-height: 500px; overflow-y: auto;">
<table class="table table-bordered">
<thead>
<tr>
@ -51,7 +59,7 @@
</a>
<div class="collapse show" id="normalisasi">
<div class="card-body">
<div class="table-responsive">
<div class="table-responsive" style="max-height: 500px; overflow-y: auto;">
<table class="table table-bordered">
<thead>
<tr>
@ -84,7 +92,7 @@
</a>
<div class="collapse show" id="rank">
<div class="card-body">
<div class="table-responsive">
<div class="table-responsive"style="max-height: 500px; overflow-y: auto;">
<table class="table table-bordered">
<thead>
<tr>
@ -119,5 +127,6 @@
</div>
</div>
</div>
</div>
@stop

View File

@ -6,7 +6,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>Hasil Perhitungan</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<style type="text/css">
.garis1{
@ -16,10 +16,10 @@
}
#camat{
#hrd{
text-align:center;
}
#nama-camat{
#nama-hrd{
margin-top:100px;
text-align:center;
}
@ -40,10 +40,10 @@
<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>
<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>
@ -51,7 +51,7 @@
<hr class="garis1"/>
<div style="margin-top: 25px; margin-bottom: 25px;">
<center><strong><u>LIST PENERIMA BANTUAN</u></strong></center>
<center><strong><u>LIST PELAMAR YANG LOLOS</u></strong></center>
</div>
<div class="collapse show" id="rank">
@ -94,9 +94,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>

View File

@ -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 pengguna</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<style type="text/css">
.garis1{
@ -35,10 +35,10 @@
<div>
<table>
<tr>
<td style="padding-right: 240px; padding-left: 20px"><img src="{{ asset('assets/images/logo no bg.png') }}" width="90" height="90" ></td>
<td style="padding-right: 240px; padding-left: 20px"></td>
<td>
<center>
<font size="4">PT.Intecon Bangun Persada</font><br>
<font size="4"><strong>PT.Intecon Bangun Persada</strong></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>
@ -90,7 +90,7 @@
<div class="col-md-4">
<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 />
<div id="nama-hrd"><strong><u>Yudi Sulistiawan</u></strong><br />
NIP. 3175044408730004</div>
</div>
</div>

View File

@ -85,6 +85,11 @@
<div class="text-center">
<h1 class="h4 text-white mb-4">Login!</h1>
</div>
@if(session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
<form class="user" method="post" action="{{ route('login')}}">
<div class="form-group">
@csrf
@ -121,19 +126,31 @@
{{-- <div class="text-center">
<a class="small" href="{{ route('register')}}">Buat Akun Baru!</a>
</div> --}}
</div>
</div>
</div>
<div class="card mt-4 border-left-primary shadow py-2 px-3">
<div class="card-body bg-light text-dark">
<h5 class="card-title text-primary font-weight-bold">Akun Admin (Demo)</h5>
<p><strong>Email:</strong> admin@admin.com</p>
<p><strong>Password:</strong> admin12345</p>
<p class="text-muted" style="font-size: 14px;">Gunakan email dan password ini untuk masuk sebagai admin.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Bootstrap core JavaScript-->
<script src="{{ asset ('vendor/jquery/jquery.min.js')}}"></script>
<script src="{{ asset ('vendor/bootstrap/js/bootstrap.bundle.min.js')}}"></script>

View File

@ -1,139 +1,175 @@
@extends('layouts.guest')
@extends('layouts.guest')
@section('css')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-7">
<div class="card shadow">
<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>
@section('css')
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap" rel="stylesheet">
<style>
body {
font-family: 'Poppins', sans-serif;
background: linear-gradient(to right, #0b80c8, #1cc88a);
}
#content-wrapper,
#content,
.container-fluid {
background:linear-gradient(to right, #0b80c8, #9ed7fa);
}
.card {
border-radius: 15px;
box-shadow: 0 4px 25px rgba(0, 0, 0, 0.1);
}
.card-header {
background-color: #0b80c8;
color: white;
border-top-left-radius: 15px;
border-top-right-radius: 15px;
padding: 10px 15px;
display: flex;
align-items: center;
}
.card-header img {
width: 50px;
height: 50px;
object-fit: contain;
margin-right: 15px;
}
.card-header span {
font-size: 1.5rem;
font-weight: 500;
}
.btn-primary {
background-color: #0b80c8;
border-color: #0b80c8;
border-radius: 8px;
}
.btn-primary:hover {
background-color: #06629b;
border-color: #06629b;
}
.form-control:focus {
border-color: #0b80c8;
box-shadow: 0 0 0 0.2rem rgba(11, 128, 200, 0.25);
}
.form-label {
font-weight: 500;
}
</style>
@endsection
@section('content')
<div class="container py-5">
<div class="row justify-content-center">
<div class="col-md-8 col-lg-7">
<div class="card">
<div class="card-header">
<img src="{{ asset('assets/images/logo.png') }}" alt="Logo">
<span class="fw-bold fs-4">Daftar Akun</span>
</div>
<div class="card-body">
<form action="{{ route('register.user.submit') }}" method="POST">
@csrf
{{-- Name --}}
<div class="mb-3">
<label for="name" class="form-label">Nama Lengkap</label>
<input id="name" type="text" class="form-control @error('name') is-invalid @enderror"
name="name" value="{{ old('name') }}" required>
@error('name')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
{{-- Email --}}
<div class="mb-3">
<label for="email" class="form-label">Email</label>
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror"
name="email" value="{{ old('email') }}" required>
@error('email')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
{{-- Password --}}
<div class="mb-3">
<label for="password" class="form-label">Kata Sandi</label>
<input id="password" type="password"
class="form-control @error('password') is-invalid @enderror" name="password"
placeholder="Minimal 8 karakter" required>
@error('password')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
{{-- Confirm Password --}}
<div class="mb-3">
<label for="password-confirm" class="form-label">Konfirmasi Kata Sandi</label>
<input id="password-confirm" type="password" class="form-control"
name="password_confirmation" placeholder="Ulangi kata sandi" required>
</div>
{{-- Alamat --}}
<div class="mb-3">
<label for="alamat" class="form-label">Alamat</label>
<input id="alamat" type="text"
class="form-control @error('alamat') is-invalid @enderror" name="alamat"
value="{{ old('alamat') }}" placeholder="Alamat lengkap">
@error('alamat')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
{{-- Telepon --}}
<div class="mb-3">
<label for="telepon" class="form-label">Telepon</label>
<input id="telepon" type="text"
class="form-control @error('telepon') is-invalid @enderror" name="telepon"
value="{{ old('telepon') }}" >
@error('telepon')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
{{-- Keterangan --}}
<div class="mb-4">
<label for="keterangan" class="form-label">Keterangan</label>
<input id="keterangan" type="text"
class="form-control @error('keterangan') is-invalid @enderror" name="keterangan"
value="{{ old('keterangan') }}" placeholder="Isi dengan 'pelamar'">
@error('keterangan')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
{!! NoCaptcha::display() !!}
@error('g-recaptcha-response')
<div class="text-danger">{{ $message }}</div>
@enderror
</div>
<div class="card-body">
<form action="{{ route('register.user.submit') }}" method="post">
@csrf
<div class="row mb-3">
<label for="name" class="col-md-4 col-form-label text-md-end">{{ __('Name') }}</label>
<div class="col-md-6">
<input id="name" type="text"
class="form-control @error('name') is-invalid @enderror" name="name"
value="{{ old('name') }}" required autocomplete="name" autofocus>
@error('name')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
{{-- Submit --}}
<div class="text-end">
<button type="submit" class="btn btn-primary">
<i class="fas fa-user-plus me-1"></i> Daftar
</button>
</div>
<div class="row mb-3">
<label for="email"
class="col-md-4 col-form-label text-md-end">{{ __('Email Address') }}</label>
<div class="col-md-6">
<input id="email" type="email"
class="form-control @error('email') is-invalid @enderror" name="email"
value="{{ old('email') }}" required autocomplete="email">
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="row mb-3">
<label for="password"
class="col-md-4 col-form-label text-md-end">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password"
class="form-control @error('password') is-invalid @enderror" name="password"
required autocomplete="new-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="row mb-3">
<label for="password-confirm"
class="col-md-4 col-form-label text-md-end">{{ __('Confirm Password') }}</label>
<div class="col-md-6">
<input id="password-confirm" type="password" class="form-control"
name="password_confirmation" required autocomplete="new-password">
</div>
</div>
<div class="row mb-3">
<label for="alamat" class="col-md-4 col-form-label text-md-end">Alamat</label>
<div class="col-md-6">
<input type="text"
class="form-control @error('alamat') is-invalid @enderror" name="alamat"
value="{{ old('alamat') }}">
@error('alamat')
<div class="invalid-feedback" role="alert">{{ $message }}</div>
@enderror
</div>
</div>
<div class="row mb-3">
<label for="telepon" class="col-md-4 col-form-label text-md-end">Telepon</label>
<div class="col-md-6">
<input type="number"
class="form-control @error('telepon') is-invalid @enderror" name="telepon"
value="{{ old('telepon') }}">
@error('telepon')
<div class="invalid-feedback" role="alert">{{ $message }}</div>
@enderror
</div>
</div>
<div class="row mb-3">
<label for="keterangan" class="col-md-4 col-form-label text-md-end">Keterangan</label>
<div class="col-md-6">
<input type="text"
class="form-control @error('keterangan') is-invalid @enderror" name="keterangan"
value="{{ old('keterangan') }}">
@error('keterangan')
<div class="invalid-feedback" role="alert">{{ $message }}</div>
@enderror
</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">
Tambah Data
</button>
</div>
</div>
</form>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</div>
</div>
</div>
</div>
</div>
{!! NoCaptcha::renderJs() !!}
@endsection

View File

@ -1,86 +1,86 @@
<ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion" id="accordionSidebar">
<ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion" id="accordionSidebar">
<!-- Sidebar - Brand -->
<!-- Sidebar - Brand -->
<a class="sidebar-brand d-flex align-items-center justify-content-center" href="{{ route('home') }}">
<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>
<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 -->
<hr class="sidebar-divider my-0">
<!-- Divider -->
<hr class="sidebar-divider my-0">
<!-- Nav Item - Dashboard -->
<li class="nav-item {{ request()->routeIs('home') ? 'active' : '' }}">
<a class="nav-link" href="{{ route('home') }}">
<i class="fas fa-fw fa-tachometer-alt"></i>
<span>Dashboard</span></a>
</li>
<!-- Nav Item - Dashboard -->
<li class="nav-item {{ request()->routeIs('home') ? 'active' : '' }}">
<a class="nav-link" href="{{ route('home') }}">
<i class="fas fa-fw fa-tachometer-alt"></i>
<span>Dashboard</span></a>
</li>
<!-- Divider -->
<hr class="sidebar-divider d-none d-md-block">
<!-- Divider -->
<hr class="sidebar-divider d-none d-md-block">
<!-- Heading -->
<div class="sidebar-heading">
DATA PERHITUNGAN
</div>
<!-- Heading -->
<div class="sidebar-heading">
DATA PERHITUNGAN
</div>
<!-- Nav Item - Tables -->
<li class="nav-item {{ request()->Is('kriteria*') ? 'active':'' }}">
<a class="nav-link" href="{{ route('kriteria.index') }}">
<i class="fas fa-fw fa-code"></i>
<span>Data Kriteria</span></a>
</li>
<!-- Nav Item - Tables -->
<li class="nav-item {{ request()->Is('kriteria*') ? 'active':'' }}">
<a class="nav-link" href="{{ route('kriteria.index') }}">
<i class="fas fa-fw fa-list-ol"></i>
<span>Data Kriteria</span></a>
</li>
<li class="nav-item {{ request()->Is('alternatif*') ? 'active':'' }}">
<a class="nav-link" href="{{ route('alternatif.index') }}">
<i class="fas fa-fw fa-users"></i>
<span>Data Pelamar</span></a>
</li>
<li class="nav-item {{ request()->Is('alternatif*') ? 'active':'' }}">
<a class="nav-link" href="{{ route('alternatif.index') }}">
<i class="fas fa-fw fa-users"></i>
<span>Data Pelamar</span></a>
</li>
<!-- Divider -->
<hr class="sidebar-divider d-none d-md-block">
<!-- Divider -->
<hr class="sidebar-divider d-none d-md-block">
<!-- Heading -->
<div class="sidebar-heading">
METODE SAW
</div>
<!-- Heading -->
<div class="sidebar-heading">
METODE SAW
</div>
<li class="nav-item {{ request()->Is('penilaian*') ? 'active':'' }}">
<a class="nav-link" href="{{ route('penilaian.index') }}">
<i class="fas fa-fw fa-bell"></i>
<span>Penilaian</span></a>
</li>
<li class="nav-item {{ request()->Is('penilaian*') ? 'active':'' }}">
<a class="nav-link" href="{{ route('penilaian.index') }}">
<i class="fas fa-fw fa-chart-line"></i>
<span>Penilaian</span></a>
</li>
<li class="nav-item {{ request()->Is('perhitungan*') ? 'active':'' }}">
<a class="nav-link" href="{{ route('perhitungan.index') }}">
<i class="fas fa-fw fa-book"></i>
<span>Perhitungan</span></a>
</li>
<li class="nav-item {{ request()->Is('perhitungan*') ? 'active':'' }}">
<a class="nav-link" href="{{ route('perhitungan.index') }}">
<i class="fas fa-fw fa-calculator"></i>
<span>Perhitungan</span></a>
</li>
<!-- Divider -->
<hr class="sidebar-divider my-0">
<!-- Divider -->
<hr class="sidebar-divider my-0">
<li class="nav-item {{ request()->Is('user*') ? 'active':'' }}">
<a class="nav-link" href="{{ route('user.index')}}">
<i class="fas fa-fw fa-user-circle"></i>
<span>Data Pengguna</span></a>
</li>
<li class="nav-item {{ request()->Is('user*') ? 'active':'' }}">
<a class="nav-link" href="{{ route('user.index')}}">
<i class="fas fa-fw fa-user-circle"></i>
<span>Data Pengguna</span></a>
</li>
<!-- <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 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> -->
<!-- Divider -->
<hr class="sidebar-divider d-none d-md-block">
<!-- Divider -->
<hr class="sidebar-divider d-none d-md-block">
<!-- Sidebar Toggler (Sidebar) -->
<div class="text-center d-none d-md-inline">
<button class="rounded-circle border-0" id="sidebarToggle"></button>
</div>
<!-- Sidebar Toggler (Sidebar) -->
<div class="text-center d-none d-md-inline">
<button class="rounded-circle border-0" id="sidebarToggle"></button>
</div>
</ul>

View File

@ -33,7 +33,7 @@
<span>Data Kriteria</span></a>
</li>-->
<li class="nav-item {{ request()->Is('alternatif*') ? 'active':'' }}">
<li class="nav-item {{ request()->Is('ajukan-lamaran') ? 'active':'' }}">
<a class="nav-link" href="{{ route('alternatif.index') }}">
<i class="fas fa-fw fa-users"></i>
<span>Ajukan Lamaran</span></a>

View File

@ -13,42 +13,49 @@
<!-- 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">
<!-- Notifikasi Pelamar Baru -->
@php
$notifikasi = Auth::user()->unreadNotifications->where('type', 'App\Notifications\PelamarBaruNotification');
@endphp
<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>
<!-- Counter -->
@if($notifikasi->count() > 0)
<span class="badge badge-danger badge-counter">{{ $notifikasi->count() }}</span>
@endif
</a>
<!-- Dropdown - Notifications -->
<!-- Dropdown - Alerts -->
<div class="dropdown-list dropdown-menu dropdown-menu-right shadow animated--grow-in"
aria-labelledby="alertsDropdown">
<h6 class="dropdown-header">
Notifikasi
Notifikasi Pelamar Baru
</h6>
@forelse(auth()->user()->unreadNotifications as $notification)
<a class="dropdown-item d-flex align-items-center" href="{{ route('alternatif.index') }}">
@forelse ($notifikasi as $notif)
<a class="dropdown-item d-flex align-items-center" href="#">
<div class="mr-3">
<div class="icon-circle bg-primary">
<i class="fas fa-user text-white"></i>
<i class="fas fa-user-plus 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 class="small text-gray-500">{{ $notif->created_at->diffForHumans() }}</div>
<span class="font-weight-bold">{{ $notif->data['message'] }}</span>
</div>
</a>
@empty
<div class="dropdown-item text-center small text-gray-500">Tidak ada notifikasi baru</div>
<a class="dropdown-item text-center small text-gray-500" href="#">Tidak ada notifikasi baru</a>
@endforelse
<a class="dropdown-item text-center small text-gray-500" href="#">Tampilkan Semua Notifikasi</a>
@if($notifikasi->count() > 0)
<div class="dropdown-divider"></div>
<a href="{{ route('notifikasi.baca') }}" class="dropdown-item text-center small text-primary">
Tandai semua telah dibaca
</a>
@endif
</div>
</li>
@else
@endauth
<div class="topbar-divider d-none d-sm-block"></div>

View File

@ -2,6 +2,7 @@
<html lang="en">
<head>
<meta name="csrf-token" content="{{ csrf_token() }}">
@include('layouts/_partials/head')

View File

@ -17,7 +17,7 @@
@stop
@section('content')
<div class="container-fluid">
<div class="container-fluid" style="max-height: 520px; overflow-y: auto;">
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">Form Pengajuan Lamaran</h6>
@ -32,7 +32,7 @@
</div>
@endif
<form action="{{ route('alternatif.store') }}" method="post" enctype="multipart/form-data">
<form action="{{ route('lamaran.store') }}" method="post" enctype="multipart/form-data">
@csrf
<!-- Data Pribadi -->
@ -41,10 +41,10 @@
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="nama_alternatif">Nama Lengkap <span class="text-danger">*</span></label>
<input type="text" class="form-control @error('nama_alternatif') is-invalid @enderror"
name="nama_alternatif" value="{{ old('nama_alternatif') }}">
@error('nama_alternatif')
<label for="name">Nama Lengkap <span class="text-danger">*</span></label>
<input type="text" class="form-control @error('name') is-invalid @enderror"
name="name" value="{{ old('name') }}">
@error('name')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
@ -89,15 +89,20 @@ class="form-control @error('ipk') is-invalid @enderror"
</div>
<div class="form-group">
<label for="jurusan">Jurusan <span class="text-danger">*</span></label>
<input type="text" name="jurusan"
class="form-control @error('jurusan') is-invalid @enderror"
value="{{ old('jurusan') }}">
@error('jurusan')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<label for="jurusan">Jurusan <span class="text-danger">*</span></label>
<select name="jurusan" class="form-control @error('jurusan') is-invalid @enderror">
<option value="">-- Pilih Jurusan --</option>
<option value="Teknik Sipil" {{ old('jurusan') == 'Teknik Sipil' ? 'selected' : '' }}>Teknik Sipil</option>
<option value="Arsitektur" {{ old('jurusan') == 'Arsitektur' ? 'selected' : '' }}>Arsitektur</option>
<option value="Teknologi Rekayasa Konstruksi Bangunan Gedung" {{ old('jurusan') == 'Teknologi Rekayasa Konstruksi Bangunan Gedung' ? 'selected' : '' }}>TRKBG</option>
<option value="Akuntansi" {{ old('jurusan') == 'Akuntansi' ? 'selected' : '' }}>Akuntansi</option>
<option value="Lainnya" {{ old('jurusan') == 'Lainnya' ? 'selected' : '' }}>Lainnya</option>
<!-- Tambahkan opsi lain sesuai kebutuhan -->
</select>
@error('jurusan')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="form-group">
<label for="lama_studi">Lama Studi (tahun) <span class="text-danger">*</span></label>
<input type="number" name="lama_studi" min="0" max="10" step="1"

View File

@ -8,6 +8,8 @@
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap" rel="stylesheet">
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
<style>
body {
font-family: 'Poppins', sans-serif;
@ -179,7 +181,7 @@
<div class="col-md-4">
<div class="service-card">
<i class="fas fa-eye"></i>
<i class="fas fa-puzzle-piece"></i>
<h4>Visi</h4>
<p>Sebagai perusahaan Kontraktor Umum yang paling inovatif dan kompeten dalam memberikan pelayanan dan solusi atas keinginan
dan permasalahan</p>
@ -199,8 +201,8 @@
</div>
<div class="col-md-4">
<div class="service-card">
<i class="fas fa-bullseye"></i>
<h4>Misi</h4>
<i class="fas fa-tools"></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>
@ -218,13 +220,12 @@
<!-- Footer -->
<footer>
<div class="container">
<p>© {{ date('Y') }} Intecon Bangun Persada.</p>
<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>
</body>
</html>

View File

@ -1,5 +1,6 @@
<?php
use App\Http\Controllers\AlternatifController;
use GuzzleHttp\Middleware;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
@ -7,7 +8,8 @@
use App\Http\Controllers\RegisterUserController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\Auth\ForgotPasswordController;
use App\Http\Controllers\AdminController;
use App\Http\Controllers\LamaranUserController;
/*
|--------------------------------------------------------------------------
| Web Routes
@ -44,6 +46,14 @@
->name('admin.home')
->middleware('admin');
Route::get('/admin/lamaran', [AdminController::class, 'daftarLamaran'])->name('admin.lamaran');
Route::post('/admin/lamaran/terima/{id}', [AlternatifController::class, 'terimaLamaran'])->name('admin.lamaran.terima');
Route::post('/admin/lamaran/tolak/{id}', [AlternatifController::class, 'tolakLamaran'])->name('admin.lamaran.tolak');
Route::post('/ajukan-lamaran', [LamaranUserController::class, 'store'])->name('lamaran.store');
Route::get('/user/home', [App\Http\Controllers\HomeController::class, 'userHome'])
->name('user.home')
->middleware('user');
@ -54,6 +64,15 @@
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::get('/notifikasi/baca', function () {
foreach (auth()->user()->unreadNotifications as $notification) {
$notification->markAsRead();
}
return back()->with('success', 'Semua notifikasi telah ditandai sebagai dibaca.');
})->name('notifikasi.baca');
Route::resource('kriteria', 'App\Http\Controllers\KriteriaController')->except(['create']);
Route::resource('alternatif', 'App\Http\Controllers\AlternatifController')->except(['create']);
Route::resource('crips', 'App\Http\Controllers\CripsController')->except(['index','create','show']);