Login Wallpaper

Komponen penting dalan aplikasi Sistem Informasi Manajemen Rumah Sakit (SIMRS) berbasis web salah satunya adalah form login serta proses validasi akses user. Pada umumnya form login akan tampil pada saat pertama kali user melakukan akses ke dalam aplikasi tersebut kemudian mengisi username, password dan captcha (jika diperlukan). Sistem kemudian melakukan validasi, memeriksa apakah kombinasi ketiga data tersebut sudah sesuai dengan ketentuan atau belum. Apabila tidak memenuhi prasyarat maka sistem akan menampilkan notifikasi kegagalan akses pada user. Sebaliknya, apabila data sudah sesuai maka sistem akan memberikan sesi akses pada user tersebut sesuai dengan haknya.

Sebagai catatan, ini adalah artikel revisi dari sebelumnya. Saya telah melakukan pembaharuan agar SIMRS yang akan kita kembangkan nanti lebih mudah disesuaikan dengan keinginan masing-masing. Sebelumnya kita sudah belajar mengenai cara membuat template aplikasi web untuk SIMRS. Skarang kita akan menggunakan template tersebut sebagai halaman utama aplikasi. Silahkan kunjungi postingan tersebut dan download source code nya

Jangan khawatir karena saya akan menjelaskan setiap komponennya secara berkelanjutan. Untuk kesempatan kali ini kita akan menambahkan halaman login, proses validasi akses dan bagaimana membatasi pengguna SIMRS sehingga tidak semuanya bisa mengakses halaman utama yang tersedia. Secara umum perhatikan flowmap berikut ini:


Penjelasan:

  1. Pengguna masuk ke halaman form login pertama kali
  2. Pengguna mengisi email dan password
  3. Pengguna memilih tombol login dan sistem melakukan validasi
  4. Apabila kombinasi email dan password salah maka sistem menampilkan notifikasi gagal.
  5. apabila kombinasi email dan password benar maka sistem menampilkan notifikasi berhasil.

Langsung saja untuk langkah pembuatannya silahkan perhatikan baik-baik.

1. Membuat database dan tabel akses

Langkah pertama adalah membuat sebuah tabel pada database MySql dengan properti sebagai berikut:

Anda bisa membuat database susuai keinginan anda. Dalam postingan kali ini saya membuat database dengan nama "belajar_simrs" kemudian membuat tabel dengan nama "akes". Untuk penjelasan masing-masing kolom/atribut pada tabel diatas diantaranya adalah:

  1. id_akses : Adalah kolom kunci utama dengan nilai unik untuk mewakili data akses yang dibuat.
  2. nama : Adalah nama pengguna/user yang akan melakukan login, tipenya "text" untuk antisipasi jika nama penggunannya panjang.
  3. kontak : Adalah informasi tambahan untuk nomor kontak pengguna, kolom ini bisa dikosongkan untuk antisipasi jika pengguna tidak memiliki nomor kontak.
  4. email : Adalah informasi alamat email pengguna yang akan digunakan sebagai salah satu parameter login nanti. Disini type nya text karena untuk antisipasi jika alamat emailnya terlalu panjang.
  5. password : Adalah informasi kunci rahasia yang akan digunakan oleh pengguna pada saat melakukan login nanti.
  6. akses : Adalah informasi hak akses atau entitas yang melakukan login nanti misalnya Admin, Apoteker, Dokter dll.

Silahkan buat satu buah record sebagai bahan percobaan nanti pada saat melakukan validasi login. Disini saya contohkan untuk pengisiannya.

Penting:

Untuk kolom bagian password, silahkan isi dengan nilai yang sudah di enkripsi ke md5. Caranya silahkan masuk ke web has generator di sini, kemudian masukan passwordnya di kolom textarea yang sudah tersedia dan klik generate. nanti akan muncul nilai md5 hash. Copy md5 hash tersebut ke kolom password pada tabel yang sudah dibuat tadi.

2. Membuat halaman form login

