Seri Tutorial

Cara Membuat Sistem Kasir Sederhana dengan Laravel 13 dan MySQL

Diterbitkan 15 September 2026

Membuat sistem kasir dengan Laravel merupakan project yang cocok untuk mempelajari pengembangan aplikasi web secara lebih lengkap.

Dalam satu project, kita akan membahas:

login
hak akses
database
master data
produk
penjualan
pembelian
stok
kartu stok
dashboard
laporan
nota
testing
deployment

Seri ini menggunakan Laravel 13 dan MySQL dan dibangun secara bertahap dari project kosong sampai siap digunakan pada server production.

Setiap tahap melanjutkan hasil dari tahap sebelumnya, sehingga tutorial sebaiknya diikuti sesuai urutan.

Gambaran Project

Aplikasi yang dibuat merupakan sistem kasir atau Point of Sale (POS) sederhana berbasis web.

Terdapat dua role utama:

Administrator
Kasir

Administrator mengelola data dan operasional sistem.

Kasir berfokus pada transaksi penjualan.

Alur utama sistem:

Admin menyiapkan master data
        ↓
Admin membuat produk
        ↓
Barang dibeli dari supplier
        ↓
Stok bertambah
        ↓
Kasir melakukan penjualan
        ↓
Stok berkurang
        ↓
Pergerakan stok tercatat
        ↓
Nota dapat dicetak
        ↓
Dashboard dan laporan diperbarui

Jika jumlah stok fisik berbeda dengan stok sistem, administrator dapat melakukan penyesuaian stok sehingga perubahan tetap tercatat.

Teknologi yang Digunakan

Project menggunakan:

Laravel 13
PHP 8.3 atau versi yang kompatibel
MySQL / MariaDB
Bootstrap 5
JavaScript
Blade Template
Eloquent ORM

Tool development:

Composer
Browser
Editor kode
Terminal

Node.js dan npm tidak wajib untuk versi dasar tutorial ini karena tampilan menggunakan Bootstrap CDN dan JavaScript langsung.

Fitur Utama Sistem Kasir

Setelah seluruh tahap selesai, aplikasi mempunyai fitur:

Autentikasi

Login
Logout
Role admin
Role cashier
User aktif/nonaktif
Middleware role

Master Data

Kategori
Satuan
Pelanggan
Supplier

Setiap master data mempunyai:

Tambah
Edit
Cari
Hapus
Validasi
Pagination

Produk

Produk mempunyai:

SKU
Nama
Kategori
Satuan
Harga beli
Harga jual
Stok
Stok minimum
Status aktif

Produk juga mendukung:

pencarian
filter
status aktif/nonaktif
indikator stok menipis
proteksi delete

Penjualan

Fitur transaksi penjualan:

multi item
keranjang
quantity
pelanggan
diskon
pembayaran
kembalian

Saat transaksi disimpan, server akan:

memeriksa produk
memeriksa stok
mengambil harga dari database
menghitung subtotal
menghitung grand total
mengurangi stok
membuat detail transaksi
mencatat stock movement

Pembelian

Pembelian mendukung:

supplier
multi item
quantity
harga beli
tanggal transaksi
grand total

Ketika transaksi selesai:

stok bertambah
harga beli terbaru diperbarui
purchase detail dibuat
stock movement dibuat

Pembatalan Transaksi

Transaksi tidak langsung dihapus.

Jika penjualan dibatalkan:

status menjadi cancelled
stok dikembalikan
movement pembatalan dibuat

Jika pembelian dibatalkan:

status menjadi cancelled
stok dikurangi kembali
movement pembatalan dibuat

Kartu Stok

Jenis movement yang digunakan:

initial
purchase
purchase_cancelled
sale
sale_cancelled
adjustment

Kartu stok menampilkan:

tanggal
tipe
referensi
stok masuk
stok keluar
saldo
catatan

Penyesuaian Stok

Administrator dapat memasukkan jumlah stok fisik.

Contoh:

Stok sistem = 20
Stok fisik  = 18

Sistem otomatis mencatat selisih:

-2

Dashboard

Dashboard menampilkan:

omzet hari ini
jumlah transaksi
produk aktif
produk habis
stok menipis
produk terlaris
transaksi terbaru

Laporan

Laporan penjualan mendukung filter:

tanggal awal
tanggal akhir
status
kasir
invoice

Ringkasan:

omzet
diskon
jumlah transaksi

Nota Kasir

Nota mendukung:

58mm
80mm

Isi nota:

data toko
invoice
tanggal
kasir
pelanggan
produk
quantity
harga
subtotal
diskon
grand total
pembayaran
kembalian
footer

Testing

Project diuji melalui:

feature test
manual test

Bagian penting yang diuji:

role
produk
penjualan
stok
harga server-side
pembayaran
pembatalan
pembelian
laporan

Deployment

Tahap akhir membahas:

production .env
database production
APP_DEBUG=false
upload project
document root public
migration
cache
HTTPS
backup
go-live checklist

Struktur Database

Tabel utama:

Tabel Fungsi
users Akun administrator dan kasir
categories Kategori produk
units Satuan produk
products Produk, harga, stok, status
customers Data pelanggan
suppliers Data supplier
purchases Header pembelian
purchase_details Detail pembelian
sales Header penjualan
sale_details Detail penjualan
stock_movements Histori stok
settings Data toko dan nota

Relasi utama:

Category → Product ← Unit

Customer → Sale → SaleDetail → Product

Supplier → Purchase → PurchaseDetail → Product

Product → StockMovement

Prinsip Pengelolaan Stok

Saldo stok saat ini disimpan pada:

products.stock

Histori perubahan disimpan pada:

stock_movements

Stok tidak diedit langsung dari CRUD produk.

Perubahan stok terjadi melalui:

stok awal
pembelian
penjualan
pembatalan transaksi
adjustment

Secara ideal:

products.stock
=
SUM(quantity_in)
-
SUM(quantity_out)

Prinsip Keamanan Transaksi

Aplikasi transaksi tidak boleh mempercayai nilai dari browser begitu saja.

Harga penjualan dibaca ulang dari database.

Stok juga diperiksa ulang ketika transaksi disimpan.

Proses penjualan dan pembelian menggunakan:

DB::transaction()

dan produk dikunci menggunakan:

lockForUpdate()

Tujuannya agar transaksi tidak tersimpan setengah dan stok tetap konsisten ketika ada lebih dari satu transaksi.

Role Pengguna

Role:

admin
cashier

Administrator

Dapat mengelola:

master data
produk
pembelian
stok
adjustment
laporan
pembatalan transaksi

Kasir

Fokus pada:

dashboard
penjualan
detail transaksi
nota

Pembatasan tidak hanya pada menu, tetapi juga pada route melalui middleware.

Struktur Seri Tutorial

Seri ini terdiri dari 12 tahap.

01. Persiapan Proyek dan Login

Membuat project Laravel, koneksi database, login, logout, role, middleware, layout, serta akun admin dan kasir.

Slug:

persiapan-dan-login

02. Struktur Database

Membuat migration untuk seluruh tabel utama sistem kasir.

Slug:

struktur-database

03. Model, Relasi, dan Seeder

Membuat Eloquent model, relationship, casts, data awal, akun demo, produk contoh, dan settings toko.

Slug:

model-relasi-dan-seeder

04. CRUD Master Data

Membuat CRUD kategori, satuan, pelanggan, dan supplier.

Slug:

crud-master-data

05. CRUD Produk

Membuat CRUD produk dengan SKU, kategori, satuan, harga, minimum stok, status, pencarian, dan filter.

Slug:

crud-produk

06. Transaksi Penjualan

Membuat halaman POS, keranjang, pembayaran, pengurangan stok, stock movement, dan pembatalan penjualan.

Slug:

transaksi-penjualan

07. Pembelian dan Stok

Membuat transaksi pembelian, penambahan stok, update harga beli, dan pembatalan pembelian.

Slug:

pembelian-dan-stok

08. Kartu Stok dan Penyesuaian Stok

Membuat histori stok, saldo berjalan, filter movement, dan adjustment stok.

Slug:

kartu-stok-dan-penyesuaian-stok

09. Dashboard dan Laporan

Membuat dashboard operasional serta laporan penjualan berdasarkan periode, status, dan kasir.

Slug lama tetap:

dashboard-laporan-dan-nota

10. Cetak Nota Kasir

Membuat nota thermal 58mm dan 80mm yang siap dicetak dari browser.

Slug:

cetak-nota-kasir

11. Pengujian Sistem Kasir

Membuat feature test dan checklist pengujian manual untuk fitur penting.

Slug:

pengujian-sistem-kasir

12. Deploy Sistem Kasir

Mempersiapkan aplikasi untuk server production, database production, migration, HTTPS, cache, dan backup.

Slug lama tetap:

pengujian-dan-deploy

Mengapa Tutorial Dibagi Menjadi 12 Tahap?

Versi awal tutorial lebih pendek, tetapi beberapa topik terlalu besar jika digabung.

Topik yang dipisahkan:

CRUD produk
kartu stok
nota
testing

Dengan struktur 12 tahap:

  • setiap artikel lebih fokus;
  • pembaca lebih mudah mengikuti kode;
  • topik teknis tidak terlalu padat;
  • URL lama tetap dipertahankan;
  • artikel baru dapat menargetkan intent yang lebih spesifik.

Urutan Belajar

Ikuti secara berurutan:

01
↓
02
↓
03
↓
04
↓
05
↓
06
↓
07
↓
08
↓
09
↓
10
↓
11
↓
12

Beberapa tahap menggunakan kode dan database dari artikel sebelumnya.

Akun Development

Seeder menggunakan akun tutorial:

Admin
admin@example.com
admin12345

dan:

Kasir
kasir@example.com
kasir12345

Akun tersebut hanya untuk development.

Untuk production gunakan akun dan password baru.

Hasil Akhir Project

Setelah seluruh tahap selesai, aplikasi mempunyai modul:

Authentication
Role
Master Data
Product
Sales
Purchases
Inventory
Stock Card
Adjustment
Dashboard
Reports
Receipt
Testing
Deployment

Dengan demikian pembaca tidak hanya mendapatkan contoh CRUD, tetapi memahami alur aplikasi transaksi dari awal sampai production.

Pengembangan Selanjutnya

Sistem masih dapat dikembangkan dengan:

barcode scanner
QRIS
payment method
shift kasir
closing kasir
retur
multi cabang
multi gudang
member
poin pelanggan
hutang supplier
piutang pelanggan
export Excel
PDF
API
mobile app

Fitur tersebut berada di luar scope seri dasar ini.

Source Code Siap Digunakan

Semua proses pembuatan dapat dipelajari melalui seri ini.

Jika pembaca ingin menggunakan project tanpa mengikuti seluruh tahap, source code lengkap dapat disediakan sebagai produk digital.

Contoh isi paket:

project Laravel
migration
seeder
database
akun demo
panduan instalasi
source code modul

Jika produk sudah tersedia:

Source Code Sistem Kasir Laravel

Jika belum tersedia, shortcode produk dapat dihilangkan.

Tips Mengikuti Tutorial

Agar proses belajar lebih mudah:

  1. Ikuti tahap sesuai urutan.
  2. Jalankan aplikasi setelah perubahan penting.
  3. Jangan mengubah banyak bagian sekaligus ketika terjadi error.
  4. Gunakan nama tabel dan field yang sama dengan tutorial.
  5. Lakukan backup sebelum perubahan besar.
  6. Jalankan test sebelum deployment.

Ringkasan

Pada seri ini kita membangun Sistem Kasir Laravel 13 dan MySQL mulai dari project kosong sampai siap digunakan.

Fitur utama:

login
role
master data
produk
penjualan
pembelian
stok
kartu stok
adjustment
dashboard
laporan
nota
testing
deployment

Bagian transaksi menggunakan validasi server, database transaction, dan row locking agar stok dan total transaksi lebih konsisten.

Seri dibagi menjadi 12 tahap agar setiap bagian lebih fokus dan lebih mudah diikuti.

Mulailah dari tutorial pertama, kemudian lanjutkan sesuai urutan yang tersedia pada halaman seri ini.

Komentar

Belum ada komentar.

Tulis Komentar

Komentar pengunjung diperiksa sebelum ditampilkan.