Anda di halaman 1dari 272

PERANCANGAN APLIKASI PEMESANAN TIKET

PESAWAT, MOBIL TRAVEL DAN VOUCHER HOTEL


DENGAN ARSITEKTUR MODEL-VIEW-CONTROLLER

Skripsi

Diajukan Untuk Memenuhi Salah Satu Syarat


Memperoleh Gelar Sarjana Teknik
Program Studi Teknik Informatika

Oleh :
Yacobus Reinhart A P
NIM : 015314058

JURUSAN TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
2008
DESIGNING OF APPLICATION FOR RESERVATION
OF AIRPLANE AND TRAVEL CAR TICKETAND
HOTEL VOUCHER WITH MODEL-VIEW-
CONTROLLER ARCHITECTURE

Skripsi

Diajukan Untuk Memenuhi Salah Satu Syarat


Memperoleh Gelar Sarjana Teknik
Program Studi Teknik Informatika

Oleh :
Yacobus Reinhart A P
NIM : 015314058

JURUSAN TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
2008

i
iv

PERNYATAAN

Dengan ini saya sebagai penulis tugas akhir menyatakan dengan

sesungguhnya bahwa skripsi yang saya tulis ini tidak memuat karya atau bagian

karya orang lain, kecuali pemikiran, metode atau hasil penelitian orang lain yang

diambil disebutkan dengan jelas sebagai acuan.

Yogyakarta, September 2008

Yacobus Reinhart A P

Penulis
v

LEMBAR PERNYATAAN PERSETUJUAN PUBLIKASI


KARYA ILMIAH UNTUK KEPENTINGAN AKADEMIS

Yang bertanda tangan di bawah ini, saya mahasiswa Universitas Sanata Dharma :

Nama : Yacobus Reinhart A P

Nomor Mahasiswa : 015314058

Demi pengembangan ilmu pengetahuan, saya memberikan kepada Perpustakaan

Universitas Sanata Dharma karya ilmiah saya yang berjudul :

“Perancangan Aplikasi Pemesanan Tiket Pesawat, Mobil Travel dan Voucher

Hotel dengan Arsitektur Model-View-Controller.”

beserta perangkat yang diperlukan (bila ada). Dengan demikian saya memberikan

kepada Perpustakaan Universitas Sanata Dharma hak untuk menyimpan,

mengalihkan dalam bentuk media lain, mengelolanya dalam bentuk pangkalan

data, mendistribusikan secara terbatas, dan mempublikasikannya di Internet atau

media lain untuk kepentingan akademis tanpa perlu meminta ijin dari saya

maupun memberikan royalty kepada saya selama tetap mencantumkan nama saya

sebagai penulis.

Demikian pernyataan ini yang saya buat dengan sebenarnya.

Dibuat di Yogyakarta

Pada tanggal : 25 September 2008

Yang menyatakan

Yacobus Reinhart AP
vi

HALAMAN PERSEMBAHAN

" !

# $ %
vii

HALAMAN MOTTO
viii

ABSTRAKSI

Aplikasi pemesanan tiket pesawat, mobil travel dan voucher hotel

merupakan aplikasi yang diperuntukan bagi perusahaan biro pariwisata dan

perjalanan untuk menghadirkan informasi perjalanan dan wisata serta untuk

mencatat transaksi pemesanan tiket dan voucher hotel yang dilakukan oleh

pelanggan secara online melalui website.

Aplikasi ini dirancang dengan menggunakan arsitektur Model-View-

Controller, artinya aplikasi dibagi menjadi 3 komponen utama, yaitu : komponen

Model yang bertanggung jawab terhadap operasional basis data, kemudian

komponen Controller yang dalam menyediakan detail alur program sedangkan

komponen View bertanggung jawab dalam mengatur tampilan output dari

aplikasi. Aplikasi ini mempunyai 3 level user, yaitu pelanggan, petugas pelayanan

dan admin. Pelanggan melakukan aktivitas pemesanan, modifikasi data pelanggan

dan menerima kode voucher dan tiket. Petugas pelayanan bertugas dalam

memproses pemesanan pelanggan, melakukan modifikasi pemesanan,

pembayaran dan pembatalan, sedangkan admin bertanggung jawab dalam

mengontrol data dan tampilan aplikasi.

Aplikasi ini dikembangkan dengan menggunakan bahasa pemrograman

Ruby on Rails dengan basis data MySQL dan web server WEBRICK.
ix

ABSTRACT

Application of reservation for airplane and travel car ticket and voucher

hotel is an application that is destined for tour and travel company to provide tour

and travel information and to note transaction of customers for ticket and voucher

hotel reservation online trough website.

This application is designed by Model-View-Controller’s architecture, it

means that the application’s builded by 3 major components, they are : Model

component which is responsible to database operations, then Controller

component which is responsible to detail process business of application, and

View component which is responsible to output of application. The application

has 3 level users, they are customer, customer service and admin. Customer can

order ticket or voucher hotel online, modify customer data, and receive voucher

code and ticket. The customer service has tasks to process customer’s order, input

data payment and input data cancelation. Whereas, admin has responsibility to

controll data and view application.

This application is developed by using Ruby on Rails Programming with

MySQL such as a database of application, then using WEBRICK as the web

server.
x

KATA PENGANTAR

Puji dan syukur penulis panjatkan kepada Allah Sumber Cinta Kasih

yang telah melimpahkan berkat-Nya sehingga penulis dapat menyelesaikan

Laporan Tugas Akhir ini. Penulisan tugas akhir ini ditujukan untuk memenuhi

salah satu syarat memperoleh gelar Sarjana Teknik Jurusan Teknik Informatika.

Terselesaikannya penulisan tugas akhir ini tidak lepas dari peran serta

beberapa pihak, baik secara langsung maupun secara tidak langsung. Oleh karena

itu, penulis ingin menyampaikan terima kasih kepada pihak-pihak yang telah ikut

membantu dalam penulisan tugas akhir ini, baik dalam memberikan bimbingan,

petunjuk, kerjasama, kritikan, maupun saran, antara lain kepada:

1. Bapak Alb. Agung Hadhiatma, S.T., M.T., selaku Dosen Pembimbing , yang

telah banyak membantu terutama dalam memberikan bimbingan, dukungan,

dan penyediaan sarana yang mendukung, sehingga penulis dapat

menyelesaikan laporan tugas akhir ini. Terima kasih banyak pak, atas

semuanya.

2. Ibu Agnes Maria Polina, S.Kom., M.Sc., selaku Ketua Jurusan Teknik

Informatika Universitas Sanata Dharma.

3. Bapak JB. Budi Darmawan, S.T., M.Sc. dan Bapak Stevanus Wisnu Wijaya,

S.T., M.T., selaku Dosen Penguji TA.


xi

4. Seluruh Dosen Universitas Sanata Dharma, khususnya Dosen yang mengajar

di Teknik Informatika, yang telah memberikan dan mengajarkan banyak ilmu

kepada penulis.

5. Kedua orang tua penulis yang sangat penulis kasihi, yang telah memberikan

semua yang mereka miliki kepada penulis, tanpa mengarapkan imbalan

apapun. Terima kasih Tuhan Allah karena telah memberikan orang tua seperti

mereka kepada penulis.

6. Adek-adek penulis yang telah memberikan dukungan moril dan doa.

7. Mas Hendy Irawan, The Rainbow Purple, sebagai ruby mentor untuk penulis,

yang telah memberikan buku Pro Active Record dan buku digital tentang ruby

on Rails serta kuliah singkatnya melalui online.

8. Odesk.com yang telah memberikan kesempatan kepada penulis untuk bekerja

sebagai freelancer online, menambah modal penulis untuk biaya hidup,

internet dan penyusunan skripsi.

9. Dia yang selalu menemani hari-hari penulis baik dalam suka maupun duka.

10. Seluruh keluarga besar ruby-id mailing list dan ruby-forum.org yang telah

membantu penulis dalam memecahkan masalah yang dihadapi selama

penyusunan skripsi dan proyek freelance online.

11. Daus, Tanto, Henny, Damianus dan Yoseph serta seluruh sahabat-sahabatku

yang ada di Teknik Informatika. Terima kasih atas persahabatan yang kalian

berikan selama ini dan dukungannya dalam perkuliahan.

12. Dan seluruh pihak yang telah ikut ambil bagian dalam penyelesaian laporan

tugas akhir ini yang tidak dapat penulis sebutkan satu-persatu.


xii

Seperti kata pepatah, “Tak ada gading yang tak retak”, maka penulis

menyadari segala keterbatasan dalam menyelesaikan laporan tugas akhir ini. Oleh

karena itu, penulis ingin menyampaikan mohon maaf apabila terdapat kesalahan

dan kekurangan. Untuk itu, penulis mengharapkan kritik dan saran yang

membangun dari seluruh pihak yang membutuhkan laporan tugas akhir ini.

Semoga laporan tugas akhir ini dapat memberikan manfaat bagi siapa

saja yang membutuhkannya. Atas segala perhatiannya dan kerjasamanya, penulis

ucapkan terima kasih.

Yogyakarta, September 2008

Yacobus Reinhart A P

( Penulis )
xiii

DAFTAR ISI

Halaman Judul...............................................................................................................i

Halaman Persetujuan……………………………………………………………...ii

Halaman Pengesahan……………………………………………………………..iii

Halaman Pernyataan……………………………………………………………....iv

Halaman Pernyataan Persetujuan Publikasi……………………………………….v

Halaman Persembahan……………………………………………………………vi

Halaman Motto…………………………………………………………….......... .vii

Abstraksi.....................................................................................................................viii

Abstract........................................................................................................................ix

Kata Pengantar……………………….........................................................................x

Daftar isi.....................................................................................................................xiii

Daftar Gambar.............................................................................................................xxi

BAB I Pendahuluan ……………………………………………………………….1

1.1 Latar Belakang Masalah………………………………………………....1

1.2 Rumusan Masalah..……………………………………………………....2

1.3 Batasan Masalah.……………………………….………………………..3

1.4 Tujuan Penelitian..……………………………………………………….3

1.5 Manfaat Penelitian.........................................................................................4

1.6 Metodologi Penelitian .………………………………………………….5

1.6.1 Analisis Sistem.....................................................................................5

1.6.2 Disain Sistem........................................................................................5

1.6.3 Implementasi Sistem.............................................................................5


xiv

1.7 Sistematika Penulisan…………………………………………………....6

BAB II Landasan Teori……………………………………………………………8

2.1 Bahasa Ruby on Rails …..………………………………………………8

2.1.1 Pengertian Ruby on Rails ……………..…………………………..8

2.1.2 Ruby ………..……………………………..………………………8

2.1.3 Rails ………..……………………………..……………………...15

2.1.4 Ruby on Rails ………..……………………………..……………21

2.2 Sistem Basisdata ………………………………………………………23

2.2.1 Data dan Informasi ……………………………………………....23

2.2.2 Basis Data dan Sistem Basis Data ……………………………....23

2.2.3 Model Basis Data .…………………………………………….....24

2.2.3.1 Entity Relationship Model (ER Model) ……………………..26

2.3 Sistem Informasi ....................................................................................32

BAB III Analisa dan Perancangan Sistem ............................................................34

3.1 Analisis Sistem .......................................................................................34

3.1.1 Gambaran Umum Sistem Yang Lama ..........................................34

3.1.2 Gambaran Umum Sistem Yang Akan Dikembangkan .................38

3.1.3 Requirement Analysis ...................................................................44

3.1.4 Diagram Activity ..........................................................................47

3.1.4.1 Diagram Activity Pelanggan ...................................................47

3.1.4.2 Diagram Activity Petugas Pelayanan .....................................55

3.1.4.3 Diagram Activity Petugas Admin ..........................................60


xv

3.1.5 Sequence Diagram ........................................................................67

3.1.5.1 Sequence Diagram untuk Pelanggan ......................................67

3.1.5.2 Sequence Diagram untuk Petugas Pelayanan .........................70

3.1.5.2 Sequence Diagram untuk Petugas Admin ..............................74

3.1.6 Class Diagram ..............................................................................78

3.1.6.1 Class Diagram Controllers Tahap Development ...................78

3.1.6.2 Class Diagram Model Tahap Development ...........................79

3.1.6.3 Class Diagram Schema Database Tahap Development ........80

3.1.6.4 Class Diagram MVC Admin .................................................81

3.1.6.5 Class Diagram MVC Itravel ..................................................82

3.1.6.6 Class Diagram MVC Pelanggan ............................................83

3.1.6.7 Class Diagram MVC Service Agent ......................................84

3.1.7 Desain Basis Data ........................................................................85

3.1.7.1 Physical Data Model ..............................................................85

3.2 Interface Input/Output ..........................................................................97

3.2.1 Halaman Utama.........................................................................97

3.2.2 Halaman Mencari Data Penerbangan .......................................98

3.2.3 Halaman Menampilkan Jadwal Penerbangan ..........................98

3.2.4 Daftar Menu Header ................................................................99

3.2.5 Halaman Melihat Data Hotel ...................................................99

3.2.6 Halaman Menampilkan Data Hotel .........................................100

3.2.7 Halaman Mencari Data Mobil Travel ......................................100


xvi

3.2.8 Halaman Menampilkan Data Mobil Travel .............................101

3.2.9 Halaman Registrasi ..................................................................101

3.2.10 Halaman Pemesanan Tiket Pesawat ......................................102

3.2.11 Halaman Pemesanan Kamar Hotel ........................................102

3.2.12 Halaman Pemesanan Tiket Travel .........................................103

3.2.13 Halaman Edit Data Pelanggan ..............................................103

3.2.14 Halaman Login ......................................................................104

3.2.15 Petugas Pelayanan Area ........................................................104

3.2.16 Halaman Data Penerbangan ..................................................105

3.2.17 Halaman Update Data Penerbangan .....................................105

3.2.18 Halaman Data Hotel .............................................................106

3.2.19 Halaman Update Data Hotel ................................................106

3.2.20 Halaman Data Mobil Travel .................................................107

3.2.21 Halaman Update Data Mobil Travel ....................................107

3.2.22 Halaman Pembayaran ...........................................................108

3.2.23 Halaman Tambah Data Pembayaran ....................................108

3.2.24 Halaman Edit Pembayaran ...................................................109

3.2.25 Halaman Hapus Pemesanan .................................................109

3.2.26 Edit Pelanggan Data .............................................................110

3.2.27 Hapus Pelanggan Data .........................................................110

3.2.28 Menu Pelanggan ...................................................................111


xvii

BAB IV Implementasi Sistem ............................………....................................112

4.1 Karakteristik Sistem.............................................................................112

4.2 Kebutuhan Sistem................................................................................113

4.3 User Interface.......................................................................................114

4.3.1 Halaman Utama atau Index .........................................................114

4.3.2 User Interface Proses Pencarian Kamar Hotel ............................118

4.3.3 User Interface Proses Pemesanan Kamar Hotel ..........................122

4.3.4 User Interface Pencarian Mobil Travel .......................................126

4.3.5 User Interface Proses Pemesanan Tiket Mobil Travel ................129

4.3.6 User Interface Proses Pencarian Tiket Pesawat Terbang ............127

4.3.7 User Interface Proses Pemesanan Tiket Pesawat ........................130

4.3.8 User Interface Proses Registrasi Pelanggan ................................134

4.3.9 User Interface Kotak Pemesanan Diproses .................................136

4.3.10 User Interface Lupa Password ....................................................140

4.3.11 User Interface Proses Login Pelanggan ......................................145

4.3.12 User Interface Daftar Transaksi Pelanggan ................................147

4.3.13 User Interface Detail Transaksi Pelanggan .................................148

4.3.14 User Interface Modifikasi Data Pelanggan .................................150

4.3.15 User Interface Modifikasi Password ...........................................152

4.3.16 User Interface Login Karyawan ..................................................154

4.3.17 User Interface Arsip Pelanggan ..................................................157

4.3.18 User Interface Modifikasi Data Pelanggan .................................159

4.3.19 User Interface Arsip Pemesanan dan Edit Invoice ......................161


xviii

4.3.20 User Interface Pembayaran .........................................................165

4.3.21 User Interface Pembatalan .........................................................171

4.3.22 User Interface Laporan Transaksi ...............................................173

4.3.23 User Interface Ganti Password ....................................................174

4.3.24 User Interface Halaman Index Admin ........................................176

4.3.25 User Interface Pengaturan Umum pada Halaman Admin .......... 177

4.3.26 User Interface Pengaturan Gambar atau Logo ............................178

4.3.27 User Interface ATM Bersama di Halaman Admin .....................180

4.3.28 User Interface Info Rekening di Halaman Admin ......................182

4.3.29 User Interface Data Kota di Halaman Admin .............................184

4.3.30 User Interface Data Provinsi di Halaman Admin .......................186

4.3.31 User Interface Data Hotel di Halaman Admin............................187

4.3.32 User Interface Data Kamar di Halaman Admin..........................190

4.3.33 User Interface Data Tipe Kamar di Halaman Admin .................192

4.3.34 User Interface Data Penerbangan di Halaman Admin ...............193

4.3.35 User Interface Data Mobil di Halaman Admin ..........................195

4.3.36 User Interface Pengaturan Login di Halaman Login .................197

4.3.37 User Interface Logout Karyawan ..............................................199

4.3.38 User Interface CRUD Hari Khusus ............................................199

BAB V Analisa Hasil.........................................................................................202

5.1 Pengujian Aplikasi ..............................................................................202

5.1.1 Pengujian Arsitektur MVC pada Halaman Utama .......................203


xvix

5.1.2 Pengujian Arsitektur MVC Untuk Pencarian Tiket Pesawat .......206

5.1.3 Pengujian Arsitektur MVC Untuk Proses Pemesanan Tiket Pesawat

ke Kotak Pemesanan ...................................................................209

5.1.4 Pengujian Arsitektur MVC Untuk Proses Registrasi ..................211

5.1.5 Pengujian Arsitektur MVC Untuk Proses Akhir Pemesanan ......212

5.1.6 Pengujian Arsitektur MVC pada Tampilan Faktur Pemesanan

Pelanggan ....................................................................................213

5.1.7 Pengujian Arsitektur MVC Untuk Modifikasi Data Pelanggan .214

5.1.8 Pengujian Arsitektur MVC Untuk Proses Login Pelanggan ..…216

5.1.9 Pengujian Arsitektur MVC Untuk Proses Login Karyawan…...217

5.1.10 Pengujian Arsitektur MVC Untuk Proses Modifikasi Faktur

Pelanggan ………………………………………………………218

5.1.11 Pengujian Arsitektur MVC Untuk Proses Hapus Faktur

Pelanggan ……………………………………………………...220

5.1.12 Pengujian Arsitektur MVC Untuk Proses Tambah Data

Pembayaran …………………………………………………....222

5.1.13 Pengujian Arsitektur MVC Untuk Proses Tambah Data

Pembatalan ……………………………………………………..223

5.2 Kelebihan Dan Kekurangan Sistem ....................................................225

5.2.1 Kelebihan Sistem ....................................................................225

5.2.2 Kekurangan Sistem .................................................................226

BAB VI Penutup .................................................................................................227


xx

6.1 Kesimpulan ......................................................................................227

6.2 Saran .................................................................................................228

DAFTAR PUSTAKA.........................................................................................229

LAMPIRAN ......................................................................................................230
xxi

DAFTAR GAMBAR

Gambar Keterangan Halaman


2.6a Contoh Kode Ruby Untuk String 9
2.6b Hasil Output Kode Gambar 2.6a 9
2.7a Contoh Kode Ruby Untuk Range 10
2.7b Hasil Output Kode Gambar 2.7a 10
2.8a Contoh Kode Pemrograman Ruby untuk Array 11
2.8b Contoh Kode Pemrograman Ruby untuk Array 11
2.8c Contoh Kode Pemrograman Ruby untuk Array 11
2.8d Hasil Output Kode Pemrograman Gb 2.8a, Gb. 2.8b, Gb 2.8c. 11
2.9a Contoh Kode Pemrograman Ruby untuk Hash 12
2.9b Hasil Output Kode Pemrograman Gambar 2.9a 12
2.10a Kode Pemrograman Ruby untuk Methods 13
2.10b Hasil Output Kode Pemrograman Gambar 2.10a 13
2.11a Kode Pemrograman Ruby untuk Class 14
2.11b Simbol converging data flow 15
2.12 Arsitektur Model-View-Controller 16
2.13 Interaksi Rails dengan MVC 17
2.14 Context Diagram 18
2.15 Struktur direktori pada suatu aplikasi ruby on rails 20
2.16 Subdirektori app 21
2.17 Struktur url dengan Controller 22
2.18 Pembuatan halaman index dan about 22
2.19 Transformasi data menjadi informasi 23
2.20 Contoh Penggambaran Symbol Entitas 27
2.21 Tabel Atribut dari Kustomer untuk eTravell 27
2.22 Contoh Penggambaran Symbol Atribut 28
2.23 Simbol Kerelasian one to one 28
2.24 Simbol Kerelasian many to one 29
2.25 Simbol Kerelasian one to many 29
2.26 Simbol Kerelasian many to many 29
2.27 Simbol Kerelasian Berganda 30
2.28 Simbol Kerelasian rekursif 30
3.1 Use Case Diagram Pada Aplikasi Itravel 45
3.2 Diagram Activity Proses Memesan Tiket Penerbangan 47
3.3 Diagram Activity Proses Memesan Kamar Hotel 48
3.4 Diagram Activity Proses Memesan Mobil Travel 49
3.5 Diagram Activity Proses Registrasi 50
3.6a Diagram Activity Proses Login 50
xxii

3.6b Diagram Activity Proses Logout 51


3.7 Diagram Activity Proses Menyimpan Kotak Pemesanan 52
3.8 Diagram Activity Proses Update Data Pelanggan 52
3.9 Diagram Activity Proses Melihat Faktur Pemesanan 53
3.10a Diagram Activity Proses Lupa Password 53
3.10b Diagram Activity Proses Ubah Password 54
3.11a Diagram Activity Proses Login Petugas Pelayanan 55
3.11b Diagram Activity Proses Login Petugas Pelayanan 55
3.12 Diagram Activity Proses Menambah Data Pembayaran 56
3.13 Diagram Activity Proses Modifikasi Pemesanan 56
3.14 Diagram Activity Proses Pembentukan Data Pembatalan 57
3.15 Diagram Activity Proses Update Data Pelanggan 57
3.16 Diagram Activity Proses Update Data Faktur 58
3.17 Diagram Activity Proses Update Data Pelanggan 58
3.18 Diagram Activity Proses Ubah Password 59
3.19 Diagram Activity Proses Pembentukan Laporan 59
3.20 Diagram Activity Ciptakan Data penerbangan 60
3.21 Diagram Activity Proses Update Data Penerbangan 60
3.22 Diagram Activity Ciptakan Tiket Hari Khusus 61
3.23 Diagram Activity Hapus Penerbangan 62
3.24 Diagram Activity Ciptakan Data Kamar 62
3.25 Diagram Activity Modifikasi Data Kamar 63
3.26 Diagram Activity Proses Update Data Hotel 64
3.26 Diagram Activity Proses Update Data Mobil Travel 64
3.29 Diagram Activity Proses Hapus Hotel 65
3.30 Activity Proses Hapus Mobil travel 65
3.31 Diagram Activity Proses Create, Update dan Delete 66
3.32 Diagram Sequensial Proses Pemesanan Tiket Penerbangan 67
3.33 Diagram Sequensial Proses Pemesanan Tiket Mobiltravel 68
3.34 Diagram Sequensial Proses Pemesanan Kamar Hotel 68
3.35 Diagram Sequensial Proses Registrasi dan Kotak Pemesanan 69
3.36 Diagram Sequensial Proses Edit Data Pelanggan 69
3.37 Diagram Sequensial Proses Modifikasi Faktur Pelanggan 70
3.38 Diagram Sequensial Proses Bentuk Data Pembayaran dan 70
Rekam Kode Voucher
3.39 Diagram Sequensial Proses Pembentukan Data Pembatalan 71
3.40 Diagram Sequensial Tambah Data Pembayaran 71
3.41 Diagram Sequensial Proses Edit Password 72
3.42 Diagram Sequensial Proses Hapus Faktur 72
3.43 Diagram Sequensial Proses Hapus Pelanggan 73
3.44 Diagram Sequensial Proses Bentuk Laporan PDF 73
xxiii

3.45 Diagram Sequensial Proses Login Petugas Pelayanan 74


3.46 Diagram Sequensial Proses Login Petugas Admin 74
3.47 Diagram Sequensial Proses Baca, Bentuk, Modifikasi & 75
Bentuk Data Hotel
3.48 Diagram Sequensial Proses Baca, Bentuk, Modifikasi & 75
Bentuk Data Kamar
3.49a Diagram Sequensial Proses Baca, Bentuk, Modifikasi & 76
Bentuk Data Mobil travel
3.49b Diagram Sequensial Proses Baca, Bentuk, Modifikasi & 76
Bentuk Data Penerbangan
3.50 Diagram Sequensial Proses Baca, Bentuk, Modifikasi Data 77
Global Config
3.51 Sequensial Proses Baca, Bentuk, Modifikasi Data Hari Khusus 77
3.52 Diagram Kelas Controllers Tahap Development 78
3.53 Diagram Kelas Models Tahap Development 79
3.54 Diagram Kelas Schema Database Tahap Development 80
3.55 Diagram Kelas MVC Admin 81
3.56 Diagram Kelas MVC Itravel 82
3.57 Diagram Kelas MVC Pelanggan 83
3.58 Diagram Kelas MVC ServiceAgent 84
3.59 Tampilan pada halaman utama (\app\views\public\index.rhtml) 97
3.60 Tampilan Melihat Data Penerbangan 98
(\app\views\penerbangan\index.rhtml)
3.61 Halaman Jadwal Penerbangan 98
(\app\views\penerbangan\jdwTerbang.rhtml)
3.62 Isi menu pada header menu. 99
3.63 Halaman Cari Data Hotel (\app\views\hotel\index.rhtml) 99
3.64 Halaman tampilkan daftar hotel 100
(\app\views\hotel\daftar.rhtml)
3.65 Halaman Cari Data Mobil Travel 100
(\app\views\MobillTravel\index.rhtml)
3.66 Halaman Tampil Data Mobil Travel 101
(\app\views\MobillTravel\denah.rhtml)
3.67 Halaman Tampil Form Registrasi 101
(\app\views\Pelanggan\tambah.rhtml)
3.68 Halaman Form Pemesanan Pesawat 102
(\app\views\pemesanan\pesawat.rhtml)
3.69 form pemesanan Kamar Hotel 102
(\app\views\pemesanan\hotel.rhtml)
3.70 Form pemesanan Tiket Travel 103
(\app\views\pemesanan\mobil.rhtml)
xxiv

3.71 Form edit data Pelanggan (\app\views\Pelanggan\edit.rhtml) 103


3.72 Halaman Login untuk Pelanggan dan CS 104
(\app\views\Pelanggan\login.rhtml)
3.73 Halaman Login untuk Pelanggan dan CS 104
(\app\views\Pelanggan\login.rhtml)
3.74 Halaman Data Penerbangan 105
(\app\views\penerbangan\data.rhtml)
3.75 Halaman Update Data Penerbangan 105
(\app\views\penerbangan\update.rhtml)
3.76 Halaman Data Hotel (\app\views\hotel\data.rhtml) 106
3.77 Halaman Update Data Hotel (\app\views\hotel\update.rhtml) 106
3.78 Halaman Data Mobil (\app\views\mobil\data.rhtml) 107
3.79 Halaman Update Data Mobil (\app\views\mobil\update.rhtml) 107
3.80 Halaman Data Pembayaran 108
(\app\views\pembayaran\data.rhtml)
3.81 Halaman Tambah Data Pembayaran 108
(\app\views\pembayaran\tambah.rhtml)
3.82 Halaman Edit Data Pembayaran 109
(\app\views\pembayaran\edit.rhtml)
3.83 Halaman Pemesanan dan hapus Pemesanan 109
(\app\views\pembayaran\edit.rhtml)
3.84 Halaman Edit Data Pelanggan 110
(\app\views\Pelanggan\edit.rhtml)
3.85 Halaman Edit Data Pelanggan 110
(\app\views\Pelanggan\editbycs.rhtml)
3.86 Halaman Login Pelanggan (\app\views\Pelanggan\index.rhtml) 111
4.1 User interface halaman utama 114
4.2 User Interface – Fasilitas untuk pencarian kamar hotel 118
4.3 User interface hasil pencarian kamar hotel 119
4.4 User interface hasil pencarian kamar hotel 120
4.5 User interface hasil proses pemesanan kamar hotel kedalam 123
kotak pesanan
4.6 Pencarian mobil travel pada halaman itravel/mobiltravel dan 126
halaman index
4.7 Tampilan Jika Pencarian Mobil Travel Berhasil 128
4.8 Tampilan Jika Pencarian Tiket Mobil Travel Habis 128
4.9 Tampilan Jika Pemesanan Tiket Mobil Travel Berhasil 129
4.10 Tampilan Menu Pencarian Tiket Pesawat 131
4.11 Tampilan Hasil Pencarian Tiket Pesawat 133
4.12 Tampilan Kotak Pesanan Untuk Pemesanan Tiket Pesawat 134
4.13 Tampilan registrasi pelanggan 137
xxv

4.14 Tampilan registrasi pelanggan jika terjadi kesalahan 137


4.15 Tampilan halaman konfirmasi 138
4.16 Tampilan pemesanan dari kotak pesanan telah berhasil 140
diproses
4.17 Tampilan halaman lupa password 141
4.18 Tampilan pesan error setelah validasi email pada halaman lupa 141
password
4.19a Halaman lupa password setelah mengirim informasi ke email 143
pelanggan
4.19b Contoh tampilan email pemberitahuan pada email pelanggan 143
4.20 Tampilan pada halaman kostumer lupa_password, setelah 145
meng-click url yang terdapat pada email pelanggan.
4.21 Tampilan pada halaman kostumer/login, untuk user pelanggan. 145
4.22 Tampilan pada halaman kostumer/login, proses login 146
pelanggan gagal
4.23 Tampilan pada halaman utama pelanggan, jika login berhasil 147
4.24 Tampilan pada halaman root/kostumer/daftar_transaksi 148
4.25a Tampilan pada halaman root/kostumer/invoice – detail 149
transaksi user pelanggan
4.25b Form Modifikasi Data Pelanggan 152
4.26 Form Modifikasi Data Password Pelanggan 152
4.27 Tampilan form login karyawan 154
4.28 Tampilan form login karyawan jika gagal 156
4.29 Tampilan halaman index pada serive_agent 157
4.30a Tampilan halaman service_agent untuk action 159
arsip pelanggan (def list_kostumer)
4.30b Tampilan halaman service_agent untuk action modifikasi 160
pelanggan
4.31 Tampilan halaman service_agent apabila modifikasi terjadi 161
kesalahan
4.32a Tampilan halaman arsip pemesanan 161
4.32b Tampilan pencarian gagal, menggunakan fasilitas cari faktur & 163
nama
4.33 Tampilan halaman edit_invoice 165
4.34a Pencarian faktur pembayaran 166
4.34b Pencarian faktur gagal 166
4.35a Tampilan form pembayaran 167
4.35b Tampilan pesan error pada form pembayaran 168
4.36 Tampilan form pembayaran berhasil dan proses input kode 170
voucher
4.37 Tampilan faktur setelah proses pembatalan 172
xxvi

4.38 Tampilan halaman untuk laporan transaksi. 173


