Final Project Pemrograman Berbasis Kerangka Kerja

Final Project 

Pemrograman Berbasis Kerangka Kerja

Nama : Ilham Insan Wafi
NRP : 5025211255
Kelas : PBKK (A)


Link Repository Code Github : GITHUB APLIKASI KASIR BURAK COFFEE

Studi Kasus : Burak Coffee

Deskripsi Studi Kasus Aplikasi Burak Coffee Ditinjau dari MVC nya

        Studi kasus ini mengidentifikasi masalah sistem toko kopi yang belum memiliki pencatatan transaksi yang efektif. Solusi yang diusulkan adalah pengembangan aplikasi kasir berbasis web menggunakan framework CodeIgniter dan MySQL. MVC digunakan untuk memahami dan mengelola peran masing-masing komponen (Model, View, dan Controller) dalam pengembangan aplikasi kasir. Model menangani data dan logika, Controller mengelola input dan proses, sedangkan View menyajikan informasi kepada pengguna. Solusi ini diharapkan dapat meningkatkan efisiensi dan akurasi pencatatan transaksi toko kopi. 

Berikut merupakan analisis lebih detailnya:
  • Model (Analisis Masalah Sistem Yang Berjalan):
    • Toko Burak Kopi: Merupakan representasi dari Model dalam MVC. Ini mencakup semua data dan logika terkait dengan aplikasi.
    • Permasalahan Sistem: Toko Burak Kopi mengalami kesulitan dalam pencatatan transaksi. Dikarenakan belum ada sistem pencatatan yang teratur.
    • Analisis Masalah: Pencatatan transaksi belum teratur, baik secara manual (nota kertas) maupun otomatis (aplikasi).
  • Model (Analisis Hasil Solusi):
    • Solusi yang Diajukan: Menyediakan alat pencatatan yang efektif, khususnya untuk transaksi yang sering terjadi. Dibutuhkan sistem pencatatan yang dapat membantu dalam pencatatan penjualan.
    • Analisis Solusi: Diperlukan aplikasi kasir toko berbasis web untuk memfasilitasi pencatatan transaksi secara efisien.
  • Controller (Analisis Kebutuhan Sistem Usulan):
    • Analisis Kebutuhan Sistem: Aplikasi kasir toko berbasis web yang dapat mencetak transaksi. Menggunakan framework CodeIgniter dan MySQL sebagai basis data.
    • Peran Controller: Bertanggung jawab untuk menerima input dari pengguna (seperti transaksi penjualan), memproses data, dan mengirimkan instruksi ke Model atau View.
    • Kebutuhan Sistem Usulan:
      • Aplikasi kasir berbasis web.
      • Mampu mencetak transaksi.
      • Menggunakan CodeIgniter sebagai framework.
      • Menggunakan MySQL sebagai basis data.
  • View (Analisis Kebutuhan Sistem Usulan):
    • Tampilan Sistem: Melibatkan antarmuka pengguna, seperti halaman web atau formulir, yang memungkinkan pengguna berinteraksi dengan aplikasi.
    • Kebutuhan Sistem Usulan untuk View:
      • Antarmuka web yang intuitif untuk pengguna.
      • Kemampuan mencetak transaksi.
      • Menampilkan informasi transaksi dengan jelas.


Rancangan Umum Arsitektur atau Fitur yang ada Dalam Aplikasi

  • Use Case Diagram

  • Activity Diagram Login Kasir

Pada gambar diagram diatas kasir melakukan login terlebih dahulu yaitu dengan memasukkan username dan password, apabila username dan password benar maka sistem akan menampilkan halaman utama aplikasi, tetapi apabila username dan password salah sistem akan memberitahu bahwa username dan password yang dimasukkan salah.
  • Activity Diagram Kelola Data Barang

Pada Activity Diagram Kelola data barang, kasir bisa menambah barang yang tersedia di toko untuk dipakai sebagai data pada saat melakukan transaksi penjualan. Lalu Ketika kasir menyimpan data barang maka sistem akan menyimpannya ke dalam database.
  • Activity Diagram Kelola Data Kategori Barang

Dalam Kelola data kategori barang kasir bisa menambah, hapus atau bahkan memperbaharui kategori barang yang disediakan ditoko. Lalu sistem akan otomatis menyimpan kategori barang sesuai dengan saat kasir memperbaharui kategori barang.
  • Activity Diagram Kelola Transaksi Penjualan

Activity Diagram Transaksi Penjualan diatas merupakan proses pencatatan transaksi penjualan barang, dimana kasir memasukkan kode barang sesuai dengan barang yang dibeli lalu memasukkan jumlah banyaknya barang yang dibeli setelah itu sistem akan otomatis menampilkan nama, jumlah dan harga barang. Selanjutnya kasir memasukkan jumlah uang yang dibayar lalu sistem otomatis menghitung apakah ada kembalian atau tidak. Setelah itu kasir bisa mencetak hasil dari perhitungan yang dilakukan oleh sistem.
  • Activity Diagram Laporan Penjualan

Pada halaman laporan penjualan, kasir bisa mencetak laporan penjualan yang pernah terjadi di toko, yaitu dengan mencari kata kunci data transaksi yang pernah terjadi. Lalu kasir bisa mencetak laporan laporan tersebut.
  • Activity Diagram Logout Kasir

