Post on 05-May-2023
TUTORIAL CODEIGNITER DAN MATERIALIZED
STUDI KASUS PENJUALAN BARANG
Dosen : Eko Budi Setiawan, S.Kom., M.T
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULAS TEKNIK DAN ILMU KOMPUTER
UNIVERSITAS KOMPUTER INDONESIA
2020
i
DAFTAR ISI
1 Persiapan Alat Pembuatan Pembuatan Program ................................................................ 1
2 Instalasi CodeIgniter .......................................................................................................... 1
2.1.1 Setting .htacces .................................................................................................... 2
2.1.2 Setting Config URL Dinamis ............................................................................... 3
2.1.3 Libraries pada CodeIgniter .................................................................................. 3
3 Instalasi Materilized dan Jquery ........................................................................................ 4
4 Perbedaan Materialized dan Bootstrap .............................................................................. 4
5 Instalasi Library PHPExcel ................................................................................................ 4
6 Instalisasi Libarary domPDF ............................................................................................. 5
7 Instalisasi Chart .................................................................................................................. 5
8 Membuat Program Sederhana ............................................................................................ 5
8.1 Membuat Database ...................................................................................................... 6
8.1.1 Koneksi Database................................................................................................. 7
8.2 Membuat From Login ................................................................................................. 8
8.2.1 Model ................................................................................................................... 8
8.2.2 View ..................................................................................................................... 8
8.2.3 Controller ........................................................................................................... 11
8.3 Membuat lupa Password ........................................................................................... 13
8.3.1 Model ................................................................................................................. 13
8.3.2 View ................................................................................................................... 13
8.3.3 Controller ........................................................................................................... 14
8.4 Membuat Home Petugas ........................................................................................... 16
8.4.1 Model ................................................................................................................. 17
8.4.2 View ................................................................................................................... 17
8.4.3 Controller ........................................................................................................... 21
8.5 Membuat Dashboard Admin ..................................................................................... 22
8.5.1 Model ................................................................................................................. 22
8.5.2 View ................................................................................................................... 23
8.5.3 Controller ........................................................................................................... 32
8.6 Menambah Data Petugas ........................................................................................... 33
8.6.1 Model ................................................................................................................. 33
8.6.2 View ................................................................................................................... 34
8.6.3 Controller ........................................................................................................... 36
8.7 Melihat Data Petugas ................................................................................................ 37
ii
8.7.1 Model ................................................................................................................. 37
8.7.2 View ................................................................................................................... 37
8.7.3 Controller ........................................................................................................... 39
8.8 Mengubah Data Petugas ............................................................................................ 39
8.8.1 Model ................................................................................................................. 39
8.8.2 View ................................................................................................................... 40
8.8.3 Controller ........................................................................................................... 42
8.9 Menambah Data Barang ............................................................................................ 43
8.9.1 Model ................................................................................................................. 43
8.9.2 View ................................................................................................................... 44
8.9.3 Controller ........................................................................................................... 46
8.10 Melihat Data Barang Untuk Petugas ..................................................................... 48
8.10.1 Model ................................................................................................................. 48
8.10.2 View ................................................................................................................... 48
8.10.3 Controller ........................................................................................................... 50
8.11 Melihat Data Barang untuk Admin ........................................................................... 50
8.11.1 Model ................................................................................................................. 50
8.11.2 View ................................................................................................................... 51
8.11.3 Controller ........................................................................................................... 53
8.12 Mengubah Data Barang Untuk Petugas ................................................................. 53
8.12.1 Model ................................................................................................................. 53
8.12.2 View ................................................................................................................... 55
8.12.3 Controller ........................................................................................................... 57
8.13 Mengubah Data Barang Untuk Admin .................................................................. 57
8.13.1 Model ................................................................................................................. 58
8.13.2 View ................................................................................................................... 58
8.13.3 Controller ........................................................................................................... 60
8.14 Menambah Data Penjualan .................................................................................... 60
8.14.1 Model ................................................................................................................. 60
8.14.2 View ................................................................................................................... 61
8.14.3 Controller ........................................................................................................... 64
8.15 Melihat Data Penjualan Untuk Petugas ................................................................. 65
8.15.1 Model ................................................................................................................. 65
8.15.2 View ................................................................................................................... 65
8.15.3 Controller ........................................................................................................... 67
8.16 Melihat Data Penjualan Untuk Admin ................................................................... 67
8.16.1 Model ................................................................................................................. 68
iii
8.16.2 View ................................................................................................................... 68
8.16.3 Controller ........................................................................................................... 70
8.17 Menghapus Data Penjualan ................................................................................... 71
8.17.1 Model ................................................................................................................. 71
8.17.2 View ................................................................................................................... 71
8.17.3 Controller ........................................................................................................... 71
8.18 Stok Barang ........................................................................................................... 71
8.18.1 Model ................................................................................................................. 71
8.18.2 View ................................................................................................................... 72
8.18.3 Controller ........................................................................................................... 73
8.19 Melihat Data Member ............................................................................................ 74
8.19.1 Model ................................................................................................................. 74
8.19.2 View ................................................................................................................... 74
8.19.3 Controller ........................................................................................................... 75
9 Laporan File Excel ........................................................................................................... 76
9.1.1 Laporan Data Barang ......................................................................................... 76
9.1.2 Laporan Data Penjualan ..................................................................................... 79
9.1.3 Laporan Data Petugas ........................................................................................ 82
10 Laporan File PDF ............................................................................................................. 85
10.1.1 Laporan Data Barang ......................................................................................... 86
10.1.2 Laporan Data Penjualan ..................................................................................... 87
10.1.3 Laporan Data Petugas ........................................................................................ 89
11 Import Data dari Excel ke Database (Import Data Member) ........................................... 90
1
1 Persiapan Alat Pembuatan Pembuatan Program
Berikut merupakan alat-alat yang digunakan untuk mengembangkan aplikasi sistem
informasi produksi di PT. Socka Farge Indonesia.
1. Sistem operasi yang digunakan adalah Windows 10.
2. Browser yang digunakan adalah Google Chrome.
3. IDE Text Editor : Sublime Text 3.0
4. Web Server : Xampp version v3.2.1
5. Bahasa pemrograman: PHP 5.6.4
6. Web Framework: CodeIgniter 3.1.8
7. HTML, CSS, and Javascript Framework: Materialized dan jquery-1.11.2.
8. Database Server: MySQL
9. PHP Library : PHPExcel version 1.8 dan DOMPDF
2 Instalasi CodeIgniter
Berikut langkah-langkah instalisasi CodeIgniter:
1. Download CodeIgniter 3.1.8 dari http://www.codeigniter.com/download.
2. Ekstrak file CodeIgniter-3.1.8.zip pada direktori web server untuk XAMPP
(/xampp/ /htdocs/) dan untuk WAMPP (/wampp/www/).
3. Masuk ke direktori web server, kemudian ubah nama folder CodeIgniter-3.1.8
menjadi nama aplikasi, sebagai contoh menggunakan nama “penjualan”.
4. Jalankan web server dan database server (pada tutorial ini menggunakan Apache
dan MySQL).
5. Buka web browser Anda dan arahkan pada alamat http://localhost/penjualan.
6. Jika berhasil, Anda akan melihat halaman web seperti gambar dibawah ini.
2
Sampai tahap ini, Anda telah berhasil melakukan instalasi CodeIgniter pada web server
lokal. Sekarang Anda dapat mulai membangun web application menggunakan framework
CodeIgniter.
2.1.1 Setting .htacces
Agar memudahkan para developer website dalam pemanggilan direktori file lebih baik
rata-rata menggunakan menggunakan file .htaccess. file .htaccess adalah file konfigurasi dari
apache, biasanya di gunakan untuk mengubah pengaturan default pada apache melalui file
.htaccess ini.
Contoh kegunaan htacces yaitu dapat menghilangkan index.php dari url saat
menjalankan CodeIgniter , ketika tidak menggunakan htacces standar url untuk memanggil
CodeIgniter yaitu : (http://localhost/penjualan/index.php/welcome) sedangkan ketika sudah
menggunakan htacces dapat, mempersingkat alamat url menjadi
(http://localhost/penjualan/welcome). Intinya kita langsung bisa memanggil controller yang
sudah kita buat.
Cara membuat Ike htaccess:
1. Buka IDE text editor
2. Copy-kan source code di bawah ini
3
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*)$ index.php/$1 [NC,L]
3. Save As dengan nama .htaccess di folder penjualan
4. Pada direktori penjualan/application/config/config.php, hapuslah index.php pada
$config['index_page']='index.php'
Menjadi :
$config['index_page']=''
2.1.2 Setting Config URL Dinamis
Dalam setting url dinamis ini juga memudahkan para developer website agar tidak
mengatur URL secara manual. Bayangkan jika terdapat file php yang banyak terdapat source
code link seperti <a href = ‘http://localhost/penjualan’> dan ingin mengganti nama
folder dari penjualan menjadi tutorial, tentunya harus mengganti source code satu persatu
secara manual menjadi <a href = ‘http://localhost/tutorial’>. Ada cara untuk
mengatur link URL dinamis sebagai berikut :
1. Setting Base_url di direktori /application/config/config.php, Base url merupakan fungsi
untuk memanggil URL.
2. Secara umum, membuat base url secara manual seperti berikut:
$config['base_url']=http://localhost/namaproject;
3. Namun, dengan Base URL yang dinamis akan memudahkan kita untuk tidak setting
secara manual alias otomatis. Caranya ganti $config[‘base_url’] menjadi seperti
dibawah ini :
$config['base_url'] = ((isset($_SERVER['HTTPS']) &&
$_SERVER['HTTPS'] == "on") ? "https" : "http");
$config['base_url'] .= "://".$_SERVER['HTTP_HOST'];
$config['base_url'] .= str_replace(basename(
$_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
2.1.3 Libraries pada CodeIgniter
Framework CodeIgniter telah menyiapkan beberapa libraries yang dapat dilihat
direktori system/libraries. Untuk menggunakan libraries dapat dipanggil pada di setiap
controller seperti bawah ini:
public function __construct(){
parent::__construct();
$this->load->library(array('form_validation','session',
pdf,PHPExel, email));
}
4
Akan tetapi alangkah baiknya dipanggil di file autoload.php, sehingga kita tidak perlu
mengatur panggilan libraries di controller. Direktori file autoload.php berada di
/application/config/autoload.php, dan panggil library seperti di bawah ini :
$autoload['libraries'] =
array('database','form_validation','pdf','session','email',’PHPExcel’)
3 Instalasi Materilized dan Jquery
1. Download Materialized dari https://materializecss.com/getting-started.html
2. Buat folder assets untuk penyimpan framework css dan js di direktori aplikasi
seperti penjualan/.
3. Ekstrak pada direktori aplikasi penjualan/assets.
4. Sekarang direktori aplikasi Anda akan memiliki folder css/, fonts/, dan js/.
5. Download jQuery dari http://jquery.com/download/.
6. Simpan file jQuery pada direktori js/.
7. Materilized dan jQuery siap untuk digunakan pada aplikasi.
4 Perbedaan Materialized dan Bootstrap
Perbedaan materialized dan bootrstrap sebagai berikut
Materialized Bootstrap
Efek lebih bagus Efek kurang bagus
Fitur Sedikit Fitur Banyak
Tampilan lebih Modern Tampilan biasa
Lebih cocok untuk tampilan user Lebih cocok untuk tampilan ke admin
5 Instalasi Library PHPExcel
PHPExcel adalah library PHP yang digunakan untuk mengekspor data pada aplikasi
menjadi sebuah file. Dalam kasus ini, kita akan mengekspor data ke dalam sebuah file
berekstensi *.xlsx. Berikut merupakan cara instalasi library PHPExcel pada CodeIgniter:
1. Download PHPExcel https://github.com/PHPOffice/PHPExcel/tree/1.8/Classes.
2. Ekstrak dan simpan pada direktori application/libraries.
3. Untuk memanggil library-library PHPExcel dapat menggunakan sintaks berikut
5
6 Instalisasi Libarary domPDF
Dompdf merupakan salah satu pustaka PHP untuk membuat PDF. Export PDF ini akan
digunakan ketika membuat laporan dengan file PHP. Berikut langkah untuk instalisasi library
domPDF:
1. Download di http://code.google.com/p/dompdf/downloads/list
2. Ekstrak dan simpan pada direktori application/libraries.
3. Tambahkan file pdf.php untuk memudahkan dalam memanggil library pada
autoload.php. Berikut script untuk pdf.php dan simpan di direktori
application/libraries.
<?php defined('BASEPATH') OR exit('No direct script access
allowed');
require_once(dirname(__FILE__) .
'/dompdf/dompdf_config.inc.php');
class Pdf extends DOMPDF
{
protected function ci()
{
return get_instance();
}
public function load_view($view, $data = array())
{
$html = $this->ci()->load->view($view, $data,
TRUE);
$this->load_html($html);
}
}
7 Instalisasi Chart
Chart akan digunakan untuk membuat satatistik penjualan. Berikut langkah untuk
instalisasi Chart.js :
1. Download chart,js di https://github.com/chartjs/Chart.js
2. Ekstrak dan simpan pada direktori assets/js.
8 Membuat Program Sederhana
Dalam tutorial ini akan mengimplementasikan aplikasi menggunakan desaign Materilezed
di Framework CodeIgniter. Adapun langkah-langkah untuk membuat program sederhana
sebagai berikut :
6
8.1 Membuat Database
Langkah pertama membuat database untuk hak akses atau login dan menyiapkan
beberapa tabel untuk keperluan program sederhana. Berikut source code untuk membuat
database yang bisa diterapkan dalam sql.
CREATE DATABASE dbpenjualan;
USE dbpenjualan;
CREATE TABLE user(
idUser char(3) PRIMARY KEY,
nama varchar(30) NOT NULL,
email varchar(30) NOT NULL,
password varchar(35) NOT NULL,
level varchar(8) NOT NULL
);
CREATE TABLE barang(
idBarang char(3) PRIMARY KEY,
namaBarang varchar(30) NOT NULL,
harga double NOT NULL,
stok int(5) NOT NULL,
foto varchar(30)
);
CREATE TABLE penjualan(
idPenjualan char(3) PRIMARY KEY,
idBarang char(3) NOT NULL,
tglTransaksi date NOT NULL,
qty int(3) NOT NULL,
idUser char(3),
FOREIGN KEY (`idBarang`) REFERENCES `barang`(`idBarang`),
FOREIGN KEY (`idUser`) REFERENCES `user`(`idUser`)
);
CREATE TABLE member(
idMember int(3) AUTO_INCREMENT PRIMARY KEY,
nama varchar(25) NOT NULL,
jk varchar(10),
alamat varchar(25)
);
INSERT INTO user VALUES
('A01','Admin','admin@email.com',md5('admin'),'Admin'),
('P01','Petugas','petugas@email.com',md5('petugas'),'Petugas');
7
Sehingga skema relasi tabel seperti berikut :
8.1.1 Koneksi Database
Langkah untuk koneksi database di CodeIgniter yaitu diatur dalam file database.php
yang terdapat pada direktori application/config/database.php dan tambahkan hostname,
username, password (opsional), dan nama database. Dalam aplikasi tutorial ini menggunkan
mysqli. Contoh konfigurasi atau koneksi database dapat dilihat pada script di bawah ini:
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'dbpenjualan',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
8
8.2 Membuat From Login
From login merupakan proses untuk mengakses komputer dengan memasukkan identitas
dari akun pengguna dan password guna mendapatkan hak akses aplikasi komputer.
8.2.1 Model
Langkah pertama membuat model user untuk login, model user untuk hak akses login
yang berisi query sql login. Buatlah file M_user.php di direktori application/model/ dan script
query login sebagai berikut:
<?php if ( ! defined('BASEPATH')) exit('No direct script access
allowed');
class m_user extends CI_Model{
//Login
function getEmailUser($email){
$this->db->select('*');
$this->db->from('user');
$this->db->where('email', $email);
$query = $this->db->get();
return $query;
}
function getPassUser($password){
$this->db->select('*');
$this->db->from('user');
$this->db->where('password', $password);
$query = $this->db->get();
return $query;
}
}
?>
Penjelasan script diatas sebagai berikut:
- Nama file dan nama class harus sama, tidak case sensitive.
- Nama class akan digunakan dalam ketika pemanggilan model.
8.2.2 View
Langkah selanjutya yaitu membuat tampilan login. Buatlah file login.php di direktori
application/views/ dan isi file login.php sebagai berikut:
9
<html>
<head>
<!—panggil file css-->
<link href="<?php echo base_url(); ?>assets/css/materialize.css"
rel="stylesheet"/>
<link href="<?php echo base_url(); ?>assets/css/materialize.min.css"
rel="stylesheet"/>
</head>
<body>
<Center>
<br><br><br>
<h4>LOGIN</h4>
<br>
<div class="container">
<div class="z-depth-1 grey lighten-4 row" style="display: inline-
block; padding: 32px 48px 0px 48px; border: 1px solid #EEE;">
<form class="form" method="POST" action="<?php echo
base_url();?>login/login_act">
<?php if($this->session->flashdata('peringatan')):?>
<p align="center"><font color="red"><i><b><?php echo
$this->session->flashdata('peringatan'); ?></b></i></font></p>
<?php endif;?>
<div class='row'>
<div class='input-field col s12'>
<input type='email' name='email' id='email' value="<?php
echo set_value('email')?>" required/>
<label for='email'>Email...</label>
</div>
</div>
<div class='row'>
<div class='input-field col s12'>
<input type='password' name='password' id='password'
required />
<label for='password'>Password....</label>
</div>
<label style='float: right;'>
<a class='pink-text' href='<?php echo
base_url()?>lupaPassword'><b>Lupa Password?</b></a>
</label>
</div>
<br />
<center>
<div class='row'>
<button type='submit' name='btn_login' class='col s12 btn
btn-large waves-effect indigo'>Login</button>
</div>
</center>
</form>
</div>
</div>
</center>
<div class="section"></div>
<div class="section"></div>
<script type="text/javascript" src="<?php echo
base_url();?>assets/js/materialize.js"></script>
<script type="text/javascript" src="<?php echo
10
base_url();?>assets/js/materialize.min.js"></script>
</body>
</html>
Sehingga hasil dari tampilan login sebagai berikut:
Penjelasan pada script pada tampilan login.php :
<?php if($this->session->flashdata('peringatan')):?>
<p align="center"><font color="red"><i><b><?php echo $this->session-
>flashdata('peringatan'); ?></b></i></font></p>
<?php endif;?>
Pada script di atas memberikan sebuah informasi untuk kesalahan masukkan, seperti ‘email
tidak ditemukan’, ‘password salah’ dan lain-lain.
<input type='email' name='email' id='email' value="<?php echo
set_value('email')?>
11
Pada script di atas, set_value(‘email’), menunjukan, ketika salah dalam masukkan login, maka
field email akan terisi yang kita masukkan, sehingga ketika ada kesalahan tidak perlu menulis
email dari awal.
8.2.3 Controller
Tahap selanjutnya membuat controller login.php. Buatlah file controller login.php di
direktori /apllication/controllers dan script controller untuk login sebagai berikut :
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class login extends CI_Controller {
public function __construct(){
parent::__construct();
$this->load->model('m_user');
date_default_timezone_set('Asia/Jakarta');
}
public function index()
{
if ($this->session->userdata('level')=='Admin') {
redirect('admin','refresh');
}elseif($this->session->userdata('level')=='Petugas') {
redirect('petugas','refresh');
}else{
$this->load->view('login');
}
}
function login_act(){
$email = $this->input->post('email');
$password = md5($this->input->post('password'));
$cekEmailUser = $this->m_user->getEmailUser($email);
$cekPassUser = $this->m_user->getPassUser($password);
if ($this->input->method()!='post') {
redirect('login');
}elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$this->session->set_flashdata('peringatan','Format email
salah');
}elseif($cekEmailUser->num_rows() == NULL) {
$this->session->set_flashdata('peringatan','Email tidak
ditemukan');
}elseif($cekPassUser->num_rows() == NULL) {
$this->session->set_flashdata('peringatan','Password
Salah');
}elseif($cekEmailUser->num_rows()!=NULL && $cekPassUser-
>num_rows()!=NULL){
foreach ($cekEmailUser->result() as $data) {
$data_user['id'] = $data->idUser;
$data_user['nama'] = $data->nama;
$data_user['email'] = $data->email;
12
$data_user['level'] = $data->level;
$this->session->set_userdata($data_user);
if($data->level == "Petugas") {
redirect('petugas');
}elseif($data->level == "Admin") {
redirect('admin');
}
}
}else{
$this->session->set_flashdata('peringatan','Password
Salah');
}
$this->load->view('login');
}
Penjelasan script diatas sebagai berikut:
- Nama file dan nama class harus sama, tidak mengandug case sensitive.
- function __construct()adalah pertama kali di run ketika menuju controller login.
- $this->load->model('m_user'); untuk memanggil model m_user
- function index()untuk menampilkan tampilan awal login, dan ketika ingin
tampilan program di awali dengan login. Ubahlah router untuk tampilan awal program
di direktori /application/config/routes.php dengan script
$route['default_controller'] = 'welcome'; menjadi
$route['default_controller'] = 'login';
- ($this->session->userdata('level')=='Admin' untuk validasi login
menggunakan session
- $this->load->view('login'); untuk menampilkan view yang sudah dibuat
sebelumnya.
- function login_act() adalah proses untuk login
- $this->input->post('email'); untuk mengambil data from yang menggunakan
metode POST
- $this->m_user->getEmailUser untuk mengambil query getEmailUser di model
m_user
3. $this->session->set_flashdata('peringatan','Format email salah');
untuk set notifikasi kesalahan.
4. $cekPassUser->num_rows(), num_rows disini berarti mengambil data dari hasil
query yang menghasilkan 1 data
5. $this->session->set_userdata($data_user); untuk setting session.
13
8.3 Membuat lupa Password
Lupa password digunakan ketika admin atau petugas lupa dengan password. Berikut
langkah dalam pembuatan form lupa password.
8.3.1 Model
Menggunakan fungsi getEmailUser($email) sebagai pengambilan user berdasarkan
email pada file model M_user.php yang sudah dibuat ketika membuat form login dan
menambah script pada model file M_user.php untuk mengubah password berdasarkan email,
script ubah password sebgai berikut:
function ubahpasswordUser($email,$data){
$this->db->set($data);
$this->db->where('email', $email);
$this->db->update('user');
}
8.3.2 View
Langkah selanjutya yaitu membuat tampilan lupa password. Buatlah file
lupaPassword.php dan simpan/save di direktori application/views/ dan script file
lupaPassword.php sebagai berikut:
<html>
<head>
<link href="<?php echo base_url(); ?>assets/css/materialize.css"
rel="stylesheet"/>
<link href="<?php echo base_url(); ?>assets/css/materialize.min.css"
rel="stylesheet"/>
</head>
<body>
<center>
<br><br><br>
<h4>Lupa Password</h4>
<br>
<div class="container">
<div class="z-depth-1 grey lighten-4 row" style="display: inline-
block; padding: 32px 48px 0px 48px; border: 1px solid #EEE;">
<form class="form" method="POST" action="<?php echo
base_url();?>login/lupaPassword_act">
<?php if($this->session->flashdata('peringatan')):?>
<p align="center"><font color="red"><i><b><?php echo
$this->session->flashdata('peringatan'); ?></b></i></font></p>
<?php endif;?>
<div class='row'>
<div class='input-field col s12'>
<input type='email' name='email' id='email' value="<?php
echo set_value('email')?>" required/>
<label for='email'>Email...</label>
</div>
</div>
<div class='row'>
14
<label style='float: right;'>
<a class='pink-text' href='<?php echo
base_url()?>login'><b>Ingat Password?</b></a>
</label>
</div>
<br>
<center>
<div class='row'>
<button type='submit' name='btn_kirim' class='col s12 btn
btn-large waves-effect indigo'>Kirim</button>
</div>
</center>
</form>
</div>
</div>
</center>
<script type="text/javascript" src="<?php echo
base_url();?>assets/js/materialize.js"></script>
<script type="text/javascript" src="<?php echo
base_url();?>assets/js/materialize.min.js"></script>
</body>
</html>
Sehingga hasil dari tampilan login sebagai berikut:
8.3.3 Controller
Tahap selanjutnya menyimpan script dibawah ini pada file controller Login.php :
public function lupaPassword()
{
if ($this->session->userdata('level')=='Admin') {
redirect('admin');
}elseif($this->session->userdata('level')=='Petugas') {
redirect('petugas');
}else{
15
$this->load->view('lupaPassword');
}
}
function lupaPassword_act(){
$email = $this->input->post('email');
$cekEmailUser = $this->m_user->getEmailUser($email);
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$this->session->set_flashdata('peringatan','Format email salah');
}elseif($cekEmailUser->num_rows() == NULL) {
$this->session->set_flashdata('peringatan','Email tidak
ditemukan');
}elseif($cekEmailUser->num_rows()!=NULL){
//password baru
$pass="129FAasdsk25kwBjakjDlff";
$panjang='8';
$len=strlen($pass);
$start=$len-$panjang;
$xx=rand('0',$start);
$yy=str_shuffle($pass);
$passwordbaru=substr($yy, $xx, $panjang);
// Configure email library
$config = Array(
'protocol' => 'smtp',
'smtp_host' => 'smtp web',
'smtp_port' => 'port SSL/TSL',
'smtp_user' => '', //email anda
'smtp_pass' => '', // password anda
'mailtype' => 'html',
'charset' => 'iso-8859-1'
);
// konfigurasi values ke email library
$this->email->initialize($config);
$this->email->set_newline("\r\n");
// Sender email address
$this->email->from('email anda', 'tambah keterangan');
// Receiver email address
$this->email->to($email);
// Subject of email
$this->email->subject('Lupa Password');
// Message in email
$this->email->message(
"<html>
<head>
</head>
<body>
<br>
Kami telah mengatur ulang password Anda, Berikut password baru
Anda :
<br>
<br>
<p>Password Baru</b><td>: <b>".$passwordbaru."</p>
<p>Anda dapat login kembali dengan password baru Anda <a
href=\"". base_url()."\" login\" target=\"_blank\" style=\"text-
decoration:none;font-weight:bold;\">disini</a>.</p>
</body>
</html>"
);
16
if($this->email->send()){
$data['password'] = md5($passwordbaru);
$this->m_user->ubahpasswordUser($email, $data);
$this->session->set_flashdata('peringatan', 'Email terkirim');
}else{
$this->session->set_flashdata('peringatan', 'Email gagal
terkirim / Periksa Koneksi anda');
}
$this->load->view('lupaPassword');
}
}
Penjelesan pada script diatas sebagai berikut:
1. public function lupaPassword() untuk menampilkan view lupa password
2. lupaPassword_act() untuk proses lupa password.
3. untuk mendapatkan password baru secara random, untuk mendapatkan password
secara random sebagai berikut :
//password baru
$pass="129FAasdsk25kwBjakjDlff";
$panjang='8';
$len=strlen($pass);
$start=$len-$panjang;
$xx=rand('0',$start);
$yy=str_shuffle($pass);
$passwordbaru=substr($yy, $xx, $panjang);
4. Untuk mengirim via email, atur smtp email terlebih dahulu, seperti masukkan smtp
host port, user(email), dan password dapat yang tertera pada script sebagai berikut:
$config = Array(
'protocol' => 'smtp',
'smtp_host' => 'smtp web',
'smtp_port' => 'port SSL/TSL',
'smtp_user' => '', //email anda
'smtp_pass' => '', // password anda
'mailtype' => 'html',
'charset' => 'iso-8859-1'
);
5. $this->email->send() untuk mengirim email dari library email ke email yang
dituju.
8.4 Membuat Home Petugas
Home petugas atau tampilan utama petugas digunakan petugas untuk memilih
fungsionalitas atau kerjaanya, seperti fungsional input barang, penjualan, dan lain lain
17
8.4.1 Model
Dalam pembuatan tampilan home petugas menggunakan Model M_user.php sehingga,
hanya menambah script pada model M_user.php untuk mengambil data user petugas
berdasarkan email, script mengambil user petugas sebgai berikut:
function selectPetugas(){
$email = $this->session->userdata('email');
$this->db->select('*');
$this->db->from('user');
$this->db->where('email', $email);
$query = $this->db->get();
return $query;
}
Dalam pengambilan berdasarkan email, menggunakan session email, yang sudah diset
ketika proses login.
8.4.2 View
View petugas dibagi menjadi 3 file bagian yaitu header, isi, dan footer. Header dan
footer dipisahkan agar tidak terjadinya proses pengulangan pembuatan header dan footer setiap
file view petugas. Buatlah sebuah folder petugas di direktori application/views agar
memudahkan pencarian file untuk petugas dan buatlah file header.php, footer.php, dan
home.php untuk tampilan awal petugas pada direktori application/views/petugas/. Berikut
script untuk header.php
<html>
<head>
<title>Petugas</title>
<!-- CSS -->
<link href="<?php echo base_url(); ?>assets/css/materialize.css"
type="text/css" rel="stylesheet">
<!-- dataTables -->
<link href="<?php echo base_url(); ?>assets/js/plugins/data-
tables/css/jquery.dataTables.min.css" type="text/css" rel="stylesheet">
</head>
<style type="text/css">
.icon_style{
position: absolute;
right: 10px;
top: 10px;
font-size: 20px;
color: white;
cursor:pointer;
}
</style>
<body>
<!-- Dropdown Structure -->
<ul id="dropdown1" class="dropdown-content">
<li><a href="<?php echo
base_url();?>barang/barang">Barang</a></li>
<li class="divider"></li>
<li><a href="<?php echo
base_url();?>penjualan/penjualan">Penjualan</a></li>
18
</ul>
<ul id="dropdown2" class="dropdown-content">
<li><a href="<?php echo
base_url();?>petugas/profil">Profil</a></li>
<li class="divider"></li>
<li><a href="<?php echo
base_url();?>login/logout">Logout</a></li>
</ul>
<nav class="blue">
<div class="nav-wrapper container">
<a href="<?php echo base_url();?>" class="brand-logo">XYZ</a>
<a href="#" data-activates="mobile-demo" class="button-collapse"><i
class="mdi-action-view-headline"></i></a>
<ul class="right hide-on-med-and-down">
<li><a href="<?php echo base_url();?>petugas"><i class="mdi-
action-home" style='font-size: 40px'></i></a></li>
<!-- Dropdown-->
<li><a class="dropdown-button" href="#!" data-
activates="dropdown1"><i class="mdi-editor-format-list-bulleted"
style='font-size: 40px'></i></a></li>
<li><a class="dropdown-button" href="#!" data-
activates="dropdown2"><i class="mdi-action-settings" style='font-size:
40px'></i></a></li>
</ul>
<ul class="side-nav" id="mobile-demo">
<li><a href="<?php echo base_url();?>petugas"><i class="mdi-
action-home" style='font-size: 30px'>Home</i></a></li>
<li class="divider"></li>
<li><a href="<?php echo base_url();?>barang/barang"><i
class="mdi-editor-format-list-bulleted" style='font-size: 30px'>
Barang</i></a></li>
<li><a href="<?php echo base_url();?>penjualan/penjualan"><i
class="mdi-editor-format-list-bulleted" style='font-size: 30px'>
Penjualan</i></a></li>
<li class="divider"></li>
<li><a href="<?php echo base_url();?>petugas/profil"><i
class="mdi-action-face-unlock" style='font-size: 30px'>
Profil</a></i></li>
<li><a href="<?php echo base_url();?>login/logout "><i
class="mdi-hardware-keyboard-tab" style='font-size: 30px'>
Logout</i></a></li>
</ul>
</div>
</nav>
Penjelasan script diatas :
1. File header.php berisi untuk mengambil file css dan navbar
2. Penambahan script css untuk melakukan Close pada sebuah notifikasi/pesan
<style type="text/css">
.icon_style{
position: absolute;
right: 10px;
top: 10px;
font-size: 20px;
19
color: white;
cursor:pointer;
}
</style>
3. <ul class="side-nav" id="mobile-demo"> untuk tampilan jika ditmapilkan dalam
resolusi kecil seperti perangkat mobile
Berikut isi dari file footer.php
<footer>
<center>©Coppy right <?php echo date('Y');
?></center>
</footer>
<script type="text/javascript" src="<?php echo
base_url(); ?>assets/js/jquery-1.11.2.min.js"></script>
<!--materialize js-->
<script type="text/javascript" src="<?php echo
base_url(); ?>assets/js/materialize.js"></script>
<script type="text/javascript" src="<?php echo
base_url(); ?>assets/js/materialize.min.js"></script>
<!-- data-tables -->
<script type="text/javascript" src="<?php echo
base_url(); ?>assets/js/plugins/data-
tables/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="<?php echo
base_url(); ?>assets/js/plugins/data-tables/data-tables-
script.js"></script>
<!--plugins.js - Some Specific JS codes for Plugin
Settings-->
<script type="text/javascript" src="<?php echo
base_url(); ?>assets/js/plugins.js"></script>
<script>
$(".button-collapse").sideNav();
</script>
<script type="text/javascript">
$('#alert_close').click(function(){
$( "#alert_box" ).fadeOut( "slow", function() {
});
});
</script>
</body>
</html>
1. Untuk tombol navigasi atau menu dalam resolusi layar kecil yang di terapkan
pada script <script>
$(".button-collapse").sideNav();
</script>
2. Javascript untuk menutup notifikasi diterapkan pada script seperti dibawah ini:
<script type="text/javascript">
$('#alert_close').click(function(){
20
$( "#alert_box" ).fadeOut( "slow", function() {
});
});
</script>
3. File footer.php berisi untuk memanggil file javascript pada direktori /assets/js.
Berikut script file Home.php sebagai berikut:
<div class="section no-pad-bot" id="index-banner">
<div class="container">
<br><br>
<h1 class="header center black-text">Selamat Bekerja
<?= $petugas->nama?>
<br>
</div>
</div>
<div class="container">
<div class="section">
<div class="row">
<div class="col s12 m4">
<div class="icon-block">
<a href="<?php echo base_url();?>barang/Stok">
<h2 class="center light-blue-text"><i
class="mdi-av-playlist-add" style='font-size:
200px'></i></h2>
<h5 class="center">NAMBAH STOK</h5>
</a>
</div>
</div>
<div class="col s12 m4">
<div class="icon-block">
<a href="<?php echo base_url();?>barang/tambah">
<h2 class="center light-blue-text"><i
class="mdi-content-add" style='font-size: 200px'></i></h2>
<h5 class="center">NAMBAH BARANG</h5>
</a>
</div>
</div>
<div class="col s12 m4">
<div class="icon-block">
<a href="<?php echo
base_url();?>penjualan/tambahPenjualan">
<h2 class="center light-blue-text"><i
class="mdi-action-shopping-cart" style='font-size:
200px'></i></h2>
<h5 class="center">PENJUALAN</h5>
</a>
</div>
</div>
</div>
</div>
</div>
Penjelasana script diatas sebagai berikut: <?= $petugas->nama?> untuk mengambil data nama user yang
sudah di panggil dalam query di model. Selain menggunakan
script tersebut dapat juga menggunakan script <?php echo
21
$petugas->nama?>.
Hasil dari tampilan Home petugas sebagai berikut:
8.4.3 Controller
Tahap selanjutnya membuat controller petugas. Buatlah file controller Petugas.php di
direktori /apllication/controllers dan script controller untuk file Petugas.php sebagai berikut :
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class petugas extends CI_Controller {
public function __construct(){
parent::__construct();
$this->load->model('m_user');
date_default_timezone_set('Asia/Jakarta');
}
public function index()
{
if($this->session->userdata('level')!='Petugas') {
redirect('login');
}else{
$data['petugas'] = $this->m_user->selectPetugas()->row();
$this->load->view('petugas/header');
$this->load->view('petugas/home',$data);
$this->load->view('petugas/footer');
}
}
}
?>
Penjelasan script diatas sebagai berikut:
22
1. redirect('login'); untuk mengalihkan ke controller login/index
2. $data['petugas'] = $this->m_user->selectPetugas()->row(); , array
petugas akan digunakan di file home.php.
3. Memanggil 3 view sekaligus disertai hasil dari query di model di masukkan ke
file Home.php
8.5 Membuat Dashboard Admin
Tampilan Dashbord atau tampilan awal admin digunakan untuk memonitor data
petugas ,barang, penjualan, jumlah stok dan pendapatan.
8.5.1 Model
Dalam pembuatan tampilan home petugas menggunakan Model M_user.php sehingga,
hanya menambah script pada model M_user.php untuk mengambil data user admin
berdasarkan session email, script tambahan dalam M_user sebgai berikut:
function selectAdmin(){
$email = $this->session->userdata('email');
$this->db->select('*');
$this->db->from('user');
$this->db->where('email', $email);
$query = $this->db->get();
return $query;
}
Selain menggunakan Model M_user, aplikasi ini menggunakan model barang dan
penjualan. Dikarenakan belum dibuatnya model barang dan penjualan sehingga langkah
selanjutnya membuat file Model M_barang.php dan M_penjualan.php di direktori
/application/model/. Berikut isi file untuk M_barang.php dan menambah fungsi untuk
mengambil data barang di database.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class m_barang extends CI_Model{
function jumlahBarang(){
$this->db->select('count(namaBarang) as jumBarang,sum(stok)
jumStok');
$this->db->from('barang');
$query = $this->db->get();
return $query;
}
}
?>
Dan isi file untuk M_penjualan.php dan menambah fungsi untuk menambil data
penjualan di database.
<?php if ( ! defined('BASEPATH')) exit('No direct script access
allowed');
23
class m_penjualan extends CI_Model{
function statistikPenjualan(){
$this->db->select('barang.namaBarang, SUM(penjualan.qty) AS
qty');
$this->db->from('penjualan');
$this->db->join('barang','idBarang');
$this->db->group_by('barang.namaBarang');
$this->db->order_by('penjualan.idBarang');
$query = $this->db->get();
return $query;
}
function jumlahPenjualan(){
$this->db->select('count(penjualan.idPenjualan) AS
jumTransaksi,SUM(barang.harga*qty) AS jumPendapatan');
$this->db->from('penjualan');
$this->db->join('barang','idBarang');
$query = $this->db->get();
return $query;
}
}
?>
8.5.2 View
View admin dibagi menjadi 3 file bagian yaitu header, isi, dan footer. Header dan footer
dipisahkan agar tidak terjadinya proses pengulangan pembuatan header dan footer setiap file
view admin. Buatlah sebuah folder admin di direktori /application/views agar memudahkan
pencarian file view untuk admin dan buatlah file header.php, footer.php, dan home.php pada
direktori application/views/admin/. Sebelum membuat tampilan admin, tampilan ini
membutuhkan tambah script css, buatlah file css di direktori /assets/css/ dengan nama style.css
Berikut script css dari file style.css body {
background-color: #fcfcfc;
}
#main,
footer {
padding-left: 240px;
}
.margin {
margin: 0;
}
#input-select .input-field label {
position: absolute;
top: -14px;
font-size: 0.8rem;
}
#sidenav-overlay {
background-color: transparent;
}
.container {
padding: 0 0.5rem;
margin: 0 auto;
max-width: 100% !important;
24
width: 98%;
}
#left-sidebar-nav span.badge.new{
line-height: 20px;
margin-top: 11px;
}
#content .container .row {
margin-bottom: 0;
}
@media only screen and (min-width: 601px) {
.container {
width: 98%;
}
}
@media only screen and (min-width: 993px) {
.container {
width: 98%;
}
}
@media only screen and (max-width: 993px) {
#main,
footer {
padding-left: 0px;
}
}
/*=======================================================================
==========
Header
=========================================================================
===========*/
/*----------------------------------------
Page Header
------------------------------------------*/
h1.logo-wrapper{
margin: 0px 0px;
}
h1 span.logo-text{
display: none;
}
header .brand-logo {
margin: 5px 0px;
/*padding: 0 42px;
padding: 0px 10px 0 75px;*/
padding: 0 20px;
}
@media only screen and (max-width: 992px) {
nav .nav-wrapper {
text-align: center;
}
nav .nav-wrapper a.page-title {
font-size: 36px;
}
}
/*=======================================================================
==========
Sidebar
25
=========================================================================
===========*/
ul.side-nav.fixed {
top: 64px;
}
@media only screen and (max-width: 992px) {
ul.side-nav.fixed {
top: 56px;
}
}
ul.side-nav.fixed hr {
display: block;
height: 1px;
border: 0;
border-top: 1px solid #e0e0e0;
margin: 1em 0;
padding: 0;
}
.side-nav a {
line-height: 42px;
height: 42px;
}
#left-sidebar-nav {
position: fixed;
width: 100px;
left: 180px;
z-index: 999;
height: auto;
}
#slide-out li a i {
line-height: inherit;
width: 2rem;
font-size: 1.6rem;
display: block;
float: left;
text-align: center;
margin-right: 1rem;
}
#slide-out ul.side-nav li {
padding: 0px !important;
}
ul.side-nav li {
padding: 0;
}
ul.side-nav .collapsible-header {
margin: 0;
}
.sidebar-collapse {
position: absolute;
left: -170px;
top: -45px;
}
ul.side-nav.fixed {
overflow: hidden;
}
ul.side-nav.fixed li {
line-height: 44px;
}
ul.side-nav.fixed li:hover,
26
ul.side-nav.fixed li.active {
background-color: rgba(0, 0, 0, 0.05);
}
ul.side-nav.fixed li a {
font-size: 14px;
font-weight: 400;
}
.side-nav .collapsible-body li a{
margin: 0 1rem 0 3rem;
}
ul.side-nav.fixed ul.collapsible-accordion {
background-color: #FFF;
}
ul.side-nav.fixed:hover {
/*overflow-y:hidden;*/
}
ul.side-nav.fixed li.user-details {
background: url(../images/user-bg.jpg) no-repeat center center;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
/*overflow: hidden;*/
margin-bottom: 15px;
padding: 15px 0px 0px 15px;
}
.user-details .row {
margin: 0;
}
.user-task,
.user-time {
margin: 0;
font-size: 13px;
color: #fff;
}
ul.side-nav.fixed .profile-image {
/*height: 50px;*/
}
ul.side-nav.fixed .profile-btn {
margin: 0;
text-transform: capitalize;
padding: 0;
text-shadow: 1px 1px 1px #444;
font-size: 15px;
}
.user-roal {
color: #fff;
margin-top: -16px;
font-size: 13px;
text-shadow: 1px 1px 1px #444;
}
.bold > a {
font-weight: bold;
}
nav.top-nav {
height: 122px;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
27
nav.top-nav a.page-title {
line-height: 122px;
font-size: 48px;
}
/*----------------------------------------
Cards
------------------------------------------*/
#card-stats .card-content {
text-align: center;
}
#card-stats .card-stats-title, #card-stats .card-stats-title i {
font-size: 1.2rem;
}
#card-stats .card-stats-number {
font-size: 1.8rem;
line-height: 2.0rem;
margin: 0.2rem 0 0.2rem 0;
font-weight: 500;
}
/*----------------------------------------
Grid - Flat Site Mockup
------------------------------------------*/
.col.grid-example {
border: 1px solid #eee;
margin: 7px 0;
text-align: center;
line-height: 50px;
font-size: 28px;
background-color: tomato;
color: white;
padding: 0px;
}
.col.grid-example span {
font-weight: 200;
line-height: 50px;
}
.icon_style{
position: absolute;
right: 10px;
top: 10px;
font-size: 20px;
color: white;
cursor:pointer;
}
footer.page-footer {
padding-top: 0px;
}
Berikut isi script pada file header.php:
28
<html lang="en">
<head>
<title>ADMIN</title>
<!-- CSS-->
<link href="<?php echo base_url(); ?>assets/css/materialize.css"
type="text/css" rel="stylesheet" media="screen,projection">
<link href="<?php echo base_url(); ?>assets/css/style.css"
type="text/css" rel="stylesheet" media="screen,projection">
<link href="<?php echo base_url(); ?>assets/js/plugins/data-
tables/css/jquery.dataTables.min.css" type="text/css" rel="stylesheet"
media="screen,projection">
</head>
<body>
<header id="header" class="page-topbar">
<!-- start header nav-->
<div class="navbar-fixed">
<nav class="blue">
<div class="nav-wrapper">
<h1 class="logo-wrapper"><a href="<?php echo
base_url('admin');?>" class="brand-logo darken-1">XYZ</a></h1>
</div>
</nav>
</div>
</header>
<div id="main">
<div class="wrapper">
<aside id="left-sidebar-nav">
<ul id="slide-out" class="side-nav fixed leftside-
navigation">
<li class="user-details cyan darken-2">
<div class="row">
<div class="col col s8 m8 l8">
<ul id="profile-dropdown"
class="dropdown-content">
<li><a href="<?php echo
base_url();?>admin/profil"><i class="mdi-action-face-unlock"></i>
Profile</a>
</li>
<li class="divider"></li>
<li><a href="<?php echo
base_url();?>login/logout"><i class="mdi-hardware-keyboard-tab"></i>
Logout</a>
</li>
</ul>
<a class="btn-flat dropdown-button waves-
effect waves-light white-text profile-btn" href="#" data-
activates="profile-dropdown"><?= $admin->nama?><i class="mdi-navigation-
arrow-drop-down right"></i></a>
<p class="user-roal">Administrator</p>
</div>
</div>
</li>
<li class="bold"><a href="<?php echo base_url();
?>admin" class="waves-effect waves-cyan"><i class="mdi-action-
dashboard"></i> Dashboard</a>
</li>
<li class="bold"><a href="<?php echo base_url();
29
?>barang/dataBarang" class="waves-effect waves-cyan"><i class="mdi-
action-list"></i> Data Barang</a>
<li class="bold"><a href="<?php echo base_url();
?>penjualan/dataPenjualan" class="waves-effect waves-cyan"><i class="mdi-
action-list"></i> Data Penjualan</a>
<li class="bold"><a href="<?php echo base_url();
?>petugas/dataPetugas" class="waves-effect waves-cyan"><i class="mdi-
action-list"></i> Data Petugas</a>
</ul>
<a href="#" data-activates="slide-out" class="sidebar-
collapse btn-floating btn-medium waves-effect waves-light hide-on-large-
only darken-2"><i class="mdi-navigation-menu" ></i></a>
</aside>
Berikut isi script dari footer.php :
<script type="text/javascript" src="<?php echo base_url();
?>assets/js/jquery-1.11.2.min.js"></script>
<script type="text/javascript" src="<?php echo base_url();
?>assets/js/materialize.min.js"></script>
<script type="text/javascript" src="<?php echo base_url();
?>assets/js/plugins/perfect-scrollbar/perfect-scrollbar.min.js"></script>
<script type="text/javascript" src="<?php echo base_url();
?>assets/js/plugins/data-tables/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="<?php echo base_url();
?>assets/js/plugins/data-tables/data-tables-script.js"></script>
<script type="text/javascript" src="<?php echo base_url();
?>assets/js/plugins.js"></script>
<script type="text/javascript">
$('#alert_close').click(function(){
$( "#alert_box" ).fadeOut( "slow", function() {
});
});
</script>
</body>
</html>
Berikut isi script dari Home.php
<?php
foreach($data as $data){
$nama[] = $data->namaBarang;
$qty[] = (float) $data->qty;
}
?>
<section id="content">
<div class="container">
<div id="card-stats">
<div class="row">
<div class="col s12 m6 l3">
<div class="card">
<div class="card-content green white-text">
<p class="card-stats-title"><i class="mdi-
action-shopping-cart"></i> Total Transaksi</p>
<h4 class="card-stats-number"><?php echo
$penjualan->jumTransaksi;?></h4>
</div>
<div class="card-content green darken-2">
<a href="<?php echo base_url();
30
?>penjualan/dataPenjualan" class="white-text"> >>> Cek Data Penjualan
</a>
</div>
</div>
</div>
<div class="col s12 m6 l3">
<div class="card">
<div class="card-content purple white-text">
<p class="card-stats-title"><i class="mdi-
editor-attach-money"></i>Total Pendapatan</p>
<h4 class="card-stats-number"><?php echo "Rp
".number_format( $penjualan->jumPendapatan,0,',','.') ?></h4>
</div>
<div class="card-content purple darken-2">
<a href="<?php echo base_url();
?>penjualan/dataPenjualan" class="white-text"> >>> Cek Data Pendapatan
</a>
</div>
</div>
</div>
<div class="col s12 m6 l3">
<div class="card">
<div class="card-content blue-grey white-text">
<p class="card-stats-title"><i class="mdi-
action-list"></i> Jumlah Barang</p>
<h4 class="card-stats-number"><?php echo
$barang->jumBarang;?></h4>
</div>
<div class="card-content blue-grey darken-2">
<a href="<?php echo base_url();
?>barang/dataBarang" class="white-text"> >>> Cek Data Barang </a>
</div>
</div>
</div>
<div class="col s12 m6 l3">
<div class="card">
<div class="card-content deep-purple white-text">
<p class="card-stats-title"><i class="mdi-
action-list"></i> Jumlah Stok</p>
<h4 class="card-stats-number"><?php echo
$barang->jumStok;?></h4>
</div>
<div class="card-content deep-purple darken-2">
<a href="<?php echo base_url();
?>barang/dataBarang" class="white-text"> >>> Cek Data Stok </a>
</div>
</div>
</div>
</div>
</div>
<HR>
<h4 class="center">STATISTIK PENJUALAN</h4>
<HR>
<canvas id="canvas" width="1000px" margin="auto"
height="280"></canvas>
<!--Load chart js-->
<script type="text/javascript" src="<?php echo
base_url().'assets/chartJS/chart.min.js'?>"></script>
<script>
var lineChartData = {
31
labels : <?php echo json_encode($nama);?>,
datasets : [
{
fillColor: "rgba(60,141,188,0.9)",
strokeColor: "rgba(60,141,188,0.8)",
pointColor: "#3b8bba",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(152,235,239,1)",
data : <?php echo json_encode($qty);?>
}
]
}
var myLine = new
Chart(document.getElementById("canvas").getContext("2d")).Line(lineChartD
ata);
</script>
</div>
</section>
Penjelasan dari script home.php
- Untuk memanggil data dari database, dan di inputkan sebagai array. Proses ini untuk
membuat chart
<?php
foreach($data as $data){
$nama[] = $data->namaBarang;
$qty[] = (float) $data->qty;
}
?>
- Script untuk membuat chart
<canvas id="canvas" width="1000px" margin="auto"
height="280"></canvas>
<!--Load chart js-->
<script type="text/javascript" src="<?php echo
base_url().'assets/chartJS/chart.min.js'?>"></script>
<script>
var lineChartData = {
labels : <?php echo json_encode($nama);?>,
datasets : [
{
fillColor: "rgba(60,141,188,0.9)",
strokeColor: "rgba(60,141,188,0.8)",
pointColor: "#3b8bba",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(152,235,239,1)",
data : <?php echo json_encode($qty);?>
}
]
}
var myLine = new
Chart(document.getElementById("canvas").getContext("2d")).Line(lineCha
rtData);
</script>
32
Sehingga hasil tampilan Dashbord Admin sebagai berikut :
8.5.3 Controller
Tahap selanjutnya membuat controller admin. Buatlah file controller Admin.php di
direktori /apllication/controllers dan script controller untuk file Admin.php sebagai berikut :
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class admin extends CI_Controller {
public function __construct(){
parent::__construct();
$this->load->model(array('m_user','m_barang','m_penjualan'));
date_default_timezone_set('Asia/Jakarta');
}
public function index()
{
if (!$this->session->userdata('level')=='Admin') {
redirect('login');
}else{
$data['admin'] = $this->m_user->selectAdmin()->row();
$data['data'] = $this->m_penjualan->statistikPenjualan()->result();
$data['barang'] = $this->m_barang->jumlahBarang()->row();
$data['penjualan'] = $this->m_penjualan->jumlahPenjualan()->row();
$this->load->view('admin/header',$data);
$this->load->view('admin/home');
$this->load->view('admin/footer');
}
}
}
33
?>
8.6 Menambah Data Petugas
Menambah data petugas digunakan ketika admin melakukan penambahan petugas
untuk mengoperasikan transaksi
8.6.1 Model
Dalam pembuatan tampilan tambah petugas menggunakan Model M_user.php sehingga,
hanya menambah script pada model M_user.php untuk mendapatkan ID petugas dan tambah
petugas ke database, script untuk menambah user petugas sebgai berikut:
function getkodeunik() {
$q = $this->db->query("SELECT MAX(RIGHT(idUser,2)) AS idmax FROM
user");
$kd = ""; //kode awal
if($q->num_rows()>0){ //jika data ada
foreach($q->result() as $k){
$tmp = ((int)$k->idmax)+1; //string kode diset ke integer dan ditambahkan 1
dari kode terakhir
$kd = sprintf("%02s",$tmp); //kode ambil 2 karakter terakhir
}
}else{ //jika data kosong diset ke kode awal
$kd = "01";
}
$kar = "P"; //karakter depan kodenya
//gabungkan string dengan kode yang telah dibuat tadi
return $kar.$kd;
}
function tambah(){
$idPetugas = $this->input->post('idPetugas');
$nama = $this->input->post('nama');
$email = $this->input->post('email');
$password = $this->input->post('password');
$data = array(
'idUser' =>$idPetugas,
'nama' =>$nama,
'email' =>$email,
'password'=>md5($password),
'level' =>'Petugas'
);
$this->db->insert('user',$data);
}
34
Penejeasan
- ("SELECT MAX(RIGHT(idUser,2)) AS idmax FROM user"); mengambil ID User
dan hanya mengabil 2 huruf paling kanan.
- ((int)$k->idmax)+1; string kode diset ke integer dan ditambahkan 1 dari kode
terakhir.
- sprintf("%02s",$tmp); untuk mengambil 2 angka terakhir
- $this->input->post(“”)Untuk mengambil value atau isi yang sudah di
menggunakan metode POST .
- Untuk mengisi data dari form ke atribut pada database, menggunakan script seperti
dibawah ini :
$data = array(
'idUser' =>$idPetugas,
'nama' =>$nama,
'email' =>$email,
'password'=>md5($password),
'level' =>'Petugas'
); -
- Untuk menyimpan ke database menggunakan script $this->db->insert('user',$data);
8.6.2 View
Dalam tampilan ini membutuhkan file header.php, footer.php pada folder view Admin
yang sudah dibuat sebelumnya dan membutuhkan file isi yaitu file tambahPetugas.php. Buatlah
file tambahPetugas.php pada direktori application/views/petugas/.
<section id="content">
<div class="container">
<div class="section">
<div class="divider"></div>
<!--Basic Form-->
<div id="basic-form" class="section">
<div id="table-datatables">
<h4 class="header">Tambah Petugas</h4>
<hr>
<div class="row">
<div class="col s12 m12 l12">
<div class="card-panel">
<div class="row">
<form class="col s12" action="<?php echo base_url();?>petugas/tambah"
method="POST">
<div class="row">
<div class="input-field col s1">
<input id="idPetugas" name="idPetugas" type="text" value="<?=
$kodeunik ?>" required readonly>
<label for="idPetugas" class="active">ID</label>
</div>
35
</div>
<div class="row">
<div class="input-field col s12">
<input id="nama" name="nama" type="text" required>
<label for="nama">Nama Petugas</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input id="email" name="email" type="email" required>
<label for="email">Email</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input id="password" name="password" type="password" required>
<label for="password">Password</label>
</div>
<div class="row">
<div class="input-field col s12">
<button class="btn cyan waves-effect waves-light" type="submit"
name="action">Tambah
<i class="mdi-content-send right"></i>
</button>
<a href="<?php echo base_url()?>petugas/dataPetugas" class="btn red
waves-effect waves-light right">Batal
<i class="mdi-content-undo right"></i>
</a>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
Penejelasan
- <?php echo base_url();?>petugas/tambah Untuk link ke class controller petugas
dengan fungsi tambah
Sehingga hasil dari tampilan tambah petugas sebgai berikut :
36
8.6.3 Controller
Tahap selanjutnya membuat controller mengenai barang. Buatlah file controller
Barang.php di direktori /apllication/controllers dan script controller untuk file Barang.php
sebagai berikut :
function tambah()
{
//cek login
if (!$this->session->userdata('level')=='Admin') {
redirect('login');
}else{
if($this->input->method()=='post'){
$this->m_user->tambah();
$this->session->set_flashdata('info', 'Data berhasil ditambah');
redirect('petugas/dataPetugas');
}else{
$data['admin'] = $this->m_user->selectAdmin()->row();
$data['kodeunik'] = $this->m_user->getkodeunik();
$this->load->view('admin/header',$data);
$this->load->view('admin/tambahPetugas');
$this->load->view('admin/footer');
}
}
}
37
8.7 Melihat Data Petugas
Melihat data petugas digunakan ketika admin ingin mengetahui siapa saja petugas beserta
profilnya. Berikut langkah-langkah untuk tampilan melihat petugas.
8.7.1 Model
Dalam pembuatan tampilan tambah petugas menggunakan Model M_user.php
sehingga, hanya menambah script pada model M_user.php untuk mendapatkan ID petugas dan
tambah petugas ke database, script untuk menambah user petugas sebgai berikut:
function getPetugas(){
$this->db->select('*');
$this->db->from('user');
$this->db->where('level', 'petugas');
$query = $this->db->get();
return $query;
}
8.7.2 View
Dalam tampilan ini membutuhkan file header.php, footer.php pada folder view admin
yang sudah dibuat sebelumnya dan membutuhkan file isi yaitu file dataPetugas.php. Buatlah
file tambahPetugas.php pada direktori application/views/admin/.
<section id="content">
<div class="container">
<div class="section">
<div class="divider"></div>
<div id="table-datatables">
<h4 class="header">Data Petugas</h4>
<hr>
<div class="row">
<!-- alert -->
<?php if($this->session->flashdata('info')){?>
<div class="row" id="alert_box">
<div class="col s12 m12">
<div class="card green darken-1">
<div class="row">
<div class="col s12 m10">
<div class="card-content white-text center">
<p><?php echo $this->session->flashdata('info')?></p>
</div>
</div>
<div class="col s12 m2">
<i class="mdi-content-clear icon_style" id="alert_close" aria-
hidden="true"></i>
</div>
</div>
38
</div>
</div>
</div>
<?php } ?>
<!-- End Alert -->
<div class="col s12 m8 l11">
<a href="<?php echo base_url();?>petugas/tambah" class="btn blue ">Tambah<i
class="mdi-av-playlist-add right"></i></a>
<a href="<?php echo base_url();?>petugas/export" class="btn cyan waves-effect
waves-light">Excel<i class="mdi-action-print right"></i></a>
<a class="btn waves-effect waves-light indigo" href="<?=
base_url();?>petugas/exportPDF">PDF<i class="mdi-action-print right"></i></a>
<table id="data-table-simple" class="responsive-table display"
cellspacing="0">
<thead>
<tr>
<th>ID Petugas</th>
<th>Nama Petugas</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<?php
foreach ($dataPetugas as $petugas) {
?>
<tr>
<td><?php echo $petugas->idUser ?></td>
<td><?= $petugas->nama ?></td>
<td><?= $petugas->email ?></td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
<br>
</div>
</div>
</section>
Sehingga hasil dari tampilan data petugas sebagai berikut :
39
8.7.3 Controller
Tambahkan script dibawah ini pada file controller Petugas.php :
function dataPetugas()
{
if (!$this->session->userdata('level')=='Admin') {
redirect('login');
}else{
$data['admin'] = $this->m_user->selectAdmin()->row();
$data['dataPetugas'] = $this->m_user->getPetugas()->result();
$this->load->view('admin/header',$data);
$this->load->view('admin/dataPetugas');
$this->load->view('admin/footer');
}
}
8.8 Mengubah Data Petugas
Mengubah data petugas digunakan ketika petugas melakukan ubah passwordnya.
8.8.1 Model
Dalam pembuatan tampilan mengubah petugas menggunakan Model M_user.php
sehingga, hanya menambah script pada model M_user.php untuk melakukan ubah data petugas
ke database, script untuk mengubah user petugas sebgai berikut:
function selectPetugas(){
$email = $this->session->userdata('email');
$this->db->select('*');
$this->db->from('user');
$this->db->where('email', $email);
$query = $this->db->get();
return $query;
40
}
function ubahPetugas(){
$email = $this->input->post('email');
$password = $this->input->post('password');
$this->db->set('password', md5($password));
$this->db->where('email', $email);
$this->db->update('user');
}
Penjelasan : $this->db->update('user'); untuk mengubah data ke database
8.8.2 View
Dalam tampilan ini membutuhkan file header.php, footer.php pada folder view petugas
yang sudah dibuat sebelumnya dan membutuhkan file isi yaitu file profil.php. Buatlah file
profil.php pada direktori application/views/profil/. Berikut isi script pada profil.php :
<div class="container">
<div class="row">
<div class="col s12">
<div class="card-panel">
<!-- alert -->
<?php if($this->session->flashdata('info')){?>
<div class="row" id="alert_box">
<div class="col s12 m12">
<div class="card green darken-1">
<div class="row">
<div class="col s12 m10">
<div class="card-content white-text center">
<p><?php echo $this->session->flashdata('info')?></p>
</div>
</div>
<div class="col s12 m2">
<i class="mdi-navigation-close icon_style" id="alert_close" aria-
hidden="true"></i>
</div>
</div>
</div>
</div>
</div>
<?php } ?>
<!-- End Alert -->
<h4 class="header2">Ubah Profil</h4>
<div class="row ">
<form class="col s12" method="post" enctype="multipart/form-data"
action="<?php echo base_url();?>petugas/profil">
<div class="row">
41
<div class="input-field col s12 ">
<input type="text" value="<?= $petugas->nama?>" name="nama"
readonly>
<label class="active">Nama</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input type="email" value="<?= $petugas->email?>" name="email"
readonly>
<label class="active">Email</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input type="password" name="password" required>
<label>Password</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<button class="btn blue waves-effect waves-light right" type="submit"
name="action">Ubah
<i class="mdi-content-send right"></i>
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
Penejelasan
Hasil
42
8.8.3 Controller
public function profil()
{
$data['petugas'] = $this->m_user->selectPetugas()->row();
if($this->session->userdata('level')!='Petugas') {
redirect('login');
}else{
if($this->input->method()=='post'){
$this->m_user->ubahPetugas();
$this->session->set_flashdata('info', 'Data berhasil diubah');
redirect('petugas/profil');
}else{
$this->load->view('petugas/header');
$this->load->view('petugas/profil',$data);
$this->load->view('petugas/footer');
}
}
}
43
8.9 Menambah Data Barang
Menambah data barang dilakukan oleh petugas. Untuk penambahan data barang berupa
idBarang, Foto, Nama, Harga, dan Stok.
8.9.1 Model
Model yang digunakan adalah M_barang.php yang sudah dibuat ketika membuat
dashbord Admin. Sehingga ada penambahan script pada model M_barang.php sebagai berikut:
function getkodeunik() {
$q = $this->db->query("SELECT MAX(RIGHT(idBarang,2)) AS idmax FROM
barang");
$kd = ""; //kode awal
if($q->num_rows()>0){ //jika data ada
foreach($q->result() as $k){
$tmp = ((int)$k->idmax)+1; //string kode diset ke integer dan ditambahkan 1
dari kode terakhir
$kd = sprintf("%02s",$tmp); //kode ambil 4 karakter terakhir
}
}else{ //jika data kosong diset ke kode awal
$kd = "01";
}
$kar = "B"; //karakter depan kodenya
//gabungkan string dengan kode yang telah dibuat tadi
return $kar.$kd;
}
function tambah() {
$id = $this->input->post('id');
$nama = $this->input->post('namaBarang');
$harga = $this->input->post('harga');
$stok = $this->input->post('stok');
$foto = $_FILES['foto']['name'];
$this->load->library('upload');
$config['upload_path'] = './assets/gambar'; //path folder
$config['allowed_types'] = 'gif|jpg|png|jpeg|bmp'; //type yang dapat diakses bisa
anda sesuaikan
$config['file_name'] = $nama; //nama yang terupload nantinya
$this->upload->initialize($config);
if($_FILES['foto']['name'])
{
if ($this->upload->do_upload('foto'))
{
$gbr = $this->upload->data();
define( 'WP_MEMORY_LIMIT', '256M' );
$source_url=$config['upload_path'].'/'.$gbr['file_name'];
$image = imagecreatefromjpeg($source_url);
imagejpeg($image, $config['upload_path'].'/'.$gbr['file_name'], 50);
$data = array(
'idBarang' =>$id,
44
'namaBarang' =>$nama,
'harga' =>$harga,
'stok' =>$stok,
'foto' =>$gbr['file_name']
);
}
}
$this->db->insert('barang',$data);
}
Penejelasan sebagai beriukut
- $this->load->library('upload'); untuk memanggil library upload file, yang
merupakan library bawaan dari CI
- $config['upload_path'] = './assets/gambar'; untuk penyimpanan Foto pada
folder
- $config['allowed_types'] = 'gif|jpg|png|jpeg|bmp'; hanya file gambar
yang dapat di upload
- $config['file_name'] = $nama; nama yang terupload nantinya
- $this->upload->initialize($config); melakukan konfigurasi ke libraray upload
- $this->upload->do_upload('foto'); melakukan upload foto yang name pada
form tambah barang berupa foto. (<input type=”file” name=”foto”>)
- $this->upload->data(); sudah terupload
- define( 'WP_MEMORY_LIMIT', '256M' ); File yang besar pun dapat melakukan
upload
- $image = imagecreatefromjpeg($source_url); konvert file ke jpg
- imagejpeg($image, $config['upload_path'].'/'.$gbr['file_name'], 50); untuk mengurangi kulitas gambar sebesar 50 %
8.9.2 View
Dalam tampilan ini membutuhkan file header.php, footer.php pada folder view petugas
yang sudah dibuat sebelumnya dan membutuhkan file isi yaitu file tambahBarang.php. Buatlah
file tambahBarang.php pada direktori application/views/petugas/.
<div class="container">
<div class="row">
<div class="col s12 ">
<div class="card-panel">
<!-- alert -->
<?php if($this->session->flashdata('info')){?>
<div class="row" id="alert_box">
<div class="col s12 m12">
<div class="card green darken-1">
<div class="row">
<div class="col s12 m10">
<div class="card-content white-text center">
<p><?php echo $this->session->flashdata('info')?></p>
</div>
</div>
45
<div class="col s12 m2">
<i class="mdi-navigation-close icon_style" id="alert_close" aria-
hidden="true"></i>
</div>
</div>
</div>
</div>
</div>
<?php } ?>
<!-- End Alert -->
<h4 class="header2">Tambah Barang</h4>
<div class="row">
<form class="col s12" method="post" enctype="multipart/form-data"
action="<?php echo base_url();?>barang/tambah">
<div class="row">
<div class="input-field col s1 ">
<input id="id" type="text" name="id" value="<?= $kodeunik; ?>"
readonly>
<label for="id" class="active">ID</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input id="namaBarang" type="text" name="namaBarang" required>
<label for="namaBarang">Nama Barang</label>
</div>
</div>
<div class="row">
<div class="input-field col s8">
<input id="harga" type="text" name="harga" required>
<label for="harga">Harga</label>
</div>
</div>
<div class="row">
<div class="input-field col s1">
<input id="stok" type="text" name="stok" required>
<label for="stok">Stok</label>
</div>
</div>
<div class="row">
<div class="file-field input-field col s6">
<input class="file-path validate" type="text" placeholder="Foto" readonly
required>
<div class="btn blue">
<span>Foto</span>
<input type="file" accept="image/jpeg,image/png,image/JPG" type="file"
title="Click untuk Foto" name="foto" />
</div>
</div>
<div class="row">
46
<div class="input-field col s12">
<button class="btn blue waves-effect waves-light right" type="submit"
name="action">Ubah
<i class="mdi-content-send right"></i>
</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
</div>
Penjelasan
- <input type="file" accept="image/jpeg,image/png,image/JPG" type="file"
title="Click untuk Foto" name="foto" /> ketika mau upload file melalui direktori
komputer, hanya berupa gambar saja
Sehingga tampilan menambah data barang sebagai berikut :
8.9.3 Controller
Tahap selanjutnya membuat controller mengenai barang. Buatlah file controller
47
Barang.php di direktori /apllication/controllers dan script controller untuk file Barang.php
sebagai berikut :
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class barang extends CI_Controller {
public function __construct(){
parent::__construct();
$this->load->model(array('m_barang','m_user'));
date_default_timezone_set('Asia/Jakarta');
}
function getkodeunik() {
$q = $this->db->query("SELECT MAX(RIGHT(idBarang,2)) AS idmax FROM
barang");
$kd = ""; //kode awal
if($q->num_rows()>0){ //jika data ada
foreach($q->result() as $k){
$tmp = ((int)$k->idmax)+1; //string kode diset ke integer dan ditambahkan 1
dari kode terakhir
$kd = sprintf("%02s",$tmp); //kode ambil 4 karakter terakhir
}
}else{ //jika data kosong diset ke kode awal
$kd = "01";
}
$kar = "B"; //karakter depan kodenya
//gabungkan string dengan kode yang telah dibuat tadi
return $kar.$kd;
}
function tambah()
{
if(!$this->session->userdata('level')=='Petugas') {
redirect('login');
}else{
if ($this->input->method()=='post') {
$this->m_barang->tambah();
$this->session->set_flashdata('info', 'Data berhasil ditambah');
redirect('barang/tambah');
}else{
$data['kodeunik'] = $this->m_barang->getkodeunik();
$this->load->view('petugas/header');
$this->load->view('petugas/tambahBarang',$data);
$this->load->view('petugas/footer');
}
}
}
48
}
?>
8.10 Melihat Data Barang Untuk Petugas
Melihat data barang untuk petugas digunakan ketika petugas ingin melihat barang apa
saja yang tersedia.
8.10.1 Model
Model yang digunakan adalah M_barang.php yang sudah dibuat ketika membuat
dashbord Admin. Sehingga ada penambahan script pada model M_barang.php sebagai berikut:
function getBarang(){
$this->db->select('*');
$this->db->from('barang');
$query = $this->db->get();
return $query;
}
8.10.2 View
Dalam tampilan ini membutuhkan file header.php, footer.php pada folder view petugas
yang sudah dibuat sebelumnya dan membutuhkan file isi yaitu file dataBarang.php untuk
melihat data barang. Buatlah file dataBarang.php pada direktori application/views/petugas/.
<section id="content">
<div class="container">
<div class="section">
<div class="divider"></div>
<div id="table-datatables">
<h4 class="header">Data Barang</h4>
<hr>
<div class="row">
<!-- alert -->
<?php if($this->session->flashdata('info')){?>
<div class="row" id="alert_box">
<div class="col s12 m12">
<div class="card green darken-1">
<div class="row">
<div class="col s12 m10">
<div class="card-content white-text center">
<p><?php echo $this->session->flashdata('info')?></p>
</div>
</div>
<div class="col s12 m2">
<i class="mdi-navigation-close icon_style" id="alert_close" aria-
hidden="true"></i>
49
</div>
</div>
</div>
</div>
</div>
<?php } ?>
<!-- End Alert -->
<div class="col s12 m8 l12">
<table id="data-table-simple" class="responsive-table display"
cellspacing="1">
<thead>
<tr>
<th>ID Barang</th>
<th>Foto</th>
<th>Nama Barang</th>
<th>Harga</th>
<th>Stok</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
<?php
foreach ($dataBarang as $barang) {
?>
<tr>
<td><?= $barang->idBarang ?></td>
<td><img src="<?php echo base_url('assets/gambar/'.$barang->foto); ?>"
width="100" height="100"> </td>
<td><?= $barang->namaBarang ?></td>
<td>Rp <?= number_format( $barang->harga ,0,',','.')?></td>
<td><?= $barang->stok ?></td>
<td>
<a href="<?php echo base_url(); ?>barang/ubahBarang/<?= $barang-
>idBarang ?>" rel="tooltip" title="Ubah" style="color:blue"><i class="mdi-editor-border-
color"></i></a>
</td>
</tr>
<?php }?>
</tbody>
</table>
</div>
</div>
</div>
<br>
</div>
</div>
</section>
Hasil tampilan :
50
8.10.3 Controller
Tambahkan script dibawah ini pada file controller Barang.php :
public function barang()
{
if(!$this->session->userdata('level')=='Petugas') {
redirect('login');
}else{
$data['dataBarang'] = $this->m_barang->getBarang()->result();
$this->load->view('petugas/header');
$this->load->view('petugas/dataBarang',$data);
$this->load->view('petugas/footer');
}
}
8.11 Melihat Data Barang untuk Admin
Melihat data barang untuk petugas digunakan ketika petugas ingin melihat barang apa
saja yang tersedia.
8.11.1 Model
Model yang digunakan adalah M_barang.php yang sudah dibuat ketika membuat
51
dashbord Admin. Fungsi yang digunakan adalah getBarang();.
8.11.2 View
Dalam tampilan ini membutuhkan file header.php, footer.php pada folder view admin
yang sudah dibuat sebelumnya dan membutuhkan file isi yaitu file dataBarang.php untuk
melihat data barang. Buatlah file dataBarang.php pada direktori application/views/admin/.
<section id="content">
<div class="container">
<div class="section">
<div class="divider"></div>
<!--DataTables example-->
<div id="table-datatables">
<h4 class="header">Data Barang</h4>
<hr>
<div class="row">
<!-- alert -->
<?php if($this->session->flashdata('info')){?>
<div class="row" id="alert_box">
<div class="col s12 m12">
<div class="card green darken-1">
<div class="row">
<div class="col s12 m10">
<div class="card-content white-text center">
<p><?php echo $this->session->flashdata('info')?></p>
</div>
</div>
<div class="col s12 m2">
<i class="mdi-content-clear icon_style" id="alert_close" aria-
hidden="true"></i>
</div>
</div>
</div>
</div>
</div>
<?php } ?>
<!-- End Alert -->
<div class="col s12 m8 l11">
<a href="<?php echo base_url();?>barang/export" class="btn cyan waves-effect
waves-light">Excel <i class="mdi-action-print right"></i></a>
<a class="btn waves-effect waves-light indigo" href="<?=
base_url();?>barang/exportPDF">PDF<i class="mdi-action-print right"></i></a>
<table id="data-table-simple" class="responsive-table display"
cellspacing="0">
<thead>
<tr>
<th>ID Barang</th>
52
<th>Foto</th>
<th>Nama Barang</th>
<th>Harga</th>
<th>Stok</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
<?php
foreach ($dataBarang as $barang) {
?>
<tr>
<td><?= $barang->idBarang ?></td>
<td><img src="<?php echo base_url('assets/gambar/'.$barang->foto); ?>"
width="100" height="100"> </td>
<td><?= $barang->namaBarang ?></td>
<td>Rp <?= number_format( $barang->harga ,0,',','.')?></td>
<td><?= $barang->stok ?></td>
<td>
<a href="<?php echo base_url(); ?>barang/ubah/<?= $barang->idBarang
?>" rel="tooltip" title="Ubah" style="color:purple"><i class="mdi-editor-border-
color"></i></a>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
<br>
</div>
</div>
</section>
Hasil Tampilan
53
8.11.3 Controller
Tambahkan script dibawah ini pada file controller Barang.php :
function dataBarang()
{
if(!$this->session->userdata('level')=='Admin') {
redirect('login');
}else{
$data['admin'] = $this->m_user->selectAdmin()->row();
$data['dataBarang'] = $this->m_barang->getBarang()->result();
$this->load->view('admin/header',$data);
$this->load->view('admin/dataBarang');
$this->load->view('admin/footer');
}
}
8.12 Mengubah Data Barang Untuk Petugas
Mengubah data barang untuk petugas digunakan ketika petugas melakukan pengubahan
data pada barang
8.12.1 Model
Model yang digunakan adalah M_barang.php yang sudah dibuat. Sehingga ada
penambahan script pada model M_barang.php sebagai berikut:
function ubahBarang($idBarang) {
$nama = $this->input->post('namaBarang');
$harga = $this->input->post('harga');
$stok = $this->input->post('stok');
54
$this->load->library('upload');
$config['upload_path'] = './assets/gambar'; //path folder
$config['allowed_types'] = 'gif|jpg|png|jpeg|bmp'; //type yang dapat diakses bisa
anda sesuaikan
$config['file_name'] = $nama; //nama yang terupload nantinya
$this->upload->initialize($config);
$foto = $this->m_barang->selectBarang($idBarang)->row();
if($_FILES['foto']['name'])
{
unlink("./assets/gambar/".$foto->foto);
if ($this->upload->do_upload('foto'))
{
$gbr = $this->upload->data();
define( 'WP_MEMORY_LIMIT', '256M' );
$source_url=$config['upload_path'].'/'.$gbr['file_name'];
$image = imagecreatefromjpeg($source_url);
imagejpeg($image, $config['upload_path'].'/'.$gbr['file_name'], 50);
$input = array(
'namaBarang' =>$nama,
'harga' =>$harga,
'stok' =>$stok,
'foto' =>$gbr['file_name']
);
}
}else{
rename("./assets/gambar/".$foto-
>foto,"./assets/gambar/".$config['file_name'].'.jpg');
$input = array(
'namaBarang' =>$nama,
'harga' =>$harga,
'stok' =>$stok,
'foto' =>$config['file_name'].'.jpg'
);
}
$this->db->set($input);
$this->db->where('idBarang', $idBarang);
$this->db->update('barang');
}
Penjelasan
- unlink("./assets/gambar/".$foto->foto); untuk menghapus file yang berada di folder
gambar
- rename("./assets/gambar/".$foto->foto,"./assets/gambar/".$config['file_name'].'.jpg');
untuk mengubah nama foto.
55
8.12.2 View
Dalam tampilan ini membutuhkan file header.php, footer.php pada folder view petugas
yang sudah dibuat sebelumnya dan membutuhkan file isi yaitu file ubahBarang.php untuk
mengubah data barang. Buatlah file ubahBarang.php pada direktori application/views/petugas/
<section>
<div class="container">
<div class="row">
<div class="col s12 ">
<div class="card-panel">
<!-- alert -->
<?php if($this->session->flashdata('info')){?>
<div class="row" id="alert_box">
<div class="col s12 m12">
<div class="card green darken-1">
<div class="row">
<div class="col s12 m10">
<div class="card-content white-text center">
<p><?php echo $this->session->flashdata('info')?></p>
</div>
</div>
<div class="col s12 m2">
<i class="mdi-navigation-close icon_style" id="alert_close" aria-
hidden="true"></i>
</div>
</div>
</div>
</div>
</div>
<?php } ?>
<!-- End Alert -->
<h4 class="header2">Ubah Barang</h4>
<div class="row">
<form class="col s12" method="post" enctype="multipart/form-data"
action="<?php echo base_url();?>barang/ubahBarang/<?= $dataBarang->idBarang; ?>">
<div class="row">
<div class="input-field col s1">
<input id="id" type="text" name="id" value="<?= $dataBarang->idBarang;
?>" readonly>
<label class="active" for="id">ID</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input id="namaBarang" type="text" name="namaBarang" value="<?=
$dataBarang->namaBarang; ?>">
<label class="active" for="namaBarang">Nama Barang</label>
56
</div>
</div>
<div class="row">
<div class="input-field col s8">
<input id="harga" type="text" name="harga" value="<?= $dataBarang-
>harga; ?>">
<label class="active" for="harga">Harga</label>
</div>
</div>
<div class="row">
<div class="input-field col s1">
<input id="stok" type="text" name="stok" value="<?= $dataBarang->stok;
?>">
<label class="active" for="stok">Stok</label>
</div>
</div>
<div class="row">
<label>Foto</label>
<div class="fileupload">
<input type="file" onchange="document.getElementById('image-
preview').src=window.URL.createObjectURL(this.files[0])"
accept="image/jpeg,image/png,image/JPG" type="file" title="Click untuk Foto"
name="foto" value="<?php echo set_value('foto')?>"/>
<br>
<br>
<img height="200px" width="200" src='<?php echo base_url();
?>assets/gambar/<?=$dataBarang->foto; ?>' id='image-preview' alt='your pamflet'
class='img-responsive'>
</div>
<div class="row">
<div class="input-field col s12">
<button class="btn cyan waves-effect waves-light right" type="submit"
name="action">Ubah
<i class="mdi-content-send right"></i>
</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
Penejelasan
Hasil
57
8.12.3 Controller
Tambahkan script dibawah ini pada file controller Barang.php :
public function ubahBarang($idBarang){
if(!$this->session->userdata('level')=='Admin') {
redirect('login');
}else{
if ($this->input->method()=='post') {
$this->m_barang->ubahBarang($idBarang);
$this->session->set_flashdata('info', 'Data berhasil diubah');
redirect('barang/barang');
}else{
$data['dataBarang'] = $this->m_barang->selectBarang($idBarang)->row();
$this->load->view('petugas/header');
$this->load->view('petugas/ubahBarang', $data);
$this->load->view('petugas/footer');
}
}
}
8.13 Mengubah Data Barang Untuk Admin
Mengubah data barang untuk petugas digunakan ketika petugas melakukan pengubahan
58
data pada barang.
8.13.1 Model
Model yang digunakan adalah M_barang.php yang sudah dibuat. Sehingga ada
penambahan script pada model M_barang.php sebagai berikut:
function ubah($idBarang){
$nama = $this->input->post('namaBarang');
$harga = $this->input->post('harga');
$data = array(
'namaBarang' =>$nama,
'harga' =>$harga
);
$this->db->set($data);
$this->db->where('idBarang', $idBarang);
$this->db->update('barang');
}
8.13.2 View
Dalam tampilan ini membutuhkan file header.php, footer.php pada folder view admin
yang sudah dibuat sebelumnya dan membutuhkan file isi yaitu file ubahBarang.php untuk
mengubah data barang. Buatlah file ubahBarang.php pada direktori application/views/petugas/
<section id="content">
<div class="container">
<div class="section">
<div class="divider"></div>
<!--Basic Form-->
<div id="basic-form" class="section">
<div id="table-datatables">
<h4 class="header">Ubah Barang</h4>
<hr>
<div class="row">
<div class="col s12 m12 l12">
<div class="card-panel">
<div class="row">
<form class="col s12" action="<?php echo base_url();?>barang/ubah/<?=
$dataBarang->idBarang ?>" method="POST">
<div class="row">
<div class="input-field col s1">
<input id="name" name="idBarang" type="text" value="<?=
$dataBarang->idBarang ?>" required readonly>
<label for="ID" class="active">ID</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
59
<input id="nama" name="namaBarang" type="text" value="<?=
$dataBarang->namaBarang ?>" required>
<label for="namaBarang" class="active">Nama Barang</label>
</div>
</div>
<div class="row">
<div class="input-field col s5">
<input id="harga" name="harga" type="text" value="<?= $dataBarang-
>harga ?>" required>
<label for="harga" class="active">Harga</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<button class="btn cyan waves-effect waves-light" type="submit"
name="action">Ubah
<i class="mdi-content-send right"></i>
</button>
<a href="<?php echo base_url()?>barang/dataBarang" class="btn red
waves-effect waves-light right">Batal
<i class="mdi-content-undo right"></i>
</a>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
Sehingga tampilan ubah barang untuk admin sebagai berikut :
60
8.13.3 Controller
Tambahkan script dibawah ini pada file controller Barang.php :
function ubah($idBarang){
if(!$this->session->userdata('level')=='Admin') {
redirect('login');
}else{
if ($this->input->method()=='post') {
$this->m_barang->ubah($idBarang);
$this->session->set_flashdata('info', 'Data berhasil diubah');
redirect('barang/dataBarang');
}else{
$data['admin'] = $this->m_user->selectAdmin()->row();
$data['dataBarang'] = $this->m_barang->selectBarang($idBarang)->row();
$this->load->view('admin/header', $data);
$this->load->view('admin/ubahBarang');
$this->load->view('admin/footer');
}
}
}
8.14 Menambah Data Penjualan
Menambah data penjualan dilakukan oleh petugas ketika petugas melakukan transaksi
memasukkan data penjualan.
8.14.1 Model
Model yang digunakan adalah M_penjualan.php yang sudah dibuat. Sehingga ada
penambahan script pada model M_penjualan.php sebagai berikut:
function getkodeunik() {
$q = $this->db->query("SELECT MAX(RIGHT(idPenjualan,2)) AS idmax FROM
penjualan");
$kd = ""; //kode awal
if($q->num_rows()>0){ //jika data ada
foreach($q->result() as $k){
$tmp = ((int)$k->idmax)+1; //string kode diset ke integer dan ditambahkan 1
dari kode terakhir
$kd = sprintf("%02s",$tmp); //kode ambil 4 karakter terakhir
}
}else{ //jika data kosong diset ke kode awal
61
$kd = "01";
}
$kar = "T"; //karakter depan kodenya
//gabungkan string dengan kode yang telah dibuat tadi
return $kar.$kd;
}
function tambah(){
$idPenjualan = $this->input->post('idPenjualan');
$idBarang = $this->input->post('idBarang');
$qty = $this->input->post('qty');
$tgl = date('Y/m/d');
$idPetugas = $this->session->userdata('id');
$this->load->model('m_barang');
$harga = $this->m_barang->selectBarang($idBarang)->row();
$total = $qty * $harga->harga;
$data = array(
'idPenjualan' =>$idPenjualan,
'idBarang' =>$idBarang,
'tglTransaksi'=>$tgl,
'qty' =>$qty,
'idUser' =>$idPetugas
);
$this->db->insert('penjualan',$data);
$this->db->query("UPDATE barang SET stok=stok-'$qty' WHERE idBarang=
'$idBarang'");
$this->session->set_flashdata('info', "Transaksi Berhasil, Total:Rp $total");
}
Penjelasan
- $this->db->query("UPDATE barang SET stok=stok-'$qty' WHERE idBarang=
'$idBarang'"); ketika melakukan penambahan transaksi, stok akan berkurang sesuai
qty yang dibeli
-
8.14.2 View
Dalam tampilan ini membutuhkan file header.php, footer.php pada folder view petugas
yang sudah dibuat sebelumnya dan membutuhkan file isi yaitu file tambahpenjualan.php untuk
menambah data penjualan. Buatlah file tambahPenjualan.php pada direktori
application/views/admin/
<section id="content">
<div class="container">
<div class="row">
<div class="col s12 ">
62
<div class="card-panel">
<!-- alert -->
<?php if($this->session->flashdata('info')){?>
<div class="row" id="alert_box">
<div class="col s12 m12">
<div class="card green darken-1">
<div class="row">
<div class="col s12 m10">
<div class="card-content white-text center">
<p><?php echo $this->session->flashdata('info')?></p>
</div>
</div>
<div class="col s12 m2">
<i class="mdi-navigation-close icon_style" id="alert_close" aria-
hidden="true"></i>
</div>
</div>
</div>
</div>
</div>
<?php } ?>
<!-- End Alert -->
<h4 class="header2">Penjualan</h4>
<form class="" method="post" enctype="multipart/form-data" action="<?php
echo base_url();?>penjualan/tambahPenjualan">
<div class="row col s12">
<div class="row">
<div class="input-field col s1">
<input id="idPenjualan" type="text" name="idPenjualan" value="<?=
$kodeunik; ?>" readobly>
<label for="idPenjualan" class="active">No Transaksi</label>
</div>
</div>
</div>
<div class="row">
<div class="input-field col s8">
<label for="idPenjualan" class="active">Pilih Barang</label>
<select class="browser-default" name="idBarang">
<option value="" disabled selected>---Pilih Barang---</option>
<?php foreach ($dataBarang as $barang) { ?>
<option value="<?= $barang->idBarang?>"><?= $barang-
>namaBarang?> --- Rp <?= number_format( $barang->harga ,0,',','.')?> </option>
<?php } ?>
</select>
</div>
</div>
<div class="row">
<div class="input-field col s1">
<input id="qty" type="text" name="qty" required>
<label for="qty">QTY</label>
63
</div>
</div>
<div class="row">
<div class="input-field col s12">
<button class="btn blue waves-effect waves-light right" type="submit"
name="action">Simpan
<i class="mdi-content-send right"></i>
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
Sehingga hasil tampilan tambah penjualan sebagai berikut :
64
8.14.3 Controller
Tahap selanjutnya membuat controller mengenai barang. Buatlah file controller
Barang.php di direktori /apllication/controllers dan script controller untuk file Barang.php
sebagai berikut :
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class penjualan extends CI_Controller {
public function __construct(){
parent::__construct();
$this->load->model(array('m_penjualan','m_user','m_barang'));
date_default_timezone_set('Asia/Jakarta');
}
function tambahPenjualan(){
$data['kodeunik'] = $this->m_penjualan->getkodeunik();
$data['dataBarang'] = $this->m_barang->getBarang()->result();
if ($this->input->method()=='post') {
$this->m_penjualan->tambah();
redirect('penjualan/tambahPenjualan');
}else{
$this->load->view('petugas/header');
$this->load->view('petugas/tambahPenjualan',$data);
$this->load->view('petugas/footer');
}
}
}
?>
65
8.15 Melihat Data Penjualan Untuk Petugas
Melihat data penjualan untuk petugas digunakan ketika petugas ingin melihat barang
apa saja yang sudah terjual sama petugas itu sendiri.
8.15.1 Model
Model yang digunakan adalah M_penjualan.php yang sudah dibuat. Sehingga ada
penambahan script pada model M_penjualan.php sebagai berikut:
function getPenjualanPetugas(){
$idUser = $this->session->userdata('id');
$this->db->select('penjualan.*,barang.*,user.nama');
$this->db->from('penjualan');
$this->db->join('barang','idBarang');
$this->db->join('user','idUser');
$this->db->where('idUser',$idUser);
$query = $this->db->get();
return $query;
}
8.15.2 View
Dalam tampilan ini membutuhkan file header.php, footer.php pada folder view petugas
yang sudah dibuat sebelumnya dan membutuhkan file isi yaitu file dataPenjualan.php untuk
melihat data penjualan. Buatlah file dataPenjualan.php pada direktori
application/views/petugas/
<section>
<div class="container">
<div class="section">
<div class="divider"></div>
<div id="table-datatables">
<h4 class="header">Data Penjualan</h4>
<hr>
<div class="row">
<!-- alert -->
<?php if($this->session->flashdata('info')){?>
<div class="row" id="alert_box">
<div class="col s12 m12">
<div class="card green darken-1">
<div class="row">
<div class="col s12 m10">
<div class="card-content white-text center">
<p><?php echo $this->session->flashdata('info')?></p>
</div>
</div>
<div class="col s12 m2">
<i class="mdi-navigation-close icon_style" id="alert_close" aria-
hidden="true"></i>
66
</div>
</div>
</div>
</div>
</div>
<?php } ?>
<!-- End Alert -->
<div class="col s12 m8 l12">
<table id="data-table-simple" class="responsive-table display"
cellspacing="0">
<thead>
<tr>
<th>ID Penjualan</th>
<th>Nama Barang</th>
<th>Harga</th>
<th>Tanggal</th>
<th>Qty</th>
<th>Total</th>
<th>Nama Petugas</th>
</tr>
</thead>
<tbody>
<?php
foreach ($dataPenjualan as $penjualan) {
?>
<tr>
<td><?= $penjualan->idPenjualan ?></td>
<td><?= $penjualan->namaBarang ?></td>
<td>Rp <?= number_format( $penjualan->harga ,0,',','.')?></td>
<td><?= date('d F Y', strtotime($penjualan->tglTransaksi)) ?></td>
<td><?= $penjualan->qty ?></td>
<td><?= "Rp ".number_format( $penjualan->harga*$penjualan-
>qty,0,',','.') ?></td>
<td><?= $penjualan->nama ?></td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</section>
67
Sehingga tampilan untuk melihat data barang sebagai berikut :
8.15.3 Controller
Tambahkan script dibawah ini pada file controller Penjualan.php :
function penjualan()
{
$data['dataPenjualan'] = $this->m_penjualan->getPenjualanPetugas()->result();
$this->load->view('petugas/header');
$this->load->view('petugas/dataPenjualan',$data);
$this->load->view('petugas/footer');
}
8.16 Melihat Data Penjualan Untuk Admin
Melihat data penjualan untuk admin digunakan ketika admin ingin melihat barang apa
saja yang sudah terjual dan petugas mana yang menjual barang tersebut.
68
8.16.1 Model
Model yang digunakan adalah M_penjualan.php yang sudah dibuat. Sehingga ada
penambahan script pada model M_penjualan.php sebagai berikut:
function getPenjualan(){
$this->db->select('penjualan.*,barang.*,user.nama');
$this->db->from('penjualan');
$this->db->join('barang','idBarang');
$this->db->join('user','idUser');
$this->db->order_by('idPenjualan');
$query = $this->db->get();
return $query;
}
8.16.2 View
Dalam tampilan ini membutuhkan file header.php, footer.php pada folder view admin
yang sudah dibuat sebelumnya dan membutuhkan file isi yaitu file dataPenjualan.php untuk
melihat data penjualan. Buatlah file dataPenjualan.php pada direktori application/views/admin/
<!-- START CONTENT -->
<section id="content">
<!--start container-->
<div class="container">
<div class="section">
<div class="divider"></div>
<!--DataTables example-->
<div id="table-datatables">
<h4 class="header">Data Penjualan</h4>
<hr>
<div class="row">
<!-- alert -->
<?php if($this->session->flashdata('info')){?>
<div class="row" id="alert_box">
<div class="col s12 m12">
<div class="card green darken-1">
<div class="row">
<div class="col s12 m10">
<div class="card-content white-text center">
<p><?php echo $this->session->flashdata('info')?></p>
</div>
</div>
<div class="col s12 m2">
<i class="mdi-content-clear icon_style" id="alert_close" aria-
hidden="true"></i>
</div>
</div>
69
</div>
</div>
</div>
<?php } ?>
<!-- End Alert -->
<div class="col s12 m8 l11">
<a href="<?php echo base_url();?>penjualan/export" class="btn cyan waves-
effect waves-light">Excel<i class="mdi-action-print right"></i></a>
<a class="btn waves-effect waves-light indigo" href="<?=
base_url();?>penjualan/exportPDF">PDF<i class="mdi-action-print right"></i></a>
<table id="data-table-simple" class="responsive-table display"
cellspacing="0">
<thead>
<tr>
<th>ID Penjualan</th>
<th>Nama Barang</th>
<th>Harga</th>
<th>Tanggal</th>
<th>Qty</th>
<th>Total</th>
<th>Nama Petugas</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
<?php
$total =0;
foreach ($dataPenjualan as $penjualan) {
?>
<tr>
<td><?= $penjualan->idPenjualan ?></td>
<td><?= $penjualan->namaBarang ?></td>
<td>Rp <?= number_format( $penjualan->harga ,0,',','.')?></td>
<td><?= date('d F Y', strtotime($penjualan->tglTransaksi)) ?></td>
<td><?= $penjualan->qty ?></td>
<td>Rp <?= number_format($penjualan->harga*$penjualan->qty,0,',','.')
?></td>
<td><?= $penjualan->nama ?></td>
<td>
<a href="<?php echo base_url();?>penjualan/hapus/<?= $penjualan-
>idPenjualan ?>" data-target="modal1" class="modal-trigger" style="color:red"
rel="tooltip" title="Hapus"><i class="mdi-action-delete"></i></a>
</td>
</tr>
<!-- Modal Trigger -->
70
<!-- Modal Structure -->
<div id="modal1" class="modal">
<div class="modal-content">
<h4>Apakah Yakin Dihapus?</h4>
</div>
<div class="modal-footer">
<a class="modal-action modal-close waves-effect waves-green btn-flat"
id="alert_close" aria-hidden="true"> Tidak</a>
<a href="" class="modal-action waves-effect waves-blue btn-flat">Ya</a>
</div>
</div>
<?php }?>
</tbody>
</table>
</div>
</div>
</div>
<br>
</div>
</div>
</section>
8.16.3 Controller
Tambahkan script dibawah ini pada file controller Penjualan.php :
function dataPenjualan()
{
if (!$this->session->userdata('level')=='Admin') {
redirect('login');
}else{
$data['admin'] = $this->m_user->selectAdmin()->row();
$data['dataPenjualan'] = $this->m_penjualan->getPenjualan()->result();
71
$this->load->view('admin/header',$data);
$this->load->view('admin/dataPenjualan');
$this->load->view('admin/footer');
}
}
8.17 Menghapus Data Penjualan
Menghapus data penjualan digunakan ketika admin ingin melakukan penghapusan
salah satu data penjualan:
8.17.1 Model
Model yang digunakan adalah M_penjualan.php yang sudah dibuat. Sehingga ada
penambahan script pada model M_penjualan.php sebagai berikut:
function hapus($idPenjualan){
$this->db->where('idPenjualan', $idPenjualan);
$this->db->delete('penjualan');
}
8.17.2 View
Dalam penghapusan , view yang digunakan adalah view dataPetugas.php yang
tersimpan pada folder view admin.
8.17.3 Controller
Tambahkan script dibawah ini pada file controller Penjualan.php :
function hapus($idPenjualan){
if (!$this->session->userdata('level')=='Admin') {
redirect('login');
}else{
$this->m_penjualan->hapus($idPenjualan);
$this->session->set_flashdata('info', 'SUKSESS : Berhasil di Hapus');
redirect('penjualan/dataPenjualan');
}
}
8.18 Stok Barang
Stok barang dilakukan ketika petugas melakukan penambahan atau pengurangan stok.
8.18.1 Model
Tambahkan script dibawah ini pada file model M_barang,php
function tambahStok($idBarang){
72
$query = ("UPDATE barang SET stok=stok+1 WHERE idBarang= '$idBarang'");
return $this->db->query($query);
}
function kurangStok($idBarang){
$query = ("UPDATE barang SET stok=stok-1 WHERE idBarang= '$idBarang'");
return $this->db->query($query);
}
8.18.2 View
Dalam tampilan ini membutuhkan file header.php, footer.php pada folder view petugas
yang sudah dibuat sebelumnya dan membutuhkan file isi yaitu file stok.php untuk kelola stok.
Buatlah file stok.php pada direktori application/views/petugas/
<section id="content">
<div class="container">
<div class="section">
<div class="divider"></div>
<div id="table-datatables">
<h4 class="header">Data Barang</h4>
<hr>
<div class="row">
<div class="col s12 m8 l12">
<table id="data-table-simple" class="responsive-table display"
cellspacing="1">
<thead>
<tr>
<th>ID Penjualan</th>
<th>Foto</th>
<th>Nama Barang</th>
<th>Harga</th>
<th>Tanggal</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
<?php
foreach ($dataBarang as $barang) {
?>
<tr>
<td><?= $barang->idBarang ?></td>
<td><img src="<?php echo base_url('assets/gambar/'.$barang->foto); ?>"
width="100" height="100"> </td>
<td><?= $barang->namaBarang ?></td>
<td>Rp <?= number_format( $barang->harga ,0,',','.')?></td>
<td><?= $barang->stok ?></td>
<td>
<a href="<?php echo base_url(); ?>barang/kurangstok/<?= $barang-
73
>idBarang ?>" title="Kurang" style="color:red" rel="tooltip"><i class="mdi-hardware-
keyboard-arrow-left"></i></a>
<a href="<?php echo base_url(); ?>barang/tambahstok/<?= $barang-
>idBarang ?>" title="Kurang" style="color:blue" rel="tooltip"><i class="mdi-hardware-
keyboard-arrow-right"></i></a>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
<br>
</div>
</div>
</section>
Sehingga tampilan untuk penambahan stok sebagai berikut :
8.18.3 Controller
Tambahkan script di bawah ini ke file controller Barang.php
public function stok()
{
if(!$this->session->userdata('level')=='Petugas') {
redirect('login');
}else{
$data['dataBarang'] = $this->m_barang->getBarang()->result();
$this->load->view('petugas/header');
74
$this->load->view('petugas/stok',$data);
$this->load->view('petugas/footer');
}
}
8.19 Melihat Data Member
Melihat data member merupakan proses menampilkan data member dari database ke
tampilan melihat data.
8.19.1 Model
Buatlah file model M_member dan simpan di direktori /application/model. Isi script
pada model M_member.php sebagai berikut:
<?php if ( ! defined('BASEPATH')) exit('No direct script access
allowed');
class m_member extends CI_Model{
function getMember(){
$this->db->select('*');
$this->db->from('member');
$query = $this->db->get();
return $query;
}
8.19.2 View
Dalam tampilan ini membutuhkan file header.php, footer.php pada folder view admin
yang sudah dibuat sebelumnya dan membutuhkan file isi yaitu file dataMember.php untuk
melihat data penjualan. Buatlah file dataPenjualan.php pada direktori application/views/admin/
<section id="content">
<div class="container">
<div class="section">
<div class="divider"></div>
<div id="table-datatables">
<h4 class="header">Data Member</h4>
<hr>
<div class="row">
<?php if($this->session->flashdata('info')){?>
<div class="row" id="alert_box">
<div class="col s12 m12">
<div class="card green darken-1">
<div class="row">
<div class="col s12 m10">
<div class="card-content white-text center">
<p><?php echo $this->session-
>flashdata('info')?></p>
</div>
</div>
<div class="col s12 m2">
<i class="mdi-content-clear icon_style"
75
id="alert_close" aria-hidden="true"></i>
</div>
</div>
</div>
</div>
</div>
<?php } ?>
<!-- End Alert -->
<div class="col s12 m8 l11">
<a href="<?php echo base_url();?>member/import"
class="btn blue ">Import Data Dari Excel<i class="mdi-av-playlist-add
right"></i></a>
<table id="data-table-simple" class="responsive-table
display" cellspacing="0">
<thead>
<tr>
<th>No</th>
<th>Nama</th>
<th>Jenis Kelamin</th>
<th>Alamat</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
<?php $no=1; foreach ($member as $member) {?>
<tr>
<td><?= $no ?></td>
<td><?= $member->nama ?></td>
<td><?= $member->jk ?></td>
<td><?= $member->alamat ?></td>
<td>
<a href="<?php echo
base_url();?>member/hapus/<?= $member->idMember ?>" data-target="modal1"
class="modal-trigger" style="color:red" rel="tooltip" title="Hapus"><i
class="mdi-action-delete"></i></a>
</td>
</tr>
<?php $no++; } ?>
</tbody>
</table>
</div>
</div>
</div>
<br>
</div>
</div>
</section>
8.19.3 Controller
Langkah selanjutnya membuat File Controller Member.php pada direktori
application/model/ dan isi script dibawah ini pada file controller Member.php :
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class member extends CI_Controller {
public function __construct(){
parent::__construct();
$this->load->model(array('m_member','m_user'));
76
date_default_timezone_set('Asia/Jakarta');
}
public function dataMember()
{
if (!$this->session->userdata('level')=='Admin') {
redirect('login');
}else{
$data['admin'] = $this->m_user->selectAdmin()->row();
$data['member'] = $this->m_member->getMember()->result();
$this->load->view('admin/header',$data);
$this->load->view('admin/dataMember');
$this->load->view('admin/footer');
}
}
}
?>
9 Laporan File Excel
Laporan file Ecxel digunakan ketika admin melakukan export file data ke file excel.
9.1.1 Laporan Data Barang
Laporan yang formatnya ecxel yang berisi mengenai data-data barang. Dalam tahap
pembuatan export/print data barang yaitu tambahkan script di bawah ini di Controller
Barang.php :
function export(){
if(!$this->session->userdata('level')=='Admin') {
redirect('login');
}else{
// Panggil class PHPExcel nya
$excel = new PHPExcel();
$path = $_SERVER['DOCUMENT_ROOT'] . '/assets/gambar/';
// Settingan awal fil excel
$excel->getProperties()->setCreator('XYZ')
->setLastModifiedBy('XYZ')
->setTitle("Data Barang")
->setSubject("Barang")
->setDescription("Laporan Semua Data Barang")
->setKeywords("Data Barang");
// Buat sebuah variabel untuk menampung pengaturan style dari header tabel
// Buat sebuah variabel untuk menampung pengaturan style dari header tabel
$style_col = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('rgb'=>'E1E0F7'),
),
77
'font' => array('bold' => true), // Set font nya jadi bold
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, // Set
text jadi ditengah secara horizontal (center)
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER // Set text
jadi di tengah secara vertical (middle)
),
'borders' => array(
'outline' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
),
),
);
// Buat sebuah variabel untuk menampung pengaturan style dari isi tabel
$style_row = array(
'alignment' => array(
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER // Set text
jadi di tengah secara vertical (middle)
),
'borders' => array(
'outline' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
),
),
);
$excel->setActiveSheetIndex(0)->setCellValue('A1', "DATA BARANG"); // Set
kolom A1 dengan tulisan "DATA BARANG"
$excel->getActiveSheet()->mergeCells('A1:E1'); // Set Merge Cell pada kolom A1
sampai E1
$excel->getActiveSheet()->getStyle('A1')->getFont()->setBold(TRUE); // Set bold
kolom A1
$excel->getActiveSheet()->getStyle('A1')->getFont()->setSize(15); // Set font size
15 untuk kolom A1
$excel->getActiveSheet()->getStyle('A1')->getAlignment()-
>setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // Set text center
untuk kolom A1
// Buat header tabel nya pada baris ke 3
$excel->setActiveSheetIndex(0)->setCellValue('A3', "NO"); // Set kolom A3
dengan tulisan
$excel->setActiveSheetIndex(0)->setCellValue('B3', "Id Barang"); // Set kolom B3
dengan tulisan
$excel->setActiveSheetIndex(0)->setCellValue('C3', "Nama Barang"); // Set kolom
C3 dengan tulisan
$excel->setActiveSheetIndex(0)->setCellValue('D3', "Harga"); // Set kolom D3
dengan tulisan
$excel->setActiveSheetIndex(0)->setCellValue('E3', "Stok"); // Set kolom D3
dengan tulisan
78
// Apply style header yang telah kita buat tadi ke masing-masing kolom header
$excel->getActiveSheet()->getStyle('A3')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('B3')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('C3')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('D3')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('E3')->applyFromArray($style_col);
// Panggil function view yang ada di Barang Model untuk menampilkan semua data
barangnya
$dataBarang = $this->m_barang->getBarang()->result();
$no = 1; // Untuk penomoran tabel, di awal set dengan 1
$numrow = 4; // Set baris pertama untuk isi tabel adalah baris ke 4
foreach($dataBarang as $data){ // Lakukan looping pada variabel barang
$excel->setActiveSheetIndex(0)->setCellValue('A'.$numrow, $no);
$excel->setActiveSheetIndex(0)->setCellValue('B'.$numrow, $data->idBarang);
$excel->setActiveSheetIndex(0)->setCellValue('C'.$numrow, $data-
>namaBarang);
$excel->setActiveSheetIndex(0)->setCellValue('D'.$numrow, 'Rp'. $data-
>harga);
$excel->setActiveSheetIndex(0)->setCellValue('E'.$numrow, $data->stok);
// Apply style row yang telah kita buat tadi ke masing-masing baris (isi tabel)
$excel->getActiveSheet()->getStyle('A'.$numrow)-
>applyFromArray($style_row);
$excel->getActiveSheet()->getStyle('B'.$numrow)-
>applyFromArray($style_row);
$excel->getActiveSheet()->getStyle('C'.$numrow)-
>applyFromArray($style_row);
$excel->getActiveSheet()->getStyle('D'.$numrow)-
>applyFromArray($style_row);
$excel->getActiveSheet()->getStyle('E'.$numrow)-
>applyFromArray($style_row);
$no++; // Tambah 1 setiap kali looping
$numrow++; // Tambah 1 setiap kali looping
}
// Set width kolom
$excel->getActiveSheet()->getColumnDimension('A')->setWidth(5); // Set width
kolom A
$excel->getActiveSheet()->getColumnDimension('B')->setWidth(15); // Set width
kolom B
$excel->getActiveSheet()->getColumnDimension('C')->setWidth(25); // Set width
kolom C
$excel->getActiveSheet()->getColumnDimension('D')->setWidth(20); // Set width
kolom D
$excel->getActiveSheet()->getColumnDimension('E')->setWidth(5); // Set width
kolom E
79
// Set height semua kolom menjadi auto (mengikuti height isi dari kolommnya, jadi
otomatis)
$excel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(-1);
// Set orientasi kertas jadi LANDSCAPE
$excel->getActiveSheet()->getPageSetup()-
>setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
// Set judul file excel nya
$excel->getActiveSheet(0)->setTitle("Laporan Data Barang");
$excel->setActiveSheetIndex(0);
// Proses file excel
header('Content-Type: application/vnd.openxmlformats-
officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="Data Barang.xlsx"'); // Set
nama file excel nya
header('Cache-Control: max-age=0');
$write = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
$write->save('php://output');
}
}
9.1.2 Laporan Data Penjualan
Laporan yang formatnya ecxel yang berisi mengenai data-data penjualan. Dalam tahap
pembuatan export/print data penjualan yaitu tambahkan script di bawah ini di Controller
Penjualan.php :
function export(){
if (!$this->session->userdata('level')=='Admin') {
redirect('login');
}else{
// Panggil class PHPExcel nya
$excel = new PHPExcel();
// Settingan awal fil excel
$excel->getProperties()->setCreator('XYZ')
->setLastModifiedBy('XYZ')
->setTitle("Data Penjualan")
->setSubject("Penjualan")
->setDescription("Laporan Semua Data Penjualan")
->setKeywords("Data Penjualan");
// Buat sebuah variabel untuk menampung pengaturan style dari header tabel
$style_col = array(
'fill' => array(
80
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('rgb'=>'E1E0F7'),
),
'font' => array('bold' => true), // Set font nya jadi bold
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, // Set
text jadi ditengah secara horizontal (center)
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER // Set text
jadi di tengah secara vertical (middle)
),
'borders' => array(
'outline' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
),
),
);
// Buat sebuah variabel untuk menampung pengaturan style dari isi tabel
$style_row = array(
'alignment' => array(
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER // Set text
jadi di tengah secara vertical (middle)
),
'borders' => array(
'outline' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
),
),
);
$excel->setActiveSheetIndex(0)->setCellValue('A1', "Data Penjualan"); // Set
kolom A1
$excel->setActiveSheetIndex(0)->setCellValue('A1', "Data Penjualan"); // Set
kolom A1
$excel->getActiveSheet()->mergeCells('A1:H1'); // Set Merge Cell pada kolom A1
sampai E1
$excel->getActiveSheet()->getStyle('A1')->getFont()->setBold(TRUE); // Set bold
kolom A1
$excel->getActiveSheet()->getStyle('A1')->getFont()->setSize(15); // Set font size
15 untuk kolom A1
$excel->getActiveSheet()->getStyle('A1')->getAlignment()-
>setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // Set text center
untuk kolom A1
$excel->setActiveSheetIndex(0)->setCellValue('A3', "Tanggal Cetak : ".date("d F
Y")); // Set kolom A3 dengan tulisan
// Buat header tabel nya pada baris ke 3
$excel->setActiveSheetIndex(0)->setCellValue('A4', "NO"); // Set kolom A3
dengan tulisan
81
$excel->setActiveSheetIndex(0)->setCellValue('B4', "Id Penjualan"); // Set kolom
B3 dengan tulisan
$excel->setActiveSheetIndex(0)->setCellValue('C4', "Nama Barang"); // Set kolom
C3 dengan tulisan
$excel->setActiveSheetIndex(0)->setCellValue('D4', "Harga"); // Set kolom D3
dengan tulisan
$excel->setActiveSheetIndex(0)->setCellValue('E4', "Tgl Transaksi"); // Set kolom
D3 dengan tulisan
$excel->setActiveSheetIndex(0)->setCellValue('F4', "QTY"); // Set kolom D3
dengan tulisan
$excel->setActiveSheetIndex(0)->setCellValue('G4', "Total"); // Set kolom D3
dengan tulisan
$excel->setActiveSheetIndex(0)->setCellValue('H4', "Petugas"); // Set kolom D3
dengan tulisan
// Apply style header yang telah kita buat tadi ke masing-masing kolom header
$excel->getActiveSheet()->getStyle('A4')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('B4')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('C4')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('D4')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('E4')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('F4')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('G4')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('H4')->applyFromArray($style_col);
// Panggil function view yang ada di BarangModel untuk menampilkan semua data
barangnya
$dataPenjualan = $this->m_penjualan->getPenjualan()->result();
$no = 1; // Untuk penomoran tabel, di awal set dengan 1
$numrow = 5; // Set baris pertama untuk isi tabel adalah baris ke 4
foreach($dataPenjualan as $data){ // Lakukan looping pada variabel barang
$excel->setActiveSheetIndex(0)->setCellValue('A'.$numrow, $no);
$excel->setActiveSheetIndex(0)->setCellValue('B'.$numrow, $data-
>idPenjualan);
$excel->setActiveSheetIndex(0)->setCellValue('C'.$numrow, $data-
>namaBarang);
$excel->setActiveSheetIndex(0)->setCellValue('D'.$numrow, 'Rp'. $data-
>harga);
$excel->setActiveSheetIndex(0)->setCellValue('E'.$numrow, date('d F Y',
strtotime($data->tglTransaksi)));
$excel->setActiveSheetIndex(0)->setCellValue('F'.$numrow, $data->qty);
$excel->setActiveSheetIndex(0)->setCellValue('G'.$numrow, 'Rp '.
number_format($data->harga*$data->qty,0,',','.'));
$excel->setActiveSheetIndex(0)->setCellValue('H'.$numrow, $data->nama);
// Apply style row yang telah kita buat tadi ke masing-masing baris (isi tabel)
$excel->getActiveSheet()->getStyle('A'.$numrow)-
>applyFromArray($style_row);
$excel->getActiveSheet()->getStyle('B'.$numrow)-
82
>applyFromArray($style_row);
$excel->getActiveSheet()->getStyle('C'.$numrow)-
>applyFromArray($style_row);
$excel->getActiveSheet()->getStyle('D'.$numrow)-
>applyFromArray($style_row);
$excel->getActiveSheet()->getStyle('E'.$numrow)-
>applyFromArray($style_row);
$excel->getActiveSheet()->getStyle('F'.$numrow)-
>applyFromArray($style_row);
$excel->getActiveSheet()->getStyle('G'.$numrow)-
>applyFromArray($style_row);
$excel->getActiveSheet()->getStyle('H'.$numrow)-
>applyFromArray($style_row);
$no++; // Tambah 1 setiap kali looping
$numrow++; // Tambah 1 setiap kali looping
}
// Set height semua kolom menjadi auto (mengikuti height isi dari kolommnya, jadi
otomatis)
$excel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(-1);
// Set orientasi kertas jadi LANDSCAPE
$excel->getActiveSheet()->getPageSetup()-
>setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
// Set judul file excel nya
$excel->getActiveSheet(0)->setTitle("Laporan Data Penjualan");
$excel->setActiveSheetIndex(0);
// Proses file excel
header('Content-Type: application/vnd.openxmlformats-
officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="Data Penjualan.xlsx"'); // Set
nama file excel nya
header('Cache-Control: max-age=0');
$write = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
$write->save('php://output');
}
}
9.1.3 Laporan Data Petugas
Laporan yang formatnya ecxel yang berisi mengenai data-data petugas. Dalam tahap
pembuatan export/print data barang yaitu tambahkan script di bawah ini di Controller
Petugas.php :
83
function export(){
//admin
if (!$this->session->userdata('level')=='Admin') {
redirect('login');
}else{
$excel = new PHPExcel();
// Settingan awal fil excel
$excel->getProperties()->setCreator('XYZ')
->setLastModifiedBy('XYZ')
->setTitle("Data Petugas")
->setSubject("Petugas")
->setDescription("Laporan Semua Data Petugas")
->setKeywords("Data Petugas");
// Buat sebuah variabel untuk menampung pengaturan style dari header tabel
// Buat sebuah variabel untuk menampung pengaturan style dari header tabel
$style_col = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('rgb'=>'E1E0F7'),
),
'font' => array('bold' => true), // Set font nya jadi bold
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, // Set
text jadi ditengah secara horizontal (center)
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER // Set text
jadi di tengah secara vertical (middle)
),
'borders' => array(
'outline' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
),
),
);
// Buat sebuah variabel untuk menampung pengaturan style dari isi tabel
$style_row = array(
'alignment' => array(
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER // Set text
jadi di tengah secara vertical (middle)
),
'borders' => array(
'outline' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
),
),
84
);
$excel->setActiveSheetIndex(0)->setCellValue('A1', "DATA Petugas"); // Set
kolom A1 dengan tulisan "DATA BARANG"
$excel->getActiveSheet()->mergeCells('A1:E1'); // Set Merge Cell pada kolom A1
sampai E1
$excel->getActiveSheet()->getStyle('A1')->getFont()->setBold(TRUE); // Set bold
kolom A1
$excel->getActiveSheet()->getStyle('A1')->getFont()->setSize(15); // Set font size
15 untuk kolom A1
$excel->getActiveSheet()->getStyle('A1')->getAlignment()-
>setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // Set text center
untuk kolom A1
// Buat header tabel nya pada baris ke 3
$excel->setActiveSheetIndex(0)->setCellValue('A3', "NO"); // Set kolom A3
dengan tulisan
$excel->setActiveSheetIndex(0)->setCellValue('B3', "Id Petugas"); // Set kolom B3
dengan tulisan
$excel->setActiveSheetIndex(0)->setCellValue('C3', "Nama"); // Set kolom C3
dengan tulisan
$excel->setActiveSheetIndex(0)->setCellValue('D3', "Email"); // Set kolom D3
dengan tulisan "//$excel->setActiveSheetIndex(0)->setCellValue('E3', "Foto"); // Set kolom
E3 dengan tulisan
// Apply style header yang telah kita buat tadi ke masing-masing kolom header
$excel->getActiveSheet()->getStyle('A3')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('B3')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('C3')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('D3')->applyFromArray($style_col);
// Panggil function view yang ada di BarangModel untuk menampilkan semua data
barangnya
$dataPetugas = $this->m_user->getPetugas()->result();
$no = 1; // Untuk penomoran tabel, di awal set dengan 1
$numrow = 4; // Set baris pertama untuk isi tabel adalah baris ke 4
foreach($dataPetugas as $data){ // Lakukan looping pada variabel barang
$objDrawing = new PHPExcel_Worksheet_Drawing();
$excel->setActiveSheetIndex(0)->setCellValue('A'.$numrow, $no);
$excel->setActiveSheetIndex(0)->setCellValue('B'.$numrow, $data->idUser);
$excel->setActiveSheetIndex(0)->setCellValue('C'.$numrow, $data->nama);
$excel->setActiveSheetIndex(0)->setCellValue('D'.$numrow, $data->email);
//$excel->setActiveSheetIndex(0)->setCellValue('E'.$numrow, $objDrawing-
>setPath(base_url().'assets/gambar/'.$data->foto));
// Apply style row yang telah kita buat tadi ke masing-masing baris (isi tabel)
$excel->getActiveSheet()->getStyle('A'.$numrow)-
>applyFromArray($style_row);
$excel->getActiveSheet()->getStyle('B'.$numrow)-
>applyFromArray($style_row);
85
$excel->getActiveSheet()->getStyle('C'.$numrow)-
>applyFromArray($style_row);
$excel->getActiveSheet()->getStyle('D'.$numrow)-
>applyFromArray($style_row);
$no++; // Tambah 1 setiap kali looping
$numrow++; // Tambah 1 setiap kali looping
}
// Set width kolom
$excel->getActiveSheet()->getColumnDimension('A')->setWidth(5); // Set width
kolom A
$excel->getActiveSheet()->getColumnDimension('B')->setWidth(15); // Set width
kolom B
$excel->getActiveSheet()->getColumnDimension('C')->setWidth(25); // Set width
kolom C
$excel->getActiveSheet()->getColumnDimension('D')->setWidth(20); // Set width
kolom D
// Set height semua kolom menjadi auto (mengikuti height isi dari kolommnya, jadi
otomatis)
$excel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(-1);
// Set orientasi kertas jadi LANDSCAPE
$excel->getActiveSheet()->getPageSetup()-
>setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
// Set judul file excel nya
$excel->getActiveSheet(0)->setTitle("Laporan Data Petugas");
$excel->setActiveSheetIndex(0);
// Proses file excel
header('Content-Type: application/vnd.openxmlformats-
officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="Data Petugas.xlsx"'); // Set
nama file excel nya
header('Cache-Control: max-age=0');
$write = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
$write->save('php://output');
}
}
10 Laporan File PDF
Laporan file pdf digunakan ketika admin melakukan export/print laporan data ke file pdf.
Dalam tahap ini, langkah pertama buatlah folder laporan di direktori application/views/admin.
86
10.1.1 Laporan Data Barang
Laporan yang formatnya pdf yang berisi mengenai data-data barang. Dalam tahap
pembuatan export/print data barang yaitu tambahkan file php di direktori
/application/views/admin/laporan dengan laporanBarang.php dan tambahkan isi script di
bawah ini:
<!DOCTYPE html>
<html>
<head>
<style>
#a {
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
}
#a td, #a th {
border: 1px solid #ddd;
padding: 8px;
}
#a tr:nth-child(even){background-color: #f2f2f2;}
#a tr:hover {background-color: #ddd;}
#a th {
padding-top: 12px;
padding-bottom: 12px;
text-align: left;
background-color: #4CAF50;
color: white;
}
</style>
</head>
<body>
<H2 style="text-align:center"> Data Barang</H2>
<p>Tanggal Cetak : <?= date('d F Y'); ?></p>
<table id="a">
<tr>
<th>ID Barang</th>
<th>Foto</th>
<th>Nama Barang</th>
<th>Harga</th>
<th>Stok</th>
</tr>
<?php
foreach ($dataBarang as $barang) {
?>
87
<tr>
<td><?= $barang->idBarang ?></td>
<td><img src="<?php echo base_url('assets/gambar/'.$barang-
>foto); ?>" width="100" height="100"> </td>
<td><?= $barang->namaBarang ?></td>
<td><?= $barang->harga ?></td>
<td><?= $barang->stok ?></td>
</tr>
<?php } ?>
</table>
</body>
</html>
Tahap selanjutnya menambah script di bawah ini di Controller Barang.php :
public function exportPDF(){
$data['dataBarang'] = $this->m_barang->getBarang()->result();
$tgl = date("Y/m/d");
$this->pdf->load_view('admin/laporan/laporanBarang',$data);
$this->pdf->render();
set_time_limit (500);
$this->pdf->stream("Laporan-Barang".$tgl.".pdf");
}
10.1.2 Laporan Data Penjualan
Laporan yang formatnya pdf yang berisi mengenai data-data penjualan. Dalam tahap
pembuatan export/print data penjualan yaitu tambahkan file php di direktori
/application/views/admin/laporan dengan laporanPenjualan.php dan tambahkan isi script di
bawah ini:
<!DOCTYPE html>
<html>
<head>
<style>
#a {
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
}
#a td, #a th {
border: 1px solid #ddd;
padding: 8px;
}
88
#a tr:nth-child(even){background-color: #f2f2f2;}
#a tr:hover {background-color: #ddd;}
#a th {
padding-top: 12px;
padding-bottom: 12px;
text-align: left;
background-color: #4CAF50;
color: white;
}
</style>
</head>
<body>
<H2 style="text-align:center"> Data Penjualan</H2>
<p>Tanggal Cetak : <?= date('d F Y'); ?></p>
<table id="a">
<tr>
<th>ID Penjualan</th>
<th>Nama Barang</th>
<th>Harga</th>
<th>Tanggal Transaksi</th>
<th>Kuantitas</th>
<th>Total</th>
<th>Nama Petugas</th>
</tr>
<?php
foreach ($dataPenjualan as $penjualan) {
?>
<tr>
<td><?= $penjualan->idPenjualan ?></td>
<td><?= $penjualan->namaBarang ?></td>
<td><?= number_format( $penjualan->harga ,0,',','.')?></td>
<td><?= date('d F Y', strtotime($penjualan->tglTransaksi)) ?></td>
<td><?= $penjualan->qty ?></td>
<td>Rp <?= number_format( $penjualan->harga*$penjualan->qty ,0,',','.')?></td>
<td><?= $penjualan->nama ?></td>
</tr>
<?php } ?>
</table>
</body>
</html>
Tahap selanjutnya tambahakan script di bawah ini di Controller Penjualan.php
function exportPDF(){
$data['dataPenjualan'] = $this->m_penjualan->getPenjualan()->result();
$this->pdf->load_view('admin/laporan/laporanPenjualan',$data);
89
$tgl = date("d/m/Y");
$this->pdf->render();
$this->pdf->stream("Laporan-Penjualan_".$tgl.".pdf");
}
10.1.3 Laporan Data Petugas
Laporan yang formatnya pdf yang berisi mengenai data-data petugas. Dalam tahap
pembuatan export/print data petugas yaitu tambahkan file php di direktori
/application/views/admin/laporan dengan laporanPetugas.php dan tambahkan isi script di
bawah ini:
<!DOCTYPE html>
<html>
<head>
<style>
#a {
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
}
#a td, #a th {
border: 1px solid #ddd;
padding: 8px;
}
#a tr:nth-child(even){background-color: #f2f2f2;}
#a tr:hover {background-color: #ddd;}
#a th {
padding-top: 12px;
padding-bottom: 12px;
text-align: left;
background-color: #4CAF50;
color: white;
}
</style>
</head>
<body>
<H2 style="text-align:center"> Data Petugas</H2>
<p>Tanggal Cetak : <?= date('d F Y'); ?></p>
<table id="a">
<tr>
<th>ID Penjualan</th>
<th>Nama Barang</th>
<th>Email</th>
</tr>
90
<?php
foreach ($dataPetugas as $petugas) {
?>
<tr>
<td><?= $petugas->idUser ?></td>
<td><?= $petugas->nama ?></td>
<td><?= $petugas->email ?></td>
</tr>
<?php } ?>
</table>
</body>
</html>
Tambahkan script dibawah ini di Controller Petugas:
function exportPDF(){
$data['dataPetugas'] = $this->m_user->getPetugas()->result();
$this->pdf->load_view('admin/laporan/laporanPetugas',$data);
$tgl = date("d/m/Y");
$this->pdf->render();
$this->pdf->stream("Laporan-Petugas_".$tgl.".pdf");
}
11 Import Data dari Excel ke Database (Import Data Member)
Import data dari excel ke database merupakan langkah untuk mengambil data dari excel
kemudian memasukkan ke database.
1. Menambah script model di M_member.php yang sudah kita buat. Tambahkan
script/fungsi seperti dibawah ini :
function upload_file($filename){
$this->load->library('upload'); // Load librari upload
$config['upload_path'] = './excel/';
$config['allowed_types'] = 'xlsx';
$config['max_size'] = '2048';
$config['overwrite'] = true;
$config['file_name'] = $filename;
$this->upload->initialize($config); // Load konfigurasi uploadnya
if($this->upload->do_upload('file')){ // Lakukan upload dan Cek jika proses
upload berhasil
// Jika berhasil :
91
$return = array('result' => 'success', 'file' => $this->upload->data(), 'error' =>
'');
return $return;
}else{
// Jika gagal :
$return = array('result' => 'failed', 'file' => '', 'error' => $this->upload-
>display_errors());
return $return;
}
}
2. Dalam tampilan ini membutuhkan file header.php, footer.php pada folder view admin
yang sudah dibuat sebelumnya dan membutuhkan file isi yaitu file import.php untuk
menambah form input file excel. Buatlah file import.php pada direktori
application/views/admin/
<?php if(isset($upload_error)){ // Jika proses upload gagal
echo "<div style='color: red;'>".$upload_error."</div>"; //
Muncul pesan error upload
echo "<a href='".base_url()."member/dataMember'>Kembali</a>"; //
Muncul pesan error upload
die; // stop skrip
} ?>
<section id="content">
<div class="container">
<div class="section">
<div class="divider"></div>
<!--Basic Form-->
<div id="basic-form" class="section">
<h4 class="header">Tambah Member</h4>
<hr>
<div class="row">
<div class="col s12 m12 l12">
<div class="card-panel">
<div class="row">
<form class="col s12" method="post"
enctype="multipart/form-data" action="">
<a href="<?php echo
92
base_url("excel/format.xlsx"); ?>">Download Format</a>
<div class="row">
<div class="input-field col s12">
<input class="btn cyan waves-
effect waves-light" type="file" name="file">
<button class="btn blue waves-
effect waves-light right" type="submit" name="preview">Lihat
</button>
<br>
<br>
</div>
</div>
</form>
<?php
if(isset($_POST['preview'])){ // Jika user menekan tombol
Preview pada form
?>
<form method='post' action="<?php echo
base_url('member/tambah')?>">
<hr>
<h5 align="center">Lihat Data</h5>
<hr>
<div class="col s12">
<table id="data-table-simple" class="responsive-table
display" cellspacing="0">
<thead>
<tr>
<th>No</th>
<th>Nama</th>
<th>Jenis Kelamin</th>
<th>Alamat</th>
</tr>
</thead>
<?php
$numrow = 1;
$kosong = 0;
foreach($sheet as $row){
$no = $row['A'];
$nama = $row['B'];
$jk = $row['C'];
$alamat = $row['D'];
93
if(empty($no) && empty($nama) && empty($jk) &&
empty($alamat))
continue;
if($numrow > 1){
// Validasi apakah semua data telah diisi
$no_td = ( ! empty($no))? "" : " style='background:
#E07171;'"; // Jika kosong, beri warna merah
$nama_td = ( ! empty($nama))? "" : " style='background:
#E07171;'"; // Jika Nama kosong, beri warna merah
$jk_td = ( ! empty($jk))? "" : " style='background:
#E07171;'"; // Jika Jenis Kelamin kosong, beri warna merah
$alamat_td = ( ! empty($alamat))? "" : "
style='background: #E07171;'"; // Jika Alamat kosong, beri warna
merah
echo "<tr>";
echo "<td".$no_td.">".$no."</td>";
echo "<td".$nama_td.">".$nama."</td>";
echo "<td".$jk_td.">".$jk."</td>";
echo "<td".$alamat_td.">".$alamat."</td>";
echo "</tr>";
}
$numrow++; // Tambah 1 setiap kali looping
}
echo "</table>";
// Cek apakah variabel kosong lebih dari 1
// Jika lebih dari 1, berarti ada data yang masih kosong
if($kosong > 1){
?>
<script>
$(document).ready(function(){
// Ubah isi dari tag span dengan id jumlah_kosong dengan
isi dari variabel kosong
$("#jumlah_kosong").html('<?php echo $kosong; ?>');
$("#kosong").show(); // Munculkan alert validasi kosong
});
</script>
<?php
}else{
?>
<hr>
94
<div class="row">
<div class="input-field col s12">
<button class="btn cyan waves-effect waves-light"
type="submit" name="action">Tambah
<i class="mdi-content-send right"></i>
</button>
<a href="<?php echo base_url()?>member/dataMember"
class="btn red waves-effect waves-light right">Batal
<i class="mdi-content-undo right"></i>
</a>
</div>
</div>
<?php
}
echo "</form>";
}
?>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
Hasil Tampilan Sebelum memasukkan file dan memilih tombol Lihat
95
Dana hasil tampilan ketika sudah memasukkan file dan memilih tombol Lihat
3. Menambahkan sebuah controller
Tambahkan scrip di bawah ini pada controller Member.php
public function import()
{
$data['admin'] = $this->m_user->selectAdmin()-
>row();
if (!$this->session->userdata('level')=='Admin') {
redirect('login');
}else{
if(isset($_POST['preview'])){ // Jika user menekan
tombol Preview pada form
// lakukan upload file dengan memanggil
function upload yang ada di BarangModel.php
$upload = $this->m_member->upload_file($this-
>filename);
if($upload['result'] == "success"){ // Jika
proses upload sukses
// Load plugin PHPExcel nya
$excelreader = new
PHPExcel_Reader_Excel2007();
$loadexcel = $excelreader-
>load('excel/'.$this->filename.'.xlsx'); // Load file yang tadi
diupload ke folder excel
$sheet = $loadexcel->getActiveSheet()-
>toArray(null, true, true ,true);
// Masukan variabel $sheet ke dalam array
data yang nantinya akan di kirim ke file form.php
// Variabel $sheet tersebut berisi data-
data yang sudah diinput di dalam excel yang sudha di upload
96
sebelumnya
$data['sheet'] = $sheet;
}else{ // Jika proses upload gagal
$data['upload_error'] = $upload['error'];
// Ambil pesan error uploadnya untuk dikirim ke file form dan
ditampilkan
$this->load->view('admin/header',$data);
$this->load->view('admin/tambahmember');
$this->load->view('admin/footer');
}
}
$data['member'] = $this->m_member->getMember()-
>result();
$this->load->view('admin/header',$data);
$this->load->view('admin/tambahmember');
$this->load->view('admin/footer');
}
}
4. Setelah tambahkan FOLDER dengan nama Excel pada direktory penjualan /
projek yang dibuat.
5. Selanjutnya menambahkan script/fungsi pada file model M_member:
public function tambah($data){
$this->db->insert_batch('member', $data);
}
6. Setela menambah fungsi pada model, kemudian menambah fungsi pada
controller Member.php, tambahan script sebagai berikut:
public function tambah(){
$excelreader = new PHPExcel_Reader_Excel2007();
$loadexcel = $excelreader->load('excel/'.$this-
>filename.'.xlsx'); // Load file yang telah diupload ke
folder excel
$sheet = $loadexcel->getActiveSheet()->toArray(null,
true, true ,true);
// Buat sebuah variabel array untuk menampung array
data yg akan kita insert ke database
$data = [];
$numrow = 1;
foreach($sheet as $row){
// Cek $numrow apakah lebih dari 1
// Artinya karena baris pertama adalah nama-nama
kolom
// Jadi dilewat saja, tidak usah diimport
if($numrow > 1){
// Kita push (add) array data ke variabel
97
data
array_push($data, [
'idMember'=>"", // Insert data id dari
kolom A di excel
'nama'=>$row['B'], // Insert data nama
dari kolom B di excel
'jk'=>$row['C'], // Insert data jenis
kelamin dari kolom C di excel
'alamat'=>$row['D'], // Insert data
alamat dari kolom D di excel
]);
}
$numrow++; // Tambah 1 setiap kali looping
}
$this->m_member->tambah($data);
$this->session->set_flashdata('info', 'Data berhasil
ditambah');
redirect("member/dataMember"); // Redirect ke halaman
awal (ke controller barang fungsi index)
}