4.39 Tampilan laporan transaksi dalam bentuk pdf file 174
4.40 Tampilan modifikasi password user karyawan jika berhasil 175
4.41 Tampilan modifikasi password user karyawan jika gagal 176
4.42 Tampilan halaman index admin 176
4.43 Tampilan halaman pengaturan umum atau global config pada 177
admin
4.44 Tampilan halaman pengaturan logo dan baner 180
4.45 Tampilan halaman pengaturan data atm bersama 182
4.46 Tampilan halaman pengaturan data rekening 184
4.47 Tampilan halaman pengaturan data kota 185
4.48 Tampilan halaman pengaturan data provinsi 187
4.49 Tampilan halaman pengaturan data hotel 189
4.50 Tampilan halaman pengaturan data kamar 191
4.51 Tampilan halaman pengaturan data kamar 193
4.52 Tampilan halaman pengaturan data penerbangan 195
4.53 Tampilan halaman pengaturan data mobiltravel 197
4.54 Tampilan halaman form hari khusus 201
5.1 Arsitektur Three Tier dan Model-View-Controller untuk 202
halaman index website
5.2 Arsitektur Three Tier dan Model-View-Controller untuk 204
Pencarian Tiket Pesawat
5.3 Arsitektur Three Tier dan Model-View-Controller untuk proses 207
pemesanan tiket pesawat ke kotak pemesanan.
5.4 Arsitektur Model-View-Controller untuk proses registrasi. 209
5.5 Arsitektur Model-View-Controller untuk proses akhir 211
pemesanan
5.6 Arsitektur Model-View-Controller pada tampilan faktur 213
pemesanan pelanggan.
5.7 Arsitektur Model-View-Controller proses modifikasi data 214
pelanggan.
5.8 Arsitektur Model-View-Controller proses login pelanggan 216
5.9 Arsitektur Model-View-Controller proses login pelanggan. 218
5.10 Arsitektur Model-View-Controller proses modifikasi item di 219
faktur pelanggan.
5.11 Arsitektur Model-View-Controller proses hapus faktur 220
pelanggan.
5.12 Arsitektur Model-View-Controller proses data pembayaran 222
5.13 Arsitektur Model-View-Controller proses tambah data 224
pembatalan
1

BAB I

PENDAHULUAN

1.1 LATAR BELAKANG MASALAH

Kehadiran teknologi internet untuk memperoleh informasi dan melakukan

komunikasi tanpa batas, memicu para pelaku bisnis memanfaatkan internet sebagai

media promosi digital terhadap produk dari jenis usaha yang dilakukannya, salah

satunya adalah biro wisata dan perjalanan.

Internet tidak hanya digunakan sebagai ajang promosi tetapi juga untuk

merespon perkembangan jaman dalam pemasaran moderen dan strategi untuk

menghadapi kompetitor, sehingga diperlukan suatu perangkat lunak yang tidak hanya

dapat terintegrasi dengan internet tetapi juga mampu mengelola dan mengontrol

informasi wisata dan perjalanan yang dibutuhkan user, serta mampu melakukan

pencatatan terhadap transaksi pemesanan, informasi pembayaran dan pembatalan

yang dilakukan oleh user terhadap jenis barang atau jasa yang ditawarkan.

Dengan adanya kemungkinan informasi yang dapat berubah setiap saat, dan

tuntutan perkembangan teknologi serta penambahan fasilitas untuk mendukung

proses bisnis dan kebutuhan user, maka perangkat lunak akan dibentuk dengan pola

Model-View-Controller, sehingga diharapkan proses upgrade atau modifikasi

perangkat lunak tidak mempengaruhi atau mematikan keseluruhan kinerja kerja

sistem melainkan hanya pada kelas atau bagian dari pola tertentu saja dan
2

memudahkan dalam mengklasifikasikan masalah dalam pengembagan perangkat

lunak berdasarkan kelas-kelasnya.

1.2 RUMUSAN MASALAH

Batasan masalah dari perangkat lunak yang akan dibentuk adalah :

1. Bagaimana menciptakan perangkat lunak berbasis internet (website)

yang dapat mengontrol dan mengelola informasi perjalanan pesawat dan

mobil travel, informasi hotel dan kamar hotel, harga tiket atau kamar

serta informasi stock dari item product serta mampu mengelola

pemesanan dari pelanggan terhadap item product yang didukung dengan

sistem kontrol yang mampu mengelola pemesanan, pembatalan,

pembayaran serta pengarsipannya dan laporan transaksi.

2. Merancang perangkat lunak menggunakan pola Model-View-Controller

yang memisahkan suatu perangkat lunak kedalam 3 kategori kelas.

Kelas kategori model adalah segala bentuk operasi yang

mempresentasikan data untuk diolah di dalam perangkat lunak tersebut.

Sedangkan view merupakan tampilan dari perangkat lunak dan

controller menerima masukan dari pemakai, sebagai control input –

output dari perangkat lunak atau dapat disebut main brain.


3

1.3 BATASAN MASALAH

Agar perancangan perangkat lunak tepat guna, maka dilakukan pembatasan

cangkupan sistem antara lain :

1. Laporan yang akan dibentuk oleh perangkat lunak hanya laporan

transaksi pembayaran dan pembatalan, bukan laporan buku besar atau

akutansi.

2. Perangkat lunak atau sistem yang akan dibentuk tidak mengelola

pemesanan terhadap penerbangan atau perjalanan transit.

3. Perangkat lunak yang akan dibentuk hanya sampai pada tahap

development, sehingga tidak membahas tahap pada lingkungan

production dan test.

4. Informasi penerbangan dan mobil travel serta pemesanannya hanya

untuk keberangkatan dari kota Yogyakarta, dan informasi serta

pemesanan kamar hotel hanya yang berada di kota Yogyakarta.

5. Implementasi pola Model-View-Controller pada perangkat lunak

menggunakan bahasa pemrograman Ruby on Rails.

1.4 TUJUAN PENELITIAN

Tujuan dari penelitian adalah membentuk suatu perangkat lunak berbasis

internet (website) yang dalam pembentukannya dipisahkan dalam 3 kategori kelas

yaitu Model-View-Controller yang mampu mengelola dan mengontrol informasi


4

penerbangan, mobil travel dan hotel serta stock item product yang dilengkapi dengan

fasilitas pemesanan terhadap item product , pengelolaan pemesanan, pembayaran dan

pembatalan serta laporan transaksi.

1.5 MANFAAT PENELITIAN

1. Bagi Perusahaan : dapat memberikan informasi tiket dan kamar hotel

yang up-to-date kepada pelanggan secara elektronik melalui internet

dan diharapkan sebagai pengenalan metode perdagangan baru yang

dilakukan secara elektronik yang murah dan mudah.

2. Bagi Masyarakat : Masyrakat dapat melakukan pemesanan tiket

pesawat, mobil travel atau kamar hotel tanpa harus mencari atau datang

ke biro travel yang dapat menghemat biaya transportasi dan waktu.

Serta diharapkan masyarakat dapat sadar terhadap manfaat internet

dalam mempromosikan suatu produk rumah tangga atau informasi

budaya, kesenian dan tata ruang masyrakat serta isinya.

3. Bagi Universitas : khususnya dosen dan mahasiswa sebagai informasi

dan pembelajaran masalah dalam merancang suatu perangkat lunak

berbasis framework menggunakan pola Model-View-Controller dengan

bahasa pemrograman Ruby on Rails yang berbasis internet.


5

1.6 METODOLOGI PENELITIAN

Metodologi Penelitian yang digunakan untuk membangun aplikasi website

pemesanan tiket pesawat, mobiltravel dan voucher hotel adalah metodologi berobjek.

Alat dan teknik yang digunakan dalam penelitian ini adalah :

1.6.1 Analisis Sistem

1. Studi pustaka

Mempelajari buku-buku, laporan-laporan, karya ilmiah maupun makalah

yang dapat dijadikan sebagai bahasan masukkan informasi dalam

menyelesaikan masalah-masalah yang ada.

1.6.2 Desain Sistem

1. Membuat use case diagram, diagram kelas dan diagram komponen dalam

perancangan sistem.

2. Membuat desain database, menu, input, output dan user interface.

1.6.3 Implementasi Sistem

1. Translasi desain yang lebih detail yaitu dengan penulisan program sesuai

dengan desain yang telah dibuat

2. Melakukan pengimplementasian program dalam localhost untuk menguji

program berjalan dengan baik atau terjadi kekurangan.


6

1.7 SISTEMATIKA PENULISAN

Bab I : Pendahuluan

Dalam bab ini diuraikan mengenai latar belakang masalah,

rumusan masalah, tujuan penelitian, manfaat penelitian,

metodologi penelitian dan sistematika penulisan.

Bab II : Landasan Teori

Dalam bab ini diuraikan tentang teori-teori yang relevan dengan

permasalahan yang diangkat dalam skripsi ini.

Bab III : Analisis dan Perancangan Sistem

Pada bab ini berisi tentang cara penerapan konsep dasar yang telah

diuraikan pada bab sebelumnya untuk menganalisa dan merancang

sebuah aplikasi yang berbasis web baik berupa perancangan

database, perancangan input, perancangan output maupun

perancangan user interface.

Bab IV : Implementasi Sistem

Pada bab ini akan berisi tentang implementasi dari perancangan

yang telah dibuat yang meliputi cara kerja program yaitu berupa

hasil input program maupun hasil output program.

BAB V : Analisa Hasil

Pada bab ini berisi tentang kelebihan dan kekurangan pada sistem

yang telah dibuat.


7

BAB VI : Penutup

Pada bab ini berisi tentang kesimpulan dan saran dari penulisan

tugas akhir yang disusun.


BAB II

LANDASAN TEORI

2.1 Bahasa Ruby on Rails

2.1.1 Pengertian Ruby on Rails

Ruby on rails merupakan bahasa pemrograman ruby menggunakan framework

rails untuk membentuk web dengan menggunakan arsitektur Model-View-Controller

(MVC) pada framework-nya.

2.1.2 Ruby

Sebagai bahasa pemrograman oreientasi objek, Ruby memiliki aturan dalam

penulisan kodenya. Setiap proses yang ditulis dalam sebuat file dengan ekstensi .rb.

Berikut cara penulisan dalam Ruby :

1. String

Merupakan perintah untuk menampilkan suatu karakter dalam bahasa

pemrograman. String literal merupakan suatu string tetap yang dibuat dengan

diantara tanda petik. Contoh :


9

puts "Hallo, Ruby itu mudah\n"

puts "Bisa teriak " "#{"Hallo! "*3}"

puts "Bisa matematika 100x10 = " "#{100*10}"

Gambar 2.6a Contoh Kode Ruby Untuk String

Output:

C:\ruby\ruby hello.rb

Hallo, Ruby itu mudah

Bisa teriak Hallo! Hallo! Hallo!

Bisa matematika 100x10 = 1000

Gambar 2.6b Hasil Output Kode Gambar 2.6a

Pada hasil output baris pertama adalah kumpulan string literal. Pada saat

string literal dibentuk menjadi string objek dapat dilihat pada pengkodean

baris kedua dan hasil outputnya, yakni menggandakan sebuah string dengan

angka 3 secara mudah, sehingga pada outputnya menghasilkan 3 string yang

sama. Pada pengkodean baris ke tiga adalah menggandakan string numeric

dengan angka 10 untuk menghasilkan string numerik secara matekmatik.

2. Collection atau Container

Merupakan sebuah objek yang menyimpan atau menahan sekelompok relasi

objek berdasarkan tipe dan tujuannya. Suatu Collection dapat digunakan

untuk menyimpan sejumlah data item, menjaganya terorganisasi, dan

9
10

menjalankan operasi ke semua data yang tersimpan. Yang termasuk dalam

Collection adalah :

• Range

Contoh penulisan Arrange pada Ruby adalah sebagai berikut :

Satu_sampai_dua = 1...3
Satu_sampai_tiga = 1..3
Satu_dua_tiga = 1..3

puts(Satu_sampai_dua == Satu_sampai_tiga)
puts(Satu_sampai_dua.eql?( Satu_dua_tiga))
puts(Satu_sampai_tiga == Satu_dua_tiga)

Gambar 2.7a Contoh Kode Ruby Untuk Range

Output

false
false
true

Gambar 2.7b Hasil Output Kode Gambar 2.7a

Penggunaan Range pada Ruby menggunakan double dot dan triple

dot, tidak berbeda dengan bahasa pemrograman lainnya.

10
11

• Array

Merupakan suatu daftar nama secara utuh atau urutan dari element

collection. Berikut contoh penulisannya dalam Ruby:

hello = ['ni hao', 'bonjour', 'hi', 'apa kabar']

puts hello

Gambar 2.8a Contoh Kode Pemrograman Ruby untuk Array

belajar = %W( Minum obat #{(2*3)} butir sehari )

puts belajar

Gambar 2.8b Contoh Kode Pemrograman Ruby untuk Array

pelajaran = %w( Minum obat #{(2*3)} butir sehari )

puts pelajaran

Gambar 2.8c Contoh Kode Pemrograman Ruby untuk Array

Output :
Minum Minum
ni hao
Obat Obat
bonjour
6 #{(2*3)}
hi
butir butir
apa kabar
sehari sehari

Gambar 2.8d Hasil Output Kode Pemrograman Gb 2.8a, Gb. 2.8b, Gb 2.8c.

11
12

Hasil outputnya sudah berupa elemen-elemen dari input yang ada.

Tanda %W adalah memberikan double quoted pada setiap bagian.

Sedangkan %w memberikan single quoted pada setiap bagian.

• Hash

Adalah sekumpulan elemen dalam satu kelompok atau array yang setiap

elemennya berfungsi sebagai kunci pemanggil dari nilai yang ada

didalam masing-masing elemen. Contoh penulisan Hash dalam Ruby

sebagai berikut :

nama_president = { 'president pertama' => 'Ir Soekarno', 'president kedua' =>


'Soeharto', 'president ketiga' => 'BJ habibi', 'president keempat' => 'Abdul Rahman
Wahid'}
puts nama_president['president ketiga']
puts nama_president.has_key?('president kedua')
puts nama_president.has_value?('president pertama')
puts nama_president.empty?

Gambar 2.9a Contoh Kode Pemrograman Ruby untuk Hash

Output:

BJ Habibie
true
false
false

Gambar 2.9b Hasil Output Kode Pemrograman Gambar 2.9a

12
13

3. Methods (metode)

Adalah pendefinisian suatu proses atau sekumpulan perintah dalam kode

bahasa pemrograman yang akan dieksekusi menggunakan nama dari definisi

yang telah dibentuk. Metode yang dibentuk pada umumnya diikuti dengan

parameter atau nilai input untuk menambah nilai dari kode perintah yang

dalam definisi tersebut. Contoh :

def coba_method (ini_parameter, itu_paramater)


puts “Saya kuliah di ”+ini_parameter+” jurusan “+itu_parameter+”.”
end

coba_method(“Sanata Dharma”, “Informatika”)

Gambar 2.10a Kode Pemrograman Ruby untuk Methods

Output :

Saya kuliah di Sanata Dharma jurusan Informatika.

Gambar 2.10b Hasil Output Kode Pemrograman Gambar 2.10a

4. Class

Merupakan metode yang digunakan untuk menjalankan suatu perintah atau

variable untuk memanggil objek. Didalam ruby class dapat diambil dari class

lain maupun super class sehingga dengan demikian

13
14

semua metode dan variablenya dapat dijalankan setiap proses dari kelas itu

berlangsung. Contoh :

class Pindah_jurusan
def initialize(matakuliah, jurusan)
@sks = matakuliah
@prodi = jurusan
puts "Saya Dari Jurusan Matematika"
end

def ganti_jurusan(jurusanbaru)
@prodi = jurusanbaru
puts "Berencana pindah ke #{jurusanbaru}!"
self.get_info
end

def ganti_matakuliah(matakuliahbaru)
@sks = matakuliahbaru
puts "Kalau saya pindah, saya harus kuliah #{matakuliahbaru}!"
self.get_info
end

def get_info
puts "Di jurusan #{@prodi} ada mata kuliah #{@sks}."
end
end

transferkuliah = Pindah_jurusan.new("Matematika Murni", "Matematika")


transferkuliah.ganti_jurusan("Teknik Informatika")
transferkuliah.ganti_matakuliah("Teknik Komputasi Dasar")

Gambar 2.11a Kode Pemrograman Ruby untuk Class

14
15

OUTPUT:
Saya Dari Jurusan Matematika
Berencana pindah ke Teknik Informatika!
Di jurusan Teknik Informatika tidak ada mata kuliah Matematika Murni.
Kalau saya pindah saya harus kuliah Teknik Komputasi Dasar!
Di jurusan Teknik Informatika ada mata kuliah Teknik Komputasi Dasar.
Gambar 2.11b Hasil Output Kode Pemrograman Gambar 2.11a

2.1.3 Rails

Rails merupakan framework untuk aplikas web dengan menggunakan bahasa

ruby. Dalam membuat suatu web aplikasi, rails memeliki struktur atau arsitektur

aplikasi, yaitu :

1. Model, View, Controllers

• Model : struktur ini bertanggung jawab dalam menjaga keadaan dari suatu

aplikasi, disebut juga sebagai lapisan data sebelum data dikirim ke

Controller atau database. Model digunakan untk proses insert, update, dan

delete dari tempet penyimpanan data, seperti yang terjadi dalam relasional

basisdata.

Contoh dalam pengisian KRS online untuk mengambil mata kuliah

tertentu harus melalui prasyarat nilai, maka model akan bekerja

memberikan batasan, membaca input user. Dalam hal ini Model bertindak

sebagai penyaring sebelum penyimpan data, sehingga aplikasi tidak

menyimpan data yang tidak valid.

15
16

• View: struktur ini bertanggung jawab untuk menghasilkan suatu user

interface, umumnya didasarkan pada data yang ada dimodel. Contoh

dalam pengisian KRS online, yang dimaksud dengan view adalah daftar

matakuliah yang diterbitkan untuk semester yang akan berlangsung.

Sedangkan untuk dosen, View digunakan untuk menambah dan mengedit

volume kelas dari matakuliah bersangkutan. View bisa menambah data

atau menginput data, tapi tidak bisa menfilter data yang masuk, artinya

data yang diinputkan belum tentu data valid.

• Controllers: komponen yang menerima permintaan atau perintah dari

browser dan menjalankan perintah spesifik dari user, meniteraksikannya

dengan model kemudian menampilkan hasil proses kembali ke View pada

browser user.

Gambar 2.12 Arsitektur Model-View-Controller

16
17

Didalam aplikasi rails, perintah input pertama kali di kirim ke router yang

menjalankan semuanya. Didalam router terjadi identifikasi dari beberapa

bagian method atau action dibeberapa tempat dalam kode controller.

Action yang terjadi memungkinkan untuk membaca data selama perintah

berlangsung yang memungkinkan terjadinya interaksi dengan model

sehingga menyebabkan action lainya dijalankan. Dalam hal ini action

mempersiapkan informasi untuk View yang akan ditampilkan ke user.

Gambar 2.13 Interaksi Rails dengan MVC

2. Active Record (Rails Model Support)

Active Record merupakan Object Relational Mapping (OMR) Layer pada

Rails. Didalam OMR table dipetakan ke Class, baris ke objek dan kolom ke

objek atribut. Active Record digunakan untuk meminimalisasi jumlah

konfigurasi objek relational database yang dibentuk, mebebaskan programmer

untuk bekerja menggunakan business logic, jika suatu web form

17
18

menggandung data yang direlasikan ke suatu objek bisnis, Active Record

dapat mengekstraknya ke dalam Model. Active Record mendukung validasi

data Model sehingga jika bentuk data tidak sesuai dengan validasi, View pada

rails dapat menampilkan dan membentuk pola error hanya dengan satu baris

kode saja.

Class Controller < ActiveRecord::Base

def action :: model dan view


condition|expression|params[:id]
end
end
Gambar 2.14 Kerangka Kode Class menggunakan Active Record

3. Action Pack : View dan Controller

View dan Controller merupakan bagian dari MVC, Controller menyuplai data

ke View dan View akan menampilkannya di halaman website, semua interaksi

yang terjadi di View akan dikirim kembali ke Controller. Kerana ada

banyaknya interaksi, Controller Support dan View Support dalam Rails

dikumpulkan menjadi satu komponen yang disebut Action Pack.

View Support

Bertanggung jawab dalam membuat sebagian atau keseluruhan halaman

yang akan ditampilkan pada Browser.

Controller Support

Merupakan Logical Center dalam aplikasi rails yang menghubungkan

interaksi antara user, view dan model. Fungsi lain dari Controller yaitu:

18
19

• Bertanggung jawab memproses perintah eksternal ke internal

actions. Hal ini mampu menangani URLs yang user-friendly.

• Melakukan manajemen terhadap caching yang mampu

mempercepat kinerja kerja aplikasi.

• Melakukan manajemen terhadap Module Pembantu (Helper

Modules) yang menjalankan kemampuan pola View tanpa

memperbesar bagian kode.

• Melakukan manajemen terhadap session, sehingga user bisa secara

terus menerus menggunakan aplikasi sesuai dengan session mereka,

tanpa harus melakukan identifikasi atau login jika ingin mengakses

setiap halaman.

Aplikasi struktur Model-View-Controller disimpan dalam struktur direktori

rails yang dapat dilihat sebagai berikut:

19
20

Gambar 2.15 Struktur direktori pada suatu aplikasi ruby on rails

Dapat dilihat bahwa Model-View-Controller disimpan dan subdirektori app,

jika direktori app diurai maka hasilnya sebagai berikut :

20
21

Gambar 2.16 Subdirektori app

2.1.4 Ruby on Rails

Ruby on Rails dibentuk berdasarkan susunan Model-View-Controller (MVC).

Ruby on Rails menyimpan semua MVC di app directory yang terletak di dalam

aplikasi folder root. Dalam aplikasi website, rails mengkodekan informasi dalam

permintaan URL dan menggunakan subsistem yang dinamakan routing untuk

menetapkan perintah-perintah yang akan laksanakan untuk memenuhi permintaan

URL, perintah-perintah tersebut dikodekan dengan menggunakan bahasa ruby.

21
22

Gambar 2.17 Struktur url dengan Controller

Pada gambar diatas dapat dilihat bahwa aplikasi menjalankan suatu action

atau method dari controller atau class bernama controller untuk memberikan View

dari model dengan Id yang perintahkan. Tetapi pada URL, action dan id tidak

ditampilkan, hanya controller saja. Berikut adalah contoh membuat halaman index

untuk about us dengan menggunakan Ruby on rails.

C:\ruby\ujicoba\ruby script/generate controller about index


exists app/controllers/
exists app/helpers/
create app/views/about
exists test/functional/
create app/controllers/about_controller.rb
create test/functional/about_controller_test.rb
create app/helpers/about_helper.rb
create app/views/about/index.rhtml

Gambar 2.18 Transformasi data menjadi informasi

Dapat dilihat bahwa untuk membuat halaman index untuk about us saja

menggunakan MVC. URL default proses diatas adalah http://localhost:3000/about

22
23

Semua tampilan yang akan ditampilkan dibrowser berada pada direktori

View. Struktur rhtml tidak jauh berbeda dengan html, hanya saja rhtml

menggunakan beberapa perintah xml.

2.2 Sistem Basisdata

2.2.1 Data dan Informasi

Data dapat didefinisikan sebagai bahan keterangan tentang kejadian-kejadian

nyata atau fakta-fakta yang dirumuskan dalam sekelompok lambing tertentu yang

tidak acak yang menunjukan jumlah, tindakan, hal.

Informasi adalah hasil pengelolahan data sehingga menjadi bentuk yang

penting bagi penerimanya dan mempunyai kegunaan sebagai dasar dalam

pengambilan keputusan atau memberi suatu nilai. Transformasi data menjadi

informasi dapat digambarkan sebagai berikut :

Input Unit Pengolah Output

Unit Penyimpan

Gambar 2.19 Transformasi data menjadi informasi

2.2.2 Basis Data dan Sistem Basis Data

Menurut James Martin (1975), Basis Data dapat didefinisikan sebagai suatu

kumpulan data atau data yang saling berhubungan disimpan bersama-sama tanpa

23
24

bahaya atau redudansi yang tidak dibutuhkan untuk melayani satu atau lebih aplikasi

dalam suatu mode yang optimal; data yang disimpan sehingga data tersebut menjadi

suatu program-program yang berdiri sendiri sesuai dengan kegunaan data tersebut;

suatu kegunaan yang umum dan terkontrol yang digunakan untuk menambah data

baru dan memodifikasi dan mengembalikan kembali data yang ada diantara basis

data.

Sistem basis data dapat didefinisikan sebagai sekumpulan subsistem yang

terdiri atas basis data dengan para pemakai yang menggunakan basis data bersama-

sama baik itu yang merancang maupun mengelola basis data serta sistem komputer

sebagai pendukungnya.

2.2.3 Model Basis Data

Model data merupakan suatu cara untuk menjelaskan tentang data-data yang

tersimpan dalam basis data dan bagaimana hubungan antara data tersebut untuk user

secara logik.

Secara garis besar model data dapat dikelompokan dalam 3 macam, yaitu:

1. Object based data model

Merupakan himpunan data dan procedure atau relasi yang menjelaskan

hubungan logic antar data dalam suatu basis data berdasarkan pada obyek

datanya. Salah satu contoh model data jenis ini adalah :

24
25

• Entity Relationship Model merupakan suatu model data yang

dikembangkan berdasarkan obyek, yang digunakan untuk

menjelaskan hubungan antar data dalam basis data berdasarkan

suatu persepsi bahwa real world terdiri dari obyek-obyek dasar

yang mempunyai hubungan antar obyek dasar tersebut yang

dilukiskan menggunakan symbol grafis.

2. Record based data model

Merupakan suatu prosedure data yang mendasarkan pada rekaman untuk

menjelaskan kepada user tentang hubungan logic antar data dalam basis

data. Salah satu contoh model data jenis ini adalah :

• Hierarchycal Model, merupakan hubungan logik antar data dalam

basis data dalam bentuk hubungan bertingkat. Elemen

penyusunannya disebut sebagai node dapat berupa rinci data,

agregat data, atau record. Level paling tinggi dalam suatu hirarki

harus hanya terdapat satu node yaitu root. Untuk node yang lebih

rendah (child) hanya boleh memiliki 1 node yang lebih tinggi

levelnya (parent). Sedangkan parent diperbolehkan memiliki

banyak child. Sedangkan parent yang tidak memiliki child disebut

leaves.

25
26

• Network Model, merupakan hierarchycal model hanya saja

perbedaanya pada Network Model child dapat memiliki banyak

parent.

• Relational Model, merupakan hubungan logic antar data dalam

basis data dengan mempresentasikannya kedalam bentuk table-

tabel yang terdiri atas sejumlah baris yang menunjukan record dan

kolom yang menunjukan atribut tertentu.

3. Physical based data model

Merupakan model penyimpanan data dalam basis data secara teknis atau

fisik penyimpanan.

2.2.3.1 Entity Relationship Model (ER Model)

Diagram untuk menggambarkan ER Model disebut ER Diagram. Sebuah ER

Diagram tersusun atas 3 komponen utama, yaitu entitas, atribut dan relasi antar

entitas.

1. Entitas

• Merupakan objek dasar yang terlibat dalam sistem. Entitas

dinyatakan dengan symbol persegi panjang dan nama entitas sedapat

mungkin menggunakan nama yang mudah dipahami.

Contoh :

26
27

Obyek Simbol Entitas

Tipe Kamar Hotel Tipe_Kamar_Hotel

Kostumer Kostumer

Harga Tiket Harga_Tiket

Order Order

Gambar 2.20 Contoh Penggambaran Symbol Entitas

2. Atribut

Merupakan keterangan-keterangan yang terkait pada entitas yang perlu

disimpan sebagai basis data. Atribut juga berfungsi sebagai penjelas

entitas. Atribut dinyatakan dengan symbol ellips dan nama atribut harus

jelas. Atribut dihubungkan dengan entitas yang berkesesuaian dengan

sebuah garis.

Contoh:

Simbol Entitas Atribut

Nama_Kostumer, User_Id, Telp_Rumah, Telp_Hp, Password,


Kostumer

Jenis_Identitas, No_Identitas, Alamat_Kostumer.

Gambar 2.21 Tabel Atribut dari Kustomer untuk eTravell

27
28

Nama_Kostumer Password

User_Id Jenis_Identitas
Kostumer

Telp_Rumah No_Identitas

Telp_Hp Alamat_Kostumer

Gambar 2.22 Contoh Penggambaran Symbol Atribut

3. Kerelasian antar Entitas

Merupakan kejadian atau transaksi yang terjadi antar dua entitas yang

keterangannya perlu disimpan dalam basis data. Kerelasian dinyatakan

dalam symbol belah ketupat dan Kerelasian menghubungkan dua entitas.

Kerelasian antar entitas dapat dikelompokan dalam beberapa jenis, yaitu:

1. Kerelasian One-to-one

Kerelasian jenis ini terjadi jika antar dua entitas yang

berhubungan hanya memungkinkan nilai pada entitas pertama

muncul satu kali pada entitas kedua.

Gambar 2.23 Simbol Kerelasian one to one

28
29

2. Kerelasian many to one

Kerelasian yang terjadi antar dua entitas yang berhubungan

dimungkinkan nilai pada entitas pertama muncul lebih dari satu

kali pada entitas kedua.

Gambar 2.24 Simbol Kerelasian many to one

3. Kerelasian one to many

Kerelasian jenis ini terjadi jika nilai dari entitas kedua dapat

muncul lebih dari satu kali pada entitas pertama.

Gambar 2.25 Simbol Kerelasian one to many

4. Kerelasian many to many

Keralasian yang terjadi antar dua entitas yang terhubung

memungkinkan lebih dari satu kali transaksi dalam entitas

pertama dan kedua.

Gambar 2.26 Simbol Kerelasian many to many

29
30

5. Kerelasian berganda

Suatu kerelasian antar dua entitas yang memungkinkan

terjadinya dua kerelasian sekaligus diantara dua entitas tersebut.

Pinjam

Anggota _perpus Buku

Kembali

Gambar 2.27 Simbol Kerelasian Berganda

6. Kerelasian rekursif

Kerelasian ini terjadi jika sebuah entitas mempunyai kerelasian

dengan dirinya sendiri.

Mata_kuliah
Syarat

Gambar 2.28 Simbol Kerelasian rekursif

Dalam suatu relasi dikenal dengan istilah Kunci Relasi yang digunakan untuk

pengaksesan dara dari dalam relasi atau untuk menyusun kerelasian antar

relasi. Kunci relasi harus bersifat unik, kunci relasi berawal dari satu atau

30
31

gabungan atribut yang bersifat unik yang dapat digunakan untuk

mengidentifikasikan setiap record dalam relasi. Pada table di bawah ini daftar

istilah yang sering muncul dalam Model Relasi basis data.

Istilah Keterangan

Elemen data Sebuah nilai data actual.

Atribut (kolom) Sekelompok data rinci yang mempunyai arti. Setiap atribut

memiliki tipe, ukuran dan domain yang sama.

Record(baris) Sekumpulan atribut yang mempunyai hubungan terhadap objek

tertentu.

Relasi(tabel) Sekumpulan record yang sejenis

Degree Jumlah atribut dalam sebuah relasi

Cardinality Jumlah record dalam sebuah relasi

Relationship Hubungan antar relasi

Candidate Key Satu atau gabungan atribut yang bersifat unik yang dapat

digunakan untuk mengidentifikasikan record dalam relasi

Primary Key Bagian Candidate Key yang dipilih sebagai kunci utama dalam

relasi.

Alternate Key Bagian dari Candidate Key yang tidak dipilih sebagai kunci

utama dalam relasi.

Foreign Key Satu atau gabungan atribut yamg menjadi Primary Key dalam

relasi lain yang mempunyai hubungan secara logik.

31
32

2.3 Sistem Informasi

Sistem adalah kumpulan dari elemen-elemen yang berinteraksi untuk

mencapai suatu tujuan tertentu (Jogiyanto, 1999). Sebuah perusahaan juga merupakan

suatu sistem. Komponen atau unsur-unsur di dalamnya seperti pemasaran, penjualan,

penelitian, pembukuan, dan personalia yang mana semuanya bekerja sama untuk

mencapai keuntungan baik bagi para pekerjanya maupun bagi pemilik perusahaan.

Suatu sistem mempunyai karakteristik atau sifat-sifat tertentu, yaitu

mempunyai komponen-komponen(components), batas sistem (boundary), lingkungan

luar sistem (environment), penghubung (interface), masukkan (input), keluaran

(output), pengolah (proses) dan sasaran (objectives) atau tujuan (goal).

1. Batas sistem

Batas sistem (boundary) merupakan daerah yang membatasi antara suatu

sistem dengan sistem yang lainnya atau dengan lingkungan luarnya. Batas

sistem itu memungkinkan suatu sistem dipandang sebagai satu kesatuan.

Batas suatu sistem menunjukkan ruang lingkup (scope) dari sistem

tersebut.

2. Lingkungan Luar Sistem

Lingkungan luar (environment) dari suatu sistem adalah apapun diluar

batas dari sistem yang mempengaruhi operasi sistem.

3. Penghubung Sistem.

32
33

Penghubung (interface) merupakan media penghubung antara satu

subsistem dengan subsistem lainnya. Melalui penghubung ini

memungkinkan sumber-sumber daya mengalir dari satu subsistem ke

subsistem lainnya.

4. Masukkan Sistem

Masukan (input) adalah energi yang dimasukkan ke dalam sistem.

Masukan dapat berupa masukan perawatan (maintenance input) dan

masukan sinyal (signal input) agar sistem tersebut dapat beroperasi.

5. Keluaran Sistem

Keluaran (output) adalah hasil dari energi yang diolah dan diklasifikasikan

menjadi keluaran yang berguna. Keluaran dapat merupakan masukan

untuk subsistem yang lain.

6. Pengolah Sistem

Bagian pengolah sistem ini merupakan bagian yang akan merubah

masukkan menjadi keluaran.

7. Sasaran Sistem

Suatu sistem pasti mempunyai tujuan (goal) atau sasaran (objective). Jika

suatu sistem tidak mempunyai sasaran, maka operasi sistem tidak akan

ada gunanya. Sasaran dari sistem sangat menentukan sekali masukan yang

dibutuhkan sistem dan keluaran yang akan dihasilkan sistem.

33
BAB III

ANALISIS DAN PERANCANGAN SISTEM

3.1 ANALISIS SISTEM

3.1.1 Gambaran Umum Sistem yang Lama

Biro wisata dan perjalanan adalah badan usaha yang bergerak dibidang jasa

penyedia tiket untuk perjalanan menggunakan mobil travel atau pesawat terbang dan

kamar hotel yang bekerja sama dengan beberapa instansi seperti maskapai

penerbangan dan hotel-hotel berbintang. Dalam hal ini biro jasa adalah perantara bagi

pelanggan untuk memesan tiket atau kamar hotel. Beberapa biro perjalanan dan

wisata telah dilengkapi dengan sistem online untuk melakukan pemesanan langsung

terhadap tiket atau kamar hotel yang dipesan pelanggan, melalui masing-masing

sistem online yang diberikan oleh perusahaan rekanan..

Berikut adalah proses bisnis yang dilakukan oleh perusahaan biro wisata dan

perjalanan sebelum sistem baru diterapkan:

1. Proses Bisnis Pemesanan Tiket Pesawat

Pemesanan tiket pesawat dilakukan oleh pelanggan di kantor biro perjalanan

dan wisata. Sebelum melakukan pencarian status tiket, karyawan biro

perjalanan menanyakan kepada pelanggan informasi berupa kota tujuan,

tanggal keberangkatan, jumlah penumpang dan jam keberangkatan.

Informasi yang diperoleh kemudian dimasukan ke masing-masing sistem


35

online dari maskapai penerbangan yang bekerja sama dengan kantor biro

jasa. Informasi yang dihasilkan dari hasil pencarian adalah berupa daftar

jam penerbangan pada tanggal yang diminta, sisa tiket yang tersedia serta

harga tiket. Informasi tersebut kemudian disampaikan kepada pelanggan.

Kemudian pelanggan menyatakan persetujuan pemesanan pada jam yang

diinginkan sesuai dengan ketersediaan tiket dan maskapai yang diinginkan.

Karyawan akan memesan pada sistem online maskapai yang sesuai dengan

permintaan pelanggan. Pemesanan memerlukan nama penumpang sesuai

dengan kartu identitas pelanggan. Setelah proses pemesanan terhadap sistem

selesai, karyawan menerima pembayaran secara tunai dari pelanggan, dan

karyawan akan mencetak atau menulis tiket pesawat yang kemudian

diserahkan kepada pelanggan. Jika tidak ada tiket yang tersedia maka

pelanggan akan mencari informasi pada biro perjalanan yang lain.

2. Proses Bisnis Pemesanan Tiket Mobil Travel

Untuk memesan tiket mobil travel atau tiket mobil untuk perjalanan jauh

dapat dilakukan dengan 2 cara yaitu melalui telepon atau dengan

mendatangi kantor biro perjalanan. Untuk pemesanan melalui telepon,

pelanggan menghubungi nomor telepon kantor perjalanan untuk

menanyakan status tiket mobil travel berdasarkan kota tujuan dan tanggal

keberangkatan serta jumlah penumpang. Jika tersedia maka karyawan

35
36

kantor perjalanan akan mencatat pemesanan tiket pada buku berdasarkan

kota tujuan, tanggal keberangkatan, serta informasi pelanggan seperti nama

pelanggan, nomor tempat duduk, dan alamat penjemputan. Pembayaran

dapat dilakukan pada saat penjemputan. Untuk pemesanan langsung,

pelanggan memberikan informasi kota tujuan, jumlah penumpang, dan

tanggal keberangkatan, jika masih tersedia maka tempat nomor tempat

duduk akan ditentukan, serta pelanggan langsung melakukan pembayaran

tunai dan mendapatkan tiketnya.

3. Proses Bisnis Pemesanan Kamar Hotel.

Pada umumnya, hanya beberapa birp perjalanan dan wisata mempunyai

sistem online untuk pemesanan kamar hotel. Untuk memesan kamar hotel

melalui biro perjalanan dan wisata, pelanggan pada diberikan daftar brosur

dari beberapa hotel serta daftar harga dari masing-masing tipe kamar per

malam. Jika pelanggan telah menentukan tipe kamar yang diinginkan

beserta hotelnya, karyawan dari biro perjalanan akan memesan kamar hotel

melalui sistem online dari hotel yang dipesan, atau menghubungi hotel

melalui telepon untuk melakukan pemesanan. Pada saat pemesanan kamar

hotel, informasi nama, alamat, nomor identitas dicatat pada sistem online.

Setelah pembayaran diterima secara tunai maka pelanggan akan menerima

36
37

kode voucher hotel pada sebuah kertas beserta faktur pembayaran, dan

informasi nomor kamar hotel.

4. Proses Pembatalan Tiket atau Kamar Hotel.

Untuk pembatalan tiket dilakukan beberapa cara sebegai berikut : untuk

tiket pesawat pelanggan dapat datang langsung ke kantor penjualan tiket

resmi dari maskapai dibandara atau ke kantor biro perjalanan dari pelanggan

membeli tiket. Untuk pembatalan tiket pesawat maka pelanggan akan

mendapatkan pemotongan dari nilai nominal pembelian berdasarkan aturan

dari masing-masing maskapai, dan ada waktu tertentu uang tidak bisa

dicairkan, seperti pada hari keberangkatan.

Untuk pembatalan tiket mobil travel, jika pemesanan menggunakan telepon

dan belum melakukan pembayaran, pembatalan tidak dikenakan potongan

biaya. Sedangkan jika pelanggan telah memegang tiket maka pembatalan

akan dikenakan biaya 30% dari nila nominal harga tiket, pada hari

keberangkatan pelanggan masih dapat melakukan pembatalan.

Untuk pembatalan kamar hotel, pelanggan dapat membatalkan pemesanan

melalui kantor perjalanan dan wisata tempat tiket dibeli atau datang

langsung ke hotel yang bersangkutan. Ada beberapa hotel yang tidak bisa

dibatalkan untuk voucher hotel yang sudah dipesan, dan jika bisa dibatalkan

37
38

maka akan dikenakan potongan harga sesuai dengan aturan dari masing-

masing hotel.

Permasalahan yang timbul dari sistem yang sudah ada adalah sistem online

yang disediakan oleh perusahaan rekanan tidak dapat diakses oleh pelanggan,

sehingga untuk mendapatkan informasi perjalanan dan wisata pelanggan harus

terlebih dahulu mencari kantor perjalanan dan wisata. Sistem online hanya dapat

diakses oleh karyawan kantor perjalanan, jika karyawan ingin menambahkan fasilitas

tambahan pada sistem online harus menunggu dari perusahaan rekanan untuk

melalukan modifikasi system. Laporan transaksi juga terlihat tidak terorganisasi

dengan baik, banyaknya sistem online yang digunakan membuat laporan cetak

transaksi mudah hilang atau tercecer.

3.1.2 Gambaran Umum Sistem yang Akan Dibuat

Gambaran sistem yang akan dibuat adalah dengan menciptakan aplikasi yang

terhubung dengan internet untuk memudahkan proses bisnis pelanggan dalam

memesan tiket pesawat, mobil travel dan kamar hotel, dapat mengorganisasi transaksi

pembelian, pembayaran dan pembatalan serta laporan transaksi berdasarkan periode

waktu. Agar aplikasi tepat sasaran maka perlu dijelaskan berdasarkan kebutuhan user

sebagai factor terciptanya aplikasi ini.

Aplikasi yang akan dibentuk terdapat beberapa level user, yaitu :

38
39

1. Pelanggan atau Konsumen

a) User Pelanggan memiliki kebutuhan untuk mengakses informasi

seperti jadwal keberangkatan pesawat dan mobil travel, daftar harga

dan sisa tiket yang tersedia, selain informasi mengenai biro wisata

dan perjalanan.

b) User pelanggan dapat melakukan pemesanan tiket pesawat, tiket

mobil travel dan kamar hotel dalam satu kali proses checkout. Untuk

melakukan proses pemesanan tiket pesawat secara online, pelanggan

terlebih dahulu memasukan tanggal dan kota keberangkatan, kota

tujuan, serta jumlah penumpang, kemudian system akan

memprosesnya sehingga akan menghasilkan output berupa daftar

maskapai berdasarkan urutan jam penerbangan fasilitas pemesanan

tiket. Setelah pelanggan memilih jam penerbangan dan jumlah tiket

yang dipesan, system akan memprosesnya dan menyimpannya

kedalam kotak pemesanan. Untuk memesan tiket mobil travel,

pelanggan memasukan tanggal keberangkatan dan jumlah

penumpang serta kota tujuan pada halaman pemesanan mobil travel,

kemudian system akan memprosesnya sehingga menghasilkan

informasi berupa daftar jam yang masih tersedia kursi untuk

keberangkatan mobil travel dan fasilitas untuk melakukan

pemesanan, setelah melakukan pemesanan system akan

39
40

menyimpannya kedalam kotak pemesanan. Proses yang hampir sama

juga terjadi pada pemesanan kamar hotel, untuk memesan kamar

hotel user pelanggan memasukan tanggal masuk dan keluar serta

jumlah kamar yang akan dipesan, system akan memprosesnya dan

menghasilkan informasi daftar hotel yang dapat dipesan disertai

dengan informasi fasilitas hotel dan harga. Kamar hotel yang

terpesan akan disimpan oleh system kedalam kotak pemesanan.

c) Sebelum memproses pemesanan yang terdapat pada kotak