Pada saat melakukan logout, kasir memilih tombol logout yang ada pada aplikasi, lalu sistem akan memberikan notifikasi bahwa pengguna telah logout. Selanjutnya sistem akan menampilkan halaman login aplikasi.

Rancang Desain Database


  • Tabel Produk(Barang) : Menyimpan data barang, berupa ID, Barcode, Nama Produk, Kategori, Stok, Harga, Satuan Barang dan Jumlah barang terjual.
  • Tabel Transaksi : Menyimpan data Transaksi berupa, berupa ID, Tanggal transaksi, barcode, total bayar, jumlah uang, diskon, data pelanggan yang melakukan transaksi, dan data kasir yang melakukan transaksi.
  • Tabel Supplier : Menyimpan data supplier barang. Berupa ID, Nama, Alamat, Nomor telepon supplier dan Keterangan.
  • Tabel Toko : Menyimpan data toko, berupa ID toko, Nama Toko, dan Alamat Toko.
  • Tabel Kasir : Menyimpan data kasir, berupa ID kasir, Username dan Password.
  • Tabel Kategori Produk : Menyimpan data ID Barang dan Kategori Barang.
  • Tabel Satuan Produk : Menyimpan data Satuan Barang seperti pcs, bungkus, dll.
  • Tabel Pelanggan : Menyimpan data pelanggan, berupa ID, Nama, Jenis Kelamin, Alamat, dan Nomor telepon.
  • Tabel Stok Masuk : Menyimpan pendataan perihal stok barang yang masuk.
  • Tabel Stok Keluar : Menyimpan pendataan perihal stok barang yang keluar.

Desain Front End Aplikasi

  • Desain Sidebar

  • Desain Dashboard

  • Desain Bagian Data Barang

  • Desain Bagian Data Pelanggan

  • Desain Bagian Data Kasir

  • Desain Bagian Transaksi

  • Desain Bagian Laporan Penjualan

Control yang akan Menghandle Logika Back End

  • Mengelola Otentikasi Pengguna (Login & Logout)
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    class Auth extends CI_Controller {
    public function __construct()
    {
    parent::__construct();
    $this->load->model('auth_model');
    }
    public function login()
    {
    if ($this->session->userdata('status') !== 'login' ) {
    if ($this->input->post('username')) {
    $username = $this->input->post('username');
    if ($this->auth_model->getUser($username)->num_rows() > 0) {
    $data = $this->auth_model->getUser($username)->row();
    $toko = $this->auth_model->getToko();
    if (password_verify($this->input->post('password'), $data->password)) {
    $userdata = array(
    'id' => $data->id,
    'username' => $data->username,
    'password' => $data->password,
    'nama' => $data->nama,
    'role' => $data->role == '1' ? 'admin' : 'kasir',
    'status' => 'login',
    'toko' => $toko
    );
    $this->session->set_userdata($userdata);
    echo json_encode('sukses');
    } else {
    echo json_encode('passwordsalah');
    }
    } else {
    echo json_encode('tidakada');
    }
    } else {
    $this->load->view('login');
    }
    } else {
    redirect('/');
    }
    }
    public function logout()
    {
    $this->session->sess_destroy();
    redirect('/');
    }
    }
    view raw Authorization hosted with ❤ by GitHub
Metode login :

- Mengecek apakah pengguna sudah login. Jika sudah, maka redirect ke halaman utama.
- Jika tidak, maka melakukan pengecekan apakah terdapat data yang dikirimkan melalui metode POST (dari form login).
- Jika ada, mengambil nilai username dan mencari pengguna dengan username tersebut melalui metode getUser pada auth_model.
- Jika pengguna ditemukan, membandingkan password yang diinputkan dengan password hashed dari database menggunakan password_verify.
- Jika password benar, membuat data sesi (session) berisi informasi pengguna (ID, username, password, nama, peran/role, status login, dan informasi toko).
- Mengembalikan respons JSON 'sukses' jika login berhasil, 'passwordsalah' jika password salah, dan 'tidakada' jika pengguna tidak ditemukan.
- Jika tidak ada data yang dikirim melalui POST, menampilkan halaman login.

Metode logout :

- Menghancurkan semua data sesi (session) menggunakan $this->session->sess_destroy().
- Redirect ke halaman utama setelah logout.
  • Controller Dashboard
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    class Dashboard extends CI_Controller {
    public function index()
    {
    if ($this->session->userdata('status') == 'login' ) {
    $this->load->view('dashboard');
    } else {
    $this->load->view('login');
    }
    }
    }
    view raw gistfile1.txt hosted with ❤ by GitHub
Pengecekan Status Login :

