You are on page 1of 233

PROYEK AKHIR

HALAMAN JUDUL
LAYANAN PENYEDIA INFORMASI KREDIT
UKM BERBASIS SMS GATEWAY

Oleh :

BAHARUDDIN
NRP. 7406 040 080

Dosen Pembimbing :

Isbat Uzzin Nadhori, S.Kom


NIP. 132 303 873

Arif Basofi, S.Kom


NIP. 132 303 872

JURUSAN TEKNOLOGI INFORMASI


POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SURABAYA
2008
LAYANAN PENYEDIA INFORMASI KREDIT UKM BERBASIS SMS
GATEWAY

PROYEK AKHIR

Oleh :
BAHARUDDIN
7406 040 080

Diajukan Sebagai Salah Satu Syarat untuk menyelesaikan Studi pada


Program Pendidikan Diploma IV
di
Politeknik Elektronika Negeri Surabaya-ITS

Surabaya, Januari 2008


Disetujui oleh :

Tim Penguji Proyek Akhir : Dosen Pembimbing :

1. Drs. Achmad Basuki, M.Kom 1. Isbat Uzzin Nadhori, S.Kom


NIP: 132 093 221 NIP: 132 303 873

2. Tessy Badriyah, S.Kom, MT 2. Arif Basofi, S.Kom


NIP: 132 297 020 NIP: 132 303 872

HALAMAN PENGESAHAN
3. Yuliana Setiowati, S.Kom
NIP: 132 300 678

Mengetahui,
Ketua Jurusan Teknologi Informasi

Arna Fariza, S.Kom, M.Kom


NIP: 132 233 198

ii
ABSTRAK

Pentingnya informasi kredit usaha kecil dan menengah (UKM) bagi


pihak yang membutuhkannya untuk mengembangkan unit usahanya dimasa
kedepan dimana dalam situasi sekarang yang kesulitan membangun usaha.
Untuk memperoleh informasi kredit sebagian besar orang masih harus
mengakses sumber informasi secara langsung ke sumber yang menyediakan
informasi tersebut dan jika informasi yang dicari tidak ditemukan maka
sumber lain yang menjadi sasaran pencarian berikutnya. Layanan SMS(Short
Message Service) pada handphone yang menawarkan kemudahan dan biaya
yang murah dapat mengurangi permasalahan tersebut diatas. Layanan ini
sangat cocok untuk diterapkan dalam mencari informasi mengenai kredit
usaha kecil menengah.
Dikarenakan hal tersebut diatas, maka dalam tugas akhir ini dibuat
sebuah sistem aplikasi berbasis SMS Gateway yang dapat menyediakan /
memberikan informasi mengenai kredit usaha (UKM). Sehingga dapat
dijadikan salah satu jalan alternatif untuk mendapatkan informasi mengenai
perkreditan usaha dengan mudah dan cepat.
Hasil pembuatan proyek akhir ini adalah sebuah server SMS Gateway
yang bekerja tanpa adanya operator, mampu memberi informasi dan mencari
informasi ke pihak perbankan sesuai dengan informasi yang diminta oleh
pelanggan dan kemudian mengirimkan informasi tersebut kepada pelanggan
yang meminta informasi tersebut.

Kata Kunci: SMS Gateway, Sistem dua arah

iii
ABSTRACT

Important of small and medium industry credit information (UKM) to


party requiring it to develop its business unit a period of to the fore where in
present situation which is difficulty develop effort. To get credit information
most people still have to access the source of information directly to source
of providing the information and if searched information not be found hence
other source which become next seeking target. Service of SMS (Short
Message Service) at handphone offering cheap expense and amenity can
lessen the problems above. this is Service very suited for applied in searching
information of small and medium industry credit.
Because of mentioned above, in this final project made an application
system based on SMS Gateway able to provide or giving credit information of
(UKM). So that can be made one of the alternative way to get credit
information easily and quickly.
Result of making of this final project is work server SMS Gateway
without existence of operator, can give information and look for information
to banking as according to information asked by customer and then deliver
the information to customer asking for the information

Keyword: SMS Gateway, Two Way Direction System

iv
KATA PENGANTAR

Assalamua’laikum Wr. Wb.


Alhamdulillah, Dengan mengucapkan Puji dan Syukur kepada Allah
SWT, yang telah melimpahkan rahmat dan karunia-Nya, sehingga penulis
dapat menyelesaikan Proyek Akhir ini dengan judul :

LAYANAN PENYEDIA INFORMASI KREDIT UKM


BERBASIS SMS GATEWAY

Proyek Akhir ini adalah merupakan kewajiban bagi setiap mahasiswa


Politeknik Elektronika Negeri Surabaya (PENS-ITS) dengan tujuan untuk
memenuhi salah satu persyaratan untuk kelulusan pada program studi
Diploma IV Jurusan Teknologi Informasi di Politetnik Elektronika Negeri
Surabaya (PENS-ITS).
Dengan selesainya penulisan buku Proyek Akhir ini, penulis berharap
semoga buku ini dapat berguna dan bermanfaat bagi pembaca pada umumnya
dan bagi penulis khususnya serta bagi semuanya yang merasa berkepentingan
Akhir dari penulisan buku ini, penulis menyadari bahwa dalam
penulisan buku ini masih terdapat kesalahan dan kekurangan mengingat
penulis hanyalah seorang manusia biasa yang tak luput dari kesalahan dan
kekurangan. Untuk itu, segala kritikan dan saran sangat diharapkan demi
kesempurnaan dan perbaikan selanjutnya.

Wassalamu’alaikum Wr. Wb

Surabaya, Januari 2008

Penulis

v
UCAPAN TERIMA KASIH

Alhamdulillahirabbil ‘alamin, Penulis sangat bersyukur kepada Allah


SWT yang telah memberikan rahmat dah hidayahNya sehingga Proyek Akhir
ini dapat terselesaikan. Dalam menyelesaikan Proyek Akhir ini juga tidak
lepas dari bimbingan, dukungan dan dorongan dari berbagai pihak. Untuk itu
dengan segala kerendahan hati pada kesempatan ini penulis mengucapkan
terima kasih yang sebesar-besarnya kepada :

1. Bapak Dr. Ir. Titon Dutomo M.Eng, selaku Direktur Politeknik


Elektronika Negeri Surabaya(PENS-ITS)
2. Ibu Arna Fariza, S.Kom, M.Kom, selaku Ketua Jurusan Teknologi
Informasi
3. Bapak Isbat Uzzin Nadhori S.Kom dan bapak Arif Basofi S.Kom,
selaku Dosen Pembimbing Proyek Akhir. Terimakasih banyak atas
bimbingan dan bantuannya dalam menyelesaikan Proyek Akhir ini,
mohon ma’af yang sebesar-besarnya bila ada tindakan maupun
perkataan penulis yang kurang berkenan dihati bapak.
4. Kepada seluruh Dosen yang mengajar di Jurusan Teknologi
Informasi, terimakasih banyak atas ilmu yang telah diberikan kepada
penulis.
5. Kepada Dosen penguji Proyek Akhir yang turut menyempurnakan
tugas Proyek Akhir ini.
6. Ibu, Bapak, Istri dan keluarga besar tercinta, yang banyak
memberikan kasih sayang dan do’anya kepada penulis.
7. Kepada semua teman-teman Kru AnakKampoeng02 yang berada di
kediaman Sutorejo Selatan XI / I, terimakasih banyak atas segala
bantuannya, semoga kita bisa berkumpul kembali di lain
kesempatan.
8. Kepada teman-teman mahasiswa D4 IT Dikjur 5, merupakan tahun
yang menyenangkan bersama kalian semua. Ma’af jika selama saya
memimpin terdapat hal-hal yang kurang tepat bagi teman-teman
semua, saya tidak pernah merasa sebagai seorang pemimpin tetapi
saya adalah seorang pelayan kalian semua yang telah memilih saya.

Segala ucapan terima kasih tentunya belum cukup buat segala jasa dan
bantuannya semua. Hanya itu yang bisa penulis ucapkan, semoga Allah SWT
membalas semua kebaikan Anda.

vi
DAFTAR ISI

HALAMAN JUDUL.......................................................................................i
HALAMAN PENGESAHAN .......................................................................ii
ABSTRAK.................................................................................................... iii
ABSTRACT ..................................................................................................iv
KATA PENGANTAR ...................................................................................v
UCAPAN TERIMA KASIH ........................................................................vi
DAFTAR ISI ................................................................................................vii
DAFTAR GAMBAR .....................................................................................x
DAFTAR TABEL.........................................................................................xi

BAB I PENDAHULUAN .............................................................................1


1.1 LATAR BELAKANG.......................................................................1
1.2 PERUMUSAN MASALAH .............................................................2
1.3 BATASAN MASALAH ...................................................................2
1.4 TUJUAN ...........................................................................................2
1.5 METODOLOGI PENULISAN .........................................................3
1.6 SISTEMATIKA PEMBAHASAN....................................................3

BAB II TEORI PENUNJANG ....................................................................7


2.1 BASIS DATA ...................................................................................7
2.1.1 Definisi Basis Data.....................................................................7
2.1.2 Sistem Basis Data(DBMS).........................................................8
2.1.3 Bagian-Bagian Basis Data..........................................................9
2.1.4 Relationship .............................................................................10
2.2 SMS (Short Message Service).........................................................11
2.2.1 Karakteristik SMS....................................................................11
2.2.2 Layanan Aplikasi SMS ............................................................12
2.2.3 SMS Gateway ..........................................................................13
2.3 PEMROGRAMAN BORLAND DELPHI ......................................13
2.3.1 Mengenal IDE Delphi ..............................................................13
2.3.2 Object Inspektor.......................................................................15
2.3.3 Component pallete ...................................................................16
2.3.4 Thread ......................................................................................17
2.4 GAMMU (GNU All Mobile Management Utilities).......................18
2.5 SQL (Structured Query Language) .................................................18
2.5.1 Mengenal SQL .........................................................................19
2.5.1.1 Data Definition Language.................................................19

vii
2.5.1.2 Data Manipulation Language............................................19
2.6 MySQL............................................................................................20
2.6.1 Kelebihan MySQL ...................................................................20

BAB III PERANCANGAN DAN PEMBUATAN SISTEM....................23


3.1 DIAGRAM KERJA SISTEM .........................................................23
3.2 PROSES INFORMASI ...................................................................26
3.2.1 Registrasi Anggota...................................................................26
3.2.2 Input Informasi Data Kredit .....................................................27
3.2.3 Update Data Kredit ..................................................................27
3.2.4 Request Informasi ....................................................................28
3.3 PENGOLAHAN INFORMASI.......................................................29
3.3.1 Penerimaan Pesan (SMS).........................................................30
3.3.1.1 Check Regitrsi Anggota ....................................................32
3.3.1.2 Check perintah pesan untuk UKM....................................33
3.3.1.3 Check perintah pesan untuk Bank.....................................34
3.3.1.4 Check perintah pesan untuk user belum teregistrasi .........36
3.3.2 Proses Kirim/ Balas Pesan .......................................................38
3.4 DESAIN DATABASE....................................................................39
3.4.1 Desain ER Diagram Sistem UKM SMS Gateway ...................39
3.4.2 Mapping Skema ER Diagram Sistem UKM SMS Gateway ....41
3.4.3 Pembentukan Struktur Tabel....................................................42
3.5 PENETAPAN PERINTAH PENGIRIMAN PESAN .....................47
3.6 DESAIN APLIKASI GUI...............................................................50
3.7 PEMBUATAN SISTEM.................................................................55
3.7.1 Spesifikasi Kebutuhan Sistem..................................................55
3.7.2 Pembuatan Tray Icon System...................................................55
3.7.3 Membuat Koneksi ....................................................................56
3.7.3.1 Koneksi ke Database.........................................................56
3.7.3.2 Koneksi HP ke Server SMS ..............................................56
3.7.4 Pembacaan Pesan Masuk .........................................................57
3.7.5 Pengecekan SMS Tertunda ......................................................58
3.7.6 Pengambilan Pesan Informasi pada Server SMS .....................59
3.7.7 Fungsi Thread ..........................................................................64

BAB IV PENGUJIAN DAN ANALISA....................................................65


4.1 MENJALANKAN APLIKASI UKM SMS GATEWAY ...............65
4.2 PROSES QUERY DATABASE .....................................................69
4.3 PENGGUNAAN PENYEDIA LAYANAN....................................69
4.4 PERMINTAAN LAYANAN INFORMASI ...................................70
4.5 PEMBUATAN FILE LOG .............................................................79

viii
4.5.1 File Terima1.log.......................................................................80
4.5.2 File Kirim1.log.........................................................................80
4.5.3 File ukmsmsgateway.log..........................................................81
4.6 KESALAHAN – KESALAHAN YANG MUNGKIN TERJADI ..81

BAB V PENUTUP ......................................................................................83


5.1 KESIMPULAN ...............................................................................83
5.2 SARAN ...........................................................................................83

DAFTAR PUSTAKA ..................................................................................85


BIOGRAFI PENULIS
LAMPIRAN

ix
DAFTAR GAMBAR

Gambar 2.1 Proses sharing sistem basis data ..................................................8


Gambar 2.2 Tampilan Awal IDE Borland Delphi .........................................14
Gambar 2.3 Tampilan menu, Icon dan Tab Komponen Delphi.....................14
Gambar 2.4 Jendela Object Inspector............................................................15
Gambar 2.5 Form tempat untuk merancang antarmuka program ..................15
Gambar 2.6 Editor source program/ unit.pas.................................................16
Gambar 2.7 Tampilan komponen Pallete Delphi...........................................16
Gambar 3.1 Diagram Kerja Sistem................................................................23
Gambar 3.2 DFD level 0 Sistem UKM SMS Gateway .................................24
Gambar 3.3 DFD level 1 Sistem UKM SMS Gateway .................................25
Gambar 3.4 Diagram alir proses penerimaan pesan ......................................30
Gambar 3.5 Diagram alir olah pesan .............................................................31
Gambar 3.6 Diagram alir cek registrasi anggota ..........................................32
Gambar 3.7 Diagram alir check perintah pesan untuk ukm...........................33
Gambar 3.8 Diagram alir check perintah pesan untuk bank ..........................35
Gambar 3.9 Diagram alir check perintah pesan user belum teregistrasi........37
Gambar 3.10 Diagram alir kirim pesan informasi kepada pengirim..............38
Gambar 3.11 ER Diagram Sistem UKM SMS Gateway ...............................40
Gambar 3.12 Skema fisik database Sistem UKM SMS Gateway..................41
Gambar 3.13 Diagram Blok pembuatan aplikasi sistem................................50
Gambar 3.14 Tampilan halaman menu informasi .........................................52
Gambar 3.15 Tampilan halaman pada menu Banking...................................52
Gambar 3.16 Tampilan informasi pada menu UKM .....................................53
Gambar 3.17 Tampilan informasi pada menu SMS Gateway .......................53
Gambar 3.18 Tampilan pada menu Info SMS Gateway ................................54
Gambar 3.19 Tampilan form about UKM-SMS Gateway.............................54
Gambar 4.1 Tampilan aplikasi pada awal running ........................................65
Gambar 4.2 Tampilan aplikasi pada menu Banking......................................66
Gambar 4.3 Tampilan aplikasi pada menu UKM ..........................................67
Gambar 4.4 Tampilan aplikasi pada menu SMS Gateway ............................67
Gambar 4.5 Tampilan aplikasi pada menu SMS Gateway ............................68
Gambar 4.6 Tampilan halaman form about ...................................................68
Gambar 4.7 Tampilan icon aplikasi UKM SMS Gateway.............................69
Gambar 4.8 File Log pesan masuk ke server SMS........................................80
Gambar 4.9 File Log pesan keluar dari server SMS......................................80
Gambar 4.10 File Log monitor Sistem UKM SMS Gateway berjalan ..........81

x
DAFTAR TABEL

Tabel 3.1 Struktur tabel tbserversms ............................................................43


Tabel 3.2 Struktur tabel tbukm ......................................................................43
Tabel 3.3 Struktur tabel tbtawaran.................................................................43
Tabel 3.4 Struktur tabel tbbank .....................................................................44
Tabel 3.5 Struktur tabel tbkredit....................................................................44
Tabel 3.6 Struktur tabel tbkreditsyarat ..........................................................44
Tabel 3.7 Struktur tabel tbrequest..................................................................45
Tabel 3.8 Struktur tabel tbsmsmasuk.............................................................45
Tabel 3.9 Struktur tabel tbsmskeluar .............................................................46
Tabel 3.10 Struktur tabel tbsmspending ........................................................46
Tabel 3.11 Struktur tabel tbsmsperintah ........................................................46
Tabel 3.12 Perintah registrasi dan pengisian data anggota ............................47
Tabel 3.13 Perintah Request Informasi oleh anggota UKM..........................48
Tabel 3.14 Perintah Pengisian serta Update data oleh pihak BANK.............49
Tabel 4.1 Layanan Registrasi anggota...........................................................70
Tabel 4.2 Layanan Request Informasi ...........................................................73
Tabel 4.3 Layanan pemberi informasi ...........................................................76

xi
BAB I

PENDAHULUAN

1.1 LATAR BELAKANG

Perkembangan teknologi menuntut manusia lebih untuk mencari


dan mendapatkan informasi dengan cara mudah dan cepat untuk
kebutuhan tujuan bisnisnya, dimana disuatu tempat informasi tersebut
tidak tersedia maka tempat lainnya yang menjadi sasaran utama. Salah
satu layanan informasi yang terkait dengan hal diatas adalah informasi
mengenai kredit usaha kecil menengah. Kredit usaha kecil menengah
cenderung banyak dibutuhkan oleh orang-orang dalam membuka
maupun mengembangkan usahanya.
Selama ini media yang digunakan untuk mencari dan memperoleh
informasi mengenai kredit usaha masih melalui majalah, surat kabar,
televisi, internet maupun akses langsung ke penyedia informasi yang
dapat dikatakan bahwa pihak yang membutuhkan informasi harus
mencari maupun mengakses sumber informasi.
Layanan SMS pada handphone, menawarkan kemudahan dan
kecepatan memperoleh informasi yang dibutuhkan. Layanan ini cocok
untuk diterapkan dalam mencari informasi mengenai kredit usaha kecil
menengah.
Dari hal tersebut diatas, maka diperlukan suatu aplikasi berbasis
SMS yang bisa melayani permintaan informasi kredit oleh pihak yang
membutuhkannya dan juga bisa mencarikan informasi kredit ke Bank-
bank tanpa melalui operator, Sehingga dapat dijadikan salah satu solusi
untuk mendapatkan informasi mengenai kredit usaha dengan mudah dan
cepat.
1.2 PERUMUSAN MASALAH

Adapun yang menjadi permasalahan pada pembuatan proyek akhir


ini adalah Bagaimana membangun server SMS gateway yang bisa
melayani permintaan info kredit oleh pihak yang membutuhkannya dan
juga bisa mencarikan info kredit ke Bank-bank tanpa melalui operator.

1.3 BATASAN MASALAH

Dikarenakan sangat luasnya permasalahan yang terjadi pada


sistem informasi UKM, dan juga waktu yang terbatas serta kemampuan
yang ada, maka pada proyek akhir ini ditentukan batasan masalah yang
akan dibahas. Adapun batasan masalah yang dijelaskan sebagai berikut :

1. Informasi kredit yang diberikan hanya kepada anggota yang


meminta informasi tersebut dan telah terdaftar di server SMS
gateway.
2. Pencarian info kredit dilakukan hanya kepada Bank-bank yang telah
terdaftar dalam server SMS gateway dengan kriteria Bank tersebut
membuka layanan permintaan info kredit dari server SMS gateway.
3. Perangkat Handphone yang digunakan pada Server SMS Gateway
adalah NOKIA dalam hal ini yaitu NOKIA 5110 atau 8210.
4. Permasalahan biaya yang dikenakan kepada pihak yang mencari
informasi tidak dibahas dalam pembuatan proyek aplikasi ini.
5. Program aplikasi dibuat dengan menggunakan Borland Delphi 7.0
dan GAMMU

1.4 TUJUAN

Tujuan dari pembuatan sistem informasi UKM berbasis SMS


Gateway ini adalah untuk Membuat aplikasi SMS Gateway dengan
menerapkan sistem dua arah yang dapat melayani permintaan info kredit
oleh pihak yang membutuhkannya dan juga bisa mencarikan info kredit
ke Bank jika dalam server SMS Gateway tidak tersedia.

2
1.5 METODOLOGI PENULISAN

Metodologi yang digunakan dalam proyek akhir ini adalah


sebagai berikut.
1. Studi Pustaka
Melakukan tinjauan pustaka mengenai sistem Layanan Penyedia
Informasi Kredit UKM Berbasis SMS Gateway yang telah diteliti
sebelumnya untuk mengetahui metode-metode penyelesaian yang
berhubungan dengan masalah pemberian informasi dua arah.
2. Melakukan analisis kebutuhan sistem Layanan Penyedia Informasi
Kredit UKM
3. Perancangan/ desain Sistem
Melakukan Perancangan/ desain sistem basis data (database) yang
normal.
4. Menggambarkan proses pengolahan pesan yang terjadi pada
Layanan Penyedia Informasi Kredit UKM dalam bentuk diagram
alir (Flow chart)
5. Pembuatan sistem
Mengimplementasikan hasil perancangam sistem yang diawali
dengan pembuatan sistem database menggunakan MySQL dan
dilanjutkan dengan pembuatan sistem aplikasi UKM berbasis SMS
gateway dengan menggunakan Delphi dan GAMMU.
6. Pengujian dan analisa Sistem untuk mengetahui kinerja dari sistem
yang telah dibuat dan juga mengetahui sejauh mana kemampuan
kerja sistem dalam memberikan informasi maupun mencari
informasi.
7. Penyusunan Laporan Proyek Akhir

1.6 SISTEMATIKA PEMBAHASAN

Sistematika pembahasan yang akan dijelaskan pada penulisan


buku laporan Proyek Akhir ini terdiri dalam beberapa bagian Bab yaitu:

BAB I PENDAHULUAN

Secara umum menjelaskan rincian secara keseluruhan dalam


proses pembuatan buku maupun aplikasi Proyek Akhir ini yang meliputi.

1. Latar Balakang
2. Perumusan Masalah

3
3. Batasan Masalah
4. Tujuan
5. Metodologi Penulisan
6. Sistematika Pembahasan

BAB II TEORI PENUNJANG

Menjelaskan dasar-dasar teori penunjang dalam pembuatan


aplikasi proyek akhir ini yang berisi:

1. Basis Data
2. SMS (Short Message Service)
3. Pemrograman Borland Delphi
4. GAMMU (GNU All Mobile Management Utilities)
5. SQL (Structured Query Language)
6. MySQL

BAB III PERANCANGAN DAN IMPLEMENTASI SISTEM

Membahas tentang perancangan sistem secara umum maupun


uraian mengenai perancangan pembuatan perangkat lunak Menguraikan
perancangan sistem keseluruhan pada proses pembuatan aplikasi Proyek
Akhir ini yang meliputi:
1. Diagram Kerja Sistem
2. Tahap Proses Informasi
3. Tahap Desain Database
4. Penetapan Perintah Pengiriman Pesan
5. Pembuatan Sistem

BAB IV PENGUJIAN SISTEM

Menjelaskan mengenai ujicoba sistem aplikasi yang telah dibuat


sesuai dengan perencanaan dan perancangan sistem yang meliputi>

1. Menjalankan Aplikasi UKM SMS Gateway


2. Proses Query Database
3. Penggunaan Penyedia Layanan
4. Permintaan Layanan Informasi
5. Pembuatan File Log
6. Kesalahan – Kesalahan yang Mungkin Terjadi

4
BAB V PENUTUP

Berisi kesimpulan yang telah didapatkan dari hasil ujicoba dan


analisa sistem yang berkaitan dengan tujuan ketercapaian pembuatan
sistem yang menghasilkan saran-saran yang berkaitan dengan
penggunaan sistem serta masukan-masukan dari penulis bagi rencana
untuk pengembangan dan kesempurnaan proyek akhir ini dimasa yang
akan datang.

5
---Halaman ini sengaja di kosongkan---

6
BAB II

TEORI PENUNJANG

2.1 BASIS DATA

Basis Data (Database) terdiri dari dua kata yaitu: Basis dan Data.
Basis yang berarti markas/ gudang, tempat bersarang/ berkumpul.
Sedang- kan Data memiliki arti representasi fakta dunia nyata yang
mewakili suatu obyek (seperti, manusia: dosen, mhs, pelanggan,dll;
barang: buku, meja; peristiwa, konsep, dsb.), yang direkam baik dalam
bentuk angka, huruf, teks, gambar atau suara. Basis Data adalah
sekumpulan data yang saling ber-relasi.
Basis Data adalah himpunan kelompok data (arsip) yang saling
berhubungan, yang diorganisasi sedemikian rupa, sehingga kelak dapat
dimanfaatkan kembali dengan cepat. Basis Data merupakan kumpulan
data yang saling berhubungan yang disimpan secara bersama tanpa
adanya pengulangan (redudansi) data. Basis Data merupakan kumpulan
file/tabel/arsip yang saling berhubungan yang disimpan dalam media
penyimpanan elektronik[2].

2.1.1 Definisi Basis Data

Basis data (database) adalah suatu kumpulan data yang disusun


dalam bentuk tabel-tabel yang saling berkaitan maupun berdiri sendiri
dan disimpan secara bersama-sama pada suatu media. Basis data dapat
digunakan oleh satu atau lebih program aplikasi secara optimal, data
disimpan tanpa mengalami ketergantungan pada program yang akan
menggunakannya.
Terdapat beberapa aturan yang harus dipatuhi pada file basis data
agar dapat memenuhi kriteria sebagai suatu basis data. Beberapa aturan
itu berhubungan dengan [6]:

1. kerangkapan data, yaitu munculnya data-data yang sama secara


berulang-ulang pada file basis data,
2. inkonstensi data, yaitu munculnya data yang tidak konsisten pada
field yang sama untuk beberapa file dengan kunci yang sama,
3. data terisolasi, disebabkan oleh pemakaian beberapa file basis data.

7
4. keamanan data, berhubungan dengan masalah keamanan data dalam
sistem basis data.
5. integrasi data, berhubungan dengan unjuk kerja sistem agar dapat
melakukan kendali atau kontrol pada semua bagian sistem sehingga
sistem selalu beroperasi dalam pengendalian penuh.

2.1.2 Sistem Basis Data(DBMS)

Sistem yang terdiri atas sekumpulan tabel data yang saling


berhubungan dan sekumpulan program (DBMS: Database Management
System) yang memungkinkan berbagai user dan program lain dapat
mengakses dan memanipulasi tabel-tabel tersebut.
DBMS (Database Management System) kumpulan program yang
digunakan user untuk me-management database (create, maintain).

Gambar 2.1 Proses sharing sistem basis data

Proses – proses yang terdapat dalam DBMS yaitu:

1. Defining : database mendefiniskan tipe data, struktur dan batasan


(constraint) dari data yang disimpan dalam database.
2. Manipulating : database mencakup berbagai fungsi dan query untuk
mendapatkan data yang dicari, termasuk operasi insert, update dan
delete serta dalam generate report data.
3. Sharing : database dapat diatur untuk dapat sharing multiple user
dan program untuk mengakses database secara bersama-sama

8
Fungsi yang lebih penting dari DBMS adalah proteksi dan
maintain database dalam jangka panjang

a. Proteksi : mengandung system protection yang menangani


kondisi malfunction (crash) baik pada hardware ataupun
software, juga mengandung security protection yang menangani
pengaksesan oleh user terlarang
b. Maintain : mengandung sistem maintaining yang selalu
meningkatkan kebutuhan perubahan tiap waktu

2.1.3 Bagian-Bagian Basis Data

Membangun basis data adalah langkah awal dari pembuatan


sebuah aplikasi. Keberhasilan dalam membangun basis data akan
menyebabkan program lebih mudah dibaca, mudah dikembangkan dan
mudah mengikuti perkembangan perangkat lunak.
Berikut ini diuraikan mengenai komponen-komponen yang
terdapat dalam basis data.

1. Tabel, Merupakan kumpulan dari suatu field dan record (kolom dan
baris).
2. Field, Field adalah sebutan untuk mewakili suatu record.
3. Record, Merupakan kumpulan elemen-elemen yang saling berkaitan
yang berisi informasi tentang suatu isi data secara lengkap. Satu
record mewakili satu data atau informasi tentang seseorang
misalnya, nomor daftar, nama pendaftar, alamat, tanggal masuk.
4. Primary Key, merupakan kolom (field) yang menjadi titik acuan
pada sebuah tabel yang bersifat unik, dimana dalam artian data
tidak ada satu nilai pun yang sama atau kembar dalam tabel tersebut.
5. Foreign Key (kunci relasi), suatu kolom dalam tabel yang digunakan
sebagai “kaitan” atau relasi untuk membentuk satu hubungan yang
didapati dari tabel induk, umumnya hubungan yang terbentuk antar
tabel adalah satu ke banyak (one to many).
6. Index, merupakan struktur basis data secara fisik, yang digunakan
untuk meng-optimalisasi pemrosesan data dan mempercepat proses
pencarian data.

9
2.1.4 Relationship

Merupakan kumpulan file yang saling berkaitan. Pada model data


relasional hubungan antar file direlasikan dengan kunci relasi (relation
key), merupakan kunci utama dari masing-masing file.
Relasi antara dua file atau dua tabel dapat dikategorikan menjadi
tiga macam. Demikian pula untuk membantu gambaran relasi secara
lengkap terdapat juga tiga macam relasi dalam hubungan atribute dalam
satu file [6]. Ke enam relasi tersebut yaitu:

1. One to one relationship 2 file.


Hubungan antara file pertama dengan file kedua adalah satu
berbanding satu. Seperti pada pelajaran privat dimana satu guru
mengajar satu siswa dan satu siswa hanya diajar oleh satu guru pula.

2. One to many relationship 2 file.


Hubungan antara file pertama dengan file kedua adalah satu
berbanding banyak atau dapat pula dibalik banyak lawan satu.
Eperti pada sistem pengajaran di sekolah dasar dimana satu guru
mengajar banyak siswa dan siswa hanya diajar oleh satu guru.

3. Many to many relationship 2 file.


Hubungan antara file pertama dengan file kedua adalah banyak
berbanding banyak. Seperti pada sistem pengajaran di sekolah
menengah dimana satu guru mengajar banyak siswa dan siswa diajar
oleh banyak guru pula.

4. Relasi one to one 2 atribute dalam satu file.


Hubungan antara satu atribut dengan atribut yang lain dalam satu
file yang sama mempunyai hubungan satu lawan satu. Misal atribut
nomor pegawai yang unik dan atribut nomor KTP pegawai tersebut
mempunyai hubungan satu lawan satu. Satu nomor pegawai hanya
satu nomor KTP, tidak ada yang berganda.

5. Relasi many to one 2 atribute dalam satu file.


Hubungan antara satu atribut dengan atribut yang lain dalam satu
file yang sama mempunyai hubungan satu lawan banyak. Misalnya
pada satu alamat pegawai terdapat puluhan pegawai kantor tersebut
maka hubungan antara atribut alamat pegawai dengan nomor
pegawai adalah satu alamat menunjukkan banyak pegawai.

10
6. Relasi Many to Many 2 atribute dalam satu file.
Hubungan antara satu atribut dengan atribut yang lain dalam satu
file yang sama mempunyai hubungan banyak lawan banyak.
Misalnya pada satu alamat pegawai terdapat puluhan pegawai kantor
tersebut dan beberapa pegawai punya nama yang sama mempunyai
alamat berbeda. Maka hubungan antara atribut alamat pegawai
dengan nama pegawai adalah beberapa alamat menunjukkan nama
pegawai yang sama dan sebaliknya.

2.2 SMS (Short Message Service)

SMS atau layanan pesan singkat mempunyai sejarah tersendiri


sebagai media layanan yang paling meledak abat ini. Awalnya SMS
berfungsi untuk memberikan layanan pengiriman pesan teks singkat
antar perangkat mobile phone (telepon genggam/ hand phone). SMS
sebetulnya hanya layanan tambahan terhadap dua layanan utama
(layanan voice dan switched data) dalam system jaringan komunikasi
GSM. GSM( Global System for Mobile Communications) adalah
perkumpulan penyedia perangkat komunikasi Eropa yang menyediakan
standardisasi perangkat telepon genggam / telepon bergerak di Eropa.
Namun karena keberhasilan MS yang tidak terduga, dengan pelanggan
yang menggunakannya, menjadikan SMS sebagai bagian integral dari
layanan system standar-standar komunikasi lain, seperti CDMA, UMTS,
bahkan jaringan telepon rumah (fixed phone) bahkan mulai mengadopsi
teknologi yang sebetulnya sangat sederhana ini. Aplikasi ini hanya
terbatas pada pengiriman dan peneriamaan data berupa teks dengan
panjang pesan antara 120-160 huruf bahkan ada yang sampai 765 huruf.

2.2.1 Karakteristik SMS

SMS point-to-point menyediakan mekanisme untuk mengirimkan


pesan pendek (short message) ke dan dari piranti bergerak. Layanan ini
menggunakan SMS Center (SMSC) yang bertindak sebagai sistem
simpan dan terusan (store and forward) untuk pesan pendek.

11
Keberhasilan dan popularitas SMS antara lain disebabkan oleh :

1. Harga per kiriman tetap/ konstan


Apabila beban biaya telepon/ percakapan bervariasi, maka beban
biaya kiriman SMS tetap.

2. Keamanan dan kesopanan


Apabila kita hendak menggunakan telepon seluler di tempat umum,
maka berbicara menggunakannya dirasakan tidak sopan dan kurang
aman. Namun sebaliknya berkirim pesan menggunakan SMS adalah
lebih sopan dan privacy lebih terjaga.

3. Tidak mengganggu penerima


Seperti halnya e-mail, SMS sebagai alat komunikasi tidak
mengganggu penerima, karena penerima bias memutuskan kapan
dan dimana dia akan menjawab pesab tersebut.

4. Handal (reliable)
Jaringan GSM secara umum diakui kehandalannya dalam
mengirimkan data, dan SMS mewarisi kehandalan tersebut.

2.2.2 Layanan Aplikasi SMS


Layanan aplikasi SMS pada dasarnya memiliki karakteristik yang
berbeda dengan aplikasi internet dan internet yang bergerak pada
umumnya, yaitu: layar monitor yang berukuran kecil, keterbatasan
jumlah karakter yang dapat dikirimkan, serta keterbatasan tombol pada
handset yang hanya berjumlah 12 untuk pengoperasian aplikasi
Tiga karakteristik tersebut selalu menjadi fokus yang mendasari
pada pengembangan aplikasi ini, sehingga informasi yang disediakan
pun singkat danjelas dengan pengoperasian aplikasi mudah dan
sederhana yang meminimalisir penggunaan tombol pada handset.
Dengan demikian akan dapat dikenali aplikasi yang cocok untuk
dikembangkan menjadi aplikasi berbasisi SMS.
Berdasarkan mekanisme distribusi pesan SMS oleh aplikasi SMS,
terdapat empat macam mekanisme penghantaran pesan yaitu:

1. Pull, yaitu pesan yang dikirimkan ke pengguna berdasarkan


permintaan pengguna
2. Push – Event based, yaitu pesan yang diaktivasi oleh aplikasi
berdasarkan kejadian yang berlangsung

12
3. Push – Scheduled, yaitu pesan yang diaktivasi oleh aplikasi
berdasarkan waktu yang telah terjadwal
4. Push – Personal profile, yaitu pesan yang diaktivasi oleh aplikasi
berdasarkan profil dan preference dari pengguna

2.2.3 SMS Gateway

SMS gateway dapat diartikan sebagai suatu penghubung untuk


lalulintas data-data SMS, baik yang dikirim maupun yang diterima. Pada
awalnya SMS gateway dibutuhkan untuk menjembatani antar SMSC.
Hal ini dikarenakan SMSC yang dibangun oleh perusahaan yang berbeda
memiliki protokol komunikasi sendiri, dan protocol-protokol itu sendiri
bersipat pribadi.
Namun seiring perkembangan teknologi komputer, baik dari sisi
hardware maupun software, dan perkembangan teknologi komunikasi,
SMS gateway tidak lagi dimaksudkan sebagai ilustrasi diatas. Dewasa ini
masyarakat lebih mengartikan SMS gateway sebagai suatu jembatan
komunikasi yang menghubungkan perangkat komunikasi (dalam hal ini
ponsel) dengan perangkat komputer yang menjadikan aktifitas SMS
menjadi lebih mudah dan menyenangkan[4].