Setelah mempersiapkan database untuk validasinya, sekarang kita buat halaman form login. Pada bagian utama directory project yang sudah didownload tadi, silahkan buat sebuah file dengan nama Login.php kemudian ketik source code berikut ini:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
    <?php session_start(); ?>
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
            <meta content="width=device-width, initial-scale=1.0" name="viewport">
            <title>SIMRS</title>
            <meta content="Gambaran Umum Tentang Aplikasi" name="description">
            <meta content="Kata Kunci Jika Ada Pencarian" name="keywords">
            <!-- Favicons -->
            <link href="assets/img/logo.png" rel="icon">
            <link href="assets/img/logo.png" rel="apple-touch-icon">
            <!-- Google Fonts -->
            <link href="assets/fonts/fonts.css" rel="stylesheet">
            <!-- Vendor CSS Files -->
            <link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
            <link href="vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
            <link href="vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
            <link href="vendor/quill/quill.snow.css" rel="stylesheet">
            <link href="vendor/quill/quill.bubble.css" rel="stylesheet">
            <link href="vendor/remixicon/remixicon.css" rel="stylesheet">
            <link href="vendor/simple-datatables/style.css" rel="stylesheet">
            <!-- Template Main CSS File -->
            <link href="assets/css/style.css" rel="stylesheet">
            <link href="vendor/mdb-ui-kit/css/mdb.min.css" rel="stylesheet">
            <script src="vendor/jquery/dist/jquery.min.js" type="text/javascript"></script>
            <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/driver.js@1.0.1/dist/driver.css"/>
            <!-- =======================================================
            * Template Name: NiceAdmin - v2.3.1
            * Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
            * Author: BootstrapMade.com
            * License: https://bootstrapmade.com/license/
            ======================================================== -->
        </head>
        <body>
            <main class="login_background">
                <div class="container">
                    <section class="section register min-vh-100 d-flex flex-column align-items-center justify-content-center py-4">
                        <div class="container">
                            <div class="row justify-content-center">
                                <div class="col-lg-4 col-md-6 d-flex flex-column align-items-center justify-content-center">
                                    <div class="d-flex justify-content-center py-4">
                                        <img src="assets/img/logo.png" alt="" width="100px"><br>
                                    </div>
                                    <div class="card mb-3">
                                        <div class="card-body">
                                            <div class="pt-4 pb-2">
                                                <h5 class="card-title text-center pb-0 fs-4">Login Ke Akun Anda</h5>
                                                <p class="text-center small">Masukan Email Dan Password Untuk Melakukan Login</p>
                                            </div>
                                            <form action="_Page/Login/ProsesLogin.php" class="row g-3" method="POST">
                                                <div class="col-12">
                                                    <label for="email" class="form-label">Email</label>
                                                    <div class="input-group has-validation">
                                                        <span class="input-group-text" id="inputGroupPrepend">@</span>
                                                        <input type="email" name="email" class="form-control" id="email" required>
                                                        <div class="invalid-feedback">Please enter your username.</div>
                                                    </div>
                                                </div>
                                                <div class="col-12">
                                                    <label for="password" class="form-label">Password</label>
                                                    <input type="password" name="password" class="form-control" id="password" required>
                                                    <div class="invalid-feedback">Please enter your password!</div>
                                                    <small class="credit">
                                                        <div class="form-check">
                                                            <input class="form-check-input" type="checkbox" value="Tampilkan" id="TampilkanPassword2" name="TampilkanPassword2">
                                                            <label class="form-check-label" for="TampilkanPassword2">
                                                                Tampilkan Password
                                                            </label>
                                                        </div>
                                                    </small>
                                                </div>
                                                <div class="col-12" id="NotifikasiLogin">
                                                    <?php
                                                        if(empty($_SESSION ["SesiNotifikasi"])){
                                                            echo "Pastikan email dan password sudah benar.";
                                                        }else{
                                                            $Notifikasi=$_SESSION ["SesiNotifikasi"];
                                                            echo '<span class="text-danger">'.$Notifikasi.'</span>';
                                                        }
                                                        unset($_SESSION['SesiNotifikasi']);
                                                    ?>
     
                                                </div>
                                                <div class="col-12">
                                                    <button class="btn btn-primary w-100" type="submit" id="TombolLogin">Login</button>
                                                </div>
                                            </form>
                                        </div>
                                    </div>
                                    <div class="credits">
                                        <small>
                                            <div class="copyright text-white">
                                                &copy; Copyright <strong><span>SIMRS</span></strong>. All Rights Reserved 2023
                                            </div>
                                            <div class="credits">
                                                Designed by <a href="" class="text-light">Nama Kamu</a>
                                            </div>
                                        </small>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </section>
                </div>
            </main>
        </body>
    </html>

3. Buat Koneksi Database

Untuk menghubungkan database dengan aplikasi yang akan kita buat maka baiknya kita buat sebuah file koneksi yang bisa kita panggil nantinya. Silahkan buat sebuah file pada folder "_Config" yang sudah tersedia pada project yang  dengan nama file Connection.php

Silahkan ketik source code berikut ini:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?php
    //Ini adalah halaman untuk melakukan konfigurasi database
    $servername = "localhost";
    $username = "root";
    $password = "";
    $db = "belajar_simrs";
    // Create connection
    $Conn = new mysqli($servername, $username, $password, $db);
    // Check connection
    if ($Conn->connect_error) {
        die("Connection failed: " . $Conn->connect_error);
    }
?>

Keterangan:
  • Baris ke 3 pada variabel $servername diisi dengan nama server, secara default bernilai "localhost".
  • Baris ke 4 username secara default pada localhost bernilai "root"
  • Baris ke 5 password secara default pada localhost bernilai null.
  • Baris ke 6 variabel $db diisi dengan nama databasenya.

4. Validasi Akses Login

Form login yang sudah dibuat tadi akan mengarah ke sebuah file pada directory _Page/Login/Login.php dimana berfungsi untuk melakukan validasi login. Silahkan ketik source code berikut ini:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
    session_start();
    include "../../_Config/Connection.php";
    //Validasi keberadaan email dan password
    if(empty($_POST["email"])){
        $_SESSION ["SesiNotifikasi"]="Email Tidak Boleh Kosong";
        header("Location:../../Login.php");
    }else{
        if(empty($_POST["password"])){
            $_SESSION ["SesiNotifikasi"]="Password Tidak Boleh Kosong";
            header("Location:../../Login.php");
        }else{
            $email=$_POST["email"];
            $password=$_POST["password"];
            $passwordMd5=md5($password);
            //QUERY MEMANGGIL DATA DARI DATABASE Akses
            $Qry=mysqli_query($Conn,"SELECT*FROM akses WHERE email='$email' AND password='$passwordMd5'")or die(mysqli_error($Conn));
            $DataAkses = mysqli_fetch_array($Qry);
            if(!empty($DataAkses["id_akses"])){
                $_SESSION ["SesiIdAkses"]=$DataAkses["id_akses"];
                $_SESSION ["SesiNotifikasi"]="Login Berhasil";
                header("Location:../../index.php");
            }else{
                $_SESSION ["SesiNotifikasi"]="Login gagal karena kombinasi email dan password tidak valid";
                header("Location:../../Login.php");
            }
        }
    }	
?>