- Menggunakan $this->session->userdata('status') == 'login' untuk memeriksa apakah pengguna sudah login.
- Jika status login adalah 'login', maka pengguna dianggap sudah login, dan halaman dashboard (dashboard) akan dimuat.
- Jika status login tidak sama dengan 'login', maka pengguna dianggap belum login, dan akan diarahkan ke halaman login (login).
  • Mengelola Kategori Barang
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    class Kategori_produk extends CI_Controller {
    public function __construct()
    {
    parent::__construct();
    if ($this->session->userdata('status') !== 'login' ) {
    redirect('/');
    }
    $this->load->model('kategori_produk_model');
    }
    public function index()
    {
    $this->load->view('kategori_produk');
    }
    public function read()
    {
    header('Content-type: application/json');
    if ($this->kategori_produk_model->read()->num_rows() > 0) {
    foreach ($this->kategori_produk_model->read()->result() as $kategori_produk) {
    $data[] = array(
    'kategori' => $kategori_produk->kategori,
    'action' => '<button class="btn btn-sm btn-success" onclick="edit('.$kategori_produk->id.')">Edit</button> <button class="btn btn-sm btn-danger" onclick="remove('.$kategori_produk->id.')">Delete</button>'
    );
    }
    } else {
    $data = array();
    }
    $kategori_produk = array(
    'data' => $data
    );
    echo json_encode($kategori_produk);
    }
    public function add()
    {
    $data = array(
    'kategori' => $this->input->post('kategori')
    );
    if ($this->kategori_produk_model->create($data)) {
    echo json_encode('sukses');
    }
    }
    public function delete()
    {
    $id = $this->input->post('id');
    if ($this->kategori_produk_model->delete($id)) {
    echo json_encode('sukses');
    }
    }
    public function edit()
    {
    $id = $this->input->post('id');
    $data = array(
    'kategori' => $this->input->post('kategori')
    );
    if ($this->kategori_produk_model->update($id,$data)) {
    echo json_encode('sukses');
    }
    }
    public function get_kategori()
    {
    $id = $this->input->post('id');
    $kategori = $this->kategori_produk_model->getKategori($id);
    if ($kategori->row()) {
    echo json_encode($kategori->row());
    }
    }
    public function search()
    {
    header('Content-type: application/json');
    $kategori = $this->input->post('kategori');
    $search = $this->kategori_produk_model->search($kategori);
    foreach ($search as $kategori) {
    $data[] = array(
    'id' => $kategori->id,
    'text' => $kategori->kategori
    );
    }
    echo json_encode($data);
    }
    }
    view raw gistfile1.txt hosted with ❤ by GitHub
Menghandle beberapa logika back end pada bagian kategori barang, diantaranya :

- Read : Mengambil dan menampilkan data kategori produk dari database menggunakan metode read dari model. 
- Add : Mengambil data kategori yang dikirim, lalu Menyimpan data kategori baru ke dalam database menggunakan metode create dari model.
- Delete : Menghapus kategori dari database menggunakan metode delete dari model.
- Edit : Mengupdate data kategori di database menggunakan metode update dari model.
- Search : Mengambil data kategori yang sesuai dengan kata kunci menggunakan metode search dari model.
  • Mengelola Bagian Pelanggan
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    class Pelanggan extends CI_Controller {
    public function __construct()
    {
    parent::__construct();
    if ($this->session->userdata('status') !== 'login' ) {
    redirect('/');
    }
    $this->load->model('pelanggan_model');
    }
    public function index()
    {
    $this->load->view('pelanggan');
    }
    public function read()
    {
    header('Content-type: application/json');
    if ($this->pelanggan_model->read()->num_rows() > 0) {
    foreach ($this->pelanggan_model->read()->result() as $pelanggan) {
    $data[] = array(
    'nama' => $pelanggan->nama,
    'jenis_kelamin' => $pelanggan->jenis_kelamin,
    'alamat' => $pelanggan->alamat,
    'telepon' => $pelanggan->telepon,
    'action' => '<button class="btn btn-sm btn-success" onclick="edit('.$pelanggan->id.')">Edit</button> <button class="btn btn-sm btn-danger" onclick="remove('.$pelanggan->id.')">Delete</button>'
    );
    }
    } else {
    $data = array();
    }
    $pelanggan = array(
    'data' => $data
    );
    echo json_encode($pelanggan);
    }
    public function add()
    {
    $data = array(
    'nama' => $this->input->post('nama'),
    'alamat' => $this->input->post('alamat'),
    'telepon' => $this->input->post('telepon'),
    'jenis_kelamin' => $this->input->post('jenis_kelamin')
    );
    if ($this->pelanggan_model->create($data)) {
    echo json_encode('sukses');
    }
    }
    public function delete()
    {
    $id = $this->input->post('id');
    if ($this->pelanggan_model->delete($id)) {
    echo json_encode('sukses');
    }
    }
    public function edit()
    {
    $id = $this->input->post('id');
    $data = array(
    'nama' => $this->input->post('nama'),
    'alamat' => $this->input->post('alamat'),
    'telepon' => $this->input->post('telepon'),
    'jenis_kelamin' => $this->input->post('jenis_kelamin')
    );
    if ($this->pelanggan_model->update($id,$data)) {
    echo json_encode('sukses');
    }
    }
    public function get_pelanggan()
    {
    $id = $this->input->post('id');
    $pelanggan = $this->pelanggan_model->getSupplier($id);
    if ($pelanggan->row()) {
    echo json_encode($pelanggan->row());
    }
    }
    public function search()
    {
    header('Content-type: application/json');
    $pelanggan = $this->input->post('pelanggan');
    $search = $this->pelanggan_model->search($pelanggan);
    foreach ($search as $pelanggan) {
    $data[] = array(
    'id' => $pelanggan->id,
    'text' => $pelanggan->nama
    );
    }
    echo json_encode($data);
    }
    }
    /* End of file Pelanggan.php */
    /* Location: ./application/controllers/Pelanggan.php */
    view raw gistfile1.txt hosted with ❤ by GitHub
