Anda di halaman 1dari 92

BAB III

PEMBAHASAN

3.1. Tinjauan Perusahaan

SiCepat merupakan perusahaan yang bergerak dalam bidang jasa pengiriman

barang yang berkomitmen menjadi partner terpercaya untuk para konsumennya,

khususnya online shop. Saat ini permasalahan yang terjadi di perusahaan adalah

terjadi kesalahan dalam perhitungan transaksi pendapatan dalam penerimaan barang

dan pengeluaran dana untuk pengiriman barang. Dalam pengelolaan keuangan

penerimaan barang sering terjadi ketimpangan yang menyebabkan pendapatan tidak

sesuai dengan yang seharusnya diterima, total pengeluaran dana untuk pengiriman

barang tidak sesuai dengan nota. Kesalahan ini mempengaruhi saldo pendapatan

perusahaan perusahaan tidak akurat. Selain itu sering terjadinya kesalahan pencatatan

antara transaksi pendapatan dari hasil penerimaan barang antar dan pengeluaran dana

untuk pengiriman barang maupun dokumen lain yang terkait dengan aktivitas

operasional perusahaan, sehingga harus menelusuri kembali letak kesalahan yang

dilakukan. Kesalahan ini menyebabkan kinerja perusahaan kurang efisien karena

setiap kali harus menelusuri kembali letak kesalahan yang ada

3.1.1. Sejarah Perusahaan

SiCepat adalah perusahaan ekspedisi yang didirikan pada tahun 2004 dengan

visi misi untuk menjadi yang terbaik dibidangnya. Area kegiatan usaha SiCepat saat

ini meliputi transportasi untuk Udara dan Darat. Motto SiCepat adalah "Your

Delivery is Our Priority”, dimana dengan motto ini mereka akan berkembang dan

maju seiring dengan kepercayaan pelanggan yang mereka jaga. SiCepat merupakan

22
23

perusahaan yang bergerak dalam bidang jasa pengiriman barang yang berkomitmen

menjadi partner terpercaya untuk para konsumennya, khususnya online shop

Ada tiga jenis layanan SiCepat, yaitu SiCepat Go, SiCepat Syariah, dan

SiCepat Cargo. SiCepat Go adalah layanan pengiriman internasional yang bisa bikin

bisnis makin lancar, hemat, aman dan cepat sampai. Karena SiCepat Go memberikan

Layanan pick up gratis dengan berat per paket maksimal 70 kilogram. Ongkir hemat

dengan tambahan diskon 10%, Jangkauan yang luas ke mancanegara dan Tracking

paket di www.SiCepat.com.

SiCepat Syariah adalah program terbaru dari @SiCepat_ekspres dimana kita

akan mengajak Sahabat SiCepat untuk memberikan donasi 2,5% dari diskon ongkir

yang diterima kepada orang yang lebih membutuhkan. SiCepat sendiri juga turut

mengalokasikan dana 2,5%. Layanan baru dari SiCepat Cargo dengan paket yang

lebih banyak dengan harga yang lebih murah sebagai bentuk terima kasih kami

kepada para Sahabat SiCepat yang selalu mendukung sebagai kiriman terpercaya

bisnis Online Shop. Dengan pengiriman minimal 5 kg dan saat ini hanya berlaku

untuk wilayah JABODETABEK dan Bandung. SiCepat Cargo Semakin Besar

Semakin Mudah

3.1.2. Struktur Organisasi dan Fungsi

Struktur organisasi adalah kerangka yang menggambarkan hubungan antara

fungsi yang terdapat dalam suatu organisasi. Struktur organisasi sangat penting sekali

bagi perusahaan karena dengan adanya struktur organisasi memudahkan dalam

mengkoordinir pelaksanaan tugas dan tanggung jawab. Dalam menyusun struktur

organisasi hendaklah jelas tujuan dan sasaran dari perusahaan, dan siapa yang

mempunyai wewenang atas setiap bagian dari pekerjaan.


24

Pembagian tugas terhadap bawahan dapat menghindari terjadinya duplikasi

tugas, sehingga pegawai tahu setiap pekerjaan apa yang harus mereka kerjakan.

Dengan demikian masing-masing tugas dapat terkoordinir ke satu arah dan tujuan.

Struktur organisasi memungkinkan perusahaan untuk menjaga stabilitas dan

kontinuitas pengorganisasian yang terdapat didalam perusahaan.

Struktur organisasi setiap perusahaan berbeda-beda, tergantung pada bentuk

dan kebutuhan perusahaan yang bersangkutan. Untuk mengetahui lebih jelas tentang

pembagian tugas dan tanggung jawab dari masing-masing divisi, berikut ini adalah

struktur organisasi dari Sicepat Pontianak

Sumber : Sicepat (2021)

Gambar III.1. Struktur Organisasi Sicepat

Adapun nama dan fungsi-fungsi dari bagian kerja pada Sicepat dari cabang

Pontianak didalam

1. Koordinator

a. Memastikan alur kerja operasional berjalan secara maksimal dan efisien

secara prosedur.

b. Memberikan support/dukungan kepada seluruh team dengan berbagai

keragaman administrasi serta operasional.


25

c. Memonitor segala pengeluaran operasional dan menghandle segala

permasalahan teknik di operasional.

d. Mengawasi persediaan inventaris operasional kantor.

2. Kepala Kurir

a. Memastikan alur kerja operasional berjalan secara maksimal dan efisien

secara prosedur.

b. Melakukan pembagian pengiriman paket sesuai titik-titik wilayah yang

diserahkan oleh setiap Sigesit Antar.

c. Memonitor/melakukan web tracking, up load pengiriman sesuai dengan

jumlah data yang dibawa oleh Sigesit Antar.

d. Mengawasi pengiriman paket yang tidak terkirim

3. Kurir Antar

Melakukan pengiriman paket aman, tidak ada kesalahan jumlah, Nomor

Kontak Customer dan alamat

4. Pick Up

Melakukan pengembalian paket tidak ada kesalahan baik dari jumlah dan

kerusakan paket.

5. Admin Staff

Melakukan pendataan paket yang akan di Pick Up, perhitungan gaji dan

absensi pegawai freelance serta pembayaran uang makan dan transport.

6. Helper

Melakukan penyortiran paket sesuai alamat pengiriman area.

7. Inputer

Melakukan input data paket kiriman yang tiba di gerai


26

3.2. Tinjauan Kasus

Tinjauan kasus pada Tugas Akhir ini menjelaskan tentang rancang bangun

sistem informasi akuntansi pengiriman barang terutamanya pada pengolahan data

pendapatan dan pengeluaran yang diterapkan oleh SiCepat Ekspress, dimulai dari

proses bisnis sistem berjalan yang dimodelkan ke dalam bentuk activity diagram,

bentuk dokumen masukan, bentuk dokumen keluaran, permasalahan pokok dan

pemecahan masalah. Adapun penjabaran tinjauan kasus ini dapat dilihat pada

halaman berikut.

3.2.1. Proses Bisnis Sistem Berjalan

Setelah melakukan penelitian pada SiCepat Ekspress Pontianak, dapat

diketahui gambaran proses bisnis sistem berjalan untuk sistem pengelolaan data

pegawai yang meliputi pengiriman barang dan laporan yang diterapkan oleh SiCepat

Ekspress. Untuk mendeskripsikan proses bisnis sistem pengiriman barang yang

berjalan pada saat ini akan dibagi menjadi beberapa prosedur atau tahapan yang

diuraikan sebagai berikut:

Di dalam melaksanakan pelayanan jasa kurir yang dijalankan Sicepat

diperlukan tahapan prosedur atau tata cara mulai dari pemesanan pegantaran barang

sampai barang diterima:

1. Prosedur Penjadwalan Pengiriman Barang

Proses penjadwalan pengiriman barang dimulai dari bagian administrasi

melakukan pemilihan kurir sesuai dengan wilayah pengirimannya. Bagian

administrasi melakukan pembuatan jadwal pengiriman dan mencetaknya

untuk diberikan kepada kurir. Kurir melakukan pengiriman sesuai jadwal

pengiriman. Jadwal pengiriman kurir ditentukan oleh bagian administrasi


27

sesuai dengan wilayah kurir dan tujuan pengirimannya. Kurir melakukan

pengiriman sesuai urutan prioritas yang dibuat bagian administrasi

2. Prosedur Membuat Resi Pengiriman

Pesanan yang masuk ke bagian administrasi akan dibuatkan resi

pengirimannya untuk diberikan kepada kurir untuk dijadwalkan. Kurir akan

melakukan pengiriman barang sesuai dengan resi pengiriman tersebut untuk

nantinya diberikan kepada penerima barang. Resi yang diterima oleh kurir

akan dibuat untuk melakukan penagihan pembayaran kepada penerima.

Setelah kurir mengirimkan barang, kurir akan melakukan update status untuk

barang kiriman. Informasi status pengiriman barang diupdate untuk

pengirim bisa mengetahui di mana posisi barang yang sendang dikirim

3. Prosedur Pengambilan Barang

Proses pengambilan barang dilakukan dari kurir mengecek barang yang akan

diambil. Setelah melakukan pengecekan barang, barang akan dilakukan

penimbangan berat barang untuk mengetahui berapa jumlah yang harus

dibayar oleh si pengirim kecuali barang berupa dokumen.

4. Prosedur Pembayaran Jasa Pengiriman

Proses pembayaran jasa pengiriman dilakukan setelah pengirim. menerima

resi pengiriman yang diberikan oleh kurir. Pengirim melakukan pembayaran

sesuai dengan resi pengiriman barang dan memberikannya kepada kurir.

Setelah proses pembayaran oleh penerima, kurir akan melakukan update

status pengiriman barang. Status pengiriman barang digunakan untuk

informasi pengirim barang tentang keberadaan barang yang dikirimnya

5. Prosedur Pengiriman Barang


28

Proses pengiriman barang dimulai dari jadwal pengiriman barang yang

diterima oleh kurir dan kurir melakukan pengiriman barang. Kurir akan

melakukan pengecekan data penerima barang apakah sesuai dengan

penerima yang tertera di resi pengiriman, jika benar maka barang akan

diberikan kepada penerima barang

6. Prosedur Pembuatan Laporan

Proses pembuatan laporan omset pengiriman barang dibuat oleh bagian

administrasi yang dihasilkan dari rekap pengiriman barang per bulan.

Laporan omset pengiriman barang diberikan kepada manajer operasional

untuk dilakukan evaluasi.

3.2.2. Activiti Diagram Sistem Berjalan

Prosedur sistem berjalan untuk pelayanan jasa kuris pada SiCepat akan

dimodeklan menjadi activity diagram yang berfungsi sebagai diagram untuk

memodelkan aktivitas atau proses bisnis dapat dilihat pada halaman berikut ini.
29

Sumber : (Penelitian, 2021)


Gambar III.2. Activity Diagram Pemesanan Jasa Pengiriman Barang

Sumber : (Penelitian, 2021)


Gambar III.4. Activty Diagram Penjadwalan Pengiriman Barang
30

Sumber : (Penelitian, 2021)


Gambar III.5. Activty Diagram Membuat Resi Pengiriman

Sumber : (Penelitian, 2021)


Gambar III.6. Activty diagram Pengambilan barang
31

Sumber : (Penelitian, 2021)


Gambar III.7. Activty diagram Pembayaran Jasa Pengiriman

Sumber : (Penelitian, 2021)


Gambar III.8. Activty diagram Pengiriman Barang
32

Sumber : (Penelitian, 2021)


Gambar III.9. Activty diagram Laporan

3.2.3. Bentuk Dokumen Masukan

Dokumen masukan adalah suatu dokumen yang berisi data-data pada suatu

sistem yang dihasilkan dari proses masukan data. Bentuk dokumen masukan yang

digunakan pada sistem Pelayanan Kuru adalah sebagai berikut :

1. Jadwal (Pengantaran)

Nama Dokumen : Jadwal (pengantaran)

Fungsi : Untuk jadwal pengataran

Sumber : Pengirim

Tujuan : Administrasi

Media : Form/kertas

Jumlah :1

Frekuensi : Setiap ada pemesanan

Bentuk : Lihat Lampiran A.1


33

2. Daftar resi klaim paket tidak sampai

Nama Dokumen : resi klaim paket tidak sampai

Fungsi : Sebagai Bukti paket tidak sampai

Sumber : Penerima / Pengirim Paket

Tujuan : Admin

Media : Kertas

Jumlah :1

Frekuensi : Setiap ada paket tidak sampai

Bentuk : Lihat Lampiran A.2

3.2.4. Dokumen Keluaran

Dokumen keluaran adalah dokumen yang dipakai sebagai keluaran yang

dikeluarkan oleh sistem. Bentuk dokumen keluaran yang digunakan pada sistem

Pelayanan Kurir adalah sebagai berikut :

1. Resi Pengiriman

Nama Dokumen : Resi pengiriman

Fungsi : Untuk Bukti Pengiriman

Sumber : Admin

Tujuan : Kurir

Media : Kertas

Jumlah : 1 Rangkap

Frekuensi : Setiap Pendataan Pengiriman barang

Bentuk : Lampiran B.1

2. Laporan

Nama Dokumen : Laporan


34

Fungsi : Untuk rekap pengiriman barang per bula

Sumber : Admin

Tujuan : Pimpinan Cabang

Media : Kertas

Jumlah : 1 Rangkap

Frekuensi : Setiap akhir bulan

Bentuk : Lampiran B.2

3.2.5. Permasalahan Pokok

Berdasarkan observasi yang Penulis lakukan pada SiCepat menyatakan

bahwa menyatakan bahwa Sicepat memiliki beberapa kendala pada proses yang

sedang berjalan, khususnya pada pelayanan di bagian Kurir dan penulis berhasil

menguraikan masalah yang ada pada SiCepat sebagai berikut:

1. Proses perhitungan keuangan untuk pembayaran kurir masih menggunakan

kalkulator yang dimana kegiatan ini akan membuat kurir kesulitan dalam

menghitung dan juga memerlukan waktu lama dalam menghitung pendapatan

tersebut

2. Tidak ada fitur laporan jika penerima tidak ada dirumah sehingga membuat

kurir harus mencatat data data barang yang belum tersampaikan

menggunakan kertas dan melaporkan kembali didalam laporan pengiriman

harian.

3. Belum adanya sistem untuk bagian kurir dalam melakukan pengelolaan data

untuk mendata pendapatan dan pengeluaran. Sehingga bagian gudang masih

menggunakan kertas sebagai media untuk mencatat pendapatan pengeluaran

dari kurir dan logistik kantor


35

3.2.6. Pemecahan Masalah

Dalam mengatasi permasalahan di atas, peneliti mengajukan suatu cara untuk

meminimalkan permasalahan dalam proses pengiriman barang agar lebih baik dari

sebelumnya yaitu menggunakan sistem komputerisasi dengan pertimbangan-

pertimbangan sebagai berikut:

1. Untuk pengolahan data pengiriman barang ini dibuatkan suatu sistem

perancangan aplikasi berbasis website yang berguna agar dapat menghitung

pendapatan harian dari paket yang diantarkan.

2. Rancang bangun sistem informasi akuntansi berbasis website ini dibuat

dengan menggunakan metode prototype, metode ini sangat efektif digunakan

karena tahapannya jelas, lengkap dan mudah dipahami. Aplikasi yang

dikembangkan masih termasuk ke dalam aplikasi sederhana dan tidak

membutuhkan waktu lama dalam pengerjaannya. prototype bersifat fleksibel

