Skripsi
Oleh :
Yacobus Reinhart A P
NIM : 015314058
Skripsi
Oleh :
Yacobus Reinhart A P
NIM : 015314058
i
iv
PERNYATAAN
sesungguhnya bahwa skripsi yang saya tulis ini tidak memuat karya atau bagian
karya orang lain, kecuali pemikiran, metode atau hasil penelitian orang lain yang
Yacobus Reinhart A P
Penulis
v
Yang bertanda tangan di bawah ini, saya mahasiswa Universitas Sanata Dharma :
beserta perangkat yang diperlukan (bila ada). Dengan demikian saya memberikan
media lain untuk kepentingan akademis tanpa perlu meminta ijin dari saya
maupun memberikan royalty kepada saya selama tetap mencantumkan nama saya
sebagai penulis.
Dibuat di Yogyakarta
Yang menyatakan
Yacobus Reinhart AP
vi
HALAMAN PERSEMBAHAN
" !
# $ %
vii
HALAMAN MOTTO
viii
ABSTRAKSI
mencatat transaksi pemesanan tiket dan voucher hotel yang dilakukan oleh
aplikasi. Aplikasi ini mempunyai 3 level user, yaitu pelanggan, petugas pelayanan
dan menerima kode voucher dan tiket. Petugas pelayanan bertugas dalam
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
means that the application’s builded by 3 major components, they are : Model
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
server.
x
KATA PENGANTAR
Puji dan syukur penulis panjatkan kepada Allah Sumber Cinta Kasih
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,
1. Bapak Alb. Agung Hadhiatma, S.T., M.T., selaku Dosen Pembimbing , yang
menyelesaikan laporan tugas akhir ini. Terima kasih banyak pak, atas
semuanya.
2. Ibu Agnes Maria Polina, S.Kom., M.Sc., selaku Ketua Jurusan Teknik
3. Bapak JB. Budi Darmawan, S.T., M.Sc. dan Bapak Stevanus Wisnu Wijaya,
kepada penulis.
5. Kedua orang tua penulis yang sangat penulis kasihi, yang telah memberikan
apapun. Terima kasih Tuhan Allah karena telah memberikan orang tua seperti
7. Mas Hendy Irawan, The Rainbow Purple, sebagai ruby mentor untuk penulis,
yang telah memberikan buku Pro Active Record dan buku digital tentang ruby
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
11. Daus, Tanto, Henny, Damianus dan Yoseph serta seluruh sahabat-sahabatku
yang ada di Teknik Informatika. Terima kasih atas persahabatan yang kalian
12. Dan seluruh pihak yang telah ikut ambil bagian dalam penyelesaian laporan
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
Yacobus Reinhart A P
( Penulis )
xiii
DAFTAR ISI
Halaman Judul...............................................................................................................i
Halaman Persetujuan……………………………………………………………...ii
Halaman Pengesahan……………………………………………………………..iii
Halaman Pernyataan……………………………………………………………....iv
Halaman Persembahan……………………………………………………………vi
Abstraksi.....................................................................................................................viii
Abstract........................................................................................................................ix
Kata Pengantar……………………….........................................................................x
Daftar isi.....................................................................................................................xiii
Daftar Gambar.............................................................................................................xxi
4.3.25 User Interface Pengaturan Umum pada Halaman Admin .......... 177
Pelanggan ....................................................................................213
Pelanggan ………………………………………………………218
Pelanggan ……………………………………………………...220
Pembayaran …………………………………………………....222
Pembatalan ……………………………………………………..223
DAFTAR PUSTAKA.........................................................................................229
LAMPIRAN ......................................................................................................230
xxi
DAFTAR GAMBAR
BAB I
PENDAHULUAN
komunikasi tanpa batas, memicu para pelaku bisnis memanfaatkan internet sebagai
media promosi digital terhadap produk dari jenis usaha yang dilakukannya, salah
Internet tidak hanya digunakan sebagai ajang promosi tetapi juga 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
yang dilakukan oleh user terhadap jenis barang atau jasa yang ditawarkan.
Dengan adanya kemungkinan informasi yang dapat berubah setiap saat, dan
proses bisnis dan kebutuhan user, maka perangkat lunak akan dibentuk dengan pola
sistem melainkan hanya pada kelas atau bagian dari pola tertentu saja dan
2
mobil travel, informasi hotel dan kamar hotel, harga tiket atau kamar
akutansi.
penerbangan, mobil travel dan hotel serta stock item product yang dilengkapi dengan
pesawat, mobil travel atau kamar hotel tanpa harus mencari atau datang
pemesanan tiket pesawat, mobiltravel dan voucher hotel adalah metodologi berobjek.
1. Studi pustaka
1. Membuat use case diagram, diagram kelas dan diagram komponen dalam
perancangan sistem.
1. Translasi desain yang lebih detail yaitu dengan penulisan program sesuai
Bab I : Pendahuluan
Pada bab ini berisi tentang cara penerapan konsep dasar yang telah
yang telah dibuat yang meliputi cara kerja program yaitu berupa
Pada bab ini berisi tentang kelebihan dan kekurangan pada sistem
BAB VI : Penutup
Pada bab ini berisi tentang kesimpulan dan saran dari penulisan
LANDASAN TEORI
2.1.2 Ruby
penulisan kodenya. Setiap proses yang ditulis dalam sebuat file dengan ekstensi .rb.
1. String
pemrograman. String literal merupakan suatu string tetap yang dibuat dengan
Output:
C:\ruby\ruby hello.rb
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
9
10
Collection adalah :
• Range
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)
Output
false
false
true
10
11
• Array
Merupakan suatu daftar nama secara utuh atau urutan dari element
puts hello
puts belajar
puts pelajaran
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
• Hash
Adalah sekumpulan elemen dalam satu kelompok atau array yang setiap
sebagai berikut :
Output:
BJ Habibie
true
false
false
12
13
3. Methods (metode)
yang telah dibentuk. Metode yang dibentuk pada umumnya diikuti dengan
parameter atau nilai input untuk menambah nilai dari kode perintah yang
Output :
4. Class
variable untuk memanggil objek. Didalam ruby class dapat diambil dari class
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
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
ruby. Dalam membuat suatu web aplikasi, rails memeliki struktur atau arsitektur
aplikasi, yaitu :
• Model : struktur ini bertanggung jawab dalam menjaga keadaan dari suatu
Controller atau database. Model digunakan untk proses insert, update, dan
delete dari tempet penyimpanan data, seperti yang terjadi dalam relasional
basisdata.
memberikan batasan, membaca input user. Dalam hal ini Model bertindak
15
16
dalam pengisian KRS online, yang dimaksud dengan view adalah daftar
atau menginput data, tapi tidak bisa menfilter data yang masuk, artinya
browser user.
16
17
Didalam aplikasi rails, perintah input pertama kali di kirim ke router yang
Rails. Didalam OMR table dipetakan ke Class, baris ke objek dan kolom ke
17
18
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.
View dan Controller merupakan bagian dari MVC, Controller menyuplai data
View Support
Controller Support
interaksi antara user, view dan model. Fungsi lain dari Controller yaitu:
18
19
setiap halaman.
19
20
20
21
Ruby on Rails menyimpan semua MVC di app directory yang terletak di dalam
aplikasi folder root. Dalam aplikasi website, rails mengkodekan informasi dalam
21
22
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
Dapat dilihat bahwa untuk membuat halaman index untuk about us saja
22
23
View. Struktur rhtml tidak jauh berbeda dengan html, hanya saja rhtml
nyata atau fakta-fakta yang dirumuskan dalam sekelompok lambing tertentu yang
Unit Penyimpan
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.
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.
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:
hubungan logic antar data dalam suatu basis data berdasarkan pada obyek
24
25
menjelaskan kepada user tentang hubungan logic antar data dalam basis
agregat data, atau record. Level paling tinggi dalam suatu hirarki
harus hanya terdapat satu node yaitu root. Untuk node yang lebih
leaves.
25
26
parent.
tabel yang terdiri atas sejumlah baris yang menunjukan record dan
Merupakan model penyimpanan data dalam basis data secara teknis atau
fisik penyimpanan.
Diagram tersusun atas 3 komponen utama, yaitu entitas, atribut dan relasi antar
entitas.
1. Entitas
Contoh :
26
27
Kostumer Kostumer
Order Order
2. Atribut
entitas. Atribut dinyatakan dengan symbol ellips dan nama atribut harus
sebuah garis.
Contoh:
27
28
Nama_Kostumer Password
User_Id Jenis_Identitas
Kostumer
Telp_Rumah No_Identitas
Telp_Hp Alamat_Kostumer
Merupakan kejadian atau transaksi yang terjadi antar dua entitas yang
1. Kerelasian One-to-one
28
29
Kerelasian jenis ini terjadi jika nilai dari entitas kedua dapat
29
30
5. Kerelasian berganda
Pinjam
Kembali
6. Kerelasian rekursif
Mata_kuliah
Syarat
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
mengidentifikasikan setiap record dalam relasi. Pada table di bawah ini daftar
Istilah Keterangan
Atribut (kolom) Sekelompok data rinci yang mempunyai arti. Setiap atribut
tertentu.
Candidate Key Satu atau gabungan atribut yang bersifat unik yang dapat
Primary Key Bagian Candidate Key yang dipilih sebagai kunci utama dalam
relasi.
Alternate Key Bagian dari Candidate Key yang tidak dipilih sebagai kunci
Foreign Key Satu atau gabungan atribut yamg menjadi Primary Key dalam
31
32
mencapai suatu tujuan tertentu (Jogiyanto, 1999). Sebuah perusahaan juga merupakan
penelitian, pembukuan, dan personalia yang mana semuanya bekerja sama untuk
mencapai keuntungan baik bagi para pekerjanya maupun bagi pemilik perusahaan.
1. Batas sistem
sistem dengan sistem yang lainnya atau dengan lingkungan luarnya. Batas
tersebut.
3. Penghubung Sistem.
32
33
subsistem lainnya.
4. Masukkan Sistem
5. Keluaran Sistem
Keluaran (output) adalah hasil dari energi yang diolah dan diklasifikasikan
6. Pengolah Sistem
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
33
BAB III
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
Berikut adalah proses bisnis yang dilakukan oleh perusahaan biro wisata dan
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
Karyawan akan memesan pada sistem online maskapai yang sesuai dengan
diserahkan kepada pelanggan. Jika tidak ada tiket yang tersedia maka
Untuk memesan tiket mobil travel atau tiket mobil untuk perjalanan jauh
menanyakan status tiket mobil travel berdasarkan kota tujuan dan tanggal
35
36
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
beserta hotelnya, karyawan dari biro perjalanan akan memesan kamar hotel
melalui sistem online dari hotel yang dipesan, atau menghubungi hotel
hotel, informasi nama, alamat, nomor identitas dicatat pada sistem online.
36
37
kode voucher hotel pada sebuah kertas beserta faktur pembayaran, dan
resmi dari maskapai dibandara atau ke kantor biro perjalanan dari pelanggan
dari masing-masing maskapai, dan ada waktu tertentu uang tidak bisa
akan dikenakan biaya 30% dari nila nominal harga tiket, pada hari
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,
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
dengan baik, banyaknya sistem online yang digunakan membuat laporan cetak
Gambaran sistem yang akan dibuat adalah dengan menciptakan aplikasi yang
memesan tiket pesawat, mobil travel dan kamar hotel, dapat mengorganisasi transaksi
waktu. Agar aplikasi tepat sasaran maka perlu dijelaskan berdasarkan kebutuhan user
38
39
dan sisa tiket yang tersedia, selain informasi mengenai biro wisata
dan perjalanan.
mobil travel dan kamar hotel dalam satu kali proses checkout. Untuk
39
40
pelanggan.
40
41
pelanggan.
41
42
mobiltravel.
pemesanan, hal ini dapat dilakukan juga secara manual oleh petugas
42
43
sistem serta kode voucher atau tiket elektronik. Tetapi jika barang
3. Admin
43
44
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
44
45
45
46
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
hotel, informasi mobil travel dan informasi harga serta tiket serta melakukan
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
berada pada halaman petugas pelayanan yang bersifat private. Pada halaman Petugas
membaca laporan transaksi. Admin adalah user yang memiliki hak penuh terhadap
segala akses, termasuk untuk mengases dan melakukan hak Petugas Pelayanan. Tugas
46
47
sistem yang sedang dirancang, bagaimana masing-masing alur berawal, decision yang
serta kota tujuan dan jumlah penumpang atau tiket. Setelah form diisi oleh
pelanggan, terjadi proses validasi data input, jika data input memenuhi
47
48
telah dipesan dan proses selesai, jika tidak proses kembali kepada
Pada gambar 3.3 diatas, aktivitas pemesanan kamar hotel dimulai dengan
ditampilkan, maka User akan mengisi form pencarian kamar hotel dan
dilajutkan dengan proses validasi input data, jika input data benar makan
detail hotel dan kamar hotel yang diinginkan, diikuti dengan proses
48
49
Pemesanan dan proses selesai. Jika kamar tidak tersedia maka proses
trave, jika proses validasi data input tidak salah makan proses akan
memesan tiket mobil travel. Apabila tiket tersedia maka detail pemesanan
tiket mobil travel akan ditampilkan pada Kotak pemesanan, dan jika tidak
49
50
4. Melakukan Registrasi
Pada gambar 3.5 proses dimulai dengan Pelanggan memasukan nilai data
untuk simpan data dan session login halaman pelanggan tercipta. Proses
selesai.
Pada gambar 3.6a, Pelanggan memulai proses dengan mengisi form login
50
51
method dikirim ke kontroler untuk diproses. Jika login benar dan memiliki
pesanan, tetapi jika tida ada pemesanan, maka sistem akan melanjutkan ke
Pada gambar 3.6b, proses dimulai dengan user mengakses link logout atau
keluar untuk diproses sebegai perintah log-out oleh Sistem. Sistem akan
pada halaman public atau user keluar dari halaman pelanggan dan proses
selesai.
51
52
registrasi dan login, jika salah satu form itu diisi dengan benar maka
52
53
data pelanggan pada formulir data pelanggan yang telah berisikan nilai
Pada Gambar 3.9 Sistem memanggil data faktur yang tersimpan di basis
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
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
parameter login username dan password, jika login benar Sistem akan
jika status user adalah admin, dan sistem akan menampilkan halaman
Proses selesai.
55
56
data pada form pembayaran, setelah data isian selesai, proses akan
data pemesanan pelanggan pada form yang tersedia. Setelah User Petugas
melakukan verifikasi data input, jika data benar maka Sistem akan
56
57
menyimpan data pemesanana hasil modifikasi user pada basis data dan
proses selesai.
validasi data masukan, jika data masukan salah maka Sistem akan
57
58
melewati validasi nilai data maka data modifikasi akan disimpan oleh
tercantum dalam daftar. Perintah user akan diproses oleh Sistem dengan
selesai.
58
59
pelanggan yang tercantum dalam daftar. Perintah user akan diproses oleh
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
59
60
Sistem. Jika hasil validasi input data oleh sistem memenuhi syarat makan
Sistem akan membentuk laporan PDF dan disimpan pada hosting. Proses
Selesai.
Admin, jika nilai data memenuhi syarat maka Sistem akan menyimpan
60
61
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
berakhir.
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
61
62
diminta dan Data atau record-record hari khusus yang terkait dengan
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
62
63
berisi nilai data, setelah User melakukan modifikasi nilai data yang
terdapat pada form, maka data yang dikirim kembali kepada Sistem akan
pada sistem basis data, User mengkases link untuk menghapus kamar
63
64
Data Hotel yang telah terekam di sistem basis data, setelah data tersedia,
ada. Jika proses update data telah selesai maka sistem akan menyimpan
data terupdate kedalam basis data dan proses Update Data Hotel berakhir.
Pada Gambar 3.28 Sistem menampilkan Data Mobil Travel yang telah
terekam di sistem basis data yang diminta oleh user Admin, setelah data
ditampilkan pada formulir. Jika proses update data telah selesai maka
64
65
sistem akan menyimpan data terupdate kedalam basis data dan proses
permintaan User dengan menghapus record hotel yang diminta dan Data
atau record-record kamar serta hari khusus yang terkait dengan hotel yang
diminta dan Data atau record-record hari khusus yang terkait dengan
65
66
terhadap data kota, provinsi, atm bersama, rekening, info login, dan
pengaturan umum. Apa bila user admin akan menciptakan data baru maka
66
67
67
68
68
69
69
70
Gambar 3.38 Diagram Sequensial Proses Bentuk Data Pembayaran dan Rekam Kode Voucher
70
71
71
72
5. Edit Password
6. Hapus Faktur
72
73
7. Hapus Pelanggan
8. Bentuk Laporan
73
74
9. Proses Login
74
75
Gambar 3.47 Diagram Sequensial Proses Baca, Bentuk, Modifikasi & Bentuk Data Hotel
Gambar 3.48 Diagram Sequensial Proses Baca, Bentuk, Modifikasi & Bentuk Data Kamar
75
76
Gambar 3.49a Diagram Sequensial Proses Baca, Bentuk, Modifikasi & Bentuk Data Mobil travel
Gambar 3.49b Diagram Sequensial Proses Baca, Bentuk, Modifikasi & Bentuk Data Penerbangan
76
77
Gambar 3.50 Diagram Sequensial Proses Baca, Bentuk, Modifikasi Data Global Config
Gambar 3.51 Diagram Sequensial Proses Baca, Bentuk, Modifikasi Data Hari Khusus
77
78
78
79
79
80
80
81
81
82
82
83
83
84
84
85
Dalam tahap ini akan dilakukan proses translasi dari class diagram yang
sudah dibuat pada gambar 3.35 menjadi Physical data model yang digambar
Physical Data Model yang disusun dapat dilihat pada daftar tabel berikut
ini:
1. Tabel Penerbangans
primary key pada tabel ini. Tabel penerbangans dapat digsunakan oleh
!"#
$ !"#
% !"#
!"#
% !"#
% $ !"#
!"# &
!"#
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
$ ' !"#
!"#
!"#
$ ( !"#
( !"#
$ !"#
!"#
!"#
$ && !"#
&& !"#
&& !"#
$ && !"#
&& !"#
&& !"#
3. Tabel Mobiltravels
Tabel ini berisi data mobil travel agar menghasilkan informasi untuk
86
87
$ !"#
% !"#
!"#
% $ !"# '
% !"#
!"# &
$ ( !"#
4. Tabel Kamars
Tabel ini berisi data Kamar Hotel yang akan digunakan dalam pemesanan
kamar hotel oleh pelanggan, sedangkan oleh user petugas pelayanan table
!"#
$ !"#
% $ !"# &
$ !"# &
$ ( !"#
87
88
5. Tabel Atm_bersamas
Tabel ini berisi data bank yang terdaftar dalam ATM bersama yang
User admin dan pelanggan dapat menggunakan data dari table ini. Field id
$ $ !"#
$ !"#
6. Tabel barang_terpesans
Tabel ini berisi data sementara mengenai data item berada di Kotak
dilakukan oleh pelanggan dan juga digunakan oleh user petugas pelayanan
!"#
!"#
% !"#
!"#
!"#
!"#
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.
% !"#
$ ( !"#
$ ) ( !"#
!"#
( !"#
& !"#
( & !"#
( !"#
( !"#
$ % $ ( !"#
!"#
!"#
&& !"#
!"#
&& !"#
8. Tabel karyawans
Tabel ini data yang berkaitan dengan karyawan seperti petugas pelayanan
dan admin. Tabel karyawans mengandung data login admin dan petugas
89
90
!"#
$ !"#
!"#
!"#
$ !"#
!"#
Tabel 3.8 Physical Data Model untuk tabel karyawans
9. Tabel kostumers
Tabel ini berisi data pelanggan seperti login pelanggan terhadap halaman
key pada Field id. Selain user pelanggan, user admin dan user petugas
$ !"#
!"#
!"#
$ !"#
!"#
!"#
!"#
$ !"#
!"#
Tabel 3.9 Physical Data Model untuk tabel kostumers
Tabel ini berisi daftar kota yang digunakan sebagai kota keberangkatan dan
kota tujuan. Tabel ini memiliki primary key pada Field id dan dapat diakses
90
91
$ !"#
Tabel 3.10 Physical Data Model untuk tabel kotas
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
91
92
$ !"#
!"#
$ ( !"#
% !"#
$ !"#
!"#
$ !"#
Tabel 3.12 Physical Data Model untuk tabel pembatalans
Tabel ini berfungsi untuk mencatat pembayaran yang dilakukan oleh user
!"#
% ) !"#
$ !"#
!"#
$ !"#
$ !"#
) !"#
$ !"#
$ !"#
Tabel 3.13 Physical Data Model untuk tabel pembayarans
92
93
$ !"#
!"#
!"#
!"#
%
$ !"#
Tabel 3.14 Physical Data Model untuk tabel pemesanans
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
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
Tabel ini berfungsi untuk menyimpan semua sesi atau session yang
dilakukan oleh semua user. Pada umumnya data table sesi digunakan untuk
primary key pada field id dan foreign key pada session_id dan updated_at
* +,*
!"# -
. ( !"#
!"# -
Tabe 3.l7 Physical Data Model untuk tabel sessions
94
95
+,*
$ !"#
!"#
$ !"#
) !"#
$ !"#
$ !"#
Tabe 3.l8 Physical Data Model untuk tabel status_invoices
travel atau kamar hotel pada hari terntetu dan tanggal tertentu. Data Tabel
95
96
!"#
!"#
$ !"#
!"#
% !"#
!"#
) ( !"#
!"#
!"#
/ !"#
0 !"#
Tabe 3.l9 Physical Data Model untuk tabel tanggal_barangs
Tabel ini berfungsi untuk menyimpan tipe kamar atau jenis kamar yang
$
Tabe 3.20 Physical Data Model untuk tabel tipe_kamars
Tabel ini terbentuk secara otomatis pada saat user admin menjalankan
96
97
!"#
Tabe 3.21 Physical Data Model untuk tabel schema_info
Tabel ini terbentuk secara otomatis pada saat user admin menjalankan
database.
!"#
!"#
Tabe 3.22 Physical Data Model untuk tabel plugin_schema_info
97
98
98
99
99
100
100
101
101
102
102
103
103
104
104
105
105
106
106
107
107
108
108
109
109
110
110
111
111
BAB IV
IMPLEMENTASI SISTEM
Sistem ini dibangun sebagai Sistem Pemesanan Tiket untuk Pesawat, Mobil
travel) yang dapat dijangkau tanpa batasan waktu dan tempat. Aplikasi Point Of
Sales (POS) Untuk Toko Handphone. Sistem i-travel ini akan menggunakan arsitektur
Sistem ini dapat mendukung penggunaan secara multi user dikarenakan sistem
lebih dari satu user atau pengguna, yang didukung oleh Transaction Object pada
Halaman Pelayanan, dan Halaman Admin. Halaman Pemensanan dapat diakses oleh
memerlukan otentikasi melalui login. Dalam sistem i-travel berbasis web ini terdapat
• Kostumer atau Pelanggan dalam sistem ini bertindak sebagai user yang
melakukan akses terhadap data hotel dan kamar, data mobil travel dan data
113
• Sevice Agent atau Petugas Pelayanan bertindak sebagai user yang melakukan
manupulasi dan pencatatan data pemesanan pesawat, kamar hotel, mobil travel,
• 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
• Server
ruby on rails.
• Client
113
114
User interface ini merupakan sekumpulan cara atau implimentasi proses yang
dilakukan oleh user terhadap sistem yang direalisasikan dalam bentuk input (user
114
115
Pada halaman utama atau index dari website ini, sistem menampilkan kepada user
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
value dari field “tujuan” pada tabel penerbangan yang terkait dengan keberangkatan
pesawat. @cari_arrival akan digunakan untuk drop down menu kota tujuan
115
116
menampilkan kota keberangkatan dengan mencari data value dari field “kota” yang
terdapat pada tabel kota, Perintah atau kode yang digunakan adalah sebegai berikut.
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.
116
117
perusahaan maupun informasi meta data website seperti kata kunci pencarian,
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).
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
Pada menu pencarian kamar hotel, user memasukan pilihan berupa parameter
tanggal masuk, parameter tanggal keluar, dan parameter jumlah kamar, serta
...
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
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
119
120
Output pencarian pada gambar 4.3, memiliki link pada judul hotel dan kata
digunakan untuk menampilkan detail kamar yang disewakan oleh hotel yang
Berikut adalah tampilan tabel status kamar, jika user mengklik salah satu link
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.
begin
@hotel = Hotel.find(params[:id])
rescue
…
else
@carikamars = @hotel.kamars
@detail = params[:do]
@log_full = []
@date_full = []
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
jumlah_kamar yang terdapat pada tabel kamar berdasarkan relasi antar tabel.
Berdasarkan gambar 4.4 diatas, untuk memesan kamar hotel, user dapat
keluar dan jumlah kamar, kemudian menekan tombol “pesan hotel”. Berikut
adalah tampilan dan skrip yang digunakan untuk memproses kamar hotel
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
ActiveRecord::Base.transaction do
if params[:jml_kamar]
@jml_diminta = params[:jml_kamar].to_i
123
124
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
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
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
Gambar 4.6 Pencarian mobil travel pada halaman itravel/mobiltravel dan halaman index
Pada saat pencarian, user akan memasukan parameter kota tujuan serta tanggal
Berikut script yang digunakan untuk memproses pencarian tiket mobil travel.
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 = []
127
128
128
129
tiket mobil travel dengan memilih jumlah penumpang dan kemudian menekan
tombol “pesan”. Input parameter berupa id, date dan travel dikirim pada
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
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
Pada halaman index dan halaman penerbangan dari itravel Controller terdapat
130
131
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)
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
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
133
134
begin
rescue
...
else
@check_in = tanggal.to_date
@jml_diminta = params[:penumpang].to_i
134
135
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
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
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
136
137
137
138
Proses registrasi akan mengirim parameter kostumer yang berisi nilai atribut
138
139
belongs_to :kamar
belongs_to :penerbangan
belongs_to :mobiltravel
belongs_to :status_invoice
...
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
if invoice_id < 0
invoice_id = -invoice_id
end
waktu_pesan = TimeZone['Jakarta'].adjust(Time.now)
total_biaya = kotakpemesanan.total_harga
kotakpemesanan.items.each do |item|
self.dari_kotakbarang(item, faktur_id)
end
139
140
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
Apabila user pelanggan tidak dapat melakukan login yang disebabkan oleh
tidak dapat mengingat password atau kata sandi, maka user pelanggan dapat
140
141
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
mailer.
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
recipients pelanggan.nama_dan_email
from "Demo Skripsi <skripsi.itravel@tentang.travel.net>"
subject "Cara Mengembalikan Password Anda"
body :website => website,
142
143
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,
Gambar 4.19a Halaman lupa password setelah mengirim informasi ke email pelanggan
143
144
http://localhost/kostumer/lupa_pass/38003360/ba74221c29c93c7b04aa195a7d2ef1738ee6eb8
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
144
145
Gambar 4.20 Tampilan pada halaman kostumer lupa_password, setelah meng-click url yang
Pada aplikasi i-travel yang telah dibentuk, user pelanggan memiliki halaman
user harus melakukan proses login terlebih dahulu seperti gambar berikut:
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
require 'digest/sha1'
...
private
def validate
if password != konfirmasi_password
errors.add("password", "yang anda ketik tidak sama.")
146
147
end
...
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
User akan menerima email pemberitahuan dari aplikasi web mengenai adanya
transaksi menggunakan akun atau data pribadi user dan informasi transaksi
147
148
Berikut tampilannya :
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
Pada gambar 4.24 dapat dilihat bahwa daftar transaksi mengandung link pada
148
149
parameter yang terdapat dilink seperti parameter kode_pesan dan action akan
Gambar 4.24 Tampilan pada halaman root/kostumer/invoice – detail transaksi user pelanggan
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
modifikasi terhadap data kostumer. Data yang dapat dimodifikasi adalah nilai
data:
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
tampilannya :
152
153
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
memasukan nilai atribut username dan password. Berikut adalah tampilan dan
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
require 'digest/sha1'
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
end
Skrip 4.25 Karyawan ActiveRecord, kode untuk validasi login kostumer.
SHA1. Jika user karyawan melakukan login dengan informasi tidak benar,
Dan jika user karyawan berhasil melakukan login maka tampilannya adalah
sebagai berikut :
156
157
Pada halaman index terdapat menu pilihan seperti Arsip Pelanggan, Arsip
yang mengandung nilai dari atribut tabel kostumer dan penghitungan jumlah
157
158
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
kostumer.
158
159
Pada gambar 4.30 diatas terdapat link atau penghubung dari Arsip pelanggan
ini :
...
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> Data Kostumer Telah Berhasil Diperbaharui.'
end
end
end
end
...
end
Skrip 4.27 Service_agent Kontroller, kode untuk modifikasi data kostumer atau pelanggan
160
161
pemesanan :
161
162
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
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
Seperti pada gambar 4.32, tabel cari faktur dan nama, jika pencarian faktur
Gambar 4.32b Tampilan pencarian gagal, menggunakan fasilitas cari faktur & nama
Pada halaman arsip pemesanan, jika salah satu link kode faktur atau
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
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
perintah didalamnya.
terpengaruh pada quantitas barang yang terdapat di sistem web itravel, dengan
164
165
yang berguna untuk mencari faktur. Jika faktur diketemukan oleh sistem,
maka tampilannya aka seperti pada gambar 4.34 dan 4.35 dibawah ini. Untuk
165
166
dalam bentuk parameter yang akan diproses oleh kontroller service_agent dan
166
167
Proses input kode voucher seperti pemesanan kamar hotel dan pemesanan
tiket mobil travel dapat dilakukan jika informasi pemesanan telah dimasukan
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
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
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
dapat dimodifikasi (disabled), dan pada tabel barang pemesanan hanya field
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
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
172
173
tanggal keberangkatan atau tanggal check in dan check out, untuk tipe barang
pesanan yang sama, tetapi tidak diijinkan untuk penambahan jumlah pesanan.
params[:date2]). Jika hasil pencarian tanggal awal dan akhir tidak memiliki
untuk membentuk laporan dalam jenis file pdf terdapat pada lampiran kode.
173
174
User karyawan dapat mengganti password atau kata sandi setiap saat melalui
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
175
176
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.
176
177
dari website yang berupa, judul website, kata kunci pencarian, deskripsi
agen dan kebijaksanaan perusahaan. Berikut adalah tampilan dan kode yang
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"
end
end
end
Skrip 4.33 kode pada admin kontroller, metode global_config, untuk bisnis logic CRUD
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 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
Atm bersama digunakan untuk informasi kepada user pelanggan yang akan
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
end
Skrip 4.35 kode pada admin kontroller, metode atm_bersama, untuk bisnis logic CRUD
181
182
sistem transfer bank, transfer atm maupun sms banking. Berikut adalah kode
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
end
Skrip 4.36 kode pada admin kontroller, metode rekening, untuk bisnis logic CRUD
183
184
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
185
186
penambahan data provinsi. Data value dari atribut provinsi yang terdapat pada
tabel provinsis digunakan sebagai data value dari provinsi kostumer. Berikut
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
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 params[:do] == "create"
@hotel = Hotel.new(params[:hotel])
188
189
periksa_gambar_hotel(params[:upsave], @hotel)
if params[:do] == "destroy"
Hotel.find(params[:id]).destroy
flash[:notice2] = 'Data telah berhasil dihapus.'
@locker = false
end
189
190
pembentukan data kamar. Data kamar berhubungan dengan data hotel dalam
bentuk relasi antar tabel satu untuk banyak. Berikut adalah proses modifikasi
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
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
191
192
modifikasi dan penambahan tipe kamar. Data value dari atribut tipe_kamar di
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
serta rute penerbangan dan harga tiket.. Berikut adalah tampilan dan kode
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
end
Skrip 4.42 kode pada admin kontroller, metode penerbangan, untuk bisnis logic CRUD
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
end
Skrip 4.43 kode pada admin kontroller, metode mobiltravel, untuk bisnis logic CRUD
penentuan hak aksesnya seperti admin atau client, dan data karyawan lainnya
seperti kode pegawi, username, password, dan nama. Berikut adalah kode
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
end
Skrip 4.44 kode pada admin kontroller, metode info_login, untuk bisnis logic CRUD
Untuk keluar dari halaman admin, maka metode logout akan dijalankan
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
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
end
Skrip 4.46 kode pada admin kontroller, metode logout
200
201
201
BAB V
ANALISA HASIL
Gambar 5.1 Arsitektur Three Tier dan Model-View-Controller untuk halaman index website
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
digunakan adalah ItravelController dan metod yang digunakan adalah def index.
Setelah proses pengidentifikasian pada sistem routing selesai, def index pada
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
yang ditampilkan pada web browser user. Hasil pengisian formulir dikirim melalui
GET request pada http beserta parameter. Kemudian Router aplikasi rails menangkap
mengidentifikasikan kelas Controller, dan metod atau action yang akan digunakan.
203
204
Pada Route.rb, teridentifikasi bahwa controller yang akan digunakan adalah itravel
Gambar 5.2 Arsitektur Three Tier dan Model-View-Controller untuk Pencarian Tiket Pesawat
204
205
waktu user dalam mengakses sistem, dengan memeriksa waktu perubahan terakhir
pada tabel sessions melalui bantuan kelas model Session. Setelah triger pada
penerbangan yang diminta oleh user, didalam def penerbangan terdapat penggunaan:
penerbangans.
jumlah tiket yang sudah terpesan user, baik yang sudah dibayar atau
dan def cari_tanggal yang bertujuan untuk memeriksa kuota tiket yang
205
206
perintah helper serta bahasa ruby pada file View Itravel diolah menjadi bahasa
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
menjadi http://localhost:3000/penerbangan?cari=tiket
Kotak Pemesanan
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
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
tanggal tertentu.
yang sudah dipesan oleh user baik yang sudah dibayar maupun masih dalam
proses konfirmasi.
dipesan oleh user agar bisa ditampilkan pada View Itravel khususnya kotak
pemesanan.
208
209
Setelah semua proses operasional model dan operasi fungsi didalam action def
kedalam file View Itravel, tampilan kotak pemesanan berada pada render
controller memanggil action view untuk mengolah bahasa ruby menjadi bahasa
209
210
yang ditampilkan pada browser. Setelah user mengirim hasil input, internet protokol
mengirim nilai parameter ke sistem router. Di router, sistem memverifikasi alamat url
dalam table kostumers melalui Model Kostumer. Sebelum disimpan Model Kostumer
Karena setelah proses registrasi user telah memasuki halaman kostumer. Pada metod
login, ActionView dipanggil dan mengolah view layout kostumer.rhtml dan view
barang pesanan dikotak) ke dalam bahasa HTML yang kemudian dikirim ke browser
user, sehingga user dapat membaca konfirmasi pemesanan setelah halaman registrasi.
210
211
internet supaya sistem memproses pemesanan user. Permintaan user diterima oleh
211
212
barang yang dipesan kedalam tabel pemesanans. Didalam tabel pemesanan terdapat
metod peralihan ini, action view dijalankan untuk menampilkan View Layout
Pelanggan
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
adalah KostumerController dan metod yang digunakan adalah invoice dengan nilai
Didalam metod invoice, informasi data pelanggan dan informasi faktur dicari
sehingga apabila hasil pencarian diketemukan maka record-record terkait pada tabel
213
214
pada faktur digital. Dengan bantuan Action View, metod invoice mempresentasikan
status pembayaran dan data pelanggan dapat dibaca oleh user melalui web
browsernya.
214
215
pelanggan ditampilkan halaman ubah profile yang berisi formulir data pelanggan.
melalui protokol internet ke alamat sistem yang dituju. Kemudian sistem menerima
digunakan. Dalam hal ini, controller yang teridentifikasi adalah kostumer dan action
digunakan untuk mencari data pelanggan yang dengan nilai id 100 pada tabel
kostumers.
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
215
216
bantuan Action View kedalam bahasa HTML dan mengirimnya ke browser user,
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
yang diterima berdasarkan Controller dan action yang terkandung didalam url beserta
parameternya. Berikut adalah gambar pengujian MVC dari sistem yang sudah
216
217
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
kedalam bahasa HTML dan mengirimnya ke web browser untuk dibaca oleh user.
User petugas pelayanan atau admin melakukan login pada web browser yang
kemudian dikirim ke sistem router dengan hasil identifikasi controller dan action
pemetaan di Router selesai, metod login memverifikasi input user melalui Model
mendapatkan nilai atribut yang sesuai dengan input login user. Setelah hasil verifikasi
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.
yang dipesan user pada faktur digital yang ditampilkan oleh browser pada halaman
dirubah, perintah perubahan dikirim melalui internet dan diterima oleh sistem Router.
218
219
pelanggan.
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
edit_invoice.rhtml dengan bantuan Action View, sehingga kelas View dapat diolah
kedalam bahasa HTML sehingga web browser dapat menampilkan output yang dapat
220
221
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
oleh Router. Setelah Router mengidentifikasi controller dan action yang akan
hapus_invoice. Di dalam metod ini, Model StatusInvoice mencari faktur dengan nilai
dengan tabel pemesanans, Model Pemesanan dapat menghapus semua record yang
delete_all. Setelah semua data barang pesanan dari faktur ber-id 34 dihapuskan,
34 dari database. Dengan demikian proses menghapus faktur pelanggan telah selesai,
update tampilan arsip pemesanan (invoice_list) pada web browser user melalui
Action View.
221
222
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
222
223
digunakan dan def pembayaran sebagai metod yang akan dijalankan. Setelah
data baru pembayaran pelanggan. Dengan bantuan Model Pembayaran, record baru
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
View ServiceAgent dengan mengolah bahasa ruby menjadi bahasa HTML dan
mengirimnya ke web browser user, sehingga user dapat membaca hasil inputan.
diterima oleh sistem Router. Didalam Sistem Router, terjadi identifikasi alamat URL
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.
224
225
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
perubahan pada faktur pemesanan. Pada View Pembatalan terdapat 2 file render yaitu
dibatalkan). Informasi ini ditampilkan kepada user di Web Browsernya atas bantuan
Action View.
Yogyakarta
belum sempurna, hal ini dapat dilihat apabila halaman telah expired
tindakan pertama.
225
226
226
BAB VI
PENUTUP
6.1 KESIMPULAN
6.2 SARAN
pembayaran secara online atau real time seperti kartu kredit dan debi, sistem
• Konfirmasi pembayaran dengan sistem transafer akan lebih baik dan lebih
cepat jika aplikasi ini dikembangkan dengan fasilitas upload gambar atau
• Untuk menjawab tantangan berpromosi melalui search egine, aplikasi ini lebih
LAMPIRAN
228
DAFTAR PUSTAKA
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> 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
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 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
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
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})
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.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
for
data_batal in @pembatalan
data =
[{ "from1" => "", "to1" => "",
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)
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,
end
end
data <<
{ "from1" => "", "to1" => "", "from2" => "", "to2" => ""}
tab.shade_rows = :shaded
tab.data.replace data
data <<
{ "from1" => "", "to1" => "
T O T A L",
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> 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> Data Pemesanan Telah Berhasil
Diperbaharui.'
end
else
@pesan = "Pembatalan tidak mengijinkan
penambahan jumlah barang."
end
end
end
end
#@test = ServiceAgentController.instance_methods(false)
#untuk menampilkan semua method public di kontroller