Menghandle beberapa logika back end pada bagian kategori barang, diantaranya adalah 
- Untuk mengambil dan menampilkan data pelanggan.
- Menyimpan data pelanggan baru ke dalam database.
- Menghapus pelanggan dari database.
- Mengupdate data pelanggan di database.
  • Mengelola Pengaturan
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    class Pengaturan extends CI_Controller {
    public function __construct()
    {
    parent::__construct();
    if ($this->session->userdata('status') !== 'login' ) {
    redirect('/');
    }
    }
    public function index()
    {
    $toko = $this->db->get('toko')->row();
    $data['toko'] = $toko;
    $this->load->view('pengaturan', $data);
    }
    public function set_toko()
    {
    $data = array(
    'nama' => $this->input->post('nama'),
    'alamat' => $this->input->post('alamat')
    );
    $this->db->where('id', 1);
    if ($this->db->update('toko', $data)) {
    $this->db->select('nama, alamat');
    $toko = $this->db->get('toko')->row();
    $this->session->set_userdata('toko', $toko);
    echo json_encode('sukses');
    }
    }
    }
    view raw Pengaturan hosted with ❤ by GitHub
Menghandle beberapa logika back end pada bagian pengaturan, diantaranya adalah
- Mengambil data toko dari tabel 'toko' dalam database.
- Memuat tampilan pengaturan dengan meneruskan data toko sebagai parameter.
- Memperbarui data toko dalam tabel 'toko' dengan data yang baru.
  • Mengelola Pengguna
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    class Pengguna extends CI_Controller {
    public function __construct()
    {
    parent::__construct();
    if ($this->session->userdata('status') !== 'login' ) {
    redirect('/');
    }
    $this->load->model('pengguna_model');
    }
    public function index()
    {
    $this->load->view('pengguna');
    }
    public function read()
    {
    header('Content-type: application/json');
    if ($this->pengguna_model->read()->num_rows() > 0) {
    foreach ($this->pengguna_model->read()->result() as $pengguna) {
    $data[] = array(
    'username' => $pengguna->username,
    'nama' => $pengguna->nama,
    'action' => '<button class="btn btn-sm btn-success" onclick="edit('.$pengguna->id.')">Edit</button> <button class="btn btn-sm btn-danger" onclick="remove('.$pengguna->id.')">Delete</button>'
    );
    }
    } else {
    $data = array();
    }
    $pengguna = array(
    'data' => $data
    );
    echo json_encode($pengguna);
    }
    public function add()
    {
    $data = array(
    'username' => $this->input->post('username'),
    'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
    'nama' => $this->input->post('nama'),
    'role' => '2'
    );
    if ($this->pengguna_model->create($data)) {
    echo json_encode('sukses');
    }
    }
    public function delete()
    {
    $id = $this->input->post('id');
    if ($this->pengguna_model->delete($id)) {
    echo json_encode('sukses');
    }
    }
    public function edit()
    {
    $id = $this->input->post('id');
    $data = array(
    'username' => $this->input->post('username'),
    'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
    'nama' => $this->input->post('nama')
    );
    if ($this->pengguna_model->update($id,$data)) {
    echo json_encode('sukses');
    }
    }
    public function get_pengguna()
    {
    $id = $this->input->post('id');
    $pengguna = $this->pengguna_model->getPengguna($id);
    if ($pengguna->row()) {
    echo json_encode($pengguna->row());
    }
    }
    }
    /* End of file Pengguna.php */
    /* Location: ./application/controllers/Pengguna.php */
    view raw gistfile1.txt hosted with ❤ by GitHub
