Modul Web Programming III PDF
Modul Web Programming III PDF
KATA PENGANTAR
Segala puji syukur kepada Tuhan Yang Maha Esa karena berkat rahmatNya penulisan
modul Mata Kuliah Web Programming III dapat terselesaikan dengan baik. Modul ini disusun
untuk memenuhi kebutuhan mahasiswa dalam mata kuliah Web Programming III yang
disajikan dalam bentuk praktikum dan diharapkan dapat membekali mahasiswa dalam
memahami Pembuatan web dengan menggunakan Framework Codeigniter.
Modul Web Programming III merupakan kelanjutan dari modul sebelumnya yaitu
Web Programming II. Pada web Programming II materi bahasan dibatasi sampai dengan
halaman Administrator (Back-End), dan pada modul ini dilanjutkan dengan membuat
halaman pengunjung (Front-End), pengelolaan transaksi booking buku, laporan-laporan,
dan setting IP untuk membuat client-server. Diakhir perkuliahan mahasiswa diharapkan
mampu mengimplementasikannya dalam bentuk final proect yang harus dipresentasikan
sebagai syarat kelulusan mata kuliah Web Programming III. Teknik penyajiannya dilakukan
secara terpadu dan sistematis.
Penulis menyadari sepenuhnya bahwa modul ini tentu memiliki banyak kekurangan.
Untuk itu penulis dengan lapang dada menerima masukan dan kritik yang konstruktif dari
berbagai pihak demi kesempurnaannya di masa yang akan datang. Semoga modul ini dapat
bermanfaat bagi para penggunanya.
Tim Penulis
2
DAFTAR ISI
Halaman
KATA PENGANTAR............................................................................................................................................... 2
DAFTAR ISI .............................................................................................................................................................. 3
PERTEMUAN 1 Penjelasan Kontrak Kuliah, Penegasan tugas project, Persiapan aplikasi
pustaka-booking .................................................................................................................................................... 4
PERTEMUAN 2 Membuat Tampilan Katalog Buku dan Detail Buku ................................................ 8
PERTEMUAN 3 Membuat Halaman Login dan Pendaftaran Anggota .......................................... 19
PERTEMUAN 4 Membuat Halaman Transaksi booking peminjaman .......................................... 33
PERTEMUAN 5 Membuat Halaman Lihat Keranjang Peminjaman dan Selesai Booking ...... 46
PERTEMUAN 6 Membuat Halaman Pengambilan dan Pengembalian Buku .............................. 54
PERTEMUAN 7 Membuat dan Mencetak Laporan Data Buku ke Printer.................................... 70
PERTEMUAN 8 Ujian Tengah Semester (UTS) ...................................................................................... 78
PERTEMUAN 9 Membuat dan Mencetak Laporan Data Buku ke Tampilan Pdf dan Excel .. 79
PERTEMUAN 10 Membuat Laporan Peminjaman Dan Setting Akses Client-Server .............. 85
PERTEMUAN 11-15 Presentasi Project.................................................................................................... 98
PERTEMUAN 16 Ujian Akhir Semester (UAS) ....................................................................................... 99
3
PERTEMUAN 1
Penjelasan Kontrak Kuliah, Penegasan tugas project, Persiapan aplikasi pustaka-
booking
4
B. Persiapan Aplikasi Perpustakaan
1. Persiapan Database pustaka
Pastikan database dan Tabel sudah terbentuk seperti di bawah ini
a. Tabel user
b. Tabel role
c. Tabel kategori
5
d. Tabel buku
e. Tabel temp
f. Tabel booking
6
g. Tabel booking_detail
h. Tabel pinjam
i. Tabel detail_pinjam
Tugas 1
1. Dosen memeriksa pekerjaan mahasiswa di point B (database) dan C (aplikasi
perpustakaan halaman admin)
2. Mahasiswa mengerjakan materi yang ada di pertemuan 2 yaitu membuat
halaman katalog buku dan detail buku
3. Point 2 akan didemonstrasikan dan dikumpulkan di pertemuan selanjutnya
7
PERTEMUAN 2
Membuat Tampilan Katalog Buku dan Detail Buku
Hasil akhir dari pertemuan 2 ini adalah tampilan halaman katalog buku dan detail
buku seperti berikut:
8
Halaman Detail buku
<?php
9
//jika sudah login dan jika belum login
if ($this->session->userdata('email')) {
$user = $this->ModelUser->cekData(['email' => $this->session-
>userdata('email')])->row_array();
$data['user'] = $user['nama'];
$this->load->view('templates/templates-user/header', $data);
$this->load->view('buku/daftarbuku', $data);
$this->load->view('templates/templates-user/modal');
$this->load->view('templates/templates-user/footer', $data);
} else {
$data['user'] = 'Pengunjung';
$this->load->view('templates/templates-user/header', $data);
$this->load->view('buku/daftarbuku', $data);
$this->load->view('templates/templates-user/modal');
$this->load->view('templates/templates-user/footer', $data);
}
}
Pada controller Home dilakukan pemanggilan view header, daftar buku, modal, dan
footer. Oleh karena itu pastikan view-view tersebut telah dibuat sebelum memanggil
controller Home. Pada controller ini juga dilakukan pengecekkan terhadap user. Jika sudah
login, maka akan muncul nama user pada menu header, dan jika belum login maka akan
muncul kata pengunjung pada header.
<!DOCTYPE html>
<html lang="en">
<head>
<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>Pustaka-Booking | <?= $judul; ?></title>
<link rel="icon" type="image/png" href="<?= base_url('assets/img/logo/'); ?>l
ogo-pb.png">
10
<link rel="stylesheet" href="<?= base_url('assets/'); ?>user/css/bootstrap.cs
s">
<link href="<?= base_url('assets/'); ?>vendor/fontawesome-
free/css/all.min.css" rel="stylesheet" type="text/css">
<link href="<?= base_url('assets/'); ?>datatable/datatables.css" rel="stylesh
eet" type="text/css">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container">
<a class="navbar-brand" href="<?= base_url(); ?>">Pustaka</a>
<button class="navbar-toggler" type="button" data-
toggle="collapse" data-target="#navbarNavAltMarkup" aria-
controls="navbarNavAltMarkup" aria-expanded="false" aria-
label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
11
<?php } ?>
<span class="nav-item nav-link nav-
right" style="display:block; margin-
left:20px;">Selamat Datang <b><?= $user; ?></b></span>
</div>
</div>
</div>
</nav>
<div class="container mt-5">
</div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-
q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="an
onymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.m
in.js" integrity="sha384-
UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="an
onymous"></script>
</body>
</html>
12
C. Membuat View daftarbuku
Buatlah sebuah file view baru dengan nama daftarbuku.php pada folder
Application/buku. Ketikkan script berikut:
<?= $this->session->flashdata('pesan'); ?>
<div class="x_content">
<div class="caption">
<h5 style="min-height:30px;"><?= $buku-
>pengarang ?></h5>
<h5><?= $buku->penerbit ?></h5>
<h5><?= substr($buku-
>tahun_terbit, 0, 4) ?></h5>
<p>
<?php
if ($buku->stok < 1) {
echo "<i class='btn btn-outline-
primary fas fw fa-shopping-cart'> Booking   0</i>";
} else {
echo "<a class='btn btn-outline-
primary fas fw fa-shopping-
cart' href='" . base_url('booking/tambahBooking/' . $buku-
>id) . "'> Booking</a>";
}
?>
13
</div>
</div>
</div> <?php } ?>
<!-- end looping -->
</div>
</div>
</div>
</div>
14
E. Membuat Halaman Detail Buku
1. Membuat fungsi detailBuku
Pada halaman dafatar buku, terdapat link untuk melihat detail buku. Dimana link
tersebut mengarahkan ke controller halaman/detailbuku. Oleh karena itu kita harus
membuat fungsi detailBuku.php pada controller Home
Tambahkan sebuah fungsi baru dengan nama detailBuku pada controller Home
$data['user'] = "Pengunjung";
$data['title'] = "Detail Buku";
$this->load->view('templates/templates-user/header', $data);
15
$this->load->view('buku/detail-buku', $data);
$this->load->view('templates/templates-user/modal');
$this->load->view('templates/templates-user/footer');
}
<div class="x_content">
<div class="row">
<div class="col-sm-3 col-md-3">
<div class="thumbnail" style="height: auto; position: relative; left: 1
00%; width: 200%;">
<img src="<?php echo base_url(); ?>assets/img/upload/<?= $gambar; ?>"
style="max-width:100%; max-height: 100%; height: 150px; width: 120px">
<div class="caption">
<h5 style="min-height:40px;" align="center"><?= $pengarang ?></h5>
<center>
<table class="table table-stripped">
<tr>
<th nowrap>Judul Buku: </th>
<td nowrap><?= $judul; ?></td>
<td> </td>
<th>Kategori: </th>
<td><?= $kategori ?></td>
</tr>
<tr>
<th nowrap>Penerbit: </th>
<td><?= $penerbit ?></td>
<td> </td>
<th>Dipinjam: </th>
<td><?= $dipinjam ?></td>
</tr>
<tr>
<th nowrap>Tahun Terbit: </th>
<td><?= substr($tahun, 0, 4) ?></td>
<td> </td>
<th>Dibooking: </th>
16
<td><?= $dibooking ?></td>
</tr>
<tr>
<th>ISBN: </th>
<td><?= $isbn ?></td>
<td> </td>
<th>Tersedia: </th>
<td><?= $stok ?></td>
</tr>
</table>
</center>
<p>
<a class="btn btn-outline-primary fas fw fa-shopping-
cart" href="<?= base_url('booking/tambahBooking/' . $id); ?>"> Booking</a>
<span class="btn btn-outline-secondary fas fw fa-
reply" onclick="window.history.go(-1)"> Kembali</span>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
Hasil akhir
17
Tugas 2
1. Mahasiswa mengerjakan materi yang ada di pertemuan 3 yaitu membuat
halaman Login dan Pendaftaran Anggota
2. Point 1 akan didemonstrasikan dan dikumpulkan di pertemuan selanjutnya
18
PERTEMUAN 3
Membuat Halaman Login dan Pendaftaran Anggota
Secara default jika sistem belum melakukan login maka menu pada header berisi
Daftar dan Login. Sedangkan jika sudah melakukan login menu akan berubah menjadi
Booking, Profile saya dan Logout. Pada pertemuan ini akan dibahas mengenai fungsi-
fungsi tersebut. Untuk menu Booking akan dibahas dipertemuan berikutnya.
Untuk membuat halaman Login dan daftar, kita menggunakan modal. Pemanggilan
modal ada pada halaman header.php yang telah kita buat pada pertemuan ke 2
19
<span aria-hidden="true">×</span>
</button>
</div>
<form action="<?= base_url('member'); ?>" method="post">
<div class="modal-body">
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-
label">Email</label>
<div class="col-sm-10">
<input type="text" class="form-
control" id="email" name="email" placeholder="Alamat Email">
</div>
</div>
<div class="form-group row">
<label for="inputPassword" class="col-sm-2 col-form-
label">Password</label>
<div class="col-sm-10">
<input type="password" class="form-
control" id="password" name="password" placeholder="Password">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-
dismiss="modal">Close</button>
<button type="submit" class="btn btn-outline-
primary">Log in</button>
</div>
</form>
</div>
</div>
</div>
<!--/login modal -->
20
<form action="<?= base_url('member/daftar'); ?>" method="post">
<div class="modal-body">
<div class="form-group">
<input type="text" class="form-control form-control-
user" id="nama" name="nama" placeholder="Nama Lengkap">
</div>
<div class="form-group">
<input type="text" class="form-control form-control-
user" id="alamat" name="alamat" placeholder="Alamat Lengkap">
</div>
<div class="form-group">
<input type="text" class="form-control form-control-
user" id="email" name="email" placeholder="Alamat Email">
</div>
<div class="form-group">
<input type="password" class="form-control form-control-
user" id="password1" name="password1" placeholder="Password">
</div>
<div class="form-group">
<input type="password" class="form-control form-control-
user" id="password2" name="password2" placeholder="Ulangi Password">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-
dismiss="modal">Close</button>
<button type="submit" class="btn btn-outline-
primary">Simpan</button>
</div>
</form>
</div>
</div>
</div>
<!--/end of Modal Daftar -->
21
</button>
</div>
<div class="modal-body">
<span class="alert alert-message alert-
success">Waktu Pengambilan Buku 1x24 jam dari Booking!!!</span>
</div>
<div class="modal-footer">
<a class="btn btn-outline-info" href="<?= base_url(); ?>">Ok</a>
</div>
</div>
</div>
</div>
<!--/modal info -->
Untuk memanggil halaman login, sistem memanggil id loginModal dari yang ada pada
file modal.php. sedangkan untuk memanggil halaman daftar sistem memanggil id
daftarModal
22
B. Membuat Controller Member
Controller member berisi fungsi-fungsi seperti pengecekan login, pendaftaran anggota,
management profile, dan fungsi logout. Buatlah sebuah controller dengan nama
Member.php
1. Membuat fungsi cek login
Buatlah fungsi _login pada controller Member yang berisi coding untuk melakukan
pengecekan login. Sistem akan mengarahkan ke halaman home setelah proses login
dilakukan.
<?php
23
//cek password
if (password_verify($password, $user['password'])) {
$data = [
'email' => $user['email'],
'role_id' => $user['role_id'],
'id_user' => $user['id'],
'nama' => $user['nama']
];
$this->session->set_userdata($data);
redirect('home');
} else {
$this->session-
>set_flashdata('pesan', '<div class="alert alert-danger alert-
message" role="alert">Password salah!!</div>');
redirect('home');
}
} else {
$this->session->set_flashdata('pesan', '<div class="alert alert-
danger alert-message" role="alert">User belum diaktifasi!!</div>');
redirect('home');
}
} else {
$this->session->set_flashdata('pesan', '<div class="alert alert-
danger alert-message" role="alert">Email tidak terdaftar!!</div>');
redirect('home');
}
}
24
$this->form_validation-
>set_rules('email', 'Alamat Email', 'required|trim|valid_email|is_unique[user.ema
il]', [
'valid_email' => 'Email Tidak Benar!!',
'required' => 'Email Belum diisi!!',
'is_unique' => 'Email Sudah Terdaftar!'
]);
$this->form_validation-
>set_rules('password1', 'Password', 'required|trim|min_length[3]|matches[password
2]', [
'matches' => 'Password Tidak Sama!!',
'min_length' => 'Password Terlalu Pendek'
]);
$this->form_validation-
>set_rules('password2', 'Repeat Password', 'required|trim|matches[password1]');
25
$user = $this->ModelUser->cekData(['email' => $this->session-
>userdata('email')])->row_array();
$this->load->view('templates/templates-user/header', $data);
$this->load->view('member/index', $data);
$this->load->view('templates/templates-user/modal');
$this->load->view('templates/templates-user/footer', $data);
}
Pada script diatas, sistem memanggil view index yang ada di folder member. Oleh
karena itu kita akan membuat sebuah file index.php di folder
Application/views/member. Isi dari script index sebagai berikut:
<div class="row">
<div class="col-lg-6 justify-content-x">
<?= $this->session->flashdata('pesan'); ?>
</div>
</div>
26
<div class="btn btn-info ml-3 my-3">
<a href="<?= base_url('member/ubahprofil'); ?>" class="text t
ext-white"><i class="fas fa-user-edit"></i> Ubah Profil</a>
</div>
</div>
</div>
</div>
</div>
<!-- /.container-fluid -->
</div>
<!-- End of Main Content -->
27
foreach ($user as $a) {
$data = [
'image' => $user['image'],
'user' => $user['nama'],
'email' => $user['email'],
'tanggal_input' => $user['tanggal_input'],
];
}
$this->form_validation-
>set_rules('nama', 'Nama Lengkap', 'required|trim', [
'required' => 'Nama tidak Boleh Kosong'
]);
if ($this->form_validation->run() == false) {
$this->load->view('templates/templates-user/header', $data);
$this->load->view('member/ubah-anggota', $data);
$this->load->view('templates/templates-user/modal');
$this->load->view('templates/templates-user/footer', $data);
} else {
$nama = $this->input->post('nama', true);
$email = $this->input->post('email', true);
if ($upload_image) {
$config['upload_path'] = './assets/img/profile/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '3000';
$config['max_width'] = '1024';
$config['max_height'] = '1000';
$config['file_name'] = 'pro' . time();
$this->load->library('upload', $config);
if ($this->upload->do_upload('image')) {
$gambar_lama = $data['user']['image'];
if ($gambar_lama != 'default.jpg') {
unlink(FCPATH . 'assets/img/profile/' . $gambar_lama);
}
$gambar_baru = $this->upload->data('file_name');
$this->db->set('image', $gambar_baru);
28
} else {
}
}
$this->db->set('nama', $nama);
$this->db->where('email', $email);
$this->db->update('user');
Pada saat tombol ubah profil diklik, sistem akan mengarahkan ke view ubah-
anggota.php, dimana file view tersebut menampilkan data profil anggota untuk diedit.
Adapun data yang bisa diedit hanya nama anggota dan gambar. Berikut script ubah-
anggota.php yang ditulis di folder Application/views/member.
<div class="row">
<div class="col-lg-9">
<?= form_open_multipart('member/ubahprofil'); ?>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="text" class="form-
control" id="email" name="email" value="<?= $email; ?>" readonly>
</div>
</div>
<div class="form-group row">
<label for="nama" class="col-sm-2 col-form-
label">Nama Lengkap</label>
<div class="col-sm-10">
<input type="text" class="form-
control" id="nama" name="nama" value="<?= $user; ?>">
<?= form_error('nama', '<small class="text-danger pl-
3">', '</small>'); ?>
</div>
</div>
<div class="form-group row">
29
<div class="col-sm-2">Gambar</div>
<div class="col-sm-10">
<div class="row">
<div class="col-sm-3">
<img src="<?= base_url('assets/img/profile/') . $imag
e; ?>" class="img-thumbnail" alt="">
</div>
<div class="col-sm-9">
<div class="custom-file">
<input type="file" class="custom-file-
input" id="image" name="image">
<label class="custom-file-
label" for="image">Pilih file</label>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<!-- /.container-fluid -->
</div>
<!-- End of Main Content -->
30
Hasil akhir perubahan data profil.
<?php
function cek_login()
31
{
$ci = get_instance();
if (!$ci->session->userdata('email')) {
$ci->session->set_flashdata('pesan', '<div class="alert alert-
danger" role="alert">Akses ditolak. Anda belum login!! </div>');
if ($ci->session->userdata('role_id') == 1) {
redirect('autentifikasi');
} else {
redirect('home');
}
} else {
$role_id = $ci->session->userdata('role_id');
$id_user = $ci->session->userdata('id_user');
}
}
function cek_user()
{
$ci = get_instance();
$role_id = $ci->session->userdata('role_id');
if ($role_id != 1) {
$ci->session->set_flashdata('pesan', '<div class="alert alert-
danger" role="alert">Akses tidak diizinkan </div>');
redirect('home');
}
}
Tugas 3
1. Mahasiswa mengerjakan materi yang ada di pertemuan 4 yaitu membuat
halaman Transaksi Booking Peminjaman
2. Point 1 akan didemonstrasikan dan dikumpulkan di pertemuan selanjutnya
32
PERTEMUAN 4
Membuat Halaman Transaksi booking peminjaman
Pada tahap ini user melakukan klik tombol booking pada buku yang diinginkan,
kemudian data buku yang di klik tersebut akan dimasukkan ke dalam keranjang dalam hal
ini tabel temp sebagai tabel sementara yang digunakan untuk menyimpan data buku pada
saat klik tombol booking.
Setelah booking, untuk menyelesaikan transaksi booking user harus melihat tampilan
keranjang. Pada tampilan keranjang ini ada dua(2) tombol yaitu tombol lanjutkan booking
dan tombol selesai booking.
Tombol lanjutkan booking digunakan untuk bisa booking buku yang lainnya apabila
user ingin melakukan booking buku yang lain. Sedangkan tombol selesai booking digunakan
untuk menyelesaikan booking agar data booking buku ini masuk ke sistem dan di proses
oleh sistem dan bisa dilakukan peminjaman buku.
Buatlah sebuah sebuah model baru dengan nama ModelBooking.php lalu ketikkan
perintah berikut:
33
{
$this->db->where($where);
return $this->db->get($table);
}
return $this->db->get();
}
34
}
35
} else {
$kode = 1;
}
return $kodejadi;
}
}
Buatlah sebuah sebuah model baru dengan nama ModelPinjam.php lalu ketikkan
perintah berikut:
36
{
$this->db->delete($tabel, $where);
}
return $this->db->get()->result_array();
}
<?php
defined('BASEPATH') or exit('No Direct Script Access Allowed');
date_default_timezone_set('Asia/Jakarta');
37
{
parent::__construct();
cek_login();
$this->load->model(['ModelBooking', 'ModelUser']);
}
if ($dtb < 1) {
$this->session->set_flashdata('pesan', '<div class="alert alert-
massege alert-danger" role="alert">Tidak Ada Buku dikeranjang</div>');
redirect(base_url());
} else {
$data['temp'] = $this->db-
>query("select image, judul_buku, penulis, penerbit, tahun_terbit,id_buku from te
mp where id_user='$id_user'")->result_array();
}
$data['judul'] = "Data Booking";
$this->load->view('templates/templates-user/header', $data);
$this->load->view('booking/data-booking', $data);
$this->load->view('templates/templates-user/modal');
$this->load->view('templates/templates-user/footer');
}
Fungsi index pada controller Booking adalah menampilkan data booking yang telah
dilakukan oleh member.
38
$this->load->view('booking/data-booking', $data);
Jika sistem memeriksa tidak ditemukan adanya buku yang dipinjam, maka sistem
melakukan feedback berupa pesan.
if ($dtb < 1) {
$this->session->set_flashdata('pesan', '<div class="alert alert-
massege alert-danger" role="alert">Tidak Ada Buku dikeranjang</div>');
redirect(base_url());
}
39
$temp = $this->ModelBooking-
>getDataWhere('temp', ['id_buku' => $id_buku])->num_rows();
$userid = $this->session->userdata('id_user');
40
Pada fungsi tambahBooking, dilakukan pengecekkan jumlah buku yang telah dibooking.
Jika buku yang dibooking sudah 3, maka member tidak bias melakukan proses booking
kembali
if ($tempuser == 3) {
$this->session->set_flashdata('pesan', '<div class="alert alert-
danger alert-message" role="alert">Booking Buku Tidak Boleh Lebih dari 3</div>');
redirect(base_url() . 'home');
}
System akan membuat table temp jika pada database belum ditemukan table temp, lalu
menyimpan data kedalam table tersebut
$this->ModelBooking->createTemp();
$this->ModelBooking->insertData('temp', $isi);
Hasil dari fungsi tambahBooking
Saat menu booking diklik, akan menampilkan data booking seperti berikut:
Untuk membuat halaman tersebut, buatlah sebuah view baru dengan nama data-
booking.php, letakkan pada folder Application/views/booking.
Berikut script data-booking.php
<div class="container">
<center>
<table>
<tr>
41
<td>
<div class="table-responsive full-width">
<table class="table table-bordered table-striped table-
hover" id="table-datatable">
<tr>
<th>No.</th>
<th>Buku</th>
<th>Penulis</th>
<th>penerbit</th>
<th>Tahun</th>
<th>Pilihan</th>
</tr>
<?php
$no = 1;
foreach ($temp as $t) {
?>
<tr>
<td><?= $no; ?></td>
<td>
<img src="<?= base_url('assets/img/upload
/' . $t['image']); ?>" class="rounded" alt="No Picture" width="10%">
</td>
<td nowrap><?= $t['penulis']; ?></td>
<td nowrap><?= $t['penerbit']; ?></td>
<td nowrap><?= substr($t['tahun_terbit'], 0,
4); ?></td>
<td nowrap>
<a href="<?= base_url('booking/hapusbooki
ng/' . $t['id_buku']); ?>" onclick="return_konfirm('Yakin tidak Jadi Booking '.$t
['judul_buku'])"><i class="btn btn-sm btn-outline-danger fas fw fa-
trash"></i></a>
</td>
</tr>
<?php $no++;
} ?>
</table>
</div>
</td>
</tr>
<tr>
<td colspan="3">
<hr>
</td>
</tr>
<tr>
42
<td colspan="3">
<a class="btn btn-sm btn-outline-
primary" href="<?php echo base_url(); ?>"><span class="fas fw fa-
play"></span> Lanjutkan Booking Buku</a>
<a class="btn btn-sm btn-outline-
success" href="<?php echo base_url() . 'booking/bookingSelesai/' . $this-
>session->userdata('id_user'); ?>"><span class="fas fw fa-
stop"></span> Selesaikan Booking</a>
</td>
</tr>
</table>
</center>
</div>
Pada view data-booking, terdapat 2 tombol. Lanjutkan Booking Buku dan Selesaikan
Booking. Untuk tombol Lanjutkan Booking Buku, system akan mengarahkan ke controller
awal (Home.php) untuk melanjutkan booking buku
function ini akan di jalankan ketika member melakukan interaksi pada data booking
dengan mengklik tombol hapus.
43
Dalam fungsi ini terdapat script untuk menghapus data booking buku yang ada pada
tabel temp. buatlah sebuah fungsi baru pada controller Booking.php. ketikkan script berikut:
if ($kosong < 1) {
$this->session->set_flashdata('pesan', '<div class="alert alert-
massege alert-danger" role="alert">Tidak Ada Buku dikeranjang</div>');
redirect(base_url());
} else {
redirect(base_url() . 'booking');
}
}
Pada script tersebut terdapat perintah untuk menghapus data booking yang terdapat
pada tabel temp berdasarkan id buku yang dipilih. Dan menampilkan kembali data terbaru
(setelah dihapus). Jika data terbaru ternyata buku sudah tidak ada lagi (kosong) maka sistem
akan menampilkan pesan. Setelah proses hapusbooking, sistem secara otomatis
mengarahkan ke controller Booking.php
if ($kosong < 1) {
$this->session->set_flashdata('pesan', '<div class="alert alert-
massege alert-danger" role="alert">Tidak Ada Buku dikeranjang</div>');
redirect(base_url());
} else {
redirect(base_url() . 'booking');
}
Hasil setelah proses hapus booking, booking buku kembali kosong
44
Tugas 4
1. Mahasiswa mengerjakan materi yang ada di pertemuan 5 yaitu membuat
Halaman Lihat Keranjang Peminjaman dan Selesai Booking
2. Point 1 akan didemonstrasikan dan dikumpulkan di pertemuan selanjutnya
45
PERTEMUAN 5
Membuat Halaman Lihat Keranjang Peminjaman dan Selesai Booking
Agar tombol selesaikan booking bisa berjalan, maka kita akan menambahkan function
baru pada file controller Booking.php yaitu function bookingSelesai. Berikut kode program
fungsi bookingSelesai
$tglsekarang = date('Y-m-d');
$isibooking = [
'id_booking' => $this->ModelBooking-
>kodeOtomatis('booking', 'id_booking'),
'tgl_booking' => date('Y-m-d H:m:s'),
'batas_ambil' => date('Y-m-
d', strtotime('+2 days', strtotime($tglsekarang))),
'id_user' => $where
];
46
$this->ModelBooking->insertData('booking', $isibooking);
$this->ModelBooking->simpanDetail($where);
$this->ModelBooking->kosongkanData('temp');
redirect(base_url() . 'booking/info');
}
$this->db-
>query("UPDATE buku, temp SET buku.dibooking=buku.dibooking+1, buku.stok=buku.sto
k-1 WHERE buku.id=temp.id_buku");
Terdapat juga fungsi untuk melakukan proses penyimpanan pada tabel booking, detail
booking, dan penghapusan data pada tabel temp. sistem akan secara otomatis mengarahkan
ke fungsi info pada controller Booking.php
$this->ModelBooking->insertData('booking', $isibooking);
$this->ModelBooking->simpanDetail($where);
$this->ModelBooking->kosongkanData('temp');
redirect(base_url() . 'booking/info');
47
$this->load->view('templates/templates-user/header', $data);
$this->load->view('booking/info-booking', $data);
$this->load->view('templates/templates-user/modal');
$this->load->view('templates/templates-user/footer');
}
<div class="container">
<center>
<table>
<?php
foreach ($useraktif as $u) {
?>
<tr>
<td nowrap>Terima Kasih <b><?= $u->nama; ?></b>
</td>
</tr>
<tr>
<td>Buku Yang ingin Anda Pinjam Adalah Sebagai berikut:</td>
</tr>
<?php } ?>
<tr>
<td>
<div class="table-responsive">
<table class="table table-bordered table-striped table-
hover" id="table-datatable">
<tr>
<th>No.</th>
<th>Buku</th>
<th>Penulis</th>
<th>Penerbit</th>
<th>Tahun</th>
</tr>
<?php
$no = 1;
foreach ($items as $i) {
?>
<tr>
48
<td><?= $no; ?></td>
<td>
<img src="<?= base_url('assets/img/upload
/' . $i['image']); ?>" class="rounded" alt="No Picture" width="10%">
</td>
<td nowrap><?= $i['pengarang']; ?></td>
<td nowrap><?= $i['penerbit']; ?></td>
<td nowrap><?= $i['tahun_terbit']; ?></td>
</tr>
<?php $no++;
} ?>
</table>
</div>
</td>
</tr>
<tr>
<td>
<hr>
</td>
</tr>
<tr>
<td>
<a class="btn btn-sm btn-outline-
danger" onclick="information('Waktu Pengambilan Buku 1x24 jam dari Booking!!!')"
href="<?php echo base_url() . 'booking/exportToPdf/' . $this->session-
>userdata('id_user'); ?>"><span class="far fa-lg fa-fw fa-file-
pdf"></span> Pdf</a>
</td>
</tr>
</table>
</center>
</div>
Hasil dari view info-booking.php adalah sebagai berikut:
49
Dapat dilihat data booking kembali menjadi 0. Dan terdapat tombol cetak pdf sebagai
bukti booking saat pengambilan buku.
a. pertama kita download terlebih dahulu librarynya dompdf for codeigniter, untuk
download silakan klik link disini
b. selanjutnya, ekstrak library dompdf yang sudah kita download. hasil ekstrak folder
dompdf to codeigniter akan terlihat seperti pada gambar
50
c. pindahkan atau copy folder dompdf pada folder third_party ke folder
application/third_party aplikasi kita. pindahkan juga file dompdf_gen.php dari
application/libraries ke folder application/libraries aplikasi kita
2. Membuat fungsi exportToPdf
Tambahkan sebuah fungsi baru pada controller Booking.php dengan nama exportToPdf,
ketikkan script berikut:
$this->load->library('dompdf_gen');
$this->load->view('booking/bukti-pdf', $data);
$this->dompdf->set_paper($paper_size, $orientation);
//Convert to PDF
$this->dompdf->load_html($html);
$this->dompdf->render();
$this->dompdf->stream("bukti-booking-
$id_user.pdf", array('Attachment' => 0));
// nama file pdf yang di hasilkan
}
Ukuran kertas dapat diatur sesuai dengan kebutuhan, begitupun nama file pdf yang akan
dihasilkan dapat kita rubah sesuai keinginan
51
3. Membuat view bukti-pdf
View bukti-pdf berisi data hasil cetakan dari pdf, kita bisa mengatur seperti apa
tampilannya. Berikut scrip bukti-pdf.php yang dibuat pada folder Application-views-
booking
<table border=1>
<?php
foreach ($useraktif as $u) {
?>
<tr>
<th>Nama Anggota : <?= $u->nama; ?></th>
</tr>
<tr>
<th>Buku Yang dibooking:</th>
</tr>
<?php } ?>
<tr>
<td>
<div class="table-responsive">
<table border=1>
<tr>
<th>No.</th>
<th>Buku</th>
<th>Penulis</th>
<th>penerbit</th>
<th>Tahun</th>
</tr>
<?php
$no = 1;
foreach ($items as $i) {
?>
<tr>
<td><?= $no; ?></td>
<td>
<?= $i['judul_buku']; ?>
</td>
<td><?= $i['pengarang']; ?></td>
<td><?= $i['penerbit']; ?></td>
<td><?= $i['tahun_terbit']; ?></td>
</tr>
<?php $no++;
} ?>
</table>
52
</div>
</td>
</tr>
<tr>
<td>
<hr>
</td>
</tr>
<tr>
<td align="center">
<?= md5(date('d M Y H:i:s')); ?>
</td>
</tr>
</table>
Tugas 5
1. Mahasiswa mengerjakan materi yang ada di pertemuan 6 yaitu membuat
Halaman Pengambilan dan Pengembalian Buku
2. Point 1 akan didemonstrasikan dan dikumpulkan di pertemuan selanjutnya
53
PERTEMUAN 6
Membuat Halaman Pengambilan dan Pengembalian Buku
<?php
defined('BASEPATH') or exit('No direct script access allowed');
54
$id_buku = $key['id_buku'];
$batas = $key['tgl_booking'];
$tglawal = date_create($batas);
$tglskrg = date_create();
$beda = date_diff($tglawal, $tglskrg);
if ($beda->days > 2) {
$this->db-
>query("UPDATE buku SET stok=stok+1, dibooking=dibooking-1 WHERE id='$id_buku'");
}
}
if ($beda->days > 2) {
$this->db-
>query("DELETE FROM booking WHERE id_booking='$id_booking'");
$this->db-
>query("DELETE FROM booking_detail WHERE id_booking='$id_booking'");
}
}
}
$this->load->view('templates/header', $data);
$this->load->view('templates/sidebar', $data);
$this->load->view('templates/topbar', $data);
$this->load->view('admin/index', $data);
$this->load->view('templates/footer');
}
}
55
sidebar.php yang berada di folder application/views/templates/sidebar.php, silakan
tambahkan coding berikut:
56
C. Membuat Halaman Data Booking
Pada sidebar.php yang telah kita edit diatas. sebelum menampilkan halaman data
booking buku, terlebih dahulu kita buat fungsi daftar booking yang ada di controller pinjam
<li class="nav-item">
<a class="nav-link pb-
0" href="<?= base_url('pinjam/daftarBooking'); ?>">
<i class="fa fa-fw fa-list"></i>
<span>Data Booking</span></a>
Oleh karena itu diawal kita buat terlebih dahulu controller Pinjam.php dan
menambahkan fungsi daftarBooking di controller tersebut
57
}
{
$data['judul'] = "Daftar Booking";
$data['user'] = $this->ModelUser->cekData(['email' => $this->session-
>userdata('email')])->row_array();
$data['pinjam'] = $this->db->query("select*from booking")-
>result_array();
$this->load->view('templates/header', $data);
$this->load->view('templates/sidebar', $data);
$this->load->view('templates/topbar', $data);
$this->load->view('booking/daftar-booking', $data);
$this->load->view('templates/footer');
}
Pada controller Pinjam.php, model yang digunakan adalah ModelBuku, ModelUser, dan
ModelPinjam. Fungsi daftarBooking digunakan untuk mengirim data judul, user, dan data
booking buku, serta memanggil view daftar-booking yang ada pada folder booking.
Langkah berikutnya adalah kita membuat view dengan nama daftar-booking.php
didalam folder Application/views/booking. Ketikkan script berikut:
<div class="container">
<center>
<table>
<tr>
<td>
<div class="table-responsive full-width">
<table class="table table-bordered table-striped table-
hover" id="table-datatable">
<tr>
<th>No.</th>
<th>ID Booking</th>
<th>Tanggal Booking</th>
<th>ID User</th>
<th>Aksi</th>
58
<th>Denda / Buku /Hari</th>
<th>Lama Pinjam</th>
</tr>
<?php
$no = 1;
foreach ($pinjam as $p) {
?>
<tr>
<td><?= $no; ?></td>
<td><a class="btn btn-
link" href="<?= base_url('pinjam/bookingDetail/' . $p['id_booking']); ?>"><?= $p[
'id_booking']; ?></a></td>
<td><?= $p['tgl_booking']; ?></td>
<td><?= $p['id_user']; ?></td>
<form action="<?= base_url('pinjam/pinjamAct/
' . $p['id_booking']); ?>" method="post">
<td nowrap>
<button type="submit" class="btn btn-
sm btn-outline-info"><i class="fas fa-fw fa-cart-plus"></i> Pinjam</button>
</td>
<td>
<input class="form-check-
user rounded-
sm" style="width:100px" type="text" name="denda" id="denda" value="5000">
<?= form_error(); ?>
</td>
<td>
<input class="form-check-
user rounded-sm" style="width:100px" type="text" name="lama" id="lama" value="3">
<?= form_error(); ?>
</td>
</form>
</tr>
<?php $no++;
} ?>
</table>
</div>
</td>
</tr>
<tr>
<td align="center"><a href="<?= base_url('pinjam/daftarBooking');
?>" class="btn btn-link"><i class="fas fa-fw fa-refresh"></i> Refresh</a></td>
</tr>
</table>
</center>
59
</div>
Pada tampilan diatas, terlihat 3 tombol (link) yang bisa dipilih oleh admin. Yaitu tombol
Pinjam saat member ingin mengambil buku, link ID Booking untuk melihat detail buku
yang dibooking, dan Link Refresh untuk merefresh halaman daftar-booking.
Untuk link ID Booking sistem mengarahkan ke fungsi bookingDetail yang ada di
controller Pinjam.php (harus buat fungsi bookingDetail)
60
public function bookingDetail()
{
$id_booking = $this->uri->segment(3);
$data['judul'] = "Booking Detail";
$data['user'] = $this->ModelUser->cekData(['email' => $this->session-
>userdata('email')])->row_array();
$data['agt_booking'] = $this->db-
>query("select*from booking b, user u where b.id_user=u.id and b.id_booking='$id_
booking'")->result_array();
$data['detail'] = $this->db-
>query("select id_buku,judul_buku,pengarang,penerbit,tahun_terbit from booking_de
tail d, buku b where d.id_buku=b.id and d.id_booking='$id_booking'")-
>result_array();
$this->load->view('templates/header', $data);
$this->load->view('templates/sidebar', $data);
$this->load->view('templates/topbar', $data);
$this->load->view('booking/booking-detail', $data);
$this->load->view('templates/footer');
}
Script diatas, akan memanggil view booking-detail yang ada di folder booking. Oleh
karena itu kita akan membuat sebuah view baru di folder Application/views/booking
dengan nama booking-detail.php. berikut scriptnya:
<div class="container">
<center>
<table>
<?php foreach ($agt_booking as $ab) { ?>
<tr>
<td>Data Anggota</td>
<td>:</td>
<th><?= $ab['nama']; ?></th>
</tr>
<tr>
<td>ID Booking</td>
<td>:</td>
<th><?= $ab['id_booking']; ?></th>
</tr>
<?php } ?>
<tr>
<td colspan="3"> </td>
</tr>
61
<tr>
<td colspan="3">
<hr>
</td>
</tr>
<tr>
<td colspan="3">
<div class="table-responsive full-width">
<table class="table table-bordered table-striped table-
hover" id="table-datatable">
<tr>
<th>No.</th>
<th>ID Buku</th>
<th>Judul Buku</th>
<th>Pengarang</th>
<th>Penerbit</th>
<th>Tahun</th>
</tr>
<?php
$no = 1;
foreach ($detail as $d) {
?>
<tr>
<td><?= $no; ?></td>
<td><?= $d['id_buku']; ?></td>
<td><?= $d['judul_buku']; ?></td>
<td><?= $d['pengarang']; ?></td>
<td><?= $d['penerbit']; ?></td>
<td><?= $d['tahun_terbit']; ?></td>
</tr>
<?php $no++;
} ?>
</table>
</div>
</td>
</tr>
<tr>
<td align="center" colspan="3"><a href="#" onclick="window.histor
y.go(-1)" class="btn btn-outline-dark"><i class="fas fa-fw fa-
reply"></i> Kembali</a></td>
</tr>
</table>
</center>
</div>
62
Hasil dari detail booking:
$bo = $this->db-
>query("SELECT*FROM booking WHERE id_booking='$id_booking'")->row();
$tglsekarang = date('Y-m-d');
$no_pinjam = $this->ModelBooking->kodeotomatis('pinjam', 'no_pinjam');
$databooking = [
'no_pinjam' => $no_pinjam,
'id_booking' => $id_booking,
'tgl_pinjam' => $tglsekarang,
'id_user' => $bo->id_user,
'tgl_kembali' => date('Y-m-
d', strtotime('+' . $lama . ' days', strtotime($tglsekarang))),
'tgl_pengembalian' => '0000-00-00',
'status' => 'Pinjam',
'total_denda' => 0
];
63
$this->ModelPinjam->simpanPinjam($databooking);
$this->ModelPinjam->simpanDetail($id_booking, $no_pinjam);
$denda = $this->input->post('denda', TRUE);
$this->db->query("update detail_pinjam set denda='$denda'");
//update dibooking dan dipinjam pada tabel buku saat buku yang dibooking
diambil untuk dipinjam
$this->db-
>query("UPDATE buku, detail_pinjam SET buku.dipinjam=buku.dipinjam+1, buku.dibook
ing=buku.dibooking-1 WHERE buku.id=detail_pinjam.id_buku");
Pada fungsi tambahAct, tanggal kembali akan ditentukan dengan menambahkan lama
pinjam dengan tanggal yang berlaku di sistem.
$tglsekarang = date('Y-m-d');
64
$this->db-
>query("UPDATE buku, detail_pinjam SET buku.dipinjam=buku.dipinjam+1, buku.dibook
ing=buku.dibooking-1 WHERE buku.id=detail_pinjam.id_buku");
Sistem secara otomatis akan mengalihkan ke controller Pinjam.php
{
$data['judul'] = "Data Pinjam";
$data['user'] = $this->ModelUser->cekData(['email' => $this->session-
>userdata('email')])->row_array();
$data['pinjam'] = $this->ModelPinjam->joinData();
$this->load->view('templates/header', $data);
$this->load->view('templates/sidebar', $data);
$this->load->view('templates/topbar', $data);
$this->load->view('pinjam/data-pinjam', $data);
$this->load->view('templates/footer');
}
Dari script diatas, terlihat bahwa saat controller Pinjam dipanggil, maka dia akan meload
halaman view data-pinjam yang ada di folder pinjam. Termasuk mengirimkan data-data
seperti user, termasuk isian data yang akan ditampilkan. Silakan tambahkan sebuah file view
baru dengan nama data-pinjam.php didalam folder Application/views/pinjam dan
ketikkan script berikut:
<div class="container">
<center>
<table>
<tr>
<td>
<div class="table-responsive full-width">
65
<table class="table table-bordered table-striped table-
hover" id="table-datatable">
<tr>
<th>No Pinjam</th>
<th>Tanggal Pinjam</th>
<th>ID User</th>
<th>ID Buku</th>
<th>Tanggal Kembali</th>
<th>Tanggal Pengembalian</th>
<th>Terlambat</th>
<th>Denda</th>
<th>Status</th>
<th>Total Denda</th>
<th>Pilihan</th>
</tr>
<?php
66
$status = "secondary";
} ?>
<td><i class="btn btn-outline-
<?= $status; ?> btn-sm"><?= $p['status']; ?></i></td>
<?php
if ($selisih < 0) {
$total_denda = $p['denda'] * 0;
} else {
$total_denda = $p['denda'] * $selisih;
}
?>
</table>
</center>
</div>
67
Hasil dari script diatas adalah :
Didalam halaman view data-pinjam.php, terdapat sebuah link untuk merubah status
peminjaman dari pinjam menjadi kembali. Link tersebut mengarahkan ke fungsi ubahStatus
dengan meminta data id_buku dan no_pinjam yang ada di controller Pinjam.php
<td nowrap>
<?php if ($p['status'] == "Kembali") { ?>
<i class="btn btn-sm btn-outline-secondary"><i class="fas fa-fw fa-
edit"></i>Ubah Status</i>
<?php } else { ?>
<a class="btn btn-sm btn-outline-
info" href="<?= base_url('pinjam/ubahStatus/' . $p['id_buku'] . '/' . $p['no_pinj
am']); ?>"><i class="fas fa-fw fa-edit"></i>Ubah Status</a>
<?php } ?>
</td>
Karena itu langkah berikutnya kita akan buat sebuah fungsi dengan nama ubahStatus
di dalam controller Pinjam.php. adapun scriptnya adalah sebagai berikut:
$tgl = date('Y-m-d');
$status = 'Kembali';
//update status menjadi kembali pada saat buku dikembalikan
$this->db-
>query("UPDATE pinjam, detail_pinjam SET pinjam.status='$status', pinjam.tgl_peng
embalian='$tgl' WHERE detail_pinjam.id_buku='$id_buku' AND pinjam.no_pinjam='$no_
pinjam'");
68
$this->db-
>query("UPDATE buku, detail_pinjam SET buku.dipinjam=buku.dipinjam-
1, buku.stok=buku.stok+1 WHERE buku.id=detail_pinjam.id_buku");
$id_buku = $this->uri->segment(3);
$no_pinjam = $this->uri->segment(4);
$this->db-
>query("UPDATE pinjam, detail_pinjam SET pinjam.status='$status', pinjam.tgl_peng
embalian='$tgl' WHERE detail_pinjam.id_buku='$id_buku' AND pinjam.no_pinjam='$no_
pinjam'");
$this->db->query("UPDATE buku, detail_pinjam SET buku.dipinjam=buku.dipinjam-
1, buku.stok=buku.stok+1 WHERE buku.id=detail_pinjam.id_buku");
Tugas 6
1. Mahasiswa mengerjakan materi yang ada di pertemuan 7 yaitu membuat dan
Mencetak Laporan Data Buku ke Printer
2. Point 1 akan didemonstrasikan dan dikumpulkan di pertemuan selanjutnya
69
PERTEMUAN 7
Membuat dan Mencetak Laporan Data Buku ke Printer
70
B. Membuat halaman Laporan Buku
Langkah-langkah untuk membuat halaman laporan buku adalah sebagai berikut:
1. Buatlah Controller baru dengan nama Laporan.
2. Buat fungsi laporan_buku pada controller Laporan.
71
<?php
}
public function laporan_buku()
{
$data['judul'] = 'Laporan Data Buku';
$data['user'] = $this->ModelUser->cekData(['email' => $this->session-
>userdata('email')])->row_array();
$data['buku'] = $this->ModelBuku->getBuku()->result_array();
$data['kategori'] = $this->ModelBuku->getKategori()->result_array();
$this->load->view('templates/header', $data);
$this->load->view('templates/sidebar', $data);
$this->load->view('templates/topbar', $data);
$this->load->view('buku/laporan_buku', $data);
$this->load->view('templates/footer');
}
Fungsi tersebut digunakan untuk memanggil view laporan_buku yang ada didalam
folder buku, dengan mengirimkan data buku kedalamnya.
3. Setelah itu kita buat file laporan_buku.php untuk menampilkan data buku di dalam
folder application/views/buku/laporan_buku.php
<!-- Begin Page Content -->
<div class="container-fluid">
72
<a href="<?= base_url('laporan/cetak_laporan_buku'); ?>" class="btn b
tn-primary mb-3"><i class="fas fa-print"></i> Print</a>
<a href="<?= base_url('laporan/laporan_buku_pdf'); ?>" class="btn btn
-warning mb-3"><i class="far fa-file-pdf"></i> Download Pdf</a>
<a href="<?= base_url('laporan/export_excel'); ?>" class="btn btn-
success mb-3"><i class="far fa-file-excel"></i> Export ke Excel</a>
<table class="table table-hover">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Judul</th>
<th scope="col">Pengarang</th>
<th scope="col">Penerbit</th>
<th scope="col">Tahun Terbit</th>
<th scope="col">ISBN</th>
<th scope="col">Stok</th>
</tr>
</thead>
<tbody>
<?php
$a = 1;
foreach ($buku as $b) { ?>
<tr>
<th scope="row"><?= $a++; ?></th>
<td><?= $b['judul_buku']; ?></td>
<td><?= $b['pengarang']; ?></td>
<td><?= $b['penerbit']; ?></td>
<td><?= $b['tahun_terbit']; ?></td>
<td><?= $b['isbn']; ?></td>
<td><?= $b['stok']; ?></td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- /.container-fluid -->
</div>
<!-- End of Main Content -->
73
4. Hasil dari coding di atas adalah sebagai berikut:
Adapun langkah-langkah detail dalam membuat Print Laporan Data Buku adalah sebagai
berikut:
1. Tambahkan fungsi cetak_laporan_buku pada controller Laporan
74
2. Membuat file laporan_print_buku.php pada folder
application/views/buku/laporan_print_buku.php
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<style type="text/css">
.table-data{
width: 100%;
border-collapse: collapse;
}
.table-data tr th,
.table-data tr td{
border:1px solid black;
font-size: 11pt;
font-family:Verdana;
padding: 10px 10px 10px 10px;
}
h3{
font-family:Verdana;
}
</style>
75
<th>Tahun Penerbit</th>
<th>ISBN</th>
<th>Stok</th>
</tr>
</thead>
<tbody>
<?php
$no = 1;
foreach($buku as $b){
?>
<tr>
<th scope="row"><?= $no++; ?></th>
<td><?= $b['judul_buku']; ?></td>
<td><?= $b['pengarang']; ?></td>
<td><?= $b['penerbit']; ?></td>
<td><?= $b['tahun_terbit']; ?></td>
<td><?= $b['isbn']; ?></td>
<td><?= $b['stok']; ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
<script type="text/javascript">
window.print();
</script>
</body>
</html>
76
3. Hasil dari codingan tersebut adalah :
Tugas 7
1. Mahasiswa mengerjakan materi yang ada di pertemuan 9 yaitu membuat dan
Mencetak Laporan Data Buku ke Tampilan Pdf dan Excel
2. Point 1 akan didemonstrasikan dan dikumpulkan di pertemuan selanjutnya
77
PERTEMUAN 8
Ujian Tengah Semester (UTS)
78
PERTEMUAN 9
Membuat dan Mencetak Laporan Data Buku ke Tampilan Pdf dan Excel
79
Teman-teman bisa mengatur ukuran kertas, format kertas serta nama file pdf yang
akan di hasilkan nantinya
3. Buat view baru dengan nama laporan_pdf_buku
Application/views/buku/laporan_pdf_buku.php
80
4. Hasil dari codingan tersebut adalah sebagai berikut:
81
B. Mengeksport Data kedalam File Excel
Langkah-langkah untuk melakukan cetak laporan data buku pdf adalah sebagai
berikut:
1. Menambahkan fungsi export_excel pada controller Laporan
82
3. Hasil dari eksport data:
83
Tugas 8
1. Buat laporan Data anggota dalam bentuk print out (Print), bentuk Pdf, dan bentuk
excel (Untuk panduan silakan sihat kembali materi pembuatan laporan data
anggota pada pertemuan 7 dan 9)
2. Mahasiswa mengerjakan materi yang ada di pertemuan 10 yaitu membuat laporan
peminjaman dan setting Akses Client-Server
3. Point 1 dan 2 akan didemonstrasikan dan dikumpulkan di pertemuan selanjutnya
84
PERTEMUAN 10
Membuat Laporan Peminjaman Dan Setting Akses Client-Server
85
Oleh karena itu kita akan membuat fungsi baru lagi di controller Laporan.php. yaitu
fungsi laporan_pinjam().
Application/controllers/Laporan.php
public function laporan_pinjam()
{
$data['judul'] = 'Laporan Data Peminjaman';
$data['user'] = $this->ModelUser->cekData(['email' => $this->session-
>userdata('email')])->row_array();
$data['laporan'] = $this->db-
>query("select * from pinjam p,detail_pinjam d,
buku b,user u where d.id_buku=b.id and p.id_user=u.id
and p.no_pinjam=d.no_pinjam")->result_array();
$this->load->view('templates/header', $data);
$this->load->view('templates/sidebar');
$this->load->view('templates/topbar', $data);
$this->load->view('pinjam/laporan-pinjam', $data);
$this->load->view('templates/footer');
}
Pada script diatas, data laporan tidak hanya memanggil data pada tabel pinjam saja,
tetapi juga melibatkan tabel detail pinjam, user, dan buku.
$data['laporan'] = $this->db->query("select * from pinjam p,detail_pinjam d,
buku b,user u where d.id_buku=b.id and p.id_user=u.id
and p.no_pinjam=d.no_pinjam")->result_array();
berdasarkan script diatas, kita akan membuat sebuah view baru dalam folder pinjam.
Dengan nama laporan-pinjam.php
Application/views/pinjam/laporan-pinjam.php
<!-- Begin Page Content -->
<div class="container-fluid">
86
<?= $this->session->flashdata('pesan'); ?>
<a href="<?= base_url('laporan/cetak_laporan_pinjam'); ?>" class="btn
btn-primary mb-3"><i class="fas fa-print"></i> </a>
<a href="<?= base_url('laporan/laporan_pinjam_pdf'); ?>" class="btn b
tn-warning mb-3"><i class="far fa-file-pdf"></i> </a>
<a href="<?= base_url('laporan/export_excel_pinjam'); ?>" class="btn
btn-success mb-3"><i class="far fa-file-excel"></i> </a>
<table class="table table-hover">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Nama Anggota</th>
<th scope="col">Judul Buku</th>
<th scope="col">Tanggal Pinjam</th>
<th scope="col">Tanggal Kembali </th>
<th scope="col">Tanggal Dikembalikan</th>
<th scope="col">Total Denda</th>
<th scope="col">Status</th>
</tr>
</thead>
<tbody>
<?php
$a = 1;
foreach ($laporan as $l) { ?>
<tr>
<th scope="row"><?= $a++; ?></th>
<td><?= $l['nama']; ?></td>
<td><?= $l['judul_buku']; ?></td>
<td><?= $l['tgl_pinjam']; ?></td>
<td><?= $l['tgl_kembali']; ?></td>
<td><?= $l['tgl_pengembalian']; ?></td>
<td><?= $l['total_denda']; ?></td>
<td><?= $l['status']; ?></td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- /.container-fluid -->
</div>
<!-- End of Main Content -->
87
Tetap ada 3 aksi yang bisa kita pilih untuk laporan pinjam, yaitu print, cetak pdf, dan
eksport ke excel
<a href="<?= base_url('laporan/cetak_laporan_pinjam'); ?>" class="btn btn-
primary mb-3"><i class="fas fa-print"></i> </a>
<a href="<?= base_url('laporan/laporan_pinjam_pdf'); ?>" class="btn b
tn-warning mb-3"><i class="far fa-file-pdf"></i> </a>
<a href="<?= base_url('laporan/export_excel_pinjam'); ?>" class="btn
btn-success mb-3"><i class="far fa-file-excel"></i> </a>
Data yang dikirim adalah kombinasi antara tabel pinjam, detail pinjam, user, dan buku.
<td><?= $l['nama']; ?></td>
<td><?= $l['judul_buku']; ?></td>
<td><?= $l['tgl_pinjam']; ?></td>
<td><?= $l['tgl_kembali']; ?></td>
<td><?= $l['tgl_pengembalian']; ?></td>
<td><?= $l['total_denda']; ?></td>
<td><?= $l['status']; ?></td>
88
<a href="<?= base_url('laporan/export_excel_pinjam'); ?>" class="btn
btn-success mb-3"><i class="far fa-file-excel"></i> </a>
Oleh karena itu kita harus menambahkan sebuah fungsi baru pada controller
Laporan.php dengan nama cetak_laporan_pinjam().
public function cetak_laporan_pinjam()
{
$data['laporan'] = $this->db-
>query("select * from pinjam p,detail_pinjam d,
buku b,user u where d.id_buku=b.id and p.id_user=u.id
and p.no_pinjam=d.no_pinjam")->result_array();
$this->load->view('pinjam/laporan-print-pinjam', $data);
}
Fungsi diatas digunakan untuk memanggil data dan mengirimkannya ke view laporan-
print-pinjam yang ada di folder pinjam.
Langkah berikutnya kita akan membuat sebuah view dengan nama laporan-print-
pinjam.php di dalam folder pinjam
Application/views/pinjam/laporan-print-pinjam.php
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<style type="text/css">
.table-data{
width: 100%;
border-collapse: collapse;
}
.table-data tr th,
.table-data tr td{
border:1px solid black;
font-size: 11pt;
font-family:Verdana;
padding: 10px 10px 10px 10px;
}
.table-data th{
background-color:grey;
}
h3{
89
font-family:Verdana;
}
</style>
</body>
</html>
90
Hasil akhir dari script diatas adalah :
$data['laporan'] = $this->db-
>query("select * from pinjam p,detail_pinjam d,
buku b,user u where d.id_buku=b.id and p.id_user=u.id
and p.no_pinjam=d.no_pinjam")->result_array();
91
$this->load->view('pinjam/laporan-pdf-pinjam', $data);
$this->dompdf->set_paper($paper_size, $orientation);
//Convert to PDF
$this->dompdf->load_html($html);
$this->dompdf->render();
$this->dompdf-
>stream("laporan data peminjaman.pdf", array('Attachment' => 0));
// nama file pdf yang di hasilkan
}
}
Fungsi laporan_pinjam_pdf() berisi script untuk mengatur tampilan file pdf (orientation,
size, name, dll) sedangkan isi dari file pdf sistem akan memanggil view laporan-pdf-
pinjam.php yang ada di folder pinjam.
Jadi langkah berikutnya adalah membuat view laporan-pdf-pinjam.php untuk
menampilkan data dari laporan.
Application/views/pinjam/laporan-pdf-pinjam.php
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<style type="text/css">
.table-data{
width: 100%;
border-collapse: collapse;
}
.table-data tr th,
.table-data tr td{
border:1px solid black;
font-size: 11pt;
font-family:Verdana;
padding: 10px 10px 10px 10px;
}
.table-data th{
92
background-color:grey;
}
h3{
font-family:Verdana;
}
</style>
</body>
</html>
93
Hasil dari file pdf yang telah didownload:
Untuk proses export data menjadi excel fungsi yang digunakan adalah
export_excel_pinjam yang masih berada di controller Laporan.php
Berikut script fungsi export_excel_pinjam()
94
Application/views/pinjam/export-excel-pinjam.php
<?php
header("Content-type: application/vnd-ms-excel");
header("Content-Disposition: attachment; filename=$title.xls");
header("Pragma: no-cache");
header("Expires: 0");
?>
<style type="text/css">
.table-data{
width: 100%;
border-collapse: collapse;
}
.table-data tr th,
.table-data tr td{
border:1px solid black;
font-size: 11pt;
font-family:Verdana;
padding: 10px 10px 10px 10px;
}
.table-data th{
background-color:grey;
}
h3{
font-family:Verdana;
}
</style>
<thead>
<tr>
<th>No</th>
<th>Nama Anggota</th>
<th>Judul Buku</th>
<th>Tanggal Pinjam</th>
<th>Tanggal Kembali</th>
<th>Tanggal Pengembalian</th>
<th>Total Denda</th>
<th>Status</th>
</tr>
</thead>
95
<tbody>
<?php
$no = 1;
foreach($laporan as $l){
?>
<tr>
<td scope="row"><?= $no++; ?></td>
<td><?= $l['nama']; ?></td>
<td><?= $l['judul_buku']; ?></td>
<td><?= $l['tgl_pinjam']; ?></td>
<td><?= $l['tgl_kembali']; ?></td>
<td><?= $l['tgl_pengembalian']; ?></td>
<td><?= $l['total_denda']; ?></td>
<td><?= $l['status']; ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
Hasil akhir dari file yang telah diubah kedalam bentuk excel adalah :
96
$root=(isset($_SERVER['HTTPS']) ? "https://" : "http://").$_SERVER['HTTP_HOST'];
$root.= str_replace(basename($_SERVER['SCRIPT_NAME']), '',
$_SERVER['SCRIPT_NAME']);
$config['base_url'] = $root;
3. Pastikan laptop/computer dan handpone berada dalam satu jaringan yang sama (contoh
menggunakan hotspot BSI)
4. Cek IP yang ada pada Komputer (server). Contoh IP yang ada di kompuetr server adalah
172.16.5.48
5. Akses web menggunakan browser pada handphone (client), dengan mengetikkan
172.16.5.48/nama_project
Contoh : 172.16.5.48/pustaka-booking/autentifikasi
6. Hasil yang didapat adalah sebagai berikut:
97
PERTEMUAN 11-15
Presentasi Project
Pada pertemuan ini, mahasiswa melakukan presentasi kelompok, sesuai dengan jadwal yang
telah ditentukan oleh dosen pengajar
98
PERTEMUAN 16
Ujian Akhir Semester (UAS)
99