Keterangan :
  1. Baris ke 2 berfungsi untuk menyatakan dimulainya menangkap variabel SESSION.
  2. Baris ke 3 berfungsi untuk memanggil proses koneksi dengan database.
  3. Baris ke 6-7 artinya jika email kosong maka sistem akan melakukan redirect ke halaman login kembali dengan notifikasinya.
  4. Baris ke 10-11 artinya jika paassword kosong maka sistem akan melakukan redirect ke halaman login kembali dengan notifikasinya.
  5. Baris ke 13-14 artinya menyatakan variabel email dan password sesuai data yang ditangkap tadi.
  6. Baris ke 15 artinya mengubah nilai password menjadi format md5.
  7. Baris ke 19 menyatakan jika email dan password tidak ditemukan pada database.
  8. Baris ke 20, 21 dan 22 menyatakan jika email dan password valid dan ada pada database maka sistem akan menampilkan notifikasi dan mengarahkannya pada halaman index.php
Agar notifikasi ketika login gagal muncul pada halaman login, maka kita buat beberapa baris source code pada halaman form Login.php yang sudah kita buat sebelumnya. Silahkan ubah file Login.php dengan source code berikut:
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
<?php session_start(); ?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta content="width=device-width, initial-scale=1.0" name="viewport">
        <title>SIMRS</title>
        <meta content="Gambaran Umum Tentang Aplikasi" name="description">
        <meta content="Kata Kunci Jika Ada Pencarian" name="keywords">
        <!-- Favicons -->
        <link href="assets/img/logo.png" rel="icon">
        <link href="assets/img/logo.png" rel="apple-touch-icon">
        <!-- Google Fonts -->
        <link href="assets/fonts/fonts.css" rel="stylesheet">
        <!-- Vendor CSS Files -->
        <link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
        <link href="vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
        <link href="vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
        <link href="vendor/quill/quill.snow.css" rel="stylesheet">
        <link href="vendor/quill/quill.bubble.css" rel="stylesheet">
        <link href="vendor/remixicon/remixicon.css" rel="stylesheet">
        <link href="vendor/simple-datatables/style.css" rel="stylesheet">
        <!-- Template Main CSS File -->
        <link href="assets/css/style.css" rel="stylesheet">
        <link href="vendor/mdb-ui-kit/css/mdb.min.css" rel="stylesheet">
        <script src="vendor/jquery/dist/jquery.min.js" type="text/javascript"></script>
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/driver.js@1.0.1/dist/driver.css"/>
        <!-- =======================================================
        * Template Name: NiceAdmin - v2.3.1
        * Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
        * Author: BootstrapMade.com
        * License: https://bootstrapmade.com/license/
        ======================================================== -->
    </head>
    <body>
        <main class="login_background">
            <div class="container">
                <section class="section register min-vh-100 d-flex flex-column align-items-center justify-content-center py-4">
                    <div class="container">
                        <div class="row justify-content-center">
                            <div class="col-lg-4 col-md-6 d-flex flex-column align-items-center justify-content-center">
                                <div class="d-flex justify-content-center py-4">
                                    <img src="assets/img/logo.png" alt="" width="100px"><br>
                                </div>
                                <div class="card mb-3">
                                    <div class="card-body">
                                        <div class="pt-4 pb-2">
                                            <h5 class="card-title text-center pb-0 fs-4">Login Ke Akun Anda</h5>
                                            <p class="text-center small">Masukan Email Dan Password Untuk Melakukan Login</p>
                                        </div>
                                        <form action="_Page/Login/ProsesLogin.php" class="row g-3" method="POST">
                                            <div class="col-12">
                                                <label for="email" class="form-label">Email</label>
                                                <div class="input-group has-validation">
                                                    <span class="input-group-text" id="inputGroupPrepend">@</span>
                                                    <input type="email" name="email" class="form-control" id="email" required>
                                                    <div class="invalid-feedback">Please enter your username.</div>
                                                </div>
                                            </div>
                                            <div class="col-12">
                                                <label for="password" class="form-label">Password</label>
                                                <input type="password" name="password" class="form-control" id="password" required>
                                                <div class="invalid-feedback">Please enter your password!</div>
                                                <small class="credit">
                                                    <div class="form-check">
                                                        <input class="form-check-input" type="checkbox" value="Tampilkan" id="TampilkanPassword2" name="TampilkanPassword2">
                                                        <label class="form-check-label" for="TampilkanPassword2">
                                                            Tampilkan Password
                                                        </label>
                                                    </div>
                                                </small>
                                            </div>
                                            <div class="col-12" id="NotifikasiLogin">
                                                <?php
                                                    if(empty($_SESSION ["SesiNotifikasi"])){
                                                        echo "Pastikan email dan password sudah benar.";
                                                    }else{
                                                        $Notifikasi=$_SESSION ["SesiNotifikasi"];
                                                        echo '<span class="text-danger">'.$Notifikasi.'</span>';
                                                    }
                                                    unset($_SESSION['SesiNotifikasi']);
                                                ?>
                                                
                                            </div>
                                            <div class="col-12">
                                                <button class="btn btn-primary w-100" type="submit" id="TombolLogin">Login</button>
                                            </div>
                                        </form>
                                    </div>
                                </div>
                                <div class="credits">
                                    <small>
                                        <div class="copyright text-white">
                                            &copy; Copyright <strong><span>SIMRS</span></strong>. All Rights Reserved 2023
                                        </div>
                                        <div class="credits">
                                            Designed by <a href="" class="text-light">Nama Kamu</a>
                                        </div>
                                    </small>
                                </div>
                            </div>
                        </div>
                    </div>
                </section>
            </div>
        </main>
    </body>
</html>

5. Pembatasan Akses Halaman Utama

