tutorial codeigniter dan materialized - LMS Unikom

101
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

Transcript of tutorial codeigniter dan materialized - LMS Unikom

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','[email protected]',md5('admin'),'Admin'),

('P01','Petugas','[email protected]',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>&copy;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> &nbsp;

</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> &nbsp;

</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)

}