Modul Web Programming III
Modul Web Programming III
Modul Web Programming III
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 Penyusun
Unit Pengembangan Akademik
Program Studi Sistem Informasi
2
DAFTAR ISI
Halaman
KATA PENGANTAR............................................................................................................................................... 2
DAFTAR ISI .............................................................................................................................................................. 3
MINGGU KE 1 Penjelasan Kontrak Kuliah, Penegasan tugas project, Persiapan aplikasi
pustaka-booking .................................................................................................................................................... 4
MINGGU KE 2 Membuat Tampilan Katalog Buku dan Detail Buku .................................................. 8
MINGGU KE 3 Membuat Halaman Login dan Pendaftaran Anggota ............................................. 19
MINGGU KE 4 Membuat Halaman Transaksi booking peminjaman ............................................. 35
MINGGU KE 5 Membuat Halaman Lihat Keranjang Peminjaman dan Selesai Booking ......... 49
MINGGU KE 6 Membuat Halaman Pengambilan dan Pengembalian Buku ................................ 58
MINGGU KE 7 Membuat dan Mencetak Laporan Data Buku ke Printer ...................................... 75
MINGGU KE 9 Membuat dan Mencetak Laporan Data Buku ke Tampilan Pdf dan Excel ..... 83
MINGGU KE 10 Membuat Laporan Peminjaman Dan Setting Akses Client-Server ................. 89
MINGGU KE 11-15 Presentasi Project .................................................................................................... 103
3
MINGGU KE 1
Penjelasan Kontrak Kuliah, Penegasan tugas project, Persiapan aplikasi pustaka-
booking
Deskripsi:
Membahas persiapan dasar untuk memulai sebuah projek aplikasi berbasis web, dalam hal ini
kasus yang di angkat adalah perpustakaan, dan dapat memahami desain dan modifikasi
database.
Tujuan Pembelajaran:
Setelah melakukan bagian ini mahasiswa mampu:
1. Memahami projek yang harus mereka buat dan presentasikan
2. Merancang, membuat, dan memodifikasi database
3. Melakukan Koneksi database
4
b. Setelah pertemuan ke 11, masing-masing kelompok wajib demo program yang telah
dikerjakan (Presentasi)
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 dikumpulkan dan dinilai oleh Dosen
7
MINGGU KE 2
Membuat Tampilan Katalog Buku dan Detail Buku
Deskripsi:
Membahas bagaimana cara membuat tampilan katalog buku dan halaman detail buku.
Halaman katalog buku digunakan untuk menampilkan keseluruhan data buku yang ada di
database.
Tujuan Pembelajaran:
Setelah melakukan bagian ini mahasiswa mampu:
1. Membuat halaman katalog buku
2. Membuat halaman detail buku
3. Membuat halaman controller member
Hasil akhir dari pertemuan 2 ini adalah tampilan halaman katalog buku dan detail
buku seperti berikut:
8
Halaman Detail buku
<?php
9
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/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/footer', $data);
}
}
Pada controller Home dilakukan pemanggilan view header, daftarbuku, 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">
<link rel="stylesheet" href="<?= base_url('assets/'); ?>user/css/bootstrap.cs
s">
10
<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>
<?php } ?>
<span class="nav-item nav-link nav-
right" style="display:block; margin-
left:20px;">Selamat Datang <b><?= $user; ?></b></span>
</div>
11
</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
<?= $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>
Hasil akhir:
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";
15
Buka kembali ModelUser.php yang pernah dibuat, kemudian edit pada bagian fungsi
JoinKategoriBuku(), dengan skrip sebagai berikut:
<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>
16
</tr>
<tr>
<th nowrap>Tahun Terbit: </th>
<td><?= substr($tahun, 0, 4) ?></td>
<td> </td>
<th>Dibooking: </th>
<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>
17
Hasil akhir
Tugas 2
1. Mahasiswa mengerjakan materi yang ada di pertemuan 3 yaitu membuat
halaman Login dan Pendaftaran Anggota
2. Point 1 dikumpulkan dan dinilai oleh Dosen
18
MINGGU KE 3
Membuat Halaman Login dan Pendaftaran Anggota
Deskripsi:
Membahas bagaimana cara membuat halaman daftar dan login anggota serta memodifikasi
profile anggota. Untuk halaman daftar dan login menggunakan modal.
Tujuan Pembelajaran:
Setelah melakukan bagian ini mahasiswa mampu:
1. Membuat halaman daftar anggota dengan modal
2. Membuat halaman login anggota dengan modal
3. Memodifikasi data anggota
Hasil dari pertemuan 3 ini adalah halaman Login dan daftar anggota, serta halaman
profile anggota seperti berikut ini:
19
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
20
<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 -->
21
<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 -->
22
<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 yang ada pada file
modal.php. sedangkan untuk memanggil halaman daftar sistem memanggil id daftarModal
23
Untuk dapat memanggil view modal.php ini, kita akan lakukan pengeditan pada
controller Home.php (fungsi index dan detailBuku)yang telah kita buat sebelumnya,
dengan menambahkan pemanggilan file modal.php tersebut.
24
B. Membuat Controller Member
Controller member berisi fungsi-fungsi seperti pengecekan data login, pendaftaran
anggota, management profile, dan fungsi logout. Buatlah sebuah controller dengan nama
Member.php
1. Membuat fungsi 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
25
];
$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');
}
}
26
'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]');
27
'user' => $user['nama'],
'email' => $user['email'],
'tanggal_input' => $user['tanggal_input'],
];
}
$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>
28
</div>
</div>
<!-- /.container-fluid -->
</div>
<!-- End of Main Content -->
29
$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);
} else {
}
}
$this->db->set('nama', $nama);
$this->db->where('email', $email);
$this->db->update('user');
30
$this->session->set_flashdata('pesan', '<div class="alert alert-
success alert-message" role="alert">Profil Berhasil diubah </div>');
redirect('member/myprofil');
}
}
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">
<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">
31
<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 -->
32
Hasil akhir perubahan data profil.
<?php
function cek_login()
33
{
$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 dikumpulkan dan dinilai oleh Dosen
34
MINGGU KE 4
Membuat Halaman Transaksi booking peminjaman
Deskripsi:
Membahas bagaimana cara membuat dan memodifikasi halaman transaksi booking
peminjaman. Halaman transaksi booking peminjaman digunakan untuk menyimpan data
buku yang dipinjam, anggota dapat menghapus atau menambah buku yang telah dibooking.
Tujuan Pembelajaran:
Setelah melakukan bagian ini mahasiswa mampu:
1. Membuat sebuah controller booking dan pinjam
2. Memodifikasi controller booking dan pinjam
3. Memodifikasi halaman booking buku
Hasil dari pertemuan ini adalah membuat halaman transaksi booking peminjaman
seperti berikut:
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.
35
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:
36
{
$this->db->select('*');
$this->db->from('booking bo');
$this->db->join('booking_detail d', 'd.id_booking=bo.id_booking');
$this->db->join('buku bu ', 'bu.id=d.id_buku');
$this->db->where($where);
return $this->db->get();
}
37
public function createTemp()
{
$this->db-
>query('CREATE TABLE IF NOT EXISTS temp(id_booking varchar(12), tgl_booking DATET
IME, email_user varchar(128), id_buku int)');
}
return $kodejadi;
}
}
38
B. Membuat Model Pinjam
Model pinjam pada dasarnya memiliki fungsi yang sama seperti model booking. Yang
berbeda hanya tabel yang terlibat didalamnya. Model pinjam khusus untuk menangani
proses yang berhubungan dengan tabel pinjam.
Buatlah sebuah sebuah model baru dengan nama ModelPinjam.php lalu ketikkan
perintah berikut:
return $this->db->get()->result_array();
39
}
Lakukan pengeditan pada file header.php, pada bagian menu booking buku. Seperti pada
script berikut:
Sehingga ketika tampil halaman home, maka data buku yang dibooking akan muncul
sepertin berikut:
40
C. Membuat Controller Booking
Controller Booking.php berisi fungsi-fungsi yang berhubungan dengan proses booking
buku. Didalamnya terdapat fungsi tambahBuku, hapusbooking, bookingSelesai, info, dan
exportToPdf. Pada pertemuan ini akan kita buat fungsi index, tambahBuku,
viewDataBooking, dan hapusbooking.
Buatlah sebuah controller baru dengan nama Booking.php. ketikkan pada controller
script berikut:
<?php
defined('BASEPATH') or exit('No Direct Script Access Allowed');
date_default_timezone_set('Asia/Jakarta');
if ($dtb < 1) {
41
$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.
$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());
}
42
//memilih data buku yang untuk dimasukkan ke tabel temp/keranjang melalui
variabel $isi
$d = $this->db->query("Select*from buku where id='$id_buku'")->row();
$userid = $this->session->userdata('id_user');
43
}
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
44
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>
<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>
45
<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>
<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
46
Sedangkan tombol Selesaikan Booking, system mengarahkan ke fungsi bookingSelesai
yang ada di controller Booking.
function ini akan di jalankan ketika member melakukan interaksi pada data booking
dengan mengklik tombol hapus.
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');
}
}
47
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
Tugas 4
1. Mahasiswa mengerjakan materi yang ada di pertemuan 5 yaitu membuat
Halaman Lihat Keranjang Peminjaman dan Selesai Booking
2. Point 1 dikumpulkan dan dinilai oleh Dosen
48
MINGGU KE 5
Membuat Halaman Lihat Keranjang Peminjaman dan Selesai Booking
Deskripsi:
Membahas bagaimana cara menyelesaikan booking buku pada halaman keranjang
peminjaman. Fungsi selesai booking buku digunakan untuk menyelesaikan transaksi
peminjaman dan fungsi view info berfungsi untuk menampilkan hasil akhir dari booking
buku. Anggota dapat melakukan cetak bukti booking buku dalam bentuk pdf. Pada
pembahasan ini akan digunakan library DOMPDF untuk membuat buktincetak tersebut.
Tujuan Pembelajaran:
Setelah melakukan bagian ini mahasiswa mampu:
1. Membuat tampilan hasil booking
2. Memahami pembuatan cetak bukti booking dengan library DOMPDF
Hasil dari pertemuan ini adalah membuat halaman keranjang peminjaman dan cetak
bukti booking, seperti berikut:
49
A. Membuat Fungsi Selesai Booking
Pada tahap ini. untuk menyelesaikan booking buku, maka member harus melakukan
interaksi pada web dengan melakukan klik pada tombol selesaikan booking yang ada pada
tampilan keranjang.
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
];
//menyimpan ke tabel booking dan detail booking, dan mengosongkan tabel t
emporari
$this->ModelBooking->insertData('booking', $isibooking);
$this->ModelBooking->simpanDetail($where);
$this->ModelBooking->kosongkanData('temp');
redirect(base_url() . 'booking/info');
}
50
Pada fungsi bookingSelesai terdapat beberapa perintah yang dijalankan, diantaranya
pengupdate-an stok dan info buku yang dibooking.
$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');
$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');
}
51
C. Membuat View Info Booking
Seperti dijelakan sebelumnya, view info booking digunakan untuk menampilkan data
akhir dari proses booking buku. Buatlah file dengan nama info-booking.php dalam folder
Application/views/booking. Ketikkan script berikut:
<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>
<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>
52
<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>
Dapat dilihat data booking kembali menjadi 0. Dan terdapat tombol cetak pdf sebagai
bukti booking saat pengambilan buku.
53
D. Mencetak Bukti Booking
Untuk membuat cetak laporan PDF pada PHP, kita bisa menggunakan library DOMPDF.
DOMPDF salah satu library PHP yang bisa di gunakan untuk membuat cetak laporan PDF
dengan sangat mudah.
1. Penggunaan DOMPDF
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
$this->load->library('dompdf_gen');
54
$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
<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>
55
<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>
</div>
</td>
</tr>
<tr>
<td>
<hr>
</td>
</tr>
<tr>
<td align="center">
<?= md5(date('d M Y H:i:s')); ?>
</td>
</tr>
</table>
56
hasil dari cetak bukti pdf:
Tugas 5
1. Mahasiswa mengerjakan materi yang ada di pertemuan 6 yaitu membuat
Halaman Pengambilan dan Pengembalian Buku
2. Point 1 dikumpulkan dan dinilai oleh dosen
57
MINGGU KE 6
Membuat Halaman Pengambilan dan Pengembalian Buku
Deskripsi:
Membahas mengenai pengolahan data booking buku yang dilakukan anggota. Admin
melakukan proses perubahan dari booking menjadi pinjam saat anggota mengambil buku,
dan merubah status buku yang dipinjam menjadi kembali saat buku telah dikembalikan
Tujuan Pembelajaran:
Setelah melakukan bagian ini mahasiswa mampu:
1. mengolah data booking menjadi pinjam
2. menampilkan detail booking buku
3. mengolah data pinjam menjadi kembali
<?php
defined('BASEPATH') or exit('No direct script access allowed');
58
public function index()
{
$data['judul'] = 'Dashboard';
$data['user'] = $this->ModelUser->cekData(['email' => $this->session-
>userdata('email')])->row_array();
$data['anggota'] = $this->ModelUser->getUserLimit()->result_array();
$data['buku'] = $this->ModelBuku->getLimitBuku()->result_array();
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'");
}
}
}
59
$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');
}
}
60
Hasil dari script tersebut adalah :
61
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
{
$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');
}
62
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>
<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>
63
<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>
</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)
64
<td><a class="btn btn-
link" href="<?= base_url('pinjam/bookingDetail/' . $p['id_booking']); ?>"><?= $p[
'id_booking']; ?></a></td>
Untuk tombol Pinjam, sistem akan mengarahkan ke fungsi pinjamAct yang juga ada di
controller Pinjam.php (harus buat fungsi pinjamAct)
$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');
}
65
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>
<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) {
?>
66
<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>
67
public function pinjamAct()
{
$id_booking = $this->uri->segment(3);
$lama = $this->input->post('lama', TRUE);
$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
];
$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");
68
Pada fungsi tambahAct, tanggal kembali akan ditentukan dengan menambahkan lama
pinjam dengan tanggal yang berlaku di sistem.
$tglsekarang = date('Y-m-d');
$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);
69
$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">
<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
70
<td><?= $p['tgl_kembali']; ?></td>
<td>
<?= date('Y-m-d'); ?>
<input type="hidden" name="tgl_pengembali
an" id="tgl_pengembalian" value="<?= date('Y-m-d'); ?>">
</td>
<td>
<?php
$tgl1 = new DateTime($p['tgl_kembali']);
$tgl2 = new DateTime();
$selisih = $tgl2->diff($tgl1)-
>format("%a");
echo $selisih;
?> Hari
</td>
<td><?= $p['denda']; ?></td>
<?php
if ($selisih < 0) {
$total_denda = $p['denda'] * 0;
} else {
$total_denda = $p['denda'] * $selisih;
}
?>
71
<?php } ?>
</td>
</tr>
<?php
} ?>
</table>
</div>
</td>
</tr>
</table>
</center>
</div>
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:
72
public function ubahStatus()
{
$id_buku = $this->uri->segment(3);
$no_pinjam = $this->uri->segment(4);
$where = ['id_buku' => $this->uri->segment(3),];
$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'");
$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");
73
Hasil dari script :
Tugas 6
1. Mahasiswa mengerjakan materi yang ada di pertemuan 7 yaitu membuat dan
Mencetak Laporan Data Buku ke Printer
2. Point 1 dikumpulkan dan dinilai oleh dosen
74
MINGGU KE 7
Membuat dan Mencetak Laporan Data Buku ke Printer
Deskripsi:
Membahas bagaimana cara membuat dan memodifikasi pencetakan laporan data buku
dengan menggunakan printer
Tujuan Pembelajaran:
Setelah melakukan bagian ini pembaca mampu:
1. Membuat halaman tampilan cetak buku
2. Membuat dan mencetak laporan data buku dengan media printer
75
Hasil dari coding diatas adalah sebagai berikut:
76
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.
<?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">
77
<div class="alert alert-danger" role="alert">
<?= validation_errors();?>
</div>
<?php }?>
<?= $this->session->flashdata('pesan'); ?>
<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>
78
<!-- End of Main Content -->
Adapun langkah-langkah detail dalam membuat Print Laporan Data Buku adalah sebagai
berikut:
1. Tambahkan fungsi cetak_laporan_buku pada controller Laporan
79
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>
80
<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>
81
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 dikumpulkan dan dinilai oleh dosen
82
MINGGU KE 9
Membuat dan Mencetak Laporan Data Buku ke Tampilan Pdf dan Excel
Deskripsi:
Membahas bagaimana cara membuat dan memodifikasi pencetakan laporan data buku
kedalam bentuk Pdf dan Ms. Excel
Tujuan Pembelajaran:
Setelah melakukan bagian ini pembaca mampu:
1. Membuat dan mencetak laporan yang dirubah menjadi bentuk Pdf
2. Membuat dan mencetak laporan yang dirubah menjadi bentuk Ms. Excel
83
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
84
85
4. Hasil dari codingan tersebut adalah sebagai berikut:
86
87
3. Hasil dari eksport data:
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
88
MINGGU KE 10
Membuat Laporan Peminjaman Dan Setting Akses Client-Server
Deskripsi:
Membahas bagaimana cara membuat transaksi peminjaman dengan menggunakan printer,
format pdf, dan Ms. Excel serta melakukan setting akses client-server.
Tujuan Pembelajaran:
Setelah melakukan bagian ini pembaca mampu:
1. Membuat dan mencetak laporan transaksi peminjaman dengan media printer
2. Membuat dan mencetak laporan transaksi peminjaman dengan format pdf
3. Membuat dan mencetak laporan transaksi peminjaman dengan format Ms. Excel
4. Membuat Akses Client-Server
5. Melakukan setting Jaringan dan IP menggunakan Share wifi melalui HP
89
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);
90
$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">
91
</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 -->
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>
92
Sekarang kita coba klik pada menu “laporan Transaksi”
$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.
93
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{
font-family:Verdana;
}
</style>
94
</tr>
</thead>
<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>
<script type="text/javascript">
window.print();
</script>
</body>
</html>
Hasil akhir dari script diatas adalah :
95
D. Membuat Cetak Pdf Laporan Peminjaman
Untuk membuat laporan peminjaman cetak pdf kita buka kembali view laporan-
pinjam.php untuk melihat controller dan fungsi apa yang dipanggil.
$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-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
}
}
96
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{
background-color:grey;
}
h3{
font-family:Verdana;
}
</style>
97
<th>Tanggal Pinjam</th>
<th>Tanggal Kembali</th>
<th>Tanggal Pengembalian</th>
<th>Total Denda</th>
<th>Status</th>
</tr>
</thead>
<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>
</body>
</html>
Hasil dari file pdf yang telah didownload:
98
<a href="<?= base_url('laporan/laporan_pinjam_pdf'); ?>" class="btn btn-
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>
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()
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;
99
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>
<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
}
100
?>
</tbody>
</table>
Hasil akhir dari file yang telah diubah kedalam bentuk excel adalah :
101
6. Hasil yang didapat adalah sebagai berikut:
102
MINGGU KE 11-15
Presentasi Project
Pada pertemuan ini, mahasiswa melakukan presentasi kelompok, sesuai dengan jadwal yang
telah ditentukan oleh dosen pengajar
103