Menghandle beberapa logika back end pada bagian pengguna, diantaranya adalah : 
- Untuk mengambil dan menampilkan data kasir.
- Menyimpan data kasir baru ke dalam database.
- Menghapus data kasir dari database.
- Mengupdate data kasir di database.
  • Mengelola Barang
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    class Produk extends CI_Controller {
    public function __construct()
    {
    parent::__construct();
    if ($this->session->userdata('status') !== 'login' ) {
    redirect('/');
    }
    $this->load->model('produk_model');
    }
    public function index()
    {
    $this->load->view('produk');
    }
    public function read()
    {
    header('Content-type: application/json');
    if ($this->produk_model->read()->num_rows() > 0) {
    foreach ($this->produk_model->read()->result() as $produk) {
    $data[] = array(
    'barcode' => $produk->barcode,
    'nama' => $produk->nama_produk,
    'kategori' => $produk->kategori,
    'satuan' => $produk->satuan,
    'harga' => $produk->harga,
    'stok' => $produk->stok,
    'action' => '<button class="btn btn-sm btn-success" onclick="edit('.$produk->id.')">Edit</button> <button class="btn btn-sm btn-danger" onclick="remove('.$produk->id.')">Delete</button>'
    );
    }
    } else {
    $data = array();
    }
    $produk = array(
    'data' => $data
    );
    echo json_encode($produk);
    }
    public function add()
    {
    $data = array(
    'barcode' => $this->input->post('barcode'),
    'nama_produk' => $this->input->post('nama_produk'),
    'satuan' => $this->input->post('satuan'),
    'kategori' => $this->input->post('kategori'),
    'harga' => $this->input->post('harga'),
    'stok' => $this->input->post('stok')
    );
    if ($this->produk_model->create($data)) {
    echo json_encode($data);
    }
    }
    public function delete()
    {
    $id = $this->input->post('id');
    if ($this->produk_model->delete($id)) {
    echo json_encode('sukses');
    }
    }
    public function edit()
    {
    $id = $this->input->post('id');
    $data = array(
    'barcode' => $this->input->post('barcode'),
    'nama_produk' => $this->input->post('nama_produk'),
    'satuan' => $this->input->post('satuan'),
    'kategori' => $this->input->post('kategori'),
    'harga' => $this->input->post('harga'),
    'stok' => $this->input->post('stok')
    );
    if ($this->produk_model->update($id,$data)) {
    echo json_encode('sukses');
    }
    }
    public function get_produk()
    {
    header('Content-type: application/json');
    $id = $this->input->post('id');
    $kategori = $this->produk_model->getProduk($id);
    if ($kategori->row()) {
    echo json_encode($kategori->row());
    }
    }
    public function get_barcode()
    {
    header('Content-type: application/json');
    $barcode = $this->input->post('barcode');
    $search = $this->produk_model->getBarcode($barcode);
    foreach ($search as $barcode) {
    $data[] = array(
    'id' => $barcode->id,
    'text' => $barcode->barcode
    );
    }
    echo json_encode($data);
    }
    public function get_nama()
    {
    header('Content-type: application/json');
    $id = $this->input->post('id');
    echo json_encode($this->produk_model->getNama($id));
    }
    public function get_stok()
    {
    header('Content-type: application/json');
    $id = $this->input->post('id');
    echo json_encode($this->produk_model->getStok($id));
    }
    public function produk_terlaris()
    {
    header('Content-type: application/json');
    $produk = $this->produk_model->produkTerlaris();
    foreach ($produk as $key) {
    $label[] = $key->nama_produk;
    $data[] = $key->terjual;
    }
    $result = array(
    'label' => $label,
    'data' => $data,
    );
    echo json_encode($result);
    }
    public function data_stok()
    {
    header('Content-type: application/json');
    $produk = $this->produk_model->dataStok();
    echo json_encode($produk);
    }
    }
    /* End of file Produk.php */
    /* Location: ./application/controllers/Produk.php */
    view raw barang hosted with ❤ by GitHub
Menghandle beberapa logika back end pada bagian barang, diantaranya adalah :
- Untuk mengambil dan menampilkan data barang.
- Menyimpan data barang baru ke dalam database.
- Menghapus data barang dari database.
- Mengupdate data barang di database.
- Mengambil data stok barang.
  • Mengelola Satuan Barang
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    class Satuan_produk extends CI_Controller {
    public function __construct()
    {
    parent::__construct();
    if ($this->session->userdata('status') !== 'login' ) {
    redirect('/');
    }
    $this->load->model('satuan_produk_model');
    }
    public function index()
    {
    $this->load->view('satuan_produk');
    }
    public function read()
    {
    header('Content-type: application/json');
    if ($this->satuan_produk_model->read()->num_rows() > 0) {
    foreach ($this->satuan_produk_model->read()->result() as $satuan_produk) {
    $data[] = array(
    'satuan' => $satuan_produk->satuan,
    'action' => '<button class="btn btn-sm btn-success" onclick="edit('.$satuan_produk->id.')">Edit</button> <button class="btn btn-sm btn-danger" onclick="remove('.$satuan_produk->id.')">Delete</button>'
    );
    }
    } else {
    $data = array();
    }
    $satuan_produk = array(
    'data' => $data
    );
    echo json_encode($satuan_produk);
    }
    public function add()
    {
    $data = array(
    'satuan' => $this->input->post('satuan')
    );
    if ($this->satuan_produk_model->create($data)) {
    echo json_encode('sukses');
    }
    }
    public function delete()
    {
    $id = $this->input->post('id');
    if ($this->satuan_produk_model->delete($id)) {
    echo json_encode('sukses');
    }
    }
    public function edit()
    {
    $id = $this->input->post('id');
    $data = array(
    'satuan' => $this->input->post('satuan')
    );
    if ($this->satuan_produk_model->update($id,$data)) {
    echo json_encode('sukses');
    }
    }
    public function get_satuan()
    {
    $id = $this->input->post('id');
    $satuan = $this->satuan_produk_model->getKategori($id);
    if ($satuan->row()) {
    echo json_encode($satuan->row());
    }
    }
    public function search()
    {
    header('Content-type: application/json');
    $satuan = $this->input->post('satuan');
    $search = $this->satuan_produk_model->search($satuan);
    foreach ($search as $satuan) {
    $data[] = array(
    'id' => $satuan->id,
    'text' => $satuan->satuan
    );
    }
    echo json_encode($data);
    }
    }
    /* End of file Satuan_produk.php */
    /* Location: ./application/controllers/Satuan_produk.php */
    view raw satuanbarang hosted with ❤ by GitHub
