PEMBAHASAN
khususnya online shop. Saat ini permasalahan yang terjadi di perusahaan adalah
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
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
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.
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
Semakin Mudah
fungsi yang terdapat dalam suatu organisasi. Struktur organisasi sangat penting sekali
organisasi hendaklah jelas tujuan dan sasaran dari perusahaan, dan siapa yang
tugas, sehingga pegawai tahu setiap pekerjaan apa yang harus mereka kerjakan.
Dengan demikian masing-masing tugas dapat terkoordinir ke satu arah dan tujuan.
dan kebutuhan perusahaan yang bersangkutan. Untuk mengetahui lebih jelas tentang
pembagian tugas dan tanggung jawab dari masing-masing divisi, berikut ini adalah
Adapun nama dan fungsi-fungsi dari bagian kerja pada Sicepat dari cabang
Pontianak didalam
1. Koordinator
secara prosedur.
2. Kepala Kurir
secara prosedur.
3. Kurir Antar
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
6. Helper
7. Inputer
Tinjauan kasus pada Tugas Akhir ini menjelaskan tentang rancang bangun
pendapatan dan pengeluaran yang diterapkan oleh SiCepat Ekspress, dimulai dari
proses bisnis sistem berjalan yang dimodelkan ke dalam bentuk activity diagram,
pemecahan masalah. Adapun penjabaran tinjauan kasus ini dapat dilihat pada
halaman berikut.
diketahui gambaran proses bisnis sistem berjalan untuk sistem pengelolaan data
pegawai yang meliputi pengiriman barang dan laporan yang diterapkan oleh SiCepat
berjalan pada saat ini akan dibagi menjadi beberapa prosedur atau tahapan yang
diperlukan tahapan prosedur atau tata cara mulai dari pemesanan pegantaran barang
nantinya diberikan kepada penerima barang. Resi yang diterima oleh kurir
Setelah kurir mengirimkan barang, kurir akan melakukan update status untuk
Proses pengambilan barang dilakukan dari kurir mengecek barang yang akan
diterima oleh kurir dan kurir melakukan pengiriman barang. Kurir akan
penerima yang tertera di resi pengiriman, jika benar maka barang akan
Prosedur sistem berjalan untuk pelayanan jasa kuris pada SiCepat akan
memodelkan aktivitas atau proses bisnis dapat dilihat pada halaman berikut ini.
29
Dokumen masukan adalah suatu dokumen yang berisi data-data pada suatu
sistem yang dihasilkan dari proses masukan data. Bentuk dokumen masukan yang
1. Jadwal (Pengantaran)
Sumber : Pengirim
Tujuan : Administrasi
Media : Form/kertas
Jumlah :1
Tujuan : Admin
Media : Kertas
Jumlah :1
dikeluarkan oleh sistem. Bentuk dokumen keluaran yang digunakan pada sistem
1. Resi Pengiriman
Sumber : Admin
Tujuan : Kurir
Media : Kertas
Jumlah : 1 Rangkap
2. Laporan
Sumber : Admin
Media : Kertas
Jumlah : 1 Rangkap
bahwa menyatakan bahwa Sicepat memiliki beberapa kendala pada proses yang
sedang berjalan, khususnya pada pelayanan di bagian Kurir dan penulis berhasil
kalkulator yang dimana kegiatan ini akan membuat kurir kesulitan dalam
tersebut
2. Tidak ada fitur laporan jika penerima tidak ada dirumah sehingga membuat
harian.
3. Belum adanya sistem untuk bagian kurir dalam melakukan pengelolaan data
meminimalkan permasalahan dalam proses pengiriman barang agar lebih baik dari
sehingga bila terdapat perubahan dapat diatasi dengan baik, dapat menyiasati
dari layanan kurir dan pengelolaan data hitungan pendapatan harian sampai
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
khusus yang telah disesuaikan untuk kebutuhan pengguna dan sistem, pemodelan
kebutuhan pengguna menggunakan use case diagram, activity diagram dan sequence
diagram.
fungsional program terkait dengan proses kegiatan yang diusulkan. Adapun analisis
A. Kebutuhan Pengguna
terdiri dari dua (3) level pengguna, yaitu pegawai, kasir gudang dan admin. Skenario
kebutuhan dari kedua level pengguna ini akan dijabarkan pada halaman berikut.
1. Login
14. Logout
1. Login
5. Logout
1. Login
4. Logout
B. Kebutuhan Sistem
1. Pengguna sistem harus terdaftar terlebih dahulu sebagai user pada database
2. User harus melakukan login terlebih dahulu untuk dapat menggunakan sistem.
4. Sistem dapat menyimpan data pengiriman barang ke dalam database yang akan
di rekap kembali oleh sistem untuk menghasilkan informasi data bagi masing-
pengguna untuk aplikasi akuntansi pengiriman barang pada SiCepat Ekspress ini
Tabel III.1.
40
Activity diagram merupakan penjabaran kegiatan untuk setiap use case pada
use case diagram pada Gambar IV.5. Hasil pemodelan activity diagram untuk
Ekspress. Pada gambaran activity diagram ini akan di bagi kedalam dua (2)
kelompok yaitu activity diagram pada Admin dan activity diagram pada pegawai.
penjabaran berikut.
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
gambaran activity diagram pada Admin dapat dapat dilihat pada penjabaran berikut
ini:
Kegiatan dari login dimodelkan menjadi activity diagram yang dapat dilihat
Sequence diagram menjelaskan tentang urutan interaksi antar objek yang ada
SiCepat Ekspress yang bersumber dari setiap use case yang ada pada usecase
diagram pada Gambar IV.5. Hasil pemodelan sequence diagram untuk rancang
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.
antar objek yang ada di dalam rancang bangun sistem informasi akuntansi
Pengertian komponen dalam UML merupakan hal-hal fisik dari program yang akan
digambarkan (modelkan) dan ada ketika sistem dijalankan. Berikut adalah gambaran
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
nama siakdes. XAMPP berfungsi sebagai jembatan antara program dengan basis
data.
pengiriman barang pada SiCepat Ekspress. Rancangan dokumen ini terdiri dari
yang masuk atau diterima aplikasi untuk melakukan proses. Di bawah ini adalah
uraian bentuk dokumen masukan yang diperlukan rancang bangun sistem informasi
Jumlah : 1 Form
Sumber : Kurir
Tujuan : admin
Sumber : Kurir
3.4. Desain
informasi akuntansi pengiriman barang pada SiCepat Ekspress ini terdiri dari tahapan
perancangan basis data yang menggunakan Entity Relationship Diagram (ERD) dan
setiap entitas pada rancangan basis data kemudian diuraikan menjadi spesifikasi file.
basis data yang menjelaskan entitas, atribut dan hubungan antar entitas. Berikut ini
Structure (LRS) agar memberikan gambaran lebih jelas tentang rancangan basis data
yang diusulkan. Adapun rancangan Logical Record Structure (LRS) untuk rancang
54
relationship diagram (ERD) dan logical record structure (LRS). Berikut ini adalah
Record 20
Software : MySQL
Tabel IV. 3
Spesifikasi File Master user
Record : 105
Software : MySQL
Tabel IV. 4
Spesifikasi File Master pengirim
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
Akronim : -
Record : 317
Software : MySQL
Tabel IV. 5
Spesifikasi File Tabel Admin
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)
Record 105
Software : MySQL
No_plat Varchar 10
Jenis Varchar 2
Merek Varchar 2
Record :24
Software : MySQL
Nama_kurir Varchar 15
Temp_tgl_lahir Varchar 35
Jenis_kel Int 2
Alamat_tjn Varchar 35
No_hp_kurir Varchar 13
Akronim file : kt
Record : 24
Kunci File : id
Software : MySQL
Nama_kota_tjn Varchar 35
Akronim file : kt
Record 24
Kunci File : id
Software : MySQL
Nama_kota_tjn Varchar 35
60
Record :30
Software : MySQL
Nama_penerma Varchar 15
No_hp_pengrm Varchar 13
No_hp_pengrm Varchar 13
Id_barang Varchar 12
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:
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.
Halaman dashboard admin ini dapat diakses apabila Admin telah melewati
proses login.
62
1.5. Implementasi
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,
<?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'));
}
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;
$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;
}
$request['user_updated'] = Session::get('id');
$bonmuat->update($request);
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'));
$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);
}
}
}
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'));
}
}
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]);
}
//
$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);
}
}
<?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;
}
$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;
}
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]);
}
$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
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
$idResi = $resi->id;
$linkQrCode = "https://chart.googleapis.com/chart?
chs=300x300&cht=qr&chl=$idResi&choe=UTF-8";
if(!$mail->Send()) {
//ERROR
}
}
$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);
}
return redirect('/admin/pengirimanCustomer');
}
return view('master.pengirimanCustomer.editPenerima',
compact('pengirimanCust','status','tipe','allKota','kotaNow'));
}
}
$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);
}
$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
$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";
if(!$mail->Send()) {
return 0;
}
//kirim ke pengirim jg
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";
if(!$mail->Send()) {
return 0;
}
}
return 1;
}
<?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;
$pengiriman = Pengiriman_customer::getAll()
->where('id', $pengiriman_id)->first();
$menuju_penerima = $pengiriman->menuju_penerima;
if ($pengiriman) {
$pesanan = "";
$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";}
$sejarah = [
'resi_id'=>$resi_id,
'keterangan'=>$keterangan,
'waktu'=>now()
];
Sejarah::create($sejarah);
return redirect('/kurir');
}
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";
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
//kirim ke pengirim jg
if(!$mail->Send()) {
return redirect('/kurir');
}
}
}
$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;
}
}
$sejarah = [
'resi_id'=>$resi->id,
'keterangan'=>$keterangan,
'waktu'=>now()
];
Sejarah::create($sejarah);
return redirect('/kurir');
}
$pengiriman = Pengiriman_customer::getAll()
->where('id', $pengiriman_id)
->first();
//HISTORY CANCEL
$kurir = Kurir_customer::findOrFail(Session::get('id'));
$resi = Resi::findOrFail($resi_id);
if ($resi->menuju_penerima) {
97
$sejarah = [
'resi_id'=>$resi_id,
'keterangan'=>$keterangan,
'waktu'=>now()
];
Sejarah::create($sejarah);
return redirect('/kurir');
}
return view('kurir.history',compact('pengirimans'));
}
"key: 49768eb68a44d897fd2e9c80a576d8b9"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
$response = curl_exec($curl);
$err = curl_error($curl);
<?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;
//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);
$resiSelesaiMingguan = [];
$resiCancelMingguan = [];
$resiProsesMingguan = [];
//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()
;
-
>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);
$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);
//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);
//dd($resiTerverifikasiMingguan);
$resiTerbentukTahunanLabel = [];
for ($i = 0; $i <= 12; $i++) {
$resiTerbentukTahunanLabel[] = now()->subMonths(12-$i)-
>isoFormat('MMMM-YYYY');
}
//dd($resiTerbentukTahunan);
// /dd($resiCancelBulanan)
//REPORT MISC
$s = "";
foreach ($kantors as $k) {
$s .= '<option class="form-control" value="'.$k->id.'">'.$k-
>alamat.'</option>';
}
return $s;
105
}
$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);
}
$obj->date = $i+1;
$data[] = $obj;
}
}
return json_encode($data);
}
$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);
}
}
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
$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();
return json_encode($waktu);
}
}
Ekspress. Teknik yang digunakan untuk pengujian ini adalah menggunakan tekniks
black box testing. Pengujian yang dilakukan hanya mengamati hasil eksekusi dan
1. Pengujian browser
Tabel III.10.
Black Box Testing Browser
Skenario Hasil yang Hasil
No. Test case Kesimpulan
pengujian diharapkan pengujian
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)
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)
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
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)
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)
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)
dan spesifikasi perangkat lunak (software). Berikut ini adalah uraian dari kebutuhan
2) Memory (RAM) : 2 GB
b. Monitor : Standard
c. Keyboard : Standard
d. Mouse : Standard
e. Printer : Standard
Ekspress, yaitu:
a. XAMPPserverversi v.3.2.2
dan Bootstraps yang diolah dengan sublime text 3 sebagai web editor.