Agar pengguna tidak langsung diarahkan ke halaman utama (index.php) saat pertama kali menjalankan web maka dibutuhkan validasi akses pada halaman index.php itu sendiri. Silahkan buat file Session.php pada folder "_Config" dan ketik source code berikut ini:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
    //Menangkap seasson kemudian menampilkannya
    session_start();
    if(empty($_SESSION["SesiIdAkses"])){
        header("Location:Login.php");
    }else{
        $SessionIdAkses=$_SESSION ["SesiIdAkses"];
        //Inisiasi data akses dari database
        $QuerySessionAkses = mysqli_query($Conn,"SELECT * FROM akses WHERE id_akses='$SessionIdAkses'")or die(mysqli_error($Conn));
        $DataSessionAkses = mysqli_fetch_array($QuerySessionAkses);
        //Apabila data akses ada
        if(!empty($DataSessionAkses['id_akses'])){
            $SessionNama= $DataSessionAkses['nama'];
            $SessionEmail= $DataSessionAkses['email'];
            $SessionKontak= $DataSessionAkses['kontak'];
            $SessionAkses= $DataSessionAkses['akses'];
        }else{
            header("Location:Login.php");
        }
    }
?>

6. Proses Logout

Untuk menghapus sesi login ketika pengguna sudah login dan berada pada halaman utama (index.php) kita buat tombol logout dan prosesnya. Silahkan ubah file menu pada directory "_Partial/Menu.php" menjadi sebagai berikut:

  1. <aside id="sidebar" class="sidebar menu_background">
  2. <ul class="sidebar-nav" id="sidebar-nav">
  3. <li class="nav-item">
  4. <a class="nav-link collapsed" href="index.php">
  5. <i class="bi bi-grid"></i>
  6. <span>Dashboard</span>
  7. </a>
  8. </li>
  9. <li class="nav-item">
  10. <a class="nav-link" href="index.php">
  11. <i class="bi bi-key"></i>
  12. <span>Akses</span>
  13. </a>
  14. </li>
  15. <li class="nav-item">
  16. <a class="nav-link" href="index.php">
  17. <i class="bi bi-people"></i>
  18. <span>Pasien</span>
  19. </a>
  20. </li>
  21. <li class="nav-item">
  22. <a class="nav-link" href="index.php">
  23. <i class="bi bi-file-earmark-medical-fill"></i>
  24. <span>Kunjungan</span>
  25. </a>
  26. </li>
  27. <li class="nav-item">
  28. <a class="nav-link" href="index.php">
  29. <i class="bi bi-coin"></i>
  30. <span>Keuangan</span>
  31. </a>
  32. </li>
  33. <li class="nav-item">
  34. <a class="nav-link" href="index.php">
  35. <i class="bi bi-capsule-pill"></i>
  36. <span>Apotek</span>
  37. </a>
  38. </li>
  39. <li class="nav-item">
  40. <a class="nav-link" href="index.php">
  41. <i class="bi bi-file-medical"></i>
  42. <span>Laboratorium</span>
  43. </a>
  44. </li>
  45. <li class="nav-item">
  46. <a class="nav-link" href="index.php">
  47. <i class="bi bi-camera"></i>
  48. <span>Radiologi</span>
  49. </a>
  50. </li>
  51. <li class="nav-item">
  52. <a class="nav-link" href="index.php">
  53. <i class="bi bi-file-bar-graph"></i>
  54. <span>Laporan</span>
  55. </a>
  56. </li>
  57. <li class="nav-item">
  58. <a class="nav-link" href="index.php">
  59. <i class="bi bi-gear"></i>
  60. <span>Pengaturan</span>
  61. </a>
  62. </li>
  63. <li class="nav-item">
  64. <a class="nav-link" href="_Page/Logout/Logout.php">
  65. <i class="bi bi-box-arrow-in-left"></i>
  66. <span>Keluar</span>
  67. </a>
  68. </li>
  69. </ul>
  70. </aside>
  71.  

Buat juga proses logout dengan membuat file pada directory "_Page/Logout/Logout.php" sebagai berikut:

  1. <?php
  2. session_destroy();
  3. session_unset();
  4. session_start();
  5. unset($_SESSION['SesiIdAkses']);
  6. $_SESSION ["SesiIdAkses"]="";
  7. unset($_SESSION['SesiNotifikasi']);
  8. $_SESSION ["SesiNotifikasi"]="";
  9. header('Location:../../Login.php');
  10. ?>
7. Membatasi Akses Halaman Utama
Langkah terakhir adalah, ketika kita ingin membatasi akses pengguna pada halaman utama aplikasi. Ketika pengguna belum melakukan akses login maka sistem akan mengarahkan ke halaman form login, sebaliknya ketika user sudah melakukan login maka sistem akan mengarahkan pada halaman utama dan menampilkan notifikasi. Silahkan lakukan perubahan pada file index.php menjadi seperti berikut:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <?php
  5. include "_Config/Connection.php";
  6. include "_Config/Session.php";
  7. include "_Partial/Head.php";
  8. ?>
  9. </head>
  10. <body>
  11. <?php
  12. include "_Partial/Navbar.php";
  13. include "_Partial/Menu.php";
  14. ?>
  15. <main id="main" class="main">
  16. <?php
  17. include "_Partial/PageTitle.php";
  18. include "_Partial/RoutingPage.php";
  19. include "_Partial/Modal.php";
  20. ?>
  21. </main>
  22. <?php
  23. include "_Partial/Copyright.php";
  24. include "_Partial/BackToTop.php";
  25. include "_Partial/FooterJs.php";
  26. include "_Partial/RoutingJs.php";
  27. include "_Partial/RoutingSwal.php";
  28. ?>
  29. </body>
  30. </html>
8. Test Program

Apabila kita coba maka programnya akan berjalan seperti berikut:



