implementasi dimana tahap sistem siap di gunakanan dan di uji dalam keadaan
37
38
5. axios akan berperan sebagai library yang digunakan untuk melakukan http
6. Vue akan di letakan pada view layer sesuai dengan konsep Model, View ,
7. Hubungkan Yii 2 dengan basis data yang telah dibuat, dengan melakukan
yang di generate akan melakukan extends dari ActiveRecord dan setiap satu
9. Vue secara langsung tidak bisa membaca model yang di generate oleh Yii 2
oleh karena itu perlu merubah fungsi dari Controller agar mampu
menyediakan data dalam format yang bisa di olah oleh vue yaitu JSON/XML
RESTfull web service , ActiveController akan membaca data pada model dan
merubah format data menjadi JSON/XML. controller yang saat ini berperan
11. Membuat sebuah sub direktori dengan nama app , di dalam folder app
'web/js/app.js').disableNotifications();
mix.setPublicPath('web/');
window.Vue = require('vue');
window.VueRouter = require('vue-router').default;
window.VueAxios = require('vue-axios').default;
window.axios = require('axios').default;
Vue.use(VueRouter, VueAxios, axios);
14. Inialisai vue object dan denefinikan router dengan menggunakan vue-router
<transition>
<router-view></router-view>
</transition>
<div v-if="this.$route.matched.length == 0">
<?= $content ?>
</div>
menjalankan perintah npm run dev dan menjalankan built-in server yii 2
Pada Gambar 4.11 merupakan kode pada salah satu bagian pada menu
bagian dropdown list. Nilai dari “kategori” akan di deklarasikan pada bagian data
perulangan data pada option digunakan v-for yang merupakan fungsi bawaan vue
dengan data yang akan kita panggil yaitu kategorimenu, kategorimenu sendiri
kumpulan data berbentuk array yang di dapat dari response http request melalui
axios. Untuk menampilkan data yang ada dalam vue atau binding kedalam view
digunakan sintaks “{{ }}” mustache seperti gambar 4.11 maka akan di tampilkan
menampilkan data menu dalam sebuah box , dengan menggunakan v-for akan
{{menu.nama}} yang berisi nama menu pada header divider tersebut. Sedangkan
(.) titik . selanjutnya untuk memberikan informasi ketersedian stok menu akan di
tampilkan stok menu dengan sebuah kondisi yang di letakan pada sebuah span .
tidak sama dengan 0 , maka span tersebut akan menampilkan jumlah stok menu.
Kondisi selanjutnya dalah jika kondisi pertama tidak terpenuhi atau nilai
menu.stok memiliki nilai sama dengan 0, maka akan di tampilkan span dengan
nilai “habis”. Kemudian terdapat sebuah button untuk melakukan sebuah event,
tombol tersebut menerima aksi yaitu click maka akan menjalankan sebuah fungsi
memiliki fungsi kondisi v-if , jika menu.stok tidak memiliki nilai maka tombol
<div class="col-md-5">
<div class="box">
<div class="box-header with-border bg-black-active">
<h5 class="box-title">DAFTAR PESANAN</h5>
46
<tr v-if="!keranjang.length">
<td colspan="5">
<h4 class="text-center">Belum Ada Pesanan</h4>
</td>
</tr>
@click="KurangiJumlah(krj.id_menu)"
v-if="krj.jumlah" >-</button>
<tr>
<td></td><td><strong>TOTAL</strong>:</td><td>
<strong>{{total_qty}}</strong>
</td>
<td>
<strong>Rp. {{formatHarga(total_harga)}}</strong>
</td>
</tr>
<tr><td colspan="5"><strong>KETERANGAN:</strong></td></tr>
<tr>
<td colspan="5">
<textarea v-model="pesanan.keterangan" class="form-
control" placeholder="Masukan Keterangan Tambahan">
</textarea>
</td>
</tr>
</tbody>
</table>
</div>
<div class="box-footer">
<button class="btn btn-primary btn-xs pull-left"
@click="ProsesPesanan()">PROSES</button>
</div>
</div>
</div>
Gambar 4.13 Kode Menampilkan Menu Pesanan Terpilih
Pada Gambar 4.13 merupakan baris kode dimana menu-menu yang terpilih
akan di tampilkan kepada pengguna sistem. Pada aturan bisnis terdapat kategori
pemesanan yang harus di tentukan sebelum pemesanan di proses , oleh karena itu
perlu di tampilan dalam view dalam bentuk dropdown list dengan mengambil data
dari data kategoriPesan , dengan menggunakan v-model seperti halnya pada filter
kategori menu pada Gambar 4.3. yang membedakan adalah pada dropdown list ini
di masukan sebuah event handling ketika terjadi perubahan nilai pada dropdown
48
list. Dengan menggunakan @change dan method yang akan di panggil adalah
pengguna sistem memilih “Makan di tempat” maka pilihan dropdown list nomor
meja akan di aktifkan, pada proses nya method OnChange akan mengganti nilai
data “tampil” akan menjadi true yaitu menampilkan pilihan nomor meja.
mengembalikan nilai data “tampil” menjadi nilai default yaitu false maka pilihan
dengan nama keranjang. Terdapat sebuah fungsi kondisi menggunakan v-if , jika
data keranjang tidak memiliki panjang atau nilai maka tampilkan sebuah tulisan
yang memberitahukan kepada pengguna sistem bahwa belum ada menu yang di
pilih.
tampilkan menu yang terpilih di dalam data keranjang. Data yang di tampilkan
Untuk memperoleh nilai sub total per items , dapat dilakukan dengan
jumlah item terpilih satu demi satu atau menghapus item terpilih secara langsung.
parameter yang di lewatkan akan id_menu dan sebuah kondisional v-if untuk
menonaktifkan tombol (-) jika nilai jumlah sudah bernilai 0, fungsi ini di buat agar
mengurangi satu per-satu. Terdapat sebuah event “click” yang akan memanggil
merupakan indeks array dari data keranjang dan id_menu dalam keranjang yang
total_harga, computed properties sebuah data yang nilainya tergatung pada data
yang lain penjelasan mengenai proses penghitungan ada pada Gambar 4.15. Di
umum data disini merupakan kumpulan variabel-variabel yang dapat di olah atau
di manipulasi. Data hanya dapat di gunakan oleh halaman atau kompomen itu
51
sendiri, sedangkan untuk pengiriman data antar kompomen pada penelitian ini
Pada Gambar 4.15 terdapat beberapa inialisasi data yang pertama adalah
data yang digunakan untuk menampung response dari http request pada bagian
method yang di jelaskan pada gambar 4.17 . data tersebut adalah data
dalam bentuk array yang di notasikan dengan simbol “[ ]”. Digunakan array
karena response yang di terima tidak hanya memiliki 1 data melainkan sebanyak
menampung menu-menu yang di pilih oleh pelanggan. Dan data pesanan yang
fungsi kondisi pada dropdown list . data tampil yang memiliki nilai false
4.15 , sehingga menu pilihan meja akan tampil ketika nilai data tampil bernilai
false.
“makanan” sehingga menu yang akan tampil ketika halaman pertama kali di load
computed: {
total_qty: function() {
return this.keranjang.reduce((total, keranjang) => {
return total + keranjang.jumlah;
}, 0);
},
total_harga: function() {
return this.keranjang.reduce((total, keranjang) => {
return total + keranjang.harga * keranjang.jumlah;
}, 0);
},
filterKategori() {
return this.menus.filter(row => row.id_ktmenu ===
this.kategori);
}
},
Gambar 4.16 Kode Program Computed Properties
Pada Gambar 4.16 merupakan baris kode yang digunakan untuk
adalah sebuah variabel yang nilai nya bergantung dari variabel lain. Pada bagian
total_qty , terdapat sebuah fungsi yang memiliki return value yaitu nilai dari
akumulasi jumlah atau quantity dalam array keranjang. Maka pada array
harga dan jumlah dalam array keranjang. Sehingga nilai kembalian adalah hasil
menu makanan. this.menu.filter() memiliki arti lakukanlah filter pada data menu
dengan kondisi id_ktmenu memiliki nilai yang sama dengan this.kategori atau
data kategori. Data kategori sudah di tentukan di awal yaitu memiliki nilai
“makanan” maka menu yang akan di tampilkan adalah menu makanan terlebih
dahulu.
ambilData(){
axios.get("/menu").then(response =>
{
this.menus = response.data;
});
},
AmbilKategoriPesan(){
axios.get("/kategori-pesan").then(response => {
this.kategoriPesan = response.data;
});
},
AmbilKategoriMenu(){
axios.get("/kategori-menu").then(response => {
this.kategoriMenu = response.data;
});
},
AmbilMeja() {
axios.get("/meja?sort=nomor_meja").then(response => {
this.mejas = response.data;
});
},
Gambar 4.17 Kode Pengambilan data dari Backend
Pada gambar 4.17 merupakan baris kode pada bagian method yang
digunakan untuk meminta data dari backend dengan memanfaatkan fungsi AJAX
resmi vue js untuk melakukan http request pada web service. Pada setiap method-
method di atas meggunakan teknik yang sama yaitu axios akan melakukan http
request dengan pola axios.get() di ikuti endpoint web service atau url webservice.
Jika tidak terjadi error atau data yang diminta ada maka axios akan memberikan
54
response berupa data. Namun data tersebut belum bisa di manipulasi , untuk bisa
mengelola data tersebut perlu disimpan dalam sebuah variabel maka dilakukan
this.menu sudah memiliki nilai yaitu kumpulan data yang di kirim dari backend.
axios.patch("/menu/" + id_menu, {
stok: stok_baru })
.then(response => {
})
.catch(error => console.log(error.response.data));
if (cari){
cari.jumlah++;
} else {
this.keranjang.push({
id_menu: id_menu,
jenis_menu: id_ktmenu,
nama: nama,
harga: harga,
jumlah: 1,
status_order: 1
});
}
this.SetLocalStorage();
let value = this.menus.find(menu => menu.id_menu ===
id_menu);
if (value) {
value.stok--;}
}
Gambar 4.18 Kode Tambah Ke Keranjang
55
event ketika ada menu yang di pilih yang di jelaskan pada Gambar 4.4 . Parameter
ekseskusi maka yang pertama akan terjadi pengurangan stok, dengan melakukan
patch request ke api menu sedangkan nilai yang dikirimkan adalah nilai dari
stok_baru. Nilai dari stok_baru ini di peroleh dari pengurangan stok lama
klik lebih dari satu kali. Yang akan bertambah adalah variabel jumlah di dalam
dengan menu yang di pilih maka akan memiliki nilai kembalian “true” , setelah
itu gunakan nilai kembalian ini pada sebuah fungsi kondisi. Jika nilai “cari”
bernilai “true” maka lakukan incriment pada variabel jumlah dengan cara
jumlah++ maka akan bertambah 1 setiap kali dilik pada menu yang sama.
Kemudian jika menu yang dipilih bukan menu yang sama, akan di
masukan dalam fungsi else yang akan di eksekusi ketika kondisi awal tidak
terpenuhi.. Yaitu menambah menu tersebut dalam array keranjang sebagai indeks
baru.
56
memanfaatkan fitur local storage pada browser untuk menyimpan data-data yang
ada pada variabel keranjang, metode ini digunakan untuk mengantisipasi ketika
tidak akan hilang baik ketika browser di refresh. Penjelasan tentang localstorage
Yang terkahir adalah mengurangi stok dari sisi view atau yang di lihat
langsung oleh user. dengan cara mencari dalam array menus yang memiliki
id_menu yang sama dengan menu terpilih. Jika bernilai true makan akan
hapusCart(number, id_menu) {
let cari = this.keranjang.find(
keranjang => keranjang.id_menu === id_menu);
if (cari_stok)
{
axios.patch("/menu/" + id_menu, {
stok: cari_stok.stok + cari.jumlah
})
.then(response => {
console.log(response.data);
})
.catch(error => console.log(error.response.data));
}
let value = this.menus.find(menu => menu.id_menu ===
id_menu);
if (value) {
value.stok = value.stok + cari.jumlah;
}
this.keranjang.splice(number, 1);
this.SetLocalStorage();},
Gambar 4.19 Kode Hapus Dari Keranjang
57
ketika pengguna sistem ingin menghapus menu pesanan yang terpilih. Untuk
merupakan indeks array pada data keranjang dan id_menu di gunakan untuk
A sebanyak 3 pcs. Maka stok menu A akan berkurang sebanyak 3 pcs, jika
atau update nilai 3 tersebut pada data menu. Sehingga yang pertama dilakukan
adalah mencari data menu terpilih yang ada pada data keranjang dengan
menjalankan fungsi yang kedua yaitu mencari data menu terpilih pada array
menus masih menggunakan fungsi find() pada javascript. setelah mendapat nilai
tersebut , maka dapat di masukan dalam fungsi kondisi jika . axios akan
melakukan http request yaitu patch untuk menambah data stok dalam array
Yang kedua adalah melakukan update stok pada sisi view , dengan teknik
yang sama yaitu menambah stok lama dengan jumlah yang terpilih sebelumnya.
Selanjutnya adalah menghapus data pada data keranjang dengan cara melakukan
splice , dikuit indeks dan parameter “1” menandakan yang di hapus 1 data array.
58
if (cari_stok) {
axios.patch("/menu/" + id_menu, {
stok: cari_stok.stok + 1
})
.then(response => {
console.log(response.data);
})
.catch(error => console.log(error.response.data));
}
if (cari) {
cari.jumlah--;
}
this.SetLocalStorage();
if (value) {
value.stok++;
}
}
Gambar 4.20 Kode Kurangi Jumlah Pesanan
Jika pada gambar 4.19 adalah metode yang dijalankan ketika pengguna
sistem menghapus menu terpilih, pada gambar 4.20 adalah metode yang
digunakan jika pada suatu kasus pelanggan ingin mengurangi jumlah pesananya
membeli menu A sebanyak 2 pcs oleh karena itu kasir/perlu mengurangi jumlah
pesanan sebanyak 1.
59
Yang pertama masih menggunakan cara yang sama yaitu fungsi find() pada
javascript yaitu mencari data pada array menus yang memilik id_menu yang
Jika nilai bernilai “true” makan akan di jalankan fungsi kondisi yaitu
menggunakan fungsi find() maka akan di cari pada data array menus jika bernilai
true makan stok pada array menus terpilih akan di tambah dengan 1.
ProsesPesanan() {
axios.post("/pesanan", this.pesanan).then(response => {
this.PesanBerhasil();
});
for (let i = 0; i < this.keranjang.length; i++) {
axios.post("/pesanan-detail", {
id_pesan: this.pesanan.id_pesan,
id_menu: this.keranjang[i].id_menu,
jenis_menu: this.keranjang[i].jenis_menu,
harga: this.keranjang[i].harga,
jumlah: this.keranjang[i].jumlah,
status_order: this.keranjang[i].status_order
})
.then(response => {
console.log(response.data);
})
.catch(error => console.log(error.response.data));
}
localStorage.clear("keranjang");
this.keranjang = [];
this.SetLocalStorage();
this.OneSingal()
},
Gambar 4.21 Kode Proses Pesanan
60
pesanan, pada method ini di eksikusi secara umum akan menjalankan dua fungsi
yaitu menyimpan data header dan data detail. Data header terdapat pada tabel
status pesan. Selanjutnya di data detail pada tabel pesanan_detail akan disimpan
http request yang akan di jalankan yang pertama adalah post ke endpoint
“pesanan” yang di kirimkan adalah data pesanan. Setelah sukses sistem akan
mengeksekusi http request yang kedua yaitu post data kerajang yang berisi menu-
keranjang tersebut memiliki banyak data, karena dalam sekali pemesanan seorang
pembeli bisa membeli lebih dari satu menu dalam satu nota. Maka perlu
menggunakan for untuk mengulang proses post sebanyak data yang ada dalam
didalam for tersebut ada post request dengan this.keranjang[i]. Setelah data
header dan data detail disimpan yang perlu dilakukan adalah menghapus
keranjang di set kembali menjadi array kosong sehingga sistem bisa menerima
pesananan selanjutnya.
push notifiaksi pada user aktif penjelasan OneSingal terdapat pada Gambar 4.14
61
SetLocalStorage() {
localStorage.setItem("keranjang",
JSON.stringify(this.keranjang));
},
GetLocalStorage() {
this.keranjang =
JSON.parse(localStorage.getItem("keranjang"));
},
Gambar 4.22 Kode Inialisasi Local Storage
Pada Gambar 4.22 merupakan potongan kode yang digunakan untuk
memanfaatkan local storage yang ada pada browser , localstorage sendiri adalah
dengan nama “keranjang” yang di simpan adalah semua data yang ada pada
mengambil data pada localstorage untuk disimpan dalam javascript object maka
OneSingal() {
var sendNotification = function(data) {
var headers = {
"Content-Type": "application/json; charset=utf-8",
Authorization:
"Basic MjQ1NGNlMWYtZjI3Ni00ZGE5LTk1OGMtNWI1NzMyYTNhMDYw"
};
var options = {
host: "onesignal.com",
port: 443,
path: "/api/v1/notifications",
method: "POST",
headers: headers
};
62
req.on("error", function(e) {
console.log("ERROR:");
console.log(e);
});
req.write(JSON.stringify(data));
.end();
};
var message = {
app_id: "1bd90289-0c1e-419a-bab2-bf400ec66778",
contents: { en: "HALO ! ADA PESANAN BARU SILAHKAN CEK DATA
PESANAN" },
included_segments: ["All"]
};
sendNotification(message);
}
Gambar 4.23 Kode Penggunan Push Notifikasi OneSignal
Pada Gambar 4.23 merupakan method yang digunakan untuk
platfrom yang bernama OneSingal.com. kode diatas adalah kode yang bisa di
performa aplikasi oleh karena itu pengujian di fokuskan pada pengujian performa
pada aplikasi web yang telah di upload pada server , hasil pengujian dapat dilihat