• Tidak ada hasil yang ditemukan

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 PluginsInstalled 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 PluginsDatabasePlugins 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 ControlPanelAdministrativeToolDataSources (ODBC)

utnuk mengkonfigurasikan koneksi ODBC. Pada tab User DSN klik tombol Add,

pilih driver MySQL ODBC 5.1 klik Finish. Isikan paramater berikut:

Dokumen terkait