Modal kerja atau yang sering disebut working capital adalah aktiva-aktiva jangka pendek yang digunakan untuk membiayai operasional perusahaan sehari-hari. Aktiva ini bertujuan untuk digunakan dalam proses produksi barang atau pelayanan jasa sehingga diharapkan baiaya tersebut dapat kembali dalam jangka pendek dan menghasilkan laba dari selisih tersebut. Pada kesempatan kali ini kita akan membahas mengenai konsep dasar dan pengertian modal kerja menurut para ahli secara lengkap berdasarkan teori yang saya ketahui dan baca dari berbagai sumber penelitian yang valid. Selain itu kita akan membahas pula mengenai aspek-aspek apa saja yang berkaitan dengan modal kerja tersebut serta manfaatnya dalam dunia bisnis pada saat ini.

Sebagai pembukaan maka saya jelaskan bahwa dengan semakin berkembangnya pasar global dan dunia usaha yang semakin maju, dengan persaingan antar perusahaan baik nasional maupun internasional, khususnya perusahaan dengan jenis yang sama akan semakin ketat. Untuk menjaga stabilitas kesehatan keuangan sebuah perusahaan dalam iklim atmosfer persaingan seperti saat ini dibutuhkan strategi pengelolaan sumber daya dan beban keuangan yang dilakukan oleh pihak manjemen perusahaan dengan baik dan tepat. Bagi pihak manajemen, selain dituntut untuk melakukan pengelolaan seluruh sumber daya yang dimiliki perusahaan secara efektif dan efisien, juga dituntut untuk dapat menghasilakan keputusan-keputusan berdasarkan Analisa akurat yang menunjang terhadap pencapain tujuan perusahaan di masa yang akan datang.

Perkembangan dunia usaha dan bisnis nasional saat ini ditandai dengan perkembangan yang cepat disegala bidang. Perusahaan akan melakukan berbagai komponen aktivitas untuk mencapai tujuan-tujuan bisnisnya yaitu untuk memperoleh keuntungan (Profit) dan menjaga kelangsungan hidup dan pertumbuhan perusahaan itu sendiri (growth). Oleh sebab itu pihak manjemen membutuhkan informasi sebagai dasar analisis sehingga menghasilkan rekomendasi strategi bisnis untuk pencapaian tujuan perusahaan tersebut.

Tujuan dari sebuah perusahaan secara umum adalah mendapatkan laba atau keuntungan secara finansial. Salah satu aktivitas utama perusahaan dalam mencapai laba adalah dengan melakukan penjualan. Tidak bisa kita pungkiri bahwa penjualan merupakan penyumbang keuangan terbesar dari suatu perusahaan. Agar keuntungan itu dapat diperoleh sesuai target, maka perusahaan harus dapat mengelola stabilitas penjualannya tersebut dengan membuat sebuah recana strategis dan prosedur kerja yang baik dalam proses penjualan dan mempermudah pembeli dalam proses transaksinya sehingga dapat dicapai tingkat penjualnnya yang maksimal. Sebelum kita membahas lebih mendalam mengenai modal kerja suatu perusahaan, maka dari uraian di atas sudah jelas bahwa modal kerja tersebut sangat dibutuhkan oleh perusahaan salah satunya adalah sebagai power dalam menjalankan aktivitas penjualan.

Semua perusahaan selalu membutuhkan modal kerja untuk membiayai kegiatan operasionalnya baik perusahaan yang bergerak dalam bidang industri maupun jasa. Modal kerja harus selalu dalam keadaan berputar. Selama perusahaan melakukan kegiatan usaha karena pengelolaan modal kerja yang baik adalah efisiensi modal kerja yang dapat dilihat dari perputaran modal kerja tersebut. Perputaran modal kerja dimulai dari saat kas diinvestasikan dalam komponen modal kerja saat kembali menjadi kas. Dalam perjalanannya kas tersebut mengalami konversi dari mulai digunakan untuk membeli alat-alat, gaji pegawai, bahan baku hingga dilakukan penjualan dan kembali menjadi kas dengan nilai yang berbeda.

Pengertian Modal Kerja Menurut Para Ahli

Setelah beberapa saat mencari pengertian modal kerja dari berbagai sumber, akhirnya saya menemukan satu sumber lagi yang menurut saya ini adalah pendapat yang lebih sesuai dengan apa yang ingin saya bahas pada kesempatan kali ini. Menurut pendapat Sutrisno (2008) mengemukakan bahwa modal kerja adalah dana yang digunakan oleh perusahaan untuk memenuhi kebutuhan operasional perusahaan sehari-hari seperti pembelian bahan baku, pembayaran upah buruh, membayar utang dan pembayaran lainnya. Pendapat tersebut menunjukan bahwa modal digambarkan sebagai sesuatu yang lebih nyata dan sesuai dengan pandangan para pelaku bisnis kecil menengah saat ini.

Dari beberapa pendapat para pakar tersebut maka kita akan mengambil kesimpulan yang lebih relevan. Modal kerja adalah investasi perusahaan dalam bentuk  harta jangka pendek dalam bentuk uang tunai atau dana yang juga bisa bersumber dari konversi surat berharga, piutang dan persediaan yang secara singkat digunakan dalam proses produksi. Selain itu modal usaha digunakan juga untuk memenuhi kebutuhan operasi perusahaan secara singkat selama proses berlangsung waktu itu juga. Kebutuhan operasional tersebut meliputi pembeliaan bahan baku, pembayaran upah karyawan, pembayaran kewajiban rutin dan pembayaran lainnya yang menopang proses selama alur tersebut berlangsung. Hingga setelah proses penjualan terjadi dan modal kembali menjadi kas sebagai dana akhirnya menghasilkan selisih  yang disebut dengan laba.

Memahami Pecking Order Theory

Pecking order theory