2.3 PEMROGRAMAN BORLAND DELPHI

2.3.1 Mengenal IDE Delphi

IDE (Integated Development Environment) adalah sebuah


lingkungan pengembangan aplikasi interaktif. Delphi telah mengalami
perubahan dari versi sebelumnya. Diantaranya pada versi ini terdapat
Compiler message, perubahan pada Component Pallete, Code Insight
dan Debugger.
Berikut ini tampilan utama dari form Delphi 7.

13
Gambar 2.2 Tampilan Awal IDE Borland Delphi

Berikut ini merupakan komponen delphi dan menu serta icon


dimana komponen-komponen ini digunakan untuk mendesain projek
delphi.

Gambar 2.3 Tampilan menu, Icon dan Tab Komponen Delphi

14
2.3.2 Object Inspektor

Digunakan untuk menentukan dan mengubah karakteristik sebuah


komponen. Pada object inspector terdapat 2 buah tab yaitu properties
dan events. Pada tab properties digunakan untuk mengubah property dari
komponen. Properties dapat dijelaskan sebagai data yang menentukan
karakteristik komponen. Tab event dapat digunakan untuk menyisipkan
kode untuk menangani kejadian tertentu.

Gambar 2.4 Jendela Object Inspector

Gambar 2.5 Form tempat untuk merancang antarmuka program

15
Gambar 2.6 Editor source program/ unit.pas

2.3.3 Component pallete

Component pallete adalah pustaka dari komponen-komponen


yang digambarkan berupa icon-icon. Komponen-komponen ini dibagi
menjadi beberapa kelompok. Defaultnya, komponen ini dikelompokan
berdasarkan fungsinya. Pengelompokan ini dinyatakan dengan tab/
pages. Page asal yang disediakan diantaranya yaitu : Standard,
Additional, Win32, System, Data Access, Data Controls, dan sebagainya.

Gambar 2.7 Tampilan komponen Pallete Delphi

16
2.3.4 Thread

Setiap program yang dijalankan dinamakan process. Setiap


process memiliki milik pribadi, misalnya process memiliki ruang
memori sendiri. Sebuah process dapat mempunyai mempunyai satu atau
beberapa thread. Thread adalah objek dari sistem operasi yang
merupakan bagian dari program yang dijalankan. Setiap aplikasi Win32
minimal mempunyai sebuah thread yang sering dinamakan primary
thread atau default thread.
Pada saat sebuah process dijalankan, otomatis diberi sebuah
thread yang akan menjalankan program pada rutin tertentu. Thread
dipakai oleh sistem operasi untuk menjadwalkan waktu prosesor.
Penjadwalan dipakai untuk mengalokasikan waktu untuk tiap thread
(bukan process). Misalnya ada beberapa thread (mungkin dari beberapa
process) yang akan dijalankan, dan sistem operasi akan memilih salah
satu untuk dijalankan. Pada satu saat prosesor hanya dapat melakukan
satu hal, jadi hanya menangani satu thread. Penjadwal (scheduler) akan
menentukan time slice atau banyaknya waktu yang diberikan pada
sebuah thread.
Jika waktu untuk menjalankan sebuah thread lebih besar dari time
slice, maka prosessor akan meninggalkan thread tersebut dan melayani
thread berikutnya. Jika sudah tiba giliran thread pertama dilayani oleh
prosesor, thread tersebuat akan dijalankan lagi (melanjutkan yang sempat
terhenti).
Setiap thread pada sistem mempunyai sebuah context. Sebuah
record TContext adalah struktur data yang berisi dari keadaan sebuah
thread.
Thread dapat dianggap menjalankan beberapa rutin berbeda secara
bersama-sama. Tentunya, jika komputer hanya mempunyai sebuah CPU,
dua thread tidak dapat dijalankan secara bersama-sama. Dalam hal ini,
dua thread adalah dijadwalkan dalam satu satuan waktu sehingga merasa
beberapa thread dijalankan secara bersama-sama. Thread tidak bisa
dijalankan pada Windows 16 bit [7].

17
2.4 GAMMU (GNU All Mobile Management Utilities)

GAMMU merupakan library/tools dan drivers untuk ponsel Nokia


dan ponsel lainnya yang dirilis dibawah lisensi GNU GPL/LGPL.
GAMMU dibuat oleh Marcin Wiacek dan beberapa orang dari Gnokii
(www.gnokii.org) dan Mygnokii (www.mwiacek.com) Proyek[3].
Tools ini dapat berkolaborasi dengan bahasa pemrograman
Delphi, C/C++ PHP dan lain-lain. Dengan tools ini, para pemrogram
dapat membuat interfacing software dengan ponsel, seperti :

1. manajemen SMS,
2. manajemen MMS,
3. upload logo,
4. manajemen buku telepon,
5. upload melalui WAP.

Ponsel yang direkomendasikan GAMMU untuk membuat SMS


gateway dengan adalah Nokia 3310 atau 3410 yang menjadi pilihan
terbaik.
Cara yang lain adalah dengan menggunakan modem selular
khusus. Ponsel yang mendukung cara tersebut adalah ponsel Siemens,
sebagai contoh Siemens MC35 yang telah mempunyai GPRS [3].

2.5 SQL (Structured Query Language)

Structured Query Language(SQL) merupakan bahasa yang


digunakan untuk melakukan operasi-operasi database. Bahasa ini
memiliki arti yang penting sekali dalam pengelolaan suatu database.
Singkatnya bahasa ini merupakan bahasa standar yang dipakai di dalam
database, dimana di dalamnya sudah diterapkan aturan-aturan standar
tersebut, pengguna database dapat melakukan komunikasi dengan suatu
database, baik itu dalam suatu vendor maupun yang berlainan vendor
sekalipun.

18
2.5.1 Mengenal SQL

Structured Query Language atau lebih sering disebut dengan


SQL, merupakan bahasa ANSI (American National Standard
Institute)yang digunakan untuk melakukan query data pada database.
Sebagai bahasa yang telah disepakati bersama, semua software database
menggunakan bahasa ini sebagai bahasa yang standar.
SQL menawarkan berbagai kemampuan serta kemudahan, baik itu
dari segi manfaat maupun strukturnya. Sebagaimana telah diketahui,
dengan adanya SQl, Anda dapat melakukan operasi database seperti
menambah data, memodifikasi data, menghapus data, dan masih banyak
lagi.
Secara umum perintah SQL digolongkan menjadi tiga bagian
sesuai dengan fungsi dan kegunaannya, yakni Data Definition Language
(DDL), Data Manipulation Language (DML), serta Data Control
Language (DCL).

2.5.1.1 Data Definition Language

Data Definition Language (DDL) mencakup perintah-perintah


yang digunakan untuk membangun objek-objek dalam database, seperti
tabel, view, atau indeks. Adapun yang termasuk di dalam perintah DDL
adalah CREATE (digunakan untuk membuat database/ tabel), ALTER
(mengubah struktur tabel, memodifikasi atau mengganti nama tabel),
serta DROP ( digunaka untuk menghapus database, tabel maupun
indeks).

2.5.1.2 Data Manipulation Language

Data Manipulation Language (DML) berfunsi untuk menambah,


mengubah, menampilkan, serta menghapus record atau baris pada tabel.
Beberpa perintah yang termasuk dalam DML yaitu: INSERT (digunakan
untuk memasukan data atau record pada suatu tabel), SELECT
(digunakan untuk menampilkan atau me-retrieve data pada tabel),
UPDATE (untuk memodifikasi nilai kolom dari suatu record), serta
DELETE (untuk menghapus record pada tabel).

19
2.6 MySQL

MySQL adalah suatu mesin RDBMS dengan banyak fasilitas.


MySQL merupakan sebuah server basis data yang banyak digunakan di
internet karena kehandalannya, keamanan dan perangkat lunak freeware.
MySQL mendukung terhadap pemrograman C/C++, Delphi, Perl, Java,
PHP, dan Phyton. Tool-tool yang disediakan MySQL memungkinkan
untuk membuat aplikasi client/sever yang digabungkan dengan basis
data. MySQL juga mendukung terhadap system operasi berbasis Unix,
Windows, dan OS/2. MySQL adalah mesin basis data yang
multithreaded, yang mampu melayani banyak permintaan (tasks) pada
waktu yang sama ketika proses-proses pada aplikasi itu berjalan secara
simultan. Program utilitas MySQL bisa menggunakan statements SQL

2.6.1 Kelebihan MySQL

Dengan karakteristik MySQL tersebut diatas maka dapat


memberikan kelebihan sebagai berikut :
1. Menghemat waktu proses pengisian data
2. Menghemat waktu proses pengambilan data,
3. Proses pengambilan data lebih fleksibel,
4. Data dapat diakses secara bersama oleh lebih dari satu pengguna
pada waktu yang bersamaaan,
5. Kecepatan. Berdasarkan hasil pengujian, MySQL memiliki
kecepatan paling baik dibandingkan basis data server lainnya,
6. Mudah digunakan. Perintah-perintah dan aturan-aturan pada
MySQL maupun proses instalasinya relatif mudah digunakan,
7. Open Source. MySQL merupakan sebuah sistem manajemen basis
data relasi yang bersifat terbuka atau open source yang berarti
bahwa MySQL boleh di-download oleh siapa saja, baik versi kode
program aslinya (source code) maupun versi binernya (executable)
dan bias digunakan secara gratis baik untuk dimodifikasi sesuai
dengan kebutuhan maupun sebagai salah satu program aplikasi
komputer,
8. Kapabilitas. MySQL telah digunakan untuk mengelola basis data
dengan jumlah 50 juta record. Bahkan sanggup untuk mengelola
60.000 tabel dengan jumlah baris 5.000.000.000. Mendukung
penggunaan indeks hingga 32 indeks per tabelnya,

20
9. Konektivitas dan keamanan. MySQL mendukung dan menerapkan
sistem keamanan dan izin akses tingkat lanjut (advanced
permissions and security system), termasuk dukungan pengamanan
dengan cara pengacakan lapisan data (SSL transport layer
encryption),
10. Fleksibilitas/portabilitas. MySQL mendukung perintah-perintah
ANSI SQL 99 dan beberapa perintah basis data alternatif lainnya
sehingga memudahkan untuk beralih dari dan ke MySQL,
11. Lintas platform sistem operasi. MySQL dapat dijalankan pada
beberapa sistem operasi yang berbeda seperti Linux, Microsoft
Windows, FreeBSD, Sun Solaris, IBM’s AIX, Mac OS X, HP-UX,
AIX, QNX, Novell NetWare, SCO Open Unix, SGI Irix, dan Dec
OSF.

21
---Halaman ini sengaja dikosongkan---

22
BAB III

PERANCANGAN DAN PEMBUATAN SISTEM

Dalam bab ini, dijelaskan tahapan-tahapan penting yang diperlukan


dalam pembuatan sistem aplikasi ini. Dari tahapan-tahapan dalam
perancangan sistem, database Desain Aplikasi GUI (Graphics User
Interface) serta Pembuatan Aplikasi.
Prinsip kerja sistem ini adalah program sistem komunikasi dua arah
yang berbentuk SMS Gateway yang menggunakan pemrograman Borland
Delphi 6.0 dengan pemanfaatan Aplikasi GAMMU sebagai software
komunikasi antara Handphone dengan komputer.

3.1 DIAGRAM KERJA SISTEM

Gambar 3.1 Diagram Kerja Sistem

Proses dimulai dari registrasi anggota pada server SMS Gateway


apakah anggotanya berstatus sebagai UKM yang merequest informasi
maupun yang berstatus sebagai BANK yang memberikan/ merequest
informasi. Proses Sistem Layanan Penyedia Informasi Kredit UKM yang
di buat secara umum dapat digambar kan seperti pada gambar Data Flow
Diagram dibawah ini.

23
Gambar 3.2 DFD level 0 Sistem UKM SMS Gateway

Dari gambar diagram diatas secara umum dijelaskan proses yang


terjadi pada SIM UKM SMS Gateway yaitu.

1. UKM melakukan Registrasi Anggota, merequest informasi


informasi dari server SMS. Sedangkan server SMS memberikan
informasi yang berkaitan dengan registrasi anggota UKM, serta
informasi mengenai data yang direquest oleh UKM.
2. BANK melakukan registrasi Anggota, input/ memberi data kredit
bank, melakukan update data kredit Bank yang pernah diinputkan ke
server SMS, selain itu Bank juga bisa melakukan request terhadap
data kredit yang dimilikinya yang pernah diinputkan ke server SMS.
Sedangkan dari server SMS memberikan informasi yang berkaitan
dengan registrasi anggota Bank, input kredit Bank, update kredit
Bank serta informasi mengenai request yang dilakukan oleh Bank.

Untuk proses kerja sistem secara mendetail yang berkaitan dengan


proses database dan sistem aplikasi yang dilakukan, dimana dijelaskan
semua proses/ interaksi yang dilakukan oleh anggota Bank dengan server
SMS maupun semua proses/ interaksi yang dilakukan oleh anggota
UKM dengan sever SMS dapat diperlihatkan seperti pada gambar Data
Flow Diagram dibawah ini.

24
Gambar 3.3 DFD level 1 Sistem UKM SMS Gateway

25
3.2 PROSES INFORMASI

Seperti yang telah dijelaskan diatas, tahap ini merupakan proses


awal dari sistem. Pada tahap ini secara umun menggambarkan 4 tahap
proses yang terdapat pada Sistem UKM SMS Gateway. Tahap-tahap
tersebut yaitu:

1. Registrasi anggota
2. Input informasi data kredit
3. Update data kredit
4. Request informasi

3.2.1 Registrasi Anggota

Tahap ini menjelaskan proses registrasi anggota yang dilakukan


pada server SMS yaitu.

1. UKM
a. UKM melakukan registrasi anggota pada server SMS melalui
pesan perintah registrasi yang dikirimkan lewat HP
b. Server SMS membalas pesan dari UKM dengan mengirimkan
perintah untuk mengisi kelengkapan data anggota sebagai pihak
UKM
c. Kemudian UKM melakukan pengisian data anggota melalui
pesan yang dikirimkan ke server SMS
d. Dari server SMS membalas pesan dari UKM dengan
mengirimkan informasi yang berisi “user telah suskses
melakukan registrasi anggota” maupun user belum sukses
melakukan registrasi anggota pada server SMS

2. BANK
a. BANK melakukan registrasi anggota dengan pesan perintah
registrasi yang dikirimkan melalui HP ke server SMS
b. Server SMS membalas pesan dari BANK dengan informasi
perintah untuk mengisi data anggota sebagai BANK
c. Kemudian BANK melakukan pengisian data anggota melalui
pesan yang dikirimkan ke server SMS

26
d. Dari server SMS membalas pesan dari BANK dengan berisi
informasi apakah BANK telah berhasil melakukan registrasi
anggota maupun belum pada server SMS

3.2.2 Input Informasi Data Kredit

Tahap ini menjelaskan proses input data kredit maupun


kelengkapan data-data pendukung informasi kredit. Proses ini hanya
dikerjakan oleh anggota yang berstatus sebagai BANK saja.

1. Input Kredit
a. BANK melakukan input/ memberikan data informasi kedit ke
server SMS
b. Server SMS membalas pesan input kredit yang dikirim oleh
BANK dengan pesan berisi informasi proses input kredit sukses
maupun tidak sukses karena data yang belum lengkap.
c. Jika sukses oleh server SMS data tersebut disimpan dalam tabel
tbkredit dan ke tabel tbtawaran yang berisi data IdKredit dan
IdBank yang berarti BANK tersebut pernah menawarkan
informasi suatu kredit pada server SMS

2. Input Syarat Kredit


a. BANK melakukan input data syarat kredit terdahap kredit yang
pernah ditawarkan pada server SMS, melalui pesan yang berisi
data syarat-syarat kredit yang dikirimkan ke server SMS
b. Server SMS mengecek status BANK dan data kredit yang akan
di tambah dengan data syarat, kemudian server SMS membalas
pesan ke BANK yang berisi informasi input syarat kredit sukses
maupun gagal dilakukan.
c. Jika sukses, data syarat kredit oleh server SMS akan disimpan
ke tabel tbkreditsyarat

3.2.3 Update Data Kredit

Menjelaskan proses update data kredit yang pernah diinputkan/


ditawarkan pada server SMS. Proses ini hanya dilakukan oleh anggota
yang berstatus sebagai BANK pada server SMS. Adapun tahap
prosesnya yaitu:

27
1. BANK mengirim pesan yang bersi data update kredit ke server SMS
2. Server SMS mengecek status BANK dan data kredit yang akan
diupdate, kemudian server SMS membalas pesan ke BANK yang
berisi informasi mengenai proses update data kredit berhasil maupun
tidak berhasil dilakukan oleh server SMS
3. Jika proses update berhasil dilakukan, server akan mengupdate data
kredit lama dengan data kredit yang baru yang berada pada tabel
tbkredit.

3.2.4 Request Informasi

Tahap ini menjelaskan proses request informasi yang ada pada


server SMS. Proses ini dilakukan oleh semua anggota Sistem UKM SMS
Gateway yang telah terdaftar pada server SMS baik yang berstatus
sebagai UKM maupun BANK. Tahapan prosesnya sebagai berikut.

1. UKM
a. Request Info Kredit
- UKM mengirim pesan berisi data request informasi kredit ke
server SMS
- Server SMS membalas pesan ke UKM yang berisi informasi
seluruh data-data kredit yang terdapat pada server SMS yang
memenuhi syarat request, maupun informasi jika data-data
kredit yang direquest tidak tersedia.
- Jika data kredit yang direquest tidak tersedia pada server
SMS, server SMS akan mencari informasi tersebut dengan
mengirim pesan informasi tersebut ke BANK yang
memehuhi/ melayani syarat request informasi tersebut.

b. Request Info Perintah


- UKM mengirim pesan ke sever SMS yang berisi data request
informasi perintah cara pengiriman pesan.
- Server SMS membalas pesan yang berisi perintah cara
merequest informasi pada server SMS agar perintah pesan
yang dikirimkan dapat dimengerti oleh server SMS

28
c. Request Syarat Kredit
- UKM mengirim pesan ke server SMS yang berisi data untuk
merequest syarat kredit dari kredit yang pernah direquest
sebelumnya
- Server SMS mengecek data kredit yang direquest syarat-
syaratnya oleh UKM, dan server SMS membalas pesan ke
UKM yang berisi informasi data-data syarat kredit yang
direquest maupun informasi request syarat gagal
- Jika data request syarat tersedia, server SMS akan
memberikan informasi ke UKM mengenai data-data syarat
daripada kredit yang direquest tersebut.

2. BANK
a. Request Data Kredit
- BANK mengirim pesan ke server SMS yang berisi perintah
request Id Kredit yang pernah ditawarkannya ke server SMS
- Server SMS membalas pesan dari BANK dengan informasi
yang berisi data kredit yang masih aktif yang dimiliki oleh
BANK tersebut
- Jika BANK tidak pernah menawarkan informasi kredit ke
server SMS, server SMS akan membalas pesan ke BANK
yang berisi request Id kredit tersebut tidak tersedia dalam
server SMS.

b. Request Info Perintah


- BANK mengirim pesan ke server SMS yang berisi data
request informasi perintah cara pengiriman pesan.
- Server SMS membalas pesan dari BANK dengan informasi
berisi data-data perintah pengiriman pesan yang dapat
dimengerti oleh sesrver SMS.

3.3 PENGOLAHAN INFORMASI

Tahap ini menjelaskan proses pengolahan informasi pada Sistem


UKM SMS Gateway yang dikirim ke server SMS. Proses pengolahan
informasi yang dilakukan digambarkan dalam bentuk flowchart mulai
dari informasi diterima hingga proses informasi diberikan/ dikirimkan
kembali.

29
3.3.1 Penerimaan Pesan (SMS)

Gambar 3.4 Diagram alir proses penerimaan pesan

Diagram alir diatas menjelajskan proses yang terjadi ketika


pesan(SMS) masuk / ditermia pada HP server SMS. Tahap-tahap proses
yang dilakukan oleh sistem yaitu:

1. Berawal dari sistem mengambil SMS yang masuk pada SIM Card
HP server SMS
2. tahap berikutnya yaitu sistem malakukan pengambilan data pesan
dan nomor pengirim dari SMS yang diambil
3. Sistem mengolah informasi yang ada pada pesan, setelah proses olah
pesan selesai dilakukan sistem melakukan penghapusan terhadap
SMS yang telah diproses dari SIM Card HP server SMS
4. Tahap berikutnya adalah mengirim pesan informasi yang diperoleh
dari proses olah pesan ke nomor pengirim yang didapat dari pesan
tersebut.

30
Untuk tahap proses pengolahan pesan secara umum yang dilakukan
pada sistem Sistem UKM SMS Gateway dapat diperlihatkan seperti pada
gambar diagram alir dibawah ini.

Gambar 3.5 Diagram alir olah pesan

31
Pada proses pengolahan pesan secara umum yang digambarkan pada
gambar diatas, terdapat beberapa proses yang dikerjakan dalam proses olah
pesan tersebut diantaranya yaitu.

a. Check registrasi anggota


b. Check perintah pesan untuk UKM
c. Check perintah pesan untuk Bank
d. Check perintah pesan untuk user belum teregistrasi

3.3.1.1 Check Regitrsi Anggota

Gambar 3.6 Diagram alir cek registrasi anggota

Pengecekan registrasi anggota yang dilakukan sistem yaiti dengan


mengambil nomor HP pengirim yang ada pada pesan untuk dicocokan
dengan database. Nilai kembalian dari proses registrasi ini ada tiga yaitu.

a. Nilai kembalian “UKM” jika nomor pengirim terdaftar sebagai


anggota yang berstatus sebagai UKM di server SMS

32
b. Nilai kembalian “BANK” jika nomor pengirim terdaftar sebagai
anggota yang berstatus sebagai Bank di server SMS.
c. Nilai kembalian “BELUM” jika nomor pengirim belum terdaftar
di server SMS (user belum melakukan registrasi anggota)

3.3.1.2 Check perintah pesan untuk UKM

Gambar 3.7 Diagram alir check perintah pesan untuk ukm

33
Proses pengecekan perintah pesan untuk anggota teregistrasi sebagai
UKM yang dilakukan oleh sistem seperti yang diperlihatkan pada diagram
alir diatas yaitu perintah yang diperoleh dari pengambilan 3 digit pertama
dari pesan yang ditampung dalam variabel cmd yaitu terdiri dari.

a. Perintah “KRD” yang berarti UKM merequest/ menginginkan


informasi kredit, oleh server SMS jika ada kredit dalam
database maka akan dikirimkan ke UKM yang merequestnya,
jika tidak maka server SMS akan mengirim informasi kredit
yang direquest tidak ada dalam server.
b. Perintah “INF” yang berarti UKM meminta/ merequest
informasi cara pengiriman pesan, oleh server akan mengirimkan
perintah-perintah cara merequest informasi ke server SMS.
c. Perintah “SRT” berarti UKM meminta informasi syarat-syarat
kredit yang telah direquest, oleh server jika perintah yang
dikirim benar maka server akan mengirimkan informasi syarat
kredit yang direquest oleh UKM.
d. Perintah “UKM” berarti perintah untuk mengisi data-data UKM
ke server SMS, oleh serve SMS data-data tersebut akan
disimpan ke dalam database server sebagai data anggora UKM.
e. Perintah “REG” yang berarti UKM mencoba untuk meregistrasi
ulang dengan menggunakan ID yang sama, maka server SMS
akan memberikan informasi bahwa ID tersebut telah terdaftar
sebelumnya.
f. Perintah “??” selain dari pada perintah yang diatas/ server tidak
mengerti, maka server SMS akanmengirim pesan bahwa
perintah pesan salah.

3.3.1.3 Check perintah pesan untuk Bank

Berikut ini merupkan proses pengecekan perintah pesan secara


keseluruhan untuk anggota yang berstatus sebagai Bank. Proses ini
merupakan bagian pengecekan perintah pesan untuk Bank yang terdapat pada
gambar diagram alir proses olah pesan secara umum diatas. Adapun alur
proses pengecekan perintah untuk anggota yang berstatus sebagai Bank dapat
diperlihatkan pada gambar diagram alir dibawah ini.

34
Gambar 3.8 Diagram alir check perintah pesan untuk bank

35
Gambar diagram alir diatas dapat dijelaskan perintah-perintah yang
dikirimkan oleh anggota Bank ke server SMS diantaranya yaitu:

a. Perintah “BNK” berarti perintah untuk mengecek pengiriman


data anggota yang berstatus sebagai Bank, oleh server SMS data
tersebut disimpan dalam database pada tabel tbbank.
b. Perintah “ADD” berarti untuk penambahan atau penawaran data
kredit Bank ke server SMS.
c. Perintah “UPD” berarti untuk memerintahkan server SMS
melakukan peng-update tan terhadap data kredit Bank yang
pernah ditawarkan dimana data kredit yang di update yaitu yang
ditunjukan oleh anggota Bank dalam pesan perintah nya.
d. Perintah “INF” digunakan untuk meminta informasi cara
pengiriman pesan ke server SMS agar dapat dimengerti.
e. Perintah “IDK” berarti anggota yang berstatus sebagai Bank
merequest informasi mengenai ID Kredit yang pernah
ditawarkan ke server SMS.
f. Perintah “REG” berarti anggota yang berstatus sebagai Bank
mencoba melakukan registrasi ulang dengan ID yang sama,
oleh server SMS akan memberi informasi bahwa ID tersebut
telah terdaftar diserver sebelumnya.
g. Perintah “SRT” berarti angota yang berstatus sebagai Bank
melakukan input data sysrat-syarat dari kredit yang pernah
ditawarkan ke server SMS.
h. Perintah “KRD” berarti anggota berstatus sebagai Bank
melakukan instruksi penutupan terhadap data kredit yang tidak
berlaku lagi dan juga melakukan penguncian maupun
pembukaan kunci terhadap permintaan informasi kredit yang
dilakukan oleh server SMS ke pihak Bank.

3.3.1.4 Check perintah pesan untuk user belum teregistrasi

Proses ini menjelaskan alur yang dikerjakan jika user yang mengirim
pesan belum terdaftar pada server SMS. Proses yang dikerjakan yaitu
bermula dari mengecek perintah yang dikirimkan keserver dan mengecek
jenis anggota yang terdapat dari pesan tersebut. Gambaran proses pengolahan
pesan untuk user yang belum melakukan/ terdaftar diserver SMS
diperlihatkan pada gambar diagram alir berikut.

36
Gambar 3.9 Diagram alir check perintah pesan user belum teregistrasi

37
3.3.2 Proses Kirim/ Balas Pesan

Gambar 3.10 Diagram alir kirim pesan informasi kepada pengirim

Tahap proses balas pesan yang dilakukan oleh sistem dapat


dijelaskan seprti langkah dibawah ini.

1. Diawali dari proses sistem mengecek file .txt yaitu file yang
bernama outbox*.txt yang berada di ../sms/outbox/outbox*.txt
2. Sistem terus melakukan pengecekan terhadap file outbox*.txt, jika
file outbox*.txt tidak ketemu sistem akan terus melakukan
pengecekan selama program aplikasi belum berakhir.

38
3. Jika sistem menemukan adanya file outbox*.txt pada
../sms/outbox/outbox*.txt, sistem akan mengambil file outbox*.txt
tersebut
4. Tahap berikutnya yaitu sistem akan memilah/ mengambil data
informasi dan nomor HP pengirim yang terdapat pada file
outbox*.txt tersebut
5. Setelah proses pengambilan data informasi dan nomor HP pengirim
dari file outbox*.txt, sistem akan melakukan pengecekan terhadap
koneksi HP server dengan PC server SMS, jika tidak terkoneksi
maka sistem akan terus berusaha melakukan koneksi.
6. Jika terkoneksi, maka sistem akan mengambil pesan informasi yang
didapat dari file outbox*.txt kemudian sistem mengirim pesan
tersebut ke nomor HP pengirim yang diperoleh dari file outbox*.txt
tersebut melalui HP server.
7. Tahap terakhir dari setiap proses pengiriman pesan informasi yang
dilakukkan oleh sistem yaitu melakukan penghapusan terhadap file
outbox*.txt yang telah diproses agar informasi yang terdapat pada
file tersebut tidak terkirim kembali.

3.4 DESAIN DATABASE

Menjelaskan tahap perencanaan atau membangun database yang


digunakan untuk aplikasi UKM SMS Gateway yang mencakup proses
desain ER Diagram Sistem Informasi UKM berbasis SMS Gateway,
proses Mapping ER Diagram Sistem Informasi UKM berbasis SMS
Gateway ke skema relasi, proses pembentukan Struktur tabel yang
digunakan untuk menyimpan data-data yang ada pada server SMS.

3.4.1 Desain ER Diagram Sistem UKM SMS Gateway

Pada skema konsepsual (ER Diagram) Sistem UKM SMS


Gateway, di jelaskan gambaran proses relasi yang terjadi antara entitas-
entitas yang ada dalam sistem informasi yang dibangun.

39
Gambar 3.11 ER Diagram Sistem UKM SMS Gateway

Adapun aturan-aturan yang terdapat dalam Sistem Informasi


UKM berbasis SMS gateway yang digambarkan dalam skema
konsepsual(ER Diagram) diatas yaitu sebagai berikut:

1. Sebuah server SMS Gateway yang menyediakan informasi kredit


yang dapat direquest oleh anggota server SMS.
2. Banyak anggota yang berstatus sebagai UKM dan BANK
melakukan registrasi di suatu server SMS.
3. Setiap anggota baik yang berstatus sebagai UKM maupun BANK
hanya bisa melakukan sekali registrasi pada server SMS dengan satu
nomor HP.
4. setiap Bank menawarkan banyak informasi kredit di server SMS dan
kredit yang sama bisa ditawarkan lebih dari satu Bank.
5. Setiap anggota UKM bisa merequest banyak informasi kredit yang
ditawarkan oleh Bank pada server SMS, dan informasi kredit yang
sama bisa direquest lebih dari satu UKM.
6. pada UKM yang harus dicatat adalah IdUkm, NamaUkm, Bidang,
Keuntungan, Alamat, ContactPerson dan HP
7. Pada saat melakukan registrasi yang perlu dicatat pada SERVER
SMS adalah NoReg, JenisAnggota dan TglReg
8. Pada BANK yang perlu dicatat adalah IdBank, NamaBank,
ContactPerson dan HP

40
9. Pada Kredit yang dicatat adalah IdKredit, NamaKredit, JenisKredit,
BesarKredit, JangkaWaktu, Bunga, Status(Aktif, Tutup) dan Syarat
(Identitas Diri, Copy tagihan listrik bulan terakhir, dll).
10. Pada setiap terjadi transaksi request info kredit yang dilakukan oleh
UKM maka dicatat Tanggal request dan Jam request

3.4.2 Mapping Skema ER Diagram Sistem UKM SMS Gateway

Tahap ini dijelaskan proses Mapping skema ER Diagram Sistem


UKM SMS Gateway dengan referential Integrity Constraint. Dimana
dalam proses ini terjadi pembentukan tabel-tabel yang terelasi yang
diperoleh dari skema ER Diagram Sistem Informasi UKM SMS.

Gambar 3.12 Skema fisik database Sistem UKM SMS Gateway

41
Tabel-tabel yang dibentuk dalam proses mapping ER Diagram
Sistem UKM tersebut diantaranya yaitu:

1. Tabel UKM: Digunakan untuk menyimpan data-data dengan jenis


registrasi anggota sebagai UKM
2. Tabel ServerSMS : digunakan untuk menyimpan/ menampung data-
data registrasi semua anggota yang melakukan registrasi pada server
SMS
3. Tabel BANK : digunakan untuk menyimpan data-data anggota
dengan jenis registrasi anggota sebagai BANK
4. Tabel Request : menyimpan data-data kredit hasil/ yang direquest
oleh anggota UKM
5. Tabel Tawaran : untuk menyimpan data-data informasi tawaran
ketika melakukan tawaran kredit oleh pihak Bank.
6. Tabel Kredit : menyimpan data-data semua informasi kredit yang
ditawarkan oleh Bank
7. Tabel KreditSyarat : untuk menyimpan data syarat-syarat setiap
informasi kredit yang ditawarkan oleh Bank.

3.4.3 Pembentukan Struktur Tabel

Bagian ini dijelaskan tahap pembentukan tabel yang didapat dari


hasil Mapping ER Diagram Sistem UKM diatas untuk kebutuhan
aplikasi sistem yang dibuat. Semua tabel yang dibuat memiliki tipe
Engine InnoDB agar mendukung penggunaan referensi constrains/
Foreign Key. Tabel yang akan dibentuk bersifat tabel umum dan tabel
tambahan. Tabel umum disini adalah tabel yang diperoleh dari hasil
mapping ER Diagram, sedangkan tabel tambahan yaitu tabel yang
diperlukan untuk mendukung kerja sistem aplikasi yang dibuat
diantaranya yaitu tabel tbsmsperintah, tabel tbsmsmasuk, tabel
tbsmskeluar dan tabel tbsmspending. Adapun struktur semua tabel yang
dibuat sepeti berikut.

42
1. Tabel tbserversms
Berisi data hasil registrasi seluruh anggota pada serverSMS gateway
baik jenisnya UKM maupun BANK

Tabel 3.1 Struktur tabel tbserversms


Tabel tbserversms
Field Tipe Size Ket
NoReg VARCHAR I5 NOT NULL, PRIMARY KEY
JenisAnggota VARCHAR 5 NOT NULL
TglReg DATE default '0000-00-00'

2. Tabel tbukm
Berisi data anggota UKM yang melakukan registrasi pada
serverSMS Gateway

Tabel 3.2 Struktur tabel tbukm


Tabel tbukm
Field Tipe Size Ket
IdUkm VARCHAR 8 NOT NULL, PRIMARY KEY
NoReg VARCHAR 15 NOT NULL, FOREIGN KEY
NamaUkm VARCHAR 25 NOT NULL
Bidang VARCHAR 20 NOT NULL
Keuntungan DOUBLE NOT NULL
Alamat VARCHAR 30 NOT NULL
ContactPerson VARCHAR 15 NOT NULL
HP VARCHAR 15 NOT NULL

3. Tabel tbtawaran
Berisi data hasil relasi antara Bank ketika melakukan penawaran
informasi Kredit

Tabel 3.3 Struktur tabel tbtawaran


Tabel tbtawaran
Field Tipe Size Ket
IdBank VARCHAR 8 NOT NULL, FOREIGN KEY
IdKredit VARCHAR 15 NOT NULL, FOREIGN KEY

43
4. Tabel tbbank
Berisi data BANK yang melakukan registrasi pada serverSMS
Gateway

Tabel 3.4 Struktur tabel tbbank


Tabel tbbank
Field Tipe Size Ket
IdBank VARCHAR 8 NOT NULL, PRIMARY KEY
NoReg VARCHAR 15 NOT NULL, FOREIGN KEY
NamaBank VARCHAR 25 NOT NULL
ContactPerson VARCHAR 15 NOT NULL
HP VARCHAR 15 NOT NULL

5. Tabel tbkredit
Berisi data informasi kredit yang pernah ditawarkan oleh pihak
Bank.

Tabel 3.5 Struktur tabel tbkredit


Tabel tbkredit
Field Tipe Size Ket
IdKredit VARCHAR I5 NOT NULL, PRIMARY KEY
NamaKredit VARCHAR 25 NOT NULL
JenisKredit VARCHAR 5 NOT NULL
BesarKredit DOUBLE NOT NULL
JangkaWaktu VARCHAR 8 NOT NULL
Bunga VARCHAR 6 NOT NULL
Status VARCHAR 8 NOT NULL
ket VARCHAR 6 NOT NULL

6. Tabel tbkreditsyarat
Tabel ini berisi data syarat-syarat pendukung dari masing-masing
penawaran informasi kredit

Tabel 3.6 Struktur tabel tbkreditsyarat


Tabel tbkreditsyarat
Field Tipe Size Ket
IdKredit VARCHAR I5 NOT NULL, PRIMARY KEY
Syarat VARCHAR 130 NOT NULL, PRIMARY KEY

44
7. Tabel tbrequest
Tabel ini berisi data daftar informasi kredit yang pernah di request
oleh setiap anggota UKM

Tabel 3.7 Struktur tabel tbrequest


Tabel tbrequest
Field Tipe Size Ket
IdRequest INT 10 NOT NULL, auto_increment,
PRIMARY KEY
IdUkm VARCHAR 15 NOT NULL, FOREIGN KEY
IdKredit VARCHAR 15 NOT NULL, FOREIGN KEY
Tanggal DATE default '0000-00-00'
Jam TIME