sehingga bila terdapat perubahan dapat diatasi dengan baik, dapat menyiasati

waktu pengerjaan yang singkat dengan biaya yang minim.

3. Rancang bangun sistem informasi akuntansi pengiriman barang sistem terdiri

dari layanan kurir dan pengelolaan data hitungan pendapatan harian sampai

dengan laporan pengiriman barang, ini dimaksudkan agar mempermudah

anggota kurir dan admin dalam mengelola pendapatan harian..

3.2. Analisa Kebutuhan Software

Analisis kebutuhan software dilakukan sebagai langkah awal dalam rancang

bangun sistem informasi akuntansi pengiriman barang pada SiCepat Ekspress dan

merupakan perkembangan dari sistem yang berjalan di SiCepat Ekspress, Admin dan
36

Pegawai mampu mempelajari serta mengikuti sistem usulan dengan baik apabila

diterapkan. Analisa kebutuhan software menjelaskan tentang analisa kebutuhan

khusus yang telah disesuaikan untuk kebutuhan pengguna dan sistem, pemodelan

kebutuhan pengguna menggunakan use case diagram, activity diagram dan sequence

diagram.

3.2.1. Analisis Kebutuhan

Analisis kebutuhan merupakan suatu tahapan mengidentifikasi kebutuhan

fungsional program terkait dengan proses kegiatan yang diusulkan. Adapun analisis

kebutuhan rancang bangun sistem informasi akuntansi pengiriman barang pada

SiCepat Ekspress ini adalah sebagai berikut:.

A. Kebutuhan Pengguna

Kebutuhan pengguna dari aplikasi pengiriman barang pada SiCepat Ekspress

terdiri dari dua (3) level pengguna, yaitu pegawai, kasir gudang dan admin. Skenario

kebutuhan dari kedua level pengguna ini akan dijabarkan pada halaman berikut.

A1 Skenario Kebutuhan Bagian Admin

1. Login

2. Mengelola data Resi

3. Mengelola data bon muatan

4. Mengelola data pengiriman costumer

5. Mengelola data pegawai

6. Mengelola data kurir costumer

7. Mengelola data kurir non costumer

8. Mengelola data kota

9. Mengelola data kantor

10. Mengelola data kendaraan


37

11. Mengelola proses pesanan

12. Mencetak pendapatan kantor

13. Intensitas pesanan kantor

14. Logout

A2 Skenario Kebutuhan Bagian Kasir Gudang

1. Login

2. Mengelola data Resi

3. Mengelola data bon muatan

4. Mengelola data pengiriman costumer

5. Logout

A3 Skenario Kebutuhan Bagian Pegawai

1. Login

2. Melihat pengiriman customer

3. Melihat semua bon muat

4. Logout

B. Kebutuhan Sistem

1. Pengguna sistem harus terdaftar terlebih dahulu sebagai user pada database

sistem pelayanan kurir

2. User harus melakukan login terlebih dahulu untuk dapat menggunakan sistem.

3. Admin harus logout setelah melakukan akses sistem.

4. Sistem dapat menyimpan data pengiriman barang ke dalam database yang akan

di rekap kembali oleh sistem untuk menghasilkan informasi data bagi masing-

masing penggunanya, laporan pengiriman barang.


38

3.2.2. Use Case Diagram

Kebutuhan pengguna yang telah diuraikan pada tahapan analisis kebutuhan

pengguna untuk aplikasi akuntansi pengiriman barang pada SiCepat Ekspress ini

akan dimodelkan menjadi use case diagram.


39

Sumber: Hasil Perancangan (2022)

Gambar III.5. Use Case Diagram Aplikasi Akuntansi Pengiriman barang


Pada SiCepat Ekspress

Tabel III.1.
40

Deskripsi Use Case Aplikasi Akuntansi Pengiriman barang


Use Case Narative Aplikasi Akuntansi Pengiriman barang
Tujuan Admin, pegawai dan kasir gudang dapat
mengelola dan mengakses data yang ada di
dalam aplikasi Pengiriman barang.
Deskripsi Aplikasi ini memberikan fasilitas kepada admin
untuk Login, Mengelola data Resi,Mengelola
data bon muatan, Mengelola data pengiriman
costumer, Mengelola data pegawai,Mengelola
data kurir costumer, Mengelola data kurir non
costumer, Mengelola data kota, Mengelola data
kantor, Mengelola data kendaraan, Mengelola
proses pesanan, Mencetak pendapatan kantor,
Intensitas pesanan kantor, Logout
Skenario Utama
Aktor Admin, pegawai dan kasir gudang
Kondisi Awal Admin, pegawai dan kasir gudang harus
melakukan login dengan cara mengisi username
dan password.
Aksi Aktor Reaksi Sistem
1. Login 1. Menampilkan Login
2. Mengelola data Resi 2. Menampilkan Mengelola data Resi
3. Mengelola data bon muatan 3. Menampilkan Mengelola data bon
4. Mengelola data pengiriman muatan
costumer 4. Menampilkan Mengelola data
5. Mengelola data pegawai pengiriman costumer
6. Mengelola data kurir 5. Menampilkan Mengelola data pegawai
costumer 6. Menampilkan Mengelola data kurir
7. Mengelola data kurir non costumer
costumer 7. Menampilkan Mengelola data kurir non
8. Mengelola data kota costumer
9. Mengelola data kantor 8. Menampilkan Mengelola data kota
10. Mengelola data kendaraan 9. Menampilkan Mengelola data kantor
11. Mengelola proses pesanan 10.Menampilkan Mengelola data kendaraan
12. Mencetak pendapatan kantor 11.Menampilkan Mengelola proses pesanan
13. Intensitas pesanan kantor 12.Menampilkan pendapatan kantor
14. Logout 13.Menampilkan Intensitas pesanan kantor
14.Logout
Kondisi Akhir Jika sesuai perintah maka aplikasi akan
menampilkan menu yang dipilih oleh pengguna
Sumber: Hasil Penelitian (2022)

3.2.3. Activity Diagram

Activity diagram merupakan penjabaran kegiatan untuk setiap use case pada

use case diagram pada Gambar IV.5. Hasil pemodelan activity diagram untuk

rancang bangun sistem informasi akuntansi pengiriman barang pada SiCepat


41

Ekspress. Pada gambaran activity diagram ini akan di bagi kedalam dua (2)

kelompok yaitu activity diagram pada Admin dan activity diagram pada pegawai.

Adapun gambaran masing-masing activiti diagram tersebut dapat dilihat pada

penjabaran berikut.

A. Activity Diagram Pada Admin

Pada gambaran activity diagram pada Admin ini akan menggambarkan siklus

kerja urutan aktifitas proses pada sistem. Adapun aktifitas tersebut seperti, Login,

Mengelola data Resi,Mengelola data bon muatan, Mengelola data pengiriman costumer,

Mengelola data pegawai,Mengelola data kurir costumer, Mengelola data kurir non costumer,

Mengelola data kota, Mengelola data kantor, Mengelola data kendaraan, Mengelola proses

pesanan, Mencetak pendapatan kantor, Intensitas pesanan kantor, Logout. Adapun

gambaran activity diagram pada Admin dapat dapat dilihat pada penjabaran berikut

ini:

1. Activity diagram login

Kegiatan dari login dimodelkan menjadi activity diagram yang dapat dilihat

pada gambar III.6. di bawah ini.

Sumber: Hasil Perancangan (2022)

Gambar III.6. Activity Diagram Login


42

2. Activity diagram Mengelola data resi

Sumber: Hasil Perancangan (2022)

Gambar III.7. Activity Diagram Mengelola Data Resi

3. Activity diagram Mengelola data bon muatan


43

Sumber: Hasil Perancangan (2022)

Gambar III.8. Activity Diagram Mengelola Data Bon Muatan

4. Activity diagram Mengelola data pegawai


44

Sumber: Hasil Perancangan (2022)

Gambar III.9. Activity Diagram Mengelola Data Pegawai

5. Activity diagram Kota


45

Sumber: Hasil Perancangan (2022)

Gambar III.10. Activity Diagram Mengelola kota

6. Activity diagram Mengelola Kendaraan


46

Sumber: Hasil Perancangan (2022)

Gambar III.11. Activity Diagram Mengelola Kendaraan

3.2.4. Sequence Diagram

Sequence diagram menjelaskan tentang urutan interaksi antar objek yang ada

di dalam rancang bangun sistem informasi akuntansi pengiriman barang pada

SiCepat Ekspress yang bersumber dari setiap use case yang ada pada usecase

diagram pada Gambar IV.5. Hasil pemodelan sequence diagram untuk rancang

bangun sistem informasi akuntansi pengiriman barang pada SiCepat Ekspress

digambarkan kedalam dua (2) gambaran rancangan sequence diagram yaitu sequence

diagram pada bagian Admin, sequence diagram pada bagian Pegawai dan sequence

diagram pada bagian kasir gudang. Gambaran sequence diagram dapat dilihat pada

penjabaran berikut.

A. Sequence Diagram Pada Bagian Admin


47

Sequence diagram pada bagian Admin menjelaskan tentang urutan interaksi

antar objek yang ada di dalam rancang bangun sistem informasi akuntansi

pengiriman barang pada SiCepat Ekspress. Adapun gamabaran sequence diagram

pada bagian Admin dapat dilihat pada penjabaran berikut ini.

1. Sequence diagram Login

Sumber : Hasil Perancangan (2022)

Gambar III.24. Sequence Diagram Mengelola Login

2. Sequence diagram Mengelola data pegawai


48

Sumber : Hasil Perancangan (2022)

Gambar III.25. Sequence Diagram Mengelola data pegawai

3. Sequence diagram Mengelola data transaksi

Sumber : Hasil Perancangan (2022)

Gambar III.26. Sequence Diagram Mengelola Data Transaksi


49

3.2.5. Component Diagram

Diagram komponen atau component diagram dibuat untuk mengambarkan

struktur dan ketergantungan antara kumpulan komponen dalam sebuah sistem.

Pengertian komponen dalam UML merupakan hal-hal fisik dari program yang akan

digambarkan (modelkan) dan ada ketika sistem dijalankan. Berikut adalah gambaran

component diagram Rancang bangun sistem informasi akuntansi pengiriman barang

Pada SiCepat Ekspress:

Sumber: Hasil Perancangan (2022)

Gambar III. 40. Component Diagram Rancang bangun sistem informasi


akuntansi pengiriman barang Pada SiCepat Ekspress

3.2.6. Deployment Diagram

Rancang bangun sistem informasi akuntansi pengiriman barang pada SiCepat

Ekspress memerlukan konfigurasi sistem komputer yang akan dimodelkan

menggunakan deployment diagram. Berikut ini adalah hasil penggambaran

konfigurasi menggunakan deployment diagram.

Sumber : Hasil Perancangan (2022)


Gambar III.41. Deployment Diagram
50

Konfigurasi yang diperlukan agar sistem ini dapat berjalan terdiri dari

komputer, basis data dan program. Di dalam komputer, wajib memiliki sistem

operasi dan XAMPP sebagai web server dan diakses menggunakan google chrome.

Paket basis data yang menggunakan SQLYog. Paket program menggunakan bahasa

pemrograman hypertext preprocessor (PHP) dan kumpulan script program dengan

nama siakdes. XAMPP berfungsi sebagai jembatan antara program dengan basis

data.

3.3. Rancangan Dokumen

Rancangan dokumen menjelaskan tentang dokumen apa saja yang

dimasukkan dan dihasilkan oleh rancang bangun sistem informasi akuntansi

pengiriman barang pada SiCepat Ekspress. Rancangan dokumen ini terdiri dari

bentuk dokumen masukan dan bentuk dokumen keluaran.

3.3.1. Rancangan Dokumen Masukan

Rancangan dokumen masukan merupakan spesifikasi dari dokumen-dokumen

yang masuk atau diterima aplikasi untuk melakukan proses. Di bawah ini adalah

uraian bentuk dokumen masukan yang diperlukan rancang bangun sistem informasi

akuntansi pengiriman barang pada SiCepat Ekspress.

1. Nama Dokumen : Form data barang

Fungsi : Untuk mencatat data barang yang dikirim

Sumber : Admin Sicepat

Tujuan : Sistem, Kurir

Media : Tampilan Form

Jumlah : 1 Form

Frekuensi : Setiap hari saat pengiriman barang

Bentuk : Lampiran A-1


51

2. Nama Dokumen : Data user

Fungsi : Untuk mendaftarkan pengguna

Sumber : Admin, Pegawai

Tujuan : Sistem, user, kurir

Media : Form login

Jumlah : 1 user 1 jenis pengguna

Frekuensi : Disesuaikan Keadaan

Bentuk : Lampiran A-2

3.3.2. Rancangan Dokumen Keluaran

1. Nama Dokumen : Form laporan Data barang

Fungsi : Untuk Laporan informasi pengiriman data barang

Sumber : Kurir

Tujuan : admin

Media : Tampilan Form Data

Jumlah : Minimal 1 lembar

Frekuensi : Setiap -pengiriman barang dan mencetak laporan

Bentuk : Lampiran B-1

2. Nama Dokumen : resi pengiriman

Fungsi : Untuk informasi pengiriman barang

Sumber : Kurir

Tujuan : sistem dan user

Media : Tampilan Web

Jumlah : Minimal 1 lembar

Frekuensi : Sesuai kebutuhan

Bentuk : Lampiran B-2


52

3.4. Desain

Perancangan perangkat lunak atau desain dari rancang bangun sistem

informasi akuntansi pengiriman barang pada SiCepat Ekspress ini terdiri dari tahapan

perancangan basis data yang menggunakan Entity Relationship Diagram (ERD) dan

Logical Record Structure (LRS) untuk memvisualisasikan rancangan basis data,

setiap entitas pada rancangan basis data kemudian diuraikan menjadi spesifikasi file.

3.4.1. Entity Relationship Diagram (ERD)

Entity Relationship Diagram (ERD) digunakan untuk memodelkan rancangan

basis data yang menjelaskan entitas, atribut dan hubungan antar entitas. Berikut ini

adalah bentuk dari Entity Relationship Diagram (ERD) yang dirancang.


53

Sumber: Hasil Perancangan (2022)

Gambar III.42. Rancangan Entity Relationship Diagram (ERD)

3.4.2. Logical Record Structure (LRS)

Entity relationship diagram (ERD) yang telah digambarkan di halaman

sebelumnya kemudian ditransformasikan atau diubah menjadi Logical Record

Structure (LRS) agar memberikan gambaran lebih jelas tentang rancangan basis data

yang diusulkan. Adapun rancangan Logical Record Structure (LRS) untuk rancang
54

bangun sistem informasi akuntansi pengiriman barang pada SiCepat Ekspress

digambarkan sebagai berikut.

Sumber: Hasil Perancangan (2022)

Gambar III.43. Rancangan Logical Record Structure (LRS)

3.4.3. Spesifikasi File

Spesifikasi file menguraikan keterangan atribut-atribut untuk setiap entitas

dalam basis data yang telah digambarkan menggunakan pemodelan entity

relationship diagram (ERD) dan logical record structure (LRS). Berikut ini adalah

spesifikasi dari entitas yang telah dirancang.

1. Nama tabel : user

Akronim file : usr

Tipe File : File Master

Akses File : Random


55

Record 20

Organisasi File : Index Sequential

Media File : Harddisk

Kunci File : username

Software : MySQL

Tabel IV. 3
Spesifikasi File Master user

No Elemen Data Nama Field Tipe Size Ket