pemesanan user pelanggan diwajibkan melakukan registrasi data

pribadi dan pembetukan login username dan password, setelah

konfirmasi diproses oleh system, user akan mendapatkan tampilan

konfirmasi pemesanan dan user profile, Jika setuju maka system

akan menyimpan informasi product yang dipesan oleh user

pelanggan.

d) Untuk pembayaran pelanggan akan dihubungi melalui telepon oleh

karyawan kantor perjalanan dan diberitahu batas akhir pembayaran.

Jika tidak ada konfirmasi pembayaran maka pemesanan akan

dibatalkan. Barnag yang terpesan namun belum dibayar tidak

otomatis terpesan pada perusahaan rekenan.

e) Pelanggan dapat melakukan pembayaran melalui transfer ATM, sms

banking ,online banking atau transfer melalui teller bank. Kemudian

40
41

konfirmasi pembayaran dapat dikirim melalui fax atau konfirmasi

melalui telepon secara langsung.

f) Setelah pembayaran dikonfirmasikan pelanggan akan mendapatkan

kode elektronik atau konfirmasi pada faktur elektronik pemesanan

yang bersangkutan pada halaman pelanggan di website.

g) Untuk melakukan pembatalan terhadap barang yang sudah dipesan,

pelanggan dapat menghubungi kantor perjalanan melalui telepon

atau email. Informasi pemotongan harga dan pembatalan dapat

diberikan atau tidak akan diberitahu melalui email atau telepon.

2. Service Agent (Petugas Pelayanan)

• Karyawan dapat membaca hasil pemesanan pelanggan dalam bentuk

faktur elektronik pada website yang berisi informasi data pribadi

pelanggan, status pemesanan, tanggal pemesanan, dan detail

pemesanan. Karyawan dapat memodifikasi jumlah tiket atau kamar

yang dipesan pada faktur elektronik yang belum terbayar pada

halaman karyawan. Karyawan juga dapat memodifikasi status

pemesanan dan menghapus atau membatalkan faktur pemesanan

pelanggan.

• Petugas pelayanan atau kantor jasa perjalanan dan wisata dapat

memasukan informasi pembayaran pelanggan kepada system,

41
42

kemudian petugas pelayanan memasukan kode voucher atau kode

kode konfirmasi pembayaran melalui system agar dapat dibaca oleh

pelanggan sebagai kode untuk check-in hotel atau tiket elektronik

mobiltravel.

• Jika petugas pelayanan menerima pembatalan tiket baik keseluruhan

atau sebagian dari jumlah barang yang dipesan, petugas akan

mengurangi kuantitas barang yang ingin dibatalkan secara online.

Sistem akan menyimpan barang yang dibatalkan dan ditampilkan

dalam faktur elektronik beserta kode pembatalan dan nominal uang

yang dikembalikan, tetapi informasi barang yang dibatalkan tidak

ditampilkan pada faktur elektronik pelanggan. Jika pelanggan akan

menambahkan tiket atau kamar dari pemesanan online yang sudah

dibayar, sistem tidak mengijinkan.

• Jika barang yang dipesan tidak terdapat pembayaran pada batas

waktu yang ditentukan oleh masing-masing ketentuan item maka

secara otomatis sistem akan menghapus atau membatalkan

pemesanan, hal ini dapat dilakukan juga secara manual oleh petugas

pelayanan. Tetapi jika setelah dibatalkan dan pelanggan melakukan

pembayaran serta barang yang dipesan masih tersedia pada sistem

online perusahaan rekanan, maka karyawan dapat merubah status

faktur pemesanan dan dapat memasukan data pembayaran terhadap

42
43

sistem serta kode voucher atau tiket elektronik. Tetapi jika barang

yang dipesan tidak tersedia, petugas pelayanan tidak perlu

melakukan tindakan terhadap sistem, pengembalian uang dapat

dilakukan melalui online banking.

• Petugas pelayanan dapat mencetak laporan berdasarkan tanggal awal

dan akhir, laporan menggandung transaksi yang terjadi pada tanggal

tersebut yang sudah terbayar atau dibatalkan pelanggan.

3. Admin

• Mempunya hak yang dilakukan oleh user Petugas Pelayanan.

• Menciptakan, baca, modifikasi dan hapus data hotel.

• Menciptakan, baca, modifikasi dan hapus data kamar.

• Menciptakan, baca, modifikasi dan hapus tipe kamar.

• Menciptakan, baca, modifikasi dan hapus data provinsi.

• Menciptakan, baca, modifikasi dan hapus data kota.

• Menciptakan, baca, modifikasi dan hapus data mobil travel.

• Menciptakan, baca, modifikasi dan hapus data penerbangan.

• Menciptakan, baca, modifikasi dan hapus data global config.

• Menciptakan, baca, modifikasi dan hapus data ATM bersama.

• Menciptakan, baca, modifikasi dan hapus data rekening.

43
44

• Menciptakan, baca, modifikasi dan hapus data tiket atau kamar

khusus yang menentukan jumlah tiket berdasarkan tanggal atau hari

serta batas akhir pemesanan dan pembayaran.

• Menciptakan, baca, modifikasi dan hapus data karyawan.

3.1.3 Requirement Analisis

Dalam tahap kebutuhan analisa dan pemodelan sistem informasi berorientasi

objek dengan UML menggunakan langkah-langkah yang diberikan Boggs(2002:62)

yang meliputi pembuatan use case diagram, diagram sequensial, dan diagram kelas

tahap analisa dan desain. Use Case diagram dari sistem ini dapat dilihat seperti pada

gambar dibawah ini:

44
45

45
46

Gambar 3.1 Use Case Diagram Pada Aplikasi Itravel

Pada gambar diatas terdapat 3 tipe pelaku dalam sistem web eTravell, yaitu

Pelanggan, Petugas Pelayanan, dan Admin. Bagi Pelanggan, website eTravell yang

akan dibentuk memberikan 2 jenis akses yaitu akses public dan akses private. Akses

public dapat berupa menampilkan informasi seperti jadwal penerbangan, fasilitas

hotel, informasi mobil travel dan informasi harga serta tiket serta melakukan

pemesanan dan disimpan kedalam Kotak Pemesanan. Untuk memproses pemesanan

di dalam Kotak Pemesanan, Pelanggan harus melakukan registrasi atau login terlebih

dahulu, sehingga untuk meyelesaikan proses pemesanan akan berada pada halaman

private (halaman pelanggan). Pada halaman private pelanggan, terdapat fasilitas atau

link untuk melihat faktur transaksi pemesanan, status pemesanan dan mengedit data

Pelanggan yang telah terbentuk. Untuk Petugas Pelayanan, seluruh aktifitasnya

berada pada halaman petugas pelayanan yang bersifat private. Pada halaman Petugas

Pelayanan, proses-proses didalamnya lebih kepada modifikasi terhadap data

pemesanan, pembayaran, pembatalan dan Pelanggan, serta menciptakan dan

membaca laporan transaksi. Admin adalah user yang memiliki hak penuh terhadap

segala akses, termasuk untuk mengases dan melakukan hak Petugas Pelayanan. Tugas

utama admin adalam melakuan modifikasi, menciptakan, menghapus dan membaca

data yang berkaitan dengan keseluruhan website eTravell.

46
47

3.1.4 Diagram Activity

Activity Diagram menggambarkan berbagai alur aktivitas secara umum dalam

sistem yang sedang dirancang, bagaimana masing-masing alur berawal, decision yang

mungkin terjadi, dan bagaimana mereka berakhir.

3.1.4.1 Diagram Activity Pelanggan

1. Pemesanan Tiket Penerbangan

Gambar 3.2 Diagram Activity Proses Memesan Tiket Penerbangan

Pada gambar 3.2 diatas, proses pemesanan tiket penerbangan dimulai

dengan menampilkan form penerbangan, diikuti dengan proses pengisian

form penerbangan oleh pelanggan yang mengisi tanggal keberangkatan

serta kota tujuan dan jumlah penumpang atau tiket. Setelah form diisi oleh

pelanggan, terjadi proses validasi data input, jika data input memenuhi

syarat maka proses dilanjutkan dengan menampilkan halaman yang berisi

daftar penerbangan. Pada daftar penerbangan akan ada banyak maskapai

penerbangan yang diurutkan berdasarkan waktu keberangkatan. Pelanggan

47
48

melakukan pemesanan berdasarkan data daftar penerbangan. Jika tiket

tersedia maka proses Kotak Pemesanan menampilkan informasi tiket yang

telah dipesan dan proses selesai, jika tidak proses kembali kepada

pengisian form penerbangan.

2. Pemesanan Kamar Hotel

Gambar 3.3 Diagram Activity Proses Memesan Kamar Hotel

Pada gambar 3.3 diatas, aktivitas pemesanan kamar hotel dimulai dengan

proses menampilkan form pencarian kamar hotel. Setelah form

ditampilkan, maka User akan mengisi form pencarian kamar hotel dan

dilajutkan dengan proses validasi input data, jika input data benar makan

proses menampilkan daftar hotel akan dilaksanakan. Setelah tampilan

daftar hotel terbentuk, maka proses dilanjutkan dengan menampilkan

detail hotel dan kamar hotel yang diinginkan, diikuti dengan proses

pemesanan kamar hotel oleh pelanggan. Apabila kamar hotel tersedia

maka detail pemesanan kamar hotel akan ditampilkan pada Kotak

48
49

Pemesanan dan proses selesai. Jika kamar tidak tersedia maka proses

kembali pada menampilkan detail hotel dan kamar.

3. Pemesanan Tiket Mobil Travel

Gambar 3.4 Diagram Activity Proses Memesan Mobil Travel

Pada gambar 3.4, aktivitas dimulai dengan menampilkan form pencarian

mobil travel, pelanggan melakukan proses pengisian form pencarian mobil

trave, jika proses validasi data input tidak salah makan proses akan

menampilkan daftar mobil travel yang dilanjutkan dengan proses

memesan tiket mobil travel. Apabila tiket tersedia maka detail pemesanan

tiket mobil travel akan ditampilkan pada Kotak pemesanan, dan jika tidak

tersedia tiket maka akan menjalankan proses pengisian form pencarian

mobil travel kembali. Proses selesai.

49
50

4. Melakukan Registrasi

Gambar 3.5 Diagram Activity Proses Registrasi

Pada gambar 3.5 proses dimulai dengan Pelanggan memasukan nilai data

pada parameter registrasi untuk nama lengkap, tanggal lahir, alamat,

nomor telepon, provinsi, kota, email, password dan konfirmasi password

sebagai kelengkapan data registrasi dan mengirim perintah ke sistem

untuk simpan data dan session login halaman pelanggan tercipta. Proses

selesai.

5. Proses Login & Logout

Gambar 3.6a Diagram Activity Proses Login

Pada gambar 3.6a, Pelanggan memulai proses dengan mengisi form login

seperti email dan password. Kemudian parameter login dan action

50
51

method dikirim ke kontroler untuk diproses. Jika login benar dan memiliki

session pemesanan maka sistem akan dilanjutkan kehalaman konfirmasi

pesanan, tetapi jika tida ada pemesanan, maka sistem akan melanjutkan ke

halaman index pelanggan. Apabila proses login gagal, maka user

pelanggan akan kembali ke halaman form login.

Gambar 3.6b Diagram Activity Proses Logout

Pada gambar 3.6b, proses dimulai dengan user mengakses link logout atau

keluar untuk diproses sebegai perintah log-out oleh Sistem. Sistem akan

menghapus session login pelanggan dan menampilkan halaman log-out

pada halaman public atau user keluar dari halaman pelanggan dan proses

selesai.

6. Menyimpan Data Kotak Pemesanan (Memproses Pemesanan)

Proses dimulai apabila Kotak Pemesanan terdapat barang pesanan. User

akan mengirim action method untuk memproses penyimpanan data Kotak

Pemesanan ke Basis data melalui Sistem. Jika Sistem mendapatkan

session kostumer maka Sistem akan menampilkan halaman konfirmasi

pemesanan dan kostumer akan menekan tombol proses kemudian Sistem

51
52

akan menampilkan halaman terimakasih dan proses selesai, jika user

membatalkan pesanan maka Sistem akan menghapus semua data

pemesanan yang ada di kotak pemesanan. Apabila Sistem tidak

menemukan session kostumer maka Sistem akan menampilkan form

registrasi dan login, jika salah satu form itu diisi dengan benar maka

Sistem akan menampilkan halaman konfirmasi.

Gambar 3.7 Diagram Activity Proses Menyimpan Kotak Pemesanan

7. Mengupdate Data Pelanggan

Gambar 3.8 Diagram Activity Proses Update Data Pelanggan

52
53

Pada Gambar 3.8 Pelanggan memulai proses dengan Sistem menampilkan

data pelanggan pada formulir data pelanggan yang telah berisikan nilai

data. User pelanggan kemudian melakukan modifikasi nilai data yang

tersedia dan menyimpan data ke Sistem. Proses selesai.

8. Melihat Detail Faktur Pemesanan

Gambar 3.9 Diagram Activity Proses Melihat Faktur Pemesanan

Pada Gambar 3.9 Sistem memanggil data faktur yang tersimpan di basis

data, kemudian proses selanjutnya sistem menampilkan Data Pemesanan

yang telah terekam dan proses selesai.

9. Proses Lupa Password & Ubah Password

Gambar 3.10a Diagram Activity Proses Lupa Password

53
54

Proses lupa password dimulai dengan cara, user pelanggan mengisi form

email pada halaman lupa password, apabila nilai parameter email terdaftar

melalui verifikasi Sistem maka Sistem akan mengirimkan email yang berisi

informasi atau alamat web untuk mengganti password. Setelah user pelanggan

mengakses alamat web untuk lupa password yang tertera pada email, maka

user pelanggan mengisi form untuk password baru, kemudian Sistem akan

menyimpannya, dilanjutkan dengan Sistem menampilkan halaman index

pelanggan dan proses selesai.

Gambar 3.10b Diagram Activity Proses Ubah Password

Pada gambar 3.10b proses dimulai dengan Sistem menampilkan form ubah

password, yang diikuti dengan pengisian form oleh user dan mengirimnya ke

Sistem. Apabila hasil validasi data input yang dilakukan oleh Sistem benar

maka Sistem akan menyimpan password baru dan mengganti password lama,

tetapi jika hasil validasi data input salah maka Sistem akan menampilkan

kembali Form Ubah Password dengan pesan kesalahan dan proses selesai.

54
55

3.1.4.2 Diagram Activity Petugas Pelayanan

1. Proses Login & Logout

User Petugas Pelayanan mengisi form login dengan memasukan nilai

parameter login username dan password, jika login benar Sistem akan

memeriksa status User, Sistem akan menampilkan halaman index admin

jika status user adalah admin, dan sistem akan menampilkan halaman

pelayanan jika status user client. Proses selesai.

Gambar 3.11a Diagram Activity Proses Login Petugas Pelayanan

Gambar 3.11b Diagram Activity Proses Login Petugas Pelayanan

Proses Log-out pada gambar 3.11b, dimulai dengan User Pelayanan

mengakses link Log-out yang mengirim perintah log-out kepada Sistem.

Dan Sistem menghapus session Petugas Pelayanan, kemudian

menampilkan halaman Login dan user keluar dari halaman pelayanan.

Proses selesai.

55
56

2. Ciptakan Data Pembayaran

Gambar 3.12 Diagram Activity Proses Menambah Data Pembayaran

Pada Gambar 3.12 Petugas Pelayanan memulai proses dengan mengisi

data pada form pembayaran, setelah data isian selesai, proses akan

dilanjutkan dengan Sistem menyimpan Data Pembayaran kedalam basis

data dan proses menambah data pembayaran berakhir.

3. Modifikasi Pemesanan Pelanggan

Gambar 3.13 Diagram Activity Proses Modifikasi Pemesanan

Proses dimulai dengan Sistem menampilkan detail pemesanan yang berisi

form pemesanan pelanggan. User Petugas Pelayanan memodifikasi nilai

data pemesanan pelanggan pada form yang tersedia. Setelah User Petugas

Pelayanan mengirimkan perintah untuk menyimpan, Sistem akan

melakukan verifikasi data input, jika data benar maka Sistem akan

56
57

menyimpan data pemesanana hasil modifikasi user pada basis data dan

proses selesai.

4. Ciptakan Data Pembatalan

Gambar 3.14 Diagram Activity Proses Pembentukan Data Pembatalan

Proses dimulai dengan Sistem menampilkan halama form detail

pemesanan dengan form pembatalan. Setelah User memasukan data

pembatalan dan mengirim ke Sistem, maka Sistem akan melakukan

validasi data masukan, jika data masukan salah maka Sistem akan

menampilkan kembali halaman Form detail pemesanan dengan pesan

kesalahan dan proses selesai.

5. Modifikasi Data Pelanggan

Gambar 3.15 Diagram Activity Proses Update Data Pelanggan

57
58

Pada Gambar 3.15 proses dimulai dengan Sistem menampilkan halaman

form data pelanggan. User petugas pelayanan kemudian melakukan

modifikasi nilai data yang tersedia. Apabila hasil modifikasi berhasil

melewati validasi nilai data maka data modifikasi akan disimpan oleh

Sistem. Proses selesai.

6. Proses Hapus Data Faktur

Gambar 3.16 Diagram Activity Proses Update Data Faktur

Proses dimulai dengan Sistem menampilkan daftar faktur pada halaman

pelayanan. Petugas pemesanan akan mengakses link hapus faktur yang

tercantum dalam daftar. Perintah user akan diproses oleh Sistem dengan

menghapus record faktur sesuai dengan permintaan User dan proses

selesai.

7. Proses Hapus Pelanggan

Gambar 3.17 Diagram Activity Proses Update Data Pelanggan

58
59

Proses dimulai dengan Sistem menampilkan daftar pelanggan pada

halaman pelayanan. Petugas pemesanan akan mengakses link hapus

pelanggan yang tercantum dalam daftar. Perintah user akan diproses oleh

Sistem dengan menghapus record pelanggan sesuai dengan permintaan

User dan proses selesai.

8. Proses Ganti Password

Gambar 3.18 Diagram Activity Proses Ubah Password

Pada gambar 3.18 proses dimulai dengan Sistem menampilkan form ubah

password, yang diikuti dengan pengisian form oleh user dan mengirimnya ke

Sistem. Apabila hasil validasi data input yang dilakukan oleh Sistem benar

maka Sistem akan menyimpan password baru dan mengganti password lama

dan proses selesai.

9. Proses Membentuk Laporan

59
60

Gambar 3.19 Diagram Activity Proses Pembentukan Laporan

Proses dimulai dengan Sistem menampilkan halaman form periodik laporan.

Kemudian User Pelayanan mengisi form periodik dan mengirimnya ke

Sistem. Jika hasil validasi input data oleh sistem memenuhi syarat makan

Sistem akan membentuk laporan PDF dan disimpan pada hosting. Proses

Selesai.

3.1.4.3 Diagram Activity Petugas Admin

1. Ciptakan Data Penerbangan

Sistem menampilkan Formulir Penerbangan baru untuk diisi oleh user

Admin, jika nilai data memenuhi syarat maka Sistem akan menyimpan

data dan proses selesai.

Gambar 3.20 Diagram Activity Ciptakan Data penerbangan

2. Update Data Penerbangan

Gambar 3.21 Diagram Activity Proses Update Data Penerbangan

60
61

Pada Gambar 3.21 Petugas Admin memulai proses dengan meminta

Sistem untuk menampilkan Data Penerbangan yang telah terekam di

sistem basis data dalam bentuk formulir, setelah data tersedia, proses

dilanjutkan dengan melakukan update terhadap data yang sudah ada. Jika

proses update data telah selesai maka sistem akan menyimpan data

terupdate kedalam basis data dan proses Update Data Penerbangan

berakhir.

3. Ciptakan Tiket atau Kamar Untuk Hari atau Tanggal Khusus

Gambar 3.22 Diagram Activity Ciptakan Tiket Hari Khusus

Sistem menampilkan halaman form hari khusus, setelah user admin

mengisi nilai data untuk hari khusus, sistem akan memverifikasi input data

dan memeriksa identikasi dari hari atau tanggal yang dimasukan, jika

memenuhi persyaratan maka data akan disimpan, jika tidak Sistem akan

menampilkan kembali form dengan pesan kesalahan.

61
62

4. Hapus Data Penerbangan

Gambar 3.23 Diagram Activity Hapus Penerbangan

Proses dimulai dengan Sistem menampilkan daftar Penerbangan. User

admin mengakses link ‘hapus’ yang tercantum pada daftar. Sistem

memproses permintaan User dengan menghapus record penerbangan yang

diminta dan Data atau record-record hari khusus yang terkait dengan

penerbangan yang dihapus. Proses Selesai.

5. Ciptakan Data Kamar

Gambar 3.24 Diagram Activity Ciptakan Data Kamar

Proses dimulai dengan Sistem menampilkan form kamar, setelah User

mengisi Form Kamar dengan Data baru, Sistem akan melakukan validasi

masukan data, apabila data masukan memenuhi syarat maka Sistem akan

menyimpan data baru, bila salah maka Sistem akan kembali menampilkan

Form Kamar dengan pesan kesalahan. Proses selesai.

62
63

6. Modifikasi Data Kamar

Gambar 3.25 Diagram Activity Modifikasi Data Kamar

Proses dimulai dengan Sistem menampilkan Form Kamar yang telah

berisi nilai data, setelah User melakukan modifikasi nilai data yang

terdapat pada form, maka data yang dikirim kembali kepada Sistem akan

divalidasi, apabila data memenuhi syarat maka Sistem akan menyimpan

data modifikas, jika tidak memenuhi syarat maka Sistem akan

menampilkan form kamar dengan pesan kesalahan.

7. Hapus Data Kamar

Gambar 3.26 Diagram Activity Hapus Data Kamar

Proses dimulai dengan Sistem menampilkan daftar kamar yang terdapat

pada sistem basis data, User mengkases link untuk menghapus kamar

yang terdapat pada daftar. Sistem merespon permintaan User untuk

menghapus record kamar yang dimaksud berserta dengan semua record

hari khusus yang terkait. Proses selesai.

63
64

8. Update Data Hotel

Gambar 3.27 Diagram Activity Proses Update Data Hotel

Pada Gambar 3.27 Petugas Pelayanan memulai proses dengan meminta

Data Hotel yang telah terekam di sistem basis data, setelah data tersedia,