8. Tabel tbsmsmasuk
Tabel ini berisi data-data informasi/ pesan yang pernah dikirimkan
oleh setiap orang baik itu sebagai anggota maupun yang bukan
anggota pada serverSMS Gateway.

Tabel 3.8 Struktur tabel tbsmsmasuk


Tabel tbsmsmasuk
Field Tipe Size Ket
id INT 10 NOT NULL, auto_increment,
PRIMARY KEY
kode VARCHAR 15 NOT NULL, PRIMARY KEY
tanggal DATE default '0000-00-00'
jam TIME
nohp VARCHAR 15
pesan VARCHAR 255

9. Tabel tbsmskeluar
Berisi data-data informasi yang diperoleh dari hasil proses sistem
pada serverSMS yang pernah dikirimkan kepada semua anggota
maupun yang bukan anggota pada serverSMS

45
Tabel 3.9 Struktur tabel tbsmskeluar
Tabel tbsmskeluar
Field Tipe Size Ket
id INT 10 NOT NULL, auto_increment,
PRIMARY KEY
kode VARCHAR 15 NOT NULL, PRIMARY KEY
tanggal DATE default '0000-00-00'
jam TIME
nohp VARCHAR 15
pesan VARCHAR 255

10. Tabel tbsmspending


Berisi data pesan yang direquest oleh anggota UKM dimana dalam
proses request belum ada data informasi dalam server SMS dan
diwaktu yang sama server SMS sedang mencari informasi ke pihak
Bank, dimana data ini akan diproses kembali.

Tabel 3.10 Struktur tabel tbsmspending


Tabel tbsmspending
Field Tipe Size Ket
kode VARCHAR 15 NOT NULL, PRIMARY KEY
nohp VARCHAR 15 NOT NULL
pesan VARCHAR 50 NOT NULL
status VARCHAR 10 NOT NULL

11. Tabel tbsmsperintah


Berisi data informasi untuk perintah pengiriman SMS/ Pesan ke
server SMS agar bisa dimengerti oleh serverSMS

Tabel 3.11 Struktur tabel tbsmsperintah


Tabel tbsmsperintah
Field Tipe Size Ket
id INT 10 NOT NULL, auto_increment,
PRIMARY KEY
kode VARCHAR 15 NOT NULL
ket VARCHAR 255 NOT NULL

46
3.5 PENETAPAN PERINTAH PENGIRIMAN PESAN

Tahap ini adalah dijelaskan perintah yang digunakan dalam proses


pengiriman pesan/ SMS ke serverSMS agar sistem aplikasi pada
serverSMS mengerti apa yang dikerjakan sehingga menghasilkan suatu
informasi yang diinginkan dari serverSMS.

Tabel 3.12 Perintah registrasi dan pengisian data anggota


Jenis Perintah Fungsi / keterangan
Registrasi Anggota
Format pengiriman:
REG JenisAnggota

Contoh pengiriman:
REG UKM Untuk melakukan Registrasi anggota dengan
jenis anggota sebagai UKM
REG BNK Untuk melakukan registrasi anggota dengan
jenis anggota sebagai BANK
Pengisian Data Anggota
1. Pengisian data UKM
Format pengiriman:
UKM#Namusaha#BidangUsaha#Keuntung#Alamat#ContactPerson

Contoh pengiriman:
UKM#Mitra Abadi#Ternak Ayam#8000000#Jl. Keputih No.2
Surabaya#Ir.Suparno

2. Pengisian data BANK


Format pengiriman:
BNK#Nama Bank#ContactPerson

Contoh pengiriman:
BNK#MANDIRI#Dr.Subroto

47
Tabel 3.13 Perintah Request Informasi oleh anggota UKM
Jenis Perintah Fungsi / keterangan
Request Informasi Kredit
Format Pengiriman:
KRD JenisKredit KategoriKredit BesarKredi

Contoh pengiriman:
KRD HRI DA 8000000 Request info kredit Harian dengan
jumlah diatas 8.000.000
KRD HRI DB 8000000 Request info kredit Harian dengan
jumlah dibawah 8.000.000
KRD MGU DA 10000000 Request info kredit Mingguan dengan
jumlah diatas 10.000.000
KRD MGU DB 10000000 Request info kredit Mingguan dengan
jumlah dibawah 10.000.000
KRD BLN DA 30000000 Request info kredit Bulanan dengan
jumlah diatas 30.000.000
KRD BLN DB 30000000 Request info kredit Bulanan dengan
jumlah dibawah 30.000.000
KRD#BCA#BLN Request info kredit khusus Bank BCA
Request Syarat Kredit
Format Pengiriman:
SRT#NamaBank#JenisKredit#BesarKredit

Contoh pengiriman:
SRT#MANDIRI#BLN#20000000

Request Info Perintah


Contoh pengiriman:
INF

Ket: Pada contoh pengiriman request syarat Kredit(SRT), untuk posisi


perintah nama Bank, Jenis Kredit dan Besar Kredit bisa diperoleh dari
jawaban ServerSMS ketika melakukan perintah Request Informasi
Kredit.

48
Tabel 3.14 Perintah Pengisian serta Update data oleh pihak BANK
Pengisian Data Kredit Bank
Format pengiriman:
ADD#NmKredit#JenisKredit#BsrKredit#JkWaktu#Bunga

Contoh pengiriman:
ADD#Jangka Panjang#BLN#20000000#3 THN#3%
Pengisian Persyaratan Kredit Bank
Format pengiriman:
SRT#IdKredit#syarat_1#syarat_2#syarat_n

Contoh pengiriman:
SRT#1001#fotocopy tagihan listrik bulan terakhir#tagihan PAM bln
terakhir#identitas diri#penghasilan > 6000000
Update Data Kredit Bank
Format pengiriman:
UPD#NamaKredit#JenisKredit#BesarKredit#JangkaWaktu#Bunga#Id
Kredit

Contoh pengiriman:
UPD#Jangka Panjang#BLN#30000000#4thn#3%#1001
OR
UPD###30000000#4thn##1001
Menutup kredit dan mengunci request dari sever
Format pengiriman:
KRD#IdKredit#keterangan

Contoh pengiriman utk menutup kredit:


KRD#200156872#TUTUP

Contoh pengiriman utk mengunci request dari server:


KRD#200156872#LOCK
Pengecekan ID Kredit Bank
Contoh pengiriman:
IDK

49
3.6 DESAIN APLIKASI GUI

Gambar 3.13 Diagram Blok pembuatan aplikasi sistem

Pada gambar blok diagram diatas menggambarkan perancangan


aplikasi GUI (Graphics User Interface) secara keseluruhan yang akan
dibuat. Pada perancangan disin menggunakan dua form yaitu form utama
dan form about yang berisi informasi pembuatan aplikasi. Pada form
utama terdapat menu-menu yaitu:

1. Informasi
Menu ini untuk menampilkan halaman yang berisi informasi
mengenai penggunaan HP/ modem GSM pada sistem. Dalam
halaman ini terdapat tombol koneksi manual untuk perangkap HP
dengan PC server SMS, dan juga terdapat tombol Link untuk
menampilkan form about. Menu ini secara default ditampilkan
ketika aplikasi pertama dijalankan.

2. Banking
Menu ini menampilkan informasi mengenai data Bank yang
terdaftar pada server SMS dan juga data informasi kredit yang
pernah ditawarkan oleh Bank ke server SMS

50
3. UKM
Menu ini untuk menampilkan informasi data UKM yang terdaftar
pada server SMS dan juga untuk menampilkan informasi request
terhadap data kredit yang pernah dilakukan oleh setiap UKM

4. SMS Gateway
Menu ini untuk menampulkan informasi pesan yang masuk/
diterima di server SMS dan informasi pesan keluar serta informasi
Log sistem selama aplikasi berjalan.

5. Info SMS Gateway


Menu ini untuk melihat daftar perintah-perintah pesan yang dapat
digunakan pada saat pengiriman pesan agar dapat dimengerti oleh
sistem server SMS.

6. Keluar
Menu ini digunakan untuk keluar dari program aplikasi yang sedang
berjalan.

Untuk gambaran semua desain Aplikasi GUI(Graphics User


Interface) yang dibuat dapat diperlihatkan seperti pada gambar-gambar
dibawah ini.

51
Daftar menu-menu Link pada sistem aplikasi yang dibuat
ListView yang berisi info tentang
penggunaa HP

Tombol koneksi manual dan tombol about


Gambar 3.14 Tampilan halaman menu informasi

Menampilkan informasi kredit


Menampilkan informasi data yang pernah ditawarkan oleh
Bank yangg teregistrasi Bank

Gambar 3.15 Tampilan halaman pada menu Banking

52
Informasi request kredit Menampilkan informasi data
oleh UKM UKM yang telah terdaftar

Gambar 3.16 Tampilan informasi pada menu UKM

Menampilkan info Log pada proses


berjalannya sistem
Menampilkan info Menampilkan info SMS yang
SMS yang masuk keluar/ telah dikirim

Gambar 3.17 Tampilan informasi pada menu SMS Gateway

53
berisi info perintah yang digunakan pada
sistem SMS Gateway

Gambar 3.18 Tampilan pada menu Info SMS Gateway

Logo dan nama serta versi dari pada software yang dibuat

Gambar 3.19 Tampilan form about UKM-SMS Gateway

54
3.7 PEMBUATAN SISTEM

3.7.1 Spesifikasi Kebutuhan Sistem

Spesifikasi kebutuhan sistem merupakan hal yang sangat penting


didalam implementasi sistem. Supaya sistem aplikasi yang dibuat dapat
berjalan dengan sempurna maka perlu diperhatikan spesifikasi kebutuhan
sistem baik itu dalam bentuk perangkat keras (Hardware) maupun
perangkat lunak (Software). Adapun spesifikasi kebutuhan sistem yang
digunakan dalam pembuatan aplikasi Sistem UKM SMSGateway pada
kasus ini yaitu :

1. Sistem Operasi : Microsoft Windows XP


2. Database : MySQL 4.1.12 merupakan versi yang stabil yang sudah
mendukung penggunaan relasi Constraints / Foreign Key.
3. Koneksi Database Delphi – MySQL : Zeosdbo 6.1.5
4. Software Pendukung : GAMMU 1.01 merupakan aplikasi yang
bersifat Open Source Dan Free
5. Spesifikasi PC : Pentium III 800 MHz, RAM 256 MB
6. HP ServerSMS: NOKIA 5110

3.7.2 Pembuatan Tray Icon System

Tray Icon System (ikon pada sistem tray) digunakan untuk


kemudahan akses terhadap sebuah aplikasi yang dibuat selain itu juga
bisa mengurangi tampilan yang ada pada desktop dan mencegak
penutupan program oleh orang lain yang bisa membuat sistem tidak bisa
memberi informasi disetiap ada request dari luar. Berikut merupakan
penggalan perintah pembuatan sistem tray ikon.

...
GetCursorPos(CurPos);
SetForegroundWindow(Self.Handle);
pmMenuUtama.Popup(CurPos.X,CurPos.Y);
PostMessage(Self.Handle,WM_NULL,0,0);
with TrayIconData do
begin
cbSize:= SizeOf(TrayIconData);
Wnd:= Handle;
uID:= 0;
uFlags:= NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallbackMessage:= WM_MOUSEMOVE;

55
hIcon:= Application.Icon.Handle;
StrPCopy(szTip, Application.Title);
end;
Shell_NotifyIcon(NIM_ADD, @TrayIconData);
Application.ProcessMessages;

3.7.3 Membuat Koneksi

Proses koneksi yang dikerjakan pada sistem aplikasi UKM SMS


gateway yaitu proses koneksi ke database dan koneksi HP dengan PC
server SMS.

3.7.3.1 Koneksi ke Database

Proses koneksi ke database dilakukan pada saat tahap pembuatan


form utama dikerjakan dengan mengecek setingan untuk melakukan
koneksi yang ada pada ../setting/koneksi.set. Perintah yang dikerjakan
untuk melakukan koneksi ke database diperlihatkan seperti dibawah ini.

...
ls.LoadFromFile(ExtractFilePath(Application.ExeName) +
'setting\koneksi.set');
with ZConnection1 do
begin
HostName:= ls.Values['HostName'];
User:= ls.Values['UserName'];
Password:= ls.Values['Password'];
Database:= ls.Values['Database'];
try
Connect;
except
ShowMessage('Koneksi Gagal');
end;
end;
...

3.7.3.2 Koneksi HP ke Server SMS

Proses koneksi yang dikerjakan untuk melakukan koneksi HP


dengan PC server SMS dilakukan pada dua bagian, yang pertama sekali
sistem melakukannya ketika proses pembuatan form utaka dikerjakan.
Sedangkan pada bagian lain merupakan koneksi yang dilakukan secara
manual dengan menggunakan tombol dimana ketika sistem aplikasi

56
sudah berjalan server SMS belum terkoneksi dengan HP yang digunakan
pada server SMS. Perintah yang dikerjakan untuk melakukan koneksi HP
dengan PC server SMS yaitu:

RestartAllConnections(@ChangePhoneState,@ChangeSecuritySt
ate,@HandleIncomingSMS);

3.7.4 Pembacaan Pesan Masuk

Untuk dapat memerintahkan aplikasi UKM SMS Gateway agar


dapat memberikan/ mengambil SMS pertama yang ada dalam antrian
SIM Card HP, digunakan perintah berikut.

S4:=GetGammuUnicodeString(sms.SMS[1].Text);
NoHP:=GetGammuUnicodeString(sms.SMS[1].Number)

S4 adalah isi dari Pesan/ SMS sedangkan NoHP adalah nomor


pengirim SMS. Apabila dalam antian SIM Card HP belum ada SMS,
maka S4 dan NoHP berisi string kosong. Setelah SIM Card terisi Pesan/
SMS, maka baru sistem akan mengolah Pesan tersebut dengan
memanggil fungsi OlahPesan(no: AnsiString; pesan: AnsiString) dengan
mengisi parameter no dengan NoHP dan pesan dengan S4. dalam
aplikasi yang dibuat nomor tidak sisimpan dalam variabel NoHP tetapi
langsung di masukkan perintah mengambil nomor pengirim pada fungsi
OlahPesan seperti berikut ini.

OlahPesan(GetGammuUnicodeString(sms.SMS[1].Number),S4);

Nomor dari variabel no pada fungsi OlahPesan yang kikirim


melalui perintah GetGammuUnicodeString(sms.SMS[1].
Number) akan diambil untuk mencocokan dengan database sebagai
pengecekan registrasi anggota yaitu dengan memanggil fungsi
CekRegistrasi (no_hp : String) dengan nilai kembalian akan ditampung

57
ke variabel reg. Adapun perintah pemanggilan fungsi pengecekan
registrasi anggota sebagai berikut.

reg:= CekRegistrasi(no);

Nilai kembalian dari proses CekRegistrasi akan dicocokan dengan


kode yang telah ditetapkan dalam serverSMS. Adapun proses yang
dikerjakan dari kembailian proses diatas sebagai berikut.

// jika UKM berarti status anggota sbg UKM


if (UpperCase(reg)='UKM') then
begin
{disini proses informasi untuk anggota UKM}
end
// jika BANK berarti status anggota sbg BANK
else if (UpperCase(reg)='BANK') then
begin
{disini proses informasi untuk anggota
BANK}
End
// jika BELUM berarti blum terdaftar sbg anggota
else if (UpperCase(reg)='BELUM') then
begin
{disini proses informasi jika belum
Teregistrasi sbg anggota}
End;

3.7.5 Pengecekan SMS Tertunda

Dikerjakan untuk mengecek pesan pending yang didapat ketika


UKM merequest informasi kredit di server SMS dimana dalam proses
request tersebut didalam server SMS tidak tersedia informasi yang
direquest, tetapi ada sejumlah Bank yang terdaftar dalam server SMS
melayani request informasi tersebut, maka dalam kasus ini server SMS
mengirim pesan request tersebut ke beberapa Bank yang membuka
layanan request dari UKM serta menyimpan pesan request dari UKM
dalam database server untuk diperoses kemudian jika sudah ada jawaban
dari Bank. Perintah yang dikerjakan oleh sistem untuk mengecek adanya
SMS pending yaitu.

58
...
qry:= TZQuery.Create(Self);
qry.Connection:= ZConnection1;
qry.RequestLive:= True;
sSQL:= 'SELECT * FROM tbsmspending WHERE status
="Pending"';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount<>0) then
begin
kode:= qry.FieldByName('kode').AsString;
no:= qry.FieldByName('nohp').AsString;
pesan:= qry.FieldByName('pesan').AsString;
PesanPending(kode,no,pesan);
end;
qry.Free;
...

3.7.6 Pengambilan Pesan Informasi pada Server SMS

Pengambilan informasi pada server SMS diperoleh dari perintah


pesan yang dikirimkan oleh anggota pada server SMS maupun yang
bukan anggota. Proses ini sebenarnya dikerjakan dengan menggunakan
fungsi olah pesan sehingga output yang diperoleh dari fungsi olah pesan
berupa pesan informasi yang akan dikirim ke pihak yang merequest
informasi tersebut. Berikut ini merupakan penggalan perintah yang
dikerjakan untuk mengambil informasi dari server SMS yaitu.

if (UpperCase(reg)='UKM') then
begin
cmd:= copy(pesan,0,5);
if (UpperCase(cmd)='UNREG') then
begin
sSQL:= 'SELECT NoReg FROM tbukm WHERE HP="' + no +
'"';
ExecQuery(sSQL,qry,False);
noreg:= qry.FieldByName('NoReg').AsString;
sSQL:= 'DELETE FROM tbserversms WHERE NoReg="' +
noreg + '"';
ExecQuery(sSQL,qry,True);
balas:= balas + 'Terimakasih..ID Anda telah
dikeluarkan dari keanggotaan pada server UKM
SMS Gateway. untuk sementara Anda tidak bisa
menggunakan layanan ini lagi';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

59
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' +
kode + '","' + FormatDateTime('yyyy-mm-dd',
Now) + '","' + FormatDateTime('hh:nn:ss',
Now) + '","' + no + '","' + balas + '")';
ExecQuery(sSQL,qry,true);
end
else
begin
cmd:= Copy(pesan,0,3);
//jika KRD berarti request info Kredit
if (UpperCase(cmd)='KRD') then
begin

{proses request info kredit oleh UKM}

end
//jika INF berarti request info perintah UKM
else if (UpperCase(cmd)='INF') then
begin

{proses request info perintah untuk UKM}

end
//jika REG berarti mencoba Registrasi kembali
else if (UpperCase(cmd)='REG') then
begin
....
balas:= balas + 'ID Anda telah terdaftar
sebelumnya dengan Nama Usaha:...
, untuk info ketik: INF';
....
end
//jika UKM berarti input data nggota UKM
else if (UpperCase(cmd)='UKM') then
begin

{proses isi data registrasi untuk UKM}

end
//jika SRT berarti request syarat Kredit
else if (UpperCase(cmd)='SRT') then
begin

{proses request syarat kredit oleh UKM}

end

60
else // selain dari instruksi yang diatas
begin
balas:= balas + 'Maaf!! Perintah yang Anda
Ketik tidak dikenal.. untuk info
ketik: INF';
....
End;
End;

end
else if (UpperCase(reg)='BANK') then
begin
kode:= IntToStr(YearOf(Now)) + IntToStr
(MonthOf(Now)) + IntToStr(DayOf(Now))
+ IntToStr(HourOf(Now)) + IntToStr
(MinuteOf(Now)) + IntToStr
(SecondOf(Now)) + IntToStr
(MilliSecondOf(Now));
cmd:= copy(pesan,0,5);
if (UpperCase(cmd)='UNREG') then
begin
sSQL:= 'SELECT NoReg FROM tbbank WHERE HP="' + no +
'"';
ExecQuery(sSQL,qry,False);
noreg:= qry.FieldByName('NoReg').AsString;
sSQL:= 'DELETE FROM tbserversms WHERE NoReg="' +
noreg + '"';
ExecQuery(sSQL,qry,True);
balas:= balas + 'Terimakasih..ID Anda telah
dikeluarkan dari keanggotaan pada server UKM
SMS Gateway. untuk sementara Anda tidak bisa
menggunakan layanan ini lagi';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' +
kode + '","' + FormatDateTime('yyyy-mm-dd',
Now) + '","' + FormatDateTime('hh:nn:ss',
Now) + '","' + no + '","' + balas + '")';
ExecQuery(sSQL,qry,true);
end
else
begin
cmd:= Copy(pesan,0,3);
//jika BNK berarti Input data Anggota BANK
if (UpperCase(cmd)='BNK') then
begin

61
{proses isi data registrasi untuk BANK}

End
//jika ADD berarti input data Kredit BANK
else if (UpperCase(cmd)='ADD') then
begin

{proses input kredit oleh BANK}

End
//jika UPD berarti Update data Kredit BANK
else if (UpperCase(cmd)='UPD') then
begin

{proses update data kredit oleh BANK}

End
//jika INF berarti request info Perintah BANK
else if (UpperCase(cmd)='INF') then
begin

{proses request info perintah untuk BANK}

End
//jika IDK berarti request ID Kredit BANK
else if (UpperCase(cmd)='IDK') then
begin

{proses request Id Kredit oleh BANK}

End
//jika REG berarti mencoba daftar ulang BANK
else if (UpperCase(cmd)='REG') then
begin
....
balas:= balas + 'Maaf!! ID Anda telah
terdaftar sebelumnya dengan Nama
Perusahaan: .., untuk info ketik: INF';
....
end
//jika SRT berarti input syarat Kredit BANK
else if (UpperCase(cmd)='SRT') then
begin

{proses input syarat kredit oleh BANK}

end
//jika KRD berarti menutup kredit dan kunci request
else if (UpperCase(cmd)='KRD') then
begin

{proses tutup kredit/ kunci request dari server}

62
End
else //selain perintah u/ anggota BANK diatas
begin
balas:= balas + 'Maaf!! Perintah yang Anda
Ketik tidak dikenal.. untuk info ketik:
INF';
....
End;
End;

End
else if (UpperCase(reg)='BELUM')
begin
....
cmd:= Copy(pesan,0,3);
//jika REG berarti Registrasi Anggota
if (UpperCase(cmd)='REG') then
begin
ja:= Copy(pesan,5,3);
//jika BNK berarti jenis anggota sbg BANK
if (UpperCase(ja)='BNK') then
begin

{proses registrasi anggota untuk BANK}

End
//jika UKM berarti jenis anggota sbg UKM
else if (UpperCase(ja)='UKM') then
begin

{proses registrasi anggota untuk UKM}

end
else //selain UKM dan BNK tidak dikenal
begin
balas:= balas + 'Perintah tidak
dikenal, untuk Daftar ketik: REG
namausaha, namausaha(UKM/BNK) cth: REG
UKM';
....
End;
end
else //selain REG perintah tidak dikenal
begin
balas:= balas + 'Anda belun Registrasi,
untuk Registrasi ketik: REG namausaha,
namausaha(UKM/BNK) cth: REG UKM';
......
End;
End;

63
3.7.7 Fungsi Thread

Dikerjakan secara terus menerus selama sistem aplikas masih


berjalan. Fungsi ini digunakan untuk mengirim pesan informasi yang
diperoleh dari server SMS kepada yang merequest informasi tersebut.
Fungsi ini hanya mengambil pesan informasi yang sudah berbentuk file
.txt yang didapat dari proses olah pengambilan informasi diatas. Perintah
yang dikerjakan untuk mengirim pesan adalah sebagai berikut.