adalah literasi para pebisnis yang menggambarkan sebuah tingkatan (level) dalam pencairan dana perusahaan. Berdasarkan teori ini menunjukan bahwa sebuah perusahaan bisnis dengan produksi tinggi lebih memilih menggunakan internal equity dalam membiayai sebuah investasi dan mengimplementasikannya dalam strategi bisnis menjadi peluang pertumbuhan. Theory pecking order menyatakan bahwa sebuah perusahaan bisnis lebih suka pendanaan internal yang bersumber dari laba dan proses operasional  dibandingkan yang bersumber dari pendanaan eksternal. Hal ini merupakan rujukan krakteristik dalam bisnis dimana perusahaan lebih memilih utang yang aman dibandingkan utang yang beresiko serta yang terakhir adalah saham biasa (Myers & Majluf 1984). Theory pecking order yang dibangun berdasarkan referensi teoritis dan beberapa asumsi para pakar yang  menekankan pada pentingnya financial slack yang cukup di perusahaan guna mendanai proyek-proyek dengan dana internal yang lebih aman. Internal equity diperoleh dari laba ditahan atau laba yang diendapkan dan depresiasi atau amortisasi dengan tujuan yang jelas. Utang perusahaan diperoleh dari pinjaman kreditur, sedang eksternal equity diperoleh karena perusahaan menerbitkan saham baru sehingga diakui sebagai danainternal atau modal yang diperoleh darkepentingan permodalan para pemegang saham. 

The pecking order theory berpendapat bahwa perusahaan memiliki permasalahan informasi bisnis secara asimetri. Perusahaan yang memiliki financial slack atau kelonggaran finansial yang cukup tidak perlu menerbitkan risky debt atau saham yang diterbitkan untuk menandai proyek-proyek barunya sehingga permasalahan informasi tidak akan muncul. Perusahaan akan dapat menerima dan menjalankan seluruh proyek bagus tanpa harus merugikan pemegang saham lama. Teori ini merupakan penjelasan dari perilaku perusahaan yang menahan sebagian laba yang diperoleh dari proses penjualan dan membuat cadangan kas yang cukup besar untuk diputar kembali menjadi modal produksi.

Jenis-Jenis Modal Kerja

Menurut Riyanto (2008), modal kerja digolongkan dalam 2 (dua) jenis yaitu modal kerja permanen dan modal kerja variable. Lebih jelasnya kita akan bahas satu-persatu kedua jenis modal kerja tersebut:

  1. Modal Kerja Permanen (Permanent Working Capital), yaitu modal kerja yang bersifat tetap berada pada perusahaan untuk dapat menjalani fungsi produksinya atau dengan kata lain modal kerja yang secara terus menerus diperlukan untuk kelancaran bisnis dan usahanya. Modal kerja ini terdiri dari: modal kerja primer (Primary Working Capital) yaitu jumlah modal kerja minimum yang harus ada pada perusahaan untuk menjaga keberlanjutan usahanya dan modal kerja normal (Normal Working Capital) yaitu modal kerja yang dibutuhkan untuk menyelenggarakan proses produksi yang bersifat normal.
  2. Modal kerja variabel (variabel working capital) yaitu jumlah kerja yang jumlahnya berubah-ubah sesuai dengan perubahan keadaan, dan modal kerja di bebankan menjadi modal kerja musiman, yaitu modal kerja yang jumlahnya berubah-ubah disebabkan karena fluktuasi musim.  Modal kerja siklus, yaitu modal kerja yang jumlahnya berubah-ubah disebabkan karena fluktuasi konjungtur (permintaan produk). Modal kerja darurat, yaitu modal kerja yang besarnya besarnya berubah-ubah karena adanya keadaan darurat yang tidak diketahui sebelumnya ( misalnya adanya pemogokan buruh , banjir, perubahan ekonomi yang mendadak).

Konsep Modal Kerja

Berdasarkan bukunya yang berjudul “Dasar-dasar pembelanjaan perusahaan” Menurut Riyanto (2008) dikenal ada 3 (tiga) konsep modal kerja, yaitu konsep kuantitatif, konsep kualitatif dan konsep fungsional. Mari kita jelaskan masing-masing konsep tersebut sebagai berikut:

  1. Konsep kuantitatif, konsep ini didasarkan pada kuantitas dari dana modal perusahaan yang tertanam dalam unsur-unsur aktiva lancar dimana aktiva ini merupakan aktiva yang sekali berputar kembali dalam bentuk semula atau aktiva dimana dana yang tertanam didalamnya akan dapat bebas lagi dalam waktu yang pendek. Dengan demikian modal kerja menurut konsep ini adalah keseluruhan dari jumlah aktiva lancar, modal kerja dalam pengertian ini sering disebut dengan modal kerja bruto (gross working capital).
  2. Konsep kualitatif, dalam konsep ini pengertian modal kerja dikaitkan dengan besarnya jumlah hutang lancar atau hutang yang harus segera dibayar. Dengan demikian maka sebagian dari aktiva lancar harus disediakan untuk memenuhi kewajiban finansial yang segera harus dilakukan, dimana bagian aktiva lancar ini tidak boleh digunakan untuk membiayai operasi perusahaan untuk menjaga likuiditasnya. Oleh karena itu, modal kerja menurut konsep ini adalah sebagian dari aktiva lancar yang benar-benar dapat digunakan untuk membiayai operasi perusahaan tanpa mengganggu likuiditasnya yaitu yang merupakan kelebihan aktiva lancar diatas hutang lancar. Modal kerja dalam pengertian ini sering disebut modal kerja neto (net working capital). Definisi ini bersifat kualitatif karena menunjukkan tersedianya aktiva lancar yang lebih besar daripada hutang lancarnya (hutang jangka pendek).
  3. Konsep fungsional, konsep ini mendasarkan pada fungsi dari dana dalam menghasilkan pendapatan (income). Setiap dana yang dikerjakan atau digunakan dalam perusahaan adalah dimaksudkan untuk menghasilakan pendapatan. Ada sebagian dana yang digunakan dalam suatu periode akuntansi.

Pentingnnya Modal Kerja