proses dilanjutkan dengan melakukan update terhadap data yang sudah

ada. Jika proses update data telah selesai maka sistem akan menyimpan

data terupdate kedalam basis data dan proses Update Data Hotel berakhir.

9. Update Data Mobil Travel

Gambar 3.28 Diagram Activity Proses Update Data Mobil Travel

Pada Gambar 3.28 Sistem menampilkan Data Mobil Travel yang telah

terekam di sistem basis data yang diminta oleh user Admin, setelah data

tersedia, proses dilanjutkan dengan melakukan update nilai data yang

ditampilkan pada formulir. Jika proses update data telah selesai maka

64
65

sistem akan menyimpan data terupdate kedalam basis data dan proses

Update Data Mobil Travel berakhir.

10. Hapus Hotel

Proses dimulai dengan Sistem menampilkan daftar hotel. User admin

mengakses link ‘hapus’ yang tercantum pada daftar. Sistem memproses

permintaan User dengan menghapus record hotel yang diminta dan Data

atau record-record kamar serta hari khusus yang terkait dengan hotel yang

dihapus. Proses Selesai.

Gambar 3.29 Diagram Activity Proses Hapus Hotel

11. Hapus Mobil Travel

Proses dimulai dengan Sistem menampilkan daftar mobil travel. User

admin mengakses link ‘hapus’ yang tercantum pada daftar. Sistem

memproses permintaan User dengan menghapus record mobil travel yang

diminta dan Data atau record-record hari khusus yang terkait dengan

mobil travel yang dihapus. Proses Selesai.

Gambar 3.30 Diagram Activity Proses Hapus Mobil travel

65
66

12. Aktivitas Ciptakan, Modifikasi dan Hapus Data

Gambar 3.31 Diagram Activity Proses Create, Update dan Delete

Gambar 3.31, adalah gambar yang menjelaskan aktivitas User admin

terhadap data kota, provinsi, atm bersama, rekening, info login, dan

pengaturan umum. Apa bila user admin akan menciptakan data baru maka

user akan meminta untuk menampilkan form ciptakan data baru,

kemudian mengisi data baru dan menyimpannya. Untuk proses modifikasi

maka user meminta untuk menampilkan form data yang akan

dimodifikasi, kemudian user memodifikasi data dan menyimpannya.

Sedangkan untuk menghapus data maka user meminta untuk menampilkan

daftar data terkait dan menghapusnya dari daftar. Proses selesai.

66
67

3.1.5 Sequence Diagram

Pada diagram Sequensial akan dijelaskan berdasarkan urutan waktu mengenai

langkah-langkah kerja sama obyek-obyek didalam use case atau aliran

fungsionalitas dalam usecase.

3.1.5.1 Sequence Diagram untuk Pelanggan

1. Mencari Tiket Penerbangan dan Memesan Tiket

Gambar 3.32 Diagram Sequensial Proses Pemesanan Tiket Penerbangan

67
68

2. Mencari Tiket Mobil Travel dan Memesan Tiket

Gambar 3.33 Diagram Sequensial Proses Pemesanan Tiket Mobiltravel

3. Mencari Hotel dan Memesan Kamar Hotel

Gambar 3.34 Diagram Sequensial Proses Pemesanan Kamar Hotel

68
69

4. Registrasi, Login dan Proses Kotak Pemesanan

Gambar 3.35 Diagram Sequensial Proses Registrasi dan Kotak Pemesanan

5. Mengedit Data Pelanggan

Gambar 3.36 Diagram Sequensial Proses Edit Data Pelanggan

69
70

3.1.5.2 Sequence Diagram untuk Petugas Pelayanan

1. Modifikasi Detail Faktur

Gambar 3.37 Diagram Sequensial Proses Modifikasi Faktur Pelanggan

2. Rekam Pembayaran dan Rekam Kode Voucher

Gambar 3.38 Diagram Sequensial Proses Bentuk Data Pembayaran dan Rekam Kode Voucher

70
71

3. Bentuk Data Pembatalan

Gambar 3.39 Diagram Sequensial Proses Pembentukan Data Pembatalan

4. Modifikasi Data Pelanggan

Gambar 3.40 Diagram Sequensial Tambah Data Pembayaran

71
72

5. Edit Password

Gambar 3.41 Diagram Sequensial Proses Edit Password

6. Hapus Faktur

Gambar 3.42 Diagram Sequensial Proses Hapus Faktur

72
73

7. Hapus Pelanggan

Gambar 3.43 Diagram Sequensial Proses Hapus Pelanggan

8. Bentuk Laporan

Gambar 3.44 Diagram Sequensial Proses Bentuk Laporan PDF

73
74

9. Proses Login

Gambar 3.45 Diagram Sequensial Proses Login Petugas Pelayanan

3.1.5.3 Sequence Diagram untuk Petugas Admin

1. Proses Login Admin

Gambar 3.46 Diagram Sequensial Proses Login Petugas Admin

74
75

2. Baca, Ciptakan, Modifikasi dan Hapus Data Hotel

Gambar 3.47 Diagram Sequensial Proses Baca, Bentuk, Modifikasi & Bentuk Data Hotel

3. Baca, Ciptakan, Modifikasi dan Hapus Data Kamar

Gambar 3.48 Diagram Sequensial Proses Baca, Bentuk, Modifikasi & Bentuk Data Kamar

75
76

4. Baca, Ciptakan, Modifikasi dan Hapus Data Mobil Travel

Gambar 3.49a Diagram Sequensial Proses Baca, Bentuk, Modifikasi & Bentuk Data Mobil travel

5. Baca, Ciptakan, Modifikasi dan Hapus Data Penerbangan

Gambar 3.49b Diagram Sequensial Proses Baca, Bentuk, Modifikasi & Bentuk Data Penerbangan

76
77

6. Baca, Ciptakan, Modifikasi dan Hapus Data Global Config

Gambar 3.50 Diagram Sequensial Proses Baca, Bentuk, Modifikasi Data Global Config

7. Baca, Ciptakan, Modifikasi dan Hapus Data Hari Khusus

Gambar 3.51 Diagram Sequensial Proses Baca, Bentuk, Modifikasi Data Hari Khusus

77
78

3.1.6 Class Diagram

3.1.6.1 Class Diagram Controllers Tahap Development

Gambar 3.52 Diagram Kelas Controllers Tahap Development

78
79

3.1.6.2 Class Diagram Model Tahap Development

Gambar 3.53 Diagram Kelas Models Tahap Development

79
80

3.1.6.3 Class Diagram Schema Database Tahap Development

Gambar 3.54 Diagram Kelas Schema Database Tahap Development

80
81

3.1.6.4 Class Diagram MVC Admin

Gambar 3.55 Diagram Kelas MVC Admin

81
82

3.1.6.5 Class Diagram MVC Itravel

Gambar 3.56 Diagram Kelas MVC Itravel

82
83

3.1.6.6 Class Diagram MVC Pelanggan

Gambar 3.57 Diagram Kelas MVC Pelanggan

83
84

3.1.6.7 Class Diagram MVC Service Agent

Gambar 3.58 Diagram Kelas MVC ServiceAgent

84
85

3.1.7 DESAIN BASIS DATA

Dalam tahap ini akan dilakukan proses translasi dari class diagram yang

sudah dibuat pada gambar 3.35 menjadi Physical data model yang digambar

kedalam bentuk tabel-tabel.

Basisdata yang akan digunakan terdiri 7 tabel yaitu tabel

tab_penerbangan, tabel tab_hotel, tabel tab_mobiltravel, tabel tab_Pelanggan,

tabel tab_cs, tabel tab_pemesanan, dan tabel tab_pembayaran.

3.1.7.1 Physical Data Model

Physical Data Model yang disusun dapat dilihat pada daftar tabel berikut

ini:

1. Tabel Penerbangans

Tabel ini berisi data-data penerbangan untuk menghasilkan objek berupa

jadwal penerbangan dan tiket standard penerbangan. Field id menjadi

primary key pada tabel ini. Tabel penerbangans dapat digsunakan oleh

Pelanggan, Petugas Pelayanan.

!"#
$ !"#
% !"#
!"#
% !"#
% $ !"#
!"# &
!"#
Tabel 3.1 Physical Data Model untuk tabel penerbangans

85
86

2. Tabel Hotels

Tabel ini berisi data hotel untuk menghasilkan informasi hotel. Field id

menjadi primary key pada tabel ini. Tabel tab_hotel dapat digunakan oleh

Pelanggan, petugas pelayanan dan Admin.