....
error:=GSM_SendSMSMessage(GSMDevice[num].DeviceID,@MultiS
MS.SMS[j],StrToInt(GatewayINIFile.ReadString('general','W
aktuHabisKirimSMS','30')));
...

Setelah pengiriman setiap pesan yang dilakukan selesai, fungsi ini


akan menghapus informasi yang sudah diproses/ dikirim dalam hal disini
adalah file outbox*.txt agar informasi tersebut tidak dikirim kembali.
Perintah yang dikerjakan untuk menghapus file informasi yaitu.

DeleteFile(GatewayINIFile.ReadString('general',
'senddir',
ExtractFilePath(Application.ExeName))+sr.Name);

64
BAB IV

PENGUJIAN DAN ANALISA

Pada bab ini menjelaskan tahap – tahap uji coba sistem yang
merupakan tahap akhir dari proses pembuatan sistem yang telah
dikembangkan. Pengujian sistem dilakukan untuk mengetahui kinerja kerja
sistem beserta kekurangan nya. Pengujian dilakukan melalui beberapa tahap
diantaranya tahap pengujian sistem baik dari segi Hardware, Software, tahap
penerimaan dan pengiriman SMS/ Pesan, penggunaan penyedia layanan,
kinerja kerja sistem secara keseluruhan serta kesalahan – kesalahan yang
mungkin terjadi pada sistem.

4.1 MENJALANKAN APLIKASI UKM SMS GATEWAY

Tampilan aplikasi UKM SMS Gateway diawal kali dijalankan


diperlihat kan seperti gambar dibawah.

Gambar 4.1 Tampilan aplikasi pada awal running

65
Pada tampilan awal yang telah berjalan akan diperlihatkan info
HP/ GSM modem yang digunakan pada Server SMS. Tampilan ini
sengaja dibuat default pada menu Informasi, disini supaya bisa
memastikan apakah sistem aplikasi sudah berjalan/ terkoneksi dengan
HP yang tersambung pada Server SMS atau belum. Jika belum maka
langkah yang harus dilakukan yaitu dengan melakukan koneksi secara
manual dengan menekan tombol Restart Koneksi.

Gambar 4.2 Tampilan aplikasi pada menu Banking

Pada aplikasi diperlihatkan informasi data-data Bank yang telah


terdaftar dalam server SMS serta data-data kredit yang pernah
ditawarkan oleh masing-masing Bank seperti yang diperlihatkan pada
gambar diatas

66
Gambar 4.3 Tampilan aplikasi pada menu UKM

Berisi data-data anggota yang berstatus sebagai UKM yang telah


terdaftar di server SMS dan juga data informasi yang pernah direquest oleh
setiap UKM.

Gambar 4.4 Tampilan aplikasi pada menu SMS Gateway

67
Pada tampilan menu SMS Gateway diperlihatkan informasi pesan
masuk, pesan keluar dan informasi UKM Gateway Log yang
menampilkan log koneksi dengan perangkat HP yang digunakan pada
Server SMS.

Gambar 4.5 Tampilan aplikasi pada menu SMS Gateway

Pada gambar diatas memperlihatkan daftar perintah-perintah pesan yang


digunakan dalam proses request informasi dengan server SMS.

Gambar 4.6 Tampilan halaman form about

68
Icon pada sistem tray aplikasi UMK SMS Gateway

Gambar 4.7 Tampilan icon aplikasi UKM SMS Gateway

Tampilan icon tersebut akan tampil ketika program aplikasi


dijalankan, ketika pada program aplikasi UKM SMS Gateway dilakukan
penutupan dengan mengklik tombol silang yang ada pada sudut
kanan atas program aplikasi yang berjalan maka tampilan aplikasi yang
ada pada desktop akan hilang dan untuk menanplkannya kembali cukup
klik 2 kali atau klik kanan pada icon tray UKM SMS Gateway lalu pilih
menu informasi, maka tampilan program aplikasi akan kembali
ditampilkan pada desktop.

4.2 PROSES QUERY DATABASE

Proses manipulasi dan pencarian data pada sistem UKM


SMSGateway semua dilakukkan dengan perintah SQL. Waktu yang
dibutuhkan dalam memperoleh data informasi relatif sangat cepat
(kurang/ berkisar 1 detik) mengingat jumlah data yang digunakan masih
sedikit.

4.3 PENGGUNAAN PENYEDIA LAYANAN

Selama proses pengujian, dilakukan pengamatan terhadap


penggunaan dua layanan yang berbeda yaitu Telkomsel (AS dan
Simpati) dengan Excelindo (XL jempol dan bebas)
Hasil pengamatan dari proses pengujian menunjukkan bahwa
dalam keadaan normal (tidak adanya gangguan dari penyedia layanan),
waktu layanan dari Telkomsel dengan Excelindo kurang lebih sama.
Pengamatan dilakukan pada proses pengiriman pesan dari satu HP
sampai pesan diterima di HP Server SMS dan oleh sistem aplikasi ,
pesan tersebut diolah sehingga diperoleh suatu informasi yang kemudian
informasi tersebut oleh sistem di kirim kembali ke HP pengirim, dalam

69
proses ini hanya memakan waktu kurang lebih berkisar antara 6 sampai
15 detik.

4.4 PERMINTAAN LAYANAN INFORMASI

Dilakukan terhadap proses pengiriman SMS/ Pesan permintaan


informasi ke Server SMS dengan menggunakan beberapa HP serta
beberapa penyedia layanan. Berikut ini merupakan tabel hasil pengujian
yang telah dilakukan.

Tabel 4.1 Layanan Registrasi anggota


Aksi Normal
User Server SMS
Kasus 1
1. Mengirim Pesan = ‘REG 2. Pesan berisi = ‘REG UKM’
UKM’ diterima.
3. Cek registrasi
4. Cek Perintah
5. Query ke database
6. Query diterima
7. Balas pesan berisi = ‘<UKM-
GET> Isi data Anda
ketik:UKM#Nmusaha#BdgUsaha#
untung#Alamat#ContPerson,
cth:UKM#Jaya Abadi#Ternak
Ayam#8000000#Jl. Keputih No.2
Surabaya#Ir.Suparno’
8. Pesan berisi = ‘<UKM-GET>
Isi data Anda
ketik:UKM#Nmusaha#BdgUs
aha#untung#Alamat#ContPers
on, cth:UKM#Jaya
Abadi#Ternak
Ayam#8000000#Jl. Keputih
No.2 Surabaya#Ir.Suparno’
diterima.

70
User Server SMS
Kasus 2
1. Mengirim pesan = 2. Pesan berisi = ‘UKM#Maju
‘UKM#Maju Raya#Usaha Raya#Usaha
Kerupuk#15000000#Jl. Kerupuk#15000000#Jl. Mulyosari
Mulyosari No.46 No.46 Surabaya#Sumarno’
Surabaya#Sumarno’ diterima.
3. Cek registrasi
4. Cek Perintah
5. Query ke database
6. Query diterima
7. Balas pesan berisi = ‘<UKM-
GET> Terimakasih Anda telah
bergabung di sistem -UKM
GATEWAY- sebagai registrasi
UKM. Nomor registrasi Anda :
20071126088, utk info ketik: INF’
8. Pesan berisi = ‘<UKM-GET>
Terimakasih Anda telah
bergabung di sistem -UKM
GATEWAY- sebagai
registrasi UKM. Nomor
registrasi Anda :
20071126088, utk info ketik:
INF’ diterima.
Kasus 3
1. Mengirim Pesan = ‘REG 2. Pesan berisi = ‘REG BNK’
BNK’ diterima.
3. Cek registrasi
4. Cek Perintah
5. Query ke database
6. Query diterima
7. Balas pesan berisi = ‘<UKM-
GET> Isi data Anda
ketik:BNK#NamaBank#ContactPe
rson,
cth:BNK#MANDIRI#Dr.Subroto’

71
User Server SMS
8. Pesan berisi = ‘<UKM-GET> Isi
data Anda
ketik:BNK#NamaBank#ContactP
erson,
cth:BNK#MANDIRI#Dr.Subroto’
diterima.
Kasus 4
1. Mengirim pesan = 2. Pesan berisi =
‘BNK#MANDIRI#Dr.Subroto’ ‘BNK#MANDIRI#Dr.Subroto’
diterima.
3. Cek registrasi
4. Cek Perintah
5. Query ke database
6. Query diterima
7. Balas pesan berisi = ‘<UKM-GET>
Terimakasih Anda telah bergabung di
sistem -UKM GETWAY- sebagai
registrasi BANK. Nomor Registrasi
Anda: 20071123235723, utk info
ketik: INF’
8. Pesan berisi = ‘<UKM-GET>
Terimakasih Anda telah
bergabung di sistem -UKM
GETWAY- sebagai registrasi
BANK. Nomor Registrasi Anda:
20071123235723, utk info ketik:
INF’ diterima.
Aksi Lain
Kasus lain 1. Perintah kurang lengkap, Balas pesan
= ‘<UKM-GET> Untuk dapat
menggunakan layanan ini, Silahkan
Daftar identitas usaha Anda terlebih
dahulu!. Untuk Daftar ketik: REG
UKM’
2. Perintah salah, balas pesan = ‘<UKM-
GET> ID Anda belum terdaftar. Untuk
dapat menggunakan layanan ini,
Silahkan Daftar identitas usaha Anda
terlebih dahulu!. Untuk Daftar ketik:
REG UKM’
3. Pesan balasan diterima.

72
Tabel 4.2 Layanan Request Informasi
Aksi Normal
UKM Server SMS BANK
Kasus 1
1. Mengirim pesan 2. Pesan berisi : ‘krd bln
: ‘krd bln da da 8000000’ diterima
8000000’ 3. Cek registrasi
4. Cek Perintah
5. Query ke database
6. Query diterima
7. Balas pesan berisi =
‘<UKM-GET>
MANDIRI,Jangka
Panjang,20000000,2th
n,2.5%,Dr.Subroto,+6
281361276182#’
8. pesan berisi:
‘<UKM-GET>
MANDIRI,Jangk
a Panjang,
20000000,2thn,2.
5%,Dr.Subroto,+
6281361276182#

Kasus 2
1. Mengirim pesan 2. Pesan berisi : ‘krd bln
: ‘krd bln da da 50000000’
50000000’ diterima
3. Cek registrasi
4. Cek Perintah
5. Query ke database
6. Query diterima
7. kirim pesan berisi =
‘<UKM-GET> krd
bln da 50000000’
8. Pesan berisi:
‘‘<UKM-GET> krd
bln da 50000000’
diterima

73
UKM Server SMS BANK
9. Balas pesan berisi:
‘<UKM-GET>
Silahkan
tunggu..selama Server
mendapat Reply dari
10. pesan berisi: Bank’
‘<UKM-GET>
Silahkan
tunggu..selama
Server
mendapat
Reply dari
Bank’ diterima
Kasus 3
1. Mengirim pesan: 2. Pesan berisi :
‘srt#Mandiri#bln ‘srt#Mandiri#bln#200
#20000000’ 00000’ diterima
3. Cek registrasi
4. Cek Perintah
5. Query ke database
6. Query diterima
7. Balas pesan berisi =
‘<UKM-GET>
fotocopy tagihan
listrik akhir bulan,
Identitas diri,
penghasilan >
8. pesan berisi: 8000000/bln, tagihan
‘<UKM-GET> PAM akhir bulan’
fotocopy tagihan
listrik akhir
bulan, Identitas
diri, penghasilan
> 8000000/bln,
tagihan PAM
akhir bulan’
diterima

74
UKM Server SMS BANK
Aksi Lain
Kasus yang lain 1. Parameter besar kredit
bukan angka. Balas
pesan = ‘<UKM-
GET> Maaf,
Parameter Besarkredit
pada pesan bukan
merupakan angka, cth
perintah yg valid:
KRD HRI DA
8000000’
3. Info kredit tidak ada.
Balas pesan =
‘<UKM-GET>
Untuk sementara
pihak BANK belum
menawarkan jenis
kredit yang anda
request’
4. Perintah salah. Balas
pesan = ‘Perintah
tidak dikenal.
Silahkan ketik INF
untuk info perintah’
5. Id telah terdaftar.
Balas pesan = ‘ID
Anda telah terdaftar
sebelumnya dengan
Nama Usaha: ..untuk
info ketik: INF’

75
Tabel 4.3 Layanan pemberi informasi
Aksi Normal
BANK Server SMS
Kasus 1
1. Mengirim pesan : ‘Add#Jangka 2. Pesan berisi : ‘Add#Jangka
Panjang#bln#20000000#3THN# Panjang#bln#20000000#3THN#
3%#Aktif’ 3%#Aktif’ diterima
3. Cek registrasi
4. Cek Perintah
5. Query ke database
6. Query diterima
7. Balas pesan berisi = ‘<UKM-
GET> Terimakasih. ID Kredit
Perusahaan Anda :
200711260414, Input syarat
Kredit ketik:
SRT#IdKredit#Syarat.
Cth:SRT#1001#syarat_1#syarat
8. Pesan berisi = ‘<UKM-GET> _2#syarat_n’
Terimakasih. ID Kredit
Perusahaan Anda :
200711260414, Input syarat
Kredit ketik:
SRT#IdKredit#Syarat.
Cth:SRT#1001#syarat_1#syarat
_2#syarat_n’ diterima
Kasus 2
1. Mengirim pesan : 2. Pesan berisi :
‘UPD###30000000##3%##Ope ‘UPD###30000000##3%##Ope
n#200711260414’ n#200711260414’ diterima
3. Cek registrasi
4. Cek Perintah
5. Query ke database
6. Query diterima
7. Balas pesan berisi = ‘<UKM-
GET> Terimkasih. data dengan
ID Kredit : 200711260414 Telah
berhasil di Update’

76
BANK Server SMS

8. Pesan berisi = ‘<UKM-GET>


Terimkasih. data dengan ID
Kredit : 200711260414 Telah
berhasil di Update’ diterima

Kasus 3
1. Mengirim pesan : 2. Pesan berisi :
‘SRT#200711260414#Copy ‘SRT#200711260414#Copy
KTP#Rekenig listrik bulan KTP#Rekenig listrik bulan
terakhir#penghasilan > terakhir#penghasilan >
10000000’ 10000000’ diterima
3. Cek registrasi
4. Cek Perintah
5. Query ke database
6. Query diterima
7. Balas pesan berisi = ‘<UKM-
GET> Terimakasih atas
kelengkapan data2 pendukung
kredit perusahaan Anda.’
8. Pesan berisi : ‘<UKM-GET>
Terimakasih atas kelengkapan
data2 pendukung kredit
perusahaan Anda.’ diterima
Kasus 4
1. Mengirim pesan : ‘idk’ 2. Pesan berisi : ‘idk’ diterima
3. Cek registrasi
4. Cek Perintah
5. Query ke database
6. Query diterima
7. Balas pesan berisi = ‘<UKM-
GET> BLN,20000000:
200711260414# ’
8. Pesan berisi : ‘<UKM-GET>
BLN,20000000:200711260414#
’ diterima

77
BANK Server SMS
Aksi Lain
Kasus yang lain 1. Pesan kurang lengkap. Balas
pesan = ‘<UKM-GET> Maaf!!
Data yg anda kirim kurang
lengkap!. Untuk info ketik :
INF’
2. Telah terdaftar sebelumnya.
Balas pesan = ‘<UKM-GET>
Maaf!! ID Anda telah terdaftar
sebelumnya dengan Nama
Perusahaan: .., untuk info ketik:
INF’
3. ID Kredit tidak ada. Balas pesan
= ‘<UKM-GET> Mohon Maaf!!
Sampai sekarang Anda belum
menawarkan/memiliki
IdKredit!!’
4. Perintah tidak dikenal. Balas
pesan = ‘<UKM-GET> Maaf!!
Perintah yang Anda Ketik tidak
dikenal.. untuk info ketik: INF’
5. Pesan balasan diterima.

Hasil pengujian diatas telah di uji coba dengan menggunakan


spesifikasi sebagai berikut:

1. Server SMS
a. HP Nokia 5110 dengan kartu AS, XL bebas
b. Komputer Pentium III 800MHz, RAM 256, dengan database
MySQL 4.1.12

2. User / Anggota
a. HP yang digunakan
i. Nokia 8210
ii. Nokia 6100
iii. Nokia 2100
iv. Nokia 3310
v. Motorola

78
vi. Siemens
vii. Sony Ericson

b. Kartu yang digunakan


i. Simpati dan AS
ii. Kartu XL

Pengujian yang dilakukan secara berulang-ulang untuk


mengetahui kinerja kerja sistem dari Program aplikasi UKM SMS
Gateway. Pengujian yang dilakukan diantaranya:

1. Dilakukan pengiriman 2 pesan sekaligus dengan permintaan layanan


yang sama
2. Dilakukan pengiriman 2 pesan sekaligus dengan permintaan layanan
yang berbeda
3. Dilakukan pengiriman 3 pesan sekaligus dengan permintaan layanan
yang sama
4. Dilakukan pengiriman 3 pesan sekaligus dengan permintaan layanan
yang berbeda

Diperoleh hasil bahwa SMS/ Pesan yang masuk ke HP Server


SMS secara beruntun dan oleh Server SMS langsung dibalas.

4.5 PEMBUATAN FILE LOG

Pada aplikasi Sistem UKM SMS Gateway dibentuk tiga file Log
yang digunakan untuk memonitor proses / aksi-aksi yang terjadi ketika
aplikasi Sistem UKM SMS Gateway dijalankan. Ketiga file Log yang
dibentuk diantaranya yaitu.

1. File Terima1.log
2. File Kirim1.log
3. File ukmsmsgateway.log

79
4.5.1 File Terima1.log

Gambar 4.8 File Log pesan masuk ke server SMS

File Terima.log berisi data-data pesan yang masuk ke server SMS


yang dikirim user yang telah menjadi anggota pada server SMS maupun
belum. Pada file ini dicatat tanggal diterima, jam diterima, nomor HP
pengirim dan pesan yang dikirim ke server SMS.

4.5.2 File Kirim1.log

Gambar 4.9 File Log pesan keluar dari server SMS

File Kirim1.log berisi informasi pesan yang pernah dikirimkan oleh


server SMS ke luar baik ke anggota yang telah terdaftar maupun yang belum
terdaftar.

80
4.5.3 File ukmsmsgateway.log

Gambar 4.10 File Log monitor Sistem UKM SMS Gateway berjalan

File ukmsmsgateway.log digunakan untuk memonitor program aplikasi


Sistem UKM SMS Gateway yang sedang berjalan. File ini berisi tanggal dan
jam aplikasi mulai dijalankan, aplikasi tidak terkoneksi dengan alat (HP),
aplikasi terhubung dengan alat (HP) dan tanggal dan jam aplikasi Sistem
UKM SMS Gateway ditutup.

4.6 KESALAHAN – KESALAHAN YANG MUNGKIN TERJADI

Secara internal, selama proses ujicoba yang dilakukan hingga


akhir pengujian tidak ditemukan kesalahan yang tidak diinginkan.
Namun tidak menutup kemungkinan terjadinya kesalahan-kesalahan
pada proses pengujian berikutnya yang sebabkan diantaranya.

1. Kesalahan yang terjadi pada penyediaan layanan


2. Pengaturan koneksi ke Database yang kurang benar
3. Kabel data koneksi HP dengan Server SMS kurang bagus
4. Pengaturan sistem yang tidak benar
5. Kurang stabilnya HP yang digunakan pada Server SMS

Sehingga proses pengolahan dan pengiriman pesan kembali


menjadi tidak benar.

81
---Halaman ini sengaja dikosongkan---

82
BAB V

PENUTUP

5.1 KESIMPULAN
Berdasarkan perancangan, pembuatan dan pengujian sistem yang
dilakukan, dapat diambil beberap kesimpulan sebagai berikut :
1. server SMS gateway dapat melayani permintaan informasi kredit
UKM yang dilakukan oleh setiap anggotanya.
2. permintaan informasi kredit UKM bisa diberikan oleh server SMS
dalam bentuk Bank tertentu saja maupun seluruh Bank yang
menyediakan informasi kredit tersebut.
3. Proses layanan informasi kredit yang diberikan oleh server SMS
Gateway menyangkut namakredit,besarkredit,jangkawaktu,bunga
kredit dan contact person serta nomor Bank yang bisa dihubungi.
4. server SMS Gateway tidak membutuhkan operator dalam layanan
memberi dan mencari informasi.
5. Proses berjalan dan kerja aplikasi Sistem UKM SMS Gateway dapat
disimpan dalam file Log baik pesan masuk, keluar maupun Log dari
program aplikasi yang sedang berjalan.

5.2 SARAN
Layanan Penyedia Informasi Kredit UKM Berbasis SMS Gateway
yang di implementasikan hanya pada bidang penyediaan informasi kredit
usaha. Tetapi dalam implementasi tersebut masih ada kekurangan-
kekurangan nya sehingga perlu adanya saran penyempurnaan sistem.
Adapun saran-saran tersebut antara lain.
1. Penggunaan perintah masih bersifat statis, diharapkan untuk
pengembangan bisa membuat perintah pesan secara dinamis dimana
walaupun kode perintah dirubah dalam database dengan kode yang
baru sistem tetap mengerti apa yang harus dikerjakan.
2. Pada proses penerimaan maupun pengiriman pesan informasi yang
dilakukan pada sistem aplikasi UKM SMS Gateway masih melalui
satu unit HP sehingga untuk proses penerimaan pesan yang terlalu
banyak dapat memperlambat proses pemberian informasi kepada
yang merequest informasi, saran diharapkan untuk pengembangan
dapat menggunakan dua HP dimana satu khusus untuk menerima
pesan dan yang satu lagi untuk mengirim pesan.

83
---Halaman ini sengaja dikosongkan---

84
DAFTAR PUSTAKA

[1] Alam, Agus J, M., 2003. Belajar Sendiri Mengelola Database dengan
Borland Delphi 7, Elek Media komputindo:Jakarta.
[2] Basofi, Arif., Sistem Basis Data, http://lecturer.eepis-its.edu/~ariv
[3] GAMMU Readme version 10.10.2003, GAMMU [www.mwiacek.com]
[4] K, Chandra, Ian., 2003. Nokia PC Suite 5 dengan Oxygen Phone
Manager II, Elek Media Komputindo:Jakarta
[5] Kadir, Abdul., 1999, Konsep dan Tuntunan Praktis Basis Data, Penerbit
Andi, Yogyakarta,
[6] Kroenke, M.D., Database Processing, Prentice Hall International, Inc.,
1998
[7] Martina, Inge, Ir., Pemrograman Internet Dengan Delphi, Penerbit Elex
Media Komputindo, Jakarta, 2002.
[8] Nogroho, Widodo, 2001, Tip dan Trik Pemrograman Delphi, Penerbit
Elek Media Komputindo: Jakarta
[9] Zakaria, Markus,Teddy;Widiadhi,Josef., 2006. Aplikasi SMS Untuk
Berbagai Keperluan, Informatika:Bandung.

85
BIOGRAFI PENULIS
Penulis lahir di Babah Krueng, Peureulak, NAD, pada
tanggal 11 Maret 1982. Sebagai anak ke tiga dari tujuh
bersaudara dari seorang ibu bernama Painem dan ayah
bernama Muhammad Jamil. Dan berikut ini adalah
identitas tentang penulis :

Nama Lengkap : Baharuddin


Nama Panggilan : Bahar
Tempat Tinggal : Jln. Jend. A. Yani, Gg. Kurnia No 61 Paya Bujuk
Seulemak Langsa - NAD 24411
Telepon : 081361276182
Email : bahar_mj@yahoo.com
bahar_j82@yahoo.com
Pendidikan formal yang pernah ditempuh:
1. SD Negeri Tualang Muda-Peureulak-NAD, lulus tahun 1996.
2. SMP Negeri 3 Peureulak-NAD, lulus tahun 1999.
3. SMK Negeri 2 Langsa-NAD, lulus tahun 2002.
4. Politeknik TEDC Bandung, Diploma III Jurusan Teknologi
Informatika, lulus tahun 2005.
5. Polteknik Elektronika Negeri Surabaya-Institut Teknologi Sepuluh
November (PENS-ITS), Diploma IV Jurusan Teknologi Informasi,
Program Lintas Jalur Dikmenjur 5
Pada tanggal 24 Januari 2008 mengikuti Seminar Proyek Akhir
sebagai salah satu persyaratan untuk mendapatkan gelar Sarjana Sains
Terapan (S.ST) di Politeknik Elektronika Negeri Surabaya-Institut Teknologi
Sepuluh November (PENS-ITS).

Prestasi Dan Riwayat Kerja


1. Juara II LKS Tingkat Nasional Bidang Teknik Listrik tahun 2002
2. Tenaga Pengajar Tetap di SMK Negeri 2 Langsa, mulai ikatan tugas
tahun 2002 sampai sekarang
3. Tenaga Pengajar di SMK Negeri 4 Langsa (SMK Kelautan), mulai
Januari- september 2006
4. Tenaga Pengajar di Universitas Serambi Mekkah (USM), mulai
Januari-september 2006
5. Tenaga Pengajar di LP3I Langsa, mulai januari – september 2006.
LAMPIRAN

2
GAMMU README

Gammu README version 10.10.2003


-------------------------------
Q. What is this ?

A. This is package with different tools and drivers for Nokia


and other mobile phones released under GNU GPL/LGPL license
(see /copying file).

It's created by Marcin Wiacek and other people and based on


some experiences from Gnokii (www.gnokii.org) and MyGnokii
(www.mwiacek.com) projects.

Gammu (GNU All Mobile Management Utilities) was earlier (up


to version 0.58) called MyGnokii2.

NOTE: Name Gammu is not connected with Gammu from "Heretics


of Dune" written by Frank Herbert
----------------------------------------------------------------

Q. Can I use Gammu (Gammu dll or library) in own commercial)


applications ?

A. Gammu is currently licensed under GNU GPL license for normal


users. It means, that each application using it have to be
published with source. So, when you link Gammu source in
own, you should inform me and publish it with source. When
use Gammu dll or library, you also HAVE to publish your
source.

In the future probably it will be possible to get LGPL for


Gammu or next project from Marcin Wiacek called Gammu+.

NOTE: If you want to use Gammu in own applications, it will


be fair to give some gift like small sum of money, old
phone, etc. to author(s). It will be used for improving this
software.
----------------------------------------------------------------

Q. How can I help in writing this software ?

A. HELP IS VERY REQUIRED. Methods are many:

1. writing support for some models or fixing source (I can


give tips many times). Format and method of creating
patch files is described in develop docs.
2. reporting bugs (see "How to report bugs ?" question)
3. help in documentation or translations
4. help in discovering phone protocols
5. suggesting some changes to better :-)
6. giving some software (specs, tools, etc.) or hardware help

etc.
----------------------------------------------------------------

Q. What are things ToDo/planned ?

3
A. * these things can be done without anything (it will be done
everything
to make them):
* MMS
* giving support for more formats
* writing really usefull GUI
* ending win32 dll
* uploading some things over WAP
* AT modem emulator
* DKU-5 driver
* Symbian support
* SyncML
* .... (other)
* this things can be done after getting some hardware help:
* Nokia:
* N3410 Java support
* N5510 radio/MP3 support
* for Series 40 getting/setting/sending PustToTalk
settings, support for some types of files and MMC
(3300, 6230, etc.), probably some other things
connected with OMA, shutdown bitmap
* Other:
* more EMS features: polyphonic ringtones, more text
features, etc.
* all Siemens features
* all Motorola features
* .... (other)
----------------------------------------------------------------
Q. Where to get latest versions and support ?

A. * Latest versions are on www.mwiacek.com (win32 binaries,


gzip sources, ChangeLog)
* Michal Cihar prepared mirror (win32 binaries, gzip sources,
bzip2 sources, md5 checksums, ChangeLog) under
www.cihar.com/gammu/zips/
* ready Debian packages (thanks to Michal Cihar):
http://cihar.com/debian/
* ready RPM packages (thanks to Troy Engel):
ftp://ftp.falsehope.com/home/tengel/gammu/ and mirrors
updated during 24 hours:
ftp://rpmfind.net/linux/falsehope/home/tengel/gammu/
ftp://ftp.pbone.net/mirror/ftp.falsehope.net/home/tengel/ga
mmu/

* For support contact Marcin Wiacek (currently


marcin@mwiacek.com,
DO NOT USE marcin-wiacek@topnet.pl).
* You can also subscribe mailing list (see www.mwiacek.com
and subpage about Gammu) and get help there. List is used
also for annoucements about new versions. Archive of list
(starting 28 Sept 2002) is under
http://news.gmane.org/thread.php?group=gmane.linux.drivers.
gammu

TIP: If you want to have only general info about new


versions, you can subscribe
http://freshmeat.net/projects/gammu/annoucements

4
UPDATE: there are now some additional projects based on
Gammu:
* Wammu: graphic manager using Python
http://freshmeat.net/projects/wammu/
* Snofs: software to mount phone filesystem under some Linux
directory (something like Phone
Browser in PC Suite)
http://snofs.sourceforge.net/
----------------------------------------------------------------
Q. How to compile it ?

A. Method 1:
* under Unix (Linux)
first do "./configure" and later use "make" or "make
makelib"

After it can use "make install" or "make installshared"


to install it in your OS.
Method 2:
* under Linux based on RPM
first do "./configure" and then "make makerpm"
resulting rpm package could be installed via rpm --
install <package>
or
run rpmbuild -ta gammu-x.y.z.tar.gz
Method 3:
* under Linux based on Debian packages
Just running make deb should do the job. Note you will
need at least fakeroot, debhelper, libc6-dev
and autoconf installed.
Method 4:
* change parameters in /cfg/config.h
* compile it:
* under MS Visual C++ 6.0 for MS Windows enter into
/gammu/msvc6.mak directory and run gammu.dsw
* under MS Visual C++ 7.0 (.NET) for MS Windows enter
into /gammu/msvc7.mak directory and run gammu.vcproj
* under MS Visual C++ Toolkit 2003 not tested
yet. It should be similiar to MS VC .NET
* under MS Visual C++ Express
not tested yet. It should be similiar to MS VC .NET
* under Unix (Linux)
change compiler in /cfg/makefile.cfg (if required)
and use "make" or "make makelib"

After it can use "make install" or "make installlib"


to install it in your OS.
* under Borland C++ 3.1 for MS-DOS
I tried, but I can't do it :-(. Help required.
* under DJGPP for MS-DOS
* set CFLAGS and LDLIBS in cfg/Makefile.glo
* simply use "make djgpp" :-)
* under CygWin for Windows
I didn't try. Probably should work
* under Borland C++ Builder 5 Trial
* under Borland C++ Builder 6 Personal go into
gammu/bcc.mak and check if there is subdirectory
"output" (if not, create it). Then run gammu.bpr

5
TIP: gammu.bpr was created using "Tools/Visual C++
Project Conve.." and little modified
later.
* under Borland C++ command line tools
go into gammu/bcc and check if there is subdirectory
"output" (if not, create it). Then make "make -
fgammu.mak" from command line.

TIP: gammu.mak was created in Borland C++ Builder using


"Project/Export makefiles" from main menu.
* under Borland C++ X - you need to create new
makefile.It was added to some older versions too.
----------------------------------------------------------------
Q. Where to get compilers and libraries to make Gammu ?

A. compilers
* MS Visual C++ 6.0
* MS Visual C++ 7.0 (.NET)
go to the shop ;-).It's commercional software.
* MS Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/
* MS Visual C++ Express
search on microsoft.com
* compilers for Unix (Linux) like gcc or kgcc (for free)
available in Net and in Linux distributions included into
CD for many newspapers. Installation depends on
distribution.
* DJGPP (for free)
see http://www.midpec.com/djgpp/ (you have many info there)

OR

1. go directly into http://www.simtel.net


2. find section for DJGPP
3. download packages
v2/readme.1st - Instructions for DJGPP setup
v2/faq230b.zip - The DJGPP Frequently Asked
Questions

v2/djdev203.zip - The DJGPP Development kit


v2misc/csdpmi4b.zip - The DPMI Server
v2gnu/bnu210b.zip - The GNU Binary Utilities
v2gnu/gcc2952b.zip - The GNU C Compiler
v2gnu/mak279b.zip - The GNU Make Utility or newer
4. unzip to one directory (let's say C:\DJGPP)
5. add to autoexec.bat these lines:
PATH C:\DJGPP\BIN;%PATH%
SET DJGPP=C:\DJGPP\DJGPP.ENV
* Borland C++ Builder 5/6
Personal version is given for free (see www.borland.com).
You can download it from Borland, take from CD added to
many computer magazines or use Trial versions also
put into many magazines CD.
* Borland C++ compiler (for free)
See www.borland.com. It was added to many computer
magazines with CD.
* Borland C++ X
www.borland.com

6
libraries
* MySQL
www.mysql.com
* MS Platform SDK
www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-
full.htm
Please note, that will need probably MS Internet Explorer
with enabled ActiveX to download it. Platform SDK is added
to MSDN subscriptions too
* BlueZ
www.bluez.org
----------------------------------------------------------------
Q. What are known problems and weak things of current version ?

A Nokia section

1.3210
* 2'nd ringtone can't be set
Well, I don't know, how to avoid it. Use --nokiacomposer
to enter
manually ringtone.

2.3310/3315
* names from phonebook are empty.
To avoid it you need to have higher than 4.06 firmware
in phone.

* can't save to phone calendar notes other than reminder


5.11 and higher seems not to be able to save notes
other than reminder (in older firmware it was
unofficial too).

3.6210 (6250/7110 too ?)


* when save some SMS like logo or ringtone to phone and
forward them from phone's menu, they're damaged. It's
NOT Gammu fault. Easy test show it: save such SMS to
SIM inside older Nokia phone like 6150. Forward from
6150 menu. It's OK. Put SIM to 6210. Forward from 6210
menu. It's NOT OK.

* when save unread sms to phone, no unread sms envelope is


shown. Sorry. Ask Nokia, if it's possible to have it.

* after removing operator logo, it's still visible Have to


reboot phone. Thank Nokia for it.

* No info about incoming calls or SMS.


Use option in config.h to enable it. Prepare for some
small problems with phone then. This series is very
weak here.

* Phone restarts few seconds after ending connection


(before restart phone display is frozen) I don't know
how to avoid it. It's visible only sometimes.
4.6310i 4.80
* Gammu shows more SMS saved than phone in menu Phone
firmware is buggy. Gammu show the truth. You can get
locations of these SMS and delete them, if want.
Update firmware to 5.10 to avoid problems

7
5.7110
* can't get binary ringtones from phone.
upgrade firmware in phone. Last one is 5.01 and it can
do it.

6.all Nokia phones with caller groups


* I had backup file from another model (with caller groups
too). After restoring my backup I can't set ringtone
from phone menu or they're different than in source
phone. Each Nokia model can have different ID for
(the same) ringtones.ID are not saved in Gammu source
for each model, because now (for DCT3 phones)
it's idiotic easy to change them and such list won't
be actual. Because of it backup caller groups again to
text backup file and remove lines with ringtone ID.
When will restore it, will be able to select it from
phone menu.

7.all Nokia phones with profiles


TODO few details - caller groups and names

8.all Nokia phones with voice tags


* after restore I've lost my voice tags
Well, current version of Gammu contains backup/restore
for voice tags for all Nokia phones with SMS memory
(like 6210 or 6310). If you made backup using earlier
versions, it can happen, that they're lost (not
visible in phonebook and phone show problems during
editing or using voice tags). This is very weak thing
in Nokia firmware.

When it happened with DCT3 phone (like 6210):


* the best solution is flashing phone again.

With DCT4 (6310i 4.80) I resolved it this way (it can be


tried with
DCT3 too):
* made backup of phonebook. Added many voice tags info to
backup file (with numbers 1,2,3,4,...,20). Later made
restore.Entered in phone menu to each such entry and
changed voice tag, later deleted it. After
it voice tag memory was clean.

9.all Nokia phones with SMS memory


* Gammu shows in AT mode Outbox sms as Inbox
Well, in fact the only returned in phone info is, that SMS
is Read/UnRead/Sent/UnSent. Normally Read/Unread can be
only in Inbox and Sent/UnSent in Outbox.

Firmware in Nokia 6310/6310i (probably other too) show


received SMS from other than Inbox folders and there is
no way to check, where they are saved. Gammu establish
(like normally), that Read/Unread is Inbox and other
Outbox. It can make such problems, but it's better than
nothing.

8
10.all DCT3 phones
* Phone (or rather Gammu) doesn't inform about CB (Cell
Broadcast) By default this feature is disabled (see
option in config.h), because some people had problems
with it - their phones didn't answer for command
enabling this feature or enabled after (too) long
timeout. I personally didn't have such problems. If want,
test it. If works, be happy :-)

11.DCT3 phones (3330, 3410, 5210, 5510, 62xx, ...) with WAP
settings It's very messy (random) in these phones and in
some situations it can give incorrect results (like
mixing sets from different sets).

12.can't transfer ringtones in binary format from DCT3 to


DCT4 phone
* You can only try to convert binary DCT3 ringtone to RTTL
(using --copyringtone or other than Gammu software) and
upload to DCT4 phone as RTTL ringtone. No binary DCT3 ->
binary DCT4 converter available for now.

14.DCT4 phones
* I don't have all info about calendar notes included in
Gammu backup and output When make ./configure, use --
newcalendar. If this works for Your phone, please report
model and firmware version.

15.DCT4 phones with filesystem


* I uploaded file to phone, phone says "format unknown".
Unfortunately, if there is communication problem during
uploading file and (for example) some file part is
resent by Gammu, phone can recognize it incorrectly.
Please try to upload file again and (if problem still
happen) report to Gammu author(s).

AT section

1.Siemens M20
* Gammu read incorrectly SMS with alphanumeric numbers
Well, M20 doesn't have correctly support for such numbers
at all. Gammu tries to avoid it and construct SMS
from such incorrect frame. Many times it ends with
success in 99%

SonyEricsson

1.T310
* I can't backup Notes & I don't have numbers in PhoneCall
ToDo Phone firmware issues. Thanks SE
---------

TIP: if you want to know more about changes and bugs in


firmware in Nokia phones, visit www.mwiacek.com and
check firmware subpage

9
Samsung

1.S300
* Only GIF pictures supported. Transfer pictures using --
setlogo PICTURE, leave location parameter as 0. Data
upload from phone not supported, --getbitmap and --
getlogo only show location info.

2.All other models:


* Not tested, must verify wallpaper size for different
models.
----------------------------------------------------------------
Q. What models are supported ?

A. 1.Nokia DCT3
(3210|3310|3330|3390|3410|5110|5110i|5130|5190|5210|5510|61
10|6130|6150|6190|8210|8250|8290|8850|8855|8890
6210|6250|7110
9110) and compatible.

There is supported MBUS, FBUS, DLR3, Infrared, Bluetooth,


at19200. For all (excluding 9110) there is supported almost
everything.

2.Nokia DCT4
(1100|1100a|1100b|3100|3100b|3108|3200|3200a|3300|3510|3510
i|3530|3589i|3590|3595|5100|5140|6100|6200|6220|6230|6310|6
310i|6385|6510|6610|6610i|6800|6810|6820|7210|7250|7250i|76
00|8310|8390|8910|8910i3320) and compatible

There is supported MBUS, FBUS, DLR3, Infrared, at19200,


BlueTooth. No full support for DKU-5. No support for
locking WAP settings, locking WAP bookmarks, enabling
netmonitor and few others.

3.Siemens M20, MC35, SL45 and compatible

Support for AT mode and many extensions (calendar, logos,


netmonitor...)

4.Alcatel OT 500, 501, 701, 715, 535, 735

5.Falcom A2D-1

6.IPAQ

7.AT compatible devices

If device is compatible with ETSI specs, SMS (both in text


and PDU), phonebook and some other will work with AT
module.

8.OBEX devices

Tested with Nokia Series40/Series60 and SonyEricsson. Works


according to device capabilities (can be folder
browsing/getting/uploading files/uploading files to Inbox).

10
9.Sony Ericsson

Tested with T310 (or rather T300 with R3B firmware from
T310), and R320s. Connections can be at* (serial), irda*
and blue*. Supported as AT or OBEX device above. New
supported features are in development now.

10.Samsung

Experimental support for Samsung AT extensions (ringtones


and logos). Pictures are GIF format only. Tested with S300.
----------------------------------------------------------------
Q. How to report bugs ?

A. There are few methods of reporting errors. I will describe,


which is the best for your error:

1. some function doesn't work. Use "logfile" option in


"gammurc" (for example "gammurc" see /docs/examples
directory). Set it for example to "logfile". Option
"logformat" set to "textall". Then run incorrectly
working function. There will be "logfile" file created.
Look inside.

If you see some lines starting from "[ERROR:", stop here


and read below, what todo with "logfile" file.

If no such errors, set "logformat" option to "binary". Run


again incorrectly working function. There will be binary
logfile file created. See below what todo with this file.

2. Gammu can't at all communicate with phone. Similiary like


in point 1 set "logfile" option to "logfile", "logformat"
to "textall" and make dump for example from "gammu --
identify".

Created log files can be sent to mailing list or directly to


marcin@mwiacek.com (if you don't want to publish some data
to more people). Please compress file(s), if they're big.

To debug files you can (should) add:

1. (when use Linux or Unix): name of your disribution, kernel


version
2. at least short description of problem

You don't have to include:

1. config file (important settings will be in debug files)

Thank you very much.

TIP: when set "logformat" option to "errors", there will be


reported only errors. After long using Gammu you
simply check, if there were any problems with
communication with your phone.
----------------------------------------------------------------
Q. Who helped in writing it ?

11
A. Here are some people, who somehow helped in this project.
Probably not everyone is mentioned. If you think, you're
missed, please let us know:

* all people developing Gnokii (some ideas are from it) like
Pavel Janik, Pawel Kot, Manfred Jonsson, ... (see CREDITS
from gnokii)
* all people responsible for MyGnokii (Gammu is based on it
too) like Gabriele Zappi, Ralf Thelen, .... (see CREDITS
from mygnokii)
* Marcin Wiacek - author of all this mess ;-)
* Markus Plail & Tibor Harsszegi - for DCT4 help
* Frederick Ros - 5210 help
* Jan Kratochvil - AT commands
* Walek - fixes, progress in many things
* Marcel Holtmann - Bluetooth tests
* Michal Cihar - general discussions, tries into making one
big and good GSM manager (many changes and suggestions),
Alcatel support
* Ondrej Rybin & Tomasz Motylewski & Tom Nelson - hardware
help
* Joergen Thomsen - SMS daemon
* Claudio Matsuoka - Samsung support, some hacks and fixes
----------------------------------------------------------------
Q. What file formats are supported ?

A. for logos : xpm (only saving), bmp, nlm, nsl,


ngg, nol, wbmp, gif (for
Samsung)
for ringtones : rttl, binary format created for
Gammu, mid
(saving), re (reading), ott,
communicator,
ringtones format found in
fkn.pl, wav(saving),
ime/imy (saving), rng, mmf
(for Samsung)
for backup/restore : text format created for Gammu, vcs
(VCALENDAR),
vcf (VCARD), lmb (Logo
Manager - startup,
phonebook, caller groups
entries),
ldif (Mozilla/Netscape
Address Book)
for sms backup/restore : text format created for Gammu
----------------------------------------------------------------
Q. How to connect Nokia phone to PC and gammu?

A. Using cable. Each phone has connector on bottom (like in


5110) or under battery (like in 3310) or
under back cover (like in 3210). In first
version cable has "normal" connector, in
second it's special and put between phone
and battery or under back cover. There are
three protocols used with these phones: MBUS
(called M2BUS too), FBUS, AT mode. Cables
supporting these protocols are different:

12
1. universal FBUS/MBUS. The best, because should
work with each phone (of course you need
correct connector for it) in one or
second protocol. Sometimes called DAU9P
(it was name of original universal cable
for 61xx/51xx). Same universal cables
have manual switch. IMHO, it's not
necessary
2. MBUS only. Required for some concrete phones
to allow them work with
this protocol (like my 6310i - it didn't
want to work in MBUS with my universal
FBUS/MBUS cable without switch).
3. FBUS only. IMHO, wasting money.
4. AT/FBUS cable (originally called DLR3 or
DLR3P). Will not work with older phones
(like 51xx/61xx) even in FBUS. You can
use it with 62xx/63xx/71xx and work in AT
or FBUS mode. Good choice, if won't use
MBUS protocol and have modern model.

Gammu supports each of these protocols. Just


give access to used serial device, set it as
"port" in gammurc and set"connection"
according to protocol

Using infrared. There are two versions: with direct


communicating with phone
or using some functions from operating
system.

First ("infrared" in gammurc) can be used


with 61xx. Also 82xx use it, when enter
infrared using 2 player mode. Obsolete,
in Linux requires disabling all infrared
support in kernel.
Second is much better, compatible with
ALL modern operating systems, in Linux
requires enabling infrared in kernel.
Called socket infrared. Used in all new
phones. "irda" in gammurc.

Example of using socket infrared in Linux


(based on USB dongle):
1.compile kernel with USB and infrared
protocols
3.if required, start USB module (example:
"modprobe irda-usb")
2.use "irattach irda0 -s" or similiar
3.set "connection" in gammurc to "irda",
"port" to "/dev/ircomm0" or similar
(you have to add access to this device
to user)

Using bluetooth. Works OK in all situations

Example of using USB dongle for Linux (Bluez


stack from
http://bluez.sourceforge.net):

13
1.compile kernel with USB and Bluetooth
(don't use BT in USB section !)
2.load kernel driver ("modprobe hci_usb")
3."hciconfig hci0 up" enables dongle
4.in /etc/bluetooth create "givepin" file.
It should be
executable ("chmod a+x
/etc/bluetooth/givepin")
5.write inside:
#!/bin/sh echo "PIN:5432"
6.in /etc/bluetooth/hcid.conf set
"pin_helper" to
"/etc/bluetooth/givepin;"
7."hcid" (will send options from hcid.conf
to BT device)
8.set "device" in gammurc to phone address
(see "hcitool
scan" for it) and protocol to
"bluephonet" or similiar
9.during first connection give PIN 5432 in
phone

I will also write few words about flasher cable. It's


different and connected to paraller (LPT) port and allows to
read/write flash (internal memory). When use some software
(called flashers) and such cable, you can even replace
internal phone software to higher. Gammu as user software
doesn't support flashing.
----------------------------------------------------------------
Q. How to connect Ericsson/Siemens/Samsung/Alcatel phone to PC
and gammu?

A. Using cable: Get serial cable for the appropriate model, plug
it into the phone and in a free serial port
of the PC. In gammu, set the correct port
("COM1:" .. "COM9:" in Windows,
"/dev/ttyS*" in Linux).
Set"connection=at115200" (or lower) and
"model=at". You can also try "model=obex".

Using infrared: You can map your infrared connection to a


virtual COM port in Win9x and XP. Then give
"port=COM4:" (or check the correct port in
Control Panels/Infrared transfer) and the
connection will look like normal serial
connection. Continue as above.

If you wish to use true infrared connection,


follow the steps in the Nokia answer above.

Using bluetooth: see Nokia answer above.


----------------------------------------------------------------
Q. What is "FIRMWARE"?

A. FIRMWARE is the Operating System of the phone, the program


which allows phone to work. Infact, a mobile phone is just a
computer which can handle voice communications between two
(or more) users, and, just like any other computer, it needs
programs to work: the FIRMWARE, infact. This is a special

14
kind of software, at half way between HARDWARE, that is the
physical, electronic part of the computer, and the SOFTWARE,
the programs which allow the hardware to work; the firmware
is a kind of software, "fixed" on the hardware, and it
cannot be modified by users.By "normal" users, at least.
Actually, it IS possible to modify the firmware, to upgrade
it to newest releases, but it requires a technical skill
which not all people have.Usually, only the phone
manufacturer can upgrade the firmware, using special
devices. So, if you want to upgrade your firmware, you
should bring your phone to your dealer, and wait for him to
give the phone to the manufacturer, which, often after
"months" ;-)))), will give you back your phone, upgraded,
and your wallet, without a copule of 20$ banknote... BUT, it
is also possible to do all this mess by yourself: you can
find on Internet the required hardware, a Flasher Device
(which could often cost MORE than 40$!), a flasher program,
and the latest release of the firmware.. which is
copyrighted by the phone manufacturer, and so COULDN'T be
distributed on the Net.... On Gammu site you can find a lot
of info about Mobile Phones Firmwares, BUT nothing about
flashing: you should use a search engine using keywords like
"flasher", "firmware", "upgrade", "mobile phone" etc.
----------------------------------------------------------------
Q. Can Gammu backup voice tags (in meaning: sound saved in phone
as voice record) ?

A. Sorry, but not. I don't have Nokia software able to do it.


----------------------------------------------------------------
Q. I can't connect to Nokia 9210 using original cable provided
with phone...

A. Use or "at19200"/"at115200" connection (have to enable modem


in phone then) or "fbus" after enabling FBUS with phone
netmonitor 31.

Note: to enable netmonitor in phone you need MBUS cable (not


DLR2 provided with phone)
----------------------------------------------------------------
Q. What phone could be recommended by Gammu author(s) to make
SMS gateway ?

A. The best is always the most simple device. So, I think that
using Nokia 3310 or 3410 can be very good choice. They have
removed some SMS bugs (for example, 3330 has buggy firmware
- you have to flash it with 3310 firmware to avoid any
problems). Especially 3410 is interesting - has got LiIon
battery.

More expensive Nokia phones (with own SMS memory) are more
complicated and using them is not always good idea (of
course, Gammu can do it).

Another way is is to use special cellular modem especially


equiped to continuous work. I recommend Siemens devices -
for example Siemens MC35. It has GPRS and can be used to
many tasks.
----------------------------------------------------------------

15
Q. What phone could be recommended by Gammu author(s) ?
(generally) (19.11.02)

A. It's difficult to say. Everyone needs something different