Menghandle beberapa logika back end pada bagian satuan barang, diantaranya adalah :
- Untuk mengambil dan menampilkan data satuan barang.
- Menyimpan data satuan barang baru ke dalam database.
- Menghapus data satuan barang dari database.
- Mengupdate data satuan barang di database.
  • Mengelola Stok Keluar
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    class Stok_keluar extends CI_Controller {
    public function __construct()
    {
    parent::__construct();
    if ($this->session->userdata('status') !== 'login' ) {
    redirect('/');
    }
    $this->load->model('stok_keluar_model');
    }
    public function index()
    {
    $this->load->view('stok_keluar');
    }
    public function read()
    {
    header('Content-type: application/json');
    if ($this->stok_keluar_model->read()->num_rows() > 0) {
    foreach ($this->stok_keluar_model->read()->result() as $stok_keluar) {
    $tanggal = new DateTime($stok_keluar->tanggal);
    $data[] = array(
    'tanggal' => $tanggal->format('d-m-Y H:i:s'),
    'barcode' => $stok_keluar->barcode,
    'nama_produk' => $stok_keluar->nama_produk,
    'jumlah' => $stok_keluar->jumlah,
    'keterangan' => $stok_keluar->keterangan,
    );
    }
    } else {
    $data = array();
    }
    $stok_keluar = array(
    'data' => $data
    );
    echo json_encode($stok_keluar);
    }
    public function add()
    {
    $id = $this->input->post('barcode');
    $jumlah = $this->input->post('jumlah');
    $stok = $this->stok_keluar_model->getStok($id)->stok;
    $rumus = max($stok - $jumlah,0);
    $addStok = $this->stok_keluar_model->addStok($id, $rumus);
    if ($addStok) {
    $tanggal = new DateTime($this->input->post('tanggal'));
    $data = array(
    'tanggal' => $tanggal->format('Y-m-d H:i:s'),
    'barcode' => $id,
    'jumlah' => $jumlah,
    'keterangan' => $this->input->post('keterangan')
    );
    if ($this->stok_keluar_model->create($data)) {
    echo json_encode('sukses');
    }
    }
    }
    public function get_barcode()
    {
    $barcode = $this->input->post('barcode');
    $kategori = $this->stok_keluar_model->getKategori($id);
    if ($kategori->row()) {
    echo json_encode($kategori->row());
    }
    }
    }
    /* End of file Stok_keluar.php */
    /* Location: ./application/controllers/Stok_keluar.php */
    view raw stok_keluar hosted with ❤ by GitHub
Menghandle beberapa logika back end pada bagian stok keluar, diantaranya adalah :
- Untuk mengambil dan menampilkan data stok keluar.
- Mengambil data stok terkini dari database
- Menghitung stok baru setelah keluar menggunakan rumus max($stok - $jumlah, 0).
- Memperbarui stok di database menggunakan metode addStok dari model.
  • Mengelola Stok Masuk
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    class Stok_masuk extends CI_Controller {
    public function __construct()
    {
    parent::__construct();
    if ($this->session->userdata('status') !== 'login' ) {
    redirect('/');
    }
    $this->load->model('stok_masuk_model');
    }
    public function index()
    {
    $this->load->view('stok_masuk');
    }
    public function read()
    {
    header('Content-type: application/json');
    if ($this->stok_masuk_model->read()->num_rows() > 0) {
    foreach ($this->stok_masuk_model->read()->result() as $stok_masuk) {
    $tanggal = new DateTime($stok_masuk->tanggal);
    $data[] = array(
    'tanggal' => $tanggal->format('d-m-Y H:i:s'),
    'barcode' => $stok_masuk->barcode,
    'nama_produk' => $stok_masuk->nama_produk,
    'jumlah' => $stok_masuk->jumlah,
    'keterangan' => $stok_masuk->keterangan
    );
    }
    } else {
    $data = array();
    }
    $stok_masuk = array(
    'data' => $data
    );
    echo json_encode($stok_masuk);
    }
    public function add()
    {
    $id = $this->input->post('barcode');
    $jumlah = $this->input->post('jumlah');
    $stok = $this->stok_masuk_model->getStok($id)->stok;
    $rumus = max($stok + $jumlah,0);
    $addStok = $this->stok_masuk_model->addStok($id, $rumus);
    if ($addStok) {
    $tanggal = new DateTime($this->input->post('tanggal'));
    $data = array(
    'tanggal' => $tanggal->format('Y-m-d H:i:s'),
    'barcode' => $id,
    'jumlah' => $jumlah,
    'keterangan' => $this->input->post('keterangan'),
    'supplier' => $this->input->post('supplier')
    );
    if ($this->stok_masuk_model->create($data)) {
    echo json_encode('sukses');
    }
    }
    }
    public function get_barcode()
    {
    $barcode = $this->input->post('barcode');
    $kategori = $this->stok_masuk_model->getKategori($id);
    if ($kategori->row()) {
    echo json_encode($kategori->row());
    }
    }
    public function laporan()
    {
    header('Content-type: application/json');
    if ($this->stok_masuk_model->laporan()->num_rows() > 0) {
    foreach ($this->stok_masuk_model->laporan()->result() as $stok_masuk) {
    $tanggal = new DateTime($stok_masuk->tanggal);
    $data[] = array(
    'tanggal' => $tanggal->format('d-m-Y H:i:s'),
    'barcode' => $stok_masuk->barcode,
    'nama_produk' => $stok_masuk->nama_produk,
    'jumlah' => $stok_masuk->jumlah,
    'keterangan' => $stok_masuk->keterangan,
    'supplier' => $stok_masuk->supplier
    );
    }
    } else {
    $data = array();
    }
    $stok_masuk = array(
    'data' => $data
    );
    echo json_encode($stok_masuk);
    }
    public function stok_hari()
    {
    header('Content-type: application/json');
    $now = date('d m Y');
    $total = $this->stok_masuk_model->stokHari($now);
    echo json_encode($total->total == null ? 0 : $total);
    }
    }
    /* End of file Stok_masuk.php */
    /* Location: ./application/controllers/Stok_masuk.php */
    view raw stok_masuk hosted with ❤ by GitHub
