Membawa teknologi lebih dekat untuk semua
Cara Modern Membuat Nomor Invoice dan Dokumen Bisnis di Laravel
Membuat nomor invoice, nomor transaksi, purchase order, atau dokumen bisnis lainnya terdengar sederhana. Namun ketika aplikasi mulai berkembang dan melayani banyak pengguna secara bersamaan, proses menghasilkan nomor dokumen ternyata menjadi salah satu bagian yang cukup menantang.
Banyak aplikasi masih menggunakan pendekatan seperti mencari nomor terbesar pada tabel invoice kemudian menambahkannya satu angka. Cara ini memang mudah diterapkan, tetapi memiliki beberapa kelemahan.
Semakin besar jumlah data, proses pencarian menjadi semakin berat. Selain itu terdapat risiko race condition ketika dua permintaan datang pada waktu yang hampir bersamaan dan keduanya membaca nomor terakhir yang sama sebelum data baru disimpan.
Untuk mengatasi masalah tersebut kami membuat Laravel ID Generator, sebuah package open source yang dirancang untuk menghasilkan nomor dokumen secara cepat, aman, dan mudah dikonfigurasi.
Mengapa kami membuat package ini
Saat mengembangkan berbagai aplikasi seperti Point of Sale, Online Shop, Procurement, hingga sistem manajemen Qurban, kami menemukan kebutuhan yang sama berulang kali.
Setiap aplikasi membutuhkan nomor dokumen yang unik.
Invoice.
Nomor transaksi.
Purchase Order.
Nomor Procurement.
Nomor Referensi.
Alih alih menulis logika yang sama di setiap proyek, kami memutuskan membuat sebuah package yang dapat digunakan kembali pada berbagai aplikasi Laravel.
Pendekatan yang berbeda
Laravel ID Generator tidak melakukan pencarian ke tabel transaksi untuk mengetahui nomor terakhir.
Sebaliknya package ini menyimpan satu baris data kecil pada tabel id_sequences yang hanya berisi status counter setiap generator.
Konfigurasi seperti prefix, suffix, padding, dan aturan reset tetap berada di dalam file konfigurasi Laravel sehingga dapat dikelola melalui version control.
Pendekatan ini memberikan beberapa keuntungan.
- Performa tetap stabil meskipun tabel transaksi telah berisi jutaan data.
- Aman digunakan pada banyak request secara bersamaan.
- Tidak memerlukan scheduler untuk melakukan reset bulanan maupun tahunan.
- Konfigurasi lebih mudah dipelihara.
Mendukung berbagai jenis reset
Package ini mendukung beberapa jenis scope.
- Global
- Tahunan
- Bulanan
- Harian
Reset dilakukan secara otomatis ketika generator mendeteksi perubahan periode. Tidak ada proses background maupun scheduler yang harus dijalankan.
Aman terhadap concurrent request
Salah satu fokus utama package ini adalah menghindari duplikasi nomor dokumen.
Setiap proses generate dijalankan di dalam database transaction dan melakukan row locking pada sequence yang sedang digunakan.
Dengan pendekatan tersebut beberapa pengguna dapat membuat invoice pada waktu yang bersamaan tanpa menghasilkan nomor yang sama.
Instalasi
composer require devaspid/laravel-id-generator
Setelah package terpasang cukup publish konfigurasi dan migration kemudian jalankan migration.
php artisan vendor:publish --tag=id-generator-config
php artisan vendor:publish --tag=id-generator-migrations
php artisan migrate
php artisan id-generator:sync
Contoh penggunaan
$invoice->number = IdGenerator::generate('invoice');
Konfigurasi generator cukup dilakukan pada file konfigurasi.
'invoice' => [
'prefix' => 'INV-{Y}{m}-',
'padding' => 6,
'scope' => 'monthly',
]
Generator yang sama juga dapat digunakan untuk Transaction, Procurement, Purchase Order, maupun jenis dokumen bisnis lainnya.
Selengkapnya
devaspid/laravel-id-generator
Open Source untuk Komunitas
Laravel ID Generator merupakan salah satu kontribusi open source pertama dari Dev ASP ID.
Kami berharap package ini dapat membantu developer Laravel dalam membangun aplikasi bisnis yang lebih cepat, lebih aman, dan lebih mudah dipelihara.
Kami juga sangat terbuka terhadap issue, diskusi, maupun pull request dari komunitas.
Selamat mencoba.