Menurut pendapat Munawir (2000), tersedianya modal kerja yang segera dapat dipergunakan perusahaan dalam operasionalisasi tergantung pada karakteristik dari aktiva lancar yang dimiliki seperti: kas, effek, piutang dan persediaan. Tetapi modal kerja perusahaan tersebut harus cukup jumlahnya dalam artian harus mampu membiayai pengeluaran-pengeluaran atau operasi perusahaan sehari-hari, karena dengan modal kerja yang cukup akan menguntungkan bagi perusahaan, disamping memungkinkan bagi perusahaan untuk beroperasi secara ekonomis atau efisien dan perusahaan tidak mengalami kesulitan keuangan, juga akan memberikan beberapa keuntungan lain, antara lain:

  1. Melindungi perusahaan terhadap krisis modal kerja karena turunnya nilai dari aktiva lancar.
  2. Memungkinkan untuk dapat membayar semua kewajibankewajiban tepat.
  3. Memungkinkan dimilikinya kredit standing perusahaan semakin besar dan memungkinkan bagi perusahaan untuk dapat menghadapi bahaya-bahaya atau kesulitan keuangan yang mungkin terjadi. 
  4. Memungkinkan untuk memiliki persediaan dalam jumlah yang cukup untuk melayani para konsumennya.
  5. Memungkinkan bagi perusahaan untuk memberikan syarat kredit yang lebih menguntumgkan kepada para pelanggannya.
  6. Memungkinkan bagi perusahaan untuk dapat beroperasi dengan lebih efisien karena tidak ada kesulitan untuk memperoleh barang ataupun jasa yang dibutuhkan.

Sumber Modal Kerja

Setiap kenaikan modal kerja disebut dengan sumber modal, sedangkan penurunan disebut dengan penggunaan. Kenaikan dan penurunan modal kerja dilakukan untuk mengetahui bagaimana modal kerja tersebut digunakan atau dibelanjakan pada faktor-faktor produksi oleh perusahaan bisnis dalam aktivitasnya sehari-hari. Kebutuhan akan modal kerja tersebut harus dan mutlak disediakan perusahaan dalam bentuk apapun baik dalam bentuk dana, bahan baku atapun tenaga kerja. Oleh karena itu, untuk memenuhi kebutuhan tersebut diperlukan sumber-sumber modal kerja yang dapat dicari dari berbagai sumber yang tersedia. Namun dalam pemilihan sumber modal perlu diperhatikan untung ruginya sumber modal tersebut. Pertimbangan ini perlu dilakukan agar tidak menjadi beban perusahaan ke depan atau akan menimbulkan masalah yang tidak diinginkan dikemudian hari.  Sumber modal yang normal menurut Amin Widjaja Tunggal (2000) meliputi hal-hal sebagai berikut:

  1. Operasi nilai perusahaan.
  2. Laba yang diperoleh dari penjualan surat-surat berharga.
  3. Penjualan aktiva tetap, penanaman jangka panjang / aktiva tak lancar dan lain-lain. 
  4. Pengemmbalian pajak dan keuntungan pajak luar biasa lainnya.
  5. Peeneriman yang diperoleh dari penjualan oblogasi saham dan penyetoran dana oleh para pemilik perusahaan.
  6. Penerimaan pinjaman jangka panjang dan jangka pendek yang diperoleh dari bank atau pihak lain.
  7. Pinjaman yang dijamin dengan hipotek atas aktiva tetap dan aktiva tak lancar.
  8. Penjualan piutang dengan jalan penjualan biasa/ dengan factoring (penjualan dengan cara penjualan faktur, pemberian kredit, diserahkan pada lembaga keuangan).
  9. Kredit pelanggan. 

Munawir (2014) menyimpulkan bahwa modal kerja tersebut akan bertambah apabila:

  1. Adanya kenaikan sektor modal baik yang berasal dari laba maupun adanya pengeluaran modal saham atas tambahan investasi dari pemilik perusahaan. 
  2. Ada pengurangan atau penurunan aktiva tetap yang diimbangi dengan bertambahnya aktiva tetap maupun melalui proses despresiasi.
  3. Ada penambhan hutnang jangka panjang maupun dari bentuk obligasi, hipotek atau hutang jangka panjang lainnya yang diimbangi dengan bertambahnya aktiva lancar.

Faktor-faktor yang Mempengaruhi Modal Kerja