Menghandle beberapa logika back end pada bagian stok masuk, diantaranya adalah :
- Untuk mengambil dan menampilkan data stok keluar.
- Mengambil data stok terkini dari database.
- Menghitung stok baru setelah masuk menggunakan rumus max($stok + $jumlah,0).
- Memperbarui stok di database menggunakan metode addStok dari model.
- Mengambil data laporan stok masuk dari database menggunakan metode laporan dari model.
- Mengambil total stok masuk untuk hari ini menggunakan metode stokHari dari model.
  • Mengelola Supplier
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    class Supplier extends CI_Controller {
    public function __construct()
    {
    parent::__construct();
    if ($this->session->userdata('status') !== 'login' ) {
    redirect('/');
    }
    $this->load->model('supplier_model');
    }
    public function index()
    {
    $this->load->view('supplier');
    }
    public function read()
    {
    header('Content-type: application/json');
    if ($this->supplier_model->read()->num_rows() > 0) {
    foreach ($this->supplier_model->read()->result() as $supplier) {
    $data[] = array(
    'nama' => $supplier->nama,
    'alamat' => $supplier->alamat,
    'telepon' => $supplier->telepon,
    'keterangan' => $supplier->keterangan,
    'action' => '<button class="btn btn-sm btn-success" onclick="edit('.$supplier->id.')">Edit</button> <button class="btn btn-sm btn-danger" onclick="remove('.$supplier->id.')">Delete</button>'
    );
    }
    } else {
    $data = array();
    }
    $supplier = array(
    'data' => $data
    );
    echo json_encode($supplier);
    }
    public function add()
    {
    $data = array(
    'nama' => $this->input->post('nama'),
    'alamat' => $this->input->post('alamat'),
    'telepon' => $this->input->post('telepon'),
    'keterangan' => $this->input->post('keterangan')
    );
    if ($this->supplier_model->create($data)) {
    echo json_encode('sukses');
    }
    }
    public function delete()
    {
    $id = $this->input->post('id');
    if ($this->supplier_model->delete($id)) {
    echo json_encode('sukses');
    }
    }
    public function edit()
    {
    $id = $this->input->post('id');
    $data = array(
    'nama' => $this->input->post('nama'),
    'alamat' => $this->input->post('alamat'),
    'telepon' => $this->input->post('telepon'),
    'keterangan' => $this->input->post('keterangan')
    );
    if ($this->supplier_model->update($id,$data)) {
    echo json_encode('sukses');
    }
    }
    public function get_supplier()
    {
    $id = $this->input->post('id');
    $supplier = $this->supplier_model->getSupplier($id);
    if ($supplier->row()) {
    echo json_encode($supplier->row());
    }
    }
    public function search()
    {
    header('Content-type: application/json');
    $supplier = $this->input->post('supplier');
    $search = $this->supplier_model->search($supplier);
    foreach ($search as $supplier) {
    $data[] = array(
    'id' => $supplier->id,
    'text' => $supplier->nama
    );
    }
    echo json_encode($data);
    }
    }
    /* End of file Supplier.php */
    /* Location: ./application/controllers/Supplier.php */
    view raw supplier hosted with ❤ by GitHub
