TUGAS AKHIR
Untuk Memenuhi Persyaratan Memperoleh Sebutan Ahli Madya
Oleh :
MOCHAMAD IRFANI ARDHYANSAH
NPM : 183307009
TUGAS AKHIR
Untuk Memenuhi Persyaratan Memperoleh Sebutan Ahli Madya
Oleh :
MOCHAMAD IRFANI ARDHYANSAH
NPM : 183307009
ii
iii
LEMBAR PENGESAHAN
TUGAS AKHIR
3. Penguji III
Mengetahui,
Ketua Jurusan Teknik Koordinator Program Studi
Politeknik Negeri Madiun Teknologi Informasi
iv
PERNYATAAN
Menyatakan dengan sebenarnya bahwa Tugas Akhir yang saya serahkan ini
benar-benar hasil karya sendiri, kecuali kutipan-kutipan dan ringkasan-ringkasan
yang telah saya jelaskan sumbernya.
Apablia dikemudian hari terbukti Tugas Akhir ini hasil plagiasi, maka sebutan
Ahli Madya yang diberikan oleh Politeknik Negeri Madiun akan dicabut.
Madiun, …………………..
Yang Membuat
v
MOTTO DAN PERSEMBAHAN
MOTTO
“Setiap bunga memiliki waktu mereka sendiri untuk mekar. Tetaplah berusaha
PERSEMBAHAN
Alhamdulillah, puji syukur saya panjatkan kepada Allah SWT, atas segala
tugas akhir ini tepat waktu. Tak henti-hentinya berucap Alhamdulillah bersyukur
kepada Allah SWT, telah menghadirkan orang-orang yang berarti serta supportif
di sisi saya, yang tak henti-hentinya memberi semangat, dukungan, motivasi dan
doa sehingga laporan tugas akhir ini dapat saya selesaikan dengan baik dan benar
1. Kedua orang tua saya, bapak Pudji Priyono dan ibu Titin Zuhrijah
tua saya di kampus, yang selalu ada, memberi solusi, semangat dan
vi
3. Teman - teman Teknologi Informasi angkatan 2018 terutama kepada
teman sekelas. Terimakasih untuk kenangan yang telah kita rajut bersama
baik suka maupun duka, baik senang maupun sedih selama tiga tahun
terakhir, atas tawa ceria yang selalu menghiasi hampir setiap hari. Semoga
momen - momen indah itu akan selalu menjadi kenangan yang tidak akan
vii
ABSTRAK
(183307009)
viii
ABSTRACT
(183307009)
ix
KATA PENGANTAR
Bismillahirrahmanirrahim,
Dengan mengucap syukur kehadirat Allah Subhanahu wa Ta’ala atas
Akhir pada program studi teknologi informasi, politeknik negeri madiun. Peneliti
berterima kasih kepada semua pihak yang telah membantu dalam penulisan tugas
inayah Nya.
Negeri Madiun.
II Tugas Akhir.
x
Demikian Tugas Akhir ini disusun, semoga Tugas Akhir ini dapat
kekurangan dan keterbatasannya. Atas segala saran, kritik, dan masukan, peneliti
Peneliti
xi
DAFTAR ISI
PERNYATAAN......................................................................................................v
ABSTRAK...........................................................................................................viii
ABSTRACT.............................................................................................................ix
KATA PENGANTAR............................................................................................x
DAFTAR ISI.........................................................................................................xii
DAFTAR GAMBAR............................................................................................xv
DAFTAR TABEL................................................................................................xxi
DAFTAR LAMPIRAN.....................................................................................xxiii
BAB I PENDAHULUAN......................................................................................1
2.2.4 PHP.................................................................................................14
2.2.6 MySQL............................................................................................16
2.2.8 XAMPP...........................................................................................17
4.2 Pengujian..............................................................................................118
BAB V PENUTUP..............................................................................................125
5.1 Kesimpulan...........................................................................................125
5.2 Saran.....................................................................................................125
DAFTAR PUSTAKA.........................................................................................127
LAMPIRAN........................................................................................................128
DAFTAR GAMBAR
xvi
Gambar 3.17 Activity Diagram Menginput Kebutuhan Kriteria.........................54
xvii
Gambar 3.40 Pimpinan Data Pengumuman........................................................72
xviii
Gambar 4.8 Tabel values.....................................................................................86
xix
Gambar 4.31 Halaman Data Mahasiswa...........................................................101
xx
Gambar 4.54 Halaman Dashboard Pimpinan...................................................117
xxi
DAFTAR TABEL
xxii
Tabel 3.18 Deskripsi Use Case Mendownload Pengumuman.............................41
xxiii
DAFTAR LAMPIRAN
xxiv
BAB I
PENDAHULUAN
1.1 Latar Belakang
wali, Indeks Prestasi Kumulatif (IPK) yang paling rendah 3,00 dan lain
sebagainya.
dan diserahkan ke Sub Bag Akademik, dan admin harus menyortir surat
akademik yang sudah dilegalisir oleh Sub Bag Akademik, surat pernyataan
1
2
Direktur III, surat rekomendasi dari Ketua Jurusan, fotokopi kartu keluarga
dan KTP orang tua, surat keterangan penghasilan orang tua dari instansi
tempat kerja, surat keterangan tidak mampu, fotokopi sertifikat yang pernah
yang kurang efisien dari segi waktu dan tenaga. Menurut Supriyanti, W
metode ini dapat menentukan nilai bobot untuk setiap kriteria, kemudian
terbaik dari sejumlah alternatif. Dalam hal ini alternatif yang dimaksud
bagi mahasiswa berprestasi ini akan berbasis web, peneliti memilih sistem
beasiswa PPA harus disesuaikan dengan prinsip 3T, yaitu : Tepat sasaran,
yang sudah ditentukan yaitu : IPK, Gaji Orang Tua, Tanggungan Orang
Additive Weight.
5
6
Jumlah Tanggungan, Nilai PKM. Dan 1 level user saja, maka dari
Hanya memiliki 1 level user saja yaitu admin. Kriteria pada sistem
Tanggungan.
lain untuk dapat meningkatkan nilai akurasi yang lebih baik dalam
terdapat fitur export data berupa pdf. Maka dari itu peneliti
yang diikuti, Jumlah Tanggungan Orang tua. maka dari itu peneliti
Web.
Berbasis web ditulis oleh Petricia Oktavia tahun 2018. Pada sistem
ini hanya terdapat 1 level user yaitu staff, terdapat 6 kriteria yaitu :
Jumlah Tanggungan, Nilai Rata rata raport, Gaji Orang tua. Pada
Framework Laravel”.
tersebut adalah :
10
i. Intelligence
ii. Design
iii. Choice
iv. Implementation
diperlukan perbaikan.
Weighted Product
Solution
12
berikut:
Keterangan :
berikut :
Keterangan :
Vi = nilai preferensi
lebih terpilih.
Additive Weight :
setiap kriteria.
r.
2.2.4 PHP
web statis atau situs web dinamis atau aplikasi web. PHP
Laravel | IDCloudHost.).
16
view.
2.2.6 MySQL
melihat, dan mengedit file plain text atau teks biasa. Tidak
2.2.8 XAMPP
2016).
yang ada dalam sebuah sistem yang akan dibuat. Diagram use
case juga digunakan untuk mengetahui fungsi apa saja yang ada
fungsi tersebut.
Percabangan Asosiasi
percabangan
dimana jika ada
21
menggunakan 3 tahap :
a. Observasi
metode konvensional.
b. Studi Pustaka
c. Wawancara
25
26
nilainya.
format pdf.
1) Data Mahasiswa
fungsional :
28
yaitu :
2) RAM : 2GB.
4) VRAM : 500MB.
5) Hardisk : 250GB.
PPA.
29
admin.
SAW.
pengguna.
dikembangkan.
6. Coding
dibutuhkan.
tahap analisis
9. Program Use
sistem.
kerja sistem. Berikut adalah perancangan dari sistem yang akan dibangun :
33
3.2.1 Flowchart
gambar dibawah.
antara satu atau lebih aktor dengan sistem yang akan dibuat. Use
Case yang akan dibangun oleh peneliti dapat dilihat pada gambar 6
dibawah ini :
35
mengupload foto.
43
masing-masing.
44
update, delete.
47
delete.
49
delete.
update.
51
update, delete.
53
didaftar.
dilihat mahasiswa.
a. Sequence Registrasi
registrasi berhasil.
58
b. Sequence Login
delete data.
66
method sendiri-sendiri.
ini hanya bisa diakses oleh super admin. Halaman ini terdapat 2
pengumuman.
74
edit, delete.
tombol delete.
bobot.
77
kedalam sistem.
beasiswa, form input dan form upload file sesuai dengan data
1. Tabel admins
admin.
83
84
2. Tabel users
3. Tabel anouncements
4. Tabel criterias
85
5. Tabel mahasiswas
6. Tabel periods
86
beasiswa.
7. Tabel user_periods
8. Tabel values
beasiswa.
9. Tabel weights
mendaftar.
keputusan.
mahasiswa.
92
foto default.
halaman ini.
sebelumnya.
ini berasal dari data kriteria dan bobot yang telah dibuat oleh
9. Halaman Kriteria
atau pimpinan.
98
yang tersedia.
pada halaman data admin. Form ini berisi tentang data akun
pimpinan.
Proses pada form ini user akan mengganti data yang terdapat
1. Dashboard Admin
total mahasiswa.
106
data nilai tiap kriteria yang terdapat tombol edit dan tombol
hapus.
nilai.
diterima per prodi pada periode ini, tombol ganti status untuk
tersebut.
metode SAW.
115
atau pimpinan.
119
yang tersedia.
4. Form Pengesahan
mengesahkan pengumuman.
4.2 Pengujian
2. Halaman Penguji
Registrasi menginputkan
password dibawah 6
Mahasiswa digit. Apabila
password dibawah 6
akan menampilkan
error
beasiswa.
5.2 Saran
pengembangan.
126
127
kehilangan data.
128
129
LAMPIRAN
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Mahasiswa;
use App\User;
use App\Prodi;
use Carbon\Carbon;
use Importer;
use \PDF;
use File;
use Illuminate\Support\Facades\Crypt;
class MahasiswaController extends Controller
{
public function index()
{
$mahasiswas = Mahasiswa::orderBy('semester', 'ASC')-
>paginate(10);
$prodis = Prodi::orderBy('name', 'ASC')->get();
return view('admin.mahasiswa.index', compact('mahasisw
as', 'prodis'));
}
public function search(Request $request)
{
if($request->input('prodi_id') != 'All') {
$mahasiswas = Mahasiswa::where('prodi_id', 'lik
e', '%' . $request->input('prodi_id') . '%')
->orderBy('semester', 'ASC')
->paginate(10);
} else {
$mahasiswas = Mahasiswa::orderBy('semester', 'ASC'
)->paginate(10);
}
$prodis = Prodi::orderBy('name', 'ASC')->get();
return view('admin.mahasiswa.index', compact('mahasisw
as', 'prodis'));
}
138
public function cetak_pdf()
{
$mahasiswas = Mahasiswa::orderBy('semester', 'ASC')->get();
$now = Carbon::now();
$pdf = PDF::loadview('admin.mahasiswa.mahasiswa_pdf',
compact('mahasiswas', 'now'));
return $pdf->download('Data Mahasiswa Tahun '.$now-
>year.'.pdf');
}
public function detail($id)
{
$id = Crypt::decrypt($id);
$mahasiswa = Mahasiswa::findOrFail($id);
return view('admin.mahasiswa.detail', compact('mahasiswa'));
}
public function delete($id)
{
$mahasiswa = Mahasiswa::findOrFail($id);
File::delete('profile_images/'. $mahasiswa->user->npm
. '/' .$mahasiswa->photo);
User::where('id', $mahasiswa->user_id)->delete();
$mahasiswa -> delete();
return redirect()->back()->with(['success' => 'Data '
. $mahasiswa->name . ' Berhasil Dihapus!' ]);
}
public function store(Request $request)
{
try {
$this->validate($request, [
'file' => 'required|max:5000|mimes:xlsx,xls,csv',
], [
'file.required' => 'File Harus Diisi!',
'file.max' => 'File Max 5MB!',
'file.mimes' => 'File Harus Bertipe xlsx,xls,csv'
]);
$file = $request->file('file');
$extension = $file->getClientOriginalExtension();
$nama_file = Carbon::now()->format('Y-m-d') . '_' .
'data_mahasiswa' . '.' . $extension;
139
$request->file('file')->move('data_mahasiswa/', $n
ama_file);
$excel = Importer::make('Excel');
$excel->load('data_mahasiswa/'.$nama_file);
$collection = $excel->getCollection();
if(sizeof($collection[1]) == 10) {
for($row=1; $row<sizeof($collection); $row++)
{
try {
$user = User::create([
'npm' => $collection[$row][0],
'email' => $collection[$row][1],
'password' => bcrypt($collection[$row][2]),
]);
Mahasiswa::create([
'user_id' => $user->id,
'name' => $collection[$row][3],
'prodi_id' => Prodi::where('name', $collecti
on[$row][4])->first()->id,
'semester' => $collection[$row][5],
'address' => $collection[$row][6],
'gender' => $collection[$row][7],
'phone' => $collection[$row][8],
'religion' => $collection[$row][9],
]);
return redirect()->back()->with(['success' =
> 'Berhasil Upload Excel!']);
}catch(\Exception $e) {
$user1 = User::findOrFail($user->id);
$user1->delete();
return redirect()->back()->with(['error' => $e-
>getMessage()]);
}
}
}
} catch(\Exception $e) {
return redirect()->back()->with(['error' => $e-
>getMessage()]);
} } }
4. Source Code Controller Prodi
<?php
140
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Prodi;
class ProdiController extends Controller
{
public function index()
{
$prodis = Prodi::orderBy('name', 'ASC')->paginate(10);
return view('admin.prodi.index', compact('prodis'));
}
public function save(Request $request)
{
try{
$this->validate($request, [
'name' => 'required|unique:prodis',
'total' => 'required|numeric'
],[
'name.required' => 'Nama Prodi harus Diisi!',
'name.unique'=> 'Nama Prodi Tidak Boleh Sama',
'total.required'=>'Total Mahasiswa Harus Diisi!',
'total.numeric'=>'Total Mahasiswa Harus Berbentuk Angka'
]);
$prodi = Prodi::create([
'name' => $request->name,
'total' => $request->total
]);
return redirect()->back()->with(['success' => 'Ber
hasil Menambah Prodi ' . $prodi->name]);
} catch(\Exception $e) {
return redirect()->back()->with(['error' => $e-
>getMessage()]);
}
}
public function update(Request $request, $id)
{
if($request->isMethod('post')) {
$data = $request->all();
141
Prodi::where(['id'=>$id])-
>update(['name'=>$data['name'], 'total'=>$data['total']]);
return redirect()->back()->with(['success' => 'Upd
ate ' . $request->name . ' Berhasil!']);
}
}
public function delete($id)
{
$prodi = Prodi::findOrFail($id);
$prodi -> delete();
return redirect()->back()->with(['success' => 'Data '
. $prodi->name . ' Berhasil Dihapus!' ]);
}
}
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Criteria;
use App\Weight;
use Auth;
use DB;
class CriteriaController extends Controller
{
public function index()
{
$criterias = Criteria::all();
return view('admin.criteria.index', compact('criterias'));
}
public function save(Request $request)
{
$limit = DB::table('criterias')->select('weight')-
>sum('weight');
try {
if($request->weight && $request->weight + $limit <= '1.0') {
$this->validate($request, [
'code' => 'required|alpha_num|unique:criterias',
142
'name' => 'required|max:40',
'weight' => 'required|numeric|between: 0.0 , 0.5',
'character' => 'required',
'information' => 'required'
], [
'code.alpha_num'=>'Kode Harus Berupa Karakter dan Angka',
'code.required' => 'Kode Harus Diisi!',
'code.unique' => 'Kode Harus Unik!',
'name.required' => 'Nama Harus Diisi!',
'name.alpha' => 'Nama Harus Berupa Karakter',
'weight.required' => 'Bobot Harus Diisi!',
'character.alpha' => 'Karakter Harus Berupa Karakter',
'name.max' => 'Nama Maksimal 40 Huruf!',
'weight.between' => 'Bobot Harus 0 <= 0.5',
'information.alpha' => 'Keterangan Harus Berupa Karakter',
'information.required' => 'Keterangan Harus Diisi!',
]);
$criteria = Criteria::create([
'admin_id' => Auth::user()->id,
'code' => $request->code,
'name' => $request->name,
'weight' => $request->weight,
'character' => $request->character,
'information' => $request->information,
'status' => 1
]);
} elseif(empty($request->weight)) {
$this->validate($request, [
'code'=>'required|alpha_num|unique:criterias',
'name' => 'required|max:40',
'character' => 'required',
'information' => 'required'
], [
'code.alpha_num'=>'Kode Harus Berupa Karakter dan Angka',
'code.required' => 'Kode Harus Diisi!',
'code.unique' => 'Kode Harus Unik!',
'name.required' => 'Nama Harus Diisi!',
'name.regex' => 'Nama Harus Berupa Karakter',
'name.max' => 'Nama Maksimal 40 Huruf!',
'character.regex' => 'Karakter Harus Berupa Karakter',
'information.regex'=>'Keterangan Harus Berupa Karakter',
'information.required' => 'Keterangan Harus Diisi!',
]);
$criteria = Criteria::create([
143
'admin_id' => Auth::user()->id,
'code' => $request->code,
'name' => $request->name,
'weight' => $request->weight,
'character' => $request->character,
'information' => $request->information,
'status' => 0
]);
} else {
return redirect()->back()->with(['error' => 'W
eight total sudah 1.0!']);
}
return redirect()->back()->with(['success' => 'Ber
hasil Menambah Data ' . $criteria->name]);
} catch(\Exception $e) {
return redirect()->back()->with(['error' => $e-
>getMessage()]);
}
}
public function delete($id)
{
try {
$criteria = Criteria::findOrFail($id);
$criteria -> delete();
return redirect()->back()->with(['success' => 'Dat
a ' . $criteria->name . ' Berhasil Dihapus!' ]);
} catch(\Exception $e) {
return redirect()->back()->with(['error' => 'Gagal
Menghapus Data!']);
}
}
public function update(Request $request, $id)
{
$limit = DB::table('criterias')->select('weight')-
>sum('weight');
$weight = DB::table('criterias')->where('id', $id)-
>select('weight')->sum('weight');
$criteria_status = Criteria::where('id', $id)-
>pluck('status')->first();
if($request->isMethod('post')) {
144
try {
$this->validate($request, [
'code' => 'required|unique:criterias,code,'.$id,
'name' => 'required|unique:criterias,name,'.$id,
], [
'code.unique' => 'Kode Harus Unik!',
'name.unique' => 'Nama Harus Unik!',
]);
$data = $request->all();
if($criteria_status != 0) {
if(($limit - $weight) + $data['weight'] <= '1') {
Criteria::where(['id'=>$id])-
>update(['code'=>$data['code'], 'name'=>$data['name'], 'weight
'=>$data['weight'], 'character'=>$data['character'], 'informat
ion'=>$data['information']]);
return redirect()->back()-
>with(['success' => 'Update ' . $request->name . ' Berhasil!']
);
} else {
return redirect()->back()-
>with(['error' => 'Weight total sudah Melebihi Batas 1.0']);
}
} else {
Criteria::where(['id'=>$id])-
>update(['code'=>$data['code'], 'name'=>$data['name'], 'inform
ation'=>$data['information']]);
return redirect()->back()->with(['success'
=> 'Update ' . $request->name . ' Berhasil!']);
}
} catch(\Exception $e) {
return redirect()->back()->with(['error' => $e
->getMessage()]);
}
}
}
}
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
145
use App\Http\Controllers\Controller;
use App\Weight;
use Auth;
class WeightController extends Controller
{
public function save(Request $request)
{
try {
$this->validate($request, [
'criteria_id' => 'required|exists:criterias,id',
'information' => 'required',
'value' => 'required|numeric|between:0,1'
],[
'information.required'=>'Keterangan harus Diisi!',
'value.required'=> 'Nilai Harus Diisi!',
'value.between' => 'Nilain Harus Bernilai 0 =< 1'
]);
$weight = Weight::create([
'criteria_id' => $request->criteria_id,
'information' => $request->information,
'value' => $request->value
]);
return redirect()->back()->with(['success' => 'Ber
hasil Menambah Nilai Kriteria ' . $weight->information]);
} catch(\Exception $e) {
return redirect()->back()->with(['error'=>$e->getMessage()]);
}
}
public function update(Request $request, $id)
{
if($request->isMethod('post')) { //jika method post
try {
$this->validate($request, [
'information'=>'required|unique:weights,information,'.$id,
'value' => 'required|unique:weights,value,'.$id,
], [
'information.unique' => 'Keterangan Tidak Boleh Sama!',
'value.unique' => 'Nilai Tidak Boleh Sama!',
]);
$data = $request->all();
146
Weight::where(['id'=>$id])-
>update(['information'=>$data['information'], 'value'=>$data['
value']]);
return redirect()->back()->with(['success' =>
'Update ' . $request->information . ' Berhasil!']);
} catch(\Exception $e) {
return redirect()->back()->with(['error' => $e
->getMessage()]);
}
}
}
public function delete($id)
{
try {
$weight = Weight::findOrFail($id);
$weight -> delete();
return redirect()->back()->with(['success' => 'Dat
a ' . $weight->information . ' Berhasil Dihapus!']);
} catch(\Exception $e) {
return redirect()->back()->with(['error'=>$e->getMessage()]);
}
}
}
namespace App\Http\Controllers\admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Mahasiswa;
use App\Admin;
use App\Criteria;
use App\Period;
use App\Dashboard;
use Auth;
class DashboardController extends Controller
{
public function index()
{
$admin_count = Admin::all()->count();
147
$mahasiswa_count = Mahasiswa::all()->count();
$criteria_count = Criteria::all()->count();
$period_count = Period::all()->count();
return view('admin.index', compact('admin_count', 'mah
asiswa_count', 'criteria_count', 'period_count'));
}
public function user()
{
$dashboard = Dashboard::all();
return view('admin.dashboard_user.index',compac('dashboard'));
}
public function save(Request $request)
{
try {
$this->validate($request, [
'title' => 'required',
'content' => 'required'
],[
'title.required' => 'Judul harus Diisi!',
'content.required' => 'Konten Harus Diisi!'
]);
Dashboard::create([
'admin_id' => Auth::user()->id,
'title' => $request->title,
'content' => $request->content
]);
return redirect()->back()->with(['success' => 'Ber
hasil Menambah Konten Dashboard User!']);
} catch(\Exception $e) {
return redirect()->back()->with(['error' => $e-
>getMessage()]);
}
}
public function update(Request $request, $id)
{
if($request->isMethod('post')) { //jika method post
$data = $request->all();
Dashboard::where(['id'=>$id])->
update(['title'=>$data['title'],'content'=>$data['content']]);
return redirect()->back()->with(['success' => 'Upd
ate ' . $request->title . ' Berhasil!']);
148
}
}
}
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\User_period;
use App\Period;
use App\Mahasiswa;
use App\Value;
use App\Criteria;
use App\Prodi;
use App\User;
use \PDF;
use File;
class BeasiswaController extends Controller
{
public function peserta($id)
{
$beasiswa = Period::where('id', $id)->first();
$user_period = User_period::where('period_id', $id)->get();
$pendaftar = Mahasiswa::whereIn('user_id', $user_perio
d->pluck('user_id'))->orderBy('semester', 'ASC')-
>paginate(10);
$period_id = $id;
return view('admin.period.peserta', compact('pendaftar
', 'beasiswa', 'period_id'));
}
public function search($id, Request $request)
{
$beasiswa = Period::where('id', $id)->first();
$user_period = User_period::where('period_id', $id)->get();
$period_id = $id;
$pendaftar = Mahasiswa::whereIn('user_id', $user_perio
d->pluck('user_id'))->where('name', 'like', '%' . $request-
>input('name').'%')->orderBy('semester', 'ASC')->paginate(10);
149
return view('admin.period.peserta', compact('pendaftar
', 'beasiswa', 'period_id'));
}
public function delete($id, $mahasiswa_id)
{
try {
$mahasiswa = Mahasiswa::findOrFail($mahasiswa_id);
$period = Period::findOrFail($id);
$user_period = User_period::where('period_id', $id
)->where('user_id', $mahasiswa->user->id);
$values = Value::where('period_id', $period->id)-
>where('mahasiswa_id', $mahasiswa->id);
File::deleteDirectory('periode/' . $period->start
. '_' . $period->end . '/' . $mahasiswa->user->npm);
$user_period->delete();
$values->delete();
return redirect()->back()->with(['success' => 'Dat
a Pendaftar ' . $mahasiswa->name . ' Berhasil Dihapus!' ]);
} catch(\Exception $e) {
return redirect()->back()->with(['error'=>$e->getMessage()]);
}
}
public function kuota($id)
{
$prodis = Prodi::orderBy('name', 'ASC')->get();
$user_period = User_period::where('period_id', $id)->get();
$period = Period::findOrFail($id);
$mahasiswas = Mahasiswa::whereIn('user_id', $user_period-
>pluck('user_id'))->whereIn('prodi_id', $prodis->pluck('id'))-
>get();
return view('admin.period.kuota', compact('prodis', 'm
ahasiswas', 'period', 'id'));
}
public function analisisProdi($id, $prodi_id)
{
$prodi = Prodi::where('id', $prodi_id)-
>orderBy('name', 'ASC')->first();
$user_period = User_period::where('period_id', $id)->get();
150
$mahasiswas = Mahasiswa::whereIn('user_id', $user_peri
od->pluck('user_id'))->where('prodi_id', $prodi_id)->get();
$criterias = Criteria::where('status',1)->get();
$criterias_count=Criteria::where('status',1)->get()->count();
$values = Value::whereIn('mahasiswa_id', $mahasiswas-
>pluck('id'))->get();
return view('admin.period.analisis_prodi', compact('pr
odi', 'mahasiswas', 'criterias', 'criterias_count', 'values',
'prodi_id'));
}
public function analisisFull($id)
{
$prodi = Prodi::orderBy('name', 'ASC')->get();
$user_period = User_period::where('period_id', $id)->get();
$mahasiswas = Mahasiswa::whereIn('user_id', $user_peri
od->pluck('user_id'))->get();
$criterias = Criteria::where('status',1)->get();
$criterias_count=Criteria::where('status',1)->get()->count();
$values = Value::whereIn('mahasiswa_id', $mahasiswas-
>pluck('id'))->get();
$period = Period::findOrFail($id);
return view('admin.period.analisis_full', compact('pro
di', 'mahasiswas', 'criterias', 'criterias_count', 'period', '
values', 'id'));
}
public function analisis_cetak_pdf($id)
{
$prodi = Prodi::orderBy('name', 'ASC')->get();
$user_period = User_period::where('period_id', $id)->get();
$mahasiswas = Mahasiswa::whereIn('user_id', $user_peri
od->pluck('user_id'))->get();
$criterias = Criteria::where('status',1)->get();
$criterias_count=Criteria::where('status',1)->get()->count();
$values = Value::whereIn('mahasiswa_id', $mahasiswas-
>pluck('id'))->get();
$period = Period::findOrFail($id);
$pdf = PDF::loadview('admin.period.perhitungan2', comp
act('prodi', 'mahasiswas', 'criterias', 'criterias_count', 'va
lues', 'period'));
151
return $pdf->download('Hasil Analisis Beasiswa PPA Per
iode ' . date('Y', strtotime($period->start)) . '.pdf');
}
public function nilai($period_id, $mahasiswa_id)
{
//Mengambil data dari inputan mahasiswa
$values = Value::where([
['mahasiswa_id', $mahasiswa_id],
['period_id', $period_id]
])->get();
$mahasiswa = Mahasiswa::findOrFail($mahasiswa_id);
return view('admin.period.nilai',compact('values', 'mahasiswa'
));
}
}
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use App\Http\Controllers\Controller;
use App\Period;
use Carbon\Carbon;
use Auth;
use \PDF;
use File;
class PeriodController extends Controller
{
public function index()
{
$periods = Period::all();
return view('admin.period.index', compact('periods'));
}
public function save(Request $request)
{
try {
$this->validate($request, [
152
'start' => 'required|unique:periods,start',
'end' => 'required|unique:periods,end',
'file' => 'required|mimes:pdf|max:2000',
'status' => 'required',
'quota' => 'required|numeric'
], [
'start.required' => 'Tanggal Mulai Harus Diisi!',
'end.required' => 'Tanggal Selesai Harus Diisi!',
'file.required' => 'File Pengumuman Harus Diisi!',
'file.mimes' =>'File Pengumuman Harus Berupa PDF!',
'quota.required' => 'Kuota Beasiswa Harus Diisi!',
'quota.numeric' => 'Kuota Beasiswa Harus Angka!'
]);
if($request->hasFile('file')){
$file = $request->file('file');
$extension = $file->getClientOriginalExtension();
$nama_file = 'Pengumuman Pendaftaran PPA' . ' ' . C
arbon::now()->format('Y') . '.' . $extension;
$request->file('file')->move('periode/' . $request-
>start . '_' . $request->end . '/pengumuman/', $nama_file);
$item = $nama_file; //memasukkan dalam variable
}
if(!empty($item)) {
$periods = Period::create([
'admin_id' => Auth::user()->id,
'start' => $request->start,
'end' => $request->end,
'file' => $item,
'status' => $request->status,
'quota' => $request->quota
]);
} else {
return redirect()->back()->with(['error' => 'F
ile Jawaban Terlalu Besar.']);
}
return redirect()->back()->with(['success' => 'Berhasil Menamb
ah Periode Pada ' . $periods->start]);
} catch(\Exception $e) {
return redirect()->back()->with(['error'=>$e->getMessage()]);
}
153
}
public function delete($id)
{
try {
$period = Period::findOrFail($id);
File::deleteDirectory('periode/' . $period->start
. '_' . $period->end); //melakukan delete file pada server
$period -> delete();
return redirect()->back()->with(['success' => 'Dat
a ' . $period->start . ' Berhasil Dihapus!' ]);
} catch(\Exception $e) {
return redirect()->back()->with(['error' => 'Gagal
Menghapus Data!']);
}
}
public function update(Request $request, $id)
{
$period = Period::findOrFail($id);
if($request->isMethod('post')) {
if($request->file('file') == "") {
$this->validate($request, [
'start' => 'required|unique:periods,start,'.$id,
'end' => 'required|unique:periods,end,'.$id,
], [
'start.required' => 'Tanggal Mulai Harus Diisi!',
'end.required' => 'Tanggal Selesai Harus Diisi!',
'start.unique' =>'Tanggal Mulai Harus Berbeda!',
'end.unique'=>'Tanggal Selesai Harus Berbeda!',
]);
$data = $request->all();
rename(public_path('periode/' . $period->start
. '_' . $period->end), public_path('periode/' . $request-
>start . '_' . $request->end));
Period::where(['id'=>$id])-
>update(['start'=>$data['start'], 'end'=>$data['end'], 'quota'
=>$data['quota']]); //melakukan proses update
return redirect()->back()->with(['success' =>
'Update ' . date('d', strtotime($period->start)) . ' ' . date(
'F', strtotime($period->start)) . ' ' . date('Y', strtotime($p
eriod->start)) . ' Berhasil!']);
} else {
154
$this->validate($request, [
'start' => 'required|unique:periods,start,'.$id,
'end' => 'required|unique:periods,end,'.$id,
'file' => 'mimes:pdf|max:2000',
], [
'start.required' => 'Tanggal Mulai Harus Diisi!',
'end.required' => 'Tanggal Selesai Harus Diisi!',
'start.unique' => 'Tanggal Mulai Harus Berbeda!',
'end.unique' => 'Tanggal Selesai Harus Berbeda!',
'file.mimes'=>'File Pengumuman Harus Berupa PDF!',
]);
File::delete('periode/' . $period->start . '_'
. $period->end . '/pengumuman/', $period->file);
$file = $request->file('file');
$extension = $file->getClientOriginalExtension();
$nama_file = 'Pengumuman Pendaftaran PPA' . '
' . Carbon::now()->format('Y') . '.' . $extension;
$request->file('file')->move('periode/' . $req
uest->start . '_' . $request->end . '/pengumuman/', $nama_file
);
$item = $nama_file;
$data = $request->all();
Period::where(['id'=>$id])-
>update(['start'=>$data['start'], 'end'=>$data['end'],'quota'=
>$data['quota'], 'file' => $item]);
return redirect()->back()->with(['success' =>
'Update ' . date('d', strtotime($period->start)) . ' ' . date(
'F', strtotime($period->start)) . ' ' . date('Y', strtotime($p
eriod->start)) . ' Berhasil!']);
}
}
}
public function changeStatus(Request $request, $id)
{
$period = Period::findOrFail($id);
if($request->isMethod('post')) {
$data = $request->all();
if($data['status'] == '-')
{
155
return redirect()->back()->with(['error' => 'S
tatus Harus Diisi!']);
} else {
Period::where(['id' => $id])-
>update(['status'=>$data['status']]);
return redirect()->back()->with(['success' =>
'Status Periode ' . $request->start . ' Berhasil Diganti!']);
}
}
}
}
156
namespace App\Http\Controllers\Auth;
use App\User;
use App\Mahasiswa;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Http\Request;
use Illuminate\Auth\Events\Registered;
use App\Prodi;
use Auth;
use Carbon\Carbon;
class RegisterController extends Controller
{
use RegistersUsers;
protected $redirectTo = '/user';
public function __construct()
{
$this->middleware('guest');
}
protected function validator(array $data)
{
return Validator::make($data, [
'prodi_id' => 'required|exists:prodis,id',
'npm'=>'required|min:9|max:9|unique:users,npm|
digits_between:1,10',
'email'=>'required|email|max:255|unique:users,email',
'password' => 'required|min:6|confirmed',
'name' => 'required|max:50',
'semester' => 'required',
'address' => 'required|max:100',
'gender' => 'required',
'phone' => 'required|max:12|min:11',
'religion' => 'required',
'photo' => 'mimes:jpg,jpeg,png|max:20000'
],[
'prodi_id.required' => 'Prodi Harus Dipilih !',
157
'password.min' => 'Password Minimal Harus 6 !',
'password.confirmed'=>'Password & Password Konfirm
asi Harus Sama !',
'npm.unique' => 'NPM Sudah Terdaftar !',
'npm.numeric' => 'NPM Harus Berupa Angka !',
'npm.max' => 'NPM Harus 9 !',
'npm.digits_between' => 'NPM Angka !',
'name.required' => 'Nama Harus Diisi !',
'email.required' => 'Email Harus Diisi !',
'email.unique' => 'Email Sudah Terdaftar !',
'phone.required' => 'No Hp Harus Diisi !',
'phone.max' => 'No Hp Maksimal 12 !',
'address.required' => 'Alamat Harus Diisi !',
'prodi_id.exists' => 'Prodi Harus Dipilih !',
'photo.mimes'=>'Foto Harus Berformat jpg,jpeg,png !',
]);
}
public function showRegistrationForm()
{
$prodis = Prodi::orderBy('name', 'ASC')->get();
return view('auth.register', compact('prodis'));
}
protected function create(array $data)
{
$user = User::create([
'npm' => $data['npm'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
if(isset($data['photo'])) {
(is_array($file = $data['photo']));
$extension = $file->getClientOriginalExtension();
$nama_file = 'profile' . '.' . $extension;
$data['photo']->move('profile_images/'. $data['npm
'] . '/', $nama_file);
$profile = $nama_file;
} else {
$profile = NULL;
}
Mahasiswa::create([
'user_id' => $user->id,
158
'prodi_id' => $data['prodi_id'],
'name' => $data['name'],
'semester' => $data['semester'],
'address' => $data['address'],
'gender' => $data['gender'],
'phone' => $data['phone'],
'religion' => $data['religion'],
'photo' => $profile,
]);
return ($user);
}
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request-
>all())));
return redirect($this->redirectPath());
}
}
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected $redirectTo = '/user';
public function __construct()
{
$this->middleware('guest', ['except' => 'logout']);
}
159
protected function credentials(Request $request)
{
if(is_numeric($request->get('email'))){
return ['npm'=>$request-
>get('email'),'password'=>$request->get('password')];
}
return $request->only($this->username(), 'password');
}
}
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Auth;
class AdminLoginController extends Controller
{
public function __construct()
{
$this->middleware('guest:admin');
}
public function showLoginForm()
{
return view('auth.admin-login');
}
public function login(Request $request)
{
$this->validate($request, [
'email' => 'required',
'password' => 'required|min:6'
],[
'email.required' => 'Email Harus Diisi!',
'password.required' => 'Password Harus Diisi!'
]);
$loginType = filter_var($request->email, FILTER_VALIDA
TE_EMAIL) ? 'email' : 'name';
160
$login = [
$loginType => $request->email,
'password' => $request->password
];
if(Auth::guard('admin')->attempt($login, $request-
>remember)) {
return redirect()->route('admin.dashboard');
}
return redirect()->back()->withInput($request-
>only('email'));
}
}
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Auth;
class AdminLoginController extends Controller
{
public function __construct()
{
$this->middleware('guest:admin');
}
public function showLoginForm()
{
return view('auth.admin-login');
}
public function login(Request $request)
{
$this->validate($request, [
'email' => 'required',
'password' => 'required|min:6'
],[
'email.required' => 'Email Harus Diisi!',
161
'password.required' => 'Password Harus Diisi!'
]);
$loginType = filter_var($request->email, FILTER_VALIDA
TE_EMAIL) ? 'email' : 'name';
$login = [
$loginType => $request->email,
'password' => $request->password
];
if(Auth::guard('admin')->attempt($login,$request->remember)){
return redirect()->route('admin.dashboard');
}
return redirect()->back()->withInput($request-
>only('email'));
}
}
namespace App\Http\Controllers\user;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Mahasiswa;
use App\User;
use App\Prodi;
use Auth;
use File;
use Carbon\Carbon;
use Illuminate\Support\Facades\Crypt;
class ProfileController extends Controller
{
public function index($id)
{
$id = Crypt::decrypt($id);
$mahasiswa=Mahasiswa::where('user_id',Auth::user()->id)-
>first();
$prodis = Prodi::orderBy('name', 'Asc')->get();
162
return view('user.profile.index', compact('mahasiswa', 'pr
odis'));
}
public function edit($id)
{
$id = Crypt::decrypt($id);
$mahasiswa = Mahasiswa::where('id', $id)->first();
$prodis = Prodi::orderBy('name', 'Asc')->get();
return view('user.profile.edit', compact('mahasiswa',
'prodis'));
}
public function update(Request $request, $id)
{
$id = Crypt::decrypt($id);
try {
$this->validate($request, [
'prodi_id' => 'required',
'npm' => 'required|digits:9|
unique:users,npm,' . auth()->user()->id . ',id',
'email' => 'required|email|max:255|
unique:users,email,' . auth()->user()->id . ',id',
'name' => 'required|max:50',
'semester' => 'required',
'address' => 'required|max:100',
'gender' => 'required',
'phone' => 'required|max:12|min:11',
'religion' => 'required',
'photo' => 'nullable|mimes:jpg,jpeg,png|max:20000'
],[
'prodi_id.required' => 'Prodi Harus Diisi!',
'npm.unique' => 'NPM Sudah Terdaftar!',
'npm.digits' => 'NPM Harus 9!',
'name.required' => 'Nama Harus Diisi!',
'email.required' => 'Email Harus Diisi!',
'phone.required' => 'No Hp Harus Diisi!',
'address.required' => 'Alamt Harus Diisi!',
]);
$mahasiswa = Mahasiswa::findOrFail($id);
$user=User::where('id', $mahasiswa->user_id)->first();
if($request->file('photo') == "") {
$mahasiswa->update([
163
'prodi_id' => $request->prodi_id,
'name' => $request->name,
'semester' => $request->semester,
'address' => $request->address,
'gender' => $request->gender,
'phone' => $request->phone,
'religion' => $request->religion,
]);
$user->update([
'npm' => $request->npm,
'email' => $request->email
]);
} else {
File::delete('profile_images/'. $mahasiswa-
>user->npm . '/' .$mahasiswa->photo);
$file = $request->file('photo');
$extension = $file->getClientOriginalExtension();
$nama_file = 'profile' . '.' . $extension;
$request->file('photo')-
>move('profile_images/'. $mahasiswa->user->npm . '/', $nama_fi
le);
$profile = $nama_file;
$mahasiswa->update([
'prodi_id' => $request->prodi_id,
'name' => $request->name,
'semester' => $request->semester,
'address' => $request->address,
'gender' => $request->gender,
'phone' => $request->phone,
'religion' => $request->religion,
'photo' => $profile,
]);
$user->update([
'npm' => $request->npm,
'email' => $request->email
]);
}
$id = Crypt::encrypt($id);
return redirect()->route('user.profile', $id)-
>with(['success' => 'Data Berhasil Diupdate!']);
164
} catch(\Exception $e) {
return redirect()->back()->with(['error' => $e-
>getMessage()]);
}
}
}
namespace App\Http\Controllers\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Period;
use App\Criteria;
use App\Weight;
use App\Value;
use App\User_period;
use Auth;
use Illuminate\Support\Facades\Crypt;
class PeriodController extends Controller
{
public function index()
{
$periods = Period::where('status', 1)->get();
return view('user.period.index', compact('periods'));
}
public function register($id)
{
$criterias = Criteria::orderBy('code', 'ASC')->get();
$period_id = Crypt::decrypt($id);
$period = Period::where('id', $period_id)->first();
return view('user.period.daftar', compact('criterias',
'id', 'period'));
}
public function save(Request $request, $id)
{
$id = Crypt::decrypt($id);
try {
$this->validate($request, [
165
'file.*' => 'mimes:pdf|max:2000|required'
], [
'file.required' => 'File Harus Ada !',
'file.*.mimes' => 'File Harus Berjenis JPEG atau PDF'
]);
$data = $request->all();
if($data['value']['0']['0'] <= $data['value']['0']['1']) {
$data['value']['0'] = $data['value']['0']['1'] + "0.25" ;
} else {
$data['value']['0'] = $data['value']['0']['1'];
}
foreach ($data['criteria_id'] as $item => $value)
{
$criteria = Criteria::findOrFail($data['criteria_id'][$item]);
$period = Period::findOrFail($id);
$extension = $data['file'][$item]-
>extension();
$nama_file = Auth::user()->npm. '_' .
$criteria->name. '.'. $extension;
$data['file'][$item]->move('periode/' . $perio
d->start . '_' . $period->end . '/' . Auth::user()->npm . '/',
$nama_file);
$file_upload = $nama_file; variable
$data2 = array(
'period_id' => $id,
'criteria_id' => $data['criteria_id'][$item],
'mahasiswa_id' => Auth::user()->mahasiswa->id,
'value' => $data['value'][$item],
'file' => $file_upload,
);
Value::create($data2);
}
User_period::create([
'user_id' => Auth::user()->id,
'period_id' => $id,
]);
166
return redirect()->route('user.period')-
>with(['success' => 'Berhasil Mendaftar Beasiswa!']);
} catch(\Exception $e) {
return redirect()->back()->with(['error' => $e-
>getMessage()]);
}
}
}
$nama = array();
$np = array();
foreach($mahasiswas as $row){
167
array_push($nama, $row->user->npm);
array_push($nama, $row->name);
array_push($nama, $row->prodi->name);
$coba = array_chunk($nama, 3);
foreach($coba as $cob){
$co = implode(" - ",$cob);
}
array_push($np,$co);
}
$nilai = array();
$result = array_chunk($hasil, $criterias_count);
foreach($result as $r) {
$hasil_pembobotan = array_sum($r);
array_push($nilai,$hasil_pembobotan);
}
$hasil = array_combine($np,$nilai);
return $hasil;
}
$maximum = (max($values-
>where('criteria_id', $value->criteria_id)-
>whereIn('mahasiswa_id', $mahasiswas->where('prodi_id', $prod-
>id)->pluck('id'))->pluck('value')->toArray()));
$benefit = $value->value / $maximum;
$nilai = round($benefit, 3) * $value-
>criteria->weight;
array_push($hasil,round($nilai, 3));
}
}
}
}
$nama = array();
$np = array();
foreach($mahasiswas->where('prodi_id', $prod->id) as $row)
{
array_push($nama, $row->user->npm);
array_push($nama, $row->name);
array_push($nama, $row->prodi->name);
$coba = array_chunk($nama, 3);
foreach($coba as $cob){
$co = implode(" - ",$cob);
}
array_push($np,$co);
}
$nilai = array();
$result = array_chunk($hasil, $criterias_count);
foreach($result as $r) {
$hasil_pembobotan = array_sum($r);
array_push($nilai,$hasil_pembobotan);
}
$hasil = array_combine($np,$nilai);
return $hasil;
}