according to own needs.

Start from Nokia:


If you want to be visible, buy 7650 or 9210. Very visible,
very expensive, and parts for it are very expensive. Many
small stability problems, no GPRS (in 9210). Weak battery
in 7650.

If you need phone for calls, no WAP, but requires extended


pbk, buy 6210 or 6250 (second is for any weather and hard
environment). Will be able to "repair" (flash) it - it
repairs each phone in majority problems. These phones are
very slow and has some other small problems.

When want WAP, GPRS, buy rather 6310i than 6310. Remember,
that firmware inside has still many small bugs and it
possible, phone can go often to service to flashing. Some
things are still not useable (like CB messages - can't
change tone to it), no netmon in this moment. This family
has Bluetooth.

For WAP, GPRS is also good 8310 - first DCT4 phone.

When don't have too much money and need calendar/extended


pbk, buy 3510 (the same flashing and netmon story to 6310,
6310i).

The cheapiest 3410 is for people, who don't need anything -


only device for making calls, nothing more. It's (like old
3310 or 5110) very good to making SMS gateway.

Phones with colour display are not very good for me. IMHO,
I will wait some time, until they will have all problems
removed.

Siemens:
Very good AT support, very stable with it, available netmon
and many, many other functions (not like with Nokia).
Worse user interface than Nokia.

Panasonic:
GD96 - weak battery, many, many functions. Nice for many
people.

Ericsson:
T65 - very small, good, if you will like its' interface.
T68i - MMS.

I will not say about other - for example, I don't like


Morotola or Alcatel user interfaces at all.

----------------------------------------------------------------
Q. How to make national version of Gammu ?

A. 1. go into docs/docs/locale

16
2. rename gammu_us.txt to gammu_XX.txt (where XX is language
ID)
3. open gammu_XX.txt in editor supporting Unicode (in win32
Notepad)
4. to each "Fxxxx = "text"" line add "Txxxx = "text"" line
5. send to me updated file
----------------------------------------------------------------
Q. Where can I find additional info ?

A. * www.mwiacek.com
* manual for Nokia netmonitor
* info about firmware in Nokia phones (changes, bugs, ...)
* info about protocols in Nokia phones
* default ringtones and logos from Nokia phones
* www.gnokii.org
* another "free" manager for GSM phones. It was core for
first manager created by Marcin Wiacek (the main reason
of creating it was eliminating Gnokii problems) called
MyGnokii. Gammu was created from rewriting
MyGnokii. You can now compare quality in Gnokii and
Gammu meaning ;-)
* http://gsm-technology.com
* GSM DATA AND SERVICE CABLES
* GSM EQUIPMENT & HARDWARE
* FREE FLASHES, LOGO'S, RINGTONES
* FREE INSTRUCTIONS, SCHEMES
* http://zope.achterklap.nl:8080/nokia/
* reversing DCT3 phones
----------------------------------------------------------------
Q. Nokia and other manufactures provides original software. What
original applications can be replaced with Gammu ?

A. Nokia:
* Nokia Cellular Data Suite 2.0 - 3.0 (N5110, N6110)
* PC-Suite for N5210
* PC-Suite 4.06 (N6210)
* PC-Suite 4.3 - 4.88 (DCT4 mono: N6310, N6310i, N6510,
N8310, N8910)
* PC-Suite 5.0 - 5.1 (DCT4 color: N5100, N6610, N6800, N7210)
* PC-Suite 5.12 (N6800)
* PC-Suite 5.16 (N7210)
----------------------------------------------------------------
Q. Does Gammu support Chinese SMS ?

A. If I understand correctly, they're saved with Unicode


alphabet in SMS. Gammu is prepared for it. For example for
sending/saving SMS just create Unicode file and use switch -
inputunicode, when use send/savesms
----------------------------------------------------------------
Q. Can I use Nokia 6110/6130/6150 and infrared ?

A. Unfortunately, connecting to Nokia:Phonet service in these


phones doesn't end with success. Probably there is no other
way and you can't use socket infrared here.

In Linux disable infrared in kernel, connect your infrared


device to serial port (other won't be supported in this
mode) and try Gammu with "infrared" connection. If doesn't

17
work, there will be required some modifications of sources.
Please contact authors.

In Windows ANY infrared device can be assigned to serial port


with driver written by Jan Kiszka.
----------------------------------------------------------------
Q. I can't play files produced by --nokiagetvoicerecord

A. They require GSM 6.10 codec to be played. In Win XP it's


included by Microsoft. If you deleted it by accident in this
operating system, make such steps:
1. Control Panel
2. Add hardware
3. click Next
4. select "Yes. I have already connected the hardware"
5. select "Add a new hardware device"
6. select "Install the hardware that I manually select from
a list"
7. select "Sound, video and game controllers"
8. select "Audio codecs"
9. select "windows\system32" directory and file
"mmdriver.inf"
10. if You will be asked for file msgsm32.acm, it should
unpacked from Windows CD
11. now You can be asked if want to install unsigned driver
(YES), about select codec configuration (select what you
want) and rebotting PC (make it)
----------------------------------------------------------------
Q. I have problems with GPRS Online in my Nokia phone (Series
40, not Symbian)

A. In first Nokia phones with GPRS (like 8310, 6310, 6310i,


6510, 3510 and maybe some other) phone was able to display
"G" char instead of char displayed below network level. It
was clear, that phone is in continuous GPRS session and
downloading some data won't be connected with starting new
session (in many networks connected with new money for
operator). If phone end GPRS session after leaving WAP
browser or data connection (no "G" char), it had disabled
continuous GPRS sessions (it was done for example after
upgrading firmware in service). Simple "gammu --
nokiasetphomenus" "repaired" it.

Nokia 3510i seems to have disabled possibility of using


continous GPRS sessions at all. Probably the same will be in
other cheap Nokia models.

All other new models seems to have ability of making


continuous GPRS sessions - at least some documents from
Nokia say, that the same setting (the same, which was set
for first models) should be set to enable this behaviour.
"gammu --nokiasetphonemenus" sets it, but it looks, that or
this info is wrong or new models continues GPRS sessions
without informing users about it (no "G" char). I haven't
checked it deeply. Maybe in free moment...

Short summary: GPRS was chance to save some money. It was