1 Id_user Id_user Char 10 PK

2 Username Username Char 10

3 Password Password Varchar 10

Sumber: Penelitian (2021)

1. Nama tabel : pengiriman

Akronim file : pengrm

Tipe File : File Master

Akses File : Random

Record : 105

Organisasi File : Index Sequential

Media File : Harddisk

Kunci File : id_pngiriman

Software : MySQL

Tabel IV. 4
Spesifikasi File Master pengirim

Nama Field Tipe Size Ket


56

id_pengrm Int 8 Primary Key

id_barang Int 8

id_user Int 8

Jenis_kel Varchar 2

Temp_tgl_lahir Varchar 35

No_hp_pengrm Varchar 13

No_hp_penrma Varchar 13

Tgl_pengrm Varchar 10

Sumber: Penelitian (2021)

3. Spesifikasi File Tabel Barang

Nama File : Tabel Barang

Akronim : -

Tipe File : File Master

Akses File : Random

Record : 317

Organisasi File : Index Sequential

Media File : Hardisk

Kunci File : id_kiriman

Software : MySQL

Tabel IV. 5
Spesifikasi File Tabel Admin

Nama Field Tipe Size Ket

id_barang Char 8 Primary


key
id_mobil Char 8 Primary
57

key
id_kurir Char 8 Primary
key
id_kota Char 8 Primary
key
Nama_kota_tjn Varchar 35
Alamat_tjn Varchar 35
Nama_pengrm Varchar 35
Nama_penrma Varchar 35
No_hp_pengrma Varchar 35
No_hp_penrma Varchar 35
Ket Longtext 35
isi_mp Varchar 12
Colly Varchar 6
Berat Varchar 8
Biaya Varchar 13
Status_byr Varchar 6
Prcn_Colly Varchar 6
Status Varchar 6
id_user Varchar 8
Sumber: Penelitian (2021)

4. Spesifikasi File Tabel mobil

Nama tabel : Mobil

Akronim file : mbl

Tipe File : File Master

Akses File : Random

Record 105

Organisasi File : Index Sequential

Media File : Hardisk

Kunci File : id_kurir

Software : MySQL

Tabel IV.4 Struktur File mobil


Nama Filed Type Length Keterangan

id_mobil Int 8 Primary key


58

No_plat Varchar 10

Jenis Varchar 2

Merek Varchar 2

5. Nama tabel : kurir

Akronim file : krr

Tipe File : File Master

Akses File : Random

Record :24

Organisasi File : Index Sequential

Media File : Hardisk

Kunci File : id_pengirim

Software : MySQL

Tabel IV.5 Struktur File kurir

Nama Filed Type Length Keterangan

Id_kurir Int 8 Primary key

Nama_kurir Varchar 15

Temp_tgl_lahir Varchar 35

Jenis_kel Int 2

Alamat_tjn Varchar 35

No_hp_kurir Varchar 13

6. Nama tabel : kota

Akronim file : kt

Tipe File : File Master


59

Akses File : Random

Record : 24

Organisasi File : Index Sequential

Media File : Hardisk

Kunci File : id

Software : MySQL

Tabel IV.6 Struktur File kota

Nama Filed Type Length Keterangan

Id_kota Int 8 Primary key

Nama_kota_tjn Varchar 35

7. Nama tabel : Riwayat

Akronim file : kt

Tipe File : File Master

Akses File : Random

Record 24

Organisasi File : Index Sequential

Media File : Hardisk

Kunci File : id

Software : MySQL

Tabel IV.7 Struktur File riwayat

Nama Filed Type Length Keterangan

Id_kota Int 8 Primary key

Nama_kota_tjn Varchar 35
60

8. Nama tabel : Penerima

Akronim file : penrma

Tipe File : File Master

Akses File : Random

Record :30

Organisasi File : Index Sequential

Media File : Hardisk

Kunci File : kota_id

Software : MySQL

Tabel IV.8 Struktur File penerima

Nama Filed Type Length Keterangan

Id_penrma Int 8 Primary key

Nama_penerma Varchar 15

No_hp_pengrm Varchar 13

No_hp_pengrm Varchar 13

Id_barang Varchar 12

3.4.4. User Interface

Tampilan antar muka atau user interface dari rancang bangun sistem

informasi akuntansi pengiriman barang pada PT. SiCepat Ekspress akan disajikan

sesuai dengan level akses penggunanya, yaitu admin dan Pegawai. Adapun

penjabaran hasil rancangan user interface pada rancang bangun sistem informasi
61

akuntansi pengiriman barang pada SiCepat Ekspress dapat dilihat pada penjabaran

berikut ini:

A. User Interface Bagian Admin

Fasilitas yang didapat oleh admin dari rancang bangun sistem informasi

akuntansi pengiriman barang pada SiCepat Ekspress. Berikut ini adalah hasil

tampilan antar muka atau user interface yang disediakan untuk level pengguna

admin.

1. User interface login

Sumber: Hasil Perancangan (2022)

Gambar III.43. User Interface Login

2. User interface dashboard Admin

Halaman dashboard admin ini dapat diakses apabila Admin telah melewati

proses login.
62

Sumber: Hasil Perancangan (2022)

Gambar III.44. User Interface Halaman Menu Utama/Dashboard Admin

3. User interface menu data resi

Sumber: Hasil Perancangan (2022)

Gambar III.45. User Interface Halaman Menu data resi


63

4. User interface menu tambah data resi

Sumber: Hasil Perancangan (2022)

Gambar III.46. User Interface Halaman Menu tambah data resi

5. User interface menu data tracking

Sumber: Hasil Perancangan (2022)

Gambar III.47 User InterfaceMenu Data tracking resi


64

6. User interface menu data pengiriman costumer

Sumber: Hasil Perancangan (2022)

Gambar III.48. User Interface Menu Data Costumer

7. User interface menu tambah data custumer

Sumber: Hasil Perancangan (2022)

Gambar III.50. User Interface Menu tambah data costumer

8. User interface tambah data karyawam


65

Sumber: Hasil Perancangan (2022)

Gambar III.51. User Interface Tambah Data pegawai

9. User interface menu tambah data pegawai

Sumber: Hasil Perancangan (2022)

Gambar III.52. User Interface Menu tambah data pegawai


66

10. User interface tambah data kurir costumer

Sumber: Hasil Perancangan (2022)

Gambar III.53. User Interface tambah Kurir costumer

11. User interface menu kota

Sumber: Hasil Perancangan (2022)

Gambar III.54. User Interface Menu Kota


67

12. User interface menu tambah data kota

Sumber: Hasil Perancangan (2022)

Gambar III.55. User Interface tambah data kota

13. User interface menu kantor

Sumber: Hasil Perancangan (2022)

Gambar III.56. User Interface Menu Kantor


68

14. User interface menu kendaraan

Sumber: Hasil Perancangan (2022)

Gambar III.56. User Interface Menu kendaraan

15. User interface Laporan proses pesanan

Sumber: Hasil Perancangan (2022)

Gambar III.55. User Interface Laporan proses pesanan


69

16. User interface Laporan pendapatan

Sumber: Hasil Perancangan (2022)

Gambar III.56. User Interface Laporan pendapatan

17. User interface Laporan intensitas pesanan

Sumber: Hasil Perancangan (2022)


70

Gambar III.57. User Interface Menu Data intensitas pesanan

1.5. Implementasi

Implementasi merupakan tahapan untuk merealisasikan hasil perancangan

perangkat lunak atau desain menjadi aplikasi rancang bangun sistem informasi

akuntansi pengiriman barang pada SiCepat Ekspress yang terdiri dari code

generation khsusus transaksi bisnis saja, pengujian menggunakan black box testing,

spesifikasi hardware dan software.

3.5.1. Code Generation

A. Code Generation Controller Bon Muatan

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Kantor;
use App\Bon_Muat;
use App\Kota;
use App\Kurir_non_customer;
use App\Resi;
use App\Kendaraan;
use App\Sejarah;
use App\Pengiriman_customer;
use App\Pegawai;
use Illuminate\Support\Facades\Session;
class Bon_MuatController extends Controller
{
    public function create() {
        $allKota = Kota::getAll()->get();
        return view('master.bonmuat.create',compact('allKota'));
    }

    public function store(Request $request) {


        date_default_timezone_set("Asia/Jakarta");
        $request = $request->all();
        $request['id'] = Bon_muat::getNextId();

        if(Session::has('loginstatus')){
            if(Session::get('loginstatus') == 3){
                $request['kantor_asal_id'] = Session::get('pegawai')-
>kantor->id;
            }
71

        }

        $user = Session::get('id');
        $request['user_created'] = $user;
        $request['user_updated'] = $user;

        $success = "Bon muat berhasil didaftarkan.";


        Bon_muat::create($request);
        return redirect('/admin/bonmuat')->with(['success-bonmuat' =>
$success]);
    }