Menghandle beberapa logika back end pada bagian supplier, diantaranya adalah 
- Untuk mengambil dan menampilkan data supplier.
- Menyimpan data supplier baru ke dalam database.
- Menghapus supplier dari database.
- Mengupdate data supplier di database.
  • Mengelola Transaksi
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    class Transaksi extends CI_Controller {
    public function __construct()
    {
    parent::__construct();
    if ($this->session->userdata('status') !== 'login' ) {
    redirect('/');
    }
    $this->load->model('transaksi_model');
    }
    public function index()
    {
    $this->load->view('transaksi');
    }
    public function read()
    {
    // header('Content-type: application/json');
    if ($this->transaksi_model->read()->num_rows() > 0) {
    foreach ($this->transaksi_model->read()->result() as $transaksi) {
    $barcode = explode(',', $transaksi->barcode);
    $tanggal = new DateTime($transaksi->tanggal);
    $data[] = array(
    'tanggal' => $tanggal->format('d-m-Y H:i:s'),
    'nama_produk' => '<table>'.$this->transaksi_model->getProduk($barcode, $transaksi->qty).'</table>',
    'total_bayar' => $transaksi->total_bayar,
    'jumlah_uang' => $transaksi->jumlah_uang,
    'diskon' => $transaksi->diskon,
    'pelanggan' => $transaksi->pelanggan,
    'action' => '<a class="btn btn-sm btn-success" href="'.site_url('transaksi/cetak/').$transaksi->id.'">Print</a> <button class="btn btn-sm btn-danger" onclick="remove('.$transaksi->id.')">Delete</button>'
    );
    }
    } else {
    $data = array();
    }
    $transaksi = array(
    'data' => $data
    );
    echo json_encode($transaksi);
    }
    public function add()
    {
    $produk = json_decode($this->input->post('produk'));
    $tanggal = new DateTime($this->input->post('tanggal'));
    $barcode = array();
    foreach ($produk as $produk) {
    $this->transaksi_model->removeStok($produk->id, $produk->stok);
    $this->transaksi_model->addTerjual($produk->id, $produk->terjual);
    array_push($barcode, $produk->id);
    }
    $data = array(
    'tanggal' => $tanggal->format('Y-m-d H:i:s'),
    'barcode' => implode(',', $barcode),
    'qty' => implode(',', $this->input->post('qty')),
    'total_bayar' => $this->input->post('total_bayar'),
    'jumlah_uang' => $this->input->post('jumlah_uang'),
    'diskon' => $this->input->post('diskon'),
    'pelanggan' => $this->input->post('pelanggan'),
    'nota' => $this->input->post('nota'),
    'kasir' => $this->session->userdata('id')
    );
    if ($this->transaksi_model->create($data)) {
    echo json_encode($this->db->insert_id());
    }
    $data = $this->input->post('form');
    }
    public function delete()
    {
    $id = $this->input->post('id');
    if ($this->transaksi_model->delete($id)) {
    echo json_encode('sukses');
    }
    }
    public function cetak($id)
    {
    $produk = $this->transaksi_model->getAll($id);
    $tanggal = new DateTime($produk->tanggal);
    $barcode = explode(',', $produk->barcode);
    $qty = explode(',', $produk->qty);
    $produk->tanggal = $tanggal->format('d m Y H:i:s');
    $dataProduk = $this->transaksi_model->getName($barcode);
    foreach ($dataProduk as $key => $value) {
    $value->total = $qty[$key];
    $value->harga = $value->harga * $qty[$key];
    }
    $data = array(
    'nota' => $produk->nota,
    'tanggal' => $produk->tanggal,
    'produk' => $dataProduk,
    'total' => $produk->total_bayar,
    'bayar' => $produk->jumlah_uang,
    'kembalian' => $produk->jumlah_uang - $produk->total_bayar,
    'kasir' => $produk->kasir
    );
    $this->load->view('cetak', $data);
    }
    public function penjualan_bulan()
    {
    header('Content-type: application/json');
    $day = $this->input->post('day');
    foreach ($day as $key => $value) {
    $now = date($day[$value].' m Y');
    if ($qty = $this->transaksi_model->penjualanBulan($now) !== []) {
    $data[] = array_sum($this->transaksi_model->penjualanBulan($now));
    } else {
    $data[] = 0;
    }
    }
    echo json_encode($data);
    }
    public function transaksi_hari()
    {
    header('Content-type: application/json');
    $now = date('d m Y');
    $total = $this->transaksi_model->transaksiHari($now);
    echo json_encode($total);
    }
    public function transaksi_terakhir($value='')
    {
    header('Content-type: application/json');
    $now = date('d m Y');
    foreach ($this->transaksi_model->transaksiTerakhir($now) as $key) {
    $total = explode(',', $key);
    }
    echo json_encode($total);
    }
    }
    /* End of file Transaksi.php */
    /* Location: ./application/controllers/Transaksi.php */
    view raw transaksi hosted with ❤ by GitHub
- Menampilkan data produk dengan menggunakan tabel untuk menampilkan nama produk dan jumlah yang dibeli.
- Mengupdate stok produk di database menggunakan metode removeStok dari model.
- Mengupdate jumlah produk yang terjual di database menggunakan metode addTerjual dari model.
- Menyimpan data transaksi baru ke dalam database.
- Menghapus transaksi dari database.
- Menghasilkan laporan cetak transaksi dengan menampilkan informasi seperti nota, tanggal, produk yang dibeli, total bayar, jumlah uang, kembalian, dan kasir.
- Menghitung total penjualan setiap hari menggunakan metode penjualanBulan dari model.
- Mengambil total transaksi terakhir untuk hari ini menggunakan metode transaksiTerakhir dari model.

Demo Implementasi Aplikasi Kasir Dengan Menggunakan CodeIgniter


Komentar

Postingan populer dari blog ini

PBKK (A) - Quiz 1

Tugas 13 PBKK - CodeIgniter MVC Toko Online

Quiz 2 PBKK