wrong for cellular operators. Probably on their requests
Nokia made sessions more enpensive (it's not possible to use

18
continuous sessions or they're more hidden). Welcome in new
connected world :-(
----------------------------------------------------------------
Q. How to manage playlists in 6230 ?

A. 1. gammu --addfile a:\predefplaylist filename.m3u Will add


playlist filename.m3u

2. gammu --getfilesystem

Will get list of all files (including names of files with


playlists)

3. gammu --deletefiles a:\predefplaylist\filename.m3u

Will delete playlist filename.m3u

Format of m3u files is easy:

first line is #EXTM3U


in next you give names of files (b:\file1.mp3,
b:\folder1\file2.mp3, etc.)

19
---Halaman ini sengaja dikosongkan---

20
UNIT Untama.pas

unit Untama;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, Gammu, Buttons, ExtCtrls, Gauges, StdCtrls, ComCtrls,
ImgList,
Menus, ShellAPI, Grids, DBGrids, ZConnection, DB,
ZAbstractRODataset,
ZAbstractDataset, ZDataset, DateUtils, StrUtils, IniFiles,
jpeg;

type
TForm1 = class(TForm)
ListView1: TListView;
Shape1: TShape;
ImageMenu: TImageList;
ImageTab: TImageList;
pmMenuUtama: TPopupMenu;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
TabSheet5: TTabSheet;
keluar1: TMenuItem;
Informasi1: TMenuItem;
GroupBox3: TGroupBox;
GroupBox4: TGroupBox;
GroupBox5: TGroupBox;
GroupBox9: TGroupBox;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
DBGrid3: TDBGrid;
DBGrid6: TDBGrid;
TmSendSMS: TTimer;
ZConnection1: TZConnection;
GroupBox8: TGroupBox;
DBGrid7: TDBGrid;
TmMsgPending: TTimer;
btnRestartKoneksi: TButton;
gbInbox: TGroupBox;
lvInbox: TListView;
gbOutbox: TGroupBox;
lvOutbox: TListView;
gbLog: TGroupBox;
lvLog: TListView;
sbStatus: TStatusBar;
gbInfoPonsel: TGroupBox;
lvInfoAlat: TListView;
btnAbout: TButton;
Image1: TImage;

21
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure keluar1Click(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift:
TShiftState; X,
Y: Integer);
procedure FormCloseQuery(Sender: TObject; var CanClose:
Boolean);
procedure Informasi1Click(Sender: TObject);
procedure ListView1Click(Sender: TObject);
procedure TmSendSMSTimer(Sender: TObject);
procedure keluar(frm: HWND);
procedure btnRestartKoneksiClick(Sender: TObject);
procedure lvLogColumnClick(Sender: TObject; Column:
TListColumn);
procedure lvLogCompare(Sender: TObject; Item1, Item2:
TListItem;
Data: Integer; var Compare: Integer);
procedure InfoAlat();
procedure TmMsgPendingTimer(Sender: TObject);
procedure btnAboutClick(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
TrayIconData: TNotifyIconData;
procedure ShowPopUpMenu();
procedure SembunyiTab();

end;

TSendSMSThread = class(TThread)
public
procedure Execute; override;
end;

var
Form1: TForm1;
SendSMSThread: TSendSMSThread;
bolehjalan: Boolean;

const
MODEMNUM = 2;

implementation

uses dm, modulGlobal, UnPendingMessage, modulSMS, modulUtama,


Unabout;

{$R *.dfm}

//==============================================================
procedure TForm1.ShowPopUpMenu();
{ @Deskripsi : Fungsi untuk menampilkan menu pada sistem tray
-------------------------------------------------------------}
var CurPos: TPoint;
begin

22
GetCursorPos(CurPos);
SetForegroundWindow(Self.Handle);
pmMenuUtama.Popup(CurPos.X,CurPos.Y);
PostMessage(Self.Handle,WM_NULL,0,0);
end;

//==============================================================
procedure TForm1.SembunyiTab();
{ @Deskripsi : Fungsi untuk menyembunyikan Tabular
-------------------------------------------------------------}
begin
TabSheet1.TabVisible:= False;
TabSheet2.TabVisible:= False;
TabSheet3.TabVisible:= False;
TabSheet4.TabVisible:= False;
TabSheet5.TabVisible:= False;

end;

//==============================================================
procedure TForm1.FormShow(Sender: TObject);
{ @Deskripsi : perintah yang dikerjakan ketika form ditampilkan
-------------------------------------------------------------}
begin
SembunyiTab;
TabSheet1.TabVisible:= True;
end;

//==============================================================
procedure TForm1.FormCreate(Sender: TObject);
{ @Deskripsi : perintah yang dikerjakan pada saat proses form
dibuat
-------------------------------------------------------------}
var
i: integer;
ls: TStringList;
buffer : array[1..100] of char;
begin
if (CreateMutex(nil, false, 'UKM_SMSGateway') = 0) or
(GetLastError = ERROR_ALREADY_EXISTS) then
begin
if (MessageBox(Self.Handle,'Aplikasi sudah berjalan. Apakah
ingin menjalankannya lagi ?',
'Konfirmasi',MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2) =
IDNO) then halt;
end;

ReceivedNum := 0;
SentOKNum := 0;
SentWrongNum := 0;
SMSPrice := 0;
// membaca settingan yang ada pada file
// “ukm_sms.ini”
GatewayIniFile :=
TIniFile.Create(ExtractFilePath(Application.ExeName)+'ukm_sm
s.ini');

// membuat tampilan icon pada sistem tray


with TrayIconData do

23
begin
cbSize:= SizeOf(TrayIconData);
Wnd:= Handle;
uID:= 0;
uFlags:= NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallbackMessage:= WM_MOUSEMOVE;
hIcon:= Application.Icon.Handle;
StrPCopy(szTip, Application.Title);
end;
Shell_NotifyIcon(NIM_ADD, @TrayIconData);
Application.ProcessMessages;

ls:= TStringList.Create;

// membaca file “koneksi.set” yang digunakan untuk


// koneksi aplikasi ke database
ls.LoadFromFile(ExtractFilePath(Application.ExeName) +
'setting\koneksi.set');
with ZConnection1 do
begin
HostName:= ls.Values['HostName'];
User:= ls.Values['UserName'];
Password:= ls.Values['Password'];
Database:= ls.Values['Database'];
try
Connect;
except
ShowMessage('Koneksi Gagal');
end;
end;
// mengambil versi dari GAMMU yang digunakan
GSM_GetGammuVersion(@buffer);
AddTextToGatewayLog(-1,'Memulai UKM_SMS Gateway, DLL versi
'+buffer);
for i:=1 to MODEMNUM do GSMDevice[i]:=TGSMModem.Create;
SendSMSThread:= TSendSMSThread.Create(True);
SendSMSThread.Priority:= tpIdle;
SendSMSThread.Resume;
TmSendSMS.Enabled:= True;
TmMsgPending.Enabled:= True;
bolehjalan:= true;
ls.Free;
btnRestartKoneksi.Caption:= 'Restart Koneksi';

// membuat(melakukan) koneksi aplikasi dengan HP


// yang digunakan
RestartAllConnections(@ChangePhoneState,@ChangeSecurityState
,@HandleIncomingSMS);
end;

//==============================================================
procedure TForm1.FormDestroy(Sender: TObject);
{ @Deskripsi : perintah yang dikerjakan ketika form dimusnahkan
(aplikasi di tutup)
-------------------------------------------------------------}
begin
Shell_NotifyIcon(NIM_DELETE, @TrayIconData);
Application.ProcessMessages;
Application.Terminate;

24
end;

//==============================================================
procedure TForm1.keluar1Click(Sender: TObject);
{ @Deskripsi : Fungsi untuk keluar dari program (aplikasi)
-------------------------------------------------------------}
begin
Application.Terminate;
end;

//==============================================================
procedure TForm1.FormMouseMove(Sender: TObject; Shift:
TShiftState; X,
Y: Integer);
{ @Deskripsi : Fungsi untuk mendeteksi mouse di klik pada icon
yang ada pada sistem tray
-------------------------------------------------------------}
begin
if X= 517 then // klik kanan tunggal
ShowPopUpMenu()
else if X= 515 then // klik kiri
Self.Show;
end;

//==============================================================
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose:
Boolean);
{ @Deskripsi : Fungsi untuk menyembunyikan form pada sistem
tary ketika tombol close di klik
-------------------------------------------------------------}
begin
CanClose:= false;
Form1.Hide;
end;

//==============================================================
procedure TForm1.Informasi1Click(Sender: TObject);
{ @Deskripsi : perintah yang dikerjakan ketika menu informasi
di klik yang ada pada icon sistem tray
-------------------------------------------------------------}
begin
Form1.Show;
SembunyiTab;
TabSheet1.TabVisible:= True;
end;

//==============================================================
procedure TForm1.ListView1Click(Sender: TObject);
{ @Deskripsi : Fungsi yang dikerjakan ketika menu-menu pada
form utama di pilih
-------------------------------------------------------------}
begin
case ListView1.ItemIndex of
0 : begin
SembunyiTab;
TabSheet1.TabVisible:= True;
end;
1 : begin
SembunyiTab;

25
TabSheet2.TabVisible:= True;
end;
2 : begin
SembunyiTab;
TabSheet3.TabVisible:= True;
end;
3 : begin
SembunyiTab;
TabSheet4.TabVisible:= True;
end;
4 : begin
SembunyiTab;
TabSheet5.TabVisible:= True;
end;
5: Keluar(Self.Handle);
end;
end;

//==============================================================
procedure TForm1.TmSendSMSTimer(Sender: TObject);
{ @Deskripsi : fungsi untuk pengecekkan SMS yang akan dikirim
keluar
-------------------------------------------------------------}
begin
if SendSMSThread.Suspended then
SendSMSThread.Resume;
TmSendSMS.Interval:= 2000;
end;

//==============================================================
procedure TSendSMSThread.Execute;
{ @Deskripsi : fungsi Threading untuk pengiriman SMS keluar
-------------------------------------------------------------}
var
FoundFile,WasSearch,found : Boolean;
FoundNumber : Boolean;
sr : TSearchRec;
FileAttrs,num,retries : Integer;
i,j,z : word;
S : String;
S2 : AnsiString;
F : TextFile;
SendText,Temp,SendNumber : array[1..5000] of char;
MultiSMS : GSM_MultiSMSMessage;
error : GSM_Error;
CurrentDate,CurrentTime : TDateTime;
begin
error:=ERR_UNKNOWN;
WasSearch:=false;
FileAttrs:=faAnyFile;
num:=1;
while not Terminated do
begin
found:=false;
while true do
begin
if (GSMDevice[num].Used) and
(GSMDevice[num].Connected) and

26
(GatewayIniFile.ReadBool('modem'+inttostr(num),
'Kirim', false) = True) then
begin
found:=true;
break;
end;
num:=num+1;
if num>MODEMNUM then
begin
num:=1;
break;
end;
end;
if found then
begin
FoundFile:=false;
if WasSearch then
begin
if FindNext(sr) = 0 then
begin
FoundFile:=true;
end else
begin
FindClose(sr);
WasSearch:=False;
end;
end else
begin
// mengambil informasi yang ada pada file
// outbox*.txt untuk dikirim keluar
if FindFirst(GatewayINIFile.ReadString('general',
'senddir',
ExtractFilePath(Application.ExeName))+'outbox*.txt',
FileAttrs, sr) = 0 then FoundFile:=true;
end;
If foundfile then
begin
AssignFile(F, GatewayINIFile.ReadString('general',
'senddir', ExtractFilePath(Application.ExeName))+sr.Name);
Reset(F);
Readln(F, S);
Readln(F, S2);
Readln(F, retries);
CloseFile(F);

//Pertama buat Unicode string


StringToWideChar(S, @Temp, 5000);
i:=0;
while i<strlen(PChar(S)) do
begin
SendNumber[i*2+1]:=Temp[i*2+1];
SendNumber[i*2+2]:=Temp[i*2+2];
i:=i+1;
end;
SendNumber[i*2+1]:=chr(0);
SendNumber[i*2+2]:=chr(0);

StringToWideChar(S2, @Temp, 5000);


i:=0;

27
while i<strlen(PChar(S2)) do
begin
//Remi wanted converting ~ to #10
if (Temp[i*2+2] = chr(0)) and (Temp[i*2+1] = '~') then
begin
SendText[i*2+1]:=chr(0);
SendText[i*2+2]:=chr(10);
end else
begin
SendText[i*2+1]:=Temp[i*2+2];
SendText[i*2+2]:=Temp[i*2+1];
end;
i:=i+1;
end;
SendText[i*2+1]:=chr(0);
SendText[i*2+2]:=chr(0);

//sekarang inisialisasi split messages


//jika karakter membutuhkan beberapa sms
while true do
begin
MultiSMS.Number:=chr(0);

GSM_MakeMultiPartSMS(@SendText,i,UDH_NoUDH,GSM_Coding_Defaul
t,-1,0,@MultiSMS);
if Ord(MultiSMS.Number) > 1 then
begin
MultiSMS.Number:=chr(0);

GSM_MakeMultiPartSMS(@SendText,i,UDH_ConcatenatedMessages,GS
M_Coding_Default,-1,0,@MultiSMS);
end;
if Ord(MultiSMS.Number) <=
StrToInt(GatewayINIFile.ReadString('general',
'SMSNumber','1')) then break;
i:=i-1;
SendText[i*2+1]:=chr(0);
SendText[i*2+2]:=chr(0);
end;

CurrentDate:=Date;
CurrentTime:=Time;

//tambahkan info ke layar utama


with Form1.lvOutbox do
begin
SortType:=stNone;
if Items.Count>500 then Items.Delete(0);
Items.Add;
Items.Item[Items.Count-1].Caption:=S2;
Items.Item[Items.Count-
1].SubItems.Add(GatewayINIFile.ReadString('modem'+inttostr(n
um), 'Port', 'com1:'));
Items.Item[Items.Count-
1].SubItems.Add(inttostr2(YearOf(CurrentDate),4)+'-
'+inttostr2(MonthOf(CurrentDate),2)+'-
'+inttostr2(DayOf(CurrentDate),2)+'
'+inttostr2(HourOf(CurrentTime),2)+':'+inttostr2(MinuteOf(Cu
rrentTime),2)+':'+inttostr2(SecondOf(CurrentTime),2));

28
Items.Item[Items.Count-
1].SubItems.Add(SearchPBKEntry(S));
Items.Item[Items.Count-
1].SubItems.Add('1/'+IntToStr(Ord(MultiSMS.Number)));
end;
//tambahkan info ke file log
if GatewayIniFile.ReadBool('modem'+inttostr(num),
'PakeLogKirim', false) = True then
begin
{$I-}
AssignFile(F,
GatewayIniFile.ReadString('modem'+inttostr(num),
'LogKirim',ExtractFilePath(Application.ExeName)+'Kirim'+intt
ostr(num)+'.log'));
Append(F);
if (IoResult <> 0) then Rewrite(F);
if IOResult <> 0 then
begin
AddTextToGatewayLog(num,'Resetting LogKirim modem
pada opsi ke standar');
GatewayIniFile.WriteString('modem'+inttostr(num),
'LogKirim',ExtractFilePath(Application.ExeName)+'Kirim'+intt
ostr(num)+'.log');
AssignFile(F,
GatewayIniFile.ReadString('modem'+inttostr(num),
'LogKirim',ExtractFilePath(Application.ExeName)+'Kirim'+intt
ostr(num)+'.log'));
Append(F);
if (IoResult <> 0) then Rewrite(F);
end;
{$I+}
if IoResult <> 0 then
begin
AddTextToGatewayLog(num,'TIDAK BISA MENULIS FILE LOG
BUAT MODEM');
end else
begin
Write(F,inttostr2(YearOf(CurrentDate),4)+'-
'+inttostr2(MonthOf(CurrentDate),2)+'-
'+inttostr2(DayOf(CurrentDate),2));

Write(F,';'+inttostr2(HourOf(CurrentTime),2)+':'+inttostr2(M
inuteOf(CurrentTime),2)+':'+inttostr2(SecondOf(CurrentTime),
2));

Write(F,';'+GatewayINIFile.ReadString('modem'+inttostr(num),
'Port', 'com1:'));
Write(F,';'+S);
Write(F,';'+s2);
Flush(F);
CloseFile(F);
end;
end;

for j:=1 to Ord(MultiSMS.Number) do


begin
//copy nomor tujuan sms
i:=0;

29
while (SendNumber[i*2+1]<>chr(0)) or
(SendNumber[i*2+2]<>chr(0)) do
begin
MultiSMS.SMS[j].Number[i*2+1]:=SendNumber[i*2+1];
MultiSMS.SMS[j].Number[i*2+2]:=SendNumber[i*2+2];
i:=i+1;
end;
MultiSMS.SMS[j].Number[i*2+1]:=chr(0);
MultiSMS.SMS[j].Number[i*2+2]:=chr(0);
end;

for j:=1 to Ord(MultiSMS.Number) do


begin
Form1.lvOutbox.Items.Item[Form1.lvOutbox.Items.Count-
1].SubItems.Strings[3]:=IntToStr(j)+'/'+IntToStr(Ord(MultiSM
S.Number));

// perintah untuk mengirim pesan (SMS)


error:=GSM_SendSMSMessage(GSMDevice[num].DeviceID,@MultiSMS.
SMS[j],StrToInt(GatewayINIFile.ReadString('general',
'WaktuHabisKirimSMS','30')));

// 30 adalah waktu habis dalam detik. Telepon


// menunggu beberapa saat untuk meminta jawaban
// dari jaringan

if error <> ERR_NONE then


begin
//tambahkan info ke layar utama
Form1.lvOutbox.Items.Item[Form1.lvOutbox.Items.Count-
1].SubItems.Strings[3]:='ERROR '+IntTostr(integer(error))+',
SMS '+IntToStr(j);

//tambahkan info ke file log


if GatewayIniFile.ReadBool('modem'+inttostr(num),
'PakeLogKirim', false) = True then
begin
{$I-}
AssignFile(F,
GatewayIniFile.ReadString('modem'+inttostr(num),
'LogKirim',ExtractFilePath(Application.ExeName)+'Kirim'+intt
ostr(num)+'.log'));
Append(F);
if (IoResult <> 0) then Rewrite(F);
{$I+}
WriteLn(F,';ERROR '+IntTostr(integer(error))+', SMS
'+IntToStr(j));
Flush(F);
CloseFile(F);
end;
SentWrongNum:=SentWrongNum+1;
ShowStatistics();
break;
end else
begin
SentOKNum:=SentOKNum+1;
SMSPrice:=SMSPrice+FindPrice(S);
ShowStatistics();
end;

30
end;
if (error = ERR_NONE) then
begin
DeleteFile(GatewayINIFile.ReadString('general',
'senddir', ExtractFilePath(Application.ExeName))+sr.Name);

//tambahkan info ke layar utama


Form1.lvOutbox.Items.Item[Form1.lvOutbox.Items.Count-
1].SubItems.Strings[3]:='OK';

//tambahkan info ke file log


if GatewayIniFile.ReadBool('modem'+inttostr(num),
'PakeLogKirim', false) = True then
begin
{$I-}
AssignFile(F,
GatewayIniFile.ReadString('modem'+inttostr(num),
'LogKirim',ExtractFilePath(Application.ExeName)+'Kirim'+intt
ostr(num)+'.log'));
Append(F);
if (IoResult <> 0) then Rewrite(F);
{$I+}
WriteLn(F,';OK');
Flush(F);
CloseFile(F);
end;
end else
begin
if retries =
StrToInt(GatewayINIFile.ReadString('general',
'KirimUlangSMS','2'))-1 then
begin
DeleteFile(GatewayINIFile.ReadString('general',
'senddir', ExtractFilePath(Application.ExeName))+sr.Name);
AddTextToGatewayLog(-1,'Maximal number of SMS
retries reached. SMS deleted');
end else
begin
AssignFile(F, GatewayINIFile.ReadString('general',
'senddir', ExtractFilePath(Application.ExeName))+sr.Name);
Rewrite(F);
Writeln(F, S);
Writeln(F, S2);
Writeln(F, retries+1);
CloseFile(F);
end;
end;
Form1.lvOutbox.SortType:=stBoth;
end;
end;
SendSMSThread.Suspend;
end;
end;

//==============================================================
procedure TForm1.keluar(frm: HWND);
{ @Deskripsi : Fungsi untuk keluar dari program (aplikasi)
-------------------------------------------------------------}
var i: integer;

31
begin
if (MessageBox(frm,'Apakah yakin akan keluar dari program ini
?','Konfirmasi',
MB_YESNO + MB_ICONQUESTION) = IDYES) then
begin
for i:=1 to MODEMNUM do
begin
if GSMDevice[i].Used then
begin
AddTextToGatewayLog(i,'UKM_SMS gateway ditutup');
GSMDevice[i].EndConnection;
end;
end;
halt;
end;
end;

//==============================================================
procedure TForm1.btnRestartKoneksiClick(Sender: TObject);
{ @Deskripsi : fungsi untuk melakukan koneksi/ restart koneksi
ke HP secara manual
-------------------------------------------------------------}
begin
btnRestartKoneksi.Caption:= 'Restart Koneksi';

RestartAllConnections(@ChangePhoneState,@ChangeSecurityState
,@HandleIncomingSMS);
end;

//==============================================================
procedure TForm1.lvLogColumnClick(Sender: TObject; Column:
TListColumn);
{ @Deskripsi :
-------------------------------------------------------------}
begin
If Column.Index = GatewayINIFile.ReadInteger('general',
'UKMGateLogSort',0) then
begin
GatewayINIFile.WriteBool('general', 'UKMGateLogSortUp',not
GatewayINIFile.ReadBool('general',
'UKMGateLogSortUp',false));
end;
GatewayINIFile.WriteInteger('general',
'UKMGateLogSort',Column.Index);
(Sender as TCustomListView).AlphaSort;
end;

//==============================================================
procedure TForm1.lvLogCompare(Sender: TObject; Item1, Item2:
TListItem;
Data: Integer; var Compare: Integer);
{ @Deskripsi :
-------------------------------------------------------------}
var
ix: Integer;
begin
if GatewayINIFile.ReadInteger('general', 'UKMGateLogSort',0) =
0 then
begin

32
if GatewayINIFile.ReadBool('general',
'UKMGateLogSortUp',false) then
begin
Compare := CompareText(Item1.Caption,Item2.Caption)
end else
begin
Compare := CompareText(Item2.Caption,Item1.Caption)
end;
end else
begin
ix := GatewayINIFile.ReadInteger('general',
'UKMGateLogSort',0) - 1;
if GatewayINIFile.ReadBool('general',
'UKMGateLogSortUp',false) then
begin
Compare :=
CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
end else
begin
Compare :=
CompareText(Item2.SubItems[ix],Item1.SubItems[ix]);
end;
end;
end;

//==============================================================
procedure TForm1.InfoAlat();
{ @Deskripsi : Fungsi untuk menampilkan info alat/ HP yang
digunakan
-------------------------------------------------------------}
var
i : integer;
buffer : array[1..100] of char;
error : GSM_Error;
ver : Double;
NetInfo : GSM_NetworkInfo;
begin
with Form1.lvInfoAlat.Items do
begin
Clear;
for i:=1 to MODEMNUM do
begin
if (GSMDevice[i].Used) and (GSMDevice[i].Connected) then
begin

error:=GSM_GetManufacturer(GSMDevice[i].DeviceID,@buffer);
if (error = ERR_NONE) then
begin
Add;
Item[Count-
1].Caption:=GatewayINIFile.ReadString('modem'+inttostr(i),
'Port', 'com1:');
Item[Count-1].SubItems.Add('Device');
Item[Count-1].SubItems.Add(PChar(@buffer));

error:=GSM_GetModelName(GSMDevice[i].DeviceID,@buffer);
if (error = ERR_NONE) then
begin

33
Item[Count-1].SubItems.Strings[1]:=Item[Count-
1].SubItems.Strings[1]+' '+buffer;
end;
end;
error:=GSM_GetIMEI(GSMDevice[i].DeviceID,@buffer);
if (error = ERR_NONE) then
begin
Add;
Item[Count-
1].Caption:=GatewayINIFile.ReadString('modem'+inttostr(i),
'Port', 'com1:');
Item[Count-1].SubItems.Add('IMEI');
Item[Count-1].SubItems.Add(buffer);
end;

error:=GSM_GetFirmwareVersion(GSMDevice[i].DeviceID,@ver);
if (error = ERR_NONE) then
begin
Add;
Item[Count-
1].Caption:=GatewayINIFile.ReadString('modem'+inttostr(i),
'Port', 'com1:');
Item[Count-1].SubItems.Add('Firmware');
Item[Count-1].SubItems.Add(floattostr(ver));
end;

error:=GSM_GetNetworkInfo(GSMDevice[i].DeviceID,@NetInfo);
if (error = ERR_NONE) then
begin
Add;
Item[Count-
1].Caption:=GatewayINIFile.ReadString('modem'+inttostr(i),
'Port', 'com1:');
Item[Count-1].SubItems.Add('Status Jaringan');

case NetInfo.State of
GSM_HomeNetwork:
begin
Item[Count-1].SubItems.Add('Home network '+
NetInfo.NetworkCode);

GSM_GetNetworkName(@NetInfo.NetworkCode,@NetInfo.NetworkName
);
Add;
Item[Count-
1].Caption:=GatewayINIFile.ReadString('modem'+inttostr(i),
'Port', 'com1:');
Item[Count-1].SubItems.Add('Nama Jaringan');
Item[Count-
1].SubItems.Add(GetGammuUnicodeString(NetInfo.NetworkName));
Add;
Item[Count-
1].Caption:=GatewayINIFile.ReadString('modem'+inttostr(i),
'Port', 'com1:');
Item[Count-1].SubItems.Add('LAC');
Item[Count-1].SubItems.Add(NetInfo.LAC);
Add;

34
Item[Count-
1].Caption:=GatewayINIFile.ReadString('modem'+inttostr(i),
'Port', 'com1:');
Item[Count-1].SubItems.Add('CID');
Item[Count-1].SubItems.Add(NetInfo.CID);
end;
GSM_RoamingNetwork:
begin
Item[Count-1].SubItems.Add('Roaming network '+
NetInfo.NetworkCode);

GSM_GetNetworkName(@NetInfo.NetworkCode,@NetInfo.NetworkName
);
Add;
Item[Count-
1].Caption:=GatewayINIFile.ReadString('modem'+inttostr(i),
'Port', 'com1:');
Item[Count-1].SubItems.Add('Nama Jaringan');
Item[Count-
1].SubItems.Add(GetGammuUnicodeString(NetInfo.NetworkName));
Add;
Item[Count-
1].Caption:=GatewayINIFile.ReadString('modem'+inttostr(i),
'Port', 'com1:');
Item[Count-1].SubItems.Add('LAC');
Item[Count-1].SubItems.Add(NetInfo.LAC);
Add;
Item[Count-
1].Caption:=GatewayINIFile.ReadString('modem'+inttostr(i),
'Port', 'com1:');
Item[Count-1].SubItems.Add('CID');
Item[Count-1].SubItems.Add(NetInfo.CID);
end;
GSM_RequestingNetwork:
Item[Count-1].SubItems.Add('Meminta Jaringan');
GSM_NoNetwork:
Item[Count-1].SubItems.Add('Tidak ada jaringan');
else
Item[Count-1].SubItems.Add('Tidak tahu
'+inttostr(shortint(NetInfo.State)));
end;
end;
end;
end;
end;
end;

//==============================================================
procedure TForm1.TmMsgPendingTimer(Sender: TObject);
{ @Deskripsi : Fungsi untuk mengecek SMS/ pesan Pending yang
akan diperoses kembali
-------------------------------------------------------------}
var
kode, pesan,no : String;
qry : TZQuery;
sSQL : string;
begin
qry:= TZQuery.Create(Self);
qry.Connection:= ZConnection1;

35
qry.RequestLive:= True;
sSQL:= 'SELECT * FROM tbsmspending WHERE status ="Pending"';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount<>0) then
begin
kode:= qry.FieldByName('kode').AsString;
no:= qry.FieldByName('nohp').AsString;
pesan:= qry.FieldByName('pesan').AsString;
PesanPending(kode,no,pesan);
end;
qry.Free;
end;

procedure TForm1.btnAboutClick(Sender: TObject);


begin
Frmabout.ShowModal;
end;

end.

UNIT modulGlobal.pas

unit modulGlobal;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics,


Controls, Forms,
Dialogs, Gammu, Buttons, ExtCtrls, Gauges, StdCtrls, ComCtrls,
ImgList,
Menus, ShellAPI, Grids, DBGrids, ZConnection, DB,
ZAbstractRODataset,
ZAbstractDataset, ZDataset, DateUtils, StrUtils;

procedure ExecQuery(perintah: string; qry: TZQuery; tipe:


Boolean);
function OlahPesan(no: AnsiString; pesan: AnsiString):string;
function CekRegistrasi(no_hp : String) : string;

implementation

uses dm, Untama, UnPendingMessage;

//==============================================================
function OlahPesan(no: AnsiString; pesan: AnsiString): string;
{ @Deskripsi : Fungsi untuk mengolah informasi yang ada pada
pesan
-------------------------------------------------------------}

var cmd: AnsiString;


balas, sSQL, hpbank, reg: String;
jk, bk, dj: String;
nukm, bid, untung, alamat, cp: String;

36
cnukm, cbukm, calukm, cpukm : String;
i,j, k: integer;
ja, kreg: String;
idbank, nbank, cpbank, noreg: String;
idkredit, nkredit, jnkredit, bkredit, jgkredit, bgkredit,
stuskredit, ket: String;
twridbank: String;
ceknamabank, cekcpbank: String;
reqidukm, reqidkredit: String;
qry, Opqry : TZQuery;
temp: integer;
idbakhir, idbbaru, idbtemp: string;
iduakhir, idubaru, idutemp: String;
kode, idsyarat, syarat, snbank, sjkredit, sbkredit : string;
ls: TStringList;
begin
qry:= TZQuery.Create(Form1);
qry.Connection:= Form1.ZConnection1;
qry.RequestLive:= True;
Opqry:= TZQuery.Create(Form1);
Opqry.Connection:= Form1.ZConnection1;
Opqry.RequestLive:= True;
reqidukm:='';
reqidkredit:='';
idbakhir:='';
idbbaru:='';
iduakhir:='';
idubaru:='';
kode:= '';
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
sSQL := 'INSERT INTO tbsmsmasuk(Kode,Tanggal,jam,nohp,pesan)
VALUES("' + kode + '","' + FormatDateTime('yyyy-mm-dd', Now)
+ '","' + FormatDateTime('hh:nn:ss', Now) + '","' + no +
'","' + pesan + '")';
ExecQuery(sSQL,qry,True);
balas:= '<UKM-GET> ';

// melakukan pengecekan registrasi anggota


reg:= CekRegistrasi(no);
if (UpperCase(reg)='UKM') then
begin
cmd:= copy(pesan,0,5);
if (UpperCase(cmd)='UNREG') then
begin
sSQL:= 'SELECT NoReg FROM tbukm WHERE HP="' + no + '"';
ExecQuery(sSQL,qry,False);
noreg:= qry.FieldByName('NoReg').AsString;
sSQL:= 'DELETE FROM tbserversms WHERE NoReg="' + noreg +
'"';
ExecQuery(sSQL,qry,True);
balas:= balas + 'Terimakasih..ID Anda telah dikeluarkan
dari keanggotaan pada server UKM SMS Gateway. untuk
sementara Anda tidak bisa menggunakan layanan ini lagi';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

37
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end
else
begin // utk bank tertentu contoh: KRD#BNI#BLN
cmd:= Copy(pesan,0,3);
if (UpperCase(cmd)='KRD') then
begin
if (Length(pesan)>9) then
begin
j:= 0;
nbank:='';
jk:='';
for i:= 5 to Length(pesan) do
begin
if pesan[i]<>'#' then
begin
if j= 0 then
nbank:= nbank + pesan[i]
else if j= 1 then
jk:= jk + pesan[i];
end
else
inc(j);
end;
sSQL:= 'SELECT NamaBank FROM tbbank WHERE NamaBank="'
+ UpperCase(nbank) + '"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
sSQL:= 'SELECT IdBank FROM tbbank WHERE NamaBank="'
+ UpperCase(nbank) + '"';
ExecQuery(sSQL,qry,false);
idbank:= qry.FieldByName('IdBank').AsString;
if ((UpperCase(jk)='HRI') or (UpperCase(jk)='MGU')
or (UpperCase(jk)='BLN')) then
begin
sSQL:= 'SELECT IdUkm FROM tbukm WHERE HP="' + no +
'"';
ExecQuery(sSQL,qry,False);
reqidukm:= qry.FieldByName('IdUkm').AsString;
sSQL:= 'SELECT b.NamaBank, k.IdKredit,
k.NamaKredit, k.BesarKredit, k.JangkaWaktu, k.Bunga,
b.ContactPerson, b.HP FROM tbbank b, tbkredit k, tbtawaran t
WHERE k.IdKredit = t.IdKredit AND t.IdBank = b.IdBank AND
k.JenisKredit ="' + UpperCase(jk) + '" AND k.Status ="AKTIF"
AND b.IdBank="' + idbank + '"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin

38
First;
while not qry.Eof do
begin
if ((Length(balas)>85) and
(Length(balas)<170)) then
begin
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
balas:='<UKM-GET> ';
end;
reqidkredit:=
qry.FieldByName('IdKredit').AsString;
balas:= balas +
qry.fieldByName('NamaBank').AsString +',';
balas:= balas +
qry.fieldByName('NamaKredit').AsString +',';
balas:= balas +
qry.fieldByName('BesarKredit').AsString + ',';
balas:= balas +
qry.fieldByName('JangkaWaktu').AsString +',';
balas:= balas +
qry.fieldByName('Bunga').AsString +',';
balas:= balas +
qry.FieldByName('ContactPerson').AsString +',';
balas:= balas +
qry.FieldByName('HP').AsString;
balas:= balas +'#';
sSQL:= 'SELECT IdKredit FROM tbrequest r,
tbukm u WHERE r.IdKredit="' + reqidkredit + '" AND
r.IdUkm=u.IdUkm AND u.HP="' + no + '"';
ExecQuery(sSQL,Opqry,False);
if (Opqry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbrequest
(IdUkm,IdKredit,Tanggal,Jam) VALUES ("' + reqidukm + '","' +
reqidkredit + '","' + FormatDateTime('yyyy-mm-dd', Now) +
'","' + FormatDateTime('hh:nn:ss', Now) + '")';
ExecQuery(sSQL,Opqry,True);
end;
Next;
end;
end;
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;

39
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end
else
begin
balas:= balas + 'Maaf!. Bank :' + nbank + '
Belum menawarkan jenis kredit tersebut';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else
begin
balas:= balas + 'Maaf!. jenis perintah :' +
UpperCase(jk) + ' tidak tersedia di server, yang tersedia
(HRI, MGU, BLN)';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else // utk semua bank
begin
jk:= Copy(pesan,5,3);
if (UpperCase(jk)='HRI') then
// JenisKredit HARI = HRI
begin
dj:= Copy(pesan,9,2);
if (UpperCase(dj)='DA') then
begin
bk:= Copy(pesan,12,Length(pesan)-11);
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));

40
if (TryStrToInt(bk,j) = false) or (bk='') then
begin
balas:= balas + 'Maaf, Parameter Besarkredit :
' + bk +' pada pesan ' + pesan + ' bukan merupakan angka.';
balas:= balas + ', cth perintah yg valid: KRD
HRI DA 8000000.';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end
else
begin
sSQL:= 'SELECT IdUkm FROM tbukm WHERE HP="' +
no + '"';
ExecQuery(sSQL,qry,False);
reqidukm:= qry.FieldByName('IdUkm').AsString;
sSQL:= 'SELECT b.NamaBank, k.IdKredit,
k.NamaKredit, k.BesarKredit, k.JangkaWaktu, k.Bunga,
k.Status, b.ContactPerson, b.HP FROM tbbank b, tbkredit k,
tbtawaran t WHERE k.IdKredit = t.IdKredit AND t.IdBank =
b.IdBank AND k.JenisKredit ="' + UpperCase(jk) + '" AND
k.Status ="AKTIF" AND k.BesarKredit > "' + bk + '"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin
if ((Length(balas)>85) and
(Length(balas)<170)) then
begin
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
balas:='<UKM-GET> ';
end;
reqidkredit:=
qry.FieldByName('IdKredit').AsString;

41
balas:= balas +
qry.fieldByName('NamaBank').AsString +',';
balas:= balas +
qry.fieldByName('NamaKredit').AsString +',';
balas:= balas +
qry.fieldByName('BesarKredit').AsString + ',';
balas:= balas +
qry.fieldByName('JangkaWaktu').AsString +',';
balas:= balas +
qry.fieldByName('Bunga').AsString +',';
balas:= balas +
qry.FieldByName('ContactPerson').AsString +',';
balas:= balas +
qry.FieldByName('HP').AsString;
balas:= balas +'#';
sSQL:= 'SELECT IdKredit FROM tbrequest
r, tbukm u WHERE r.IdKredit="' + reqidkredit + '" AND
r.IdUkm=u.IdUkm AND u.HP="' + no + '"';
ExecQuery(sSQL,Opqry,False);
if (Opqry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbrequest
(IdUkm,IdKredit,Tanggal,Jam) VALUES ("' + reqidukm + '","' +
reqidkredit + '","' + FormatDateTime('yyyy-mm-dd', Now) +
'","' + FormatDateTime('hh:nn:ss', Now) + '")';
ExecQuery(sSQL,Opqry,True);
end;
Next;
end;
end;
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end
else
begin
sSQL:= 'SELECT HP FROM tbbank b, tbtawaran
t, tbkredit k WHERE b.IdBank=t.IdBank AND
t.IdKredit=k.IdKredit AND k.JenisKredit="' + UpperCase(jk)
+'" AND k.ket<>"LOCK"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin

42
hpbank:=
qry.fieldByName('HP').AsString;
balas:= '<UKM-GET> '+ pesan;
ls:= TStringList.Create;
ls.Add(hpbank);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + hpbank + '","' +
pesan + '")';
ExecQuery(sSQL,Opqry,True);
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
Next;
end;
end;
balas:= '<UKM-GET> ';
balas:= balas + 'Data kredit tidak
tersedia..Silahkan menunggu!! Server sedang mencari info ke
Bank';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
sSQL:= 'SELECT * FROM tbsmspending WHERE
nohp="' + no + '" AND pesan="' + pesan + '" AND
status="Pending"';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbsmspending
(kode,nohp,pesan,status) VALUES ("' + kode + '","' + no +
'","' + pesan + '","Pending")';
ExecQuery(sSQL,qry,True);
end;
end
else
begin
balas:= balas + 'Untuk sementara pihak
BANK belum menawarkan jenis kredit yang anda request';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

43
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end;
end; //AKHIR Perintah DA
end
else if (UpperCase(dj)='DB') then
begin
bk:= Copy(pesan,12,Length(pesan)-11);
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
if (TryStrToInt(bk,j) = false) or (bk='') then
begin
balas:= balas + 'Maaf, Parameter Besarkredit :
' + bk +' pada pesan ' + pesan + ' bukan merupakan angka.';
balas:= balas + ' cth perintah yg valid: KRD
HRI DB 8000000.';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end
else
begin
sSQL:= 'SELECT IdUkm FROM tbukm WHERE HP="' +
no + '"';
ExecQuery(sSQL,qry,False);
reqidukm:= qry.FieldByName('IdUkm').AsString;
sSQL:= 'SELECT b.NamaBank, k.IdKredit,
k.NamaKredit, k.BesarKredit, k.JangkaWaktu, k.Bunga,
k.Status, b.ContactPerson, b.HP FROM tbbank b, tbkredit k,
tbtawaran t WHERE k.IdKredit = t.IdKredit AND t.IdBank =
b.IdBank AND k.JenisKredit ="' + UpperCase(jk) + '" AND
k.Status ="AKTIF" AND k.BesarKredit < "' + bk + '"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;

44
while not qry.Eof do
begin
if ((Length(balas)>85) and
(Length(balas)<170)) then
begin
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
balas:='<UKM-GET> ';
end;
reqidkredit:=
qry.FieldByName('IdKredit').AsString;
balas:= balas +
qry.fieldByName('NamaBank').AsString +',';
balas:= balas +
qry.fieldByName('NamaKredit').AsString +',';
balas:= balas +
qry.fieldByName('BesarKredit').AsString + ',';
balas:= balas +
qry.fieldByName('JangkaWaktu').AsString +',';
balas:= balas +
qry.fieldByName('Bunga').AsString +',';
balas:= balas +
qry.FieldByName('ContactPerson').AsString +',';
balas:= balas +
qry.FieldByName('HP').AsString;
balas:= balas +'#';
sSQL:= 'SELECT IdKredit FROM tbrequest
r, tbukm u WHERE r.IdKredit="' + reqidkredit + '" AND
r.IdUkm=u.IdUkm AND u.HP="' + no + '"';
ExecQuery(sSQL,Opqry,False);
if (Opqry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbrequest
(IdUkm,IdKredit,Tanggal,Jam) VALUES ("' + reqidukm + '","' +
reqidkredit + '","' + FormatDateTime('yyyy-mm-dd', Now) +
'","' + FormatDateTime('hh:nn:ss', Now) + '")';
ExecQuery(sSQL,Opqry,True);
end;
Next;
end;
end;
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +

45
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end
else
begin
sSQL:= 'SELECT HP FROM tbbank b, tbtawaran
t, tbkredit k WHERE b.IdBank=t.IdBank AND
t.IdKredit=k.IdKredit AND k.JenisKredit="' + UpperCase(jk)
+'" AND k.ket<>"LOCK"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin
hpbank:=
qry.fieldByName('HP').AsString;
balas:= '<UKM-GET> '+ pesan;
ls:= TStringList.Create;
ls.Add(hpbank);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + hpbank + '","' +
pesan + '")';
ExecQuery(sSQL,Opqry,True);
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
Next;
end;
end;
balas:= '<UKM-GET> ';
balas:= balas + 'Data kredit tidak
tersedia..Silahkan menunggu!! Server sedang mencari info ke
Bank';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);

46
sSQL:= 'SELECT * FROM tbsmspending WHERE
nohp="' + no + '" AND pesan="' + pesan + '" AND
status="Pending"';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbsmspending
(kode,nohp,pesan,status) VALUES ("' + kode + '","' + no +
'","' + pesan + '","Pending")';
ExecQuery(sSQL,qry,True);
end;
end
else
begin
balas:= balas + 'Untuk sementara pihak
BANK belum menawarkan jenis kredit yang anda request';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end;
end;
end
else
// selain perintah DA dan DB
begin
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
balas:= balas + 'Perintah ' + pesan + ' tidak
dikenal. Silahkan ketik INF untuk info perintah';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end // Akhir JenisKredit HARI = HRI
else if (UpperCase(jk)='MGU') then // JenisKredit
MINGGU = MGU

47
begin
dj:= Copy(pesan,9,2);
if (UpperCase(dj)='DA') then
begin
bk:= Copy(pesan,12,Length(pesan)-11);
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
if (TryStrToInt(bk,j) = false) or (bk='') then
begin
balas:= balas + 'Maaf, Parameter Besarkredit :
' + bk +' pada pesan ' + pesan + ' bukan merupakan angka.';
balas:= balas + ' cth perintah yg valid: KRD
MGU DA 10000000.';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end
else
begin
sSQL:= 'SELECT IdUkm FROM tbukm WHERE HP="' +
no + '"';
ExecQuery(sSQL,qry,False);
reqidukm:= qry.FieldByName('IdUkm').AsString;
sSQL:= 'SELECT b.NamaBank, k.IdKredit,
k.NamaKredit, k.BesarKredit, k.JangkaWaktu, k.Bunga,
k.Status, b.ContactPerson, b.HP FROM tbbank b, tbkredit k,
tbtawaran t WHERE k.IdKredit = t.IdKredit AND t.IdBank =
b.IdBank AND k.JenisKredit ="' + UpperCase(jk) + '" AND
k.Status ="AKTIF" AND k.BesarKredit > "' + bk + '"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin
if ((Length(balas)>85) and
(Length(balas)<170)) then
begin
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;

48
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
balas:='<UKM-GET> ';
end;
reqidkredit:=
qry.FieldByName('IdKredit').AsString;
balas:= balas +
qry.fieldByName('NamaBank').AsString +',';
balas:= balas +
qry.fieldByName('NamaKredit').AsString +',';
balas:= balas +
qry.fieldByName('BesarKredit').AsString + ',';
balas:= balas +
qry.fieldByName('JangkaWaktu').AsString +',';
balas:= balas +
qry.fieldByName('Bunga').AsString +',';
balas:= balas +
qry.FieldByName('ContactPerson').AsString +',';
balas:= balas +
qry.FieldByName('HP').AsString;
balas:= balas +'#';
sSQL:= 'SELECT IdKredit FROM tbrequest
r, tbukm u WHERE r.IdKredit="' + reqidkredit + '" AND
r.IdUkm=u.IdUkm AND u.HP="' + no + '"';
ExecQuery(sSQL,Opqry,False);
if (Opqry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbrequest
(IdUkm,IdKredit,Tanggal,Jam) VALUES ("' + reqidukm + '","' +
reqidkredit + '","' + FormatDateTime('yyyy-mm-dd', Now) +
'","' + FormatDateTime('hh:nn:ss', Now) + '")';
ExecQuery(sSQL,Opqry,True);
end;
Next;
end;
end;
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end
else
begin
sSQL:= 'SELECT HP FROM tbbank b, tbtawaran
t, tbkredit k WHERE b.IdBank=t.IdBank AND
t.IdKredit=k.IdKredit AND k.JenisKredit="' + UpperCase(jk)
+'" AND k.ket<>"LOCK"';
ExecQuery(sSQL,qry,false);

49
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin
hpbank:=
qry.fieldByName('HP').AsString;
balas:= '<UKM-GET> '+ pesan;
ls:= TStringList.Create;
ls.Add(hpbank);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + hpbank + '","' +
pesan + '")';
ExecQuery(sSQL,Opqry,True);
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
Next;
end;
end;
balas:= '<UKM-GET> ';
balas:= balas + 'Data kredit tidak
tersedia..Silahkan menunggu!! Server sedang mencari info ke
Bank';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
sSQL:= 'SELECT * FROM tbsmspending WHERE
nohp="' + no + '" AND pesan="' + pesan + '" AND
status="Pending"';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbsmspending
(kode,nohp,pesan,status) VALUES ("' + kode + '","' + no +
'","' + pesan + '","Pending")';
ExecQuery(sSQL,qry,True);
end;
end

50
else
begin
balas:= balas + 'Untuk sementara pihak
BANK belum menawarkan jenis kredit yang anda request';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end;
end; //AKHIR Perintah DA
end
else if (UpperCase(dj)='DB') then
begin
bk:= Copy(pesan,12,Length(pesan)-11);
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
if (TryStrToInt(bk,j) = false) or (bk='') then
begin
balas:= balas + 'Maaf, Parameter Besarkredit :
' + bk +' pada pesan ' + pesan + ' bukan merupakan angka.';
balas:= balas + ' cth perintah yg valid: KRD
MGU DB 10000000.';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end
else
begin
sSQL:= 'SELECT IdUkm FROM tbukm WHERE HP="' +
no + '"';
ExecQuery(sSQL,qry,False);
reqidukm:= qry.FieldByName('IdUkm').AsString;
sSQL:= 'SELECT b.NamaBank, k.IdKredit,
k.NamaKredit, k.BesarKredit, k.JangkaWaktu, k.Bunga,
k.Status, b.ContactPerson, b.HP FROM tbbank b, tbkredit k,
tbtawaran t WHERE k.IdKredit = t.IdKredit AND t.IdBank =

51
b.IdBank AND k.JenisKredit ="' + UpperCase(jk) + '" AND
k.Status ="AKTIF" AND k.BesarKredit < "' + bk + '"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin
if ((Length(balas)>85) and
(Length(balas)<170)) then
begin
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
balas:='<UKM-GET> ';
end;
reqidkredit:=
qry.FieldByName('IdKredit').AsString;
balas:= balas +
qry.fieldByName('NamaBank').AsString +',';
balas:= balas +
qry.fieldByName('NamaKredit').AsString +',';
balas:= balas +
qry.fieldByName('BesarKredit').AsString + ',';
balas:= balas +
qry.fieldByName('JangkaWaktu').AsString +',';
balas:= balas +
qry.fieldByName('Bunga').AsString +',';
balas:= balas +
qry.FieldByName('ContactPerson').AsString +',';
balas:= balas +
qry.FieldByName('HP').AsString;
balas:= balas +'#';
sSQL:= 'SELECT IdKredit FROM tbrequest
r, tbukm u WHERE r.IdKredit="' + reqidkredit + '" AND
r.IdUkm=u.IdUkm AND u.HP="' + no + '"';
ExecQuery(sSQL,Opqry,False);
if (Opqry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbrequest
(IdUkm,IdKredit,Tanggal,Jam) VALUES ("' + reqidukm + '","' +
reqidkredit + '","' + FormatDateTime('yyyy-mm-dd', Now) +
'","' + FormatDateTime('hh:nn:ss', Now) + '")';
ExecQuery(sSQL,Opqry,True);
end;
Next;
end;
end;
ls:= TStringList.Create;

52
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end
else
begin
sSQL:= 'SELECT HP FROM tbbank b, tbtawaran
t, tbkredit k WHERE b.IdBank=t.IdBank AND
t.IdKredit=k.IdKredit AND k.JenisKredit="' + UpperCase(jk)
+'" AND k.ket<>"LOCK"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin
hpbank:=
qry.fieldByName('HP').AsString;
balas:= '<UKM-GET> '+ pesan;
ls:= TStringList.Create;
ls.Add(hpbank);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + hpbank + '","' +
pesan + '")';
ExecQuery(sSQL,Opqry,True);
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
Next;
end;
end;
balas:= '<UKM-GET> ';
balas:= balas + 'Data kredit tidak
tersedia..Silahkan menunggu!! Server sedang mencari info ke
Bank';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

53
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
sSQL:= 'SELECT * FROM tbsmspending WHERE
nohp="' + no + '" AND pesan="' + pesan + '" AND
status="Pending"';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbsmspending
(kode,nohp,pesan,status) VALUES ("' + kode + '","' + no +
'","' + pesan + '","Pending")';
ExecQuery(sSQL,qry,True);
end;
end
else
begin
balas:= balas + 'Untuk sementara pihak
BANK belum menawarkan jenis kredit yang anda request';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end;
end;
end
else
// selain perintah DA dan DB
begin
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
balas:= balas + 'Perintah ' + pesan + ' tidak
dikenal. Silahkan ketik INF untuk info perintah';

54
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
// Akhir JenisKredit MINGGU = MGU
else if (UpperCase(jk)='BLN') then
// JenisKredit BULAN = BLN
begin
dj:= Copy(pesan,9,2);
if (UpperCase(dj)='DA') then
begin
bk:= Copy(pesan,12,Length(pesan)-11);
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
if (TryStrToInt(bk,j) = false) or (bk='') then
begin
balas:= balas + 'Maaf, Parameter Besarkredit :
' + bk +' pada pesan ' + pesan + ' bukan merupakan angka.';
balas:= balas + ' cth perintah yg valid: KRD
BLN DA 20000000.';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end
else
begin
sSQL:= 'SELECT IdUkm FROM tbukm WHERE HP="' +
no + '"';
ExecQuery(sSQL,qry,False);
reqidukm:= qry.FieldByName('IdUkm').AsString;
sSQL:= 'SELECT b.NamaBank, k.IdKredit,
k.NamaKredit, k.BesarKredit, k.JangkaWaktu, k.Bunga,
k.Status, b.ContactPerson, b.HP FROM tbbank b, tbkredit k,
tbtawaran t WHERE k.IdKredit = t.IdKredit AND t.IdBank =
b.IdBank AND k.JenisKredit ="' + UpperCase(jk) + '" AND
k.Status ="AKTIF" AND k.BesarKredit > "' + bk + '"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do

55
begin
if ((Length(balas)>85) and
(Length(balas)<170)) then
begin
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
balas:='<UKM-GET> ';
end;
reqidkredit:=
qry.FieldByName('IdKredit').AsString;
balas:= balas +
qry.fieldByName('NamaBank').AsString +',';
balas:= balas +
qry.fieldByName('NamaKredit').AsString +',';
balas:= balas +
qry.fieldByName('BesarKredit').AsString + ',';
balas:= balas +
qry.fieldByName('JangkaWaktu').AsString +',';
balas:= balas +
qry.fieldByName('Bunga').AsString +',';
balas:= balas +
qry.FieldByName('ContactPerson').AsString +',';
balas:= balas +
qry.FieldByName('HP').AsString;
balas:= balas +'#';
sSQL:= 'SELECT IdKredit FROM tbrequest
r, tbukm u WHERE r.IdKredit="' + reqidkredit + '" AND
r.IdUkm=u.IdUkm AND u.HP="' + no + '"';
ExecQuery(sSQL,Opqry,False);
if (Opqry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbrequest
(IdUkm,IdKredit,Tanggal,Jam) VALUES ("' + reqidukm + '","' +
reqidkredit + '","' + FormatDateTime('yyyy-mm-dd', Now) +
'","' + FormatDateTime('hh:nn:ss', Now) + '")';
ExecQuery(sSQL,Opqry,True);
end;
Next;
end;
end;
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +

56
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end
else
begin
sSQL:= 'SELECT HP FROM tbbank b, tbtawaran
t, tbkredit k WHERE b.IdBank=t.IdBank AND
t.IdKredit=k.IdKredit AND k.JenisKredit="' + UpperCase(jk)
+'" AND k.ket<>"LOCK"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin
hpbank:=
qry.fieldByName('HP').AsString;
balas:= '<UKM-GET> '+ pesan;
ls:= TStringList.Create;
ls.Add(hpbank);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + hpbank + '","' +
pesan + '")';
ExecQuery(sSQL,Opqry,True);
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
Next;
end;
end;
balas:= '<UKM-GET> ';
balas:= balas + 'Data kredit tidak
tersedia..Silahkan menunggu!! Server sedang mencari info ke
Bank';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);

57
sSQL:= 'SELECT * FROM tbsmspending WHERE
nohp="' + no + '" AND pesan="' + pesan + '" AND
status="Pending"';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbsmspending
(kode,nohp,pesan,status) VALUES ("' + kode + '","' + no +
'","' + pesan + '","Pending")';
ExecQuery(sSQL,qry,True);
end;
end
else
begin
balas:= balas + 'Untuk sementara pihak
BANK belum menawarkan jenis kredit yang anda request';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end;
end; //AKHIR Perintah DA
end
else if (UpperCase(dj)='DB') then
begin
bk:= Copy(pesan,12,Length(pesan)-11);
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
if (TryStrToInt(bk,j) = false) or (bk='') then
begin
balas:= balas + 'Maaf, Parameter Besarkredit :
' + bk +' pada pesan ' + pesan + ' bukan merupakan angka.';
balas:= balas + ' cth perintah yg valid: KRD
BLN DB 20000000.';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);

58
end
else
begin
sSQL:= 'SELECT IdUkm FROM tbukm WHERE HP="' +
no + '"';
ExecQuery(sSQL,qry,False);
reqidukm:= qry.FieldByName('IdUkm').AsString;
sSQL:= 'SELECT b.NamaBank, k.IdKredit,
k.NamaKredit, k.BesarKredit, k.JangkaWaktu, k.Bunga,
k.Status, b.ContactPerson, b.HP FROM tbbank b, tbkredit k,
tbtawaran t WHERE k.IdKredit = t.IdKredit AND t.IdBank =
b.IdBank AND k.JenisKredit ="' + UpperCase(jk) + '" AND
k.Status ="AKTIF" AND k.BesarKredit < "' + bk + '"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin
if ((Length(balas)>85) and
(Length(balas)<170)) then
begin
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
balas:='<UKM-GET> ';
end;
reqidkredit:=
qry.FieldByName('IdKredit').AsString;
balas:= balas +
qry.fieldByName('NamaBank').AsString +',';
balas:= balas +
qry.fieldByName('NamaKredit').AsString +',';
balas:= balas +
qry.fieldByName('BesarKredit').AsString + ',';
balas:= balas +
qry.fieldByName('JangkaWaktu').AsString +',';
balas:= balas +
qry.fieldByName('Bunga').AsString +',';
balas:= balas +
qry.FieldByName('ContactPerson').AsString +',';
balas:= balas +
qry.FieldByName('HP').AsString;
balas:= balas +'#';
sSQL:= 'SELECT IdKredit FROM tbrequest
r, tbukm u WHERE r.IdKredit="' + reqidkredit + '" AND
r.IdUkm=u.IdUkm AND u.HP="' + no + '"';
ExecQuery(sSQL,Opqry,False);
if (Opqry.RecordCount=0) then

59
begin
sSQL:= 'INSERT INTO tbrequest
(IdUkm,IdKredit,Tanggal,Jam) VALUES ("' + reqidukm + '","' +
reqidkredit + '","' + FormatDateTime('yyyy-mm-dd', Now) +
'","' + FormatDateTime('hh:nn:ss', Now) + '")';
ExecQuery(sSQL,Opqry,True);
end;
Next;
end;
end;
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,Opqry,True);
end
else
begin
sSQL:= 'SELECT HP FROM tbbank b, tbtawaran
t, tbkredit k WHERE b.IdBank=t.IdBank AND
t.IdKredit=k.IdKredit AND k.JenisKredit="' + UpperCase(jk)
+'" AND k.ket<>"LOCK"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin
hpbank:=
qry.fieldByName('HP').AsString;
balas:= '<UKM-GET> '+ pesan;
ls:= TStringList.Create;
ls.Add(hpbank);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + hpbank + '","' +
pesan + '")';
ExecQuery(sSQL,Opqry,True);
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
Next;

60
end;
end;
balas:= '<UKM-GET> ';
balas:= balas + 'Data kredit tidak
tersedia..Silahkan menunggu!! Server sedang mencari info ke
Bank';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
sSQL:= 'SELECT * FROM tbsmspending WHERE
nohp="' + no + '" AND pesan="' + pesan + '" AND
status="Pending"';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbsmspending
(kode,nohp,pesan,status) VALUES ("' + kode + '","' + no +
'","' + pesan + '","Pending")';
ExecQuery(sSQL,qry,True);
end;
end
else
begin
balas:= balas + 'Untuk sementara pihak
BANK belum menawarkan jenis kredit yang anda request';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end;
end;
end
else
// selain perintah DA dan DB
begin
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));

61
balas:= balas + 'Perintah ' + pesan + ' tidak
dikenal. Silahkan ketik INF untuk info perintah';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
// Akhir JenisKredit BULAN = BLN
else
{ Selain dari jenis kredit BLN,MGU dan HRI}
begin
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
balas:= balas + 'Perintah: ' + pesan + ' tidak
dikenal/kurang lengkap. Silahkan ketik INF untuk info
perintah';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end; // akhir

end
// jika panjang Pesan kurang dari 9 karakter /
// pesan tidak akan diproses
else
begin
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now))
+ IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
balas:= balas + 'Perintah yg Anda kirim tidak
dikenal/kurang lengkap. Silahkan ketik INF untuk info
perintah';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

62
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end // akhir K R D = KREDIT
else if (UpperCase(cmd)='INF') then
begin
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
balas:= balas + 'Info
Kredit:KRD#BLN/MGU/HRI#DA/DB#BKredit, cth:KRD#BLN#DA#8000000
or KRD#NBank#JnKredit, syarat:SRT#Bank#JnKredit#BKredit,
cth:SRT#BNI#BLN#8000000';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end
else if (UpperCase(cmd)='REG') then
begin
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
sSQL:= 'SELECT * FROM tbukm WHERE HP = "' + no + '"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
nukm:= qry.FieldByName('NamaUkm').AsString;
bid:= qry.FieldByName('Bidang').AsString;
untung:= qry.FieldByName('Keuntungan').AsString;
alamat:= qry.FieldByName('Alamat').AsString;
cp:= qry.FieldByName('ContactPerson').AsString;
if ((nukm<>'') and (bid<>'') and (untung<>'') and
(alamat<>'') and (cp<>'')) then
begin
balas:= balas + 'ID Anda telah terdaftar sebelumnya
dengan Nama Usaha: '+UpperCase(nukm)+ ', untuk info ketik:
INF';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

63
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,Opqry,true);
end
else
begin
balas:= balas + ' Isi data Anda
ketik:UKM#Nmusaha#BdgUsaha#untung#Alamat#ContPerson,
cth:UKM#Mitra Abadi#Ternak Ayam#8000000#Jl. Keputih No.2
Surabaya#Ir.Suparno';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,Opqry,true);
end;
end
else
begin
balas:= balas + ' Maaf!! ID Anda belum terdaftar di
Server..';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else if (UpperCase(cmd)='UKM') then
begin
j:= 0;
nukm:='';
bid:='';
untung:='';
alamat:='';
cp:='';
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +

64
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
sSQL:='SELECT NamaUkm, Bidang, Alamat, ContactPerson
FROM tbukm WHERE HP="' + no + '"';
ExecQuery(sSQL,qry,False);
cnukm:= qry.FieldByName('NamaUkm').AsString;
cbukm:= qry.FieldByName('Bidang').AsString;
calukm:= qry.FieldByName('Alamat').AsString;
cpukm:= qry.FieldByName('ContactPerson').AsString;
if ((cnukm='') and (cbukm='') and (calukm='') and
(cpukm='')) then
begin
for i:= 5 to Length(pesan) do
begin
if pesan[i]<>'#' then
begin
if j= 0 then
nukm:= nukm + pesan[i]
else if j= 1 then
bid:= bid + pesan[i]
else if j= 2 then
untung:= untung + pesan[i]
else if j= 3 then
alamat:= alamat + pesan[i]
else if j= 4 then
cp:= cp + pesan[i];
end
else
inc(j);
end;
if (cp<>'') then
begin
sSQL:= 'UPDATE tbukm SET NamaUkm="' + nukm + '",
Bidang="' + bid + '", Keuntungan="' + untung + '", Alamat="'
+ alamat + '", ContactPerson="' + cp + '" WHERE HP="' + no +
'"';
ExecQuery(sSQL,qry,true);
sSQL:= 'SELECT NoReg FROM tbukm WHERE HP="' + no +
'"';
ExecQuery(sSQL,qry,false);
noreg:= qry.FieldByName('NoReg').AsString;
balas:= balas + 'Terimakasih Anda telah bergabung di
sistem -UKM GATEWAY- sebagai registrasi UKM. Nomor
registrasi Anda : '+ noreg +', utk info ketik: INF';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end
else
begin

65
balas:= balas + 'Data kurang Lengkap!.
ketik:UKM#Nmusaha#BdUsaha#untung#Alamat#CtPerson,
cth:UKM#Jaya Abadi#Ternak Ayam#8000000#Jl. Keputih No.2
Surabaya#Ir.Suparno';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else
begin
balas:= balas + 'ID Anda telah terdaftar sebelumnya
dengan Nama Usaha: '+UpperCase(cnukm)+ ', untuk info ketik:
INF';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else if (UpperCase(cmd)='SRT') then
// SRT#MANDIRI#BLN#20000000
begin
if (Length(pesan)>12) then
begin
j:= 0;
snbank:= '';
sjkredit:= '';
sbkredit:= '';
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now))
+ IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
for i:= 5 to Length(pesan) do
begin
if pesan[i]<>'#' then
begin
if j= 0 then
snbank:= snbank + pesan[i]
else if j= 1 then
sjkredit:= sjkredit + pesan[i]
else if j= 2 then

66
sbkredit:= sbkredit + pesan[i];
end
else
inc(j);
end;
if (sbkredit<>'') then
begin
sSQL:= 'SELECT s.Syarat FROM tbkredit k, tbtawaran
t, tbbank b, tbkreditsyarat s WHERE b.NamaBank="' +
UpperCase(snbank) + '" AND b.IdBank=t.IdBank AND
t.IdKredit=k.IdKredit AND k.JenisKredit="' +
UpperCase(sjkredit) + '" AND k.BesarKredit="' + sbkredit +
'" AND k.IdKredit=s.IdKredit';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin
balas:= balas +
qry.FieldByName('Syarat').AsString +', ';
Next;
end;
end;
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,Opqry,true);
end
else
begin
balas:= balas +'Maaf! untuk sementara info syarat
kredit yang Anda request belum bisa diakses';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else
begin

67
balas:= balas + 'Maaf! Data Pesan kurang Lengkap!.
Request syarat kredit ketik:
SRT#NamaBank#JenisKredit#BesarKredit, Cth:
SRT#MANDIRI#BLN#20000000';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else // jika pesan kurang dari 12
begin
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now))
+ IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
balas:= balas + 'Perintah yg Anda kirim tidak
dikenal/kurang lengkap. Untuk info perintah ketik INF';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else
begin
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
balas:= balas + 'Maaf!! Perintah yang Anda Ketik tidak
dikenal.. untuk info ketik: INF';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';

68
ExecQuery(sSQL,qry,true);
end;

end;

end // Akhir Registrasi UKM


else if (UpperCase(reg)='BANK') then
// Jenis Registrasi BANK
begin
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
cmd:= copy(pesan,0,5);
if (UpperCase(cmd)='UNREG') then
begin
sSQL:= 'SELECT NoReg FROM tbbank WHERE HP="' + no + '"';
ExecQuery(sSQL,qry,False);
noreg:= qry.FieldByName('NoReg').AsString;
sSQL:= 'DELETE FROM tbserversms WHERE NoReg="' + noreg +
'"';
ExecQuery(sSQL,qry,True);
balas:= balas + 'Terimakasih..ID Anda telah dikeluarkan
dari keanggotaan pada server UKM SMS Gateway. untuk
sementara Anda tidak bisa menggunakan layanan ini lagi';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end
else
begin
cmd:= Copy(pesan,0,3);
if (UpperCase(cmd)='BNK') then
//Input Data BANK: BNK#BNI#ir. Rachmad gunawan
begin
if (Length(pesan)>8) then
begin
j:= 0;
nbank:='';
cpbank:='';
sSQL:='SELECT NamaBank, ContactPerson FROM tbbank
WHERE HP="' + no + '"';
ExecQuery(sSQL,qry,False);
ceknamabank:= qry.FieldByName('NamaBank').AsString;
cekcpbank:= qry.FieldByName('ContactPerson').AsString;
if ((ceknamabank='') and (cekcpbank='')) then
begin
for i:= 5 to Length(pesan) do
begin
if pesan[i]<>'#' then

69
begin
if j= 0 then
nbank:= nbank + pesan[i]
else if j= 1 then
cpbank:= cpbank + pesan[i];
end
else
inc(j);
end;
if (cpbank<>'') then
begin
sSQL:= 'UPDATE tbbank SET NamaBank="' +
UpperCase(nbank) + '", ContactPerson="' + cpbank + '" WHERE
HP="' + no + '"';
ExecQuery(sSQL,qry,true);
sSQL:= 'SELECT NoReg FROM tbbank WHERE HP="' + no
+ '"';
ExecQuery(sSQL,qry,false);
noreg:= qry.FieldByName('NoReg').AsString;
balas:= balas + 'Terimakasih Anda telah bergabung
di sistem -UKM GETEWAY- sebagai registrasi BANK. Nomor
Registrasi Anda: '+ noreg +', utk info ketik: INF';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end
else
begin
balas:= balas + 'Maaf!! Data yg anda kirim kurang
lengkap!. ketik: BNK#NamaBank#ContactPerson, cth:
BNK#MANDIRI#Dr.Subroto';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else
begin
balas:= balas + 'Maaf!! ID Anda telah terdaftar
sebelumnya dengan Nama Perusahaan: '+UpperCase(ceknamabank)+
', untuk info ketik: INF';

70
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else
begin
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now))
+ IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
balas:= balas + 'Perintah yg Anda kirim kurang
lengkap. Untuk Info perintah ketik INF';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else if (UpperCase(cmd)='ADD') then
begin
j:= 0;
nkredit:='';
jnkredit:='';
bkredit:='';
jgkredit:='';
bgkredit:='';
stuskredit:='AKTIF';
ket:='OPEN';
twridbank:='';
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
sSQL:='SELECT NamaBank, ContactPerson FROM tbbank WHERE
HP="' + no + '"';
ExecQuery(sSQL,qry,False);
ceknamabank:= qry.FieldByName('NamaBank').AsString;
cekcpbank:= qry.FieldByName('ContactPerson').AsString;
if ((ceknamabank<>'') and (cekcpbank<>'')) then
begin
for i:= 5 to Length(pesan) do

71
begin
if pesan[i]<>'#' then
begin
if j= 0 then
nkredit:= nkredit + pesan[i]
else if j= 1 then
jnkredit:= jnkredit + pesan[i]
else if j= 2 then
bkredit:= bkredit + pesan[i]
else if j= 3 then
jgkredit:= jgkredit + pesan[i]
else if j= 4 then
bgkredit:= bgkredit + pesan[i];
end
else
inc(j);
end;
if ((nkredit<>'') and (jnkredit<>'') and (bkredit<>'')
and (jgkredit<>'') and (bgkredit<>'')) then
begin
idkredit:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now));
sSQL:= 'INSERT INTO tbkredit
(IdKredit,NamaKredit,JenisKredit,BesarKredit,JangkaWaktu,Bun
ga,Status,ket) VALUES ("' + idkredit + '","' + nkredit +
'","' + UpperCase(jnkredit) + '","' + bkredit + '","' +
jgkredit + '","' + bgkredit + '","' + stuskredit + '","' +
ket + '")';
ExecQuery(sSQL,qry,true);
sSQL:= 'SELECT IdBank FROM tbbank WHERE HP="' + no +
'"';
ExecQuery(sSQL,qry,False);
twridbank:= qry.FieldByName('IdBank').AsString;
sSQL:= 'INSERT INTO tbtawaran (IdBank,IdKredit)
VALUES ("' + twridbank + '","' + idkredit + '")';
ExecQuery(sSQL,qry,true);
balas:= balas + 'Terimakasih. ID Kredit Perusahaan
Anda :'+ idkredit +', Input syarat Kredit
ketik:SRT#IdKredit#Syarat.
Cth:SRT#1001#syarat_1#syarat_2#syarat_n';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end
else
begin

72
balas:= balas + 'Maaf! Data Anda kurang lengkap,
Ketik: ADD#NmKredit#BLN/MGU/HRI#BsrKredit#JkWaktu#Bunga,
cth: ADD#Jangka Panjang#BLN#20000000#3THN#3.5%';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else
begin
balas:= balas + 'Maaf! Identitas perusahaan Anda
belum dikenal, untuk isi data Anda ketik:
BNK#NamaBank#ContactPerson, cth: BNK#MANDIRI#Dr.Subroto';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else if (UpperCase(cmd)='UPD') then
begin
j:= 0;
idkredit:='';
nkredit:='';
jnkredit:='';
bkredit:='';
jgkredit:='';
bgkredit:='';
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
for i:= 5 to Length(pesan) do
begin
if pesan[i]<>'#' then
begin
if j= 0 then
nkredit:= nkredit + pesan[i]
else if j= 1 then
jnkredit:= jnkredit + pesan[i]
else if j= 2 then
bkredit:= bkredit + pesan[i]

73
else if j= 3 then
jgkredit:= jgkredit + pesan[i]
else if j= 4 then
bgkredit:= bgkredit + pesan[i]
else if j= 5 then
idkredit:= idkredit + pesan[i];
end
else
inc(j);
end;
if (idkredit<>'') then
begin
sSQL:= 'SELECT k.IdKredit, k.NamaKredit,
k.JenisKredit, k.BesarKredit, k.JangkaWaktu, k.Bunga FROM
tbkredit k, tbtawaran t, tbbank b WHERE k.IdKredit =
t.IdKredit AND t.IdBank = b.IdBank AND b.HP ="' + no + '"
AND k.IdKredit ="' + idkredit + '"';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount<>0) then
begin
if (nkredit='') then
nkredit:= qry.FieldByName('NamaKredit').AsString;
if (jnkredit='') then
jnkredit:=
qry.FieldByName('JenisKredit').AsString;
if (bkredit='') then
bkredit:= qry.FieldByName('BesarKredit').AsString;
if (jgkredit='') then
jgkredit:=
qry.FieldByName('JangkaWaktu').AsString;
if (bgkredit='') then
bgkredit:= qry.FieldByName('Bunga').AsString;

sSQL:= 'UPDATE tbkredit SET NamaKredit="' + nkredit


+ '", JenisKredit="' + UpperCase(jnkredit) + '",
BesarKredit="' + bkredit + '", JangkaWaktu="' + jgkredit +
'", Bunga="' + bgkredit + '" WHERE IdKredit="' + idkredit +
'"';
ExecQuery(sSQL,Opqry,True);
balas:= balas + 'Terimkasih. data dengan ID Kredit :
' + idkredit + ' Telah berhasil di Update';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,Opqry,true);
end
else
begin
balas:= balas + 'Maaf!! Data Anda dengan ID Kredit:
'+ idkredit + ' Tidak ditemukan!! Update Data Gagal. cek
IdKredit Anda ketik:IDK';

74
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else
begin
balas:= balas + 'Data kurang lengkap, Update Data
Gagal. ketik:
UPD#NmKredit#JnKredit#BsKredit#JkWaktu#Bunga#IdKredit, cth:
UPD###30000000##3%#1001';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else if (UpperCase(cmd)='INF') then
begin
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
balas:= balas + 'Untuk input kredit ketik:
ADD#NmKredit#BLN/MGU/HRI#BsrKredit#JkWaktu#Bunga, cth:
ADD#Jangka Panjang#BLN#20000000#3THN#2%';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
Sleep(2000);
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
balas:= '<UKM-GET> ';
balas:= balas + 'Update kredit ketik:
UPD#NmKredit#JnKredit#BsKredit#JkWaktu#Bunga#IdKredit, cth:
UPD#Jangka Panjang#BLN#30000000#4thn#3%#1001';
ls:= TStringList.Create;

75
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end
else if (UpperCase(cmd)='IDK') then
begin
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
sSQL:= 'SELECT k.IdKredit, k.JenisKredit, k.BesarKredit
FROM tbkredit k, tbtawaran t, tbbank b WHERE
k.IdKredit=t.IdKredit AND t.IdBank=b.IdBank AND b.HP="' + no
+ '" AND k.Status="AKTIF"';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin
balas:= balas +
qry.FieldByName('JenisKredit').AsString +',';
balas:= balas +
qry.FieldByName('BesarKredit').AsString +':';
balas:= balas +
qry.FieldByName('IdKredit').AsString;
balas:= balas + '# ';
Next;
end;
end;
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,Opqry,true);
end
else
begin
balas:= balas + 'Mohon Maaf!! Sampai sekarang Anda
belum menawarkan/memiliki IdKredit!!';
ls:= TStringList.Create;
ls.Add(no);

76
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;

end
else if (UpperCase(cmd)='REG') then
begin
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
sSQL:='SELECT NamaBank, ContactPerson FROM tbbank WHERE
HP="' + no + '"';
ExecQuery(sSQL,qry,False);
ceknamabank:= qry.FieldByName('NamaBank').AsString;
cekcpbank:= qry.FieldByName('ContactPerson').AsString;
if ((ceknamabank='') and (cekcpbank='')) then
begin
balas:= balas + 'Silahkan isi data Anda ketik:
BNK#NamaBank#ContactPerson, cth: BNK#MANDIRI#Dr.Subroto';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end
else
begin
balas:= balas + 'ID Anda telah terdaftar sebelumnya
dengan Nama Perusahaan: '+UpperCase(ceknamabank)+ ', untuk
info ketik: INF';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;

77
end
else if (UpperCase(cmd)='SRT') then
begin
j:= 0;
k:= 0;
idsyarat:= '';
syarat:= '';
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
for i:= 5 to Length(pesan) do
// untuk menangkap idkredit
begin
if pesan[i]<>'#' then
// SRT#2007113267#data_syarat2
begin
if j= 0 then
begin
idsyarat:= idsyarat + pesan[i];
k:= i+1;
end;
end
else
inc(j);
end;
k:= k+1;
sSQL:= 'SELECT k.IdKredit FROM tbkredit k, tbtawaran t,
tbbank b WHERE k.IdKredit=t.IdKredit AND t.IdBank=b.IdBank
AND b.HP="' + no + '" AND k.IdKredit="' + idsyarat + '"';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount<>0) then
begin
sSQL:= 'SELECT Syarat FROM tbkreditsyarat WHERE
IdKredit="' + idsyarat + '"';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount<>0) then
begin
sSQL:= 'DELETE FROM tbkreditsyarat WHERE IdKredit="'
+ idsyarat + '"';
ExecQuery(sSQL,qry,True);
end;
for i:= k to Length(pesan) do
// untuk menangkap syarat2 kredit
begin
if pesan[i]<>'#' then
// cth: SRT#2007113267#syarat_1#syarat_2#syarat_n
syarat:= syarat + pesan[i]
else
begin
sSQL:= 'INSERT INTO tbkreditsyarat
(IdKredit,Syarat) VALUES ("' + idsyarat + '","' + syarat +
'")';
ExecQuery(sSQL,Opqry,true);
syarat:= '';
end;
end;
sSQL:= 'INSERT INTO tbkreditsyarat (IdKredit,Syarat)
VALUES ("' + idsyarat + '","' + syarat + '")';

78
ExecQuery(sSQL,Opqry,true);
balas:= balas + 'Terimakasih atas kelengkapan data2
pendukung kredit perusahaan Anda.';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,Opqry,true);
end
else
begin
balas:= balas + 'Maaf!! ID Kredit: '+ idsyarat +'
tidak ditemukan dalam database server! Input data gagal..
untuk info IDKredit ketik: IDK';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else if (UpperCase(cmd)='KRD') then
begin
j:= 0;
// KRD#20071254#OPEN
idkredit:='';
ket:='';
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
for i:= 5 to Length(pesan) do
begin
if pesan[i]<>'#' then
begin
if j= 0 then
idkredit:= idkredit + pesan[i]
else if j= 1 then
ket:= ket + pesan[i];
end
else
inc(j);
end;
if (ket<>'') then
begin

79
sSQL:= 'SELECT k.IdKredit FROM tbkredit k, tbtawaran
t, tbbank b WHERE k.IdKredit = t.IdKredit AND t.IdBank =
b.IdBank AND b.HP ="' + no + '" AND k.IdKredit ="' +
idkredit + '"';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount<>0) then
begin
if ((UpperCase(ket)='TUTUP') or
(UpperCase(ket)='AKTIF')) then
begin
sSQL:= 'UPDATE tbkredit SET Status="' +
UpperCase(ket) + '" WHERE IdKredit="' + idkredit + '"';
ExecQuery(sSQL,Opqry,True);
balas:= balas + 'Terimkasih. Data kredit
perusahaan Anda dengan ID: ' + idkredit + ' sudah di ' +
UpperCase(ket) + ' kan';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,Opqry,true);
end
else if ((UpperCase(ket)='OPEN') or
(UpperCase(ket)='LOCK')) then
begin
sSQL:= 'UPDATE tbkredit SET ket="' +
UpperCase(ket) + '" WHERE IdKredit="' + idkredit + '"';
ExecQuery(sSQL,Opqry,True);
balas:= balas + 'Terimkasih.. Anda sudah melakukan
' + UpperCase(ket) + ' terhadap layanan permintaan informasi
kredit dari Server';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,Opqry,true);
end
else
begin
balas:= balas + 'maaf!! perintah ' +
UpperCase(ket) + ' tidak tersedia. perintah yang tersedia
hanya (TUTUP,AKTIF,OPEN,LOCK)??.';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

80
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,Opqry,true);
end;
end
else
begin
balas:= balas + 'Maaf!! Data Anda dengan ID Kredit:
'+ idkredit + ' Tidak ditemukan!! Permintaan ditolak. cek
IdKredit Anda ketik:IDK';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else
begin
balas:= balas + 'Data kurang lengkap,
ketik:KRD#IdKredit#Ket. cth:utk menutup kredit
ketik:KRD#271254#TUTUP, mengunci request dari server
ketik:KRD#271254#LOCK';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;
end
else
begin
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
balas:= balas + 'Maaf!! Perintah yang Anda Ketik tidak
dikenal.. untuk info ketik: INF';
ls:= TStringList.Create;

81
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,true);
end;

end;

end
else if (UpperCase(reg)='BELUM') then
// belum terdaftar sebagai anggota
begin
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now)) +
IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
cmd:= Copy(pesan,0,3);
if (UpperCase(cmd)='REG') then
begin
ja:= Copy(pesan,5,3);
if (UpperCase(ja)='BNK') then
begin
kreg:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now))
+ IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now));
sSQL:= 'SELECT IdBank FROM tbbank ORDER BY IdBank';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount<>0) then
begin
qry.Last;
idbtemp:= qry.FieldByName('IdBank').AsString;
idbakhir:= copy(idbtemp,4,4);
temp:= StrToInt(idbakhir);
temp:= temp + 1;
if (temp < 10) then
idbbaru:= Format(UpperCase(ja) +'000%d',
[temp]);
if (temp >= 10) then
idbbaru:= Format(UpperCase(ja) +'00%d',
[temp]);
if (temp >= 100) then
idbbaru:= Format(UpperCase(ja) +'0%d', [temp]);
if (temp >= 1000) then
idbbaru:= Format(UpperCase(ja) +'%d', [temp]);
sSQL:= 'INSERT INTO tbserversms
(NoReg,JenisAnggota,TglReg) VALUES ("' + kreg + '","BANK","'
+ FormatDateTime('yyyy-mm-dd', Now) + '")';
ExecQuery(sSQL,Opqry,True);
sSQL:= 'INSERT INTO tbbank
(IdBank,NoReg,NamaBank,ContactPerson,HP) VALUES ("' +
idbbaru + '","' + kreg + '","","","' + no + '")';
ExecQuery(sSQL,Opqry,True);

82
balas:= balas + 'Isi data Anda ketik:
BNK#NamaBank#ContactPerson, cth: BNK#MANDIRI#Dr.Subroto';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,Opqry,True);
end
else
begin
temp:= 1;
idbbaru:= Format(UpperCase(ja) +'000%d', [temp]);
sSQL:= 'INSERT INTO tbserversms
(NoReg,JenisAnggota,TglReg) VALUES ("' + kreg + '","BANK","'
+ FormatDateTime('yyyy-mm-dd', Now) + '")';
ExecQuery(sSQL,qry,True);
sSQL:= 'INSERT INTO tbbank
(IdBank,NoReg,NamaBank,ContactPerson,HP) VALUES ("' +
idbbaru + '","' + kreg + '","","","' + no + '")';
ExecQuery(sSQL,qry,True);
balas:= balas + 'Isi data Anda
ketik:BNK#NamaBank#ContactPerson,
cth:BNK#MANDIRI#Dr.Subroto';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end;
end
else if (UpperCase(ja)='UKM') then
begin
kreg:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now))
+ IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now));
sSQL:= 'SELECT IdUkm FROM tbukm ORDER BY IdUkm';
ExecQuery(sSQL,qry,False);
if (qry.RecordCount<>0) then
begin
qry.Last;
idutemp:= qry.FieldByName('IdUkm').AsString;
iduakhir:= copy(idutemp,4,4);
temp:= StrToInt(iduakhir);
temp:= temp + 1;
if (temp < 10) then