    public function find(Request $request){


        $allKurir = Kurir_non_customer::sortKurir($request->kantorAsal,
$request->kantorTujuan);
        $allKendaraan = Kendaraan::sortKendaraan($request->kantorAsal,
$request->kantorTujuan);
        $allBonMuat = Bon_Muat::getAll()->where("kantor_asal_id","=",
$request->kantorAsal)->where("waktu_sampai","=",null)->get();
        $str = '';
        if($allKurir->count() > 0){
            $ctr = 0;
            foreach($allKurir as $kurir){
                $found = false;
                foreach($allBonMuat as $bonmuat){
                    if($request->status == "EDIT"){
                        if($bonmuat->id != $request->id && $bonmuat-
>kurir_non_customer_id == $kurir->id ){
                            $found = true;
                        }
                    }else{
                        if($bonmuat->kurir_non_customer_id == $kurir->id )
{
                            $found = true;
                        }
                    }
                }
                if($found == false){
                    $ctr++;
                    if($kurir->id == $request->kurir){
                        $str .= '<option selected class="form-control"
value="'.$kurir->id.'">'.$kurir->nama.'</option>';
                    }else{
                        $str .= '<option class="form-control" value="'.
$kurir->id.'">'.$kurir->nama.'</option>';
                    }
                }
            }
            if($ctr == 0){$str .= '<option class="form-control"
value="">-- TIDAK ADA KURIR --</option>';}
        }else $str .= '<option class="form-control" value="">-- TIDAK ADA
KURIR --</option>';

        $str .= '|';
        if($allKendaraan->count() > 0){
            $ctr = 0;
            foreach($allKendaraan as $kendaraan){
                $found = false;
72

                foreach($allBonMuat as $bonmuat){
                    if($request->status == "EDIT"){
                        if($bonmuat->id != $request->id && $bonmuat-
>kendaraan_id == $kendaraan->id){
                            $found = true;
                        }
                    }else{
                        if($bonmuat->kendaraan_id == $kendaraan->id){
                            $found = true;
                        }
                    }
                }
                if($found == false){
                    $ctr++;
                    if($kendaraan->id == $request->kendaraan){
                        $str .='<option selected class="form-control"
value="'.$kendaraan->id.'">'.$kendaraan->nopol.'</option>';
                    }else{
                        $str .='<option class="form-control" value="'.
$kendaraan->id.'">'.$kendaraan->nopol.'</option>';
                    }
                }
            }
            if($ctr == 0){$str .= '<option class="form-control"
value="">-- TIDAK ADA KURIR --</option>';}
        }else $str .= '<option class="form-control" value="">-- TIDAK ADA
KENDARAAN --</option>';
        return $str;
    }

    public function index() {


        if(Session::has('loginstatus')){
            //untuk kasir
            if(Session::get('loginstatus') == 3){
                $kantor = Session::get('pegawai')->kantor->id;
                $allIncomingBonMuat = Bon_Muat::where('is_deleted',0)-
>where('kantor_tujuan_id',$kantor)->where('waktu_berangkat','<>',null)-
>get();
                $allBonMuat = Bon_muat::where('kantor_asal_id',$kantor)-
>where('is_deleted',0)->get();
            }
            //untuk admin dll
            else{
                $allIncomingBonMuat = Bon_Muat::getAll()-
>where('waktu_berangkat','<>',null)->get();
                $allBonMuat = Bon_muat::get();
            }
        }
        return
view('master.bonmuat.index',compact('allBonMuat','allIncomingBonMuat'));
    }

    public function edit($id) {


        $allKota = Kota::getAll()->get();
        $bonmuat = Bon_Muat::findOrFail($id);
        $status ="";
        if($bonmuat->waktu_berangkat != null) {$status = "disabled";}
73

        return view('master.bonmuat.edit', compact('allKota',


'bonmuat','status'));
    }

    public function update($id, Request $request) {


        date_default_timezone_set("Asia/Jakarta");
        $request = $request->all();
        $bonmuat = Bon_Muat::findOrFail($id);

        $request['user_updated'] = Session::get('id');
        $bonmuat->update($request);

        $success = 'Bon Muat ' . '"' . $id .  '"' . 'berhasil diubah.';


        Session::put('success-bonmuat', $success);
        return redirect('/admin/bonmuat');
    }

    public function addSuratJalan($id,Request $request){


        date_default_timezone_set("Asia/Jakarta");
        $bonmuat = Bon_Muat::findorFail($id);
        $allBonMuat = Bon_Muat::getAll()->get();
        $allPengirimanCust = Pengiriman_customer::getAll()->get();
        $resi = Resi::find($request["resi_id"]);
        $found = false;
        $overweight = false;
        if($resi == null){
            $fail = "Resi tidak terdaftar.";
            Session::put('success-failsuratjalan', $fail);
            return redirect('/admin/bonmuat/edit/'.$id);
        }
        if($resi->status_perjalanan == "SELESAI" || $resi->is_deleted ==
1){
            $fail = "Resi tidak valid.";
            Session::put('success-failsuratjalan', $fail);
            return redirect('/admin/bonmuat/edit/'.$id);
        }
        if($resi != null){
            foreach($allBonMuat as $i){
                foreach($i->resis as $j){
                    if($j->id == $request["resi_id"] && $j->surat_jalan-
>telah_sampai == 0){
                        $fail = "Resi telah terdaftar di Bon muat dengan
ID = ". $i->id . ".";
                        Session::put('success-failsuratjalan', $fail);
                        return redirect('/admin/bonmuat/edit/'.$id);
                    }
                }
            }

            foreach($allPengirimanCust as $i){
                foreach($i->resis as $j){
                    if($j->id == $request['resi_id'] && $j-
>d_pengiriman_customer->telah_sampai == 0){
                        Session::put("success-failsuratjalan","Resi telah
terdaftar di Pengiriman customer dengan ID = " . $i->id . ".");
                        return redirect('/admin/bonmuat/edit/'.$id);
                    }
74

                }
            }
            foreach($bonmuat->resis as $i){if($i->id ==
$request["resi_id"]) $found = true;}
            if($bonmuat->total_muatan+$resi->berat_barang > 1000)
$overweight = true;
            if($found){
                $fail = "Resi telah terdaftar di Bon muat ini.";
                Session::put('success-failsuratjalan', $fail);
                return redirect('/admin/bonmuat/edit/'.$id);
            }else if(!$found && $overweight){
                $fail = "Berat barang melebihi batas maksimal.";
                Session::put('success-failsuratjalan', $fail);
                return redirect('/admin/bonmuat/edit/'.$id);
            }else if(!$found && !$overweight){
                $user = Pegawai::findOrFail(Session::get('id'));

                //untuk mengecek apakah resi yang akan diinputkan oleh


pegawai berasal dari kantor ini
                if($resi->kantor_sekarang_id != $user->kantor_id){
                    $fail = "Resi sedang tidak berada di kantor ini.";
                    Session::put('success-failsuratjalan', $fail);
                    return redirect('/admin/bonmuat/edit/'.$id);
                }
                //

                $bonmuat->resis()->attach($request["resi_id"],
['user_created' => $user->id]);
                $bonmuat->resis()-
>updateExistingPivot($request["resi_id"],['user_updated' => $user->id]);
                $bonmuat->update(['total_muatan' => ($bonmuat-
>total_muatan+$resi->berat_barang)]);
                $bonmuat->update(['user_updated' => $user->id]);
                $success = 'Surat Jalan berhasil didaftarkan.';
                Session::put('success-suratjalan', $success);
                return redirect('/admin/bonmuat/edit/'.$id);
            }
        }
    }

    public function deleteSuratJalan(Request $request){


        $bonmuat = Bon_Muat::findorFail($request->bonmuat);
        $resi = Resi::findorFail($request->id);
        $bonmuat->resis()->detach($request->id);
        $bonmuat->update(['total_muatan' => ($bonmuat->total_muatan-$resi-
>berat_barang)]);
        return redirect('/admin/bonmuat/edit/'.$bonmuat->id);
    }

    public function deleteAll($id){


        $bonmuat = Bon_Muat::findorFail($id);
        $bonmuat->resis()->detach();
        $bonmuat->update(['total_muatan' => 0]);
        return redirect('/admin/bonmuat/edit/'.$id);
    }

    public function editSuratJalan($id) {


        $bonmuat = Bon_Muat::find($id);
75

        if($bonmuat == null){
            $fail = "Bon Muat tidak terdaftar";
            Session::put('success-failsuratjalan', $fail);
            return redirect('/admin/bonmuat');
        }else{
            $status = "disabled";
            foreach($bonmuat->resis as $i){
                if($i->surat_jalan->telah_sampai == 0){
                    $status = "";
                }
            }
            return view('master.bonmuat.editSuratJalan',
compact('bonmuat','status'));
        }
    }

    public function updateSuratJalan($id,Request $request){


        date_default_timezone_set("Asia/Jakarta");
        $user = Pegawai::findOrFail(Session::get('id'));
        $bonmuat = Bon_Muat::findOrFail($id);
        $resi = Resi::find($request["resi_id"]);
        if($resi == null){
            $fail = "Resi tidak terdaftar";
            Session::put('success-failsuratjalan', $fail);
            return redirect('/admin/bonmuat/editSuratJalan/'.$id);
        }else{
            if($bonmuat->waktu_sampai == null){
                $bonmuat->update(['waktu_sampai' => now()]);
                $bonmuat->update(['user_updated' => $user->id]);
            }
            $sampai =  $bonmuat->resis()->where("resi_id",
$request["resi_id"])->first()->surat_jalan->telah_sampai;
            if($sampai == 0){

                //update surat jalan


                $bonmuat->update(['user_updated' => $user->id]);
                $bonmuat->resis()-
>updateExistingPivot($request["resi_id"],['telah_sampai' => 1]);
                $bonmuat->resis()-
>updateExistingPivot($request["resi_id"],['waktu_sampai' => now()]);
                $bonmuat->resis()-
>updateExistingPivot($request["resi_id"],['user_updated' => $user->id]);
                //

                //update posisi sekarang dari resi


                $resi['kantor_sekarang_id'] = $user->kantor->id;
                $resi->save();
                //

                $keterangan = 'Barang telah sampai di kantor '. $bonmuat-


>kantor_tujuan->alamat . ', ' . $bonmuat->kantor_tujuan->getKota->nama .
'.';
                $sejarah = [
                    'resi_id'=>$request["resi_id"],
                    'keterangan'=>$keterangan,
                    'waktu'=>now()
                ];
                Sejarah::create($sejarah);
76

                //untuk mengecek apakah semua resi telah sampai


                $count = 0;
                foreach($bonmuat->resis as $i){
                    if($i->surat_jalan->telah_sampai == 0 && $i-
>surat_jalan->waktu_sampai == null){
                        $count++;
                    }
                }

                if($count == 0){
                    $kurir = Kurir_non_customer::findOrFail($bonmuat-
>kurir_non_customer_id);
                    $kurir->update(['status' => 1]);
                    if($kurir->posisi_di_kantor_1 == 0) $kurir-
>update(['posisi_di_kantor_1' => 1]);
                    else $kurir->update(['posisi_di_kantor_1' => 0]);
                    $kendaraan = Kendaraan::findOrFail($bonmuat-
>kendaraan_id);
                    $kendaraan->update(['status' => 1]);
                    if($kendaraan->posisi_di_kantor_1 == 0) $kendaraan-
>update(['posisi_di_kantor_1' => 1]);
                    else $kendaraan->update(['posisi_di_kantor_1' => 0]);
                }
                //

                $success = 'Surat Jalan '. $request["resi_id"]. ' telah


selesai.';
                Session::put('success-suratjalan', $success);
                return redirect('/admin/bonmuat/editSuratJalan/'.$id);
            }else if($sampai == 1){
                $fail = "Resi ". $request["resi_id"] ." telah discan.";
                Session::put('success-failsuratjalan', $fail);
                return redirect('/admin/bonmuat/editSuratJalan/'.$id);
            }
        }
    }

    public function mulaiBonMuat($id){


        $bonmuat = Bon_Muat::findOrFail($id);
        if($bonmuat->resis()->count() > 0){
            date_default_timezone_set("Asia/Jakarta");
            $user = Session::get('id');
            $bonmuat->update(['user_updated' => $user]);
            $bonmuat->update(['waktu_berangkat' => now()]);

            $kurir = Kurir_non_customer::findOrFail($bonmuat-
>kurir_non_customer_id);
            $kurir->update(['status' => 0]);
            $kendaraan = Kendaraan::findOrFail($bonmuat->kendaraan_id);
            $kendaraan->update(['status' => 0]);

            foreach($bonmuat->resis as $i){
                $keterangan = 'Barang dikirim dari kantor ' . $bonmuat-
>kantor_asal->alamat . ', ' . $bonmuat->kantor_asal->getKota->nama . '
menuju kantor ' . $bonmuat->kantor_tujuan->alamat . ', ' . $bonmuat-
>kantor_tujuan->getKota->nama . ' oleh Kurir ' . $bonmuat-
>kurir_non_customer->nama.'.';
77

                $sejarah = [
                    'resi_id'=>$i->id,
                    'keterangan'=>$keterangan,
                    'waktu'=>now()
                ];
                Sejarah::create($sejarah);
            }

            $success = 'Bon Muat ' . '"' . $id .  '"' . ' telah dimulai.';
            Session::put('success-bonmuat', $success);
            return redirect('/admin/bonmuat');
        }else{
            $fail = "Bon Muat tidak terdapat surat jalan";
            Session::put('success-failsuratjalan', $fail);
            return redirect('/admin/bonmuat/edit/'.$id);
        }
    }

    public function print($id){


        $bonmuat = Bon_Muat::findOrFail($id);
        $user = Pegawai::findOrFail($bonmuat->user_created);
        return view('master.bonmuat.print', compact('bonmuat','user'));
    }

    public function cariKantor(Request $request){


        $kantorSekarang = Pegawai::findOrFail(Session::get('id'))->kantor;
        $user = Pegawai::findOrFail(Session::get('id'));
        if($user->jabatan == "admin"){$allKantor = Kantor::getAll()-
>where('kota',$request->kota)->get();}
        else{
            $allKantor = Kantor::sortKantor($request->kota,
$kantorSekarang->kota,$kantorSekarang->is_warehouse,$kantorSekarang->id);
        }
        $str = "";
        foreach($allKantor as $kantor){
            $warehouse = "";
            if($kantor->is_warehouse == 1){$warehouse = "( GUDANG )";}
            if($kantor->id == $request->kantorSekarang){
                $str .= '<option selected class="form-control" value="'.
$kantor->id.'">'.$kantor->alamat.' '.$warehouse.'</option>';
            }else{
                $str .= '<option class="form-control" value="'.$kantor-
>id.'">'.$kantor->alamat.' '.$warehouse.'</option>';
            }
        }
        return $str;
    }
}

B. Code Generation Pengiriman

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
78

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use App\Pengiriman_customer;
use App\Kurir_customer;
use App\Bon_Muat;
use App\Kota;
use App\Resi;
use App\Sejarah;
use App\Pegawai;
use App\Kantor;

class PengirimanCustomerController extends Controller


{
    public function create() {
        $allKota = Kota::getAll()->get();
        $allResi = Resi::getAll()->get();
        $resi = "null";
        return view('master.pengirimanCustomer.create',compact('allKota',
'allResi','resi'));
    }

    public function createBaru($id) {


        $resi = Resi::find($id);
        if($resi == null){
            $fail = "Resi tidak terdaftar.";
            Session::put('success-failresi', $fail);
            return redirect('/admin/resi');
        }else{
            $allKota = Kota::getAll()->get();
            $allResi = Resi::getAll()->get();
            $resi = Resi::find($id);
            return
view('master.pengirimanCustomer.create',compact('allKota',
'allResi','resi'));
        }
    }

    public function lihatPesanan(Request $request){


        $str = '';
        $idPesanan = $request['pesanan'];
        if($idPesanan == 'null')
            $allResi = Resi::getAll()->where("kantor_asal_id",$request-
>kota)->where("verifikasi","0")->get();
        else
            $allResi = Resi::getAll()->where("kantor_asal_id",$request-
>kota)->get();
        if(count($allResi) > 0) {
            $hitung = 0;
            foreach ($allResi as $resi) {
                $ada = "0";
                $allPengirimanCust =
Pengiriman_customer::join('d_pengiriman_customers',
'd_pengiriman_customers.pengiriman_customer_id', '=',
'pengiriman_customers.id')->get();
                foreach ($allPengirimanCust as $pengirimanCust) {
                    if($pengirimanCust->resi_id == $resi->id) $ada = "1";
                }
                if($idPesanan == $resi->id) $ada = "2";
79

                if($ada == "0" || $ada == "2"){


                    if($ada == "2"){
                        $str .= '<option selected class="form-control"
value="'.$resi->id.'">'.$resi->alamat_asal.'</option>';    
                    }
                    else{
                        $str .= '<option class="form-control" value="'.
$resi->id.'">'.$resi->alamat_asal.'</option>';
                    }
                    $hitung = $hitung + 1;
                }
            }
            if($hitung == 0){
                $str = '<option class="form-control" value="">-- TIDAK ADA
PESANAN --</option>';
            }
        }
        else{
            $str = '<option class="form-control" value="">-- TIDAK ADA
PESANAN --</option>';
        }
        return $str;
    }

    public function isiCombobox($id, Request $request){


        $str = '';
        $allPengirimanCust = Pengiriman_customer::getAll()-
>where("waktu_sampai_kantor","=",null)->get();
        $kotaId = $request["kota"];
        $kantorId = $request["kantor"];
        $kantorCurrID = $request["kantorCurr"];
        $kurirCurrID = $request["kurirCurr"];
        $kota = Kota::findOrFail($kotaId);
        if($kantorId == 'null'){
            $allKantor = $kota->kantor->where("is_warehouse","0");
            if(count($allKantor) > 0){
                $now = 0;
                $currentKantor = null;
                foreach ($allKantor as $kantor) {
                    if($kantorCurrID != "null"){
                        if($kantor->id == $kantorCurrID){
                            $currentKantor = $kantor;
                            $str .= '<option selected class="form-control"
value="'.$kantor->id.'">'.$kantor->alamat.'</option>';
                        }
                        else{
                            $str .= '<option class="form-control"
value="'.$kantor->id.'">'.$kantor->alamat.'</option>';
                        }
                    }
                    else if($now == 0){
                        $currentKantor = $kantor;
                        $str .= '<option selected class="form-control"
value="'.$kantor->id.'">'.$kantor->alamat.'</option>';
                    }
                    else{
                        $str .= '<option class="form-control" value="'.
$kantor->id.'">'.$kantor->alamat.'</option>';
80

                    }
                    $now = $now + 1;
                }
                $str .= '|';
               
                if(count($currentKantor->kurir_customer) > 0){
                    $count = 0;
                    foreach ($currentKantor->kurir_customer as $kurir) {
                        $boleh = true;
                        foreach ($allPengirimanCust as $i) {
                            if($i->kurir_customer_id == $kurir->id && $i-
>id != $id) $boleh = false;
                        }
                        if($boleh == true){
                            if($kurirCurrID != "null"){
                                if($kurir->id == $kurirCurrID){
                                    $str .= '<option selected class="form-
control" value="'.$kurir->id.'">'.$kurir->nama .' ('. $kurir->nopol
.')</option>';
                                }
                                else{
                                    $str .= '<option class="form-control"
value="'.$kurir->id.'">'.$kurir->nama .' ('. $kurir->nopol .')</option>';
                                }
                            }
                            else{
                                $str .= '<option class="form-control"
value="'.$kurir->id.'">'.$kurir->nama .' ('. $kurir->nopol .')</option>';
                            }
                            $count++;
                        }
                    }
                    if($count == 0){
                        $str .= '<option value="">-- TIDAK ADA KURIR
--</option>';    
                    }
                }
                else{
                    $str .= '<option value="">-- TIDAK ADA KURIR
--</option>';
                }
            }
            else{
                $str = '<option value="">-- TIDAK ADA KANTOR --</option>|
<option value="">-- TIDAK ADA KURIR --</option>';
            }
        }
        else{
            $allKurir = Kantor::findOrFail($kantorId)->kurir_customer-
>where("status","1");
            $count = 0;
            if(count($allKurir) > 0){
                foreach ($allKurir as $kurir) {
                    $boleh = true;
                    foreach ($allPengirimanCust as $i) {
                        if($i->kurir_customer_id == $kurir->id) $boleh =
false;
                    }
81

                    if($boleh == true){
                        $count++;
                        $str .= '<option class="form-control" value="'.
$kurir->id.'">'.$kurir->nama  .'('. $kurir->nopol .')</option>';
                    }
                }
                if($count == 0){
                    $str = '<option value="">-- TIDAK ADA KURIR
--</option>';    
                }
            }
            else{
                $str = '<option value="">-- TIDAK ADA KURIR --</option>';
            }
        }
        return $str;
    }

    public function index(){


        if(Session::has('loginstatus')){
            if(Session::get('loginstatus') == 3){
                $kantor = Session::get('pegawai')->kantor->id;
                $allPengirimanCust =
Pengiriman_customer::where('kantor_id',$kantor)->where('is_deleted',0)-
>get();
                $pengirimanCustPengirim = Pengiriman_customer::getAll()-
>where("menuju_penerima","0")->where('kantor_id',$kantor)-
>where('is_deleted',0)->get();
                $pengirimanCustPenerima = Pengiriman_customer::getAll()-
>where("menuju_penerima","1")->where('kantor_id',$kantor)-
>where('is_deleted',0)->get();
            }
            else{
                $allPengirimanCust = Pengiriman_customer::get();
                $pengirimanCustPengirim = Pengiriman_customer::getAll()-
>where("menuju_penerima","0")->get();
                $pengirimanCustPenerima = Pengiriman_customer::getAll()-
>where("menuju_penerima","1")->get();
            }
        }
        return
view('master.pengirimanCustomer.index',compact('allPengirimanCust','pengir
imanCustPengirim','pengirimanCustPenerima'));
    }

    public function store(Request $request){


        date_default_timezone_set("Asia/Jakarta");
        $request = $request->all();
        $panjang = count($request);

        if($request['menuju_penerima'] == "0"){
            $idResi = $request["resi_id"];
            $request['total_muatan'] = Resi::find($idResi)->berat_barang;
        }
        unset($request["resi_id"]);

        if(Session::has('loginstatus')){
            if(Session::get('loginstatus') == 3){
82

                $request['kantor_id'] = Session::get('pegawai')->kantor-
>id;
            }
        }

        $user = Session::get('id');
        $request['id'] = Pengiriman_customer::getNextId();
        $request['user_created'] = $user;
        $request['user_updated'] = $user;

        $pengirimanCust = Pengiriman_customer::create($request);

        if($request['menuju_penerima'] == "0"){
            $pengirimanCust->resis()->attach($idResi, ['user_created' =>
$user, 'user_updated' => $user]);
        }

        $success = "Data pengiriman customer berhasil didaftarkan.";


        return redirect('/admin/pengirimanCustomer')->with(['success' =>
$success]);
    }

    public function edit($id){


        $pengirimanCust = Pengiriman_customer::find($id);
        if($pengirimanCust == null){
            $fail = "Pengiriman Customer tidak terdaftar";
            Session::put('success-failpengirimancustomer', $fail);
            return redirect('/admin/pengirimanCustomer');
        }else{
            $kotaNow = $pengirimanCust->kantor->kota;
            $allKota = Kota::getAll()->get();
            return view('master.pengirimanCustomer.edit',
compact('pengirimanCust','allKota', 'kotaNow'));
        }
    }

    public function update($id, Request $request) {


        date_default_timezone_set("Asia/Jakarta");
        $request = $request->all();

        $panjang = count($request);
        if($request['menuju_penerima'] == "0"){
            $idResi = $request["resi_id"];
            unset($request["resi_id"]);
        }

        $user = Session::get('id');
        $pengirimanCust = Pengiriman_customer::findOrFail($id);
        $request['user_updated'] = $user;

        $pengirimanCust->update($request);

        if($request['menuju_penerima'] == "0"){
            $detachId = $pengirimanCust->resis()->first()->id;
            $pengirimanCust->resis()->detach($detachId);
            $pengirimanCust->resis()->attach($idResi, ['user_created' =>
$user, 'user_updated' => $user]);
        }
83

        $success = "Data pengiriman customer $id berhasil diubah.";


        Session::put('success', $success);
        return redirect('/admin/pengirimanCustomer');
    }

    public function startPengiriman($id){


        $pengirimanCust = Pengiriman_customer::findOrFail($id);
       
        if($pengirimanCust->resis()->count() > 0){
            date_default_timezone_set("Asia/Jakarta");
            $user = Session::get('id');

            $pengirimanCust->update(['user_updated' => $user]);


            $pengirimanCust->update(['waktu_berangkat' => now()]);
           
            $kurir = Kurir_customer::findOrFail($pengirimanCust-
>kurir_customer_id);
            $kurir->status = "0";
            $kurir->save();

            require_once(app_path() . '\Classes\mailer2\
class.phpmailer.php');

            if ($pengirimanCust->menuju_penerima) {
                foreach ($pengirimanCust->resis as $resi) {
                    $password = rand(1000, 9999) * 10000 + rand(1000,
9999);
   
                    $detailPengiriman = $resi->d_pengiriman_customer;
                    $detailPengiriman->password = $password;
                    $detailPengiriman->save();
   
                    $idResi = $resi->id;
                    $linkQrCode = "https://chart.googleapis.com/chart?
chs=300x300&cht=qr&chl=$idResi&choe=UTF-8";
   
                    $mail             = new \PHPMailer(true);
                    $address          = $resi->email_penerima;
                    $mail->Subject    = "Sicepat Ekspress - One Time
Password - " . $idResi;
                    $body = view('customer.emailotppengirim',
compact('linkQrCode', 'password'));
                    $mail->IsSMTP(); // telling the class to use SMTP
                    $mail->Host       = "mail.google.com"; // SMTP server
                    $mail->SMTPDebug  = 0;                     // enables
SMTP debug information (for testing)
                    $mail->SMTPAuth   = true;                  // enable
SMTP authentication
                    $mail->SMTPSecure = "tls";                 // sets the
prefix to the servier
                    $mail->Host       = "smtp.gmail.com";      // sets
GMAIL as the SMTP server
                    $mail->Port       = 587;                   // set the
SMTP port for the GMAIL server
                    $mail->Username   = "4team.ate@gmail.com";  // GMAIL
username
                    $mail->Password   = "sttsteam4";     // GMAIL password
84

                    $mail->MsgHTML($body);
                    $mail->AddAddress($address, $resi->nama_penerima);
   
                    if(!$mail->Send()) {  
                        //ERROR
                    }

                    //kirim ke pengirim jg

                    $mail             = new \PHPMailer(true);


                    $address          = $resi->email_pengirim;
                    $mail->Subject    = "Sicepat Ekspress - One Time
Password - " . $idResi;
                    $body = view('customer.emailotppengirim',
compact('linkQrCode', 'password'));
                    $mail->IsSMTP(); // telling the class to use SMTP
                    $mail->Host       = "mail.google.com"; // SMTP server
                    $mail->SMTPDebug  = 0;                     // enables
SMTP debug information (for testing)
                    $mail->SMTPAuth   = true;                  // enable
SMTP authentication
                    $mail->SMTPSecure = "tls";                 // sets the
prefix to the servier
                    $mail->Host       = "smtp.gmail.com";      // sets
GMAIL as the SMTP server
                    $mail->Port       = 587;                   // set the
SMTP port for the GMAIL server
                    $mail->Username   = "4team.ate@gmail.com";  // GMAIL
username
                    $mail->Password   = "sttsteam4";     // GMAIL password
                    $mail->MsgHTML($body);
                    $mail->AddAddress($address, $resi->nama_pengirim);
   
                    if(!$mail->Send()) {  
                        //ERROR
                    }
                }
            } else {
                $password = rand(1000, 9999) * 10000 + rand(1000, 9999);
                $resi = $pengirimanCust->resis->first();
                $detailPengiriman = $resi->d_pengiriman_customer;
                $detailPengiriman->password = $password;
                $detailPengiriman->save();

                $idResi = $resi->id;
                $linkQrCode = "https://chart.googleapis.com/chart?
chs=300x300&cht=qr&chl=$idResi&choe=UTF-8";

                $mail             = new \PHPMailer(true);


                $address          = $resi->email_pengirim;
                $mail->Subject    = "Sicepat Ekspress - One Time Password
- " . $idResi;
                $body = view('customer.emailotppengirim',
compact('linkQrCode', 'password'));
                $mail->IsSMTP(); // telling the class to use SMTP
                $mail->Host       = "mail.google.com"; // SMTP server
                $mail->SMTPDebug  = 0;                     // enables SMTP
debug information (for testing)
85

                $mail->SMTPAuth   = true;                  // enable SMTP


authentication
                $mail->SMTPSecure = "tls";                 // sets the
prefix to the servier
                $mail->Host       = "smtp.gmail.com";      // sets GMAIL
as the SMTP server
                $mail->Port       = 587;                   // set the SMTP
port for the GMAIL server
                $mail->Username   = "4team.ate@gmail.com";  // GMAIL
username
                $mail->Password   = "sttsteam4";     // GMAIL password
                $mail->MsgHTML($body);
                $mail->AddAddress($address, $resi->nama_pengirim);

                if(!$mail->Send()) {  
                    //ERROR
                }
            }
           

            foreach ($pengirimanCust->resis as $i) {


                $keterangan = "Kurir ". strtoupper($kurir->nama) ." telah
berangkat dari kantor " . strtoupper($kurir->kantor->alamat) . ", " .
strtoupper($kurir->kantor->kota);
                if ($pengirimanCust->menuju_penerima) {
                    $keterangan = $keterangan . " untuk mengantar barang
ke penerima di " . strtoupper($i->alamat_tujuan) . ", " . strtoupper($i-
>kota_tujuan);
                } else {
                    $keterangan = $keterangan . " untuk mengambil barang
dari pengirim di " . strtoupper($i->alamat_asal) . ", " . strtoupper($i-
>kota_asal);
                }
                $sejarah = [
                    'resi_id'=>$i->id,
                    'keterangan'=>$keterangan,
                    'waktu'=>now()
                ];
                Sejarah::create($sejarah);
            }

            $success = 'Pengiriman Customer ' . '"' . $id .  '"' . ' telah


berangkat.';
            Session::put('success', $success);
            return redirect('/admin/pengirimanCustomer');
        }else{
            $fail = "Pengiriman Customer tidak terdapat resi";
            Session::put('fail-detail', $fail);
            return redirect('/admin/pengirimanCustomer/editPenerima/'.
$id);
        }
    }

    public function finishPengiriman($id){


        $pengirimanCust = Pengiriman_customer::findOrFail($id);
        if($pengirimanCust->resis()->count() > 0){
            date_default_timezone_set("Asia/Jakarta");
            $user = Session::get('id');
86

            $pengirimanCust->update(['user_updated' => $user]);


            $pengirimanCust->update(['waktu_sampai_kantor' => now()]);

            $kurir = $pengirimanCust->kurir_customer;
            $kurir->status = "1";
            $kurir->save();
           
            if($pengirimanCust->menuju_penerima == '0'){
                $resi = Resi::findOrFail($pengirimanCust->resis()-
>first()->id);
                $resi['kantor_sekarang_id'] = Pegawai::find($user)-
>kantor->id;
                $resi->save();
                $keterangan = 'Barang telah sampai di kantor ' . $kurir-
>kantor->alamat . ', ' . $kurir->kantor->getKota->nama . '.';
                $sejarah = [
                    'resi_id'=>$pengirimanCust->resis()->first()->id,
                    'keterangan'=>$keterangan,
                    'waktu'=>now()
                ];
                Sejarah::create($sejarah);
            }

            $success = 'Pengiriman Customer ' . '"' . $id .  '"' . ' telah


selesai.';
            Session::put('success', $success);
        }

        return redirect('/admin/pengirimanCustomer');
    }

    public function editPenerima($id){


        $pengirimanCust = Pengiriman_customer::find($id);
        if($pengirimanCust == null){
            $fail = "Pengiriman Customer tidak terdaftar";
            Session::put('success-failpengirimancustomer', $fail);
            return redirect('/admin/pengirimanCustomer');
        }else{
            $status = "disabled";
            foreach($pengirimanCust->resis as $i){
                if($i->d_pengiriman_customer->telah_sampai == 0){
                    $status = "";
                }
            }
            if($pengirimanCust->resis->count() == 0) $status = "";
            $tipe = "finish";
            if($pengirimanCust->waktu_berangkat == "") $tipe = "add";
            $kotaNow = $pengirimanCust->kantor->kota;
            $allKota = Kota::getAll()->get();

            return view('master.pengirimanCustomer.editPenerima',
compact('pengirimanCust','status','tipe','allKota','kotaNow'));
        }
    }

    public function deleteDetail($id, Request $request){


        $pengirimanCust = Pengiriman_customer::findOrFail($id);
87

        $resi = Resi::findorFail($request->id);
        $pengirimanCust->resis()->detach($request->id);
        $pengirimanCust->update(['total_muatan' => ($pengirimanCust-
>total_muatan-$resi->berat_barang)]);
        return redirect('/admin/pengirimanCustomer/editPenerima/'.$id);
    }

    public function addDetail($id, Request $request){


        date_default_timezone_set("Asia/Jakarta");
        $pengirimanCust = Pengiriman_customer::findOrFail($id);
        $resi = Resi::find($request['resi_id']);
        $diBonMuat = 'false';
        $diPengirimanCust = 'false';
        if($resi == null){
            Session::put("fail-detail","Resi tidak terdaftar");
            return redirect('/admin/pengirimanCustomer/editPenerima/'.
$id);
        }
        else{
            $allBonMuat = Bon_muat::getAll()->get();
            foreach($allBonMuat as $i){
                foreach($i->resis as $j){
                    if($j->id == $request['resi_id'] && $j->surat_jalan-
>telah_sampai == 0){
                        Session::put("fail-detail","Resi telah terdaftar
di bon muat dengan ID = " . $i->id);
                        return
redirect('/admin/pengirimanCustomer/editPenerima/'.$id);
                    }
                }
            }
            $allPengirimanCust = Pengiriman_customer::getAll()->get();
            foreach($allPengirimanCust as $i){
                foreach($i->resis as $j){
                    if($j->id == $request['resi_id'] && $j-
>d_pengiriman_customer->telah_sampai == 0){
                        Session::put("fail-detail","Resi telah terdaftar
di pengiriman customer dengan ID = " . $i->id);
                        return
redirect('/admin/pengirimanCustomer/editPenerima/'.$id);
                    }
                }
            }
            if($pengirimanCust->total_muatan+$resi->berat_barang > 20){
                Session::put('fail-detail', "Berat melebihi batasan
maksimal");
                return redirect('/admin/pengirimanCustomer/editPenerima/'.
$id);
            }

            $user = Session::get('id');
            $pengirimanCust->resis()->attach($request["resi_id"],
['user_created' => $user]);
            $pengirimanCust->resis()-
>updateExistingPivot($request["resi_id"],['user_updated' => $user]);
            $pengirimanCust->update(['total_muatan' => ($pengirimanCust-
>total_muatan+$resi->berat_barang)]);
            $pengirimanCust->update(['user_updated' => $user]);
88

            Session::put('success-detail', 'Detail pengiriman customer


berhasil ditambahkan.');
            return redirect('/admin/pengirimanCustomer/editPenerima/'.
$id);
        }
    }

    public function deleteAll($id){


        $pengirimanCust = Pengiriman_customer::findorFail($id);
        $pengirimanCust->resis()->detach();
        $pengirimanCust->update(['total_muatan' => 0]);
        return redirect('/admin/pengirimanCustomer/editPenerima/'.$id);
    }  

    public function updateDetailPenerima($id,Request $request){


        date_default_timezone_set("Asia/Jakarta");
        $user = Session::get('id');
        $pengirimanCust = Pengiriman_customer::findOrFail($id);
        $sampai =  $pengirimanCust->resis()->where("resi_id",
$request["resi_id"])->first()->d_pengiriman_customer->telah_sampai;
        if($sampai == 0){
            $pengirimanCust->update(['user_updated' => $user]);
            $pengirimanCust->resis()-
>updateExistingPivot($request["resi_id"],['telah_sampai' => 1]);
            $pengirimanCust->resis()-
>updateExistingPivot($request["resi_id"],['user_updated' => $user]);
            $success = 'Detail Pengiriman Customer '. $request["resi_id"].
' telah selesai.';
            Session::put('success', $success);
            return redirect('/admin/pengirimanCustomer/editPenerima/'.
$id);
        }else if($sampai == 1){
            $fail = "Resi ". $request["resi_id"] ." telah discan.";
            Session::put('success-faildetail', $fail);
            return redirect('/admin/pengirimanCustomer/editPenerima/'.
$id);
        }
    }

   

    public function kirimEmailOTP(Request $request) {


        $request = $request->all();

        $pengirimanCust =
Pengiriman_customer::findOrFail($request['idPengiriman']);
        $resi = Resi::findOrFail($request['idResi']);

        require_once(app_path() . '\Classes\mailer2\class.phpmailer.php');

        if ($pengirimanCust->menuju_penerima) {
            foreach ($pengirimanCust->resis as $resi) {

                $detailPengiriman = $resi->d_pengiriman_customer;

                $idResi = $resi->id;
                $password = $detailPengiriman->password;
89

                $linkQrCode = "https://chart.googleapis.com/chart?
chs=300x300&cht=qr&chl=$idResi&choe=UTF-8";

                $mail             = new \PHPMailer(true);


                $address          = $resi->email_penerima;
                $mail->Subject    = "Sicepat Ekspress - One Time Password
- " . $idResi;
                $body = view('customer.emailotppengirim',
compact('linkQrCode', 'password'));
                $mail->IsSMTP(); // telling the class to use SMTP
                $mail->Host       = "mail.google.com"; // SMTP server
                $mail->SMTPDebug  = 0;                     // enables SMTP
debug information (for testing)
                $mail->SMTPAuth   = true;                  // enable SMTP
authentication
                $mail->SMTPSecure = "tls";                 // sets the
prefix to the servier
                $mail->Host       = "smtp.gmail.com";      // sets GMAIL
as the SMTP server
                $mail->Port       = 587;                   // set the SMTP
port for the GMAIL server
                $mail->Username   = "4team.ate@gmail.com";  // GMAIL
username
                $mail->Password   = "sttsteam4";     // GMAIL password
                $mail->MsgHTML($body);
                $mail->AddAddress($address, $resi->nama_penerima);

                if(!$mail->Send()) {  
                    return 0;
                }

                //kirim ke pengirim jg

                $mail             = new \PHPMailer(true);


                $address          = $resi->email_pengirim;
                $mail->Subject    = "Sicepat Ekspress - One Time Password
- " . $idResi;
                $body = view('customer.emailotppengirim',
compact('linkQrCode', 'password'));
                $mail->IsSMTP(); // telling the class to use SMTP
                $mail->Host       = "mail.google.com"; // SMTP server
                $mail->SMTPDebug  = 0;                     // enables SMTP
debug information (for testing)
                $mail->SMTPAuth   = true;                  // enable SMTP
authentication
                $mail->SMTPSecure = "tls";                 // sets the
prefix to the servier
                $mail->Host       = "smtp.gmail.com";      // sets GMAIL
as the SMTP server
                $mail->Port       = 587;                   // set the SMTP
port for the GMAIL server
                $mail->Username   = "4team.ate@gmail.com";  // GMAIL
username
                $mail->Password   = "sttsteam4";     // GMAIL password
                $mail->MsgHTML($body);
                $mail->AddAddress($address, $resi->nama_pengirim);

                if(!$mail->Send()) {  
90

                    return 0;
                }
            }
        } else {

            $detailPengiriman = $resi->d_pengiriman_customer;

            $idResi = $resi->id;
            $password = $detailPengiriman->password;
            $linkQrCode = "https://chart.googleapis.com/chart?
chs=300x300&cht=qr&chl=$idResi&choe=UTF-8";

            $mail             = new \PHPMailer(true);


            $address          = $resi->email_pengirim;
            $mail->Subject    = "Sicepat Ekspress - One Time Password -
" . $idResi;
            $body = view('customer.emailotppengirim',
compact('linkQrCode', 'password'));
            $mail->IsSMTP(); // telling the class to use SMTP
            $mail->Host       = "mail.google.com"; // SMTP server
            $mail->SMTPDebug  = 0;                     // enables SMTP
debug information (for testing)
            $mail->SMTPAuth   = true;                  // enable SMTP
authentication
            $mail->SMTPSecure = "tls";                 // sets the prefix
to the servier
            $mail->Host       = "smtp.gmail.com";      // sets GMAIL as
the SMTP server
            $mail->Port       = 587;                   // set the SMTP
port for the GMAIL server
            $mail->Username   = "4team.ate@gmail.com";  // GMAIL username
            $mail->Password   = "sttsteam4";     // GMAIL password
            $mail->MsgHTML($body);
            $mail->AddAddress($address, $resi->nama_pengirim);

            if(!$mail->Send()) {  
                return 0;
            }
        }

        return 1;
    }

C. Code Generation Kurir

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Pengiriman_customer;
91

use App\Resi;
use Illuminate\Support\Facades\Session;
use App\Sejarah;
use App\Kurir_customer;

class KurirController extends Controller


{
    public function indexKurir() {
        $pengiriman = Pengiriman_customer::getAll()
        ->where('kurir_customer_id', Session::get('id'))
        ->whereNull('waktu_sampai_kantor')
        ->first()
        ;

        return view('kurir.kuririndex', compact('pengiriman'));


    }

    public function cariResi(Request $data) {


        // dd($data);
        $pengiriman_id = $data->id_pengiriman;
        $resi_id = $data->id_resi;
        $pass = $data->pass;

        $pengiriman = Pengiriman_customer::getAll()
        ->where('id', $pengiriman_id)->first();

        $menuju_penerima = $pengiriman->menuju_penerima;

        if ($pengiriman) {
            $pesanan = "";

            foreach ($pengiriman->resis as $i) {


                if ($i->is_deleted == 0 && $i->d_pengiriman_customer-
>password == $pass && $i->id == $resi_id) {
                    if ($i->d_pengiriman_customer->telah_sampai) {
                        $msg = "Pesanan ini sudah ditangani";
                        return view('kurir.error', compact('msg'));
                    } else {
                        $pesanan = $i;
                        $pesanan["harga"] =
number_format($pesanan["harga"], 2, ".", ",");
                        return view('kurir.kurirform', compact('pesanan',
'menuju_penerima', 'pengiriman_id'));
                    }
                }
            }
            $msg = "Terdapat kesalahan ID atau OTP";
        } else {
            $msg = "Pengiriman ini sudah tidak valid.";
        }

        return view('kurir.error', compact('msg'));


    }

    public function pesananSelesaiDiantar(Request $request) {


        $request = $request->all();
        $pengiriman_id = $request['pengiriman_id'];
        $resi_id = $request['resi_id'];
92

        $pengirimanCustomer = Pengiriman_customer::getAll()
        ->where('id', $pengiriman_id)
        ->first()
        ;

        date_default_timezone_set("Asia/Jakarta");
        foreach ($pengirimanCustomer->resis as $i) {
            if ($i->id == $resi_id && !$i->d_pengiriman_customer-
>telah_sampai) {
                $i->d_pengiriman_customer->waktu_sampai_cust = now();
                $i->d_pengiriman_customer->telah_sampai = 1;
                $i->d_pengiriman_customer->user_updated =
Session::get('id');
                $i->d_pengiriman_customer->save();
            }
        }

        $resi = Resi::findOrFail($resi_id);
        if($resi->status_perjalanan == "PERJALANAN"){$keterangan =
"Penerima telah menerima barang";}
        else if($resi->status_perjalanan == "BATAL"){$keterangan =
"Pengirim telah menerima barang";}

        //set resi jadi selesai


        $resi->status_perjalanan = 'SELESAI';
        $resi->save();

        //TAMBAH TABEL HISTORY JGN LUPA


        //SET HISTORY PESANAN SAMPAI
        $kurir = Kurir_customer::findOrFail(Session::get('id'));

       
        $sejarah = [
            'resi_id'=>$resi_id,
            'keterangan'=>$keterangan,
            'waktu'=>now()
        ];
        Sejarah::create($sejarah);

        return redirect('/kurir');
    }

    public function setWaktuBerangkat(Request $request) {

        require_once(app_path() . '\Classes\mailer2\class.phpmailer.php');

        $request = $request->all();
        $pengiriman = Pengiriman_customer::getAll()
        ->where('id', $request['id'])
        ->first();

        date_default_timezone_set("Asia/Jakarta");
        $pengiriman->waktu_berangkat = now();
        $pengiriman->save();

        $kurir = Kurir_customer::findOrFail(Session::get('id'));
93

        if (!$pengiriman->menuju_penerima) {
            $password = rand(1000, 9999) * 10000 + rand(1000, 9999);
            $resi = $pengiriman->resis()->first();

            $detailPengiriman = $resi->d_pengiriman_customer;
            $detailPengiriman->password = $password;
            $detailPengiriman->save();

            $idResi = $resi->id;
            $linkQrCode = "https://chart.googleapis.com/chart?
chs=300x300&cht=qr&chl=$idResi&choe=UTF-8";

            $mail             = new \PHPMailer(true);


            $address          = $resi->email_pengirim;
            $mail->Subject    = "Sicepat Ekspress - One Time Password -
" . $idResi;
            $body = view('customer.emailotppengirim',
compact('linkQrCode', 'password'));
            $mail->IsSMTP(); // telling the class to use SMTP
            $mail->Host       = "mail.google.com"; // SMTP server
            $mail->SMTPDebug  = 0;                     // enables SMTP
debug information (for testing)
            $mail->SMTPAuth   = true;                  // enable SMTP
authentication
            $mail->SMTPSecure = "tls";                 // sets the prefix
to the servier
            $mail->Host       = "smtp.mailtrap.io";      // sets GMAIL as
the SMTP server
            $mail->Port       = 2525;                   // set the SMTP
port for the GMAIL server
            $mail->Username   = "2533cd7af2f2c2";  // GMAIL username
            $mail->Password   = "bc7b07a76f33c4";     // GMAIL password
            $mail->MsgHTML($body);
            $mail->AddAddress($address, $resi->nama_pengirim);

            if(!$mail->Send()) {  
                return redirect('/kurir');
            }
        } else {
            foreach ($pengiriman->resis as $resi) {
                $password = rand(1000, 9999) * 10000 + rand(1000, 9999);
   
                $detailPengiriman = $resi->d_pengiriman_customer;
                $detailPengiriman->password = $password;
                $detailPengiriman->save();
   
                $idResi = $resi->id;
                $linkQrCode = "https://chart.googleapis.com/chart?
chs=300x300&cht=qr&chl=$idResi&choe=UTF-8";
   
                $mail             = new \PHPMailer(true);
                $address          = $resi->email_penerima;
                $mail->Subject    = "Sicepat Ekspress - One Time Password
- " . $idResi;
                $body = view('customer.emailotppengirim',
compact('linkQrCode', 'password'));
                $mail->IsSMTP(); // telling the class to use SMTP
                $mail->Host       = "mail.google.com"; // SMTP server
94

                $mail->SMTPDebug  = 0;                     // enables SMTP


debug information (for testing)
                $mail->SMTPAuth   = true;                  // enable SMTP
authentication
                $mail->SMTPSecure = "tls";                 // sets the
prefix to the servier
                $mail->Host       = "smtp.gmail.com";      // sets GMAIL
as the SMTP server
                $mail->Port       = 587;                   // set the SMTP
port for the GMAIL server
                $mail->Username   = "4team.ate@gmail.com";  // GMAIL
username
                $mail->Password   = "sttsteam4";     // GMAIL password
                $mail->MsgHTML($body);
                $mail->AddAddress($address, $resi->nama_penerima);
   
                if(!$mail->Send()) {  
                    return redirect('/kurir');
                }

                //kirim ke pengirim jg

                $mail             = new \PHPMailer(true);


                $address          = $resi->email_pengirim;
                $mail->Subject    = "Sicepat Ekspress - One Time Password
- " . $idResi;
                $body = view('customer.emailotppengirim',
compact('linkQrCode', 'password'));
                $mail->IsSMTP(); // telling the class to use SMTP
                $mail->Host       = "mail.google.com"; // SMTP server
                $mail->SMTPDebug  = 0;                     // enables SMTP
debug information (for testing)
                $mail->SMTPAuth   = true;                  // enable SMTP
authentication
                $mail->SMTPSecure = "tls";                 // sets the
prefix to the servier
                $mail->Host       = "smtp.gmail.com";      // sets GMAIL
as the SMTP server
                $mail->Port       = 587;                   // set the SMTP
port for the GMAIL server
                $mail->Username   = "4team.ate@gmail.com";  // GMAIL
username
                $mail->Password   = "sttsteam4";     // GMAIL password
                $mail->MsgHTML($body);
                $mail->AddAddress($address, $resi->nama_pengirim);

                if(!$mail->Send()) {  
                    return redirect('/kurir');
                }
            }
        }

        foreach ($pengiriman->resis as $i) {


            $keterangan = "Kurir ". strtoupper($kurir->nama) ." telah
berangkat dari kantor " . strtoupper($kurir->kantor->alamat) . ", " .
strtoupper($kurir->kantor->kota);
            if ($pengiriman->menuju_penerima) {
95

                $keterangan = $keterangan . " untuk mengantar barang ke


penerima di " . strtoupper($i->alamat_tujuan) . ", " . strtoupper($i-
>kota_tujuan);
            } else {
                $keterangan = $keterangan . " untuk mengambil barang dari
pengirim di " . strtoupper($i->alamat_asal) . ", " . strtoupper($i-
>kota_asal);
            }
            $sejarah = [
                'resi_id'=>$i->id,
                'keterangan'=>$keterangan,
                'waktu'=>now()
            ];
            Sejarah::create($sejarah);
        }
       
        return redirect('/kurir');
    }

    public function updatePesanan(Request $request) {


        $request = $request->all();

        $resi = Resi::getAll()
        ->where('id', $request['resi_id'])
        ->first()
        ;

        $resi->panjang = $request['panjang'];
        $resi->lebar = $request['lebar'];
        $resi->tinggi = $request['tinggi'];
        $resi->berat_barang = $request['berat_barang'];
        $resi->is_fragile = $request['is_fragile'];
        $resi->verifikasi = 1;
        $resi->harga = $this->countCostFromController($resi->id,$resi-
>berat_barang);
        $resi->user_updated = Session::get('id');
       
        $resi->save();
       
        $pengiriman = Pengiriman_customer::getAll()
        ->where('id', $request['pengiriman_id'])
        ->first()
        ;

        $pengiriman->total_muatan = $resi->berat_barang;
        $pengiriman->user_updated = Session::get('id');

        $pengiriman->save();

        date_default_timezone_set("Asia/Jakarta");
        foreach ($pengiriman->resis as $i) {
            if ($i->id == $request['resi_id']) {
                $i->d_pengiriman_customer->waktu_sampai_cust = now()-
>toDateTimeString();
                $i->d_pengiriman_customer->telah_sampai = 1;
                $i->d_pengiriman_customer->user_updated =
Session::get('id');
                $i->d_pengiriman_customer->save();
96

                break;
            }
        }

        //SET HISTORY SAMPAI DAN AMBIL BARANG


        $kurir = Kurir_customer::findOrFail(Session::get('id'));

        $keterangan = "Kurir ".strtoupper($kurir->nama)." telah melakukan


verifikasi resi, ";
        $keterangan = $keterangan . "mengambil bayaran, serta barang dari
pengirim di ". strtoupper($resi->alamat_asal);
        $keterangan = $keterangan . ", " . strtoupper($resi->kota_asal);

        $sejarah = [
            'resi_id'=>$resi->id,
            'keterangan'=>$keterangan,
            'waktu'=>now()
        ];
        Sejarah::create($sejarah);

        return redirect('/kurir');
    }

    public function cancelPengiriman(Request $request) {


        date_default_timezone_set("Asia/Jakarta");
        $request = $request->all();
        $resi_id = $request['resi_id'];
        $pengiriman_id = $request['pengiriman_id'];

        $pengiriman = Pengiriman_customer::getAll()
        ->where('id', $pengiriman_id)
        ->first();

        foreach ($pengiriman->resis as $i) {


            if ($i->id == $resi_id && !$i->d_pengiriman_customer-
>is_canceled) {
                $i->d_pengiriman_customer->is_canceled = 1;
                $i->d_pengiriman_customer->telah_sampai = 1;
                $i->d_pengiriman_customer->waktu_sampai_cust = now()-
>toDateTimeString();
                $i->d_pengiriman_customer->user_updated =
Session::get('id');
                $i->d_pengiriman_customer->save();
            break;
            }
        }

        //HISTORY CANCEL
        $kurir = Kurir_customer::findOrFail(Session::get('id'));

        $resi = Resi::findOrFail($resi_id);

        $keterangan = "Kurir ".strtoupper($kurir->nama)." telah melakukan


cancel pengiriman karena tidak ada orang yang ";
        $keterangan = $keterangan . "bisa melayani pengiriman di alamat ";

        if ($resi->menuju_penerima) {
97

            $keterangan = $keterangan . strtoupper($resi->alamat_tujuan) .


", " . strtoupper($resi->kota_tujuan);
        } else {
            $keterangan = $keterangan . strtoupper($resi->alamat_asal) .
", " . strtoupper($resi->kota_asal);
        }

        //CANCEL RESINYA kalau pengirim


        if (!$pengiriman->menuju_penerima) {
            $resi->is_deleted = 1;
            $resi->status_perjalanan = "BATAL";
            $resi->save();
        } else {
            $keterangan .= ". Barang bisa diambil di kantor " . $kurir-
>kantor->alamat . ", " . $kurir->kantor->kota;
        }

        $sejarah = [
            'resi_id'=>$resi_id,
            'keterangan'=>$keterangan,
            'waktu'=>now()
        ];
        Sejarah::create($sejarah);

        return redirect('/kurir');
    }

    public function history() {


        $pengirimans = Pengiriman_customer::getAll()
        ->where('kurir_customer_id', Session::get('id'))
        ->whereDate('created_at', '>', now()->subMonths(1))
        ->orderBy('id', 'desc')
        ->get()
        ;

        return view('kurir.history',compact('pengirimans'));
    }

    public function countCost(Request $request){


        $resi = Resi::findOrFail($request->id);
        $kotaAsal = $resi->getKotaAsal;
        $kotaTujuan = $resi->getKotaTujuan;
        $berat = $request->berat*1000;
        $courier = "jne";
        if($kotaAsal->nama == "SIDOARJO") $courier = "tiki";
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => "https://api.rajaongkir.com/starter/cost",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => "origin=$kotaAsal-
>id&destination=$kotaTujuan->id&weight=$berat&courier=$courier",
            CURLOPT_HTTPHEADER => array(
              "content-type: application/x-www-form-urlencoded",
98

              "key: 49768eb68a44d897fd2e9c80a576d8b9"
            ),
          ));

        $response = curl_exec($curl);
        $err = curl_error($curl);

        $data = json_decode($response, true);


        $harga = $data["rajaongkir"]["results"][0]["costs"][0]["cost"][0]
["value"];
        $hasil = number_format($harga, 2, ".", ",");
        return $hasil;
    }

    public function countCostFromController($id,$beratBarang){


        $resi = Resi::findOrFail($id);
        $kotaAsal = $resi->getKotaAsal;
        $kotaTujuan = $resi->getKotaTujuan;
        $berat = $beratBarang*1000;
        $courier = "jne";
        if($kotaAsal->nama == "SIDOARJO") $courier = "tiki";
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => "https://api.rajaongkir.com/starter/cost",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => "origin=$kotaAsal-
>id&destination=$kotaTujuan->id&weight=$berat&courier=$courier",
            CURLOPT_HTTPHEADER => array(
              "content-type: application/x-www-form-urlencoded",
              "key: 49768eb68a44d897fd2e9c80a576d8b9"
            ),
          ));

        $response = curl_exec($curl);
        $err = curl_error($curl);

        $data = json_decode($response, true);


        $harga = $data["rajaongkir"]["results"][0]["costs"][0]["cost"][0]
["value"];
        return $harga;
    }

D. Code generation admin

<?php

namespace App\Http\Controllers;
99

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use App\Resi;
use App\Kota;
use Illuminate\Support\Facades\DB;
use App\Kantor;
use Carbon\Carbon;
use App\Pengiriman_customer;

class AdminController extends Controller


{
    public function dashboard() {
        //query MINGGUAN
        $resiTerbentukMingguanQuery = Resi::getAll()
        ->select(DB::raw('COUNT(resis.created_at) as countResi'),
'created_at')
        ->whereDate('created_at', '>=', now()->subDays(7))
        ->groupBy("created_at")
        ->get()
        ;

        $resiSelesaiMingguanQuery = Resi::where('resis.is_deleted', '=',


0)
        -
>select(DB::raw('NVL(COUNT(pengiriman_customers.waktu_sampai_kantor), 0)
as countResi'), 'resis.created_at')
        ->leftjoin('d_pengiriman_customers', 'resis.id', '=',
'd_pengiriman_customers.resi_id')
        ->leftjoin('pengiriman_customers', function ($q) {
            $q->on('d_pengiriman_customers.pengiriman_customer_id', '=',
'pengiriman_customers.id');
            $q->where('pengiriman_customers.menuju_penerima', 1);
            $q->whereNotNull('waktu_sampai_kantor');
        })
        ->whereDate('resis.created_at', '>=', now()->subDays(7))
        ->groupBy("resis.created_at")
        ->get()
        ;

        //dd($resiSelesaiMingguanQuery);

        $resiCancelMingguanQuery =
Resi::select(DB::raw('SUM(IF(resis.status_verifikasi_email, 0, 1)) as
countResi'), 'created_at')
        ->where(function($q) {
            $q->whereDate('created_at', '>=', now()->subDays(7));
            $q->where('created_at', '<=', now()->subMinutes(30));
        })
        ->orWhere('is_deleted', 1)
        ->groupBy("created_at")
        ->get()
        ;

        //dd($resiCancelMingguanQuery);

        //ini variabel yang dipassing nanti


        $resiTerbentukMingguan = [];
100

        $resiSelesaiMingguan = [];
        $resiCancelMingguan = [];
        $resiProsesMingguan = [];

        //ngisi yang kosong-kosong


        $index = 0;
        for ($i = 0; $i <= 7; $i++) {
            if (count($resiTerbentukMingguanQuery) != $index) {
                $dateResi = strtotime($resiTerbentukMingguanQuery[$index]-
>created_at);
                $dateResi = date('d', $dateResi);
                $dateSub = now()->subDays(7-$i)->isoFormat('DD');
               
                if ($dateResi == $dateSub) {
                    //disini artinya ketemu
                    $resiTerbentukMingguan[] =
$resiTerbentukMingguanQuery[$index]->countResi;
                    $resiSelesaiMingguan[] =
intval($resiSelesaiMingguanQuery[$index]->countResi);
                    $resiCancelMingguan[] =
intval($resiCancelMingguanQuery[$index]->countResi);
                    $resiProsesMingguan[] =
intval($resiTerbentukMingguanQuery[$index]->countResi) -
                    intval($resiSelesaiMingguanQuery[$index]->countResi) -
                    intval($resiCancelMingguanQuery[$index]->countResi);
                    $index++;
                    continue;
                }
            }
            //artinya hari itu gada resi
            $resiTerbentukMingguan[] = 0;
            $resiSelesaiMingguan[] = 0;
            $resiCancelMingguan[] = 0;
            $resiProsesMingguan[] = 0;
        }

        //dd($resiTerverifikasiMingguan);

        $resiTerbentukMingguanLabel = [];
        for ($i = 0; $i <= 7; $i++) {
            $resiTerbentukMingguanLabel[] = now()->subDays(7-$i)-
>isoFormat('dddd');
        }

        //dd($resiCancelMingguan);

        //query BULANAN
        $resiTerbentukBulananQuery = Resi::getAll()
        ->select(DB::raw('COUNT(resis.created_at) as countResi'),
'created_at')
        ->whereDate('created_at', '>=', now()->subDays(30))
        ->groupBy("created_at")
        ->get()
        ;

        $resiSelesaiBulananQuery = Resi::where('resis.is_deleted', '=', 0)


101

        -
>select(DB::raw('NVL(COUNT(pengiriman_customers.waktu_sampai_kantor), 0)
as countResi'), 'resis.created_at')
        ->leftjoin('d_pengiriman_customers', 'resis.id', '=',
'd_pengiriman_customers.resi_id')
        ->leftjoin('pengiriman_customers', function ($q) {
            $q->on('d_pengiriman_customers.pengiriman_customer_id', '=',
'pengiriman_customers.id');
            $q->where('pengiriman_customers.menuju_penerima', 1);
            $q->whereNotNull('waktu_sampai_kantor');
        })
        ->whereDate('resis.created_at', '>=', now()->subDays(30))
        ->groupBy("resis.created_at")
        ->get()
        ;

        //dd($resiSelesaiMingguanQuery);

        $resiCancelBulananQuery =
Resi::select(DB::raw('SUM(IF(resis.status_verifikasi_email, 0, 1)) as
countResi'), 'created_at')
        ->where(function($q) {
            $q->whereDate('created_at', '>=', now()->subDays(30));
            $q->where('created_at', '<=', now()->subMinutes(30));
        })
        ->orWhere('is_deleted', 1)
        ->groupBy("created_at")
        ->get()
        ;
        //dd($resiCancelMingguanQuery);

        //ini variabel yang dipassing nanti


        $resiTerbentukBulanan = [];
        $resiProsesBulanan = [];
        $resiSelesaiBulanan = [];
        $resiCancelBulanan = [];

        //ngisi yang kosong-kosong


        $index = 0;
        for ($i = 0; $i <= 30; $i++) {
            if (count($resiTerbentukBulananQuery) != $index) {
                $dateResi = strtotime($resiTerbentukBulananQuery[$index]-
>created_at);
                $dateResi = date('d', $dateResi);
                $dateSub = now()->subDays(30-$i)->isoFormat('DD');
               
                if ($dateResi == $dateSub) {
                    //disini artinya ketemu
                    $resiTerbentukBulanan[] =
$resiTerbentukBulananQuery[$index]->countResi;
                    $resiSelesaiBulanan[] =
intval($resiSelesaiBulananQuery[$index]->countResi);
                    $resiCancelBulanan[] =
intval($resiCancelBulananQuery[$index]->countResi);
                    $resiProsesBulanan[] =
intval($resiTerbentukBulananQuery[$index]->countResi) -
                    intval($resiSelesaiBulananQuery[$index]->countResi) -
                    intval($resiCancelBulananQuery[$index]->countResi);
102

                   
                    $index++;
                    continue;
                }
            }
            //artinya hari itu gada resi
            $resiTerbentukBulanan[] = 0;
            $resiSelesaiBulanan[] = 0;
            $resiCancelBulanan[] = 0;
            $resiProsesBulanan[] = 0;
        }

        //dd($resiTerverifikasiMingguan);

        $resiTerbentukBulananLabel = [];
        for ($i = 0; $i <= 30; $i++) {
            $resiTerbentukBulananLabel[] = now()->subDays(30-$i)-
>isoFormat('D-MM-Y');
        }

        //dd($resiTerbentukBulananLabel);

        //query TAHUN
        $resiTerbentukTahunanQuery = Resi::getAll()
        ->select(DB::raw('COUNT(resis.created_at) as countResi'),
DB::raw("date_format(resis.created_at, '%M-%Y') as date"))
        ->whereDate('created_at', '>=', now()->subYear())
        ->groupBy(DB::raw("date_format(resis.created_at, '%M-%Y')"))
        ->get()
        ;

        //dd($resiTerbentukTahunanQuery);

        $resiSelesaiTahunanQuery = Resi::where('resis.is_deleted', '=', 0)


        -
>select(DB::raw('NVL(COUNT(pengiriman_customers.waktu_sampai_kantor), 0)
as countResi'), DB::raw("date_format(resis.created_at, '%M-%Y') as date"))
        ->leftjoin('d_pengiriman_customers', 'resis.id', '=',
'd_pengiriman_customers.resi_id')
        ->leftjoin('pengiriman_customers', function ($q) {
            $q->on('d_pengiriman_customers.pengiriman_customer_id', '=',
'pengiriman_customers.id');
            $q->where('pengiriman_customers.menuju_penerima', 1);
            $q->whereNotNull('waktu_sampai_kantor');
        })
        ->whereDate('resis.created_at', '>=', now()->subYear())
        ->groupBy(DB::raw("date_format(resis.created_at, '%M-%Y')"))
        ->get()
        ;

        //dd($resiSelesaiTahunanQuery);

        $resiCancelTahunanQuery =
Resi::select(DB::raw('SUM(IF(resis.status_verifikasi_email, 0, 1)) as
countResi'), DB::raw("date_format(resis.created_at, '%M-%Y') as date"))
        ->where(function($q) {
            $q->whereDate('created_at', '>=', now()->subYear());
            $q->where('created_at', '<=', now()->subMinutes(30));
103

        })
        ->orWhere('is_deleted', 1)
        ->groupBy(DB::raw("date_format(resis.created_at, '%M-%Y')"))
        ->get()
        ;

        //dd($resiCancelTahunanQuery);

        // $resiTerverifikasiTahunanQuery = Resi::getAll()
        // ->select(DB::raw('SUM(resis.verifikasi) as countResi'),
DB::raw("date_format(resis.created_at, '%M-%Y') as date"))
        // ->whereDate('created_at', '>=', now()->subYear())
        // ->groupBy(DB::raw("date_format(resis.created_at, '%M-%Y')"))
        // ->get()
        // ;

        // $resiCancelTahunanQuery = Resi::getAll()
        // ->select(DB::raw('SUM(IF(resis.verifikasi, 0, 1)) as
countResi'), DB::raw("date_format(resis.created_at, '%M-%Y') as date"))
        // ->whereDate('created_at', '>=', now()->subYear())
        // ->where('created_at', '<=', now()->subMinutes(30))
        // ->groupBy(DB::raw("date_format(resis.created_at, '%M-%Y')"))
        // ->get()
        // ;

        //dd($resiCancelTahunanQuery[0]->date);

        //ini variabel yang dipassing nanti


        $resiTerbentukTahunan = [];
        $resiProsesTahunan = [];
        $resiCancelTahunan = [];
        $resiSelesaiTahunan = [];

        //ngisi yang kosong-kosong


        $index = 0;
        for ($i = 0; $i <= 12; $i++) {
            if (count($resiTerbentukTahunanQuery) != $index) {
                $dateResi = $resiTerbentukTahunanQuery[$index]->date;
                $dateSub = now()->subMonths(12-$i)->isoFormat('MMMM-
YYYY');
               
                if ($dateResi == $dateSub) {
                    //disini artinya ketemu
                    $resiTerbentukTahunan[] =
$resiTerbentukTahunanQuery[$index]->countResi;
                    $resiSelesaiTahunan[] =
intval($resiSelesaiTahunanQuery[$index]->countResi);
                    $resiCancelTahunan[] =
intval($resiCancelTahunanQuery[$index]->countResi);
                    $resiProsesTahunan[] =
intval($resiTerbentukTahunanQuery[$index]->countResi) -
                    intval($resiSelesaiTahunanQuery[$index]->countResi) -
                    intval($resiCancelTahunanQuery[$index]->countResi);
                   
                    $index++;
                    continue;
                }
            }
104

            //artinya hari itu gada resi


            $resiTerbentukTahunan[] = 0;
            $resiProsesTahunan[] = 0;
            $resiCancelTahunan[] = 0;
            $resiSelesaiTahunan[] = 0;
        }

        //dd($resiTerverifikasiMingguan);

        $resiTerbentukTahunanLabel = [];
        for ($i = 0; $i <= 12; $i++) {
            $resiTerbentukTahunanLabel[] = now()->subMonths(12-$i)-
>isoFormat('MMMM-YYYY');
        }

        //dd($resiTerbentukTahunan);

        // /dd($resiCancelBulanan)

        //REPORT MISC

        $jumlahKantorCabang = Kantor::getAll()->where('is_warehouse', 0)-


>count();
        $jumlahKantorWarehouse = Kantor::getAll()->where('is_warehouse',
1)->count();

        return view('master.index', compact('resiTerbentukMingguan',


'resiTerbentukMingguanLabel',
        'resiSelesaiMingguan', 'resiCancelMingguan', 'resiProsesMingguan',
'resiTerbentukBulananLabel',
        'resiTerbentukBulanan', 'resiSelesaiBulanan', 'resiProsesBulanan',
'resiCancelBulanan', 'resiTerbentukTahunanLabel',
        'resiTerbentukTahunan', 'resiProsesTahunan', 'resiCancelTahunan',
'resiSelesaiTahunan',
        'jumlahKantorCabang', 'jumlahKantorWarehouse'));
    }

    public function reportpendapatan() {


        $kotas = Kota::getAll()->get();
        $tahun = now()->isoFormat('Y');
        $labels = ['January', 'February', 'March', 'April', 'May', 'June',
        'July', 'August', 'September', 'October', 'November', 'December'];

        return view('master.reports.reportpendapatan', compact('kotas',


'tahun', 'labels'));
    }

    public function getKantors(Request $request) {


        $request = $request->all();
        $kota = Kota::findOrFail($request['kota']);
        $kantors = $kota->kantor;

        $s = "";
        foreach ($kantors as $k) {
            $s .= '<option class="form-control" value="'.$k->id.'">'.$k-
>alamat.'</option>';
        }
        return $s;
105

    }

    public function intensitasPesanan(){


        $allKota = Kota::getAll()->get();
        return view('master.reports.intensitasPesanan',
compact('allKota'));
    }

    public function reportIntensitasPesanan(Request $request){


        $kota = $request['kota'];

        $returnData = array();
        $key = array();
        $data = array();
        $allKantor = Kantor::getAll()->where('kota',$kota)->get();
        foreach ($allKantor as $kantor) {
            $count = count(Resi::getAll()->where('kantor_asal_id',
$kantor['id'])->get());
            $key[] = $kantor['id'];
            $data[] = $count;
        }

        $returnData[] = $key;
        $returnData[] = $data;
       
        return json_encode($returnData);
    }

    public function reportpendapatanGetData(Request $req) {


        $req = $req->all();
       
        $res = Resi::getAll()
        ->select(DB::raw('SUM(harga) as sum'),
        DB::raw('COUNT(harga) as count'),
        DB::raw("date_format(created_at, '%m') as date") )
        ->where('kantor_asal_id', $req['idKantor'])
        ->where('status_perjalanan', 'SELESAI')
        ->whereRaw("date_format(created_at, '%Y') = ?", [$req['tahun']])
        ->groupBy(DB::raw("date_format(created_at, '%M-%Y')"),
DB::raw("date_format(created_at, '%m')"))
        ->orderby(DB::raw("date_format(created_at, '%M-%Y')"), 'asc')
        ->get()
        ;
       
        $data = [];
        for ($i = 0; $i < 12; $i++) {
            $found = false;
            foreach ($res as $r) {
                if (intval($r->date) == $i+1) {
                    $data[] = $r->toArray();
                    $found = true;    
                    break;
                }
            }
            if (!$found) {
                $obj = new \stdClass();
                $obj->sum = 0;
                $obj->count = 0;
106

                $obj->date = $i+1;
                $data[] = $obj;
            }
        }

        return json_encode($data);
    }

    public function reportpendapatanPrint($idKantor, $tahun) {


        $kantor = Kantor::findOrFail($idKantor);
        $kota = $kantor->kota;

        $res = Resi::getAll()
        ->select(DB::raw('SUM(harga) as sum'),
        DB::raw('COUNT(harga) as count'),
        DB::raw("date_format(created_at, '%m') as date") )
        ->where('kantor_asal_id', $idKantor)
        ->where('status_perjalanan', 'SELESAI')
        ->whereRaw("date_format(created_at, '%Y') = ?", [$tahun])
        ->groupBy(DB::raw("date_format(created_at, '%M-%Y')"),
DB::raw("date_format(created_at, '%m')"))
        ->orderby(DB::raw("date_format(created_at, '%M-%Y')"), 'asc')
        ->get()
        ;

        $totalSum = 0;
       
        $data = [];
        for ($i = 0; $i < 12; $i++) {
            $found = false;
            foreach ($res as $r) {
                if (intval($r->date) == $i+1) {
                    $data[] = $r->toArray();
                    $totalSum += $r['sum'];
                    $found = true;    
                    break;
                }
            }
            if (!$found) {
                $obj = new \stdClass();
                $obj->sum = 0;
                $obj->count = 0;
                $obj->date = $i+1;
                $data[] =  json_decode(json_encode($obj), true);
            }
        }

        $labels = ['January', 'February', 'March', 'April', 'May', 'June',


        'July', 'August', 'September', 'October', 'November', 'December'];

        return view('master.reports.reportpendapatanprint',
compact('data', 'kantor', 'kota', 'tahun', 'totalSum', 'labels'));
    }
   
    public function waktuPesanan(){
        $allKota = Kota::getAll()->get();
        return view('master.reports.waktuPesanan',compact('allKota'));
    }
107

    public function reportWaktuPesanan(Request $request){


       
        $allPengirimanCustomer = Pengiriman_customer::
        join('kantors','pengiriman_customers.kantor_id','kantors.id')
        ->select("pengiriman_customers.id")
        ->where("pengiriman_customers.menuju_penerima",0)
        ->where("pengiriman_customers.is_deleted",0)
        ->where("kantors.kota",$request->kota)
        -
>groupBy("pengiriman_customers.kantor_id","pengiriman_customers.id")
        ->get();

        $allResi = Resi::getAll()
        ->where("kota_asal","=",$request->kota)
        ->where("user_created","CUSTOMER")
        ->get();

        $allKantor  = Kantor::getAll()
        ->where("kota",$request->kota)
        ->where("is_warehouse",0)
        ->get();

        $waktu = new \stdclass();


        $count = 0;
        foreach($allKantor as $kantor){
            $id = $kantor->id;
            $waktu->$id = "";
            $totalMinute = 0;
            foreach($allPengirimanCustomer as $p){
                $temp = Pengiriman_customer::findOrFail($p->id);
                if($temp->kantor_id == $kantor->id){
                    foreach($allResi as $resi){
                        if($temp->resis()->first()->id == $resi->id){
                            $totalDuration = $temp->created_at-
>diffInMinutes($resi->created_at);
                            $totalMinute = $totalMinute + $totalDuration;
                            $count++;
                        }
                    }
                }
            }
            if($totalMinute != 0)$totalMinute = $totalMinute/$count;
            $waktu->$id = $totalMinute;
        }

        return json_encode($waktu);
    }
}

3.5.2. Black Box Testing

Pengujian dilakukan untuk menguji kelayakan fungsional dari aplikasi

rancang bangun sistem informasi akuntansi pengiriman barang pada SiCepat


108

Ekspress. Teknik yang digunakan untuk pengujian ini adalah menggunakan tekniks

black box testing. Pengujian yang dilakukan hanya mengamati hasil eksekusi dan

memeriksa kelayakan fungsional dari aplikasi pengolahan pengiriman barang pada

SiCepat Ekspress yang telah dibuat.

1. Pengujian browser

Tabel III.10.
Black Box Testing Browser
Skenario Hasil yang Hasil
No. Test case Kesimpulan
pengujian diharapkan pengujian

Buka dengan Google Aplikasi dapat


Sesuai
1. Google Chrome diakses dan Valid
harapan
Chrome (terbuka) tampilan sesuai

Mozila Aplikasi dapat


Buka dengan Sesuai
2. Firefox diakses dan Valid
Mozila Firefox harapan
(terbuka) tampilan sesuai
Sumber: Hasil Perancangan (2022)

2. Pengujian login

Tabel III.11.
Black Box Testing Halaman Login
Skenario Hasil yang Hasil
No. Test case Kesimpulan
pengujian diharapkan pengujian
aplikasi menolak
akses dan
menampilkan
Jika salah username:
pesan “username Sesuai
1. satu kolom (kosong) Valid
atau password harapan
dikosongkan
anda salah,
silahkan coba
lagi”
2. Kolom terisi username: aplikasi menolak Tidak Invalid
namun tidak (111111) akses dan Sesuai
sesuai password: menampilkan Harapn
(username, (111111) pesan “username
passworddan atau password
level akses anda salah,
109

silahkan coba
tidak sesuai)
lagi”
Aplikasi
Kolom terisi menerima akses
username:
dan sesuai dan
(admin) Sesuai
3 (username mengantarkan Valid
password: Harapan
dan password pengguna ke
(admin)
sesuai) halaman
dashboard.
Sumber: Hasil Perancangan (2022)

3. Pengujian tambah data pengguna atau user login

Tabel III.12.
Black Box Testing Halaman Tambah Data Pengguna atau User Login
Skenario Hasil yang Hasil
No. Test case Kesimpulan
pengujian diharapkan pengujian
Aplikasi
menolak akses
Jika semua semua
dan Sesuai
1. kolom di kolom: Valid
menampilkan harapan
kosongkan (kosong)
pesan “please fill
out this field”
aplikasi menolak
id user:
Jika salah akses dan
(kosong) Sesuai
1. satu kolom menampilkan Valid
kolom lain: harapan
dikosongkan pesan “please fill
(terisi)
out this field”
Aplikasi
Semua
Jika semua menerima akses Sesuai
2 kolom: Valid
kolom terisi dan menyimpan Harapan
terisi
data tersebut
Sumber: Hasil Perancangan (2022)

4. Pengujian tambah data bon

Tabel III.13.
Black Box Testing Halaman Tambah Data bon
Skenario Hasil yang Hasil
No. Test case Kesimpulan
pengujian diharapkan pengujian
Aplikasi
Jika semua semua
menolak akses Sesuai
1. kolom di kolom: Valid
dan harapan
kosongkan (kosong)
menampilkan
110

pesan “please fill


out this field”
aplikasi menolak
kode akun:
Jika salah akses dan
(kosong) Sesuai
2. satu kolom menampilkan Valid
kolom lain: harapan
dikosongkan pesan “please fill
(terisi)
out this field”
Aplikasi
Semua
Jika semua menerima akses Sesuai
3. kolom: Valid
kolom terisi dan menyimpan Harapan
terisi
data tersebut
Sumber: Hasil Perancangan (2022)

5. Pengujian tambah data pegawai

Tabel III.14.
Black Box Testing Halaman Tambah Data Pegawai
Skenario Hasil yang Hasil
No. Test case Kesimpulan
pengujian diharapkan pengujian
Aplikasi menolak
Jika semua semua akses dan
Sesuai
1. kolom di kolom: menampilkan Valid
harapan
kosongkan (kosong) pesan “please fill
out this field”
Nip aplikasi menolak
Jika salah satu pegawai: akses dan
Sesuai
2. kolom (kosong) menampilkan Valid
harapan
dikosongkan kolom lain: pesan “please fill
(terisi) out this field”
Aplikasi
Semua
Jika semua menerima akses Sesuai
3 kolom: Valid
kolom terisi dan menyimpan Harapan
terisi
data tersebut
Sumber: Hasil Perancangan (2022)

6. Pengujian tambah data kurir

Tabel III.16.
Black Box Testing Halaman Tambah Data kurir
Skenario Hasil yang Hasil
No. Test case Kesimpulan
pengujian diharapkan pengujian
Aplikasi
menolak akses
Jika semua semua
dan Sesuai
1. kolom di kolom: Valid
menampilkan harapan
kosongkan (kosong)
pesan “please fill
out this field”
111

aplikasi menolak
pengiriman
Jika salah akses dan
: (kosong) Sesuai
2. satu kolom menampilkan Valid
kolom lain: harapan
dikosongkan pesan “please fill
(terisi)
out this field”
Aplikasi
Jika semua Kolom: menerima akses Sesuai
3 Valid
kolom terisi terisi dan menyimpan Harapan
data tersebut
Sumber: Hasil Perancangan (2022)

7. Pengujian kota

Tabel III.17.
Black Box Testing Halaman kota
Skenario Hasil yang Hasil
No. Test case Kesimpulan
pengujian diharapkan pengujian
aplikasimenolak
pilih akun:
Jika salah akses dan
(kosong)
satu kolom menampilkan Sesuai
1. kolom lain: Valid
pencarian pesan “Gagal! harapan
(terisi)
dikosongkan Nama Akun
harus dipilih!!”
Aplikasi
menerima akses,
pilih akun: kemudian
(terisi) mencari dan
Jika kolom
pilih bulan: menampilkan Sesuai
2 pencarian Valid
(terisi) buku besar Harapan
terisi
Pilih tahun: sesuai dengan
(terisi) nama akun,
bulan dan tahun
yang dipilih
Sumber: Hasil Perancangan (2022)

8. `Pengujian laporan pengiriman barang

Tabel III.19.
Black Box Testing Halaman Laporan Pengiriman barang
Skenario Hasil yang Hasil
No. Test case Kesimpulan
pengujian diharapkan pengujian
1 Jika kolom pilih bulan: Aplikasi Sesuai Valid
pencarian (terisi) menerima akses, Harapan
terisi Pilih tahun: kemudian
112

mencari dan
menampilkan
laporan
pengiriman
(terisi)
barang sesuai
dengan bulan
dan tahun yang
dipilih
Sumber: Hasil Perancangan (2022)

3.5.3. Spesifikasi Hardware dan Software

Perangkat komputer yang dibutuhkan untuk menjalankan aplikasi rancang

bangun sistem informasi akuntansi pengiriman barang pada SiCepat Ekspress

dijelaskan lebih rinci dengan menguraikan spesifikasi perangkat keras (hardware)

dan spesifikasi perangkat lunak (software). Berikut ini adalah uraian dari kebutuhan

perangkat keras (hardware) dan kebutuhan perangkat lunak (software).

1. Spesifikasi Perangkat Keras (Hardware)

Perangkat keras(hardware) yang diperlukan untuk menjalankan aplikasi

sistem infoemasi akuntansi pengiriman barang pada SiCepat Ekspress, yaitu:

a. Central Processing Unit (CPU)

1) Processor : 2.0 GHz

2) Memory (RAM) : 2 GB

3) Hard disk : 320 GB

b. Monitor : Standard

c. Keyboard : Standard

d. Mouse : Standard

e. Printer : Standard

2. Spesifikasi Perangkat Lunak (Software)


113

Perangkat lunak (software) yang diperlukan untuk menjalankan aplikasi

rancang bangun sistem informasi akuntansi pengiriman barang pada SiCepat

Ekspress, yaitu:

a. Sistem Operasi Windows 8 or higher.

b. XAMPPServer, yang terdiri dari beberapa komponen diantaranya:

a. XAMPPserverversi v.3.2.2

b. Apache server versi 2.4.3.

c. MySQL versi 5.1.36

d. PHP versi 5.3.0

c. Bahasa pemograman yang digunakan yaitu: PHP,HTML, CSS, javascript, jQuery

dan Bootstraps yang diolah dengan sublime text 3 sebagai web editor.

d. Web browser google chrome.

Anda mungkin juga menyukai