$ ' !"#
!"#
!"#
$ ( !"#
( !"#
$ !"#
!"#
!"#
$ && !"#
&& !"#
&& !"#
$ && !"#
&& !"#
&& !"#

Tabel 3.2 Physical Data Model untuk tabel hotels

3. Tabel Mobiltravels

Tabel ini berisi data mobil travel agar menghasilkan informasi untuk

mendukung pemesanan mobil travel. Field id menjadi primary key pada

tabel ini. Tabel tab_mobiltravel dapat digunakan oleh Pelanggan, Admin

dan Petugas Pelayanan.

86
87

$ !"#
% !"#
!"#
% $ !"# '
% !"#
!"# &
$ ( !"#

Tabel 3.3 Physical Data Model untuk tabel Mobiltravel s

4. Tabel Kamars

Tabel ini berisi data Kamar Hotel yang akan digunakan dalam pemesanan

kamar hotel oleh pelanggan, sedangkan oleh user petugas pelayanan table

kamar digunakan untuk menampilkan informasi kamar yang dipesan oleh

pelanggan. Tabel kamars dapat digunakan oleh Pelanggan, Admin dan

Petugas Pelayanan. Fied id digunakan sebagai primary key, sedangkan

id_hotel digunakan sebagai foreign_key

!"#
$ !"#
% $ !"# &
$ !"# &
$ ( !"#

Tabel 3.4 Physical Data Model untuk tabel kamars

87
88

5. Tabel Atm_bersamas

Tabel ini berisi data bank yang terdaftar dalam ATM bersama yang

berfungsi sebagai informasi untuk pembayaran dengan transfer antar bank.

User admin dan pelanggan dapat menggunakan data dari table ini. Field id

sebagai primary key.

$ $ !"#
$ !"#

Tabel 3.5 Physical Data Model untuk tabel atm_bersamas

6. Tabel barang_terpesans

Tabel ini berisi data sementara mengenai data item berada di Kotak

Pemesanan, sebagai bagian dalam menghitung persediaan barang. Data pada

table barang_terpesans hanya digunakan pada saat peoses pemesanan yang

dilakukan oleh pelanggan dan juga digunakan oleh user petugas pelayanan

untuk sebagai bagian dari proses penghitungan persediaan barang untuk

proses update detail faktur pemesanan.

!"#
!"#
% !"#
!"#
!"#
!"#

Tabel 3.6 Physical Data Model untuk tabel barang_terpesans

88
89

7. Tabel global_configs

Tabel ini berisi data pengaturan umum dari aplikasi website yang akan

dibentuk. Data dari table ini akan digunakan diseluruh website dan dipakai

oleh seluruh user. Tabel global_configs memiliki primary key pada field id.

% !"#
$ ( !"#
$ ) ( !"#
!"#
( !"#
& !"#
( & !"#
( !"#
( !"#
$ % $ ( !"#
!"#
!"#
&& !"#
!"#
&& !"#

Tabel 3.7 Physical Data Model untuk tabel global_configs

8. Tabel karyawans

Tabel ini data yang berkaitan dengan karyawan seperti petugas pelayanan

dan admin. Tabel karyawans mengandung data login admin dan petugas

pelayanan dengan field id sebegai primary key.

89
90

!"#
$ !"#
!"#
!"#
$ !"#
!"#
Tabel 3.8 Physical Data Model untuk tabel karyawans

9. Tabel kostumers

Tabel ini berisi data pelanggan seperti login pelanggan terhadap halaman

pemesanan dan data pribadi pelanggan. Tabel kostumers memiliki primary

key pada Field id. Selain user pelanggan, user admin dan user petugas

pelayanan memiliki hak untuk mengakses table kostumers.

$ !"#
!"#
!"#
$ !"#
!"#
!"#
!"#
$ !"#
!"#
Tabel 3.9 Physical Data Model untuk tabel kostumers

10. Tabel kotas

Tabel ini berisi daftar kota yang digunakan sebagai kota keberangkatan dan

kota tujuan. Tabel ini memiliki primary key pada Field id dan dapat diakses

oleh user pelanggan, petugas pelayanan dan admin.

90
91

$ !"#
Tabel 3.10 Physical Data Model untuk tabel kotas

11. Tabel lupa_passwords

Tabel ini berfungsi untuk menyimpan data user pelanggan yang kehilangan

password untuk konfirmasi url random yang dikirim ke email user. Hanya

User Pelanggan yang dapat menggunakan table ini. Dan field id sebagai

primary keynya.

$ !"#
$ $ !"#
!"#
$ ) !"#
$ !"#
Tabel 3.11 Physical Data Model untuk tabel kotas

12. Tabel pembatalans

Tabel ini berfungsi untuk menyimpan data pembatalan barang berdasarkan

permintaan pelanggan atau atas kejadian tertentu. Untuk melakukan

pembatalan, hanya user petugas pelayanan dan admin yang dapat

melakukannya. Tabel pembatalan memiliki primary key pada field id dan

foreign key pada field status_invoice_id untuk menghubungkan table

pembatalans dengan table status_invoices.

91
92

$ !"#
!"#
$ ( !"#
% !"#
$ !"#
!"#
$ !"#
Tabel 3.12 Physical Data Model untuk tabel pembatalans

13. Tabel pembayarans

Tabel ini berfungsi untuk mencatat pembayaran yang dilakukan oleh user

pelanggan terhadap barang pesanannya. Untuk mengakses table

pembayarans, hanya dapat dilakukan oleh user admin dan petugas

pelayanan. User admin hanya dapat membaca informasi dari table

pembayarans secara otomatis melalui tampilan detail faktur. Tabel

pembayarans memiliki foreign key pada field id.

!"#
% ) !"#
$ !"#
!"#
$ !"#
$ !"#
) !"#
$ !"#
$ !"#
Tabel 3.13 Physical Data Model untuk tabel pembayarans

92
93

14. Tabel pemesanans

Tabel ini berfungsi untuk mencatat pemesanan yang dilakukan oleh

pelanggan . Tabel pemesanan memiliki hubungan dengan table

penerbangans, mobiltravels, kamars, dan status_invoices. Sehingga table

pemesanans memiliki 4 foreign key yaitu status_invoice_id, kamar_id,

mobiltravel_id, penerbangan_id dan primary key pada field id.

$ !"#
!"#
!"#

!"#
%

$ !"#
Tabel 3.14 Physical Data Model untuk tabel pemesanans

15. Tabel provinsis

Tabel ini berfungsi untuk mencatat daftar provinsi yang akan digunakan

untuk registrasi pelanggan. Data tabel ini dapat diakses oleh user pelangga,

admin dan petugas pelayanan. Tabel provinsis memiliki primary key pada

field id.

!"#
Tabel 3.15 Physical Data Model untuk tabel provinsis

93
94

16. Tabel rekenings

Tabel ini berfungsi untuk menyimpan data rekening perusahaan untuk

pembayaran yang akan ditampilkan pada halaman pelanggan. Data table

rekening dapat dimodifikasi oleh admin, dan dapat dibaca oleh petugas

pelayanan dan pelangga. Tabel rekenings memiliki primary key pada field

id.

$ !"#
$ !"#
$ !"#
$ !"#
!"#
!"#
Tabe 3.l6 Physical Data Model untuk tabel rekenings

17. Tabel sessions

Tabel ini berfungsi untuk menyimpan semua sesi atau session yang

dilakukan oleh semua user. Pada umumnya data table sesi digunakan untuk

menyimpan sesi login dari masing-masing user. Tabel sessions memiliki

primary key pada field id dan foreign key pada session_id dan updated_at

yang berguna sebagai index session.

* +,*
!"# -
. ( !"#
!"# -
Tabe 3.l7 Physical Data Model untuk tabel sessions

94
95

18. Tabel status_invoices

Tabel ini berfungsi untuk menyimpan informasi utama faktur pemesanan

untuk mempermudah pencarian pemesanan dan sebagai index dari semua

pesanan. Data table status_invoices dapat dimodifikasi oleh admin dan

petugas pelayanan sedangkan untuk pelanggan hanya dapat membaca data.

Tabel status_invoices memiliki primery key pada field id.

+,*
$ !"#
!"#
$ !"#
) !"#
$ !"#
$ !"#
Tabe 3.l8 Physical Data Model untuk tabel status_invoices

19. Tabel tanggal_barangs

Tabel ini berfungsi untuk menyimpan informasi tiket pemerbangan, mobil

travel atau kamar hotel pada hari terntetu dan tanggal tertentu. Data Tabel

tanggal_barangs dapat dimodifikasi oleh admin. Sedangkan user pelanggan

dan petugas pelayanan hanya dapat membaca data.

95
96

!"#
!"#
$ !"#
!"#
% !"#
!"#
) ( !"#
!"#
!"#
/ !"#
0 !"#
Tabe 3.l9 Physical Data Model untuk tabel tanggal_barangs

20. Tabel tipe_kamars

Tabel ini berfungsi untuk menyimpan tipe kamar atau jenis kamar yang

akan dimasukan sebagai criteria kamar dari masing-masing hotel. User

admin bertugas melakukan modifikasi data dari tabel tipe_kamars,

sedangkan petugas pelayanan dan pelanggan hanya dapat membaca data.

Tabel tipe kamars memiliki primary key pada field id.

$
Tabe 3.20 Physical Data Model untuk tabel tipe_kamars

21. Tabel schema_info

Tabel ini terbentuk secara otomatis pada saat user admin menjalankan

migration yang berfungsi untuk mencatat versi skema table.

96
97

!"#
Tabe 3.21 Physical Data Model untuk tabel schema_info

22. Tabel plugin_schema_info

Tabel ini terbentuk secara otomatis pada saat user admin menjalankan

migration yang berfungsi untuk mencatat plugin yang berkaitan dengan

database.

!"#
!"#
Tabe 3.22 Physical Data Model untuk tabel plugin_schema_info

3.2 INTERFACE INPUT/OUTPUT

3.2.1 Halaman Utama

Gambar 359 Tampilan pada halaman utama (\app\views\public\index.rhtml)

97
98

3.2.2 Halaman Mencari Data Penerbangan

Gambar 3.60 Tampilan Melihat Data Penerbangan (\app\views\penerbangan\index.rhtml)

3.2.3 Halaman Menampilkan Jadwal Penerbangan

Gambar 3.61 Halaman Jadwal Penerbangan (\app\views\penerbangan\jdwTerbang.rhtml)

98
99

3.2.4 Daftar Menu Header

Gambar 3.62 Isi menu pada header menu.

3.2.5 Halaman Melihat Data Hotel

Gambar 3.63 Halaman Cari Data Hotel (\app\views\hotel\index.rhtml)

99
100

3.2.6 Halaman Menampilkan Data Hotel

Gambar 3.64 Halaman tampilkan daftar hotel (\app\views\hotel\daftar.rhtml)

3.2.7 Halaman Mencari Data Mobil Travel

Gambar 3.65 Halaman Cari Data Mobil Travel (\app\views\MobillTravel\index.rhtml)

100
101

3.2.8 Halaman Menampilkan Data Mobil Travel

Gambar 3.66 Halaman Tampil Data Mobil Travel (\app\views\MobillTravel\denah.rhtml)

3.2.9 Halaman Registrasi

Gambar 3.67 Halaman Tampil Form Registrasi (\app\views\Pelanggan\tambah.rhtml)

101
102

3.2.10 Halaman Pemesanan Tiket Pesawat

Gambar 3.68 Halaman Form Pemesanan Pesawat (\app\views\pemesanan\pesawat.rhtml)

3.2.11 Halaman Pemesanan Kamar Hotel

Gambar 3.69 form pemesanan Kamar Hotel (\app\views\pemesanan\hotel.rhtml)

102
103

3.2.12 Halaman Pemesanan Tiket Travel

Gambar 3.70 Form pemesanan Tiket Travel (\app\views\pemesanan\mobil.rhtml)

3.2.13 Halaman Edit Data Pelanggan

Gambar 3.71 Form edit data Pelanggan (\app\views\Pelanggan\edit.rhtml)

103
104

3.2.14 Halaman Login

Gambar 3.72 Halaman Login untuk Pelanggan dan CS (\app\views\Pelanggan\login.rhtml)

3.2.15 Petugas Pelayanan Area

Gambar 3.73 Halaman Login untuk Pelanggan dan CS (\app\views\Pelanggan\login.rhtml)

104
105

3.2.16 Halaman Data Penerbangan

Gambar 3.74 Halaman Data Penerbangan (\app\views\penerbangan\data.rhtml)

3.2.17 Halaman Update Data Penerbangan

Gambar 3.75 Halaman Update Data Penerbangan (\app\views\penerbangan\update.rhtml)

105
106

3.2.18 Halaman Data Hotel

Gambar 3.76 Halaman Data Hotel (\app\views\hotel\data.rhtml)

3.2.19 Halaman Update Data Hotel

Gambar 3.77 Halaman Update Data Hotel (\app\views\hotel\update.rhtml)

106
107

3.2.20 Halaman Data Mobil Travel

Gambar 3.78 Halaman Data Mobil (\app\views\mobil\data.rhtml)

3.2.21 Halaman Update Data Mobil Travel

Gambar 3.79 Halaman Update Data Mobil (\app\views\mobil\update.rhtml)

107
108

3.2.22 Halaman Pembayaran

Gambar 3.80 Halaman Data Pembayaran (\app\views\pembayaran\data.rhtml)

3.2.23 Halaman Tambah Pembayaran

Gambar 3.81 Halaman Tambah Data Pembayaran (\app\views\pembayaran\tambah.rhtml)

108
109

3.2.24 Halaman Edit Pembayaran

Gambar 3.82 Halaman Edit Data Pembayaran (\app\views\pembayaran\edit.rhtml)

3.2.25 Halaman Hapus Pemesanan

Gambar 3.83 Halaman Pemesanan dan hapus Pemesanan (\app\views\pembayaran\edit.rhtml)

109
110

3.2.26 Edit Pelanggan Data

Gambar 3.84 Halaman Edit Data Pelanggan (\app\views\Pelanggan\edit.rhtml)

3.2.27 Hapus Pelanggan Data

Gambar 3.85 Halaman Edit Data Pelanggan (\app\views\Pelanggan\editbycs.rhtml)

110
111

3.2.28 Menu Pelanggan

Gambar 3.86 Halaman Login Pelanggan (\app\views\Pelanggan\index.rhtml)

111
BAB IV

IMPLEMENTASI SISTEM

4.1 KARAKTERISTIK SISTEM

Sistem ini dibangun sebagai Sistem Pemesanan Tiket untuk Pesawat, Mobil

Travel, dan Hotel dengan menggunakan fasilitas Internet (selanjutnya disebut i-

travel) yang dapat dijangkau tanpa batasan waktu dan tempat. Aplikasi Point Of

Sales (POS) Untuk Toko Handphone. Sistem i-travel ini akan menggunakan arsitektur

client-server dan mendukung penggunaan secara multi user.

Sistem ini dapat mendukung penggunaan secara multi user dikarenakan sistem

ini memungkinkan untuk diakses secara bersama-sama (concunrent access) oleh

lebih dari satu user atau pengguna, yang didukung oleh Transaction Object pada

Controller atau Transaction ActiveRecord untuk berkaitan dengan models.

Pada web i-travel terdapat 4 halaman utama yang dikategorikan sebagai

berikut : Halaman Pemesanan (Halaman Publik), Halaman Kostumer atau Pelanggan,

Halaman Pelayanan, dan Halaman Admin. Halaman Pemensanan dapat diakses oleh

siapa saja tanpa memerlukan login, sedangkan halaman-halaman yang lainya

memerlukan otentikasi melalui login. Dalam sistem i-travel berbasis web ini terdapat

3 aktor yang bertindak sebagai user, yaitu:

• Kostumer atau Pelanggan dalam sistem ini bertindak sebagai user yang

melakukan akses terhadap data hotel dan kamar, data mobil travel dan data
113

penerbangan. Pelanggan dapat melakukan pendaftaran baru data pelanggannya

dan melakuan manipulasi data pelanggan.

• Sevice Agent atau Petugas Pelayanan bertindak sebagai user yang melakukan

manupulasi dan pencatatan data pemesanan pesawat, kamar hotel, mobil travel,

pembayaran dan pembatalan (refund) serta kostumer.

• Admin bertindak sebagai user yang melakukan manipulasi data karyawan, data

hotel, data tipe kamar, data kamar, data rekening, data penerbangan, data mobil

travel, data global config, data atm bersama, data provinsi, data kota serta dapat

melakukan hak yang dilakukan Petugas Pelayanan.

4.2 KEBUTUHAN SISTEM

• Server

- Hosting (Shared/Private) terkoneksi ke web server mendukung

ruby on rails.

- Didukung dengan Mogrel Hosting atau FastCgi Hosting.

- Memiliki MySQL Server

• Client

- Komputer terkoneksi internet.

- Sistem operasi (Windows/Linux/ MacOS)

- Browser Software (Internet Explorer/Mozzila/Opera/Netscape)

113
114

4.3 USER INTERFACE

User interface ini merupakan sekumpulan cara atau implimentasi proses yang

dilakukan oleh user terhadap sistem yang direalisasikan dalam bentuk input (user

melakukan manipulasi terhadap sistem) maupun output (sistem menampilkan hasil

manipulasi yang dilakukan user).

4.3.1 Halaman utama atau Index

Gambar 4.1 User interface halaman utama

114
115

Pada halaman utama atau index dari website ini, sistem menampilkan kepada user

beberapa fasilitas menu pilihan yang diantaranya : fasiltas untuk melakukan

pencarian kamar hotel, pencarian mobil travel, tiket pemesanan pesawat.

Pada halaman index juga ditampilkan beberapa informasi berupa link-link untuk

menuju halaman terkait seperti Tentang Agen, Alamat Agen Travel, Cara Pemesanan,

Halaman Pelanggan, Pesan Mobil Travel, Pesan Tiket Pesawat, Pesan Kamar Hotel,

dan Halaman Utama. Berikut adalah script atau kode yang digunakan pada controller

dan model untuk membentuk tampilan diatas.

class ItravelController < ApplicationController


...
def index
@page_title = 'Pemesanan Agent Travel - Versi Demo'
@cari_arrival = Penerbangan.cari_kota
@dari_kota = Kota.dari_kota
@daftar_kota = Mobiltravel.cari_kota_mobiltravel
end
Kode 4.1 Itravel Controller – Def index (dibaca: define index)

Pada script 4.1 diatas terdapat beberapa pembentukan variable seperti :

@cari_arrival (dibaca: instance variabel cari_arrival) menampilkan seluruh data

value dari field “tujuan” pada tabel penerbangan yang terkait dengan keberangkatan

pesawat. @cari_arrival akan digunakan untuk drop down menu kota tujuan

penerbangan. Berikut adalah kode pada Model (ActiveRecord) Penerbangan yang

digunakan untuk menampilkan data value dari field “tujuan”.

115
116

class Penerbangan < ActiveRecord::Base


...
def self.cari_kota
find(:all, :conditions => ["tujuan NOT LIKE ?", “%yogyakarta%”]).map(&:tujuan).sort.uniq
end
...
End
Skrip 4.2 Penerbangan Active Record def self.cari_kota

Pembentukan variable lainnya pada skrip 4.1 adalah @dari_kota, untuk

menampilkan kota keberangkatan dengan mencari data value dari field “kota” yang

terdapat pada tabel kota, Perintah atau kode yang digunakan adalah sebegai berikut.

class Kota < ActiveRecord::Base


...
def self.dari_kota
find(:all, :order => "kota", :conditions => ["kota LIKE ?", “%yogyakarta%”])
end
end
Skrip 4.3 Kota Active Record def self.dari_kota

Pembentukan variable berikutnya adalah @daftar_kota pada skrip 4.1. Variable ini

digunakan untuk menampilkan kota tujuan dengan mencari data value dari field

“tujuan” di tabel mobiltravel, Perintah atau kode yang digunakan adalah sebegai

berikut.

class Mobiltravel < ActiveRecord::Base


...
def self.cari_kota_mobiltravel
find(:all).map(&:tujuan).sort.uniq
end
...
End
Skrip 4.4 Mobiltravel Active Record def self. cari_kota_mobiltravel

116
117

Pada Application Controller terdapat perintah untuk menampilkan informasi umum

perusahaan maupun informasi meta data website seperti kata kunci pencarian,

deskripsi website, dan judul website. Berikut kode yang digunakan.

class ApplicationController < ActionController::Base


...
def konfigurasi_web
@cari_config = GlobalConfig.find(:all, :conditions => ["id = ?", 1])
@website = @cari_config[0]
end
...
end
Skrip 4.5 ApplicationController – Def konfigurasi_web

Untuk logo yang terdapat pada banner maupu pada index dan halaman selanjutnya
disimpan dalam database, berikut adalah kode untuk menampilkan gambar yang
tersimpan didalam database (tabel global_configs).

class TampilGambarController < ApplicationController


...
def logo
@configuration = GlobalConfig.find(1)
send_data(@configuration.logo_utama, :type => @configuration.tipe_gambar, :disposition =>
"inline")
end

def banner
@configuration = GlobalConfig.find(1)
send_data(@configuration.banner, :type => @configuration.tipe_banner, :disposition => "inline")
end
...
end
Skrip 4.6 TampilGambarController – Def logo dan def banner

117
118

4.3.2 User Interface Proses Pencarian Kamar Hotel

Gambar 4.2 User Interface – Fasilitas untuk pencarian kamar hotel

Pada menu pencarian kamar hotel, user memasukan pilihan berupa parameter

tanggal masuk, parameter tanggal keluar, dan parameter jumlah kamar, serta

parameter action yang kemudian akan diproses di Itravel Controller. Berikut

kode yang digunakan untuk memproses parameter-parameter sehingga

menghasilkan output seperti gambar 4.3

class ItravelController < ApplicationController


...
def hotel

...
if params[:tipe_hotel]
params[:id] = params[:tipe_hotel].to_i
end
@tampilkan_hotel = Hotel.cari_hotel_utk_listing(params[:id])

if params[:do] == "cari" #pencarian ke seluruh hotel berdasarkan tanggal

if params[:tgl_msk] && params[:tgl_klr]


@check_in = params[:tgl_msk].to_date
@check_out = params[:tgl_klr].to_date
@jml_kamar = params[:i_kamar]
else

if params[:date1][:date_column].size > 1 && params[:date2][:date_column].size > 1


@check_in = params[:date1][:date_column].to_date

118
119

@check_out = params[:date2][:date_column].to_date
@jml_kamar = params[:jml_kamar]
else
flash[:notice] = "Untuk melakukan pencarian dan pemesanan hotel, tanggal masuk dan tanggal keluar harus
diisi."
end
end

if @check_in
flash[:notice] = "Tanggal masuk atau tanggal keluar anda tidak benar,
silahkan dicoba kembali." unless @check_in > Date.today
flash[:notice] = "Tanggal masuk atau tanggal keluar anda tidak benar,
silahkan dicoba kembali." unless @check_in < @check_out

if flash[:notice]
@check_in = nil
@check_out = nil
end

end

@hotel_pages, @hotel = paginate(:hotels, :order => "bintang",


:conditions => ["bintang =?", params[:id].to_i], :per_page => 5)
@listing = true
end
...
end

end
Skrip 4.7 ItravelController – pencarian hotel

Gambar 4.3 User interface hasil pencarian kamar hotel

119
120

Output pencarian pada gambar 4.3, memiliki link pada judul hotel dan kata

“detail”, pada link tersebut mengandung parameter berupa: id, parameter

tgl_klr, tgl_msk, do dan i_kamar. Parameter-parameter tersebut akan

digunakan untuk menampilkan detail kamar yang disewakan oleh hotel yang

bersangkutan dan untuk menampilkan tabel status kamar.

Berikut adalah tampilan tabel status kamar, jika user mengklik salah satu link

nama hotel atau kata “detail” :

Gambar 4.4 User interface hasil pencarian kamar hotel

Apabila status kamar tersedia, maka tabel status kamar akan memiliki simbol

tanda centang berwarna hijau, namun jika penuh atau tidak sesuai dengan

kuantitas kamar yang dipesan maka kolom pada tanggal yang bersangkutan

120
121

akan terdapat simbol ‘x’ dengan warna merah. Berikut adalah kode yang

digunakan untuk menampilkan status kamar seperti diatas pada gambar diatas.

class ItravelController < ApplicationController


...
def hotel
...
if params[:do] == "detail"

begin
@hotel = Hotel.find(params[:id])
rescue

else
@carikamars = @hotel.kamars
@detail = params[:do]
@log_full = []
@date_full = []

if params[:tgl_msk] && params[:i_kamar]


@check_in = params[:tgl_msk].to_date
@check_out = params[:tgl_klr].to_date
@jumlah_kamar = params[:i_kamar].to_i

@pesanan_bersyarat = @carikamars.map{|a| a.pemesanans.find(:all, :conditions => ["hari_out > ?


AND hari_h <= ?", @check_in, @check_out ]) }
@item_dikotak = BarangTerpesan.cari_hotel_all(@check_in , @check_out )

if @pesanan_bersyarat[0].size > 0 || @item_dikotak.size > 0


i=0

for room in @carikamars

if @pesanan_bersyarat[i][0] != nil || @item_dikotak.size > 0

for tanggal in @check_in..@check_out


periksa_barang(room, tanggal, "#{room.id}#{room.hotel.kode_hotel}", @stock, @check_out)
if @jumlah_kamar + @jumlah_dikotak + @jml_dipesan > @stock
@date_full << tanggal
else
if @harga
@blok_harga << @harga
@harga = nil
else
@blok_harga << room.harga_kamar

121
122

end
end
end

if @date_full != nil
@log_full << @date_full
@date_full = []
end
end
i =+ i+1
end
end
end
end
end
end
Skrip 4.8 Itravel Controller – Pemeriksaan Status Kamar

Pemeriksaan status kamar dilakukan dengan memeriksa data value dari kolom

hari_h, hari_out dan jumlah_pesanan berdasarkan kamar_id pada tabel

pemesanans dan membandingkannya dengan data value dari kolom

jumlah_kamar yang terdapat pada tabel kamar berdasarkan relasi antar tabel.

4.3.3 User Interface Proses Pemesanan Kamar Hotel

Berdasarkan gambar 4.4 diatas, untuk memesan kamar hotel, user dapat

melanjutkan proses dengan menginputkan kembali tanggal masuk, tanggal

keluar dan jumlah kamar, kemudian menekan tombol “pesan hotel”. Berikut

adalah tampilan dan skrip yang digunakan untuk memproses kamar hotel

hingga tersimpan dalam kotak pemesanan.

122
123

Gambar 4.5 User interface hasil proses pemesanan kamar hotel kedalam kotak pesanan

Pada saat user menekan tombol “pesan hotel”, params action, params id

kamar, params jml_kamar dan parameter yang menandakan tanggal masuk

dan tanggal keluar dikirim ke sistem khususnya method “tambah pemesanan”

di controller itravel. Berikut adalah kode yang digunakan:

class ItravelController < ApplicationController



def tambah_pemesanan
tanggal = params[:date]
id = params[:id]

ActiveRecord::Base.transaction do

if params[:jml_kamar]
@jml_diminta = params[:jml_kamar].to_i

if params[:date0] && params[:date0b]


@check_in = params[:date0][:date_column].to_date
@check_out = params[:date0b][:date_column].to_date
else
@check_in = params[:date1][:date_column].to_date
@check_out = params[:date1b][:date_column].to_date
end

if TimeZone['Jakarta'].adjust(@check_in) <= @sekarang || @check_out < @check_in


flash[:notice] = "Maaf kamar tidak tersedia, silahkan pilih tanggal yang lain."

123
124

request.env["HTTP_REFERER"]? (redirect_to :back) : (redirect_to :action => :hotel)

else

status = "kamar_id"
@status = 1
@back = "hotel"
@product = Kamar.find(id, :lock=>true)
@kode_barang = "#{@product.id}#{@product.hotel.kode_hotel}"
@stock = @product.jumlah_kamar.to_i
end
else

end

if @check_out != nil
@harga_khusus = []
for tanggal in @check_in..@check_out-1
periksa_barang(@product, tanggal, @kode_barang, @stock, @check_out)
if @jml_diminta + @jumlah_dikotak + @jml_dipesan > @stock
@batal = true
break
else
if @harga
@harga_khusus << @harga
else
@harga_khusus << @product.harga_kamar
end
@harga = nil
end
end
else

end

if !@batal
@token_id = @request.env["HTTP_COOKIE"].delete("_skripsi_session_id=")
item_dikotak = BarangTerpesan.cari_barang(@token_id, @kode_barang, @check_in, @check_out)

if item_dikotak
item_dikotak.jumlah = item_dikotak.jumlah + @jml_diminta
item_dikotak.updated_at = Time.now
item_dikotak.update_attributes(params[:true])
else
BarangTerpesan.simpan_baru(@token_id, @kode_barang, @jml_diminta, @check_in, @check_out)
@kotakpemesanan.tambah_pesanan(@product, @check_in, @jml_diminta, @status, @check_out)
request.env["HTTP_REFERER"]? (redirect_to :back) : (redirect_to :action =>@back, :msg=>true)
end
else
request.env["HTTP_REFERER"]? (redirect_to :back) : (redirect_to :action => @back, :msg_err=>true)
end

124
125

end
end
Skrip 4.9 Itravel Controller – Proses Pemesanan Kamar Hotel

Apabila setelah melalui proses verifikasi status kamar, kamar yang dipesan

masih tersedia maka data kamar tersebut beserta tanggal masuk dan tanggal

keluar serta jumlah kamar akan dikirim ke session KotakPemesanan atau

pembetukan session KotakPemesanan baru. Kemudian data yang tersimpan

didalam session KotakPemesanan ditampilkan kepada user di menu Kotak

Pesanan seperti pada gambar 4.5 diatas.

Berikut adalah kode metod yang digunakan untuk memeriksa persediaan

kamar atau tiket:

def periksa_barang(barang, tanggal, kode, jumlah_default, hari_out)


day = tanggal.strftime("%A")
hari = @hari_indo["#{day}"]
@jumlah_dikotak = BarangTerpesan.hitung_item_dikotak(kode, tanggal, hari_out)
@jml_dipesan = barang.pemesanans.hitung_barang_sudah_dipesan(tanggal, hari_out)

if barang.tanggal_barangs.size > 0
barang_khusus = barang.tanggal_barangs.cari_tanggal(tanggal)[0]
if barang_khusus.nil?
barang_khusus = barang.tanggal_barangs.cari_hari(hari)[0]
end
end

if barang_khusus !=nil
@stock = barang_khusus.jumlah
@harga = barang_khusus.harga
else
@stock = jumlah_default
end
end
Skrip 4.10 Kode Metod periksa_barang untuk memeriksa persediaan barang tiket atau kamar

125
126

4.3.4 User Interface Pencarian Mobil Travel

Untuk melakukan pencarian status tiket mobil travel atau pemesanan mobil

travel, user dapat menggunakan 2 interface yaitu pada kotak menu mobil

travel yang terdapat di halaman index (gambar 4.1) atau menuju kehalaman

mobil travel dengan memilih menu “Pesan Mobil Travel”, pada menu sebelah

kiri. Berikut adalah menu untuk pencarian tiket mobil travel.

Gambar 4.6 Pencarian mobil travel pada halaman itravel/mobiltravel dan halaman index

Pada saat pencarian, user akan memasukan parameter kota tujuan serta tanggal

keberangkatan untuk diproses oleh ItravelController dengan method mobiltravel.

Berikut script yang digunakan untuk memproses pencarian tiket mobil travel.

class ItravelController < ApplicationController


...
def mobiltravel
@daftar_kota = Mobiltravel.cari_kota_mobiltravel

if params[:date3]

126
127

params[:date] = params[:date3]
end

if params[:cari]
if params[:date] != nil
if params[:date][:date_column].size > 1
@tgl_dicari = params[:date][:date_column].to_date
if TimeZone['Jakarta'].adjust(@tgl_dicari) < @sekarang || params[:tujuan] == "0"
flash[:notice] = "Tanggal keberangkatan sudah tidak berlaku atau kota
tujuan salah belum dipilih. Silahkan coba lagi."
@tgl_dicari = nil
else
day = @tgl_dicari.strftime("%A")
month = @tgl_dicari.strftime("%m")
@bulan_keberangkatan = @hash_bulan[month.to_i]
@hari_keberangkatan = @hari_indo["#{day}"]
@ke = params[:tujuan]
@tanggal_keberangkatan=@tgl_dicari.strftime("#{@hari_keberangkatan},%d
#{@bulan_keberangkatan} %Y")
@jadwal_mobiltravel = Mobiltravel.lihat_tiket(params[:tujuan], @hari_keberangkatan)
@sisa_kursi = []

for mobil in @jadwal_mobiltravel


@stock = mobil.jumlah_kursi
periksa_barang(mobil,@tgl_dicari,"#{mobil.id}#{mobil.kode_mobil}", @stock, @check_out)

if @jml_dipesan + params[:penumpang].to_i + @jumlah_dikotak.to_i > @stock


@jadwal_mobiltravel = @jadwal_mobiltravel - mobil.to_a
else
@sisa_kursi << mobil.jumlah_kursi - @tiket_terjual - @jumlah_dikotak.to_i
end
end
if @jadwal_mobiltravel.size < 1
@tgl_dicari = false

127
128

flash[:notice] = "Tiket Mobil Travel Menuju #{params[:tujuan]} untuk #{@tanggal_keberangkatan}


telah habis."
end
end
else
flash[:notice] = "Untuk memesan tiket mobil travel, anda harus memasukan tanggal keberangkatan."
end
end
end
end
...
end
Skrip 4.11 ItravelController – Proses menampilkan hasil pencarian mobil travel

Gambar 4.7 Tampilan Jika Pencarian Mobil Travel Berhasil

Gambar 4.8 Tampilan Jika Pencarian Tiket Mobil Travel Habis

128
129

4.3.5 User Interface Proses Pemesanan Tiket Mobil Travel

Berdasarkan gambar 4.7 diatas, user pelanggan dapat melakukan pemesanan

tiket mobil travel dengan memilih jumlah penumpang dan kemudian menekan

tombol “pesan”. Input parameter berupa id, date dan travel dikirim pada

itravel controller untuk diproses oleh methode tambah_pemesanan. Berikut

adalah tampilan jika pemesanan berhasil dan kode untuk menambah

pemesanan mobil travel :

Gambar 4.9 Tampilan Jika Pemesanan Tiket Mobil Travel Berhasil

class ItravelController < ApplicationController


...
def tambah_pemesanan
tanggal = params[:date]
id = params[:id]

ActiveRecord::Base.transaction do

if params[:travel]
status = "mobiltravel_id"
@status = 3
@back = "mobiltravel"
@product = Mobiltravel.find(params[:id],:lock => true)
@kode_barang = "#{@product.id}#{@product.kode_mobil}"
@stock = @product.jumlah_kursi.to_i
end
end

129
130

if @check_out != nil
...
else
periksa_barang(@product, @check_in, @kode_barang, @stock, @check_out)
if @jml_diminta + @jumlah_dikotak + @jml_dipesan > @stock
@batal = true
else
if @harga
@product.harga = @harga
@harga = nil
end
end
end

if !@batal
@token_id = @request.env["HTTP_COOKIE"].delete("_skripsi_session_id=")
item_dikotak = BarangTerpesan.cari_barang(@token_id, @kode_barang, @check_in, @check_out)

if item_dikotak
item_dikotak.jumlah = item_dikotak.jumlah + @jml_diminta
item_dikotak.updated_at = Time.now
item_dikotak.update_attributes(params[:true])
else
BarangTerpesan.simpan_baru(@token_id, @kode_barang, @jml_diminta, @check_in, @check_out)
end

@kotakpemesanan.tambah_pesanan(@product, @check_in, @jml_diminta, @status, @check_out,


@harga_khusus)
request.env["HTTP_REFERER"]? (redirect_to :back) : (redirect_to :action =>@back, :msg=>true)

else
request.env["HTTP_REFERER"]? (redirect_to :back) : (redirect_to :action => @back, :msg_err=>true)
end
end
end
...
end
Skrip 4.12 ItravelController – Proses Penambahan Kotak Pemesanan Tiket Mobil Travel

4.3.6 User Interface Proses Pencarian Tiket Pesawat Terbang

Pada halaman index dan halaman penerbangan dari itravel Controller terdapat

menu untuk melakukan pencarian tiket penerbangan. Untuk melakukan

pencarian tiket penerbangan user pelanggan memasukan parameter tujuan dan

130
131

date (tanggal keberangkatan), berikut adalah tampilan menu pencarian tiket

penerbangan dan kode yang digunakan untuk melakukan pencarian :

Gambar 4.10 Tampilan Menu Pencarian Tiket Pesawat

class ItravelController < ApplicationController


...
def penerbangan
@cari_kota = Penerbangan.cari_kota
@dari_kota = Kota.dari_kota

if params[:msg_err]
flash[:notice] = "Tiket pemesanan melalui website telah habis terjual. Untuk pemesanan melalui
telepon hubungi kami di #{@website.no_telp}"
end

if params[:msg]
flash[:notice] = "Tiket telah berhasil dipesan"
end

if params[:status]
@jadwal_penerbangan = Penerbangan.bentuk_jadwal(params[:status].to_s, @hari)
@jadwal = true
end

if params[:cari]

if params[:date4]
params[:date] = params[:date4]
end

if params[:date] != nil

if params[:date][:date_column].size > 1

131
132

@tgl_dicari = params[:date][:date_column].to_date
if @tgl_dicari.to_time > @sekarang && params[:tujuan] != "0"
day = @tgl_dicari.strftime("%A")
month = @tgl_dicari.strftime("%m")
@bulan_berangkat = @hash_bulan[month.to_i]
@hari_berangkat = @hari_indo["#{day}"]
@tanggal_berangkat = @tgl_dicari.strftime("#{@hari_berangkat}, %d #{@bulan_berangkat} %Y")
@jadwal_penerbangan = Penerbangan.lihat_tiket(params[:tujuan].to_s, @hari_berangkat,
@tgl_dicari)
@ke = params[:tujuan]

if @jadwal_penerbangan.size < 1
flash[:notice] = " Pada hari #{@tanggal_berangkat} , tidak ada jalur penerbangan menuju #{@ke}."
@jadwal_penerbangan = nil
else
@sisa_kursi = []
@cek_aja = []
for penerbangan in @jadwal_penerbangan

@stock = penerbangan.jumlah_tiket

periksa_barang(penerbangan,@tgl_dicari,"#{penerbangan.id}#{penerbangan.no_penerbangan}",
@stock, nil)

if @stock - (@jml_dipesan + params[:penumpang].to_i + @jumlah_dikotak) < 0


@jadwal_penerbangan = @jadwal_penerbangan - penerbangan.to_a
else
@sisa_kursi << (@stock - @jml_dipesan - @jumlah_dikotak)
if @harga
penerbangan.harga = @harga
@harga = nil
end
end

end

if @jadwal_penerbangan.size < 1
flash[:notice] = "Jumlah tiket tidak tersedia untuk penerbangan menuju #{@ke} pada hari
#{@tanggal_berangkat} ."
@jadwal_penerbangan = nil
end

end

else
flash[:notice] = "Anda tidak mengisi tanggal atau kota tujuan dengan benar silahkan periksa dan coba
kembali."
end

else

132
133

flash[:notice] = "Tanggal yang anda masukan salah."


end

end

end

if params[:id].to_i > 0
tiket_pesawat_dipesan = Pemesanan.hitung_tiket(params[:tanggal], params[:id], "penerbangan_id")

persediaan_tiket = Penerbangan.find(params[:id]).jumlah_tiket
@sisa_tiket = persediaan_tiket.to_i - tiket_pesawat_dipesan.to_i
render :partial => 'stok_tiket'
end
end
...
end
Skrip 4.13 ItravelController – Proses Pencarian Tiket Penerbangan

Gambar 4.11 Tampilan Hasil Pencarian Tiket Pesawat

133
134

4.3.7 User Interface Proses Pemesanan Tiket Pesawat

Untuk melakukan pemesanan tiket pesawat (gambar 4.11), user pelanggan

dapat menekan tombol pesan yang diikuti dengan memasukan jumlah

penumpang. Saat menekan tombol pesan parameter id (penerbangan), date

dan penumpang, dikirim ke itravel controller untuk diproses oleh metode

tambah pemesanan. Berikut tampilan, jika tiket pesawat berhasil dimasukan

kedalam kotak pesanan :

Gambar 4.12 Tampilan Kotak Pesanan Untuk Pemesanan Tiket Pesawat

class ItravelController < ApplicationController


...
def tambah_pemesanan
tanggal = params[:date]
id = params[:id]

begin
rescue
...
else
@check_in = tanggal.to_date
@jml_diminta = params[:penumpang].to_i

if params[:penumpang] &&! params[:travel]


status = "penerbangan_id"
@status = 2
@back = "penerbangan"

134
135

@product = Penerbangan.find(params[:id],:lock => true)


@kode_barang = "#{@product.id}#{@product.no_penerbangan}"
@stock = @product.jumlah_tiket.to_i
end
end

if @check_out != nil
...
else
periksa_barang(@product, @check_in, @kode_barang, @stock, @check_out)
if @jml_diminta + @jumlah_dikotak + @jml_dipesan > @stock
@batal = true
else
if @harga
@product.harga = @harga
@harga = nil
end
end
end

if !@batal
@token_id = @request.env["HTTP_COOKIE"].delete("_skripsi_session_id=")
item_dikotak = BarangTerpesan.cari_barang(@token_id, @kode_barang, @check_in, @check_out)

if item_dikotak
item_dikotak.jumlah = item_dikotak.jumlah + @jml_diminta
item_dikotak.updated_at = Time.now
item_dikotak.update_attributes(params[:true])
else
BarangTerpesan.simpan_baru(@token_id, @kode_barang, @jml_diminta, @check_in, @check_out)
end

@kotakpemesanan.tambah_pesanan(@product, @check_in, @jml_diminta, @status, @check_out,


@harga_khusus)
request.env["HTTP_REFERER"]? (redirect_to :back) : (redirect_to :action =>@back, :msg=>true)

else
request.env["HTTP_REFERER"]? (redirect_to :back) : (redirect_to :action => @back, :msg_err=>true)
end
end
end
...
end
Skrip 4.13 ItravelController – Proses Penambahan Kotak Pemesanan Tiket Penerbangan

135
136

4.3.8 User Interface Proses Registrasi Pelanggan

Dengan tersimpannya data pemesanan pelanggan pada kota pemesanan,

pelanggan dapat melakukan pemrosesan pemesanan dengan menekan link

“proses”. Link tersebut akan membawa pelanggan ke halaman

registrasi_kostumer, sehingga pelanggan baru dapat mengisi informasi

pribadinya, atau jika pelanggan sudah memiliki login, pelanggan dapat

menggunakannya untuk memproses pemesanan. Berikut kode dan tampilan

yang digunakan untuk registrasi pelanggan :

class ItravelController < ApplicationController


...
def registrasi_kostumer
@cari_provinsi = Provinsi.cari_provinsi
if @kotakpemesanan.items.empty?
request.env["HTTP_REFERER"]? (redirect_to :back) : (redirect_to home_url)
end

if check_kostumer
redirect_to(:controller => "kostumer", :action => "login")
else
@kostumer = Kostumer.new
end

if params[:kostumer]
@kostumer = Kostumer.new(params[:kostumer])
@email = @kostumer.email
@kata_sandi = @kostumer.password

if @kostumer.save
@pelanggan = Kostumer.login(@email, @kata_sandi)
session[:kostumer_id] = @pelanggan.id
redirect_to(:controller => "kostumer", :action => "login")
end
end
end
...
end
Skrip 4.14 ItravelController (def registrasi_kostumer) – Proses Penambahan Pelanggan Baru dan

filterisasi sebelum kotak pemesanan diproses.

136
137

Gambar 4.13 Tampilan registrasi pelanggan

Gambar 4.14 Tampilan registrasi pelanggan jika terjadi kesalahan

137
138

Proses registrasi akan mengirim parameter kostumer yang berisi nilai atribut

dari nama_lengkap, alamat, kota, provinsi, email, telepon_rumah, password,

dan konfirmasi_password ke Kostumer ActiveRecord melalui def registrasi_

kostumer di itravelController. Berikut adalah tampilan jika proses registrasi

atau login kostumer pada waktu akan memproses pemesanan berhasil :

Gambar 4.15 Tampilan registrasi pelanggan jika terjadi kesalahan

4.3.9 User Interface Kotak Pemesanan Diproses

Pada gambar 4.15, view user/login.rhtml menampilkan halaman konfirmasi

pemesanan beserta data pelanggan. Untuk memproses atau menyelesaikan

pemesanan maka user diwajibkan untuk menekan tombol proses. Setelah

tombol proses ditekan parameter pelanggan dan action dikirim ke kostumer

kontroller, untuk diproses oleh model atau Pemesanan ActiveRecord agar

138
139

disimpan didalam tabel-tabel pemesanan dan tabel status_invoices. Berikut

adalah tampilan kode untuk memproses kotak pemesanan menuju database.

class Pemesanan < ActiveRecord::Base

belongs_to :kamar
belongs_to :penerbangan
belongs_to :mobiltravel
belongs_to :status_invoice

...

def self.dari_kotakbarang(item, status_id)


simpan_data = self.new

if item.status < 2
simpan_data.kamar_id = item.kode_barang
else if item.status > 2
simpan_data.mobiltravel_id = item.kode_barang
else
simpan_data.penerbangan_id = item.kode_barang
end
end

simpan_data.status_invoice_id = status_id
simpan_data.jumlah_pesanan = item.jumlah
simpan_data.total_harga = item.jumlah_harga
simpan_data.hari_h = item.tgl_in
simpan_data.hari_out = item.check_out
simpan_data.save
end

def self.simpan_pemesanan(kotakpemesanan, kostumer_id, website, domain)


invoice_id = kotakpemesanan.id

if invoice_id < 0
invoice_id = -invoice_id
end

waktu_pesan = TimeZone['Jakarta'].adjust(Time.now)
total_biaya = kotakpemesanan.total_harga

faktur_id = StatusInvoice.simpan_data(invoice_id, "Menunggu Pembayaran", kostumer_id, total_biaya,


waktu_pesan)

kotakpemesanan.items.each do |item|
self.dari_kotakbarang(item, faktur_id)
end

139
140

KirimPesan.deliver_setelah_order(invoice_id, "Menunggu Pembayaran", kostumer_id, total_biaya,


website, domain)

end

...

end
Skrip 4.15 Pemesanan Active Record – Proses menyimpan barang di kotak pemesanan kedalam tabel

Pemesanans di database.

Gambar 4.16 Tampilan pemesanan dari kotak pesanan telah berhasil diproses

4.3.10 User Interface Lupa Password

Apabila user pelanggan tidak dapat melakukan login yang disebabkan oleh

tidak dapat mengingat password atau kata sandi, maka user pelanggan dapat

menggunakan fasilitas lupa password, seperti pada tampilan dibawah ini :

140
141

Gambar 4.17 Tampilan halaman lupa password

Gambar 4.18 Tampilan pesan error setelah validasi email pada halaman lupa password

Untuk mengembalikan password user yang hilang atau terlupakan diperlukan email

pelanggan yang digunakan pada saat melakukan registrasi. Parameter email dan

action akan dikirim ke itravel kontroller, setelah pelanggan menekan tombol “kirim

password”. Berikut adalah kode yang digunakan untuk melakukan validasi email

141
142

pelanggan yang terdaftar dan pengiriman surat pemberitahuan menggunakan action

mailer.

class ItravelController < ApplicationController


before_filter :reset_notice
before_filter :cari_pesanan, :except => :hapus_pesanan
before_filter :buat_tanggal
...
def lupa_pass
if params[:email]
pelanggan = Kostumer.find_by_email(params[:email])
if pelanggan
angka_random = Kostumer.find(:all).id
if angka_random < 1
angka_random = -angka_random
end
kunci_rahasia = Digest::SHA1.hexdigest((object_id + rand(255)).to_s)
nama_web = @request.env["SERVER_NAME"]
if LupaPassword.simpan_info_link(pelanggan, kunci_rahasia, angka_random)
KirimPesan.deliver_lupa_password(pelanggan, kunci_rahasia, nama_web, angka_random,
@website)
@pesan = "Kami sudah mengirim pesan ke email anda mengenai cara mengganti password anda."
else
flash[:notice] = "GAGAL"
end

else
flash[:notice] = "Maaf email anda tidak terdaftar, silahkan coba kembali atau
hubungi petugas pelayanan kami melalui telp."

end
end
end
...
end
Skrip 4.16 ItravelController (def lupa_pass) – Proses verifikasi email pelanggan dan pemanggilan

perintah pengiriman email.

class KirimPesan < ActionMailer::Base

def lupa_password(pelanggan, kunci_rahasia, domain, token, website)

recipients pelanggan.nama_dan_email
from "Demo Skripsi <skripsi.itravel@tentang.travel.net>"
subject "Cara Mengembalikan Password Anda"
body :website => website,

142
143

:web_kami => domain,


:nama_pelanggan => pelanggan.nama_lengkap,
:url_lupa_password => "http://#{domain}/kostumer/lupa_pass/#{token}/#{kunci_rahasia}"

end
...
end
Skrip 4.17 ActionMailer Kelas KirimPesan (def lupa_password) – Proses pembentukan data atau

informasi pengirim.

Jika email pelanggan terdaftar didalam basisdata dari aplikasi web itravel,

maka actionmailer akan mengirim informasi ke email pelanggan, berikut

adalah tampilan jika informasi lupa password berhasil terkirim.

Gambar 4.19a Halaman lupa password setelah mengirim informasi ke email pelanggan

Gambar 4.19b Contoh tampilan email pemberitahuan pada email pelanggan.

143
144

Url yang terdapat pada email pelanggan seperti berikut

http://localhost/kostumer/lupa_pass/38003360/ba74221c29c93c7b04aa195a7d2ef1738ee6eb8

Memiliki data parameter seperti action, token, dan sandi_rahasia. Pengaturan


url seperti bentuk diatas dilakukan oleh routing or maping url yang terdapat di
{RAILS_ROOT}/config/routes.rb, seperti kode dibawah ini:
ActionController::Routing::Routes.draw do |map|
map.connect '', :controller => "itravel"
...
map.lupa_password 'kostumer/lupa_pass/:token/:sandi_rahasia',
:controller => 'kostumer', :action => 'lupa_pass'
...
# Allow downloading Web Service WSDL as a file with an extension
# instead of a file named 'wsdl'
map.connect ':controller/service.wsdl', :action => 'wsdl'

# Install the default route as the lowest priority.


map.connect ':controller/:action/:id.:format'
map.connect ':controller/:action/:id'
end
Skrip 4.18 Routing URL untuk lupa password

Jika user mengklik url yang terdapat pada email yang diterima dari web aplikasi

itravel ini, maka tampilan berikutnya adalah seperti pada gambar berikut. Dan apabila

berhasil mengganti password yang hilang dengan password yang baru makan user

akan dapat mengakses langsung halaman index pelaggan.

144
145

Gambar 4.20 Tampilan pada halaman kostumer lupa_password, setelah meng-click url yang

terdapat pada email pelanggan.

4.3.11 User Interface Proses Login Pelanggan

Pada aplikasi i-travel yang telah dibentuk, user pelanggan memiliki halaman

khusus yang berguna untuk menyimpan informasi transaksi sebelumnya dan

informasi pribadi pelanggan. Untuk masuk atau login ke halaman pelanggan,

user harus melakukan proses login terlebih dahulu seperti gambar berikut:

Gambar 4.21 Tampilan pada halaman kostumer/login, untuk user pelanggan.

145
146

Gambar 4.22 Tampilan pada halaman kostumer/login, proses login pelanggan gagal

Proses login dilakukan oleh kontroler kostumer dan method login. Pada

proses ini diperlukan parameter seperti email, password dan action. Berikut

adalah kode yang digunakan untuk melakukan verifikasi login.

require 'digest/sha1'

class Kostumer < ActiveRecord::Base


has_many :pemesanans
has_many :status_invoices
has_many :lupa_passwords
attr_accessor :konfirmasi_password, :password_lama

def self.login(email, password)


kostumer = self.find_by_email(email)
if kostumer
expected_password = encrypted_password(password, kostumer.salt)
if kostumer.kata_sandi != expected_password
kostumer = nil
end
end
kostumer
end

...

private

def validate
if password != konfirmasi_password
errors.add("password", "yang anda ketik tidak sama.")

146
147

end
...
end

def self.encrypted_password(password, salt)


string_to_hash = password + "wibble" + salt
Digest::SHA1.hexdigest(string_to_hash)
end

end
Skrip 4.19 Kostumer Kontroller (def login), memproses login kostumer menuju halaman pelanggan

Gambar 4.23 Tampilan pada halaman utama pelanggan, jika login berhasil

4.3.12 User Interface Daftar Transaksi Pelanggan

User akan menerima email pemberitahuan dari aplikasi web mengenai adanya

transaksi menggunakan akun atau data pribadi user dan informasi transaksi

yang sudah dilakukan akan disimpan didalam halaman kostumer khususnya

halaman daftar transaksi. Pada halaman daftar_transaksi, menampilkan

147
148

beberapa data value dari beberapa attribute seperti kode_pemesanan,

waktu_pemesanan dan status yang terkandung pada entity status_invoices.

Berikut tampilannya :

Gambar 4.24 Tampilan pada halaman root/kostumer/daftar_transaksi

Kode yang digunakan untuk membentuk daftar faktur transaksi pelanggan

adalah seperti dibawah ini :

class KostumerController < ApplicationController


before_filter :cari_pesanan
before_filter :validasi_kostumer, :except => [:login, :logout, :lupa_pass]
before_filter :reset_notice
before_filter :buat_tanggal

def daftar_transaksi
@kostumer = Kostumer.find_by_id(session[:kostumer_id])
@daftar_transaksi = StatusInvoice.find(:all, :conditions => ["kostumer_id = ?",
session[:kostumer_id].to_i])
end
...
end
Skrip 4.20 Kostumer Kontroller (def daftar_transaksi), business logic untuk menampilkan transaksi

pelanggan

4.3.13 User Interface Detail Transaksi Pelanggan

Pada gambar 4.24 dapat dilihat bahwa daftar transaksi mengandung link pada

nomor fakturnya. Apabila user pelanggan mengklik nomor faktur maka

148
149

parameter yang terdapat dilink seperti parameter kode_pesan dan action akan

proses di kostumer kontroler pada definisi method invoice. Berikut adalah

tampilan detail transaksi.

Gambar 4.24 Tampilan pada halaman root/kostumer/invoice – detail transaksi user pelanggan

class KostumerController < ApplicationController


before_filter :cari_pesanan
before_filter :validasi_kostumer, :except => [:login, :logout, :lupa_pass]
before_filter :reset_notice
before_filter :buat_tanggal
...
def invoice
utama
ActiveRecord::Base.transaction do

begin

149
150

@invoice = StatusInvoice.find_by_kode_pemesanan(params[:kode_pesan])
@info_pembayaran = Pembayaran.cari_berdasarkan_faktur(@invoice.id)
rescue
logger.error("Mencoba untuk mengakses invalid product #{params[:id]}")
@error = ".:: ANDA TIDAK MEMILIKI PEMESANAN DENGAN NOMOR
#{params[:kode_pesan]} ::."
else

@detail_faktur = @invoice.pemesanans
@pelanggan = @invoice.kostumer
end
end
end
...
end
Skrip 4.21 Kostumer Kontroller (def invoice), kode untuk menampilkan detail faktur pemesanan

4.3.14 User Interface Modifikasi Data Pelanggan

Pada halaman pelanggan atau kostumer terdapat fasilitas untuk melakukan

modifikasi terhadap data kostumer. Data yang dapat dimodifikasi adalah nilai

atribut dari tabel kostumers, seperti nama_lengkap, tanggal_lahir, alamat,

kota, provinsi, email dan telepon_rumah. Untuk melakukan modifikasi,

kostumer diwajibkan untuk melakukan konfirmasi password terlebih dahulu.

Berikut adalah kode pada kostumer kontroller untuk melakukan modifikasi

data:

class KostumerController < ApplicationController


before_filter :cari_pesanan
before_filter :validasi_kostumer, :except => [:login, :logout, :lupa_pass]
before_filter :reset_notice
before_filter :buat_tanggal
...

def update_profile
Kostumer.transaction do
begin

150
151

@provinsi = Provinsi.cari_provinsi
@kostumers = Kostumer.find(params[:id], :lock=>true)
@kostumer = @kostumers
rescue
logger.error("Mencoba untuk mengakses invalid product #{params[:id]}")
flash[:notice] = "Product yang anda pesan salah. Silahkan Coba Kembali."
redirect_to :action => 'ubah_profile'

else

if params[:kostumers].nil?
redirect_to :action => 'ubah_profile'

else
email_lama = @kostumers.email

if email_lama != params[:kostumers][:email]
check_password_lama = Kostumer.login(email_lama, params[:kostumers][:password])
if check_password_lama
params[:kostumers][:konfirmasi_password] = params[:kostumers][:password]
@kostumers.update_attributes(params[:kostumers])
flash[:notice2] = "Data Pribadi Anda Telah Berhasil Diperbaharui."
redirect_to :action => 'ubah_profile'
else
flash[:notice] = "Password Yang Anda Masukan Tidak Sesuai."
render :action => 'ubah_profile'
end

else
check_password = Kostumer.login(params[:kostumers][:email], params[:kostumers][:password])

if check_password
params[:kostumers][:konfirmasi_password] = params[:kostumers][:password]
if @kostumers.update_attributes(params[:kostumers])
flash[:notice2] = "Data Pribadi Anda Telah Berhasil Diperbaharui."
redirect_to :action => 'ubah_profile'
else
render :action => 'ubah_profile'
end
else
flash[:notice] = "Password Yang Anda Masukan Tidak Sesuai."
render :action => 'ubah_profile'
end
end
end
end
end
end
...
end
Skrip 4.22 Kostumer Kontroller, kode untuk modifikasi data kostumer atau pelanggan

151
152

Gambar 4.25 Form Modifikasi Data Pelanggan

4.3.15 User Interface Modifikasi Password

Untuk melakukan modifikasi password dari password lama ke password baru,

user dapat melakukan dengan memasukan password lama diikuti dengan

memasukan password baru dan konformasi password baru. Berikut

tampilannya :

Gambar 4.26 Form Modifikasi Data Password Pelanggan

152
153

Berikut adalah kode yang digunakan untuk menangani pergantian password

pada controller kostumer.

class KostumerController < ApplicationController


before_filter :cari_pesanan
before_filter :validasi_kostumer, :except => [:login, :logout, :lupa_pass]
before_filter :reset_notice
before_filter :buat_tanggal
...

def ubah_password
@provinsi = Provinsi.cari_provinsi
@kostumers = Kostumer.find(session[:kostumer_id])
@kostumer = @kostumers
end

def update_password

begin
@provinsi = Provinsi.cari_provinsi
@kostumers = Kostumer.find(params[:id])
@kostumer = @kostumers
rescue
logger.error("Mencoba untuk mengakses invalid product #{params[:id]}")
flash[:notice] = "Product yang anda pesan salah. Silahkan Coba Kembali."
@kostumers = nil
render :action => 'ubah_password'
else

check_password_lama = Kostumer.login(@kostumers.email,
params[:kostumers][:password_lama])

if check_password_lama
if @kostumers.update_attributes(params[:kostumers])
flash[:notice2] = "Password Anda Telah Berhasil Diganti."
@kostumers["password_lama"] = nil
@kostumers["password"] = nil
@kostumers["konfirmasi_password"] = nil
render :action => 'ubah_password'
else
render :action => 'ubah_password'
end
else
flash[:notice] = "Password Lama Anda Salah."
render :action => 'ubah_password'
end
end

153
154

end
end
Skrip 4.23 Kostumer Kontroller, kode untuk modifikasi data password pelanggan

4.3.16 User Interface Login Karyawan

Untuk memproses pemesanan yang dilakukan oleh user pelanggan, karyawan

dari perusahaan wisata dan perjalanan dapat melakukannya melalui hamalan

karyawan yang terproteksi oleh halaman otentivikasi pelanggan, yaitu

halaman login pelanggan. Pada halama ini, user karyawan diwajibkan

memasukan nilai atribut username dan password. Berikut adalah tampilan dan

kode yang digunakan untuk memverifikasi user karyawan.

Gambar 4.27 Tampilan form login karyawan

class ServiceAgentController < ApplicationController


before_filter :reset_notice
before_filter :buat_tanggal
before_filter :validasi_karyawan, :except => [:login, :logout]
...
def login
if request.post?
karyawan = nil
karyawan = Karyawan.login(params[:username], params[:password])
if karyawan
session[:karyawan_id] = karyawan.id
session[:karyawan_nama] = karyawan.nama
session[:karyawan_status] = karyawan.status

154
155

if karyawan.status == "Admin"
session[:admin_id] = karyawan.id
redirect_to :controller => "admin", :action => :index
else
redirect_to :action => :index
end
else
flash[:notice] = "Hak akses anda ditolak, silahkan login dengan benar."
end
end
end
...
end
Skrip 4.24 Service_agent Kontroller, kode untuk menangani login karyawan.

Pada kode diatas terjadi pembentukan session untuk nilai atribut id, nama dan

status dari tabel karyawan yang melakukan login. Untuk memudahkan dalam

menampilkan nama dan status karyawan (admin atau klien) pada halaman

index service_agent. Dibawah ini adalah kode pada active record yang

digunakan untuk melakukan validasi login :

require 'digest/sha1'

class Karyawan < ActiveRecord::Base


attr_accessor :password, :konfirmasi_password, :password_lama
...
def self.login(username, password)
karyawan = self.find_by_username(username)

if karyawan
password_asli = encrypted_password(password, karyawan.salt)
if karyawan.kata_sandi != password_asli
karyawan = nil
end
end
karyawan
end

private
def bentuk_salt_baru
self.salt = self.object_id.to_s + rand.to_s
end

155
156

def self.encrypted_password(password, salt)


string_to_hash = password + "wibble" + salt
Digest::SHA1.hexdigest(string_to_hash)
end

end
Skrip 4.25 Karyawan ActiveRecord, kode untuk validasi login kostumer.

Password karyawan disimpan didalam tabel karyawan dalam bentuk enkripsi

SHA1. Jika user karyawan melakukan login dengan informasi tidak benar,

maka tampilannya adalah sebagai berikut :

Gambar 4.28 Tampilan form login karyawan jika gagal

Dan jika user karyawan berhasil melakukan login maka tampilannya adalah

sebagai berikut :

156
157

Gambar 4.29 Tampilan halaman index pada serive_agent

Pada halaman index terdapat menu pilihan seperti Arsip Pelanggan, Arsip

Pemesanan, Arsip Pembayaran, Arsip Pembatalan, Cetak Transaksi, Ganti

Password dan Keluar atau Log Out.

4.3.17 User Interface Arsip Pelanggan

Halaman arsip pelanggan mengandung informasi daftar nama pelanggan yang

telah melakukan pemesanan terhadap website itravel. Tampilan berupa tabel

yang mengandung nilai dari atribut tabel kostumer dan penghitungan jumlah

dari transaksi menggunakan relasi tabel dengan tabel status_invoice.

157
158

class ServiceAgentController < ApplicationController


before_filter :reset_notice
before_filter :buat_tanggal
before_filter :validasi_karyawan, :except => [:login, :logout]
...
def list_kostumer
if params[:cari]
if params[:cari][:cari].nil?
@daftar_kostumer = Kostumer.cari_pelanggan(params[:cari])
@kata_cari = params[:cari]
else
@daftar_kostumer = Kostumer.cari_pelanggan(params[:cari][:cari])
@kata_cari = params[:cari][:cari]
end
else
@daftar_kostumer = Kostumer.find(:all,:order => 'nama_lengkap')
end

if @daftar_kostumer.size < 1
redirect_to (:action => "index", :msg => "true", :cari => @kata_cari)
end
@daftar_kostumer_pages, @daftar_kostumers = paginate_collection @daftar_kostumer, :page =>
@params[:page]
end
...
end
Skrip 4.26 Service_agent Kontroller, kode untuk menampilkan daftar pelanggan

Pada private method terdapat paginate_collection yang bertujuan untuk

melakukan pembentukan halaman berdasarkan array dari hasil query daftar

kostumer.

158
159

Gambar 4.30 Tampilan halaman service_agent untuk action


arsip pelanggan (def list_kostumer)

4.3.18 User Interface Modifikasi Data Pelanggan

Pada gambar 4.30 diatas terdapat link atau penghubung dari Arsip pelanggan

ke halaman modifikasi pelanggan. Jika user karyawan mengklik nama dari

pelanggan, maka seluruh nilai atribut akan muncul pada halaman

edit_kostumer, kecuali nilai dari atribut kata_sandi dan salt. Untuk

menampilkan data dan modifikasi kostumer , dilakukan dengan kode berikut

ini :

class ServiceAgentController < ApplicationController


before_filter :reset_notice
before_filter :buat_tanggal
before_filter :validasi_karyawan, :except => [:login, :logout]

...

def edit_kostumer
Kostumer.transaction do

159
160

if params[:cid]
@kostumers = Kostumer.find(params[:cid], :lock=>true)
end
@provinsi = Provinsi.cari_provinsi

if params[:kostumers]

params[:kostumers][:password] = "0%8&5_2-2+8=9#2@2!2.0?0"
params[:kostumers][:konfirmasi_password] = "0%8&5_2-2+8=9#2@2!2.0?0"

if @kostumers.update_attributes(params[:kostumers])
flash[:notice2] = '<blockquote>&nbsp;&nbsp;Data Kostumer Telah Berhasil Diperbaharui.'
end
end
end
end
...
end
Skrip 4.27 Service_agent Kontroller, kode untuk modifikasi data kostumer atau pelanggan

Gambar 4.30 Tampilan halaman service_agent untuk action modifikasi pelanggan

160
161

Gambar 4.31 Tampilan halaman service_agent apabila modifikasi terjadi kesalahan

4.3.19 User Interface Arsip Pemesanan dan Edit Invoice

Halaman arsip pemesanan atau invoice_list, menampilkan nilai-nilai attribut

dari tabel status_invoices. Berikut adalah tampilan halaman dari arsip

pemesanan :

Gambar 4.32 Tampilan halaman arsip pemesanan

161
162

Faktur pemesanan yang sudah melakuan pembayaran tidak dapat dihapus.

Pada tabel arsip pemesanan menggandung link pada nomor pemesanan atau

nomor faktur dan opsi “Hapus”. Untuk link nomor pemesanan memiliki

parameter seperti action, dan fid (singkatan : faktur id). Parameter action

ditujukan untuk menjalankan metode edit_invoice pada service_agent

kontroller, sedangkan parameter fid ditujukan untuk memanggil query faktur

yang terdapat pada tabel status_invoices. Berikut adalah kode untuk

menampilkan tampilan seperti pada tabel arsip pemesanan diatas :

class ServiceAgentController < ApplicationController


...
def invoice_list
StatusInvoice.transaction do
if params[:cid]
@daftar_invoice = StatusInvoice.cari_transaksi_pelanggan(params[:cid])
else
if params[:cari]
@daftar_invoice = StatusInvoice.cari_kode_faktur(params[:cari][:cari])
if @daftar_invoice.size < 1
redirect_to (:action => "list_kostumer", :msg => "true", :cari => params[:cari][:cari])
end
else
@daftar_invoice = StatusInvoice.find(:all)
end
end
end

@daftar_invoice_pages, @daftar_invoice = paginate_collection @daftar_invoice, :page =>


@params[:page]

end
...
end
Skrip 4.28 Service_agent Kontroller, kode untuk menampilkan arsip pemesanan

162
163

Susunan Skrip 4.28 juga digunakan untuk pencarian nomor faktur, jika

perintah pemanggilan metode invoice_list mengandung parameter cari.

Seperti pada gambar 4.32, tabel cari faktur dan nama, jika pencarian faktur

tidak diketemukan maka akan dilanjutkan ke metode list_kostumer.

Gambar 4.32b Tampilan pencarian gagal, menggunakan fasilitas cari faktur & nama

Pada halaman arsip pemesanan, jika salah satu link kode faktur atau

pemesanan ditekan, maka akan dimenampilkan detail faktur pada halaman

edit_invoice. Berikut adalah kode yang digunakan untuk menampilkan detail

faktur.

def edit_invoice
ActiveRecord::Base.transaction do
begin
@invoice = StatusInvoice.find(params[:fid])
rescue
redirect_to :action => 'index'
else
@provinsi = Provinsi.cari_provinsi
@detail_invoice = @invoice.pemesanans
@go_to = "edit_invoice"
@pembayaran_info = @invoice.pembayarans[0]
@kostumers = @invoice.kostumer

if @invoice.status == "Telah Diproses"


#untuk menutup tombol pada kostumer dan status di invoice

163
164

@tutup_tombol = true
#switcher untuk menutup fields pada tabel detail invoice
@switcher = true
end

if params[:kostumers]
edit_kostumer
end

if params[:pemesanan]
update_pemesanan
end
end
end
end
Skrip 4.29 Service_agent Kontroller, kode untuk menampilkan detail faktur

Begin ... rescue ... else digunakan untuk penanganan error apa bila hasil

pencarian query tidak diketemukan makan blok rescue akan menjalankan

perintah didalamnya.

Gambar 4.33 dibawah ini, menunjukan halaman edit_invoice, sebagai bagian

dari halaman service_agent, dapat melakukan perubahan data konsumen dan

modifikasi barang yang sudah terpesan. Pada modifikasi barang tidak

terpengaruh pada quantitas barang yang terdapat di sistem web itravel, dengan

alasan penambahan jumlah barang yang melebihi persediaan barang disistem

ditangani diluar sistem.

164
165

Gambar 4.33 Tampilan halaman edit_invoice

4.3.20 User Interface Pembayaran

Pada halaman arsip pembayaran, terdapat kolom pengisian nomor pemesanan,

yang berguna untuk mencari faktur. Jika faktur diketemukan oleh sistem,

maka tampilannya aka seperti pada gambar 4.34 dan 4.35 dibawah ini. Untuk

kode pencarian dapat dilihat pada script 4.30.

165
166

Gambar 4.34a Pencarian faktur pembayaran

Gambar 4.34b Pencarian faktur gagal

Untuk melakukan proses input informasi pembayaran pelanggan, user

karyawan diwajibkan mengisi data value untuk atribut jenis_pembayaran,

nama_bank_pengirim, nama_pengirim, nominal_terbayar, dan rekening

tujuan transfer (rekening_id). Data value tersebut, dikirim kedalam kontroller

dalam bentuk parameter yang akan diproses oleh kontroller service_agent dan

pembayaran Active Record. Berikut adalah tampilan form proses pembayaran.

166
167

Gambar 4.35a Tampilan form pembayaran

Proses input kode voucher seperti pemesanan kamar hotel dan pemesanan

tiket mobil travel dapat dilakukan jika informasi pemesanan telah dimasukan

kedalam sistem. Untuk melakukan pembatalan barang, user dapat memasukan

query field berupa angka nol pada jumlah barang yang dipesan, apabila belum

melakukan pembayaran maka barang yang dipesan akan dihapus dari tabel

pemesanan.

167
168

Gambar 4.35b Tampilan pesan error pada form pembayaran

Berikut adalah kode untuk memproses pembayaran dan tampilan pembayaran

berhasil dilakukan serta pemasukan data value terhadap atribut kode_voucher.

def pembayaran

if params[:fid]
@no_invoice = params[:fid]
end

if params[:cari]
@no_invoice = params[:cari][:cari]
cari = true
end

if @no_invoice != nil
@invoice = StatusInvoice.cari_faktur(@no_invoice, cari)
@rekening = Rekening.find(:all)
end

168
169

if @invoice.nil?
if @no_invoice != nil
@pesan = "<blockquote>Nomor Pemesanan #{@no_invoice} tidak diketemukan.</blockquote>"
end
else
@go_to = "pembayaran"
@power = true
@switcher = false

if @pembayaran_info = @invoice.pembayarans[0]
@power = false
@switcher = true
end

if params[:pemesanan]
update_pemesanan
end

if @dari_pembatalan && ! @pembayaran_info


@power = false
@switcher = true
redirect_to (:fid => @fid, :action => "edit_invoice")
end

if ! @dari_pembatalan
if params[:pembayaran_info]
if @invoice.status != "Menunggu Pembayaran"

@pembayaran_info["waktu"] = TimeZone['Jakarta'].adjust(Time.now)
params[:pembayaran_info]["nominal_terbayar"] = @pembayaran_info.nominal_terbayar
@pembayaran_info["perubahan_terakhir"] = TimeZone['Jakarta'].adjust(Time.now)
if @pembayaran_info.update_attributes(params[:pembayaran_info])
flash[:notice2] = "Pembayaran untuk pemesanan nomor #{@kode_invoice} telah diproses, silahkan
masukan kode voucher.</blockquote>"
end
else
create_pembayaran
end
else
if !@pembayaran_info
@pembayaran_info = Pembayaran.new
@pesan = "<blockquote>Pemesanan ini belum melakukan pembayaran, silahkan
isi kolom dibawah ini untuk menyelesaikan pemesanan.</blockquote>"
end
end
end

@detail_pemesanan = @invoice.pemesanans
end
end

169
170

private

def create_pembayaran
@pembayaran_info = Pembayaran.new(params[:pembayaran_info])
@pembayaran_info["waktu"] = TimeZone['Jakarta'].adjust(Time.now)
@pembayaran_info["perubahan_terakhir"] = TimeZone['Jakarta'].adjust(Time.now)

if @pembayaran_info.save
StatusInvoice.update_status(@invoice,params[:true])
@switcher = true
@power = false
flash[:notice2] = "Pembayaran untuk pemesanan nomor #{@kode_invoice} telah diproses, silahkan
masukan kode voucher.</blockquote>"
end
end

Skrip 4.30 Service_agent Kontroller, kode untuk memproses informasi pembayaran di kontroller.

Gambar 4.36 Tampilan form pembayaran berhasil dan proses input kode voucher

170
171

Jika informasi pembayaran telah tersimpan didalam tabel pembayaran di

database, maka field pada nominal transfer di halaman pembayaran tidak

dapat dimodifikasi (disabled), dan pada tabel barang pemesanan hanya field

kode voucher yang dapat dimodifikasi.

4.3.21 User Interface Pembatalan

Untuk melakukan pembatalan pemesanan oleh user karyawan, dapat

dilakukan dengan memodifikasi jumlah pesanan ke angka yang lebih kecil,

dan untuk menghapus barang yang sudah terbayar, user karyawan dapat

memasukan angka nol pada field jumlah. Barang yang sudah dibatalkan akan

disimpan dalam tabel pembatalan. Berikut adalah kode yang digunakan untuk

menyimpan informasi pembatalan yang dilakukan oleh Active Recordnya.

class Pembatalan < ActiveRecord::Base


belongs_to :status_invoice
def self.simpan_data(invoice_id, data_input, pemesanan, status, harga,fee)
chars = ("A".."Z").to_a + ("0".."15").to_a
jml_dikembalikan = pemesanan.jumlah_pesanan.to_i - data_input[:jumlah_pesanan].to_i
pembatalan = Pembatalan.new
if data_input[:kode_refund].nil?
pembatalan.kode_refund = Array.new(10,'').collect{chars[rand(chars.size)]}.join
else
if data_input[:kode_refund].size < 4
pembatalan.kode_refund = Array.new(10,'').collect{chars[rand(chars.size)]}.join
end
end
pembatalan.status_invoice_id = invoice_id
pembatalan.keterangan_barang = Marshal.dump pemesanan
pembatalan.jumlah_refund = jml_dikembalikan
pembatalan.kategori = status
pembatalan.nominal_refund = jml_dikembalikan*harga.to_i*fee
pembatalan.waktu = TimeZone['Jakarta'].adjust(Time.now)

171
172

pembatalan.save
end
end
Skrip 4.31 Pembatalan ActiveRecord, kode untuk memproses informasi pembatalan ke database.

Atribut keterangan barang menyimpan data value berupa collection (hash dan

array) dari hasil query tabel pemesanan. Penggunaan Marshall.dump

menyimpan data collection ke dalam bentuk byte stream (rangkaian elemen

data yang tidak bergantung pada kode perintah/Action Script.)

Gambar 4.37 Tampilan faktur setelah proses pembatalan

172
173

Pada halaman pembatalan, user karyawan dapat melakukan modifikasi

tanggal keberangkatan atau tanggal check in dan check out, untuk tipe barang

pesanan yang sama, tetapi tidak diijinkan untuk penambahan jumlah pesanan.

4.3.22 User Interface Laporan Transaksi

Laporan transaksi merupakan laporan terhadap pembayaran dan pembatalan

berdasarkan periode tanggal. Laporan transaksi disajikan dalam bentuk file

PDF, melalui halaman laporan, user karyawan terlebih dahulu memasukan

parameter tanggal awal dan tanggal akhir (params[:date1] dan

params[:date2]). Jika hasil pencarian tanggal awal dan akhir tidak memiliki

informasi pembayaran atau pembatalan, maka laporan tidak tersedia. Kode

untuk membentuk laporan dalam jenis file pdf terdapat pada lampiran kode.

Berikut adalah tampilan dari halaman laporan.

Gambar 4.38 Tampilan halaman untuk laporan transaksi.

173
174

Gambar 4.39 Tampilan laporan transaksi dalam bentuk pdf file

4.3.23 User Interface Ganti Password

User karyawan dapat mengganti password atau kata sandi setiap saat melalui

halaman ganti_password. User menginputkan data value sebagai nilai dari

parameter password_lama, password, dan konfirmasi_password. Jika

parameter password_lama sesuai dengan password yang terdapat pada tabel

karyawan berdasarkan id pada tabel karyawan dan parameter password dan

konfirmasi_password sesuai, maka proses berhasil. Berikut adalah kode yang

digunakan untuk mengganti passwod bagi user karyawan. :

def ganti_password

begin
@karyawan = Karyawan.find(session[:karyawan_id])
rescue
logger.error("Mencoba untuk mengakses invalid id = #{params[:id]}")
flash[:notice] = "Error, harap hubungi admin."
else

174
175

if params[:npid]
check_password_lama=Karyawan.login(@karyawan.username, params[:karyawan][:password_lama])

if check_password_lama
if params[:karyawan]["password"] != params[:karyawan]["konfirmasi_password"]
@pesan = "<blockquote>Password baru dan konfirmasi password yang anda ketik tidak
sama.</blockquote>"
params[:karyawan]["password"] = nil
params[:karyawan]["konfirmasi_password"] = nil
params[:karyawan]["password_lama"] = nil
else
if @karyawan.update_attributes(params[:karyawan])
flash[:notice2] = "Password Anda Telah Berhasil Diganti."
@karyawan["password_lama"] = nil
@karyawan["password"] = nil
@karyawan["konfirmasi_password"] = nil
end
end
else
@pesan = "<blockquote>Password Lama Anda Salah atau belum terisi.</blockquote>"
end
end
end
end
Skrip 4.32 kode metode ganti_password pada kontroler service_agent

Gambar 4.40 Tampilan modifikasi password user karyawan jika berhasil

175
176

Gambar 4.41 Tampilan modifikasi password user karyawan jika gagal

4.3.24 User Interface Halaman Index Admin

Admin merupakan bagian dari karyawan, sehingga penanganan login oleh

user karyawan berstatus admin sama dengan user karyawan berstatus client,

seperti pada script 4.24. Jika user berstatus admin, maka kontroler admin

dengen metod index akan dijalankan. Berikut adalah tampilan utama halaman

admin.

Gambar 4.42 Tampilan halaman index admin

176
177

4.3.25 User Interface Pengaturan Umum pada Halaman Admin

Pengaturan umum merupakan halaman untuk memberikan data value terhadap

atribut-atribut tabel global_config, yang bertujuan sebagai informasi utama

dari website yang berupa, judul website, kata kunci pencarian, deskripsi

website, alamat perusahaan, nama perusahaan, nomor telepon, biaya

pelayanan, logo website, tentang perusahaan, informasi untuk menguhubungi

agen dan kebijaksanaan perusahaan. Berikut adalah tampilan dan kode yang

digunakan untuk proses Create, Read, Update, Destroy (CRUD) .

Gambar 4.43 Tampilan halaman pengaturan umum atau global config pada admin

def global_config
@web_config = GlobalConfig.find(:first)

if @web_config.nil?
@web_config = GlobalConfig.new
if params[:web_config]
@web_config = GlobalConfig.new(params[:web_config])
if @web_config.save
@do = "update"
flash[:notice2] = 'Data konfigurasi telah berhasil disimpan.'
else

177
178

@display = "1300px"
if params[:state] != nil
@choosed = true
end
end
else
if params[:state] != nil
@choosed = true
end
end

else
@do = "update"
if params[:do] == "update"

if request.post? && @web_config.update_attributes(params[:web_config])


flash[:notice2] = 'Konfigurasi Web telah berhasil diperbaharui.'
if params[:state] != nil
@choosed = true
end
else
if params[:state] != nil
@choosed = true
end
end

end
end
end
Skrip 4.33 kode pada admin kontroller, metode global_config, untuk bisnis logic CRUD

4.3.26 User Interface Pengaturan Gambar atau Logo

Logo utama terdiri dari logo perusahaan dan gambar baner, yang tersimpan

pada tabel global_config. Kedua gambar ini disimpan dalam database di tabel

global_config, dengan tipe data untuk byte streamnya adalah blob. Berikut

adalah kode untuk memproses CRUD untuk gambar log dan baner.

def logo
@config = GlobalConfig.find(:all, :conditions => ["id = ?", 1])
@web_config = @config[0]

if @web_config.nil?
flash[:notice2] = "Sebelum upload gambar harap lengkapi global konfigurasi website anda terlebih

178
179

dahulu."
else

if params[:web] != nil

if params[:web]['gambar'].size > 1
@tipe_file = File.extname(params[:web]['gambar'].original_filename.gsub(/[^\w._-]/,""))

if @tipe_file == ".jpeg" || @tipe_file == ".gif" || @tipe_file == ".bmp" || @tipe_file == ".jpg"


|| @tipe_file == ".png"
if params[:logor] == "utama"
@web_config.logo_utama = params[:web]['gambar'].read
@web_config.tipe_gambar = params[:web]['gambar'].content_type.chomp
if @web_config.save
flash[:notice2] = "Gambar telah berhasil diupload #{@tipe_file}."
end
end

if params[:logor] == "banner"
@web_config.banner = params[:web]['gambar'].read
@web_config.tipe_banner = params[:web]['gambar'].content_type.chomp
if @web_config.save
flash[:notice2] = "Gambar telah berhasil diupload #{@tipe_file}."
end
end

else
@pesan = "<blockquote>File yang diupload harus berupa file gambar.</blockquote>"
end
else
@pesan = "<blockquote>File gambar kosong.</blockquote>"
end
end
end
end
Skrip 4.34 kode pada admin kontroller, metode logo, untuk bisnis logic CRUD

179
180

Gambar 4.44 Tampilan halaman pengaturan logo dan baner

4.3.27 User Interface ATM Bersama di Halaman Admin

Atm bersama digunakan untuk informasi kepada user pelanggan yang akan

membayar pemesananannya melalui transfer atm antar instansi. Halaman

Atm Bersama menampilkan data value dari atribut kode_bank dan nama_bank

yang terkandung dalam entitas atau table atm_bersamas. Berikut adalah kode

yang digunakan :

def atm_bersama
if params[:do] == "edit"
@atm_bersama = AtmBersama.find(params[:id])
@locker = true
@action = 'update'
end

if params[:do] == "new"
@atm_bersama = AtmBersama.new
@action = 'create'
@locker = true

180
181

end

if params[:do] == "update"
@atm_bersama = AtmBersama.find(params[:id])

if @atm_bersama.update_attributes(params[:atm_bersama])
flash[:notice2] = 'Data Atm Bersama telah diperbaharui.'
@locker = true
@action = 'update'
else
@locker = true
@action = 'update'
@display = "1200px"
end
end

if params[:do] == "create"
@atm_bersama = AtmBersama.new(params[:atm_bersama])
if @atm_bersama.save
flash[:notice2] = 'Data Atm Bersama telah berhasil disimpan.'
@locker = true
@action = 'update'
else
@locker = true
@action = 'create'
@display = "1200px"
end
end

if params[:do] == "destroy"
AtmBersama.find(params[:id]).destroy
flash[:notice2] = 'Data telah berhasil dihapus.'
@locker = false
end

@atm_bersama_pages, @atm_bersamas = paginate :atm_bersamas, :order => "nama_bank",


:per_page => 10

end
Skrip 4.35 kode pada admin kontroller, metode atm_bersama, untuk bisnis logic CRUD

181
182

Gambar 4.45 Tampilan halaman pengaturan data atm bersama

4.3.28 User Interface Info Rekening di Halaman Admin

Halaman info rekening merupakan halaman untuk menyimpan dan modifikasi

informasi rekening perusahaan untuk pembayaran user pelanggan melalui

sistem transfer bank, transfer atm maupun sms banking. Berikut adalah kode

yang digunakan untuk proses CRUD pada Halaman Rekening.

def rekening
if params[:do] == "edit"
@rekening = Rekening.find(params[:id])
@locker = true
@action = 'update'
end

if params[:do] == "new"
@rekening = Rekening.new
@action = 'create'
@locker = true
end

if params[:do] == "update"
@rekening = Rekening.find(params[:id])

182
183

if params[:rekening][:nama_bank] != @rekening["nama_bank"]
params[:rekening][:kode_cabang] = AtmBersama.find(:all, :conditions => ["nama_bank LIKE
?", "%#{params[:rekening][:nama_bank]}%"])[0].kode_bank
else
params[:rekening][:kode_cabang] = @rekening["kode_cabang"]
end
if @rekening.update_attributes(params[:rekening])
flash[:notice2] = 'Data rekening telah diperbaharui.'
@locker = true
@action = 'update'
else
@locker = true
@action = 'update'
@display = "1200px"
end
end

if params[:do] == "create"
@rekening = Rekening.new(params[:rekening])
@rekening[:kode_cabang] = AtmBersama.find(:all, :conditions => ["nama_bank LIKE ?",
"%#{params[:rekening][:nama_bank]}%"])[0]
if @rekening[:kode_cabang] != nil
@rekening[:kode_cabang] = @rekening[:kode_cabang].kode_bank
end

if @rekening.save
flash[:notice2] = 'Data rekening telah berhasil disimpan.'
@locker = true
@action = 'update'
else
@locker = true
@action = 'create'
@display = "1200px"
end
end

if params[:do] == "destroy"
Rekening.find(params[:id]).destroy
flash[:notice2] = 'Data telah berhasil dihapus.'
@locker = false
end

@rekening_pages, @rekenings = paginate :rekenings, :per_page => 5

end
Skrip 4.36 kode pada admin kontroller, metode rekening, untuk bisnis logic CRUD

183
184

Gambar 4.46 Tampilan halaman pengaturan data rekening

4.3.29 User Interface Data Kota di Halaman Admin

Halaman kota merupakan halaman untuk menambah, menghapus, dan

modifikasi data kota, yang digunakan untuk kota tujuan atau keberangkatan

dari perjalanan yang ditawarkan kepada user pelanggan. Berikut adalah kode

dan tampilannya.

def kota

if params[:do] == "edit"
@kota = Kota.find(params[:id])
@locker = true
@action = 'update'
end

if params[:do] == "new"
@kota = Kota.new
@action = 'create'
@locker = true

184
185

end

if params[:do] == "update"
@kota = Kota.find(params[:id])
if @kota.update_attributes(params[:kota])
flash[:notice2] = 'Data Kota telah berhasil diperbaharui.'
@locker = false
else
@locker = true
@action = 'update'
end
end

if params[:do] == "create"
@kota = Kota.new(params[:kota])
if @kota.save
flash[:notice2] = 'Data Kota telah berhasil disimpan.'
@locker = false
else
@locker = true
@action = 'create'
end
end

if params[:do] == "destroy"
Kota.find(params[:id]).destroy
flash[:notice2] = 'Data telah berhasil dihapus.'
@locker = false
end

@kota_pages, @kotas = paginate :kotas, :order => "kota", :per_page => 10


end
Skrip 4.37 kode pada admin kontroller, metode kota, untuk bisnis logic CRUD

Gambar 4.47 Tampilan halaman pengaturan data kota

185
186

4.3.30 User Interface Data Provinsi di Halaman Admin

Halaman Provinsi merupakan halaman untuk proses modifikasi dan

penambahan data provinsi. Data value dari atribut provinsi yang terdapat pada

tabel provinsis digunakan sebagai data value dari provinsi kostumer. Berikut

kode yang digunakan untuk proses CRUD.

def provinsi

if params[:do] == "edit"
@provinsi = Provinsi.find(params[:id])
@locker = true
@action = 'update'
end

if params[:do] == "new"
@provinsi = Provinsi.new
@action = 'create'
@locker = true
end

if params[:do] == "update"
@provinsi = Provinsi.find(params[:id])
if @provinsi.update_attributes(params[:provinsi])
flash[:notice2] = 'Data Provinsi telah berhasil diperbaharui.'
@locker = false
else
@locker = true
@action = 'update'
end
end

if params[:do] == "create"
@provinsi = Provinsi.new(params[:provinsi])
if @provinsi.save
flash[:notice2] = 'Data Provinsi telah berhasil disimpan.'
@locker = false
else
@locker = true
@action = 'create'
end
end

if params[:do] == "destroy"
Provinsi.find(params[:id]).destroy
flash[:notice2] = 'Data telah berhasil dihapus.'

186
187

@locker = false
end
@provinsi_pages, @provinsis = paginate :provinsis, :order=>"provinsi", :per_page => 10
end
Skrip 4.38 kode pada admin kontroller, metode provinsi, untuk bisnis logic CRUD

Gambar 4.48 Tampilan halaman pengaturan data provinsi

4.3.31 User Interface Data Hotel di Halaman Admin

Halaman hotel di admin, adalah halaman untuk proses modifikasi dan

pembuatan data hotel untuk ditampilkan kepada user pelanggan, sebagai

informasi pelengkap dari kamar hotel yang akan dipasarkan ke user

pelanggan. Berikut adalah kode untuk proses CRUD pada halaman hotel.

def hotel
@display = "1275px"

if params[:do] == "edit"
@hotel = Hotel.find(params[:id])
@locker = true
@action = 'update'
@display = "1650px"
end

187
188

if params[:do] == "new"
@hotel = Hotel.new
@action = 'create'
@locker = true
@display = "1350px"
end

if params[:del_pic]
@hotel = Hotel.find(params[:id])

if params[:del_pic] == "kamar"
@hotel.gambar_kamar = nil
@hotel.tipe_gambar_kamar = nil
end

if params[:del_pic] == "hotel"
@hotel.gambar_hotel = nil
@hotel.tipe_gambar_hotel = nil
end

if params[:del_pic] == "fasilitas"
@hotel.gambar_fasilitas = nil
@hotel.tipe_gambar_fasilitas = nil
end

@hotel.update_attributes(params[:hotel])
request.env["HTTP_REFERER"]? (redirect_to :back) : (redirect_to :action => "hotel", :id =>
params[:id], :do => "edit")
end

if params[:do] == "update"
@hotel = Hotel.find(params[:id])
periksa_gambar_hotel(params[:upsave], @hotel)

if !@pesan && @hotel.update_attributes(params[:hotel])


flash[:notice2] = 'Data hotel telah berhasil diperbaharui.'
@locker = true
@action = 'update'
@display = "1700px"
else
@locker = true
@action = 'update'
@display = "1750px"
end
end

if params[:do] == "create"
@hotel = Hotel.new(params[:hotel])

188
189

periksa_gambar_hotel(params[:upsave], @hotel)

if !@pesan && @hotel.save


flash[:notice2] = 'Data hotel telah berhasil disimpan.'
@locker = true
@action = 'update'
@display = "1700px"
else
@locker = true
@action = 'create'
@display = "1750px"
end
end

if params[:do] == "destroy"
Hotel.find(params[:id]).destroy
flash[:notice2] = 'Data telah berhasil dihapus.'
@locker = false
end

@hotel_pages, @hotels = paginate :hotels, :order => "bintang", :per_page => 5


end
Skrip 4.39 kode pada admin kontroller, metode hotel, untuk bisnis logic CRUD

Gambar 4.49 Tampilan halaman pengaturan data hotel

189
190

4.3.32 User Interface Data Kamar di Halaman Admin

Halaman kamar merupakan halaman untuk melakukan modifikasi dan

pembentukan data kamar. Data kamar berhubungan dengan data hotel dalam

bentuk relasi antar tabel satu untuk banyak. Berikut adalah proses modifikasi

dan pembentukan serta penghapusan data kamar pada halaman kamar.

def kamar
@sp_day = "kamar_id"

if params[:do] == "edit"
@kamar = Kamar.find(params[:id])
@cari_hotel = Hotel.find(:all, :order => "bintang")
@cari_tipekamar = Tipekamar.find(:all, :order => "tipe_kamar")
@locker = true
@action = 'update'
setting_tiket_hari_khusus
end

if params[:do] == "new"
@kamar = Kamar.new
@cari_hotel = Hotel.find(:all, :order => "bintang")
@cari_tipekamar = Tipekamar.find(:all, :order => "tipe_kamar")
@action = 'create'
@locker = true
end

if params[:do] == "update"
@kamar = Kamar.find(params[:id])
@cari_hotel = Hotel.find(:all, :order => "bintang")
@cari_tipekamar = Tipekamar.find(:all, :order => "tipe_kamar")

if @kamar.update_attributes(params[:kamar])
flash[:notice2] = 'Data kamar telah berhasil diperbaharui.'
@locker = true
@action = 'update'
else
@locker = true
@action = 'update'
@display = "1100px"
end
setting_tiket_hari_khusus
end

if params[:do] == "create"
@kamar = Kamar.new(params[:kamar])

190
191

@cari_hotel = Hotel.find(:all, :order => "bintang")


@cari_tipekamar = Tipekamar.find(:all, :order => "tipe_kamar")

if @kamar.save
flash[:notice2] = 'Data kamar telah berhasil disimpan.'
@locker = true
@action = 'create'
setting_tiket_hari_khusus
else
@locker = true
@action = 'create'
@display = "1100px"
end
end

if params[:do] == "destroy"
kamar = Kamar.find(params[:id])
if kamar.pemesanans.size > 0
flash[:notice2] = "Data ini tidak dapat dihapus, karena sedang digunakan dalam pemesanan.
Untuk menghilangkan dari jadwal silahkan masukan angka 0 pada jumlah kamar
di Data Kamar dan data Tiket Hari Khusus."
else
kamar.tanggal_barangs.delete_all
kamar.destroy
flash[:notice2] = 'Data telah berhasil dihapus.'
@locker = false
end
end
@kamar_pages, @kamars = paginate :kamars, :order => "id_hotel", :per_page => 6
end
Skrip 4.40 kode pada admin kontroller, metode kamar, untuk bisnis logic CRUD

Gambar 4.50 Tampilan halaman pengaturan data kamar

191
192

4.3.33 User Interface Data Tipe Kamar di Halaman Admin

Halaman tipe kamar merupakan halaman admin yang digunakan untuk

modifikasi dan penambahan tipe kamar. Data value dari atribut tipe_kamar di

tabel tipekamars akan digunakan sebagai data value untuk atribut

id_tipe_kamar di tabel kamars. Berikut tampilan dan kode yan digunakan

untuk proses CRUD tipe kamar di halaman admin.

def tipe_kamar

if params[:do] == "edit"
@tipekamar = Tipekamar.find(params[:id])
@locker = true
@action = 'update'
end

if params[:do] == "new"
@tipekamar = Tipekamar.new
@action = 'create'
@locker = true
end

if params[:do] == "update"
@tipekamar = Tipekamar.find(params[:id])
if @tipekamar.update_attributes(params[:tipekamar])
flash[:notice2] = 'Data tipekamar telah berhasil diperbaharui.'
@locker = true
@action = 'update'
else
@locker = true
@action = 'update'
end
end

if params[:do] == "create"
@tipekamar = Tipekamar.new(params[:tipekamar])
if @tipekamarsave
flash[:notice2] = 'Data tipekamar telah berhasil disimpan.'
@locker = true
@action = 'update'
else
@locker = true
@action = 'create'
end
end

192
193

if params[:do] == "destroy"
TipeKamar.find(params[:id]).destroy
flash[:notice2] = 'Data telah berhasil dihapus.'
@locker = false
end

@tipekamar_pages, @tipekamars = paginate :tipekamars, :per_page => 10


end
Skrip 4.41 kode pada admin kontroller, metode tipe_kamar, untuk bisnis logic CRUD

Gambar 4.51 Tampilan halaman pengaturan data kamar

4.3.34 User Interface Data Penerbangan di Halaman Admin

Halaman penerbangan pada halaman admin digunakan untuk melakukan

manupulasi data penerbangan baik itu keberangkatan maupun kedantangan

serta rute penerbangan dan harga tiket.. Berikut adalah tampilan dan kode

yang digunakan untuk halaman penerbangan.

def penerbangan
@sp_day = "penerbangan_id"

if params[:do] == "edit"
@penerbangan = Penerbangan.find(params[:id])
@cari_kota = Kota.find(:all, :order=>"kota")
@locker = true
@action = 'update'

193
194

setting_tiket_hari_khusus
end

if params[:do] == "new"
@penerbangan = Penerbangan.new
@cari_kota = Kota.find(:all, :order=>"kota")
@action = 'create'
@locker = true
end

if params[:do] == "update"
@penerbangan = Penerbangan.find(params[:id])
@cari_kota = Kota.find(:all, :order=>"kota")
if @penerbangan.update_attributes(params[:penerbangan])
flash[:notice2] = 'Data penerbangan telah berhasil diperbaharui.'
@locker = true
@action = 'update'
else
@locker = true
@action = 'update'
end
setting_tiket_hari_khusus
end

if params[:do] == "create"
@penerbangan = Penerbangan.new(params[:penerbangan])
@cari_kota = Kota.find(:all, :order=>"kota")
if @penerbangan.save
flash[:notice2] = 'Data penerbangan telah berhasil disimpan.'
@locker = true
@action = 'update'
setting_tiket_hari_khusus
else
@locker = true
@action = 'create'
end
end

if params[:do] == "destroy"
pesawat = Penerbangan.find(params[:id])
if pesawat.pemesanans.size > 0
flash[:notice2] = "Data ini tidak dapat dihapus, karena sedang digunakan dalam pemesanan.
Untuk menghilangkan dari jadwal silahkan masukan angka 0 pada jumlah tiket
di Data Penerbangan dan data Tiket Hari Khusus."
else
pesawat.tanggal_barangs.delete_all
pesawat.destroy
flash[:notice2] = 'Data telah berhasil dihapus.'
@locker = false
end

194
195

end

@penerbangan_pages, @penerbangans = paginate :penerbangans, :per_page => 10

end
Skrip 4.42 kode pada admin kontroller, metode penerbangan, untuk bisnis logic CRUD

Gambar 4.52 Tampilan halaman pengaturan data penerbangan

4.3.35 User Interface Data Mobil di Halaman Admin

Halaman mobiltravel pada halaman admin merupakana halaman yang

digunakan untuk modifikas data mobiltravel, termasuk didalamnya

penjadwalan mobiltravel, penentuan harga tiket dan kota tujuan. Berikut

adalah kode yang digunakan untuk proses CRUD pada halaman mobiltravel.

def mobiltravel
@sp_day = "mobiltravel_id"

if params[:do] == "edit"
@mobiltravel = Mobiltravel.find(params[:id])
@cari_kota = Kota.find(:all, :order=>"kota")
@locker = true
@action = 'update'

195
196

setting_tiket_hari_khusus
end

if params[:do] == "new"
@mobiltravel = Mobiltravel.new
@cari_kota = Kota.find(:all, :order=>"kota")
@action = 'create'
@locker = true
end

if params[:do] == "update"
@mobiltravel = Mobiltravel.find(params[:id])
@cari_kota = Kota.find(:all, :order=>"kota")
if @mobiltravel.update_attributes(params[:mobiltravel])
flash[:notice2] = 'Data mobiltravel telah berhasil diperbaharui.'
@locker = true
@action = 'update'
else
@locker = true
@action = 'update'
@display = "1200px"
end
setting_tiket_hari_khusus
end

if params[:do] == "create"
@mobiltravel = Mobiltravel.new(params[:mobiltravel])
@cari_kota = Kota.find(:all, :order=>"kota")
if @mobiltravel.save
flash[:notice2] = 'Data mobiltravel telah berhasil disimpan.'
@locker = true
@action = 'update'
setting_tiket_hari_khusus
else
@locker = true
@action = 'create'
@display = "1200px"
end
end

if params[:do] == "destroy"
mobil = Mobiltravel.find(params[:id])
if mobil.pemesanans.size > 0
flash[:notice2] = "Data ini tidak dapat dihapus, karena sedang digunakan dalam pemesanan.
Untuk menghilangkan dari jadwal silahkan masukan angka 0 pada jumlah tiket
di Data Mobil Travel dan data Tiket Hari Khusus."
else
mobil.tanggal_barangs.delete_all
mobil.destroy
flash[:notice2] = 'Data telah berhasil dihapus.'

196
197

@locker = false
end
end

@mobiltravel_pages, @mobiltravels = paginate :mobiltravels, :per_page => 5

end
Skrip 4.43 kode pada admin kontroller, metode mobiltravel, untuk bisnis logic CRUD

Gambar 4.53 Tampilan halaman pengaturan data mobiltravel

4.3.36 User Interface Pengaturan Login di Halaman Login

Halaman info_login ditujukan untuk mengatur login karyawan berserta

penentuan hak aksesnya seperti admin atau client, dan data karyawan lainnya

seperti kode pegawi, username, password, dan nama. Berikut adalah kode

yang digunakan pada metode info_login untuk proses CRUD.

197
198

def info_login
if params[:do] == "edit"
@karyawan = Karyawan.find(params[:id])
@locker = true
@action = 'update'
end

if params[:do] == "new"
@karyawan = Karyawan.new
@action = 'create'
@locker = true
end

if params[:do] == "update"
@karyawan = Karyawan.find(params[:id],:lock=>true)
if params[:karyawan][:password].size < 1
params[:karyawan][:password] = "default085228922200biasa"
end

if @karyawan.update_attributes(params[:karyawan])
flash[:notice2] = 'Data karyawan telah diperbaharui.'
@karyawan[:password] = nil
@locker = true
@action = 'update'
else
@locker = true
@action = 'update'
@display = "1200px"
end
end

if params[:do] == "create"
@karyawan = Karyawan.new(params[:karyawan])
if @karyawan.save
@karyawan[:password] = nil
flash[:notice2] = 'Data karyawan telah berhasil disimpan.'
@locker = true
@action = 'update'
else
@locker = true
@action = 'create'
@display = "1200px"
end
end

if params[:do] == "destroy"
Karyawan.find(params[:id]).destroy
flash[:notice2] = 'Data telah berhasil dihapus.'
@locker = false

198
199

end

@karyawan_pages, @karyawans = paginate :karyawans, :per_page => 5

end
Skrip 4.44 kode pada admin kontroller, metode info_login, untuk bisnis logic CRUD

4.3.37 User Interface Logout Karyawan

Untuk keluar dari halaman admin, maka metode logout akan dijalankan

dengan menghapus session[:karyawan_id] dan session[:admin_id]. Berikut

adalah kode yang digunakan :

def logout
session[:karyawan_id] = nil
session[:admin_id] = nil
redirect_to :controller => "service_agent"
end
Skrip 4.45 kode pada admin kontroller, metode logout

4.3.38 User Interface CRUD Hari Khusus

Untuk menambahkan hari khusus pada masing-masing barang seperti

penerbangan, mobil travel dan hotel dilakukan dengan menggunakan kode

berikut

def setting_tiket_hari_khusus
@proses = "new"
@id = params[:id]

if !params[:hari]
@buka = false
else
@buka = true
end

if params[:hari] == "new"

199
200

if !params[:tanggal_barang]
@tanggal_barang = TanggalBarang.new
else
params[:tanggal_barang][:tanggal] = params[:date][:date_column]
@tanggal_barang = TanggalBarang.new(params[:tanggal_barang])
if @tanggal_barang.save
@proses = "edit"
@buka = false
end
end
@display = "1300px"
end

if params[:hari] == "edit"
@tanggal_barang = TanggalBarang.find(params[:day_id])
@display = "1300px"
@proses = "edit"
if params[:tanggal_barang]
params[:tanggal_barang][:tanggal] = params[:date][:date_column]
if @tanggal_barang.update_attributes(params[:tanggal_barang])
flash[:notice2] = "Data tiket untuk hari khusus telah diperbaharui."
@buka = false
end
else
end
end

if params[:hari] == "destroy"
@tanggal_barang = TanggalBarang.find(params[:day_id])
@display = "1300px"
if @tanggal_barang.destroy
flash[:notice2] = "Data tiket untuk hari khusus telah dihapus."
@buka = false
end
end

@tanggal_barang_pages, @tanggal_barangs = paginate :tanggal_barangs, :conditions=>


["#{@sp_day} = ?", @id], :per_page => 5

end
Skrip 4.46 kode pada admin kontroller, metode logout

200
201

Gambar 4.54 Tampilan halaman form hari khusus

201
BAB V

ANALISA HASIL

5.1 PENGUJIAN APLIKASI

5.1.1 Pengujian Arsitektur MVC pada Halaman Utama

Gambar 5.1 Arsitektur Three Tier dan Model-View-Controller untuk halaman index website

Pelanggan mengunjungi website biro perjalanan dengan mengetikan alamat

url pada web browser. Alamat url diterima oleh web server dan kemudian dilanjutkan
203

ke sistem route di aplikasi rails, (sistem route diatur pada file config/routes.rb).

Didalam sistem routing, alamat url dipetakan untuk menentukan kontroler, metod dan

parameter yang akan digunakan, sehingga didapatkan Controller yang akan

digunakan adalah ItravelController dan metod yang digunakan adalah def index.

Setelah proses pengidentifikasian pada sistem routing selesai, def index pada

ItravelController dijalankan. Didalam def index terdapat proses pembentukan

variabel-variabel yang melibatkan Model Penerbangan, Mobiltravel dan Kota yang

terhubung dengan basis data. Masing-masing Model melakukan pencarian melalui

fungsi find pada tabel yang dituju. Kemudia record yang tersimpan pada variabel

dapat ditampilkan dengan memanggil nama varibel didalam View Itravel. View

Itravel terdiri dari layout (itravel.rhtml) dan nama halaman yang akan digunakan

(index.rhtml). Setelah semua operasi didalam def index dijalankan, controller metod

memproduksi View Itravel yang sudah terbentuk kedalam bahasa HTML dan

menampilkannya ke browser user.

5.1.2 Pengujian Arsitektur MVC Untuk Pencarian Tiket Pesawat

Untuk melakukan pemesanan tiket pesawat, user diwajibkan mengisi form

yang ditampilkan pada web browser user. Hasil pengisian formulir dikirim melalui

GET request pada http beserta parameter. Kemudian Router aplikasi rails menangkap

alamat url, http://localhost:3000/itravel/penerbangan?cari=tiket, untuk

mengidentifikasikan kelas Controller, dan metod atau action yang akan digunakan.

203
204

Pada Route.rb, teridentifikasi bahwa controller yang akan digunakan adalah itravel

dan action/metod yang akan digunakan adalah penerbangan.

Gambar 5.2 Arsitektur Three Tier dan Model-View-Controller untuk Pencarian Tiket Pesawat

Setelah melakukan pemetaan pada router, sebelum sistem menjalankan

ItravelController, sistem dirails menjalankan terlebih dahulu proses triger yang

terdapat pada ApplicationController, yaitu menjalankan metod def konfigurasi_web

dan def session_exp. Def konfigurasi_web mengontrol informasi umum dari

perusahaan, dengan memanggil data yang tersimpan pada tabel global_configs

melalui model GlobalConfig. Sedangkan def session_exp, memeriksa tenggang

204
205

waktu user dalam mengakses sistem, dengan memeriksa waktu perubahan terakhir

pada tabel sessions melalui bantuan kelas model Session. Setelah triger pada

ApplicationController dijalankan ItravelController diakses khususnya untuk metod

def penerbangan. Metod ini bertanggung jawab dalam menampilkan daftar

penerbangan yang diminta oleh user, didalam def penerbangan terdapat penggunaan:

• Model Penerbangan dengan menjalankan metod def self.cari_tiket,

yang berfungsi untuk melihat jadwal penerbangan yang sesuai dengan

tanggal dan hari keberangkatan serta kota tujuan pada tabel

penerbangans.

• Model BarangTerpesan dengan menjalankan fungsi/metod def

self.hitung_item_dikotak, yang berfungsi untuk menghitung jumlah

tiket yang sedang dalam status pemesanan user di kotak pemesanan

yang tersimpan pada tabel barang_terpesans.

• Model Pemesanan dengan menjalankan fungsi/metod def

hitung_barang_sudah_dipesan, yang berfungsi untuk menghitung

jumlah tiket yang sudah terpesan user, baik yang sudah dibayar atau

belum, data ini tersimpan pada tabel pemesanans.

• Model BarangTanggal dengan menjalankan fungsi/metod def cari_hari

dan def cari_tanggal yang bertujuan untuk memeriksa kuota tiket yang

tersedia pada hari atau tanggal yang dipilih oleh user.

205
206

Setelah semua proses didalam metod penerbangan dari kelas ItravelController

dijalankan. ItravelController menjalankan action view dijalan dengan

memanggil View Itravel yang terdiri dari layout/itravel.rhtml dan

penerbangan.rhtml. Melalui action view variable yang mengadung data dan

perintah helper serta bahasa ruby pada file View Itravel diolah menjadi bahasa

html kemudian dikirim ke protokol internet untuk ditampilkan pada web

browser. Sehingga user dapat membaca hasil dari proses input form pencarian

tiket sebelumnya. Hasil view pada browser berupa daftar jadwal penerbangan

dengan harga tiket, dan form untuk pemesanan tiket, atau jika tiket pada

tanggal yang dipesan tidak tersedia akan ditampilkan pesan pada web browser

user. Karena pada route.rb terjadi pemetaan terhada kesatuan controller dan

action untuk itravel dan action penerbangan dengan nama pemetaan

‘penerbangan’ sehingga http://localhost:3000/itravel/penerbangan?cari=tiket diolah

menjadi http://localhost:3000/penerbangan?cari=tiket

5.1.3 Pengujian Arsitektur MVC Untuk Proses Pemesanan Tiket Pesawat ke

Kotak Pemesanan

Tampilan pada web browser user sebelum melakukan pemesanan tiket

pesawat adalah daftar maskapai penerbangan yang masih menyediakan tiket pada

tanggal yang dipilih user beserta harga dan form pemesanan. Ketika user melakukan

pemesanan pada salah satu maskapai dengan menekan tombol pesan, internet

206
207

mengirim request GET/POST ke alamat yang dituju, kemudian url request GET

diterima oleh Router untuk diproses pengidentifikasian action dan kontroller. Dalam

hal ini sebagai contoh url yang diterima adalah http://localhost:3000/itravel/

tambah_pemesanan?id=31&date=2008-06-10 dengan demikian router mengidentifikasikan

itravel sebagai nama kontroller dan tambah_pemesanan sebagai action/metod dari

kelas ItravelController. “id=31” adalah nilai parameter id tiket pesawat dan

“date=2008-06-10” adalah nilai parameter untuk tanggal keberangkatan. Kemudian

ItravelController menjalankan action def tambah_pemesanan.

Gambar 5.3 Arsitektur Three Tier dan Model-View-Controller untuk proses pemesanan tiket pesawat

ke kotak pemesanan.

207
208

Didalam metod ini terjadi proses pengecekan tiket dan penyimpana tiket kedalam

tabel yang berada didalam database. Pada saat pengecekan status sisa tiket

controller menggunakan beberapa Model, yaitu :

• Model BarangTerpesan : untuk membaca dan menghitung jumlah tiket yang

sedang dalam status kotak pemesanan di tabel barang_terpesans untuk

pesanan tiket ber-id 31 dengan tanggal keberangkatan 2008-06-10.

Controller menggunakan model ini juga untuk menyimpan detail barang

pesanan user kedalam kotak pemesanan.

• Model TanggalBarang : untuk mencari jumlah tiket yang tersedia pada

tanggal tertentu.

• Model Pemesanan : untuk menghitung jumlah tiket di tabel pemesanans

yang sudah dipesan oleh user baik yang sudah dibayar maupun masih dalam

proses konfirmasi.

• Model Kotakpemesanan : untuk menyimpan session informasi barang yang

dipesan oleh user agar bisa ditampilkan pada View Itravel khususnya kotak

pemesanan.

• Model Kotakbarang : merupakan turunan dari Model Kotakpemesanan yang

berguna sebagai identifikasi detail barang yang dipesan dan membentuk

variable untuk menampilkan masing-masing detail barang di kotak

pemesanan (View Itravel)

208
209

Setelah semua proses operasional model dan operasi fungsi didalam action def

tambah_pemesanan dijalankan, controller mempresentasikan hasil operasi

kedalam file View Itravel, tampilan kotak pemesanan berada pada render

_kotak_pemesanan.rhtml yang tertanam pada layout Itravel.rhtml, sedangkan

detail informasi barang dirender pada _kotak_barang.rhtml. Kemudian action

controller memanggil action view untuk mengolah bahasa ruby menjadi bahasa

html agar bisa dibaca oleh browser user.

5.1.4 Pengujian Arsitektur MVC Untuk Proses Registrasi

Gambar 5.4 Arsitektur Model-View-Controller untuk proses registrasi.

209
210

Untuk melakukan proses registrasi, user mengisi formulir registrasi pelanggan

yang ditampilkan pada browser. Setelah user mengirim hasil input, internet protokol

mengirim nilai parameter ke sistem router. Di router, sistem memverifikasi alamat url

yang diterima, yaitu http://localhost:3000/itravel/registrasi_kostumer sehingga dapat

diidentifikasikan bahwa kelas controller yang digunakan adalah itravel dan

action/method yang digunakan adalah registrasi_kostumer. Metod

registrasi_kostumer menangkap semua parameter input registrasi untuk disimpan ke

dalam table kostumers melalui Model Kostumer. Sebelum disimpan Model Kostumer

memverifikasi input, jika terdapat kesalahan input maka metod registrasi_kostumer

pada ItravelController, memerintahkan ActionView untuk menampilkan pesan error

pada View Registrasi Kostumer (registrasi_kostumer.rhtml) dalam bahasa HTML

yang kemudian ditampilkan ke browser pelanggan.

Jika input berhasil disimpan, maka metod registrasi_kostumer akan

mengalihkan (redirect_to) proses ke metod login di kelas KostumerController.

Karena setelah proses registrasi user telah memasuki halaman kostumer. Pada metod

login, ActionView dipanggil dan mengolah view layout kostumer.rhtml dan view

login (login.rhtml) beserta render _kotak_pemesanan.rhtml (untuk menampilkan

barang pesanan dikotak) ke dalam bahasa HTML yang kemudian dikirim ke browser

user, sehingga user dapat membaca konfirmasi pemesanan setelah halaman registrasi.

210
211

5.1.5 Pengujian Arsitektur MVC Untuk Proses Akhir Pemesanan

Gambar 5.5 Arsitektur Model-View-Controller untuk proses akhir pemesanan.

Setelah user menerima halaman konfirmasi pada web browsernya, user

melanjutkan proses dengan mengirim permintaan kepada sistem melalui protokol

internet supaya sistem memproses pemesanan user. Permintaan user diterima oleh

211
212

sistem router dalam bentuk url (http://localhost:3000/kostumer/simpan_pemesanan?

pelanggan=51). Setelah router mengidentifikasi kontroller dan action, sistem

menjalankan KostumerController untuk mengeksekusi metod simpan_pemesanan.

Didalam action/metod ini, dijalankan Model Pemesanan untuk menyimpan data

barang yang dipesan kedalam tabel pemesanans. Didalam tabel pemesanan terdapat

pemanggilan Model StatusInvoice untuk meyimpan data global faktur.

Setelah semua barang yang dipesan tersimpan didalam database, selanjutnya

metod simpan_pemesanan menghapus data user yang tersimpan pada tabel

barang_terpesan melalui Model BarangTerpesan, untuk menghapus data pada kotak

pemesanan sehingga tidak ditampilkan pada browser user. Kemudian metod

simpan_pemesanan mengalihkan proses selanjutnya ke metod selesai_order. Pada

metod peralihan ini, action view dijalankan untuk menampilkan View Layout

kostumer.rhtml dan View Kostumer selesai_order.rhtml , view ini berisi tampilan

ucapan terimakasih atas pemesanan pada perusahaan pada browser user.

5.1.6 Pengujian Arsitektur MVC pada Tampilan Faktur Pemesanan

Pelanggan

Untuk menampilkan faktur pemesanan pelanggan, user terlebih dahulu

mengklik link nomor faktur yang tertera pada web browser user. Kemudian alamat

url yang terkandung pada link tersebut dikirim melalui protokol internet ke sistem.

Sistem menerima url yang dikirim ke router untuk diidentifikasi kelas controller dan

212
213

action/metod yang akan digunakan. Berdasarkan alamat yang diterima,

http://localhost:3000/kostumer/invoice?kode_pesan=112233 diperole kontroller yang dipakai

adalah KostumerController dan metod yang digunakan adalah invoice dengan nilai

parameter kode_pesan adalah 112233 sebagai kode faktur yang dituju.

Gambar 5.6 Arsitektur Model-View-Controller pada tampilan faktur pemesanan pelanggan.

Didalam metod invoice, informasi data pelanggan dan informasi faktur dicari

dengan menggunakan Model StatusInvoice yang menjalankan metod find_by_kode_

pemesanan, tujuannya adalah mencari record di tabel status_invoices yang

menggandung kode_pemesanan sama dengan nilai parameter dari kode_pesan. Tabel

StatusInvoice memiliki hubungan antar tabel one-to-many dengan tabel pemesanans,

sehingga apabila hasil pencarian diketemukan maka record-record terkait pada tabel

213
214

pemesanans dapat dibaca. Selain Model StatusInvoice, metod invoice juga

menjalankan Model Pembayaran, untuk mencari data pembayaran untuk ditampilkan

pada faktur digital. Dengan bantuan Action View, metod invoice mempresentasikan

hasil operasinya kedalam View Layout kostumer.rhtml dan View Kostumer

(invoice.rhtml) kedalam bahasa HTML sehingga detail pemesanan, status pemesanan,

status pembayaran dan data pelanggan dapat dibaca oleh user melalui web

browsernya.

5.1.7 Pengujian Arsitektur MVC Untuk Modifikasi Data Pelanggan

Gambar 5.7 Arsitektur Model-View-Controller proses modifikasi data pelanggan.

214
215

Untuk melakukan perubahan data pelanggan harus dilakukan dihalaman

kostumer yang terproteksi dengan otentikasi password pelanggan. Pada browser

pelanggan ditampilkan halaman ubah profile yang berisi formulir data pelanggan.

Setelah data pelanggan dimodifikasi, webrowser mengirimkan perintah GET/POST

melalui protokol internet ke alamat sistem yang dituju. Kemudian sistem menerima

alamat/url, http://localhost:3000/kostumer/update_profile?id=100, dari browser dan

dikirim ke router untuk mengidentifikasi controller dan metod/action yang akan

digunakan. Dalam hal ini, controller yang teridentifikasi adalah kostumer dan action

yang teridentifikasi adalah update_profile sedangkan id adalah paramater yang akan

digunakan untuk mencari data pelanggan yang dengan nilai id 100 pada tabel

kostumers.

Setelah proses identifikasi router, KostumerController menjalankan metod def

update_profile, didalamnya terjadi proses pencarian data pelanggan yang ber-id 100

didalam tabel kostumers dengan menggunakan Model Kostumer melalui fungsi find.

Setelah record data diperoleh, nilai dari masing-masing atribut di record data diganti

dengan nilai parameter hasil input user. Proses modifikasi ini dilakukan oleh Model

Kostumer melalui fungsi update_attributes. Pada akhir proses di metod

update_profile, terjadi pengalihan metod ke def ubah_profile tujuannya adalah untuk

menampilkan kembali halaman form data kostumer. Metod ubah_profile,

bertanggung jawab dalam menampilkan View Kostumer dan layoutnya melalui

215
216

bantuan Action View kedalam bahasa HTML dan mengirimnya ke browser user,

sehingga user dapat membaca hasil modifikasi datanya.

5.1.8 Pengujian Arsitektur MVC Untuk Proses Login Pelanggan

Proses login pelanggan diawali dari user menginputkan data login pada web

browser, kemudian web browser mengirim permintaan user ke sistem melalui GET/

POST Request di internet. Sistem menerima url GET/POST yang dikirim browser

dan melanjutkannya ke ROUTER. Kemudian Router melakukan pengelamatan url

yang diterima berdasarkan Controller dan action yang terkandung didalam url beserta

parameternya. Berikut adalah gambar pengujian MVC dari sistem yang sudah

dibentuk terhadap proses login user pelanggan.

Gambar 5.8 Arsitektur Model-View-Controller proses login pelanggan.

216
217

Berdasarkan gambar diatas, url yang diidentifikasi oleh sistem ROUTER

adalah http://localhost:3000/kostumer/login sehingga diperoleh controller yang akan

digunakan KostumerController dan metod/action yang akan digunakan adalah login.

Kemudian metod login mempresentasikan permintaan yang diterima oleh Router,

yaitu memverifikasi hasil input login user melalui fungsi login() dengan

menggunakan Model Kostumer. Model akan mencari record pada tabel kostumers

yang mengandung nilai atribut email yang diinputkan user dan mencocokannya

dengan nilai atribut password yang terenkripsi, jika hasil sesuai Kontroller akan

mengalihkan metod ke def utama yaitu metod yang akan menampilkan halaman

utama pelanggan dengan mempresentasikan View Kostumer dan View Layout

kedalam bahasa HTML dan mengirimnya ke web browser untuk dibaca oleh user.

5.1.9 Pengujian Arsitektur MVC Untuk Proses Login Karyawan

User petugas pelayanan atau admin melakukan login pada web browser yang

kemudian dikirim ke sistem router dengan hasil identifikasi controller dan action

yang akan digunakan adalah ServiceAgentController dan login. Setelah proses

pemetaan di Router selesai, metod login memverifikasi input user melalui Model

Karyawan dengan metod login. Model mengakses tabel karyawans untuk

mendapatkan nilai atribut yang sesuai dengan input login user. Setelah hasil verifikasi

diperoleh, metod login pada ServiceAgentController pengkodisian status karyawan,

jika status hasil input user adalah admin, maka controller akan mengalihkan metod ke

217
218

metod login di AdminController, sehingga View yang akan ditampilkan adalah View

index dari Admin. Dan sebaliknya View yang ditampilkan adalah index dari View

ServiceAgent.

Gambar 5.9 Arsitektur Model-View-Controller proses login pelanggan.

5.1.10 Pengujian Arsitektur MVC Untuk Proses Modifikasi Faktur Pelanggan

Karyawan pelayanan pelanggan dapat melakukan modifikasi terhadap barang

yang dipesan user pada faktur digital yang ditampilkan oleh browser pada halaman

service_agent. Setelah jumlah barang atau tanggal keberangkatan atau check-out

dirubah, perintah perubahan dikirim melalui internet dan diterima oleh sistem Router.

Sistem Router mengidentifikasi http://localhost:3000/service_agent/edit_invoice?

218
219

oid=5&fid=7 dengan hasil : Controller yang akan digunakan adalah

ServiceAgentController dan metod yang akan digunakan adalah def edit_invoice,

serta memiliki parameter oid (id-item) & fid (faktur-id).

Gambar 5.10 Arsitektur Model-View-Controller proses modifikasi item di faktur

pelanggan.

Setelah proses identifikasi, sistem dikendalikan oleh kontroller melalui

metodnya. Didalam ServiceAgent Controller, metod menjalankan pencarian record

data dari barang yang diubah/modifikasi yang terdapat pada tabel pemesanans

melalui operasional fungsi find pada Model Pemesanan. Setelah record data

219
220

diperoleh, maka Model Pemesanan akan meng-update nilai data/ nilai parameter dari

record query dan menyimpannya kembali kedalam tabel pemesanans. Kemudian hasil

modifikasi akan dipresentasikan oleh metod edit_invoice kedalam View

edit_invoice.rhtml dengan bantuan Action View, sehingga kelas View dapat diolah

kedalam bahasa HTML sehingga web browser dapat menampilkan output yang dapat

dibaca oleh user.

5.1.11 Pengujian Arsitektur MVC Untuk Proses Hapus Faktur Pelanggan

Gambar 5.11 Arsitektur Model-View-Controller proses hapus faktur pelanggan.

220
221

Penghapusan faktur pemesanan pelanggan dilakukan pada halaman arsip

pemesanan dan hanya dapat dilakukan untuk pemesanan yang tidak memiliki

pembayaran. Penghapusan dilakukan dengan meng-klik link hapus yang terteda pada

web browser user. Setelah link diklik, internet protokol mengirim url

http://localhost:3000/service_agent/hapus_invoice?fid=34 ke sistem dan diterima

oleh Router. Setelah Router mengidentifikasi controller dan action yang akan

digunakan, router mengijinkan ServiceAgentController menjalankan action def

hapus_invoice. Di dalam metod ini, Model StatusInvoice mencari faktur dengan nilai

id pada tabel status_invoices adalah 34.

Kerena tabel status_invoices memiliki hubungan antar tabel one-to-many

dengan tabel pemesanans, Model Pemesanan dapat menghapus semua record yang

terhubung dengan status_invoices_id yang bernilai 34 dengan fungsi operasional

delete_all. Setelah semua data barang pesanan dari faktur ber-id 34 dihapuskan,

selanjutnya Model StatusInvoice menghapus record tabel status_invoices yang ber-id

34 dari database. Dengan demikian proses menghapus faktur pelanggan telah selesai,

selanjutnya metod menjalankan pengalihan metod ke def invoice_list untuk meng-

update tampilan arsip pemesanan (invoice_list) pada web browser user melalui

Action View.

221
222

5.1.12 Pengujian Arsitektur MVC Untuk Proses Tambah Data Pembayaran

Untuk mempermudah pencatatan transaksi pembayaran dan sebagai dokument

digital pembayaran pelanggan, maka pada halaman service agent terdapat halaman

untuk memasukan data pembayaran pelanggan. Setelah semua data terkait diinputkan

user pada form pembayaran, protokol internet akan mengirim GET request melalui

protokol internet ke sistem. Router sistem menerima url GET request dan melakukan

pemetaan controller dan action berdasarkan url yang diterima. Berikut adalah gambar

arsitektur MVC untuk proses tambah data pembayaran:

Gambar 5.12 Arsitektur Model-View-Controller proses data pembayaran

222
223

Router mengidentifkasikan ServiceAgent sebagai controller yang akan

digunakan dan def pembayaran sebagai metod yang akan dijalankan. Setelah

pemetaan selesai, controller mempresentasikan metod pembayaran untuk menambah

data baru pembayaran pelanggan. Dengan bantuan Model Pembayaran, record baru

diciptakan untuk tabel pembayarans dengan memasukan nilai-nilai dari parameter

pembayaran yang telah diinputkan user melalui web browser. Kemudian Model

Pembayaran akan meyimpan data tersebut kedalam tabel pembayarans melalui fungsi

def self.save. Setelah data pembayaran tersimpan didalam basis data, metod

pembayaran mempresentasikan hasil prosesnya kedalam View pembayaran dari kelas

View ServiceAgent dengan mengolah bahasa ruby menjadi bahasa HTML dan

mengirimnya ke web browser user, sehingga user dapat membaca hasil inputan.

5.1.13 Pengujian Arsitektur MVC Untuk Proses Tambah Data Pembatalan

Sistem menerima permintaan pembatalan melalui Internet protokol yang

diterima oleh sistem Router. Didalam Sistem Router, terjadi identifikasi alamat URL

GET sehingga diperoleh Controller yang akan digunakan adalah

ServiceAgentController dan metod yang akan digunakan adalah def pembatalan.

Kemudian ServiceAgent Controller dijalankan, didalam metod def pembatalan,

sistem mencari record dari tabel pemesanans dengan menggunakan Model

Pemesanan, pencarian dilakukan berdasarkan nilai parameter oid yaitu nilai id pada

tabel pemesanans. Setelah record diperoleh maka nilai jumlah barang yang akan

223
224

dipesan diupdate. Jika nilainya setelah diupdate adalah 0, maka Model Pemesanan

akan dijalankan untuk melaksanakan perintah destroy atau menghapus record yang

dimaksud dari tabel pemesanans, dan bila nilai jumlah barang yang dipesan masih

diatas 0 maka record hasil query dari Model Pemesanan akan di update nilai

attributenya.

Gambar 5.13 Arsitektur Model-View-Controller proses tambah data pembatalan

224
225

Proses selanjutnya didalam ServiceAgentController adalah dengan

mengupdate tabel status_invoices melalui Model StatusInvoice, yaitu memodifikasi

total nominal pemesanan faktur dengan nilai ada setara dengan nilai parameter fid.

Hasil pembatalan disimpan dalam satu record kedalam tabel pembatalans sebagai

dokumentasi dan sebagai bagian dari history faktur. Penyimpanan data baru record

pembatalan ini dilakukan oleh Model Pembatalan. Kemudian ServiceAgent

Controller menjalankan kelas View untuk menampilkan hasil pembatalan dan

perubahan pada faktur pemesanan. Pada View Pembatalan terdapat 2 file render yaitu

_tabel_refund.rhtml (untuk menampilkan keterangan barang yang dibatalkan) dan

_detail_invoice.rhtml (untuk menampilkan detail barang pemesanan yang tidak

dibatalkan). Informasi ini ditampilkan kepada user di Web Browsernya atas bantuan

Action View.

5.2 KELEBIHAN DAN KEKURANGAN SISTEM

5.2.1 Kekurangan Sistem

• Aplikasi tidak mendukung keberangkatan dan penginapan di luar kota

Yogyakarta

• Penanganan session login atau otentifikasi halaman private masih

belum sempurna, hal ini dapat dilihat apabila halaman telah expired

(habis masa berlakuknya) user masih dapat mengakses halaman pada

tindakan pertama.

225
226

• Tidak mendukung sistem pembayaran Real Time Payment.

• Tidak mengandung store prosedure, aplikasi ini tidak dapat digunakan

untuk platform yang berbeda selain hanya ruby on rails.

5.2.2 Kelebihan Sistem

• Dengan perancangan Model-View-Controller mempermudah dalam

mengembangkan sistem tanpa harus membongkar seluruh isi aplikasi

dan mematikan keseluruhan proses.

• Server yang digunakan pada ruby on rails menangani ‘one request

only’ sehingga kesalahan multiuser dapat ditekan sekecil mungkin.

Jika mengalami concurrent request, maka server akan memproses

request satu persatu berdasarkan urutan proses.

226
BAB VI

PENUTUP

6.1 KESIMPULAN

• Arsitektur Model-View-Controller pada aplikasi ini sudah teruji dapat

berjalan dengan baik, sehingga aplikasi dapat menampilkan informasi,

memproses data, serta melakukan operasi-operasi aplikasi.

6.2 SARAN

• Aplikasi ini masih dapat dikembangkan dengan penambahan fasilitas

pembayaran secara online atau real time seperti kartu kredit dan debi, sistem

deposit atau sejenisnya.

• Konfirmasi pembayaran dengan sistem transafer akan lebih baik dan lebih

cepat jika aplikasi ini dikembangkan dengan fasilitas upload gambar atau

tanda bukti pembayaran.

• Untuk menjawab tantangan berpromosi melalui search egine, aplikasi ini lebih

baik jika didukung dengan sistem SEO (Search Engine Optimizer).


228

LAMPIRAN

228
DAFTAR PUSTAKA

Thomas, Dave, Programming Ruby – The Pragmatic Programmers’ Guide Second


Edition, The Pragmatic Programmer, LLC, United State of America, 2004.
Thomas, Dave, Agile Web Development with Rails Second Edition, The Pragmatic
Programmer, LLC, United State of America, 2006.
Marshall, Kevin, Pro Active Record Databases with Ruby and Rails, Apress, United
State of America, 2007.
Sholiq, Pemodelan Sistem Informasi Berorientasi Objek dengan UML, Graha Ilmu,
Yogyakarta, 2006.
Sutanta, Edhy, Sistem Basis Data, Graha Ilmu, Yogyakarta, 2006.
Website, wiki.rubyonrails.com/rails, The Community-Driven Rails Documentation,
updated 2008.
Website, api.rubyonrails.org, The Official Website of Ruby on Rails API.
class ServiceAgentController < ApplicationController
before_filter :validasi_karyawan, :except => [:login, :logout]
before_filter :reset_notice
before_filter :buat_tanggal
require 'pemesanan'
require 'kamar'
require 'mobiltravel'
require 'penerbangan'

def index
@pending_invoice = StatusInvoice.dengan_status_order("Menunggu
Pembayaran", "Sedang Diproses/Indent")
if params[:msg]
@pesan = "<blockquote>Pencarian
'#{params[:cari].to_s}' Tidak Diketemukan ."
end
end

#***************************************************************#
#-------------- A L L A B O U T K O S T U M E R --------------
#***************************************************************#

def list_kostumer

if params[:cari]
if params[:cari][:cari].nil?
@daftar_kostumer =
Kostumer.cari_pelanggan(params[:cari])
@kata_cari = params[:cari]
else
@daftar_kostumer =
Kostumer.cari_pelanggan(params[:cari][:cari])
@kata_cari = params[:cari][:cari]
end
else
@daftar_kostumer = Kostumer.find(:all,:order =>
'nama_lengkap')
end

if @daftar_kostumer.size < 1
redirect_to (:action => "index", :msg => "true", :cari
=> @kata_cari)
end

@daftar_kostumer_pages, @daftar_kostumers =
paginate_collection @daftar_kostumer, :page => @params[:page]

end
def login
if request.post?
karyawan = nil
karyawan = Karyawan.login(params[:username],
params[:password])
if karyawan
session[:karyawan_id] = karyawan.id
session[:karyawan_nama] = karyawan.nama
session[:karyawan_status] = karyawan.status
if karyawan.status == "Admin"
session[:admin_id] = karyawan.id
redirect_to :controller => "admin", :action => :index
else
redirect_to :action => :index
end
else
flash[:notice] = "Hak akses anda ditolak, silahkan login
dengan benar."
end
end
end

def ganti_password

begin
@karyawan = Karyawan.find(session[:karyawan_id])
rescue
logger.error("Mencoba untuk mengakses invalid id =
#{params[:id]}")
flash[:notice] = "Error, harap hubungi admin."
else

if params[:npid]
check_password_lama =
Karyawan.login(@karyawan.username,
params[:karyawan][:password_lama])

if check_password_lama
if params[:karyawan]["password"] !=
params[:karyawan]["konfirmasi_password"]
@pesan = "<blockquote>Password baru
dan konfirmasi password yang anda ketik tidak sama.</blockquote>"
params[:karyawan] = nil
else
if
@karyawan.update_attributes(params[:karyawan])
flash[:notice2] = "Password Anda
Telah Berhasil Diganti."
@karyawan = nil
end
end
else
@pesan = "<blockquote>Password Lama Anda
Salah atau belum terisi.</blockquote>"
end
end
end
end #<-- End ganti_password

def logout
session[:karyawan_id] = nil
redirect_to :action => 'login'
end

def hapus_kostumer
Kostumer.transaction do
Kostumer.find(params[:cid], :lock=>true).destroy
end
redirect_to :action => 'list_kostumer'
end

def hapus_invoice
ActiveRecord::Base.transaction do
x = StatusInvoice.find(params[:fid], :lock=>true)
x.pemesanans.delete_all
x.destroy
end
redirect_to :action => 'invoice_list'
end

def edit_kostumer
Kostumer.transaction do
if params[:cid]
@kostumers = Kostumer.find(params[:cid],
:lock=>true)
end
@provinsi = Provinsi.cari_provinsi

if params[:kostumers]

params[:kostumers][:password] = "0%8&5_2-
2+8=9#2@2!2.0?0"
params[:kostumers][:konfirmasi_password] =
"0%8&5_2-2+8=9#2@2!2.0?0"

if
@kostumers.update_attributes(params[:kostumers])
flash[:notice2] =
'<blockquote>&nbsp;&nbsp;Data Kostumer Telah Berhasil Diperbaharui.'
end
end
end
end

def invoice_list
StatusInvoice.transaction do
if params[:cid]
@daftar_invoice =
StatusInvoice.cari_transaksi_pelanggan(params[:cid])
else
if params[:cari]
@daftar_invoice =
StatusInvoice.cari_kode_faktur(params[:cari][:cari])
if @daftar_invoice.size < 1
redirect_to (:action =>
"list_kostumer", :msg => "true", :cari => params[:cari][:cari])
end
else
@daftar_invoice = StatusInvoice.find(:all)
end
end
end

@daftar_invoice_pages, @daftar_invoice = paginate_collection


@daftar_invoice, :page => @params[:page]

end

def edit_invoice

ActiveRecord::Base.transaction do

begin
@invoice = StatusInvoice.find(params[:fid], :lock=>true)

@provinsi = Provinsi.cari_provinsi
@detail_invoice = @invoice.pemesanans
@go_to = "edit_invoice"
@pembayaran_info = @invoice.pembayarans[0]
@kostumers = @invoice.kostumer

if @invoice.status == "Telah Diproses"


#untuk menutup tombol pada kostumer dan status di
invoice
@tutup_tombol = true
#switcher untuk menutup fields pada tabel detail
invoice
@switcher = true
end

if params[:kostumers]
edit_kostumer
end

if params[:pemesanan]
update_pemesanan
end
rescue
@pesan = "Proses Anda tidak dapat lanjutkan, silahkan coba
kembali"
end
end
end

def pembatalan

@dari_pembatalan = true

if params[:fid] || params[:cari]
pembayaran
@go_to = "pembatalan"
@switcher = false
if @invoice
@tabel_pembatalan = @invoice.pembatalans

if @tabel_pembatalan.size > 0
@total_batal = @tabel_pembatalan.inject(0)
{|i, batal| i + batal.nominal_refund}
end
end
end

end

def pembayaran

if params[:fid]
@no_invoice = params[:fid]
end

if params[:cari]
@no_invoice = params[:cari][:cari]
cari = true
end

if @no_invoice != nil
@invoice = StatusInvoice.cari_faktur(@no_invoice, cari)
@rekening = Rekening.find(:all)
end

if @invoice.nil? || @no_invoice.nil?
if @no_invoice != nil
@pesan = "<blockquote>Nomor Pemesanan
#{@no_invoice} tidak diketemukan.</blockquote>"
end
else
@go_to = "pembayaran"
@power = true
@switcher = false

if @pembayaran_info = @invoice.pembayarans[0]
@power = false
@switcher = true
end

if params[:pemesanan]
update_pemesanan
end

if @dari_pembatalan && ! @pembayaran_info


@power = false
@switcher = true
redirect_to (:fid => @fid, :action =>
"edit_invoice")
end

if ! @dari_pembatalan
if params[:pembayaran_info]
if @invoice.status != "Menunggu
Pembayaran"

@pembayaran_info["waktu"] =
TimeZone['Jakarta'].adjust(Time.now)

params[:pembayaran_info]["nominal_terbayar"] =
@pembayaran_info.nominal_terbayar

@pembayaran_info["perubahan_terakhir"] =
TimeZone['Jakarta'].adjust(Time.now)
if
@pembayaran_info.update_attributes(params[:pembayaran_info])
flash[:notice2] =
"Pembayaran untuk pemesanan nomor #{@kode_invoice} telah diproses,
silahkan masukan kode voucher.</blockquote>"
end
else
create_pembayaran
end
else
if !@pembayaran_info
@pembayaran_info =
Pembayaran.new
@pesan = "<blockquote>Pemesanan
ini belum melakukan pembayaran, silahkan
isi kolom dibawah ini untuk
menyelesaikan pemesanan.</blockquote>"
end
end
end

@detail_pemesanan = @invoice.pemesanans
end
end #<-- End pembayaran

def laporan

if params[:date1] !=nil
if params[:date1][:date_column].size > 0
@start = params[:date1][:date_column].to_date
@end = params[:date2][:date_column].to_date

if @start < @end


nama_file =
"logo_faktur.#{@website.tipe_gambar.gsub('image/','')}"
directory =
"#{RAILS_ROOT}/public/images/#{nama_file}"
File.open(directory, "wb") { |f|
f.write(@website.logo_utama) }

ActiveRecord::Base.transaction do
@pembayaran = Pembayaran.find(:all,
:conditions => ["Date(waktu) > ? AND Date(waktu) < ?", @start,
@end])
@pembatalan = Pembatalan.find(:all,
:conditions => ["Date(waktu) > ? AND Date(waktu) < ?", @start,
@end])
@total_credit =
format_harga(@pembayaran.inject(0){|a,b| a + b.nominal_terbayar})
@total_debit =
format_harga(@pembatalan.inject(0){|a,b| a + b.nominal_refund})

if @total_credit.to_i < 1 &&


@total_debit.to_i < 1
@pesan =
"<blockquote>Tidak ada transaksi dari tanggal #{@start.strftime('%d-
%b-%Y')} hingga tanggal #{@end.strftime('%d-%b-%Y')}.</blockquote>"
else

require "pdf/writer"
require 'pdf/simpletable'
pdf = PDF::Writer.new

pdf.select_font("Helvetica")
i0 = pdf.image
"#{RAILS_ROOT}/public/images/#{nama_file}", :resize => 0.75

if @website.nil?
pdf.text
"\t\t\t PT NAMA PERUSAHAAN TRAVEL\n", :font_size => 8,
:justification => :left
pdf.text
"\t\t\t Jl Disekitar Perusahaan No.1\n", :font_size => 8,
:justification => :left
pdf.text
"\t\t\t Sleman, Yogyakarta\n", :font_size => 8, :justification =>
:left
pdf.text
"\t\t\t Telp : 0274-7895123\n", :font_size => 8, :justification =>
:left
pdf.text
"\t\t\t Fax : 0274-7895123\n", :font_size => 8, :justification =>
:left
pdf.text
"\t\t\t Email: sales@itravel.com\n\n\n\n", :font_size => 8,
:justification => :left

else
pdf.text
"\t\t\t #{@website.nama_perusahaan}\n", :font_size => 8,
:justification => :left
pdf.text
"\t\t\t #{@website.alamat_perusahaan}\n", :font_size => 8,
:justification => :left
pdf.text
"\t\t\t Telp : #{@website.no_telp}\n", :font_size => 8,
:justification => :left
pdf.text
"\t\t\t Fax : #{@website.no_fax}\n", :font_size => 8, :justification
=> :left
pdf.text
"\t\t\t Email: sales@itravel.com\n\n\n\n", :font_size => 8,
:justification => :left
end

x = pdf.margin_height
y =
pdf.absolute_top_margin
pdf.add_text(210,y-50, "L
A P O R A N\t\tT R A N S A K S I", 22,0)
pdf.add_text(211,y-50, "L
A P O R A N\t\tT R A N S A K S I", 22,0)
pdf.add_text(209,y-50, "L
A P O R A N\t\tT R A N S A K S I", 22,0)
pdf.add_text(254,y-75,
"periode \t\t#{@start.strftime('%d-%b-%Y')} - #{@end.strftime('%d-
%b-%Y')}", 16,0)
pdf.add_text(255,y-75,
"periode \t\t#{@start.strftime('%d-%b-%Y')} - #{@end.strftime('%d-
%b-%Y')}", 16,0)

b =
pdf.absolute_bottom_margin

pdf.start_page_numbering(450,b,10)

#######################
# TABLE UNTUK LAPORAN #
#######################

PDF::SimpleTable.new do
|tab|
tab.title = "
"
tab.title = "
"

tab.column_order.push(*%w(from1 to1 from2 to2))

tab.columns["from1"] = PDF::SimpleTable::Column.new("from1") {
|col|
col.heading =
" TANGGAL"
}

tab.columns["to1"] = PDF::SimpleTable::Column.new("to1") {
|col|
col.heading =
" TRANSAKSI"
}

tab.columns["from2"] = PDF::SimpleTable::Column.new("from2") {
|col|
col.heading =
"DEBIT(Rp) "
}

tab.columns["to2"] = PDF::SimpleTable::Column.new("to2") {
|col|
col.heading =
"CREDIT(Rp)"
}
tab.show_lines
= :none

tab.show_headings = true

tab.shade_headings = true

tab.orientation = :center
tab.position
= :center
tab.font_size
= 10

tab.heading_font_size = 10

@isi_data = []

for
data_bayar in @pembayaran

@isi_data << [data_bayar, "bayar"]


end

for
data_batal in @pembatalan

@isi_data << [data_batal, "batal"]


end

data =
[{ "from1" => "", "to1" => "",

"from2" => "", "to2" => "\t"}]

for box_data in @isi_data.sort_by{|a| a[0].waktu}

@waktu = box_data[0].waktu.strftime("%d-%b-%Y \n\t\t


%H:%M:%S")

if box_data.include? "bayar"

@no_faktur =
box_data[0].status_invoice.kode_pemesanan

@bank = box_data[0].nama_bank_pengirim

@ref = box_data[0].no_referensi_bank

@rekening = box_data[0].rekening.no_rekening
@nama_bank = box_data[0].rekening.nama_bank

@uang = format_harga(box_data[0].nominal_terbayar)

@keterangan = "Pembayaran Faktur #{@no_faktur}


dari #{@bank} \n ke #{@nama_bank}[#{@rekening}] CodeRef: #{@ref}"

data << { "from1" => @waktu, "to1" => @keterangan,

"from2" => "", "to2" =>


@uang}

else

@detail = Marshal.load
(box_data[0].keterangan_barang)

@uang = format_harga(box_data[0].nominal_refund)

if box_data[0].kategori == "hotel"

@keterangan = "Refund
#{box_data[0].jumlah_refund}x kamar #{@detail.kamar.id_tipe_kamar} -
#{@detail.kamar.hotel.nama_hotel} \n Faktur No.
#{@detail.status_invoice.kode_pemesanan} - CodeRef:
#{box_data[0].kode_refund}"

end

if box_data[0].kategori == "penerbangan"

@keterangan = "Refund
#{box_data[0].jumlah_refund}x tiket #{@detail.penerbangan.maskapai}
[#{@detail.penerbangan.dari} - #{@detail.penerbangan.tujuan}] \n
Faktur No. #{@detail.status_invoice.kode_pemesanan} - CodeRef:
#{box_data[0].kode_refund}"

end

if box_data[0].kategori == "mobiltravel"

@keterangan = "Refund
#{box_data[0].jumlah_refund}x tiket mobil travel tujuan
#{@detail.mobiltravel.tujuan} \n Faktur No.
#{@detail.status_invoice.kode_pemesanan} - CodeRef:
#{box_data[0].kode_refund}"

end
data << { "from1" => @waktu, "to1" => @keterangan,

"from2" => @uang, "to2" => ""}

end

end

data <<
{ "from1" => "", "to1" => "", "from2" => "", "to2" => ""}

tab.shade_rows = :shaded

tab.data.replace data
data <<
{ "from1" => "", "to1" => "
T O T A L",

"from2" => "#{@total_debit}", "to2" =>


"#{@total_credit}"}

tab.data.replace data

tab.render_on(pdf)
pdf.text
"___________________________________________________________________
_____________________\n\n\n\n", :font_size => 10, :justification =>
:center
end

pdf.save_as("#{RAILS_ROOT}/public/laporan/laporan_#{@start}_#{
@end}.pdf")
end
end # ? dari Activerecord transaction

else
@pesan = "<blockquote>Format periodik
tanggal anda salah, silahkan masukan dengan benar.</blockquote>"
end

else
@pesan = "<blockquote>Format periodik tanggal
anda salah, silahkan masukan dengan benar.</blockquote>"
end

end

end
private

def format_harga(number)
begin
parts = number.to_s.split('.')
parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1.")
rescue
number
end
end

def create_pembayaran
@pembayaran_info = Pembayaran.new(params[:pembayaran_info])
@pembayaran_info["waktu"] = TimeZone['Jakarta'].adjust(Time.now)
@pembayaran_info["perubahan_terakhir"] =
TimeZone['Jakarta'].adjust(Time.now)

if @pembayaran_info.save
StatusInvoice.update_status(@invoice,params[:true])
@switcher = true
@power = false
flash[:notice2] = "Pembayaran untuk pemesanan nomor
#{@kode_invoice} telah diproses, silahkan masukan kode
voucher.</blockquote>"
end
end

def update_pemesanan
Pemesanan.transaction do
begin
@pemesanan = Pemesanan.find(params[:oid],
:lock=>true)

rescue
@error = ".:: Detail Pemesanan Anda Tidak
Terdaftar atau Faktur Pemesanan Bermasalah. Harap Hubungi Kami. ::."
else

if params[:pemesanan][:jumlah_pesanan].to_i >
@pemesanan.jumlah_pesanan && @dari_pembatalan
@batal_update = true
end

if params[:pemesanan][:kode_refund].nil? &&
@pemesanan.jumlah_pesanan <=
params[:pemesanan][:jumlah_pesanan].to_i && @dari_pembatalan
@batal_update = true
end

if !@batal_update
if @pemesanan.kamar_id
harga = @pemesanan.kamar.harga_kamar
status = "hotel"
kode =
"#{@pemesanan.kamar_id}#{@pemesanan.kamar.hotel.kode_hotel}"
jumlah_default =
@pemesanan.kamar.jumlah_kamar
barang = @pemesanan.kamar
end

if @pemesanan.penerbangan_id
harga = @pemesanan.penerbangan.harga
status = "penerbangan"
kode =
"#{@pemesanan.penerbangan_id}#{@pemesanan.penerbangan.no_penerbangan
}"
jumlah_default =
@pemesanan.penerbangan.jumlah_tiket
barang = @pemesanan.penerbangan
end

if @pemesanan.mobiltravel_id
harga = @pemesanan.mobiltravel.harga
status = "mobiltravel"
kode =
"#{@pemesanan.mobiltravel_id}#{@pemesanan.mobiltravel.kode_mobil}"
jumlah_default =
@pemesanan.mobiltravel.jumlah_kursi
barang = @pemesanan.mobiltravel
end

if ! params[:disability]
if params[:pemesanan][:hari_out] !=
nil
params[:pemesanan][:total_harga]
=
(params[:pemesanan][:jumlah_pesanan].to_i*harga*(params[:pemesanan][
:hari_out].to_date-params[:pemesanan][:hari_h].to_date).to_i)
else
@pemesanan.total_harga =
(params[:pemesanan][:jumlah_pesanan].to_i*harga)
end
data_barang = params[:pemesanan]
else
@pemesanan.kode_voucher =
params[:pemesanan][:kode_voucher]
data_barang = params[:true]
end
if @dari_pembatalan &&
params[:pemesanan][:jumlah_pesanan].to_i <
@pemesanan.jumlah_pesanan

Pembatalan.simpan_data(@invoice.id,params[:pemesanan],
@pemesanan, status, harga, (100-@website.service_fee.to_i)/100.000)
params[:pemesanan][:hari_h] =
@pemesanan.hari_h
params[:pemesanan][:hari_out] =
@pemesanan.hari_out
end

if (params[:pemesanan][:jumlah_pesanan].to_i
> 0 || @go_to == "pembayaran")

#if
params[:pemesanan][:jumlah_pesanan].to_i >=
@pemesanan.jumlah_pesanan

periksa_barang(barang,
params[:pemesanan][:hari_h].to_date, kode, jumlah_default,
params[:pemesanan][:hari_h] )
@jumlah_dikotak = @jumlah_dikotak
- @pemesanan.jumlah_pesanan

if @jml_dipesan +
@jumlah_dikotak + params[:pemesanan][:jumlah_pesanan].to_i > @stock
@tersedia = false
@pesan = "Penambahan jumlah
tidak dapat diproses karena telah penuh."
else
if @harga

params[:pemesanan][:total_harga] = @harga *
params[:pemesanan][:jumlah_pesanan].to_i
end
@tersedia = true
end

if @tersedia &&
@pemesanan.update_attributes(data_barang)
@invoice.total_biaya =
@invoice.pemesanans.inject(0){|x,y| x + y.total_harga}

StatusInvoice.update_status(@invoice,params[:true])
flash[:notice2] =
'<blockquote>&nbsp;&nbsp;Data Pemesanan Telah Berhasil
Diperbaharui.'
end

#end
end

if params[:pemesanan][:jumlah_pesanan].to_i
< 1 && @go_to != "pembayaran"
@pemesanan.destroy
@invoice.total_biaya =
@invoice.pemesanans.inject(0){|x,y| x + y.total_harga}

StatusInvoice.update_status(@invoice,params[:true])
flash[:notice2] =
'<blockquote>&nbsp;&nbsp;Data Pemesanan Telah Berhasil
Diperbaharui.'
end

else
@pesan = "Pembatalan tidak mengijinkan
penambahan jumlah barang."
end
end
end
end

end #<-- tutup kontroler

#@test = ServiceAgentController.instance_methods(false)
#untuk menampilkan semua method public di kontroller

Anda mungkin juga menyukai