Nilai penggunaan modal kerja yang digunakan setiap hari oleh perusahaan tentunya dipengaruhi oleh banyak faktor. Namun ada beberapa faktor penting yang harus diperhatikan dan menjadi fokus bagi perusahaan mempertahankan stabilitasnya. Menurut pendapat Munawir (20014) modal kerja dipengaruhi oleh 5 (lima) faktor penting diantanya adalah:

  1. Sifat, karakteristik dan tipe perusahaan. Nilai modal kerja suatu perusahaan bisnis atau dagang relative lebih rendah bila dibandingkan dengan modal kerja perusahaan industri yang membutuhkan modal lebih besar untuk membeli bahan baku, karena tidak memerlukan investasi yang besar dalam kas untuk menjalankan operasionalnya, piutang usaha maupun persediaan barang dan kebutuhan uang tunai pada kas perusahaan dagang. Untuk pembelanjaan operasi dapat dipenuhi melalui penghasilan atau penerimaan saat itu juga ketika terjadi transaksi.
  2. Tingkat usaha yang dubutuhkan untuk memperoleh atau memproduksi barang dan jasa yang akan dijual serta harga per satuan. Kebutuhan modal kerja suatu perusahaan sangat erat kaitannya dengan waktu dan tenaga yang dibutuhkan untuk memperoleh barang atau jasa yang akan dijual, begitu juga dengan bahan baku yang akan diproduksi sampai barang itu siap untuk dijual. Semakin panjang proses dan waktu yang dibutuhkan untuk memproduksi atau memperoleh barang dan jasa tersebut maka semakin besar pula modal kerja yang dibutuhkan oleh perusahaan dalam oprasionalnya. Disamping itu harga pokok per satuan barang yang dijual juga mempengaruhi besar kecilnya modal kerja yang dibutuhkan. Semakin besar harga pokok per satuan barang dan jasa yang akan dijual maka semakin besar pula kebutuhan modal kerjanya.
  3. Syarat pembelian bahan baku. Adaanya syarat pembelian bahan baku yang akan digunakan untuk memproduksi jasa atau barang dagang berkaitan erat dengan jumlah modal kerja yang dibutuhkan untuk perusahan yang bersangkutan dalam prosesnya. Jika mekanisme syarat yang ditempuh pada waktu dilakukan pembelian menguntungkan maka akan semakin sedikit dana yang diinvestasikan dalam persedian bahan baku atau barang dagangan tersebut. Namun sebaliknya apabila pembayaran atas bahan atau barang yang akan dilakukan pembelian tersebut harus dilakukan dalam jangka waktu pendek maka uang kas diperlukan untuk membiayai proses tersebut akan semakin besar pula.
  4. Syarat penjualan kepada pelanggan. Dengan semakin lunak kredit yang diberikan oleh perusahaan kepada para pembeli atau konsumen akan menyebabkan semakin besar jumlah modal kerja dari perusahaan tersebut yang harus diinvestasikan pada sektor pos piutang. Untuk menurunkan jumlah modal kerja yang harus diinvestasikan maka yang harus di sektorkan dalam bentuk piutang dan untuk memperkecil resiko adanya piutang yang akan tartagih sebaiknya perusahaan memberikan potongan tunai kepada para pembeli atau konsumen, karena dengan demikian pembeli akan tertarik untuk segera membayar utangnya dalam periode diskon tersebut.
  5. Tingkat pertukaran persedian (inventory turnover). Pertukaran persediaan pada perusahaan menunjukan berapa kali persediaan tersebut diganti dalam jangka waktu tertentu, semakin tinggi tingkat pertukaran persediaan barang dan bahan baku maka jumlah modal kerja perusahaan yang diinvestasikan dalam komponen persediaan semakin rendah. Untuk dapat menemukan tingkat perputaran persediaan yang tinggi tersebut maka harus diadakan perencanaan persediaan dan pengendalian persediaan secara teratur dan efisien oleh manajemen. Semakin cepat wktu ang dibutuhkan atau semakin tinggi tingkat perputaran persediaan akan memperkecil resiko terjadinya kerugian yang disebabkan penurunan mutu barang atau karena perubahan selera konsumen pada jangka waktu tersebut, disamping menghemat ongkos menyimpan dan pemeliharaan terhadap persediaan barang tersebut.

Manfaat Modal Kerja

Modal kerja perusahaan disarankan sebaiknya tersedia dalam jumlah dan nilai yang besar agar memberikan peluang bagi perusahaan untuk dapat beroperasi secara efisien dan tidak mengalami kekurangan atau kesulitan keuangan pada saat berjalan. Menurut pendapat Jumingan (2001) berikut ini adalah manfaat modal kerja yang jumlahnya besar dan cukup untuk menjalankan operasional:

  1. Memberikan perlindungan kepada perusahaan dari dampak negatif turunnya nilai aktiva lancar, misalnya adanya kerugian karena debitur tidak membayar, turunnya nilai persediaan karena harganya merosot.
  2. Memberikan peluang kepada perusahaan untuk melunasi hutang dan kewajibannya dalam jangka pendek dan tepat pada waktunya.
  3. Memungkinkan bagi perusahaan untuk dapat membeli faktor produksi atau barang dengan metode tunai sehingga memperoleh keuntungan dari potongan harga.
  4. Memberikan jaminan kepada perusahaan untuk memiliki reputasi kredit (credit standing) yang baik dan dapat mengatasi beberapa peristiwa yang tidak diduga seperti kecelakaan kerja, kerusakan infrastruktur, kebakaran bangunan, pencurian dan lain-lain.
  5. Memungkinkan bagi perusahaan untuk memiliki persediaan dalam nilai yang besar guna memberikan pelayanan permintaan dari konsumen.
  6. Memungkinkan bagi perusahaan untuk dapat memberikan atau menegosiasikan syarat kredit yang menguntungkan kepada pelanggan sehingga meningkatkan penjualan secara signifikan.
  7. Memungkinkan bagi perusahaan untuk dapat beroperasi lebih efisien karena tidak ada kesulitan pada saat memperoleh bahan baku produksi, jasa, dan pada saat proses suplai.
  8. Memungkinkan bagi perusahaan untuk mampu bertahan dalam kondisi ekonomi resesi atau depresi. 
Sumber Pustaka:
  • Amin, Widjaja Tunggal, 2000. Dasar-Dasar Analisis Laporan Keuangan. Jakarta: Rineka Cipta
  • Atmaja Lukas Setia, 2008, Teori dan Praktek Manajemen Keuangan. Yogyakarta: Penerbit Andi
  • Jumingan. 2011. AnalisisLaporanKeuangan. Jakarta: BumiAksara.
  • Myers, S. c., 1984, Capital Structure Puzzle, Journal of Finance, 39 (3), pp 575-592.
  • Munawir, 2014, Analisis Laporan Keuangan, Penerbit Liberty, Yogyakarta
  • Riyanto,Bambang. 2008. Dasar-Dasar Pembelanjaan Perusahaan, Ed Keempat, Cetakan Kedelapan.Yogyakarta:BPFE
  • Sutrisno (2006), Akuntansi Penyusunan Laporan Keuangan, Jakarta, Salemba Empat.