PEMBAHASAN
IT Madani Sukabumi adalah website yang memuat beberapa fitur antara lain landing
page yang berisi informasi instansi dan berita ter-update, fitur dashboard siswa yang
mampu mengetahui tagihan pembayaran siswa baik SPP ataupun non-SPP dan juga
status dari pembayaran tersebut, ketiga fitur dashboard admin instansi yang memiliki
beberapa menu seperti melakukan proses pembukuan dan pembagian hasil laporan
keuangan baik aliran kas pengeluaran dan pemasukan yang dilakukan secara online,
lalu dari laporan tersebut bisa dibagikan hasilnya kepada pihak terkait dengan cara di
download terlebih dahulu lalu dibagikan dengan pihak yang dikehendaki dalam
bentuk export file pdf. Selain itu admin instansi juga bisa mengolah data baik
tambah, edit, ataupun hapus data siswa/i sekaligus mengirimkan tagihan pembayaran
kepada para siswa/i. adapun untuk proses CRUD (Create, Read, Update, and Delete)
admin instansi menggunakan metode upload file csv yang berisi data-data siswa/i
admin bisa melakukan pembuatan berita atau informasi yang akan ditampilkan di
Kelebihan dari sisitem ini antara lain adalah memudahkan dalam proses baik
instansi, selain itu dengan adanya website ini instansi bisa terbackup data-datanya
secara online. Website laporan keuangan SMP IT Madani memiliki fungsi pertama
bisa menjadi media promosi berbasis website untuk pihak instansi. Kedua, membuat
laporan keuangan berupa catatan pemasukan, tagihan dan pengeluaran kas pihak
instansi secara digital dan bagi siswa bisa melakukan konfirmasi pembayaran melalui
dan tagihan dalam bentuk digital ataupun file seperti .csv atau .pdf dan sesuai dengan
Metode yang digunakan oleh penulis untuk pengembangan perangkat lunak ini
Dermawan & Hartini, 2017) yang terbagi menjadi lima tahapan, yaitu:
yang dibutuhkan oleh user. Spesifikasi kebutuhan analisis perangkat lunak pada
Dalam hal ini kebutuhan yang dimaksud adalah pengembangn fitur dalam
sistem. Beberapa fitur yang mana menjadi solusi dari sistem laporan keuangan
a. Sistem terdiri dari halaman landing page yang mana khalayak umum dapat
b. Sistem terdiri dari halaman dashboard siswa/i yang dapat melihat tagihan
c. Sistem terdiri dari halaman dashboard admin instansi yang dapat melakukan
proses pembukuan dan pembagian hasil laporan keuangan baik aliran kas
pengeluaran dan pemasukan yang dilakukan secara online, lalu dari laporan
tersebut bisa dibagikan hasilnya kepada pihak terkait dengan cara di download
terlebih dahulu lalu dibagikan dengan pihak yang dikehendaki dalam bentuk
export file pdf. Selain itu admin instansi juga bisa mengolah data baik tambah,
kepada para siswa/i. adapun untuk proses CRUD (Create, Read, Update, and
Delete) admin instansi menggunakan metode upload file csv yang berisi data-
aplikasi.
Selain dokumentasi fitur juga diperlukan dokumentasi dari instansi sebagai bukti
2. Desain
pengkodean.
website. Dari desain yang sudah dibuat menjadi terlihat flow dari User interface.
Selain itu juga ada ERD (Entitiy Relationship Diagram), LRS (Logical Record
perangkat lunak. Hasil dari tahap ini yaitu program komputer harus sesuai dengan
desain yang telah dibuat pada tahap desain. Pentranslasian dari rangkaian
antarmuka yang dibuat sebelumnya ke tahap pembuatan kode program agar sesuai
4. Pengujian
Untuk tahap Pengujian memfokuskan pada perangkat lunak yaitu dari segi
logic dan fungsional serta memastikan bahwa semua bagian sudah diuji. Hal ini
bisa terjadi karena adanya suatu kesalahan yang muncul dan tidak terdeteksi pada
saat pengujian atau perangkat lunak harus beradaptasi dengan lingkungan baru.
Tahap ini dapat mengulangi proses pengembangan mulai dari analisis spesifikasi
untuk perubahan perangkat lunak yang sudah ada, akan tetapi tidak untuk
membuat perangkat lunak baru. Oleh karena itu, pemeliharaan harus dilakukan
secara berkala agar dapat memperbaiki kesalahan (error) dan meningkatkan fitur
baru.
3.1.2 Tinjauan Instansi
Profil dari SMP IT Madani meliputi sejarah, visi misi dan bagan struktural.
Pada tahun 2011, Bapak Dr. Beni Kurniawan mendatangi MD/ MI Al-Ihsan
Jl. Kenari Kota Sukabumi. Dan kebetulan mengantarkan anak satu-satunya yang
Bernama Mochammad Imam Eka Putra mengaji di Madrasah Diniyah Al- Ihsan
bagus untuk didirikan Sekolah SMP. Maka Bapak Dr. Beni Kurniawan
tujuannya yaitu untuk meminjam tempat untuk dijadikan sekolah SMP IT Madani.
ditempat tersebut. Maka pada bulan Juni 2011 Bapak Dr. Beni Kurniawan beserta
alhamdulillah dengan kerjasama dengan warga setempat, pada bulan juni 2011
siswa. Maka operasional sekolah mulai berjalan pada bulan 25 Juli 2011. Pada
tahun 2012, mendapat ijin operasional dari Dinas Pendidikan Kota Sukabumi.
Dan alhamdulillah, pada bulan Juli 2013 dapat membeli tanah dan dibangun di Jl.
Baros RT. 01 RW. 07 Nangela Baros Kota Sukabumi. Dan selesai dibangun
Sekolah SMP IT Madani pada 1 Juli 2014, dan pada tanggal dan bulan tersebut,
sekolah SMP IT Madani pindah ke Alamat JL. Baros RT. 01 RW. 07 Nangela
Misi:
3. Bagan Struktural
Gambar III.1
Struktur Organisasi SMP IT Madani
3.2 Tahapan Pengembangan Perangkat Lunak
menjadi tiga tingkatan yang dapat mengaksesnya, yaitu khalayak umum, siswa-siswi,
dan admin website yang ditunjuk oleh pihak sekolah. Kebutuhan masing-masing
1. Khalayak Umum
2. Siswa-siswi
a. Melakukan login atau masuk menggunakan akun yang sudah disediakan oleh
c. Melakukan pembayaran tagihan baik SPP atau non-SPP melalui kode yang
telah dilakukan.
3. Admin Website
a. Melakukan login atau masuk menggunakan akun yang sudah disediakan oleh
dashboard.
dokumen masukan yang digunakan pada sistem website. Dokumen berisi data-
data yang kemudia dijadikan bahan untuk menghasilkan dokumen keluaran yang
instansi
Tujuan : Admin
Jumlah :-
Frekuensi : Tahunan
Bentuk : .csv
2. Rancangan dokumen keluaran
Tujuan : Admin
Jumlah :-
Frekuensi : Tahunan
Bentuk : .pdf
instansi
dibelanjakan
Tujuan : Admin
Jumlah :-
Frekuensi : Tahunan
Bentuk : .pdf
3.2.3 Desain
Gambar III.2
ERD (Entitiy Relationship Diagram)
2. LRS (Logical Record Structure)
Gambar III.3
LRS (Logical Record Structure)
3. UML (Unifed Modelling Language)
a. Usecase Diagram
Gambar III.4
Usecase Diagram User Umum
Tabel III.1
Deskripsi Usecase Diagram User Umum
Requirment A
Invariant -
2) Usecase Diagram Siswa
Gambar III.5
Usecase Diagram Siswa
Tabel III.2
Deskripsi Usecase Diagram Siswa Melihat Artikel
Requirment A
Invariant -
Tabel III.3
Deskripsi Usecase Diagram Siswa Login Dashboard
Usecase Login
Name
Requirment A
Invariant -
Tabel III.4
Deskripsi Usecase Diagram Siswa Bayar Tagihan
Requirment A
Invariant -
Tabel III.5
Deskripsi Usecase Diagram Siswa Rekapitulasi Tagihan
Requirment A
Invariant -
Gambar III.6
Usecase Diagram Admin
Tabel III.6
Deskripsi Usecase Diagram Admin Login Dashboard
Usecase Login
Name
Requirment A
Invariant -
Tabel III.7
Deskripsi Usecase Diagram Admin Mengelola Artikel
Requirment A
Invariant -
Tabel III.8
Deskripsi Usecase Diagram Admin Mengelola Pemasukan
Requirment A
Invariant -
Tabel III.9
Deskripsi Usecase Diagram Admin Mengelola Pengeluaran
Requirment A
Invariant -
Tabel III.10
Deskripsi Usecase Diagram Admin Mengelola Tagihan
Requirment A
Invariant -
Tabel III.11
Deskripsi Usecase Diagram Admin Mengelola Data Siswa
Requirment A
Invariant -
Tabel III.12
Deskripsi Usecase Diagram Admin Melihat Rekapitulasi
Requirment A
Invariant -
b. Activity Diagram
Gambar III.8
Activity Diagram Proses Pembayaran Tagihan
Gambar III.9
Activity Diagram Pembuatan Penerimaan
Gambar III.10
Activity Diagram Laporan Tagihan
c. Sequence Diagram
1. Sequence Diagram Login Siswa & Admin
Gambar III.11
Sequence Diagram Login Siswa & Admin
Gambar III.12
Sequence Diagram Tambah Tagihan Pembayaran Siswa
Gambar III.13
Sequence Diagram Pembayaran Tagihan oleh Siswa
1. UI (User Interface)
a. Homepage / Landingpage
*sumber : dokumen pribadi
Gambar III.14
Halaman Landingpage
b. Login page
*sumber : dokumen pribadi
Gambar III.15
Halaman Login Page
c. Dashboard Admin
Gambar III.16
Dashboard Admin
Gambar III.17
Dashboard Tambah Tagihan Admin
Gambar III.18
Dashboard Tambah Tagihan Admin
Gambar III.19
Dashboard Tabel Tagihan Siswa
untuk backend.
1. Frontend
Login
FE
src/pages//auth/login.jsx
import {
Checkbox,
Col,
Image,
Input,
Row,
Typography,
Button,
message,
Form,
} from "antd";
import {
useLaptopQuery,
useSmallMobileQuery,
useTabletQuery,
} from "../../hooks/useMediaQuery";
function LoginPage() {
useAuthPersist();
//responsive
try {
setLoading(true);
const formData = {
username: values.username,
password: values.password,
};
await create(true, {
isAuthenticated: true,
data: jwtDecode(result.data.access_token),
accessToken: result.data.access_token,
});
dataLogin = jwtDecode(result.data.access_token)
if (dataLogin.role == "ADMIN") {
await Navigate("/dashboard");
await setLoading(false);
await Navigate(`/siswa/dashboard/tagihan/${dataLogin.username}`)
setLoading(false);
} else {
await setLoading(false);
} catch (error) {
message.info(error.response.data.message);
setLoading(false);
};
useEffect(() => {
}, 5000);
return () => {
clearTimeout(timeout);
};
}, [isAuthenticated]);
return (
<div>
<div className="min-vh-100">
<Row
justify={"start"}
align={"middle"}
className={`${
}`}
>
<Col
xs={{ span: 24 }}
>
Wellcome Back!
</Typography.Title>
<Form
name="basic"
initialValues={{
remember: false,
}}
onFinish={handleSubmit}
autoComplete="off"
layout="vertical"
>
<Form.Item
name="username"
rules={[
required: true,
},
]}
>
<Input
/>
</Form.Item>
<Form.Item
label="Password"
name="password"
rules={[
required: true,
},
]}
>
<Input.Password
placeholder="Masukan Password"
/>
</Form.Item>
<Form.Item>
<Button
type="primary"
htmlType="submit"
className="w-100"
loading={isLoading}
>
Submit
</Button>
</Form.Item>
</Form>
</Col>
</Row>
</div>
</Col>
{isLaptop ? (
<div
className="min-vh-100"
/>
) : isTablet ? (
<div
className="min-vh-100"
/>
{isLaptop ? (
<div>
</div>
<Image
src="/Rectangle-login1.svg"
preview={false}
width={"65%"}
height={"auto"}
alt="laptop"
/>
</div>
<Image
src="/Rectangle-login2.svg"
preview={false}
width={"65%"}
height={"auto"}
alt="laptop"
/>
</div>
</div>
) : isTablet ? (
<div>
</div>
<Image
src="/Rectangle-login1.svg"
preview={false}
width={"65%"}
height={"auto"}
alt="laptop"
/>
</div>
<Image
src="/Rectangle-login2.svg"
preview={false}
width={"65%"}
height={"auto"}
alt="laptop"
/>
</div>
</div>
) : null}
</Row>
</div>
);
Dashboard admin
FE
src/pages/dashboard/home.jsx
"../../components/dashboard/lineChartDashboard";
"../../components/dashboard/pieChartDashboard";
function HomeDashboard() {
<Content className="mt-5">
<Container>
<CardDashboard />
<br />
<Col span={15}>
{" "}
<Card
title={
<div className="mt-2">
<h3>Result</h3>{" "}
SMP IT Madani
</p>
</div>
extra={<a href="#">More</a>}
>
<LineChartDashboard />
</Card>
</Col>
<Col span={7}>
<Card
title={
<div className="mt-2">
<h3>Chart</h3>{" "}
<div
>
<div
style={{
width: 10,
height: 10,
backgroundColor: "#2153E2",
borderRadius: "50%",
}}
/>
</div>
<div
>
<div
style={{
width: 10,
height: 10,
backgroundColor: "#FF7675",
borderRadius: "50%",
}}
/>
</div>
<div
>
<div
style={{
width: 10,
height: 10,
backgroundColor: "#41355C",
borderRadius: "50%",
}}
/>
</div>
</div>
>
<PieChartDashboard />
</Card>
</Col>
</Row>
</Container>
</Content>
);
Tambah tagihan
FE
/src/pages/dashboard/tagihanTambah.jsx
import {
Button,
Checkbox,
Input,
Form,
DatePicker,
InputNumber,
Select,
} from "antd";
const values = {
jatuhTempo: fieldValues["jatuhTempo"].format("YYYY-MM-DD"),
namaTagihan: fieldValues.namaTagihan,
jumlah: fieldValues.jumlah,
kode_tagihan: fieldValues.kode,
deskripsi: fieldValues.deskripsi,
};
console.log("Success:", values);
};
console.log("Failed:", errorInfo);
};
navigate(-1);
};
};
const formatRupiah = (value) => {
.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ".");
};
setJumlahValue(value);
};
const config = {
rules: [
type: "object",
required: true,
},
],
};
return (
<div>
<Form
name="basic"
onFinish={onFinish}
onFinishFailed={onFinishFailed}
autoComplete="off"
layout="vertical"
>
<Form.Item
label="Nama Tagihan"
name="namaTagihan"
rules={[
required: true,
},
]}
>
<Select
options={[
value: "SPP",
label: "SPP",
},
value: "Non-SPP",
label: "Non-SPP",
},
]}
/>
</Form.Item>
<Form.Item
label="Kode"
name="kode"
rules={[
required: true,
},
]}
>
</Form.Item>
<Form.Item
label="Deskripsi"
name="deskripsi"
rules={[
required: true,
},
]}
>
</Form.Item>
<DatePicker
allowClear
/>
</Form.Item>
<Form.Item
label="Jumlah"
name="jumlah"
rules={[
required: true,
},
type: "number",
},
]}
>
<InputNumber
min={1}
type="text"
value={jumlahValue}
formatter={formatRupiah}
parser={parseRupiah}
onChange={handleJumlahChange}
/>
</Form.Item>
<Form.Item>
<Button
type="default"
size="large"
className="px-4"
>
Batal
</Button>
<Button
type="primary"
size="large"
className="px-4"
htmlType="submit"
>
Simpan
</Button>
</div>
</Form.Item>
</Form>
</CardDashboard>
</div>
);
/src/pages/siswa/tagihan.jsx
function TagihanSiswa() {
const [page, setPage] = useState(1);
const sampleData = [
id: 1,
jumlah: 200000,
},
id: 2,
status: "Lunas",
jumlah: 120000,
},
];
return [
key: "no",
dataIndex: "no",
title: "No",
width: "5%",
},
dataIndex: "namaTagihan",
key: "namaTagihan",
},
dataIndex: "jatuhTempo",
key: "jatuhTempo",
},
title: "Jumlah",
dataIndex: "jumlah",
key: "jumlah",
return <div>{FormatRupiah(number)}</div>;
},
},
title: "Status",
dataIndex: "status",
key: "status",
},
title: "Action",
key: "action",
type="primary"
>
Export
</Button>
<Button
type="primary"
>
Bayar
</Button>
</Space>
),
},
];
};
return (
<div>
<CardDashboard
titleCard={"Tagihan"}
mode={"tagihan-siswa"}
extraButton={false}
>
<TableView
dataSource={sampleData}
columns={columns()}
pagination={{
onChange(current) {
setPage(current);
},
}}
mode="tagihan-siswa"
/>
</CardDashboard>
</div>
API login
AuthController.php
<?php
namespace Modules\Auth\Controllers;
use App\Controllers\BaseController;
use App\Exceptions\UnauthorizedException;
use CodeIgniter\API\ResponseTrait;
use Modules\Auth\Services\AuthService;
use Modules\Auth\Utils\AuthUtil;
use ResponseTrait;
private $authService;
{
$username = $this->request->getVar('username');
$password = $this->request->getVar('password');
try {
return $this->respondCreated($data);
401);
$user = AuthUtil::getUser();
return $this->respond($data);
TagihanController.php
<?php
namespace Modules\Tagihan\Controllers;
use CodeIgniter\API\ResponseTrait;
use CodeIgniter\Debug\Toolbar\Collectors\BaseCollector;
use Modules\Tagihan\Services\TagihanService;
use ResponseTrait;
private $tagihanService;
$request = [
];
try {
$this->tagihanService->create($request);
$data = $this->tagihanService->getAll();
$data = $this->tagihanService->getOne($id);
} else {
try {
$this->tagihanService->cancle();
$data = $this->tagihanService->export();
$this->response->setContentType('application/pdf');
return $data;
3.2.5 Pengujian
1. Halaman login
Tabel III.13
Hasil Pengujian Testing Form Login
No Test Case Hasil yang Hasil yang Ket
Diharapkan Diperoleh
1. User tidak User tidak bisa Sistem tetap Berhasil
mengisi username masuk ke dalam pada page
dan password sistem/ dashboard login dan
menampilkan
untuk mengisi
username dan
password
2. User hanya User tidak bisa Sistem tetap Berhasil
mengisi username masuk ke dalam pada page
atau password sistem/dashboard login dan
saja menampilkan
untuk mengisi
username dan
password
3. User salah User tidak bisa Sistem akan Berhasil
mengisi username masuk ke dalam menampilkan
sistem/dashboard pesan jika
username dan
password salah
4. User salah User tidak bisa Sistem akan Berhasil
mengisi password masuk ke dalam menampilkan
sistem/dashboard pesan jika
username dan
password salah
5. User salah User tidak bisa Sistem akan Berhasil
mengisi username masuk ke dalam menampilkan
dan password sistem/ dashboard pesan jika
username dan
password salah
6. User mengisi User masuk ke Sistem akan Berhasil
username dan dalam sistem/ beralih halam
password dengan dashboard ke dalam
benar dashboard
sesuai role user
3.2.6 Pendukung
hardware dan software yang akan digunakan untuk menjalankan sistem yang dibuat.
1. Publikasi Web
Tabel III.14
Data Publikasi Web
Domain smpitmadani.sch.id
Username -
Password -
Bandwidth Unlimited
Server Home
IP Address 83.136.216.117
Tabel III.15
Spesifikasi Hardware dan Software
Kebutuhan Keterangan
Sistem Operasi Microsoft Windows 7 or Above
Processor Intel Pentium dual core 2.2 GHZ
RAM 2GB
Hardisk 320GB
Monitor 14’’
Keyboard 108 Key
Mouse Optimal Mouse/Touch Pad
Web server Apache
Software Visual Studio Code, Google Chrome