83
idubaru:= Format(UpperCase(ja) +'000%d',
[temp]);
if (temp >= 10) then
idubaru:= Format(UpperCase(ja) +'00%d',
[temp]);
if (temp >= 100) then
idubaru:= Format(UpperCase(ja) +'0%d', [temp]);
if (temp >= 1000) then
idubaru:= Format(UpperCase(ja) +'%d', [temp]);
sSQL:= 'INSERT INTO tbserversms
(NoReg,JenisAnggota,TglReg) VALUES ("' + kreg + '","UKM","'
+ FormatDateTime('yyyy-mm-dd', Now) + '")';
ExecQuery(sSQL,Opqry,True);
sSQL:= 'INSERT INTO tbukm
(IdUkm,NoReg,NamaUkm,Bidang,Keuntungan,Alamat,ContactPerson,
HP) VALUES ("' + idubaru + '","' + kreg +
'","","","","","","' + no + '")';
ExecQuery(sSQL,Opqry,True);
balas:= balas + 'Isi data Anda
ketik:UKM#Nmusaha#BdgUsaha#untung#Alamat#ContPerson,
cth:UKM#Jaya Abadi#Ternak Ayam#8000000#Jl. Keputih No.2
Surabaya#Ir.Suparno';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,Opqry,True);
end
else
begin
temp:= 1;
idubaru:= Format(UpperCase(ja) +'000%d', [temp]);
sSQL:= 'INSERT INTO tbserversms
(NoReg,JenisAnggota,TglReg) VALUES ("' + kreg + '","UKM","'
+ FormatDateTime('yyyy-mm-dd', Now) + '")';
ExecQuery(sSQL,qry,True);
sSQL:= 'INSERT INTO tbukm
(IdUkm,NoReg,NamaUkm,Bidang,Keuntungan,Alamat,ContactPerson,
HP) VALUES ("' + idubaru + '","' + kreg +
'","","","","","","' + no + '")';
ExecQuery(sSQL,qry,True);
balas:= balas + 'Isi data Anda
ketik:UKM#Nmusaha#BdgUsaha#untung#Alamat#ContPerson,
cth:UKM#Jaya Abadi#Ternak Ayam#8000000#Jl. Keputih No.2
Surabaya#Ir.Suparno';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;

84
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end;
end
else
// Perintah Tidak Dikenal SELAIN UKM & BNK
begin
balas:= balas + 'Untuk dapat menggunakan layanan ini,
Silahkan Daftar identitas usaha Anda terlebih dahulu!. Untuk
Daftar ketik: REG UKM';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end;
end
else // Perintah tidak dikenal SELAIN REG
begin
balas:= balas + 'ID Anda belum terdaftar. Untuk dapat
menggunakan layanan ini, Silahkan Daftar identitas usaha
Anda terlebih dahulu!. Untuk Daftar ketik: REG UKM';
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
end;
end;
qry.Free;
Opqry.Free;
end;

//==============================================================
procedure ExecQuery(perintah: string; qry: TZQuery; tipe:
Boolean);
{ @Deskripsi : Fungsi untuk proses query database
-------------------------------------------------------------}
begin
with qry do
begin

85
qry.Close;
qry.SQL.Clear;
qry.SQL.Add(perintah);
if tipe = True then
qry.ExecSQL
else
qry.Open;
end;
end;

//==============================================================
function CekRegistrasi(no_hp : String) : string;
{ @Deskripsi : Fungsi untuk pengecekan registrasi anggota
-------------------------------------------------------------}
var
sQry : String;
qry: TZQuery;
begin
qry:= TZQuery.Create(Form1);
qry.Connection:= Form1.ZConnection1;
qry.RequestLive:= True;
sQry:= 'SELECT IdUkm FROM tbukm WHERE HP ="' + no_hp + '"';
ExecQuery(sQry, qry, false);
if qry.RecordCount <> 0 then
result:= 'ukm'
else
begin
sQry := 'SELECT IdBank FROM tbbank WHERE HP ="' + no_hp +
'"';
ExecQuery(sQry, qry, false);
if qry.RecordCount <> 0 then
result:= 'bank'
else
result:= 'belum';
end;
qry.Free;
end;
end.

UNIT UnPendingMessage.pas

unit UnPendingMessage;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics,


Controls, Forms,
Dialogs, Gammu, Buttons, ExtCtrls, Gauges, StdCtrls, ComCtrls,
ImgList,
Menus, ShellAPI, Grids, DBGrids, ZConnection, DB,
ZAbstractRODataset,
ZAbstractDataset, ZDataset, DateUtils, StrUtils;

86
function PesanPending(pkode: String; no: String; pesan:
String):string;

implementation

uses dm, modulGlobal, Untama;

//==============================================================
function PesanPending(pkode: String; no: String; pesan: String):
string;
{ @Deskripsi : Fungsi untuk mengolah/ memproses pesan pending
dari server sms
-------------------------------------------------------------}
var cmd: AnsiString;
balas, sSQL: String;
jk, bk, dj: String;
reqidukm, reqidkredit: String;
qry, Ppqry: TZQuery;
kode : string;
ls: TStringList;
begin
qry:= TZQuery.Create(Form1);
qry.Connection:= Form1.ZConnection1;
qry.RequestLive:= True;
Ppqry:= TZQuery.Create(Form1);
Ppqry.Connection:= Form1.ZConnection1;
Ppqry.RequestLive:= True;
reqidukm:='';
reqidkredit:='';
balas:= '<UKM-GET> ';
cmd:= Copy(pesan,0,3);
if (UpperCase(cmd)='KRD') then
begin
jk:= Copy(pesan,5,3);
if (UpperCase(jk)='HRI') then
begin
dj:= Copy(pesan,9,2);
if (UpperCase(dj)='DA') then
begin
bk:= Copy(pesan,12,Length(pesan)-11);
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now))
+ IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
sSQL:= 'SELECT IdUkm FROM tbukm WHERE HP="' + no +
'"';
ExecQuery(sSQL,qry,False);
reqidukm:= qry.FieldByName('IdUkm').AsString;
sSQL:= 'SELECT b.NamaBank, k.IdKredit, k.NamaKredit,
k.BesarKredit, k.JangkaWaktu, k.Bunga, k.Status,
b.ContactPerson, b.HP FROM tbbank b, tbkredit k, tbtawaran t
WHERE k.IdKredit = t.IdKredit AND t.IdBank = b.IdBank AND
k.JenisKredit ="' + UpperCase(jk) + '" AND k.Status ="AKTIF"
AND k.BesarKredit > "' + bk + '"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do

87
begin
First;
while not qry.Eof do
begin
if ((Length(balas)>85) and
(Length(balas)<170)) then
begin
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
balas:='<UKM-GET> ';
end;
reqidkredit:=
qry.FieldByName('IdKredit').AsString;
balas:= balas +
qry.fieldByName('NamaBank').AsString +',';
balas:= balas +
qry.fieldByName('NamaKredit').AsString +',';
balas:= balas +
qry.fieldByName('BesarKredit').AsString + ',';
balas:= balas +
qry.fieldByName('JangkaWaktu').AsString +',';
balas:= balas +
qry.fieldByName('Bunga').AsString +',';
balas:= balas +
qry.FieldByName('ContactPerson').AsString +',';
balas:= balas +
qry.FieldByName('HP').AsString;
balas:= balas +'#';
sSQL:= 'SELECT IdKredit FROM tbrequest r,
tbukm u WHERE r.IdUkm = u.IdUkm AND u.HP ="' + no + '" AND
r.IdKredit ="' + reqidkredit + '"';
ExecQuery(sSQL,Ppqry,False);
if (Ppqry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbrequest
(IdUkm,IdKredit,Tanggal,Jam) VALUES ("' + reqidukm + '","' +
reqidkredit + '","' + FormatDateTime('yyyy-mm-dd', Now) +
'","' + FormatDateTime('hh:nn:ss', Now) + '")';
ExecQuery(sSQL,Ppqry,True);
end;
Next;
end;
end;
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;

88
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
sSQL:= 'UPDATE tbsmspending SET status="Received"
WHERE kode="' + pkode + '"';
ExecQuery(sSQL,qry,True);
end
else
balas:='Pending';
end
else if (UpperCase(dj)='DB') then
begin
bk:= Copy(pesan,12,Length(pesan)-11);
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now))
+ IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
sSQL:= 'SELECT IdUkm FROM tbukm WHERE HP="' + no +
'"';
ExecQuery(sSQL,qry,False);
reqidukm:= qry.FieldByName('IdUkm').AsString;
sSQL:= 'SELECT b.NamaBank, k.IdKredit, k.NamaKredit,
k.BesarKredit, k.JangkaWaktu, k.Bunga, k.Status,
b.ContactPerson, b.HP FROM tbbank b, tbkredit k, tbtawaran t
WHERE k.IdKredit = t.IdKredit AND t.IdBank = b.IdBank AND
k.JenisKredit ="' + UpperCase(jk) + '" AND k.Status ="AKTIF"
AND k.BesarKredit < "' + bk + '"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin
if ((Length(balas)>85) and
(Length(balas)<170)) then
begin
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
balas:='<UKM-GET> ';
end;
reqidkredit:=
qry.FieldByName('IdKredit').AsString;
balas:= balas +
qry.fieldByName('NamaBank').AsString +',';

89
balas:= balas +
qry.fieldByName('NamaKredit').AsString +',';
balas:= balas +
qry.fieldByName('BesarKredit').AsString + ',';
balas:= balas +
qry.fieldByName('JangkaWaktu').AsString +',';
balas:= balas +
qry.fieldByName('Bunga').AsString +',';
balas:= balas +
qry.FieldByName('ContactPerson').AsString +',';
balas:= balas +
qry.FieldByName('HP').AsString;
balas:= balas +'#';
sSQL:= 'SELECT IdKredit FROM tbrequest r,
tbukm u WHERE r.IdUkm = u.IdUkm AND u.HP ="' + no + '" AND
r.IdKredit ="' + reqidkredit + '"';
ExecQuery(sSQL,Ppqry,False);
if (Ppqry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbrequest
(IdUkm,IdKredit,Tanggal,Jam) VALUES ("' + reqidukm + '","' +
reqidkredit + '","' + FormatDateTime('yyyy-mm-dd', Now) +
'","' + FormatDateTime('hh:nn:ss', Now) + '")';
ExecQuery(sSQL,Ppqry,True);
end;
Next;
end;
end;
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
sSQL:= 'UPDATE tbsmspending SET status="Received"
WHERE kode="' + pkode + '"';
ExecQuery(sSQL,qry,True);
end
else
balas:='Pending';
end;
end
else if (UpperCase(jk)='MGU') then
begin
dj:= Copy(pesan,9,2);
if (UpperCase(dj)='DA') then
begin
bk:= Copy(pesan,12,Length(pesan)-11);
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now))
+ IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));

90
sSQL:= 'SELECT IdUkm FROM tbukm WHERE HP="' + no +
'"';
ExecQuery(sSQL,qry,False);
reqidukm:= qry.FieldByName('IdUkm').AsString;
sSQL:= 'SELECT b.NamaBank, k.IdKredit, k.NamaKredit,
k.BesarKredit, k.JangkaWaktu, k.Bunga, k.Status,
b.ContactPerson, b.HP FROM tbbank b, tbkredit k, tbtawaran t
WHERE k.IdKredit = t.IdKredit AND t.IdBank = b.IdBank AND
k.JenisKredit ="' + UpperCase(jk) + '" AND k.Status ="AKTIF"
AND k.BesarKredit > "' + bk + '"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin
if ((Length(balas)>85) and
(Length(balas)<170)) then
begin
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
balas:='<UKM-GET> ';
end;
reqidkredit:=
qry.FieldByName('IdKredit').AsString;
balas:= balas +
qry.fieldByName('NamaBank').AsString +',';
balas:= balas +
qry.fieldByName('NamaKredit').AsString +',';
balas:= balas +
qry.fieldByName('BesarKredit').AsString + ',';
balas:= balas +
qry.fieldByName('JangkaWaktu').AsString +',';
balas:= balas +
qry.fieldByName('Bunga').AsString +',';
balas:= balas +
qry.FieldByName('ContactPerson').AsString +',';
balas:= balas +
qry.FieldByName('HP').AsString;
balas:= balas +'#';
sSQL:= 'SELECT IdKredit FROM tbrequest r,
tbukm u WHERE r.IdUkm = u.IdUkm AND u.HP="' + no + '" AND
r.IdKredit="' + reqidkredit + '"';
ExecQuery(sSQL,Ppqry,False);
if (Ppqry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbrequest
(IdUkm,IdKredit,Tanggal,Jam) VALUES ("' + reqidukm+ '","' +

91
reqidkredit + '","' + FormatDateTime('yyyy-mm-dd', Now) +
'","' + FormatDateTime('hh:nn:ss', Now) + '")';
ExecQuery(sSQL,Ppqry,True);
end;
Next;
end;
end;
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
sSQL:= 'UPDATE tbsmspending SET status="Received"
WHERE kode="' + pkode + '"';
ExecQuery(sSQL,qry,True);
end
else
balas:='Pending';
end
else if (UpperCase(dj)='DB') then
begin
bk:= Copy(pesan,12,Length(pesan)-11);
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now))
+ IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
sSQL:= 'SELECT IdUkm FROM tbukm WHERE HP="' + no +
'"';
ExecQuery(sSQL,qry,False);
reqidukm:= qry.FieldByName('IdUkm').AsString;
sSQL:= 'SELECT b.NamaBank, k.IdKredit, k.NamaKredit,
k.BesarKredit, k.JangkaWaktu, k.Bunga, k.Status,
b.ContactPerson, b.HP FROM tbbank b, tbkredit k, tbtawaran t
WHERE k.IdKredit = t.IdKredit AND t.IdBank = b.IdBank AND
k.JenisKredit ="' + UpperCase(jk) + '" AND k.Status ="AKTIF"
AND k.BesarKredit < "' + bk + '"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin
if ((Length(balas)>85) and
(Length(balas)<170)) then
begin
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

92
ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
balas:='<UKM-GET> ';
end;
reqidkredit:=
qry.FieldByName('IdKredit').AsString;
balas:= balas +
qry.fieldByName('NamaBank').AsString +',';
balas:= balas +
qry.fieldByName('NamaKredit').AsString +',';
balas:= balas +
qry.fieldByName('BesarKredit').AsString + ',';
balas:= balas +
qry.fieldByName('JangkaWaktu').AsString +',';
balas:= balas +
qry.fieldByName('Bunga').AsString +',';
balas:= balas +
qry.FieldByName('ContactPerson').AsString +',';
balas:= balas +
qry.FieldByName('HP').AsString;
balas:= balas +'#';
sSQL:= 'SELECT IdKredit FROM tbrequest r,
tbukm u WHERE r.IdUkm = u.IdUkm AND u.HP ="' + no + '" AND
r.IdKredit ="' + reqidkredit + '"';
ExecQuery(sSQL,Ppqry,False);
if (Ppqry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbrequest
(IdUkm,IdKredit,Tanggal,Jam) VALUES ("' + reqidukm + '","' +
reqidkredit + '","' + FormatDateTime('yyyy-mm-dd', Now) +
'","' + FormatDateTime('hh:nn:ss', Now) + '")';
ExecQuery(sSQL,Ppqry,True);
end;
Next;
end;
end;
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
sSQL:= 'UPDATE tbsmspending SET status="Received"
WHERE kode="' + pkode + '"';
ExecQuery(sSQL,qry,True);
end
else

93
balas:='Pending';
end;
end
else if (UpperCase(jk)='BLN') then
begin
dj:= Copy(pesan,9,2);
if (UpperCase(dj)='DA') then
begin
bk:= Copy(pesan,12,Length(pesan)-11);
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now))
+ IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
sSQL:= 'SELECT IdUkm FROM tbukm WHERE HP="' + no +
'"';
ExecQuery(sSQL,qry,False);
reqidukm:= qry.FieldByName('IdUkm').AsString;
sSQL:= 'SELECT b.NamaBank, k.IdKredit, k.NamaKredit,
k.BesarKredit, k.JangkaWaktu, k.Bunga, k.Status,
b.ContactPerson, b.HP FROM tbbank b, tbkredit k, tbtawaran t
WHERE k.IdKredit = t.IdKredit AND t.IdBank = b.IdBank AND
k.JenisKredit ="' + UpperCase(jk) + '" AND k.Status ="AKTIF"
AND k.BesarKredit > "' + bk + '"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin
with qry do
begin
First;
while not qry.Eof do
begin
if ((Length(balas)>85) and
(Length(balas)<170)) then
begin
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
balas:='<UKM-GET> ';
end;
reqidkredit:=
qry.FieldByName('IdKredit').AsString;
balas:= balas +
qry.fieldByName('NamaBank').AsString +',';
balas:= balas +
qry.fieldByName('NamaKredit').AsString +',';
balas:= balas +
qry.fieldByName('BesarKredit').AsString + ',';
balas:= balas +
qry.fieldByName('JangkaWaktu').AsString +',';
balas:= balas +
qry.fieldByName('Bunga').AsString +',';

