BAB IV IMPLEMENTASI SISTEM
4.5 Instalasi SMS Gateway
Perangkat lunak yang digunakan untuk SMS gateway adalah Ozeki
Message Server 6. Perangkat lunak ini merupakan perangkat lunak shareware.
Install Ozeki Message Server dan jalankan Ozeki Server Manager jika instalasi berhasil. Koneksi GSM Modem dengan Ozeki Message Server pada aplikasi ini terjalin dengan bluetooth. Nyalakan bluetooth GSM Modem, dan bluetooth pada
komputer atau laptop. Koneksikan keduanya.
Kemudian masuk ke Ozeki Server Manager. Pada menu Drivers pilih
Installed Drivers. Klik Install Drivers, pilih GSM Modem dan klik Install. Setelah
itu pilih kembali menu Drivers, akan ada GSM Modem 1, kemudian klik
Gambar 4.2 Konfigurasi GSM Modem
COM Port bisa dilihat dari Bluetooth Setting pada komputer atau laptop.
Setelah memilih Driver COM Port yang digunakan, klik AutoDetect. Maka model
dan tipe GSM Modem terdeteksi otomatis. Begitu juga dengan Phone Settings
akan terdeteksi secara otomatis.
Selanjutnya pilih menu Plugins – Installed Plugins. Klik pada Install
Plugins. Jika sudah terinstall pilih Configure. Klik pada tab Connection
Information, pilih Build database connection. Pilih Use Connection String dan
Pilih Microsoft OLE DB Provider for ODBC Drivers, kemudian klik Next.
Konfigurasi selanjutnya yang dibutuhkan adalah sebagai berikut :
Gambar 4.3 Konfigurasi Data Link Properties
Klik Test Connection untuk mencoba koneksi. Jika berhasil tekan OK dan
script build telah ada pada window Connection String sebelumnya. Klik OK dan
kembali ke Ozeki Server Manager.
Untuk mengkoneksikan, pilih menu Drivers kemudian GSM Modem 1 –
Connect. Kemudian pilih Plugins – DatabasePlugins 1 – Connect. Untuk melihat
koneksi berjalan atau tidak ada pada window status di kiri bawah. Koneksi yang
Gambar 4.4 Test Connection
Dengan demikian, sms gateway sudah dalam keadaan stand by dan
terkoneksi ke database serta siap menerima dan mengirimkan sms ke customer.
4.6 Trigger
Pada aplikasi ini juga dibuat trigger. Berikut query trigger yang dibuat
pada database Semut :
1. Trigger untuk update stok menu.
-- clear table temp order dulu -- DELETE FROM tempTableOrder; SET rowcount = 0;
OPEN curSplitMsg; splitloop: LOOP
FETCH curSplitMsg INTO tempID, tempString; IF done THEN LEAVE splitloop;
END IF;
SET rowcount = rowcount + 1; IF rowcount = 1 THEN SET NamaPemesan = ''; ELSEIF rowcount = 2 THEN SET NamaPemesan = tempString; ELSEIF rowcount = 3 THEN SET AlamatPemesan = tempString; ELSE
-- masukin pesanan yg masih berupa kode-jumlah ke temp tabel INSERT INTO tempTableOrder VALUES (NULL, tempString); END IF;
END LOOP; CLOSE curSplitMsg;
CALL show_error(CONCAT('rowcount: ', rowcount)); IF rowcount < 4 THEN
CALL send_warning(NEW.receiver, NEW.sender, 'format'); ELSE
SET IDCustomer = -1;
-- cek pesanan dan jumlahnya, klo available, masukkan ke detail pesanan, -- klo gak ada delete record di tabel pesan sesuai pesanID
SET kodeMenu = SUBSTRING_INDEX(tempString, '-', 1); SET OrderQuantity = SUBSTRING_INDEX(tempString, '-', -1); SET IDMenu = -1;
SET MenuAvailableQuantity = -1; -- menu available, masukkan detail
SELECT menuID, quantity INTO IDMenu, MenuAvailableQuantity FROM menu WHERE menuCode = kodeMenu;
IF (IDMenu > 0) AND (OrderQuantity <= MenuAvailableQuantity) AND (IDPesanan > 0) THEN
INSERT INTO pesandetail VALUES (NULL, IDPesanan, IDMenu, OrderQuantity); CALL update_menu(kodeMenu, OrderQuantity);
ELSEIF (IDMenu < 0) THEN
CALL send_warning(NEW.receiver, NEW.sender, CONCAT('ID menu ', IDMenu)); ELSEIF (OrderQuantity > MenuAvailableQuantity) THEN
CALL send_warning(NEW.receiver, NEW.sender, CONCAT('Maaf, menu dengan kode ', kodeMenu, ' telah habis. Silahkan ulangi pesanan anda'));
DELETE FROM pesan WHERE pesanID = IDPesanan; SET IDPesanan = -1;
SET done = true;
ELSEIF (IDPesanan < 0) THEN
CALL send_warning(NEW.receiver, NEW.sender, CONCAT('ID pesanan ', IDPesanan));
END IF; END LOOP; CLOSE curPesanan; IF IDPesanan > 0 THEN
CALL send_warning(NEW.receiver, NEW.sender, CONCAT('Terima kasih, kode pesanan anda: ', IDPesanan, '. Ketik status;kode pesanan anda untuk melihat status pesanan anda'));
END IF; END IF; ELSE
CALL send_warning(NEW.receiver, NEW.sender, 'format'); END IF;
-- clear temp table --
DELETE FROM tempSplittedMessage; DELETE FROM tempTableOrder; END
2. Trigger untuk menyaring nomor telepon customer yang sama.
-- apakah pemesan udah ada di dalam tabel customer?
SELECT custID INTO IDCustomer FROM customer WHERE custPhone = NEW.sender;
CALL show_error(CONCAT('custID : ', IDCustomer)); IF IDCustomer < 0 THEN
-- klo belum ada, masukkan ke tabel customer dulu
INSERT INTO customer VALUES (NULL, NamaPemesan, NEW.sender, AlamatPemesan);
-- data pemesan sekarang sudah ada di dalam tabel customer
SELECT custID INTO IDCustomer FROM customer WHERE custPhone = NEW.sender;
-- ambil idstatusinfo SET IDStatusInfo = -1;
SELECT statCode INTO IDStatusInfo FROM statusinfo WHERE statNote = 'order'; -- masukkan pesanan ke dalam tabel pesan
INSERT INTO pesan VALUES (NULL, IDCustomer, IDStatusInfo, NEW.receivedtime);
-- get ID pesanan SET IDPesanan = -1;
SELECT pesanID INTO IDPesanan FROM pesan WHERE statuspesan = IDStatusInfo AND custID = IDCustomer;
IF IDPesanan > 0 THEN SET done = false;
CALL show_error(CONCAT('pesanid : ', IDPesanan, ', time : ', now())); ELSE
SET done = true;
CALL show_error(CONCAT('pesanid tidak ada, time : ', now())); END IF;
-- sekarang masukkan detail pesanan ke tabel pesanan detail OPEN curPesanan;
orderloop: LOOP
FETCH curPesanan INTO tempString; IF done THEN LEAVE orderloop; END IF;
3. Trigger untuk menampilkan status pesanan.
IF rowcount <> 2 THEN
CALL send_warning(NEW.receiver, NEW.sender, 'format'); ELSE
SELECT (SELECT si.statNote FROM statusinfo si where si.statCode = p.statuspesan) INTO StatusOrder FROM pesan p WHERE p.pesanID = IDPesanan;
IF StatusOrder = '' THEN
INSERT INTO ozekimessageout (sender,receiver,msg,status)
values (NEW.receiver, NEW.sender,CONCAT('Pesanan dengan no: ', IDPesanan, ' tidak terdapat dalam database kami'),'send');
ELSE
INSERT INTO ozekimessageout (sender,receiver,msg,status)
values (NEW.receiver, NEW.sender,CONCAT('Pesanan anda sedang dalam proses : ', StatusOrder),'send');
END IF; END IF;
ELSEIF (LOWER(NEW.msg) LIKE LOWER('PESAN%')) THEN CALL split_message(NEW.msg, ';');
Trigger di atas dijalankan di saat ada sms masuk ke aplikasi. Trigger
Tabel 4.1 Format SMS
Condition Send Text Receive Text Warning Text
Informasi cara pemesanan info Ketik pesan;nama;alamat;kodemenu -jumlah;kodemenu2-jumlah2 untuk pemesanan atau ketik status;kodepesanan untuk melihat status pesanan Anda
Maaf format sms anda salah, ketik info untuk mendapatkan informasi cara pemesanan
Pesan
pesan;nama;alamat; kode pesanan-jumlah;kode menu2-jumlah2
Terima kasih, kode pesanan anda: ', IDPesanan, '. Ketik status;kode pesanan anda untuk melihat status pesanan anda
Maaf, menu dengan kode (kodeMenu) telah habis. Silahkan ulangi pesanan anda
Informasi
menu menu
01 Makanan 02 Minuman
Maaf format sms anda salah, ketik info untuk
mendapatkan informasi cara pemesanan
Status
pemesanan status;IDPesanan
Pesanan anda sedang dalam proses : (kondisi status pemesanan)
Pesanan dengan no (IDPesanan), tidak terdapat dalam database kami
Selain trigger, juga dibuat procedure untuk melengkapi kondisi dalam
trigger yang belum terpenuhi. Procedure yang dibuat diantaranya sebagai berikut:
1. ProcedureSendWarning
USE `semut`;
DROP PROCEDURE IF EXISTS send_warning;
CREATE PROCEDURE send_warning(vSender varchar(20), vReceiver varchar(20), vInfo varchar(160))
BEGIN
IF LOWER(vInfo) = LOWER('MENU') THEN
INSERT INTO ozekimessageout (sender,receiver,msg,status) values (vSender,vReceiver,(SELECT getMenu()),'send');
ELSEIF LOWER(vInfo) = LOWER('INFO') OR LOWER(vInfo) = LOWER('FORMAT') THEN
INSERT INTO ozekimessageout (sender,receiver,msg,status)
values (vSender,vReceiver,(SELECT warningMessage from warning WHERE
warningCode = vInfo),'send'); ELSE
INSERT INTO ozekimessageout (sender,receiver,msg,status) values (vSender,vReceiver,vInfo,'send');
END IF;
2. Procedure ShowError
USE `semut`;
DROP PROCEDURE IF EXISTS show_error;
CREATE PROCEDURE show_error(vInfo varchar(160)) BEGIN
INSERT INTO tblerrorinfo values (null, vInfo); END;
3. Procedure UpdateMenu
USE `semut`;
DROP PROCEDURE IF EXISTS update_menu $$
CREATE PROCEDURE update_menu (kodeMenu VARCHAR(5), orderedQuantity INT) BEGIN
DECLARE quant INT DEFAULT -1; DECLARE hasil INT DEFAULT -1;
SELECT menuID, quantity INTO hasil, quant FROM menu WHERE menuCode = kodeMenu;
UPDATE menu SET quantity = (quant - orderedQuantity) WHERE menuCode = kodeMenu;
END;
Jangan lupa untuk mengkonfigurasikan koneksi ODBC setelah membuat
database. Masuk ke ControlPanel – AdministrativeTool – DataSources (ODBC)
utnuk mengkonfigurasikan koneksi ODBC. Pada tab User DSN klik tombol Add,
pilih driver MySQL ODBC 5.1 klik Finish. Isikan paramater berikut: