Pembatasan pinjaman karena terlambat.

Write here for anything about circulation module in SLiMS.

Moderators: wynerst, buitenzorg812, purwoko, sutriadi, ido, Dicarve, ridorido

Post Reply
User avatar
ido
Posts: 36
Joined: 27 Sep 2011, 18:29
Location: Purbalingga

Pembatasan pinjaman karena terlambat.

Post by ido » 21 Nov 2014, 11:33

Terdapat sebuah kasus: sebuah buku telat dikembalikan, sudah dikirimi notifikasi email untuk segera dikembalikan, buku pun kembali, eh minta dipinjam lagi :? Jadi apa gunanya notifikasi email buat dikembaliin klo boleh dipinjam langsung lagi? Sama aja peminjaman permanent. Terus klo yang lain pingin baca/pinjam buku tersebut juga bagaimana? :roll:

Kalo bisa sih suruh nunggu dulu selama 7 hari baru boleh pinjam lagi dengan buku yang sama. Kali aja ada yang ingin membaca buku tersebut/ meminjamnya, jadi bisa gantian. Sebenarnya bisa sih kontrolnya dari pustakawan sendiri. Tapi kalo petugas sirkulasinya lupa atau beda petugas, jadi bisa aja lolos itu orang. Nah dari pada bikin beban pustakawannya mending system aja yg mikir.

Mari mengerutkan dahi sejenak, ahaha :lol:

Dari kasus diatas bisa ditarik kesimpulan sebagai berikut.
Jika "terlambat dikembalikan" dan "masih menunggu 7 hari". Maka "tidak boleh dipinjam".
Sekarang saatnya implementasinya di SLiMS ;)
Yang diharapkan atau output dari implementasi ini adalalah :

Saat peminjaman, barcode dimasukan pada form peminjaman, jika statment kasus diatas terpenuhi, maka transaksi akan dihentikan, dengan memunculkan popup notifikasi (alert) yang berisi tulisan "Maaf, buku pernah terlambat dikembalikan. Buku baru boleh dipinjam kembali setelah 7 hari, terhitung dari tanggal pengembalian."

Karena bukan saya yang mbuat SLiMS jadi saya tidak tau harus langsung menuju kemana peraturan ini dibuat, tapi tidak perlu putus asa, mari kita runtut alurnya :
  1. Kasus ini terjadi saat sirkulasi berjalan. lebih tepatnya saat peminjaman koleksi.
    • masuk menu sirkulasi dan mulai transaksi baru.
    • Arahkan kursor pada tab "peminjaman", maka akan terlihat link dari tab tersebut.
      Image
  2. Buka file diatas (/admin/modules/circulation/loan.php).
    Setelah terbuka, kita cari deh form untuk menginput barcodenya.
    Berikut adalah kode form untu input barcode.

    Code: Select all

    <form name="itemLoan" id="loanForm" action="circulation_action.php" method="post" style="display: inline;">
        <?php echo __('Insert Item Code/Barcode'); ?> :
        <input type="text" id="tempLoanID" name="tempLoanID" />
        <input type="submit" value="<?php echo __('Loan'); ?>" class="btn btn-warning button" />
    </form>
    
  3. Dari kode diatas kita bisa melihat,bahwa form tersebut akan mengirimkan data barcode dari tag input dengan nama "tempLoanID" menuju file yang ada dalam atribut "action", yaitu circulation_action.php. Silahken buka file tersebut (/admin/modules/circulation/circulation_action.php)
  4. Setelah file circulation_action.php terbuka cari dimana tempLoanID dikirim. (gunakan fasilitas find (ctrl+f) dengan kata kunci tempLoanID)
    Yang jadi fokus adalah baris nomer 129 - 204. Kepanjangan kalau ditulis disini. ;)
    Disitu terdapat beberapa settingan jika sebuah statment tercapai, akan memunculkan alert menggunkan javascript.
  5. Oke, mari kita tambahin alert kita. tambahkan kode berikut sebelum statmen terakhir " }else{ " atau letakan pada baris 198.

    Code: Select all

    } else if ($add == ITEM_LOAN_OVERDUE){
      echo '<script type="text/javascript">';
        echo 'alert(\''.__('Maaf, buku pernah terlambat dikembalikan. Buku baru boleh dipinjam kembali setelah 7 hari, terhitung dari tanggal pengembalian.').'\');';
        echo 'location.href = \'loan.php\';';
      echo '</script>';
    
    Oke deh, klo sudah ditambahkan jangan lupa disimpan ;)
  6. Kode itu diatas belum bisa berjalan karena statmennya belum terpenuhi, sekarang kita buka file circulation_base_lib.inc.php (/admin/modules/circulation/circulation_base_lib.inc.php)

    Tambahkan kode berikut pada baris 39.

    Code: Select all

    define('ITEM_LOAN_OVERDUE', 11);
    Untuk mengecek keterlambatan, kita dapat mengambil data dari tabel loan
    Tambahkan kode berikut pada baris 166.

    Code: Select all

    // if already overdue
    $_overdue_q = $this->obj_db->query("SELECT (TO_DAYS(return_date)-TO_DAYS(due_date)), (TO_DAYS(DATE(NOW()))-TO_DAYS(return_date)) FROM loan AS L WHERE L.item_code='$str_item_code' AND L.is_lent=1 AND L.is_return=1 AND L.member_id='".$_SESSION['memberID']."' ORDER BY L.return_date DESC LIMIT 1");
        if($_overdue_q->num_rows > 0){
            $_overdue_d = $_overdue_q->fetch_row();
            if($_overdue_d[0] > 0 && $_overdue_d[1] < 7){
                return ITEM_LOAN_OVERDUE;
            }
        }
    
    (TO_DAYS(return_date)-TO_DAYS(due_date)) => mengetahui terlambat atau tidak => tanggal dikembalikan dikurang tanggal harus kembali.
    (TO_DAYS(DATE(NOW()))-TO_DAYS(return_date)) => data lama waktu dari tanggal dikembalikan => hari ini dikurangi tanggal dikembalikan.
    $_overdue_d[0] > 0 => statment keterlambatan.
    $_overdue_d[1] < 7 => statment menunggu 7 hari (jika ingin dipersingkat atau diperlama silahkan ganti angka 7 sesuai kebutuhan.
  7. Simpan file dan silahken dicoba.
    Semoga bermanfaat. ;)

User avatar
buitenzorg812
Posts: 836
Joined: 20 Sep 2011, 14:18
Location: Jakarta, Indonesia
Contact:

Re: Pembatasan pinjaman karena terlambat.

Post by buitenzorg812 » 08 Dec 2014, 20:10

Joss ini mas! Sangat bermanfaat dan terima kasih :).

shinichihuda
Posts: 10
Joined: 28 Jan 2014, 09:00

Re: Pembatasan pinjaman karena terlambat.

Post by shinichihuda » 11 Apr 2015, 07:45

jika kasusnya :
kadang ada siswa terlambat mengembalikan buku dan harus bayar denda
tapi dia bandel tak bayar denda.
bagaimana membuat sistem melarang dia untuk pinjam buku sebelum dendanya dibayar/lunas.
ini untuk menghindari jika misalnya sebulan kemudian dia ingin pinjam dan menganggap "paling pustakawannya sudah lupa dia belum bayar denda",
tapi sistem kan gak mungkin lupa.
terima kasih.

Post Reply