94
balas:= balas +
qry.FieldByName('ContactPerson').AsString +',';
balas:= balas +
qry.FieldByName('HP').AsString;
balas:= balas +'#';
sSQL:= 'SELECT IdKredit FROM tbrequest r,
tbukm u WHERE r.IdUkm = u.IdUkm AND u.HP ="' + no + '" AND
r.IdKredit ="' + reqidkredit + '"';
ExecQuery(sSQL,Ppqry,False);
if (Ppqry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbrequest
(IdUkm,IdKredit,Tanggal,Jam) VALUES ("' + reqidukm + '","' +
reqidkredit + '","' + FormatDateTime('yyyy-mm-dd', Now) +
'","' + FormatDateTime('hh:nn:ss', Now) + '")';
ExecQuery(sSQL,Ppqry,True);
end;
Next;
end;
end;
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
sSQL:= 'UPDATE tbsmspending SET status="Received"
WHERE kode="' + pkode + '"';
ExecQuery(sSQL,qry,True);
end
else
balas:='Pending';
end
else if (UpperCase(dj)='DB') then
begin
bk:= Copy(pesan,12,Length(pesan)-11);
kode:= IntToStr(YearOf(Now)) + IntToStr(MonthOf(Now))
+ IntToStr(DayOf(Now)) + IntToStr(HourOf(Now)) +
IntToStr(MinuteOf(Now)) + IntToStr(SecondOf(Now)) +
IntToStr(MilliSecondOf(Now));
sSQL:= 'SELECT IdUkm FROM tbukm WHERE HP="' + no +
'"';
ExecQuery(sSQL,qry,False);
reqidukm:= qry.FieldByName('IdUkm').AsString;
sSQL:= 'SELECT b.NamaBank, k.IdKredit, k.NamaKredit,
k.BesarKredit, k.JangkaWaktu, k.Bunga, k.Status,
b.ContactPerson, b.HP FROM tbbank b, tbkredit k, tbtawaran t
WHERE k.IdKredit = t.IdKredit AND t.IdBank = b.IdBank AND
k.JenisKredit ="' + UpperCase(jk) + '" AND k.Status ="AKTIF"
AND k.BesarKredit < "' + bk + '"';
ExecQuery(sSQL,qry,false);
if (qry.RecordCount<>0) then
begin

95
with qry do
begin
First;
while not qry.Eof do
begin
if ((Length(balas)>85) and
(Length(balas)<170)) then
begin
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);

ls.SaveToFile(ExtractFilePath(Application.ExeName) +
'\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;
kode:= IntToStr(YearOf(Now)) +
IntToStr(MonthOf(Now)) + IntToStr(DayOf(Now)) +
IntToStr(HourOf(Now)) + IntToStr(MinuteOf(Now)) +
IntToStr(SecondOf(Now)) + IntToStr(MilliSecondOf(Now));
balas:='<UKM-GET> ';
end;
reqidkredit:=
qry.FieldByName('IdKredit').AsString;
balas:= balas +
qry.fieldByName('NamaBank').AsString +',';
balas:= balas +
qry.fieldByName('NamaKredit').AsString +',';
balas:= balas +
qry.fieldByName('BesarKredit').AsString + ',';
balas:= balas +
qry.fieldByName('JangkaWaktu').AsString +',';
balas:= balas +
qry.fieldByName('Bunga').AsString +',';
balas:= balas +
qry.FieldByName('ContactPerson').AsString +',';
balas:= balas +
qry.FieldByName('HP').AsString;
balas:= balas +'#';
sSQL:= 'SELECT IdKredit FROM tbrequest r,
tbukm u WHERE r.IdUkm = u.IdUkm AND u.HP ="' + no + '" AND
r.IdKredit ="' + reqidkredit + '"';
ExecQuery(sSQL,Ppqry,False);
if (Ppqry.RecordCount=0) then
begin
sSQL:= 'INSERT INTO tbrequest
(IdUkm,IdKredit,Tanggal,Jam) VALUES ("' + reqidukm + '","' +
reqidkredit + '","' + FormatDateTime('yyyy-mm-dd', Now) +
'","' + FormatDateTime('hh:nn:ss', Now) + '")';
ExecQuery(sSQL,Ppqry,True);
end;
Next;
end;
end;
ls:= TStringList.Create;
ls.Add(no);
ls.Add(balas);
ls.SaveToFile(ExtractFilePath(Application.ExeName)
+ '\sms\outbox\outbox' + kode + '.txt');
ls.Destroy;

96
sSQL:= 'INSERT INTO tbsmskeluar
(kode,tanggal,jam,nohp,pesan) VALUES ("' + kode + '","' +
FormatDateTime('yyyy-mm-dd', Now) + '","' +
FormatDateTime('hh:nn:ss', Now) + '","' + no + '","' + balas
+ '")';
ExecQuery(sSQL,qry,True);
sSQL:= 'UPDATE tbsmspending SET status="Received"
WHERE kode="' + pkode + '"';
ExecQuery(sSQL,qry,True);
end
else
balas:='Pending';
end;
end;
end;
qry.Free;
Ppqry.Free;
end;

end.

UNIT modulSMS.pas

unit modulSMS;

interface

uses
ComCtrls, Forms, ShellAPI, IniFiles, DateUtils, SysUtils,
Gammu, modulGlobal,
dm, UnPendingMessage, Untama, Dialogs, Classes;
type
TGSMModem = class(TGammuGSMDevice)
fCFGReceive : Boolean;
fCFGSend : Boolean;
fCFGPort : String;
fCFGConnection : String;
fCFGPIN : String;
fCFGReceiveLog : Boolean;
fCFGReceiveLogFile : String;
fCFGSendLog : Boolean;
fCFGSendLogFile : String;
fCFGGammuLog : Boolean;
fCFGGammuLogFormat : String;
fCFGGammuLogFile : String;
fPINWarning : Boolean;
public
property CFGReceive : Boolean read fCFGReceive write
fCFGReceive;
property CFGSend : Boolean read fCFGSend write
fCFGSend;
property CFGPort : String read fCFGPort write
fCFGPort;

97
property CFGConnection : String read fCFGConnection
write fCFGConnection;
property CFGPIN : String read fCFGPIN write
fCFGPIN;
property CFGReceiveLog : Boolean read fCFGReceiveLog
write fCFGReceiveLog;
property CFGReceiveLogFile : String read fCFGReceiveLogFile
write fCFGReceiveLogFile;
property CFGSendLog : Boolean read fCFGSendLog write
fCFGSendLog;
property CFGSendLogFile : String read fCFGSendLogFile
write fCFGSendLogFile;
property CFGGammuLogFile : String read fCFGGammuLogFile
write fCFGGammuLogFile;
property CFGGammuLogFormat : String read fCFGGammuLogFormat
write fCFGGammuLogFormat;
property CFGGammuLog : Boolean read fCFGGammuLog write
fCFGGammuLog;
property PINWarning : Boolean read fPINWarning write
fPINWarning;
end;

var
GatewayIniFile : TIniFile;
GSMDevice : array[1..MODEMNUM] of TGSMModem;
ReceivedNum : integer;
SentOKNum : integer;
SentWrongNum : integer;
SMSPrice : extended;

procedure
ChangeSecurityState(x:integer;ID:integer;SecurityState:GSM_S
ecurityCodeType);stdcall;
procedure
ChangePhoneState(x:integer;ID:integer;Connected:WordBool);st
dcall;
procedure HandleIncomingSMS(x:integer;ID:integer);stdcall;
procedure
RestartAllConnections(PhoneCallBack:PPhoneCallBackProcClass;
SecurityCallBack:PSecurityCallBackProcClass;SMSCallBack:PSMS
CallBackProcClass);
function SearchPBKEntry(s:string):string;
function FindPrice(number:string):Extended;
function ExecuteFile(const FileName, Params, DefaultDir:
string; ShowCmd: Integer): THandle;
function IntToStr2(I: Longint;digits:integer): string;
procedure AddTextToGatewayLog(num:integer;s:string);
procedure ShowStatistics();

implementation

//==============================================================
function IntToStr2(I: Longint;digits:integer): string;
{ @Deskripsi : Fungsi untuk
@Parameter : -
@Hasil : -
-------------------------------------------------------------}
var

98
S: string[11];
j:integer;
begin
Str(I:digits, S);
for j:=1 to 11 do
begin
if s[j]<>' ' then break;
s[j]:='0';
end;
Result:= S;
end;

//==============================================================
function FindPrice(number:string):Extended;
{ @Deskripsi : Fungsi untuk
@Parameter : -
@Hasil : -
-------------------------------------------------------------}
var i:integer;
P:Extended;
begin
if not TryStrToFloat(GatewayINIFile.ReadString('general',
'SMSCostLain',''),P) then P:=0;
FindPrice:=P;
i:=1;
while true do
begin
if GatewayINIFile.ReadString('general',
'SpesialSMSNumber'+inttostr(i),'') = '' then break;
if GatewayINIFile.ReadString('general',
'SpesialSMSCost'+inttostr(i),'') = '' then break;
if
strpos(PChar(number),PChar(GatewayINIFile.ReadString('genera
l', 'SpesialSMSNumber'+inttostr(i),''))) = number then
begin
if not TryStrToFloat(GatewayINIFile.ReadString('general',
'SpesialSMSCost'+inttostr(i),''),P) then P:=0;
FindPrice:=P;
break;
end;
i:=i+1;
end;
end;

//==============================================================
procedure ShowStatistics();
{ @Deskripsi : Fungsi untuk
@Parameter : -
@Hasil : -
-------------------------------------------------------------}
var
i,Receiving,Sending:integer;
begin
Form1.gbInbox.Caption:='Pesan masuk ('+inttostr(ReceivedNum)+'
diterima';
Form1.gbOutbox.Caption:=
'Pesan keluar ('+inttostr(SentOKNum)+' dikirim dengan
harga '+
FloatToStr(SMSPrice)+' '+

99
GatewayINIFile.ReadString('general', 'SMSCurrency','')+',
'+inttostr(SentWrongNum)+' salah kirim';
Receiving:=0;
Sending:=0;
for i:=1 to MODEMNUM do
begin
if GatewayINIFile.ReadBool('modem'+inttostr(i), 'Terima',
false) then Receiving:=Receiving+1;
if GatewayINIFile.ReadBool('modem'+inttostr(i), 'Kirim',
false) then Sending:=Sending+1;
end;
if Receiving = 0 then
begin
Form1.gbInbox.Caption:=Form1.gbInbox.Caption+', penerimaan
disable';
end else
begin
Form1.gbInbox.Caption:=Form1.gbInbox.Caption+',
'+inttostr(Receiving)+' alat buat nerima';
end;
if Sending = 0 then
begin
Form1.gbOutbox.Caption:=Form1.gbOutbox.Caption+', pengiriman
disable';
end else
begin
Form1.gbOutbox.Caption:=Form1.gbOutbox.Caption+',
'+inttostr(Sending)+' alat buat ngirim';
end;
Form1.gbInbox.Caption:=Form1.gbInbox.Caption+')';
Form1.gbOutbox.Caption:=Form1.gbOutbox.Caption+')';
end;

//==============================================================
function SearchPBKEntry(s:string):string;
{ @Deskripsi : Fungsi untuk
@Parameter : -
@Hasil : -
-------------------------------------------------------------}
var
FoundNumber : boolean;
z : integer;
begin
FoundNumber:=false;
z:=1;
while true do
begin
if GatewayINIFile.ReadString('general',
'PhonebookNumber'+inttostr(z),'') = '' then break;
if GatewayINIFile.ReadString('general',
'PhonebookName'+inttostr(z),'') = '' then break;
if GatewayINIFile.ReadString('general',
'PhonebookNumber'+inttostr(z),'') = S then
begin
SearchPBKEntry:=GatewayINIFile.ReadString('general',
'PhonebookName'+inttostr(z),'');
FoundNumber:=true;
break;
end;

100
z:=z+1;
end;
if not FoundNumber then SearchPBKEntry:=S;
end;

//==============================================================
procedure AddTextToGatewayLog(num:integer;s:string);
{ @Deskripsi : Fungsi untuk
@Parameter : -
@Hasil : -
-------------------------------------------------------------}
var
CurrentDate,CurrentTime : TDateTime;
F : TextFile;
begin
if (GatewayIniFile.ReadBool('general', 'PakeGatewayLog', True)
= True) and
(GatewayIniFile.ReadString('general', 'UKMSMSGatewayLog',
ExtractFilePath(Application.ExeName)+'ukmsmsgateway.log')<>'
') then
begin
Form1.gbLog.Visible:=true;

CurrentDate:=Date;
CurrentTime:=Time;

//tambahkan info ke layar utama tab informasi


with Form1.lvLog do
begin
SortType:=stNone;
if Items.Count>500 then Items.Delete(0);
Items.Add;
if num <> -1 then
begin
Items.Item[Items.Count-
1].Caption:=GatewayINIFile.ReadString('modem'+inttostr(num),
'Port', 'com1:');
end else
Items.Item[Items.Count-1].Caption:='';
begin
end;
Items.Item[Items.Count-
1].SubItems.Add(inttostr2(DayOf(CurrentDate),2)+'-
'+inttostr2(MonthOf(CurrentDate),2)+'-
'+inttostr2(YearOf(CurrentDate),4)+'
'+inttostr2(HourOf(CurrentTime),2)+':'+inttostr2(MinuteOf(Cu
rrentTime),2)+':'+inttostr2(SecondOf(CurrentTime),2));
Items.Item[Items.Count-1].SubItems.Add(S);
SortType:=stBoth;
end;

//tambahkan ke file ukmsmsgateway.log


{$I-}
AssignFile(F, GatewayIniFile.ReadString('general',
'UKMSMSGatewayLog', ''));
Append(F);
if (IoResult <> 0) then Rewrite(F);
if (IoResult <> 0) then
begin

101
GatewayIniFile.WriteString('general',
'UKMSMSGatewayLog',
ExtractFilePath(Application.ExeName)+'ukmsmsgateway.log');
AssignFile(F, GatewayIniFile.ReadString('general',
'UKMSMSGatewayLog', ''));
Rewrite(F);
end;
{$I+}

if (IoResult <> 0) then


begin
//tambahkan ke layar utama
with Form1.lvLog do
begin
SortType:=stNone;
if Items.Count>500 then Items.Delete(0);
Items.Add;
Items.Item[Items.Count-1].Caption:='';
Items.Item[Items.Count-
1].SubItems.Add(inttostr2(DayOf(CurrentDate),2)+'-
'+inttostr2(MonthOf(CurrentDate),2)+'-
'+inttostr2(YearOf(CurrentDate),4)+'
'+inttostr2(HourOf(CurrentTime),2)+':'+inttostr2(MinuteOf(Cu
rrentTime),2)+':'+inttostr2(SecondOf(CurrentTime),2));
Items.Item[Items.Count-1].SubItems.Add('TIDAK BISA
MENULIS KE LOG FILE UTAMA');
SortType:=stBoth;
end;
end else
begin
Write(F,inttostr2(DayOf(CurrentDate),2)+'-
'+inttostr2(MonthOf(CurrentDate),2)+'-
'+inttostr2(YearOf(CurrentDate),4));

Write(F,';'+inttostr2(HourOf(CurrentTime),2)+':'+inttostr2(M
inuteOf(CurrentTime),2)+':'+inttostr2(SecondOf(CurrentTime),
2));
if num <> -1 then
begin

Write(F,';'+GatewayINIFile.ReadString('modem'+inttostr(num),
'Port', 'com1:'));
end else
begin
Write(F,';');
end;
WriteLn(F,';'+PChar(S));
Flush(F);
CloseFile(F);
end;
end else
begin
Form1.gbLog.Visible:=false;
end;
end;

102
//==============================================================
function FindGammuDevice(ID:integer):integer;
{ @Deskripsi : Fungsi untuk
@Parameter : -
@Hasil : -
-------------------------------------------------------------}
var i : integer;
begin
FindGammuDevice:=-1;
for i:=1 to MODEMNUM do
begin
if (GSMDevice[i].Used) and (GSMDevice[i].DeviceID=ID) then
begin
FindGammuDevice:=i;
break;
end;
end;
end;

//==============================================================
procedure
RestartAllConnections(PhoneCallBack:PPhoneCallBackProcClass;
SecurityCallBack:PSecurityCallBackProcClass;SMSCallBack:PSMS
CallBackProcClass);
{ @Deskripsi : Fungsi untuk merestart koneksi dengan ponsel
@Parameter : -
@Hasil : -
-------------------------------------------------------------}
var
i : integer;
F : TextFile;
begin
for i:=1 to MODEMNUM do
begin
with GSMDevice[i] do
begin
if Used then
begin
AddTextToGatewayLog(i,'Mengakhiri koneksi');
EndConnection;
Form1.sbStatus.Panels.Items[i-1].Text:='';
Used:=False;
Connected:=False;
end;
if (GatewayIniFile.ReadBool('modem'+inttostr(i), 'Kirim',
false) = True) or
(GatewayIniFile.ReadBool('modem'+inttostr(i), 'Terima',
false) = True)
then
begin
Used:=True;
AddTextToGatewayLog(i,'Memulai Koneksi');
if GatewayIniFile.ReadBool('modem'+inttostr(i),
'PakeGammuLogUKMSMS',false) then
begin
{$I-}
AssignFile(F,
GatewayIniFile.ReadString('modem'+inttostr(i),
'GammuLogUKMSMS',

103
ExtractFilePath(Application.ExeName)+'ukmsmsgammu'+inttostr(
i)+'.log'));
Append(F);
if IOResult <> 0 then Rewrite(F);
if IOResult <> 0 then
begin
AddTextToGatewayLog(i,'Resetting komunikasi file log
device ke standar');
GatewayIniFile.WriteString('modem'+inttostr(i),
'GammuLogUKMSMS',
ExtractFilePath(Application.ExeName)+'ukmsmsgammu'+inttostr(
i)+'.log');
AssignFile(F,
GatewayIniFile.ReadString('modem'+inttostr(i),
'GammuLogUKMSMS',
ExtractFilePath(Application.ExeName)+'ukmsmsgammu'+inttostr(
i)+'.log'));
Append(F);
if IOResult <> 0 then Rewrite(F);
end;
{$I+}
if IoResult <> 0 then
begin
AddTextToGatewayLog(i,'TIDAK BISA MENULIS KE LOG
FILE KOMUNIKASI BUAT ALAT');

StartConnection(GatewayIniFile.ReadString('modem'+inttostr(i
), 'Port',
'com1:'),GatewayIniFile.ReadString('modem'+inttostr(i),
'Koneksi',
'fbus'),PhoneCallBack,SecurityCallBack,SMSCallBack,'','');
end else
begin
CloseFile(F);

StartConnection(GatewayIniFile.ReadString('modem'+inttostr(i
), 'Port',
'com1:'),GatewayIniFile.ReadString('modem'+inttostr(i),
'Koneksi',
'fbus'),PhoneCallBack,SecurityCallBack,SMSCallBack,GatewayIn
iFile.ReadString('modem'+inttostr(i), 'GammuLogUKMSMS',
ExtractFilePath(Application.ExeName)+'ukmsmsgammu'+inttostr(
i)+'.log'),GatewayIniFile.ReadString('modem'+inttostr(i),
'GammuLogUKMSMSLevel', ''));
end;
end else
begin

StartConnection(GatewayIniFile.ReadString('modem'+inttostr(i
), 'Port',
'com1:'),GatewayIniFile.ReadString('modem'+inttostr(i),
'Koneksi',
'fbus'),PhoneCallBack,SecurityCallBack,SMSCallBack,'','');
end;
end;
end;
end;
ShowStatistics()
end;

104
//==============================================================
//called, when phone is connected or disconnected
procedure
ChangePhoneState(x:integer;ID:integer;Connected:WordBool);st
dcall;
{ @Deskripsi : Fungsi untuk
-------------------------------------------------------------}
var
num,i : integer;
error : GSM_Error;
buffer : array[1..100] of char;
begin
num:=FindGammuDevice(ID);
GSMDevice[num].Connected:=Connected;

//enables alat disables semua menu


for i:=1 to MODEMNUM do
begin
if (GSMDevice[i].Used) and (GSMDevice[i].Connected) then
Form1.InfoAlat;
end;

if Connected then
begin
GSMDevice[num].PINWarning:=False;

error:=GSM_GetManufacturer(ID,@buffer);
if (error = ERR_NONE) then
begin
Form1.sbStatus.Panels.Items[num-1].Text:=PChar(@buffer);
error:=GSM_GetModelName(ID,@buffer);
if (error = ERR_NONE) then
begin
Form1.sbStatus.Panels.Items[num-
1].Text:=Form1.sbStatus.Panels.Items[num-1].Text+' '+buffer;
end;
end;
if error <> ERR_NONE then
begin
Form1.sbStatus.Panels.Items[num-1].Text:='Terhubung';
AddTextToGatewayLog(num,'Alat terhubung');
end else
begin
error:=GSM_GetIMEI(ID,@buffer);
if (error = ERR_NONE) then
begin
AddTextToGatewayLog(num,PChar('Terhubung
'+Form1.sbStatus.Panels.Items[num-1].Text)+' dengan IMEI
'+buffer);
end else
begin
AddTextToGatewayLog(num,PChar('Terhubung
'+Form1.sbStatus.Panels.Items[num-1].Text));
end;
end;
end else
begin
Form1.sbStatus.Panels.Items[num-1].Text:='PUTUS';

105
AddTextToGatewayLog(num,'Tidak ada koneksi dengan alat');
end;
end;

//==============================================================
//called, when phone needs PIN, PUK, etc.
procedure
ChangeSecurityState(x:integer;ID:integer;SecurityState:GSM_S
ecurityCodeType);stdcall;
{ @Deskripsi : Fungsi untuk
-------------------------------------------------------------}
var
Code : GSM_SecurityCode;
num,i : integer;
buffer : string;
error : GSM_Error;
begin
num:=FindGammuDevice(ID);
if (SecurityState = SEC_UNKNOWN) and (not
GSMDevice[num].PINWarning) then
begin
AddTextToGatewayLog(num,'Status keamanan tidak diketahui.
Kemungkinan tidak didukung oleh alat');
GSMDevice[num].PINWarning:=True;
exit;
end;
//kita mau memasukkan PIN
if (SecurityState = SEC_Pin) then
begin
buffer:=GatewayIniFile.ReadString('modem'+inttostr(num),
'PIN', '1234');
if buffer = '' then
begin
AddTextToGatewayLog(num,'PIN pada konfig file kurang dari
4 karakter. Tidak bisa dimasukkan');
Exit;
end;
Code.CodeType:=SEC_Pin;
for i:=1 to 4 do
begin
if buffer[i] = chr(0) then
begin
AddTextToGatewayLog(num,'PIN pada konfig file kurang
dari 4 karakter. Tidak bisa dimasukkan');
Exit;
end;
Code.Code[i]:=buffer[i];
end;
Code.Code[5]:=chr(0);
AddTextToGatewayLog(num,'Masukkan PIN');
error:=GSM_EnterSecurityCode(ID,@Code);
if (error <> ERR_NONE) and (error <> ERR_TIMEOUT) then
begin
AddTextToGatewayLog(num,'Error masukkan PIN. Kemungkinan
tidak tepat');
AddTextToGatewayLog(num,'Hapus PIN dari file konfig');
GatewayINIFile.DeleteKey('modem'+inttostr(num), 'PIN');
end;
end;

106
end;

//==============================================================
//called, when there is ANY SMS on SIM
procedure HandleIncomingSMS(x:integer;ID:integer);stdcall;
{ @Deskripsi : Fungsi untuk menangani ketika ada SMS masuk
-------------------------------------------------------------}
var
num,i : integer;
error : GSM_Error;
sms : GSM_MultiSMSMessage;
start : Boolean;
F : TextFile;
S4 : AnsiString;
begin
num := FindGammuDevice(ID);
if not GatewayIniFile.ReadBool('modem'+inttostr(num),
'Terima', false) then exit;
error := ERR_NONE;
start := True; //pertama set true untuk inisialisasi beberapa
variable internal DLL
while error = ERR_NONE do
begin
sms.SMS[1].Folder := 0;
error := GSM_GetNextSMSMessage(ID,@sms,start);
if (error = ERR_NONE) then
begin
if (sms.SMS[1].InboxFolder) and (sms.SMS[1].Coding <>
GSM_Coding_8bit) and (sms.SMS[1].PDU <> SMS_Status_Report)
then
begin
ReceivedNum:=ReceivedNum+1;
ShowStatistics();
S4:=GetGammuUnicodeString(sms.SMS[1].Text);
for i:=1 to length(S4) do
begin
case S4[i] of
chr(13): S4[i]:=' ';
chr(10): S4[i]:='~';
end;
end;
//tambahkan info ke layar utama
with Form1.lvInbox do
begin
SortType:=stNone;
if Items.Count>500 then Items.Delete(0);
Items.Add;
Items.Item[Items.Count-1].Caption:=S4;
Items.Item[Items.Count-
1].SubItems.Add(GatewayINIFile.ReadString('modem'+inttostr(n
um), 'Port', 'com1:'));
Items.Item[Items.Count-
1].SubItems.Add(inttostr2(sms.SMS[1].DateTime.Year,4)+'-
'+inttostr2(sms.SMS[1].DateTime.Month,2)+'-
'+inttostr2(sms.SMS[1].DateTime.Day,2)+'
'+inttostr2(sms.SMS[1].DateTime.Hour,2)+':'+inttostr2(sms.SM
S[1].DateTime.Minute,2)+':'+inttostr2(sms.SMS[1].DateTime.Se
cond,2));

107
Items.Item[Items.Count-
1].SubItems.Add(SearchPBKEntry(GetGammuUnicodeString(sms.SMS
[1].Number)));
SortType:=stBoth;
end;
//tambahkan info ke fiel log
if GatewayIniFile.ReadBool('modem'+inttostr(num),
'PakeLogTerima', false) = True then
begin
{$I-}
AssignFile(F,
GatewayIniFile.ReadString('modem'+inttostr(num),
'LogTerima',ExtractFilePath(Application.ExeName)+'Terima'+in
ttostr(num)+'.log'));
Append(F);
if (IoResult <> 0) then Rewrite(F);
if IOResult <> 0 then
begin
AddTextToGatewayLog(num,'Resetting LogTerima modem
pada opsi ke standar');
GatewayIniFile.WriteString('modem'+inttostr(num),
'LogTerima',ExtractFilePath(Application.ExeName)+'Terima'+in
ttostr(num)+'.log');
AssignFile(F,
GatewayIniFile.ReadString('modem'+inttostr(num),
'LogTerima',ExtractFilePath(Application.ExeName)+'Terima'+in
ttostr(num)+'.log'));
Append(F);
if (IoResult <> 0) then Rewrite(F);
end;
{$I+}
if (IoResult <> 0) then
begin
AddTextToGatewayLog(num,'TIDAK BISA MENULIS LOG
TERIMA BUAT MODEM');
end else
begin
Write(F,inttostr2(sms.SMS[1].DateTime.Year,4)+'-
'+inttostr2(sms.SMS[1].DateTime.Month,2)+'-
'+inttostr2(sms.SMS[1].DateTime.Day,2));

Write(F,';'+inttostr2(sms.SMS[1].DateTime.Hour,2)+':'+inttos
tr2(sms.SMS[1].DateTime.Minute,2)+':'+inttostr2(sms.SMS[1].D
ateTime.Second,2));

Write(F,';'+GatewayINIFile.ReadString('modem'+inttostr(num),
'Port', 'com1:'));

Write(F,';'+GetGammuUnicodeString(sms.SMS[1].Number));
WriteLn(F,';'+S4);
Flush(F);
CloseFile(F);
//mengolah pesan yang masuk

OlahPesan(GetGammuUnicodeString(sms.SMS[1].Number),S4);
end;
end;
end;
if sms.SMS[1].InboxFolder then

108
begin
//sekarang kita hapus SMS yang sudah dibaca
sms.SMS[1].Folder:=0;
GSM_DeleteSMSMessage(ID,@sms.SMS[1]);
end;
end;
start := false;
end;
end;

//==============================================================
function ExecuteFile(const FileName, Params, DefaultDir: string;
ShowCmd: Integer): THandle;
{ @Deskripsi : Fungsi untuk
-------------------------------------------------------------}
var
zFileName, zParams, zDir: array[0..79] of Char;
begin
Result := ShellExecute(Application.MainForm.Handle, nil,
StrPCopy(zFileName, FileName), StrPCopy(zParams, Params),
StrPCopy(zDir, DefaultDir), ShowCmd);
end;

end.

DATA MODUL UNIT dm.pas

unit dm;

interface

uses
SysUtils, Classes, DB, ZAbstractRODataset, ZAbstractDataset,
ZDataset,
ZAbstractTable;

type
TDataModule1 = class(TDataModule)
ZTbank: TZTable;
ZTkredit: TZTable;
ZTukm: TZTable;
DSbank: TDataSource;
DSkredit: TDataSource;
DSrequest: TDataSource;
DSmsperintah: TDataSource;
DSukm: TDataSource;
zQRPerintah: TZQuery;
ZQRequest: TZQuery;
procedure DataModuleCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

109
var
DataModule1: TDataModule1;

implementation

uses Untama, modulGlobal, UnPendingMessage;

{$R *.dfm}

procedure TDataModule1.DataModuleCreate(Sender: TObject);


begin
ZTbank.TableName:= 'tbbank';
ZTbank.Active:= True;
ZTkredit.TableName:= 'tbkredit';
ZTkredit.Active:= True;

zQRPerintah.Close;
zQRPerintah.SQL.Clear;
zQRPerintah.SQL.Add('SELECT kode, ket FROM tbsmsperintah');
zQRPerintah.Open;

ZQRequest.Close;
ZQRequest.SQL.Clear;
ZQRequest.SQL.Add('SELECT IdUkm, IdKredit, Tanggal, Jam FROM
tbrequest');
ZQRequest.Open;

ZTukm.TableName:= 'tbukm';
ZTukm.Active:= True;

end;

end.

110
Instalasi MySQL

Siapkan dua software dibawah ini dan letak kan di


drive komputer anda.

Buka folder mysql-4.1.12 seperti yang terlihat pada


gambar diatas, lalu klik 2 kali Setup.exe sehingga
muncul seperti tampilan dibawah.

111
Pada tampilan halaman selamat datang / welcome
seperti pada gambar diatas, klik Next untuk
melanjutkan, sehingga tampilan menjadi seperti
berikut.

Pada tampilan gambar diatas, pilih jenis setup


Typical kemudian lanjutkan dengan meng-klik Next
untuk melanjutkan.

112
Pada tampilan diatas, klik Install untuk melakukan
installasi MySQL-4.1 sehingga proses installasi
akan kelihatan seperti tampilan gambar dibawah ini.

Pada tampilan gambar diatas, pilih Option Skip


Sign-Up kemudian klik Next untuk melanjutkan
installasi

113
Pada tampilan gambar diatas, centang pilihan
Configuration the MySQL Server now kemudian
lanjutkan klik Finish.

Pada gambar diatas, lanjutkan klik Next untuk


melakukan konfigurasi MySQL

114
Tampilan gambar diatas lanjutkan meng-klik Next
untuk melanjutkan sehingga akan muncul tampilan
seperti pada gambar dibawah ini.

Pada tampilan gambar diatas, pilih Option Server


Machine dan klik Next untuk melanjutkan.

115
Pada tampilan gambar diatas, klik Next Sehingga
ditampilkan gambar seperti dibawah ini, klik Next
saja untuk melanjutkan.

116
Pada tampilan gambar diatas ini, klik Next untuk
melanjutkan sehingga tampil seperti ditampilkan
gambar dibawah ini, klik Next saja untuk
melanjutkan

117
Pada tampilan seperti gambar diatas, klik Next,
akan ditampilkan seperti tampilan pada gambar
dibawah ini. Klik Next saja untuk melanjutkan.

118
Pada tampilan seperti gambar diatas, hilangkan
tanda chek pada Modify Security Settings agar bisa
terkoneksi dengan Zeosdbo dan lanjutkan dengan klik
Next, tampilan berikutnya seperti pada gambar
dibawah ini, klik Execute untuk menjalankan service
dan configurasi dari MySQl

119
Jika proses installasi MySQL sukses maka akan
diperlihatkan dengan berjalannya konfigurasi dan
service dari MySQL seperti yang diperlihatkan pada
gambar diatas ini. Sampai disini proses installasi
MySQl selesai, untuk menutup tampilan diatas klik
Finish dan MySQL diap untuk dioperasikan dan
digunakan.

120
Install MySQL Administrator
MySQL Administrator digunakan untuk memudahkan
pembuatan database dan table dan juga bisa
digunakan untuk membackup maupun merestore database
yang sudah ada. Langkah untuk installasi MySQL
Administrator sangat mudah yaitu dengan langka
sebagai berikut:
1. Klik 2 kali pada mysql-administrator-1.0.21-
win.exe sehingga akan tampil tampilan seperti
pada gambar dibawah ini.

Pada tampilan diatas, klik Next untuk melanjutkan


installasi, sehingga akan diperlihatkan tampilan
seperti gambar berikut

121
2. Pilih option I accept the terms in the license
agreement, Klik Next untuk melanjutkan, akan
ditampilkan tampilan seperti gambar dibawah
ini, klik Next saja untuk melanjutkan

122
3. Pada tampilan gambar diatas, klik Next sehingga
akan ditampilkan seperti pada tampilan gambar
dibawah ini, lanjutkan dengan klik Install
untuk menginstall mysql administrator.

123
4. Pada tampilan seperti gambar diatas, klik
Finish yang menyatakan proses installasi mysql
administrator selesai.

5. Untuk mencoba menjalankan mysql administrator,


lakukan setingan seperti yang diperlihatkan
pada gambar dibawah ini kemudian klik OK untuk
mencoba masuk ke halaman mysql administrator

124
6. Jika akan ditampilkan seperti pada tampilan
gambar dibawah ini, maka installasi mysql
administrator telah berhasil dan siap untuk
anda gunakan baik membuat database maupun yang
lainnya seperti yang tersedia pada menu yang
diperlihatkan pada gambar.

125
---halaman ini sengaja dikosongkan---

126
Install zeosdbo
Zeos merupakan software yang digunakan untuk
koneksi Delphi – MySQL, anda tidak harus
menggunakan zeos sebagai koneksi database Delphi-
MySQL anda boleh menggunakan software yang lain
yang menurut anda lebih mudah atau juga anda tidak
harus menggunakan database MySQL tergantung anda
yang menggunakan. Disini karena penulis menggunakan
database MySQL dan penulis gunakan Zeos sebagai
koneksi ke Delphi. Jika anda menggunakan database
Access, paradox yang di include ke dalam Delphi
atau yang lainnya, anda tidak harus menginstall
software Zeosdbo ini.
Untuk installasi zeosdbo, pertama kali anda
copy kan folder Zeos dimana saja anda mau (penulis
meletakkan di C:\Program
Files\Borland\Delphi7\Zeos). kemudian jalankan
program Borland Delphi (penulis menggunakan Delhi
7.0), dan lakukan langkah berikut:
1. Klik menu File + Open Project
2. Buka file ZeosDbo.bpg pada directori C:\Program
Files\Borland\Delphi7\Zeos\zeosdbo\packages\del
phi7 seperti yang diperlihatkan pada gambar
dibawah ini.

127
3. Klik menu view + Project Manager sehingga akan
ditampilkan dialog Project Manager seperti
gambar dibawah ini.

4. Klik menu Project + Compile All Projects hingga


proses pengompilasi selesai, klik OK seperti
pada gambar dibawah.

128
5. Setelah proses kompilasi selesai, lakukan
installasi terhadap komponen Zeos dengan cara
klik kanan mouse pada setiap komponen + Install
seperti yang diperlihatkan pada gambar dibawah
ini.

6. Jika proses installasi sukses akan


diperlihatkan hasil seperti gambar dibawah ini.
Klik OK

129
7. Lakukan installasi pada komponen yang lainnya
seperti cara diatas hingga pada komponen
Zcomponent.bpl

8. Klik menu File + Close All untuk keluar dari


installasi Zeos jika sudah selesai. Pada saat
muncul dialog Confirm seperti pada gambar
dibawah, anda tidak perlu menyimpannya yaitu
klik NO terus sampai dialog tertutup.

Menambah Path Library dari Zeos

Setelah installasi komponen Zeosdbo selesai,


langkah selanjutnya yaitu tambahkan path library ke
Delphi agar zeos dikenali di Delphi. Yaitu dengan
langkah-langkah berikut :
1. Klik menu Tools + Environment Options
2. Pada dialog Environment Options, pilih tab
Library lalu [...] pada bagian kanan dari
Directories Library path seperti pada gambar
dibawah ini.

130
Tombol untuk menambah path library

Sehingga akan ditampilkan kotak dialog Directories


seperti yang diperlihatkan pada gambar dibawah ini.

Tombol membuka lokasi path library

131
Sehingga akan ditampilkan kotak dialog Browse for
Folder seperti dibawah ini.

Pilih folder lokasi path library, klik OK sehingga


kembali ke tampilan dialog Directories seperti
dibawah. Kemudian klik tombol Add untuk menambah
path library.

Klik Add

132
Lakukan pemanbahan lokasi path library seperti cara
diatas, sehingga path library yang ditambahkan
seperti yang terdapat dan diperlihatkan pada gambar
dibawah ini.

Yang terakhir setelah proses penambahan path


library selesai yaitu klik OK untuk keluar dari
dialog Directories dan klik OK untuk keluar dari
dialog Environment Options. Sampai disini Zeosdbo
sudah dapat digunakan untuk koneksi database Delphi
– MySQL.

Yang terakhir jangan lupa copy kan file *.dll yang


ada pada directory C:\Program
Files\Borland\Delphi7\Zeos\zeosdbo\lib\mysql ke
C:\WINDOWS\system32 atau ke C:\WINDOWS\system

133
Membuat library gammu.dll

Simpan komponen GAMMU di drive local misal D:


Jalankan Ms. Visual studio C ++ 6.0
1. Klik menu File pilih dan klik Open Workspace
2. Buka file gammu.dsw pada directory D:\gammu-
1.02.0\win32\dll\msvc06.mak, seperti yang
diperlihatkan pada gambar dibawah ini.
3. Klik Open

Hasil file dari gammu.dsw diperlihatkan seperti


pada gambar dibawah ini. Compile lah coding dari
file gammu.dsw untuk membentuk library gammu.dll
dengan meng-klik icon Compile dan Build, anda tidak
harus meng-klik icon Execute Program karena ini
hanya untuk membuat file library gammu.dll saja.
Icon tersebut dapat dilihat seperti yang ditunjukan
pada gambar dibahaw.

134
Icon untuk mengcompile program

Hasil dari compile dan build program pada


gambar diatas yaitu membentuk file library
gammu.dll dimana file gammu.dll ini dapat dijumpai
pada folder D:\gammu-1.02.0\win32\dll\msvc06.mak\
Release yaitu setelah anda melakukan build program.
File library gammu.dll dapat dilihat seperti pada
gambar dibawah ini

135
File library gammu.dll

Didalam membuat aplikasi berbasis SMS dengan


menggunakan GAMMU anda membutuhkan dua file penting
yang nantinya akan digunakan dalam pembuatan
program aplikasi dengan Delphi untuk dapat
terkoneksi dengan HP yang digunakan. Ke dua file
tersebut yaitu gammu.dll yang sudah diperoleh dari
hasil compile dan build program diatas, dan file
gammu.pas. untuk file gammu.pas dapat dijumpai pada
folder D:\gammu-1.02.0\win32\delphi7.gui seperti
yang diperlihatkan pada tampilan gambar dibawah
ini.

136
File gammu.pas

Yang terakhir yang dilakukan yaitu copy kedua


file tersebut (gammu.dll dan gammu.pas) kedalam
direktori kerja anda.

137

You might also like