Daftar Pustaka Coderseye. 2017. Coderseye. 12 January. Diakses April 20, 2017. http://www.coderseye.com. Darmawan, Deni, dan Nur Kunkun Fauzi. 2013. Sistem Informasi Manajemen. Bandung: PT Remaja Rosdakarya. Fakhroutdinov, Kirill. 2014. uml-diagram.org. 8 Agustus. Diakses Juni 19, 2017. http://www.uml-diagram.org. Fathansyah. 2012. Basis Data. Bandung: Informatika. Indrajani. 2015. Database Design. Jakarta: Elex Media Komputindo. Otwell, Taylor. 2016. Laravel Documentation. 15 Agustus. Diakses April 22, 2017. https://laravel.com/docs/5.4. Rosa, A S, dan M Shalahudin. 2013. Rekayasa Perangkat Lunak Terstruktur dan Berorientasi Objek. Bandung: Informatika Bandung. Sommerville, Ian. 2011. Software Engineering (Rekayasa Perangkat Lunak). Jakarta: Erlangga. Sutabri, Tata. 2012. Konsep Dasar Informasi. Yogyakarta: Andi. Yakub. 2012. Pengantar Sistem Informasi. Yogyakarta: Graha Ilmu. A
~LAMPIRAN~
Lampiran 1. File Migration 2017_04_01_154314_departemen.php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class Departemen extends Migration { public function up() { Schema::create('departemen', function (Blueprint $table) { $table->increments('id'); $table->string('nama', 50); $table->string('lokasi', 30); ); public function down() { Schema::dropIfExists('departemen'); Lampiran 2. File Migration 2017_04_02_150619_pegawai.php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class Pegawai extends Migration { public function up() { Schema::create('pegawai', function (Blueprint $table) { $table->increments('id'); $table->integer('departemen_id')->unsigned(); $table->string('nip', 18)->unique(); $table->string('jabatan', 30)->nullable(); $table->string('status', 10); $table->date('mulai_kerja'); $table->timestamps(); ); Schema::table('pegawai', function (Blueprint $table) { $table->foreign('departemen_id')->references('id')- >on('departemen'); ); public function down() { Schema::dropIfExists('pegawai'); Lampiran 3. File Migration 2017_04_02_153223_biodata.php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class Biodata extends Migration { public function up() { Schema::create('biodata', function (Blueprint $table) { $table->increments('id'); $table->integer('pegawai_id')->unsigned(); $table->string('nama', 50); 1
$table->char('jenis_kelamin', 1); $table->string('agama', 11); $table->string('tempat_lahir', 30); $table->date('tanggal_lahir'); $table->string('telepon', 25)->unique(); $table->string('email', 100)->unique(); ); Schema::table('biodata', function (Blueprint $table) { $table->foreign('pegawai_id')->references('id')- >on('pegawai')->ondelete('cascade'); ); public function down() { Schema::dropIfExists('biodata'); Lampiran 4. File Migration 2017_04_02_153832_alamat.php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class Alamat extends Migration { public function up() { Schema::create('alamat', function (Blueprint $table) { $table->increments('id'); $table->integer('pegawai_id')->unsigned(); $table->string('jalan', 100); $table->string('kecamatan', 50); $table->string('kota', 50); $table->string('provinsi', 50); $table->char('file_pos', 5)->nullable(); ); Schema::table('alamat', function (Blueprint $table) { $table->foreign('pegawai_id')->references('id')- >on('pegawai')->ondelete('cascade'); ); public function down() { Schema::dropIfExists('alamat'); Lampiran 5. File Migration 2017_04_03_154505_absensi.php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class Absensi extends Migration { public function up() { Schema::create('absensi', function (Blueprint $table) { $table->increments('id'); $table->integer('pegawai_id')->unsigned(); $table->date('tanggal')->nullable(); $table->time('masuk')->nullable(); $table->time('keluar')->nullable(); $table->string('status', 2)->nullable(); 2
$table->string('keterangan', 50)->nullable(); ); Schema::table('absensi', function (Blueprint $table) { $table->foreign('pegawai_id')->references('id')- >on('pegawai'); ); public function down() { Schema::dropIfExists('absensi'); Lampiran 6. File Migration 2017_05_27_145156_akun.php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class Akun extends Migration { public function up() { Schema::create('akun', function (Blueprint $table) { $table->increments('id'); $table->integer('pegawai_id')->unsigned(); $table->string('username', 50); $table->string('remember_token', 100); $table->string('password', 100); $table->string('role', 10); $table->timestamps(); ); Schema::table('akun', function (Blueprint $table) { $table->foreign('pegawai_id')->references('id')- >on('pegawai')->ondelete('cascade'); ); public function down() { Schema::dropIfExists('akun'); Lampiran 7. File Route web.php Auth::routes(); Route::get('home', 'HomeController@index'); Route::get('/', 'PegawaiController@index'); Route::get('admin', 'AdminController@index'); Route::get('riwayat', 'PegawaiController@showRiwayatAbsensi'); Route::post('absensi', 'PegawaiController@applyAbsensi'); Route::resource('master/absensi','Master\DataAbsensiController') ; Route::get('laporan/absensi','LaporanAbsensiController@index')- >name('laporan.absensi'); Route::get('laporan/absensi/bulanan', 'LaporanAbsensiController@laporanAbsensiBulanan'); Route::get('laporan/absensi/{id','LaporanAbsensiController@show '); Route::get('laporan/absensi/{id/pegawai', 'LaporanAbsensiController@laporanAbsensiPegawai'); 3
Lampiran 8. File Controller LoginController.php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; use Illuminate\Foundation\Auth\AuthenticatesUsers; class LoginController extends Controller { use AuthenticatesUsers; protected $redirectto = '/home'; public function construct() { $this->middleware('guest', ['except' => 'logout']); public function username() { return 'username'; protected function guard() { return Auth::guard(); Lampiran 9. File Controller HomeController namespace App\Http\Controllers; use Illuminate\Http\Request; use Auth; class HomeController extends Controller { public function index() { if (Auth::user()->role == 'pegawai') { return redirect('/'); else return redirect('admin'); Lampiran 10. File Controller PegawaiController.php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Models\Absensi; use Auth; use Session; class PegawaiController extends Controller { public function construct() { $this->middleware('auth'); public function index() { if (Auth::user()->role == 'pegawai') { $pegawai = Auth::user()->pegawai; // ambil absensi bulan ini $absensi = $pegawai->absensi()- >wheremonth('tanggal', date('m'))->get(); // hitung jumlah hadir, izin, sakit, telat, dan alfa pegawai $hadir = count($absensi->where('status', 'H')); $izin = count($absensi->where('status', 'I')); $sakit = count($absensi->where('status', 'S')); 4
$telat = count($absensi->where('status', 'T')); $alfa = count($absensi->where('status', 'A')); // simpan dalam array $status = array( 'hadir' => $hadir, 'izin' => $izin, 'sakit' => $sakit, 'telat' => $telat, 'alfa' => $alfa ); $absentoday = $pegawai->absensi()->where('tanggal', date('y-m-d'))->first(); // cek apakah user memiliki absensi hari ini if (is_null($absentoday)) { // absen kosong session()->put('btnin', 'enabled'); session()->put('btnout', 'disabled'); elseif ($absentoday->masuk!= null && $absentoday- >keluar == null) { session()->put('btnin', 'disabled'); session()->put('btnout', 'enabled'); else { // ada session()->put('btnin', 'disabled'); session()->put('btnout', 'disabled'); // return halaman absensi return view('pegawai.absensi', compact('absensi', 'status')); else { public function showriwayatabsensi() { if (Auth::user()->role == 'pegawai') { $pegawai = Auth::user()->pegawai; // ambil absensi bulan ini $absensi = $pegawai->absensi()- >wheremonth('tanggal', date('m'))->get(); // hitung jumlah hadir, izin, sakit, telat, dan alfa pegawai $hadir = count($absensi->where('status', 'H')); $izin = count($absensi->where('status', 'I')); $sakit = count($absensi->where('status', 'S')); $telat = count($absensi->where('status', 'T')); $alfa = count($absensi->where('status', 'A')); // simpan dalam array $status = array( 'hadir' => $hadir, 'izin' => $izin, 'sakit' => $sakit, 'telat' => $telat, 'alfa' => $alfa ); return view('pegawai.riwayat', compact('absensi', 'status')); else { public function applyabsensi(request $request) { 5
if (Auth::user()->role == 'pegawai') { $pegawai = Auth::user()->pegawai; $pukulmasuk = date('08:00'); $pukultelat = date('08:30'); $batasmasuk = date('10:00'); // proses absen masuk if (isset($request->btnin)) { // jika pegawai datang terlambat if (date('h:i') > $pukultelat) { // hitung jumlah waktu terlambat $jam = date('h') - 8; $menit = date('i') - 30; str_replace('-', '', $menit); $absensi = new Absensi; $absensi->pegawai_id = $pegawai->id; $absensi->tanggal = date('y-m-d'); $absensi->masuk = date('h:i:s'); $absensi->keluar = null; $absensi->status = 'T'; $absensi->keterangan = 'Terlambat '. $jam. ' jam '. $menit. ' menit'; $absensi->save(); else { // simpan absen normal normal $absensi = new Absensi; $absensi->pegawai_id = $pegawai->id; $absensi->tanggal = date('y-m-d'); $absensi->masuk = date('h:i:s'); $absensi->keluar = null; $absensi->status = 'H'; $absensi->keterangan = ''; $absensi->save(); $request->session()->flash('sukses', 'sukses'); Session::put('btnIn', 'disabled'); // disable button absen masuk // proses absen keluar elseif (isset($request->btnout)) { // absensi keluar hanya dapat dilakukan jika pegawai telah mengisi absen masuk if (!is_null($pegawai->absensi()- >where('tanggal', date('y-m-d'))->first())) { // update data absensi pegawai hari ini $pegawai->absensi()->where('tanggal', date('y-m-d'))->update([ 'keluar' => date('h:i:s'), ]); Session::put('btnOut', 'disabled'); // disable button absen keluar else { 6
Lampiran 11. File Controller AdminController.php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Pegawai; use App\Models\Departemen; use App\Models\Absensi; class AdminController extends Controller { public function index() { $departemen = Departemen::all(); $pegawaibaru = Pegawai::whereYear('mulai_kerja', date('2017'))->get(); $absensihariini = Absensi::where('tanggal', date('y-md'))->get(); return view('admin.home', compact('departemen', 'pegawaibaru', 'absensihariini')); Lampiran 12. File Controller LaporanAbsensiController.php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Models\Pegawai; use App\Models\Absensi; use PDF; use Auth; class LaporanAbsensiController extends Controller { public function construct() { $this->middleware('auth'); public function index() { $bulan = date('m'); $absensigroup = Absensi::whereMonth('tanggal', $bulan)->get()->groupby('pegawai_id'); $laporan = []; foreach ($absensigroup as $absensi) { $hadir = 0; $izin = 0; $sakit = 0; $telat = 0; $alfa = 0; // hitung jumlah status kehadiran foreach ($absensi as $a) { if ($a->status == 'H') { $hadir++; elseif ($a->status == 'I') { $izin++; elseif ($a->status == 'S') { $izin++; elseif ($a->status == 'T') { $telat++; elseif ($a->status == 'A') { $alfa++; 7
$pegawai = $a->pegawai; // simpan dalam array $status = array( 'pegawai' => $pegawai, 'hadir' => $hadir, 'izin' => $izin, 'sakit' => $sakit, 'telat' => $telat, 'alfa' => $alfa ); array_push($laporan, $status); return view('laporan.absensi.index', compact('laporan', 'bulan')); else { public function show($id) { $pegawai = Pegawai::find($id); $absensi = $pegawai->absensi()- >wheremonth('tanggal', date('m'))->get(); // hitung jumlah hadir, izin, sakit, telat, dan alfa pegawai $hadir = count($absensi->where('status', 'H')); $izin = count($absensi->where('status', 'I')); $sakit = count($absensi->where('status', 'S')); $telat = count($absensi->where('status', 'T')); $alfa = count($absensi->where('status', 'A')); // simpan dalam array $status = array( 'hadir' => $hadir, 'izin' => $izin, 'sakit' => $sakit, 'telat' => $telat, 'alfa' => $alfa ); return view('laporan.absensi.show', compact('pegawai', 'absensi', 'status')); else { public function laporanabsensibulanan() { $absensigroup = Absensi::whereMonth('tanggal', date('m'))->get()->groupby('pegawai_id'); $laporan = []; foreach ($absensigroup as $absensi) { $hadir = 0; $izin = 0; $sakit = 0; $telat = 0; $alfa = 0; // hitung jumlah status kehadiran foreach ($absensi as $a) { if ($a->status == 'H') { 8
$hadir++; elseif ($a->status == 'I') { $izin++; elseif ($a->status == 'S') { $izin++; elseif ($a->status == 'T') { $telat++; elseif ($a->status == 'A') { $alfa++; $pegawai = $a->pegawai; // simpan dalam array $status = array( 'pegawai' => $pegawai, 'hadir' => $hadir, 'izin' => $izin, 'sakit' => $sakit, 'telat' => $telat, 'alfa' => $alfa ); array_push($laporan, $status); $pdf = PDF::loadView('laporan.absensi.bulanan', compact('laporan')); return $pdf->download('laporan-bulanan.pdf'); else { public function laporanabsensipegawai($id) { $pegawai = Pegawai::find($id); $absensi = $pegawai->absensi()- >wheremonth('tanggal', date('m'))->get(); // hitung jumlah hadir, izin, sakit, telat, dan alfa pegawai $hadir = count($absensi->where('status', 'H')); $izin = count($absensi->where('status', 'I')); $sakit = count($absensi->where('status', 'S')); $telat = count($absensi->where('status', 'T')); $alfa = count($absensi->where('status', 'A')); // simpan dalam array $status = array( 'hadir' => $hadir, 'izin' => $izin, 'sakit' => $sakit, 'telat' => $telat, 'alfa' => $alfa ); $pdf = PDF::loadView('laporan.absensi.pegawai', compact('pegawai', 'absensi', 'status')); return $pdf->download('absensi-pegawai.pdf'); else { 9
Lampiran 13. File Controller DataAbsensiController.php namespace App\Http\Controllers\Master; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Models\Absensi; use App\Models\Pegawai; use App\Models\Departemen; use Auth; class DataAbsensiController extends Controller { public function construct() { $this->middleware('auth'); public function index(request $request) { if ($request->tanggal == '') { $tanggal = date('y-m-d'); else { $tanggal = $request->tanggal; $absensi = Absensi::where('tanggal', $tanggal)- >get(); $hadir = count($absensi->where('status', 'H')); $izin = count($absensi->where('status', 'I')); $sakit = count($absensi->where('status', 'S')); $telat = count($absensi->where('status', 'T')); $alfa = count($absensi->where('status', 'A')); // simpan dalam array $status = array( 'hadir' => $hadir, 'izin' => $izin, 'sakit' => $sakit, 'telat' => $telat, 'alfa' => $alfa ); return view('master.absensi.index', compact('absensi', 'status', 'tanggal')); else { public function create() { return view('master.absensi.create'); else { public function store(request $request) { $this->validate($request, [ 'nip' => 'required exists:pegawai,nip', 'tanggal' => 'required date', 'status' => 'required', 'keterangan' => 'nullable min:5 max:100', ]); 10
// periksa apakah status hadir if ($request->status == 'H') { // validasi jam masuk dan jam keluar $this->validate($request, [ 'masuk' => 'required', 'keluar' => 'required', ]); $pegawai = Pegawai::where('nip', $request->nip)- >first(); // periksa apakah sudah ada absensi if (!is_null($pegawai->absensi()->where('tanggal', $request->tanggal)->first())) { session()->flash('terdapat_absensi', 'Sudah ada absensi'); return redirect('master/absensi'); $absensi = new Absensi; $absensi->pegawai_id = $pegawai->id; $absensi->tanggal = $request->tanggal; $absensi->masuk = $request->masuk; $absensi->keluar = $request->keluar; $absensi->status = $request->status; $absensi->keterangan = $request->keterangan; $absensi->save(); session()->flash('tersimpan', 'tersimpan'); return redirect('master/absensi'); else { public function edit($id) { $absensi = Absensi::find($id); return view('master.absensi.edit', compact('absensi')); else { public function update(request $request, $id) { $this->validate($request, [ 'status' => 'required', ]); // periksa apakah status hadir if ($request->status == 'H') { // validasi jam masuk dan jam keluar $this->validate($request, [ 'masuk' => 'required', 'keluar' => 'required', ]); else { $this->validate($request, [ 'keterangan' => 'required', ]); $request->masuk = null; $request->keluar = null; 11
$absensi = Absensi::find($id); $absensi->masuk = $request->masuk; $absensi->keluar = $request->keluar; $absensi->status = $request->status; $absensi->keterangan = $request->keterangan; $absensi->save(); session()->flash('terubah', 'terubah'); return redirect('master/absensi'); else { public function destroy(request $request, $id) { Absensi::find($id)->delete(); session()->flash('terhapus', 'terhapus'); return redirect('master/absensi'); else { 12