LAMPIRAN
Listing Program
FormUtama.vb
Public Class FormUtama
Dim ucHome As UcHome
Dim ucConnection As UcConnection
Dim ucBook As UcBook
Dim ucAnggota As UcAnggota
Dim ucPeminjaman As UcPeminjaman
Dim ucPengembalian As UcPengembalian
Public smsBackgroundProcess As SMSBackgroundProcess
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
smsBackgroundProcess = New SMSBackgroundProcess() smsBackgroundProcess.RunSMSBackgroundProcess() End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
ucConnection = New UcConnection() ucConnection.Dock = DockStyle.Fill ucConnection.Location = New Point(0, 0) ucConnection.Visible = True
panelContent.Controls.Add(ucConnection)
ucBook = New UcBook()
ucBook.Dock = DockStyle.Fill ucBook.Location = New Point(0, 0) ucBook.Visible = True
panelContent.Controls.Add(ucBook)
ucAnggota = New UcAnggota() ucAnggota.Dock = DockStyle.Fill ucAnggota.Location = New Point(0, 0) ucAnggota.Visible = True
panelContent.Controls.Add(ucAnggota)
ucPeminjaman = New UcPeminjaman() ucPeminjaman.Dock = DockStyle.Fill ucPeminjaman.Location = New Point(0, 0) ucPeminjaman.Visible = True
panelContent.Controls.Add(ucPeminjaman)
ucPengembalian.Visible = True
panelContent.Controls.Add(ucPengembalian)
RemoveUC()
ucConnection.Visible = True End Sub
Private Sub RemoveUC()
For Each item As Control In panelContent.Controls If
item.GetType().BaseType.FullName.Equals("System.Windows.Forms.UserControl") Then
Dim uc As UserControl
uc = CType(item, UserControl) uc.Visible = False
End If Next End Sub
Private Sub tsbConnection_Click(sender As System.Object, e As System.EventArgs) Handles tsbConnection.Click
If Not ucConnection.Visible Then RemoveUC()
ucConnection.Visible = True End If
End Sub
Private Sub tsbHome_Click(sender As System.Object, e As System.EventArgs) Handles tsbHome.Click
If Not ucHome.Visible Then RemoveUC()
ucHome.Visible = True End If
End Sub
Private Sub tsbBuku_Click(sender As System.Object, e As System.EventArgs) Handles tsbBuku.Click
If Not ucBook.Visible Then RemoveUC()
ucBook.Visible = True ucBook.LoadData() End If
End Sub
Private Sub tsbAnggota_Click(sender As System.Object, e As System.EventArgs) Handles tsbAnggota.Click
If Not ucAnggota.Visible Then RemoveUC()
ucAnggota.Visible = True ucAnggota.LoadData() End If
End Sub
Private Sub tsbPeminjaman_Click(sender As System.Object, e As System.EventArgs) Handles tsbPeminjaman.Click
If Not ucPeminjaman.Visible Then RemoveUC()
ucPeminjaman.Visible = True ucPeminjaman.LoadData() End If
Private Sub tsbPengembalian_Click(sender As System.Object, e As System.EventArgs) Handles tsbPengembalian.Click
If Not ucPengembalian.Visible Then RemoveUC()
ucPengembalian.Visible = True ucPengembalian.LoadData() End If
End Sub
Private Sub FormUtama_FormClosed(sender As System.Object, e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed If Not IsNothing(smsBackgroundProcess.port) Then
smsBackgroundProcess.ClosePort() End If
End Sub End Class
FrmAddAnggota.vb
Public Class FrmAddAnggota
Dim database As DatabaseEntities
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities() End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
If txtNama.Text = "" Then
General.ErrorMessage("Nama tidak boleh kosong!") Return
End If
If txtNIM.Text = "" Then
General.ErrorMessage("Nim tidak boleh kosong!") Return
End If
If cmbFakultas.SelectedIndex < 0 Then
General.ErrorMessage("Silahkan pilih Fakultas Anda!") Return
End If
If cmbProdi.SelectedIndex < 0 Then
General.ErrorMessage("Silahkan pilih Program Studi Anda!") Return
End If
If txtTmpLahir.Text = "" Then
General.ErrorMessage("Tempat lahir tidak boleh kosong!") Return
End If
If txtNoHp.Text = "" Then
Return End If
Try
Dim prodi As prodi = cmbProdi.SelectedItem
Dim anggota As anggota = New anggota() anggota.nama = txtNama.Text
anggota.nim = txtNIM.Text
anggota.id_prodi = prodi.id_prodi anggota.tempat_lahir = txtTmpLahir.Text anggota.tanggal_lahir = dtpTanggalLahir.Value anggota.no_hp = txtNoHp.Text
database.anggota.AddObject(anggota) database.SaveChanges()
Me.DialogResult = Windows.Forms.DialogResult.OK Catch ex As Exception
General.ErrorMessage(ex.Message) End Try
End Sub
Private Sub btnBatal_Click(sender As System.Object, e As System.EventArgs) Handles btnBatal.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel End Sub
Private Sub FrmAddAnggota_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim fakultas = (From f In database.fakultas Select f).ToList()
cmbFakultas.DataSource = fakultas cmbFakultas.ValueMember = "nama" End Sub
Private Sub cmbFakultas_SelectedValueChanged(sender As System.Object, e As System.EventArgs) Handles cmbFakultas.SelectedValueChanged
Dim selectedFakultas As fakultas = cmbFakultas.SelectedItem
Dim prodi = (From p In database.prodi
Where p.id_fakultas = selectedFakultas.id_fakultas Select p).ToList()
cmbProdi.DataSource = prodi cmbProdi.ValueMember = "nama" End If
End Sub
Private Sub txtNama_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtNama.TextChanged
End Sub End Class
FrmAddBook.vb
Public Class FrmAddBook
Private Sub FrmAddBook_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
database = New DatabaseEntities() End Sub
Private Sub btnBatal_Click(sender As System.Object, e As System.EventArgs) Handles btnBatal.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
If txtISBN.Text = "" Then
General.ErrorMessage("ISBN buku tidak boleh kosong!") Return
End If
If txtCode.Text = "" Then
General.ErrorMessage("Kode buku tidak boleh kosong!") Return
End If
If txtJudul.Text = "" Then
General.ErrorMessage("Judul buku tidak boleh kosong!") Return
End If
If txtPengarang.Text = "" Then
General.ErrorMessage("Pengarang buku tidak boleh kosong!") Return
End If
If txtPenerbit.Text = "" Then
General.ErrorMessage("Penerbit buku tidak boleh kosong!") Return
End If
Dim jumlah As Integer
If txtJumlah.Text = "" Or Not Integer.TryParse(txtJumlah.Text, jumlah) Then
General.ErrorMessage("Jumlah buku tidak valid!") Return
End If
For i As Integer = 1 To jumlah Dim book As buku = New buku() book.isbn = txtISBN.Text
book.code = txtCode.Text.ToUpper() & i book.judul_buku = txtJudul.Text
book.pengarang = txtPengarang.Text book.penerbit = txtPenerbit.Text book.unit = i
book.status = True
database.AddTobuku(book) Next
database.SaveChanges()
Private Sub txtISBN_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtISBN.TextChanged
End Sub End Class
FrmAddPeminjaman.vb
Public Class FrmAddPeminjaman
Dim database As DatabaseEntities
Dim book As buku
Dim anggota As anggota
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities() End Sub
Private Sub btnBatal_Click(sender As System.Object, e As System.EventArgs) Handles btnBatal.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
If IsNothing(book) Then
General.ErrorMessage("Silihkan pilih buku yang akan dipinjam!") Return
End If
If IsNothing(anggota) Then
General.ErrorMessage("Silahkan pilih anggota yang meminjam buku!") Return
End If
If book.status = False Then
General.ErrorMessage("Buku tidak tersedia") Return
End If
Dim peminjaman As peminjaman = New peminjaman() peminjaman.code = txtCode.Text
peminjaman.tanggal = dtpTanggal.Value peminjaman.id_anggota = anggota.id_anggota peminjaman.id_buku = book.id_buku
peminjaman.no_hp = txtAnggotaHp.Text peminjaman.konfirmasi = False
database.peminjaman.AddObject(peminjaman)
book.status = False
database.ObjectStateManager.ChangeObjectState(book,
EntityState.Modified)
database.SaveChanges()
Private Sub FrmAddPeminjaman_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim code As String = "P" & DateTime.Now.ToString("MM")
Dim data = (From p In database.peminjaman
Where p.code.ToLower.StartsWith(code.ToLower) Order By p.code Descending
Select p).FirstOrDefault() txtCode.Text = code
End Sub
Private Sub pctSearchBuku_Click(sender As System.Object, e As System.EventArgs) Handles pctSearchBuku.Click
Dim frmSearchBook As FrmSearchBook = New FrmSearchBook() Dim result As DialogResult = frmSearchBook.ShowDialog()
If result = Windows.Forms.DialogResult.OK Then book = (From b In database.buku
Where b.id_buku = frmSearchBook.book.id_buku Select b).FirstOrDefault()
txtBukuJudul.Text = book.judul_buku txtBukuPengarang.Text = book.pengarang() txtBukuPenerbit.Text = book.penerbit txtBukuUnit.Text = book.unit
End If End Sub
Private Sub pctSearchAnggota_Click(sender As System.Object, e As System.EventArgs) Handles pctSearchAnggota.Click
Dim frmSearchAnggota As FrmSearchAnggota = New FrmSearchAnggota() Dim result As DialogResult = frmSearchAnggota.ShowDialog()
If result = Windows.Forms.DialogResult.OK Then anggota = frmSearchAnggota.anggota
txtAnggotaNim.Text = anggota.nim txtAnggotaNama.Text = anggota.nama
txtAnggotaFakultas.Text = anggota.prodi.fakultas.nama txtAnggotaProdi.Text = anggota.prodi.nama
txtAnggotaHp.Text = anggota.no_hp End If
End Sub
Private Sub txtCode_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtCode.TextChanged
End Sub End Class
FrmEditAnggota.vb
Public Class FrmEditAnggota
Dim database As DatabaseEntities
Dim IsEdit As Boolean
Public anggota As anggota
Public Sub New()
' This call is required by the designer.
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities() IsEdit = False
anggota = New anggota() End Sub
Private Sub FrmEditAnggota_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim fakultas = (From f In database.fakultas Select f).ToList()
cmbFakultas.DataSource = fakultas cmbFakultas.ValueMember = "nama"
Dim prodi = (From p In database.prodi
Where p.id_fakultas = anggota.prodi.id_fakultas Select p).ToList()
cmbProdi.DataSource = prodi cmbProdi.ValueMember = "nama"
txtNama.Text = anggota.nama txtNIM.Text = anggota.nim
cmbFakultas.SelectedValue = anggota.prodi.fakultas.nama cmbProdi.SelectedValue = anggota.prodi.nama
txtTmpLahir.Text = anggota.tempat_lahir dtpTanggalLahir.Value = anggota.tanggal_lahir txtNoHp.Text = anggota.no_hp
txtNama.Enabled = IsEdit txtNIM.Enabled = IsEdit cmbFakultas.Enabled = IsEdit cmbProdi.Enabled = IsEdit txtTmpLahir.Enabled = IsEdit dtpTanggalLahir.Enabled = IsEdit txtNoHp.Enabled = IsEdit
btnSave.Text = "&Edit" End Sub
Private Sub btnBatal_Click(sender As System.Object, e As System.EventArgs) Handles btnBatal.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
If IsEdit Then
If txtNama.Text = "" Then
General.ErrorMessage("Nama tidak boleh kosong!") Return
End If
If txtNIM.Text = "" Then
General.ErrorMessage("Nim tidak boleh kosong!") Return
End If
General.ErrorMessage("Silahkan pilih Fakultas Anda!") Return
End If
If cmbProdi.SelectedIndex < 0 Then
General.ErrorMessage("Silahkan pilih Program Studi Anda!") Return
End If
If txtTmpLahir.Text = "" Then
General.ErrorMessage("Tempat lahir tidak boleh kosong!") Return
End If
If txtNoHp.Text = "" Then
General.ErrorMessage("No hp tidak boleh kosong!") Return
End If
Dim prodi As prodi = cmbProdi.SelectedItem
Dim temp As anggota = (From a In database.anggota
Where a.id_anggota = anggota.id_anggota Select a).First()
temp.nama = txtNama.Text temp.nim = txtNIM.Text
temp.id_prodi = prodi.id_prodi temp.tempat_lahir = txtTmpLahir.Text temp.tanggal_lahir = dtpTanggalLahir.Value temp.no_hp = txtNoHp.Text
If IsNothing(temp.EntityKey) Or temp.EntityKey.IsTemporary Then database.anggota.AddObject(temp)
End If
database.ObjectStateManager.ChangeObjectState(temp,
EntityState.Modified)
database.SaveChanges()
Me.DialogResult = Windows.Forms.DialogResult.OK Else
IsEdit = True
txtNama.Enabled = IsEdit txtNIM.Enabled = IsEdit cmbFakultas.Enabled = IsEdit cmbProdi.Enabled = IsEdit txtTmpLahir.Enabled = IsEdit dtpTanggalLahir.Enabled = IsEdit txtNoHp.Enabled = IsEdit
btnSave.Text = "&Simpan" End If
End Sub
Private Sub cmbFakultas_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbFakultas.SelectedIndexChanged
Dim selectedFakultas As fakultas = cmbFakultas.SelectedItem
Dim prodi = (From p In database.prodi
cmbProdi.DataSource = prodi End Sub
Private Sub txtNama_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtNama.TextChanged
End Sub End Class
FrmEditBook.vb
Public Class FrmEditBook
Public book As buku
Dim database As DatabaseEntities
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
book = New buku
database = New DatabaseEntities() End Sub
Private Sub FrmEditBook_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
txtISBN.Text = book.isbn txtCode.Text = book.code
txtJudul.Text = book.judul_buku txtPengarang.Text = book.pengarang txtPenerbit.Text = book.penerbit
cmbStatus.SelectedItem = IIf(book.status = True, "tersedia", "tidak tersedia")
End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
If txtISBN.Text = "" Then
General.ErrorMessage("ISBN buku tidak boleh kosong!") Return
End If
If txtCode.Text = "" Then
General.ErrorMessage("Kode buku tidak boleh kosong!") Return
End If
If txtJudul.Text = "" Then
General.ErrorMessage("Judul buku tidak boleh kosong!") Return
End If
If txtPengarang.Text = "" Then
General.ErrorMessage("Pengarang buku tidak boleh kosong!") Return
End If
If txtPenerbit.Text = "" Then
End If
Dim buku As buku = (From b In database.buku Where b.id_buku = book.id_buku Select b).FirstOrDefault() buku.isbn = txtISBN.Text
buku.code = txtCode.Text.ToUpper() buku.judul_buku = txtJudul.Text buku.pengarang = txtPengarang.Text buku.penerbit = txtPenerbit.Text
buku.status = If(cmbStatus.Text.Equals("tersedia"), True, False)
database.SaveChanges()
Me.DialogResult = Windows.Forms.DialogResult.OK
End Sub
Private Sub btnBatal_Click(sender As System.Object, e As System.EventArgs) Handles btnBatal.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel End Sub
Private Sub txtISBN_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtISBN.TextChanged
End Sub End Class
FrmPengembalian.vb
ublic Class FrmPengembalian
Dim database As DatabaseEntities
Dim peminjaman As peminjaman
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities() End Sub
Private Sub FrmPengembalian_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim listCode = (From p In database.peminjaman Where p.pengembalian.Count = 0 Select p).ToList()
cmbCode.DataSource = listCode cmbCode.ValueMember = "code"
txtTanggalPeminjaman.Text = "" txtDenda.Text = ""
txtAnggotaNim.Text = "" txtAnggotaNama.Text = "" txtAnggotaFakultas.Text = "" txtAnggotaProdi.Text = "" txtAnggotaHp.Text = "" End Sub
Private Sub cmbCode_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbCode.SelectedIndexChanged
If Not IsNothing(peminjaman) Then Dim settingTime As Integer =
General.GetSetting("lama_peminjaman")
Dim settingDenda As Decimal =
General.GetSetting("denda_per_hari")
Dim denda As Integer
Dim dateNow As DateTime = DateTime.Now Dim pDate As DateTime =
DateTime.Parse(peminjaman.tanggal.ToString()).AddDays(1)
Dim range As Integer = (dateNow - pDate).TotalDays If (range > settingTime) Then
denda = (range - settingTime) * settingDenda Else
denda = 0 End If
txtTanggalPeminjaman.Text = pDate.ToShortDateString() txtDenda.Text = denda
txtBukuJudul.Text = peminjaman.buku.judul_buku txtBukuPengarang.Text = peminjaman.buku.pengarang txtBukuPenerbit.Text = peminjaman.buku.penerbit txtBukuUnit.Text = peminjaman.buku.unit
txtAnggotaNim.Text = peminjaman.anggota.nim txtAnggotaNama.Text = peminjaman.anggota.nama txtAnggotaFakultas.Text =
peminjaman.anggota.prodi.fakultas.nama
txtAnggotaProdi.Text = peminjaman.anggota.prodi.nama txtAnggotaHp.Text = peminjaman.anggota.no_hp
End If
End If End Sub
Private Sub btnBatal_Click(sender As System.Object, e As System.EventArgs) Handles btnBatal.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
If IsNothing(peminjaman) Then
General.ErrorMessage("Silahkan pilih code peminjaman!") Return
End If
Dim book = (From b In database.buku
book.status = True
database.SaveChanges()
Me.DialogResult = Windows.Forms.DialogResult.OK End Sub
Private Sub pctSearchPeminjaman_Click(sender As System.Object, e As System.EventArgs) Handles pctSearchPeminjaman.Click
Dim frmSearchPeminjaman As FrmSearchPeminjaman = New
FrmSearchPeminjaman()
Dim result As DialogResult = frmSearchPeminjaman.ShowDialog() If result = Windows.Forms.DialogResult.OK Then
peminjaman = (From p In database.peminjaman Where p.id_peminjaman = frmSearchPeminjaman.peminjaman.id_peminjaman
Select p).FirstOrDefault() cmbCode.SelectedItem = peminjaman
End If End Sub End Class
FrmSearchAnggota.vb
Public Class FrmSearchAnggota
Dim database As DatabaseEntities
Public anggota As anggota
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities() anggota = New anggota()
End Sub
Private Sub LoadData()
Dim search As String = txtCari.Text Dim data
If search = "" Then
data = (From a In database.anggota Select id_anggota = a.id_anggota, nim = a.nim,
nama = a.nama,
fakultas = a.prodi.fakultas.nama, prodi = a.prodi.nama,
tempat_lahir = a.tempat_lahir, tanggal_lahir = a.tanggal_lahir, no_hp = a.no_hp).ToList()
Else
data = (From a In database.anggota
Where a.nama.ToLower().Contains(search.ToLower()) Select id_anggota = a.id_anggota,
nim = a.nim, nama = a.nama,
fakultas = a.prodi.fakultas.nama, prodi = a.prodi.nama,
tanggal_lahir = a.tanggal_lahir, no_hp = a.no_hp).ToList()
End If
dataGrid.DataSource = data End Sub
Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel End Sub
Private Sub BtnCari_Click(sender As System.Object, e As System.EventArgs) Handles BtnCari.Click
LoadData() End Sub
Private Sub FrmSearchAnggota_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
LoadData() End Sub
Private Sub txtCari_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtCari.TextChanged
End Sub End Class
FrmSearchBook.vb
Public Class FrmSearchBook
Dim database As DatabaseEntities
Public book As buku
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities() book = New buku()
LoadData() End Sub
Private Sub LoadData()
Dim search As String = txtCari.Text Dim data
If search = "" Then
data = (From b In database.buku Select id_buku = b.id_buku, judul_buku = b.judul_buku, pengarang = b.pengarang, penerbit = b.penerbit, unit = b.unit,
status = If(b.status = True, "tersedia", "tidak
tersedia")).ToList()
Else
data = (From b In database.buku
Where b.judul_buku.ToLower().Contains(search.ToLower()) Or b.pengarang.ToLower().Contains(search.ToLower())
judul_buku = b.judul_buku, pengarang = b.pengarang, penerbit = b.penerbit, unit = b.unit,
status = If(b.status = True, "tersedia", "tidak
tersedia")).ToList()
End If End Sub
Private Sub BtnCari_Click(sender As System.Object, e As System.EventArgs) Handles BtnCari.Click
LoadData() End Sub
Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel End Sub
Private Sub txtCari_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtCari.TextChanged
End Sub End Class
FrmSearchPeminjaman.vb
Public Class FrmSearchPeminjaman
Dim database As DatabaseEntities
Public peminjaman As peminjaman
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities() peminjaman = New peminjaman() End Sub
Public Sub LoadData()
Dim search As String = txtCari.Text Dim data
If search = "" Then
data = (From p In database.peminjaman Where p.pengembalian.Count = 0
Select id_peminjaman = p.id_peminjaman, code = p.code,
tanggal = p.tanggal,
judul_buku = p.buku.judul_buku, pengarang = p.buku.pengarang, penerbit = p.buku.penerbit, nama = p.anggota.nama,
nim = p.anggota.nim).ToList() Else
data = (From p In database.peminjaman
Where (p.code.ToLower.Contains(search.ToLower()) Or
p.anggota.nama.ToLower.Contains(search.ToLower)) And p.pengembalian.Count = 0 Select id_peminjaman = p.id_peminjaman,
tanggal = p.tanggal,
judul_buku = p.buku.judul_buku, pengarang = p.buku.pengarang, penerbit = p.buku.penerbit, nama = p.anggota.nama,
nim = p.anggota.nim).ToList() End If
End Sub
Private Sub BtnCari_Click(sender As System.Object, e As System.EventArgs) Handles BtnCari.Click
LoadData() End Sub
Private Sub FrmSearchPeminjaman_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
LoadData() End Sub
Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel End Sub
Private Sub txtCari_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtCari.TextChanged
End Sub End Class
FrmSearchPeminjaman.vb
Public Class FrmSearchPeminjaman
Dim database As DatabaseEntities
Public peminjaman As peminjaman
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities() peminjaman = New peminjaman() End Sub
Public Sub LoadData()
Dim search As String = txtCari.Text Dim data
If search = "" Then
data = (From p In database.peminjaman Where p.pengembalian.Count = 0
Select id_peminjaman = p.id_peminjaman, code = p.code,
tanggal = p.tanggal,
judul_buku = p.buku.judul_buku, pengarang = p.buku.pengarang, penerbit = p.buku.penerbit, nama = p.anggota.nama,
data = (From p In database.peminjaman
Where (p.code.ToLower.Contains(search.ToLower()) Or
p.anggota.nama.ToLower.Contains(search.ToLower)) And p.pengembalian.Count = 0 Select id_peminjaman = p.id_peminjaman,
code = p.code, tanggal = p.tanggal,
judul_buku = p.buku.judul_buku, pengarang = p.buku.pengarang, penerbit = p.buku.penerbit, nama = p.anggota.nama,
nim = p.anggota.nim).ToList() End If
End Sub
Private Sub BtnCari_Click(sender As System.Object, e As System.EventArgs) Handles BtnCari.Click
LoadData() End Sub
Private Sub FrmSearchPeminjaman_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
LoadData() End Sub
FrmUcAnggota.vb
Public Class UcAnggota
Dim database As DatabaseEntities
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities() End Sub
Public Sub LoadData()
Dim search As String = txtCari.Text Dim data
If search = "" Then
data = (From a In database.anggota Order By a.nim Ascending
Select id_anggota = a.id_anggota, nim = a.nim,
nama = a.nama,
fakultas = a.prodi.fakultas.nama, prodi = a.prodi.nama,
tempat_lahir = a.tempat_lahir, tanggal_lahir = a.tanggal_lahir, no_hp = a.no_hp).ToList()
Else
data = (From a In database.anggota Order By a.nim Ascending
Where a.nama.ToLower().Contains(search.ToLower()) Or a.nim.ToLower().Contains(search.ToLower())
Select id_anggota = a.id_anggota, nim = a.nim,
fakultas = a.prodi.fakultas.nama, prodi = a.prodi.nama,
tempat_lahir = a.tempat_lahir, tanggal_lahir = a.tanggal_lahir, no_hp = a.no_hp).ToList()
End If
dataGrid.DataSource = data End Sub
Private Sub UcAnggota_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
LoadData() End Sub
Private Sub btnCari_Click(sender As System.Object, e As System.EventArgs) Handles btnCari.Click
LoadData() End Sub
Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs) Handles btnAdd.Click
Dim frmAddAnggota As FrmAddAnggota = New FrmAddAnggota() Dim result As DialogResult = frmAddAnggota.ShowDialog()
If result = DialogResult.OK Then LoadData()
End If End Sub
Private Sub dataGrid_CellContentDoubleClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles
dataGrid.CellContentDoubleClick
Dim id_anggota As Integer = dataGrid.Rows(e.RowIndex).Cells(0).Value Dim anggota As anggota = (From a In database.anggota
Where a.id_anggota = id_anggota Select a).FirstOrDefault()
Dim frmEditAnggota As FrmEditAnggota = New FrmEditAnggota() Dim result As DialogResult
frmEditAnggota.anggota = anggota result = frmEditAnggota.ShowDialog()
If result = DialogResult.OK Then LoadData()
End If End Sub
Private Sub btnDelete_Click(sender As System.Object, e As System.EventArgs) Handles btnDelete.Click
Dim id As Integer =
dataGrid.Rows(dataGrid.SelectedCells(0).RowIndex).Cells(0).Value Dim name As String =
dataGrid.Rows(dataGrid.SelectedCells(0).RowIndex).Cells(2).Value
Dim result As DialogResult = MessageBox.Show(String.Format("Apakah Anda ingin menghapus data anggota {0}", name), "Konfirmasi",
MessageBoxButtons.YesNo, MessageBoxIcon.Information)
If result = DialogResult.Yes Then
Dim anggota = (From a In database.anggota
database.anggota.DeleteObject(anggota) database.SaveChanges()
LoadData()
End If End Sub
Private Sub txtCari_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtCari.TextChanged
End Sub End Class
FrmUcBook.vb
Public Class UcBook
Dim database As DatabaseEntities
Private Sub UcBook_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
database = New DatabaseEntities() End Sub
Public Sub LoadData()
Dim search As String = txtCari.Text Dim data
If search = "" Then
data = (From b In database.buku
Order By b.judul_buku Ascending Select id_buku = b.id_buku, judul_buku = b.judul_buku, pengarang = b.pengarang, penerbit = b.penerbit, unit = b.unit,
isbn = b.isbn, code = b.code,
status = If(b.status = True, "tersedia", "tidak
tersedia")).ToList()
Else
data = (From b In database.buku
Order By b.judul_buku Ascending
Where b.judul_buku.ToLower().Contains(search.ToLower()) Or b.pengarang.ToLower().Contains(search.ToLower())
Select id_buku = b.id_buku, judul_buku = b.judul_buku, pengarang = b.pengarang, penerbit = b.penerbit, unit = b.unit,
isbn = b.isbn, code = b.code,
status = If(b.status = True, "tersedia", "tidak
tersedia")).ToList()
End If
dataGrid.DataSource = data End Sub
Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs) Handles btnAdd.Click
result = frmAddBook.ShowDialog()
If result = DialogResult.OK Then LoadData()
End If End Sub
Private Sub dataGrid_CellDoubleClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles
dataGrid.CellDoubleClick
Dim frmEdit As FrmEditBook = New FrmEditBook()
Dim id_buku As Integer = dataGrid.Rows(e.RowIndex).Cells(0).Value frmEdit.book = (From b In database.buku
Where b.id_buku = id_buku Select b).FirstOrDefault()
Dim result As DialogResult
result = frmEdit.ShowDialog() If result = DialogResult.OK Then LoadData()
End If End Sub
Private Sub btnCari_Click(sender As System.Object, e As System.EventArgs) Handles btnCari.Click
LoadData() End Sub
Private Sub txtCari_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtCari.TextChanged
End Sub End Class
FrmUcConnection.vb
Imports System.IO.Ports Imports System.Management
Public Class UcConnection
Dim port As SerialPort
Dim SMSGateway As SMSLib
Dim formUtama As FormUtama
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
SMSGateway = New SMSLib() formUtama = New FormUtama() End Sub
Private Sub UcConnection_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Try
formUtama = Me.Parent.Parent Next
Catch err As ManagementException
MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
End Try
port = formUtama.smsBackgroundProcess.port
rdbSIM.Checked = True
formUtama.smsBackgroundProcess.SIM_STORAGE = True Catch ex As Exception
General.ErrorLog(ex.Message) End Try
End Sub
Private Sub rdbSIM_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rdbSIM.CheckedChanged
formUtama.smsBackgroundProcess.SIM_STORAGE = True End Sub
Private Sub rdbDevice_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rdbDevice.CheckedChanged
formUtama.smsBackgroundProcess.SIM_STORAGE = False End Sub
Private Sub btnConnect_Click(sender As System.Object, e As System.EventArgs) Handles btnConnect.Click
Try
If btnConnect.Text.Equals("Connect") Then Me.port =
formUtama.smsBackgroundProcess.smsLib.OpenPort(port.Port, baundRate, dataBits, readTimeout, writeTimeout)
If Not IsNothing(Me.port) Then
formUtama.statusBar.Text = "Status : Connected to " + cmbPort.Text
Else
formUtama.statusBar.Text = "Status : Invalid port settings" End If
formUtama.smsBackgroundProcess.port = Me.port btnConnect.Text = "Disconnect"
gboPortSetting.Enabled = False Else
formUtama.smsBackgroundProcess.ClosePort() btnConnect.Text = "Connect"
gboPortSetting.Enabled = True End If
Catch ex As Exception
formUtama.statusBar.Text = "Status : " & ex.Message End Try
End Sub
Private Sub cmbPort_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbPort.SelectedIndexChanged
End Sub End Class
Public Class PortName
FrmUcHome.vb
Public Class UcHome
Private Sub Label1_Click(sender As System.Object, e As System.EventArgs) Handles Label1.Click
End Sub End Class
FrmUcPeminjaman.vb
Public Class UcPeminjaman
Dim database As DatabaseEntities
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities() End Sub
Private Sub UcPeminjaman_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
End Sub
Public Sub LoadData()
Dim search As String = txtCari.Text Dim data
If search = "" Then
data = (From p In database.peminjaman Where p.pengembalian.Count = 0
Select id_peminjaman = p.id_peminjaman, code = p.code,
tanggal = p.tanggal,
judul_buku = p.buku.judul_buku, pengarang = p.buku.pengarang, penerbit = p.buku.penerbit, nama = p.anggota.nama,
nim = p.anggota.nim).ToList() Else
data = (From p In database.peminjaman
Where p.code.ToLower.Contains(search.ToLower()) Or
p.anggota.nama.ToLower.Contains(search.ToLower) And p.pengembalian.Count = 0 Select id_peminjaman = p.id_peminjaman,
code = p.code, tanggal = p.tanggal,
judul_buku = p.buku.judul_buku, pengarang = p.buku.pengarang, penerbit = p.buku.penerbit, nama = p.anggota.nama,
nim = p.anggota.nim).ToList() End If
End Sub
LoadData() End Sub
Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs) Handles btnAdd.Click
Dim frmAddPeminjaman As FrmAddPeminjaman = New FrmAddPeminjaman() Dim result As DialogResult = frmAddPeminjaman.ShowDialog()
If result = DialogResult.OK Then LoadData()
End If End Sub
Private Sub txtCari_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtCari.TextChanged
End Sub End Class
FrmUcPengembalian.vb
Public Class UcPengembalian
Dim database As DatabaseEntities
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities() End Sub
Public Sub LoadData()
Dim search As String = txtCari.Text Dim data
If search = "" Then
data = (From p In database.pengembalian
Select id_pengembalian = p.id_pengembalian, code = p.peminjaman.code,
tanggal_peminjaman = p.peminjaman.tanggal, tanggal_pengembalian = p.tanggal,
judul_buku = p.peminjaman.buku.judul_buku, pengarang = p.peminjaman.buku.pengarang, penerbit = p.peminjaman.buku.penerbit, nama = p.peminjaman.anggota.nama, nim = p.peminjaman.anggota.nim, denda = p.denda).ToList() Else
data = (From p In database.pengembalian
Where p.peminjaman.code.ToLower.Contains(search.ToLower()) Or p.peminjaman.anggota.nama.ToLower.Contains(search.ToLower)
Select id_pengembalian = p.id_pengembalian, code = p.peminjaman.code,
tanggal_peminjaman = p.peminjaman.tanggal, tanggal_pengembalian = p.tanggal,
nim = p.peminjaman.anggota.nim, denda = p.denda).ToList() End If
End Sub
Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs) Handles btnAdd.Click
Dim frmPengembalian As FrmPengembalian = New FrmPengembalian() Dim result As DialogResult = frmPengembalian.ShowDialog()
If result = DialogResult.OK Then LoadData()
End If End Sub
Private Sub txtCari_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtCari.TextChanged
End Sub End Class
ShortMessage.vb
Public Class ShortMessage
Public Property Index As Integer Public Property Status As String Public Property Sender As String Public Property Alphabet As String Public Property Sent As String Public Property Message As String End Class
SMSBackgroundProcess.vb
Imports System.IO.Ports
Imports System.Text.RegularExpressions Imports System.Threading
Public Class SMSBackgroundProcess
Public port As SerialPort
Public smsLib As ATLib.SMSLib
Public SIM_STORAGE As Boolean
Dim database As DatabaseEntities
Public Sub New()
smsLib = New ATLib.SMSLib() SIM_STORAGE = True
database = New DatabaseEntities() End Sub
Public Sub ClosePort()
smsLib.ClosePort(Me.port) End Sub
Public Function SendMultiPageSMS(sender As String, message As String) While message.Length > 160
Dim part As String = message.Substring(0, 160) message = message.Substring(160)
Return False End If
End While
Return smsLib.SendMessage(Me.port, sender, message) End Function
Public Sub RunSMSBackgroundProcess()
Dim bgProcess = New Thread(New ThreadStart(AddressOf SMSGateway)) bgProcess.IsBackground = True
bgProcess.Start() End Sub
Public Sub SMSGateway() While True
ConfirmationProcess() ReadSMS()
Thread.Sleep(3000) End While
End Sub
Private Sub ConfirmationProcess() 'While True
Try
If Not IsNothing(Me.port) Then
'mengirim sms konfirmasi telah melakukan peminjaman buku
smsLib.log_file = "ConfirmationProcess_"
General.LogActivity(smsLib.log_file, "Start Confirmation Process")
Dim listPeminjaman As List(Of peminjaman) = (From p In database.peminjaman
Where p.konfirmasi = False
Select p).ToList() General.LogActivity(smsLib.log_file, String.Format("{0} data
peminjaman ditemukan", listPeminjaman.Count))
For Each item In listPeminjaman
General.LogActivity(smsLib.log_file,
String.Format("Receiver : {0}, NIM : {1}, No : {2},
Code Pemesanan : {3}",
item.anggota.nama, item.anggota.nim, item.no_hp, item.code))
Dim tanggalTenggang As DateTime =
DateTime.Parse(item.tanggal.ToString).AddDays(General.GetSetting("lama_peminjam an"))
Dim message As String = String.Format("Terima kasih telah
melakukan peminjaman. Kode peminjaman Anda {0}. Tenggang waktu peminjaman {1}",
item.code, tanggalTenggang.ToShortDateString())
If smsLib.SendMessage(Me.port, item.no_hp, message) Then item.konfirmasi = True
database.SaveChanges()
General.LogActivity(smsLib.log_file, "Success") Else
General.LogActivity(smsLib.log_file, "Failed") End If
Next
General.LogActivity(smsLib.log_file,
"=================================")
smsLib.log_file = "RemainderProcess_"
General.LogActivity(smsLib.log_file, "Start Reminder Process") listPeminjaman = (From p In database.peminjaman
Where p.konfirmasi = True And p.pengembalian.Count = 0 And p.denda = False
Select p).ToList()
General.LogActivity(smsLib.log_file, String.Format("{0} data
peminjaman", listPeminjaman.Count))
For Each item In listPeminjaman
If Not (item.sent_date = DateTime.Now.Date) Or IsNothing(item.sent_date) Then
General.LogActivity(smsLib.log_file,
String.Format("code {0}, tanggal {1}", item.code, item.tanggal.ToString())) Dim currentDate As DateTime = DateTime.Now
Dim settingTime As Integer =
General.GetSetting("lama_peminjaman")
Dim pDate As DateTime =
DateTime.Parse(item.tanggal.ToString()).AddDays(1)
Dim range As Integer = (currentDate - pDate).TotalDays 'pengecekan waktu tenggang -1
If (settingTime - range) = 1 Then
General.LogActivity(smsLib.log_file,
String.Format("Receiver : {0}, NIM : {1}, No :
{2}, Code Pemesanan : {3}",
item.anggota.nama, item.anggota.nim, item.no_hp, item.code))
Dim message As String = String.Format("Masa
peminjaman Anda dengan kode {0}," &
"judul {1},
akan berakhir pada tanggal {2}. " &
"Silahkan
lakukan pengembalian buku.",
item.code, item.buku.judul_buku, pDate.AddDays(settingTime - 1).ToShortDateString())
If SendMultiPageSMS(item.no_hp, message) Then item.sent_date = Date.Now
database.SaveChanges()
General.LogActivity(smsLib.log_file, "Success") Else
General.LogActivity(smsLib.log_file, "Failed") End If
'pengecekan waktu tenggang pada hari ini
ElseIf (range - settingTime) = 0 Then General.LogActivity(smsLib.log_file,
String.Format("Receiver : {0}, NIM : {1}, No :
{2}, Code Pemesanan : {3}",
item.anggota.nama, item.anggota.nim, item.no_hp, item.code))
Dim message As String = String.Format("Masa
peminjaman Anda dengan kode {0}," &
"judul {1},
akan berakhir pada hari ini {2}. " &
"Silahkan
lakukan pengembalian buku.",
If SendMultiPageSMS(item.no_hp, message) Then item.sent_date = Date.Now
database.SaveChanges()
General.LogActivity(smsLib.log_file, "Success") Else
General.LogActivity(smsLib.log_file, "Failed") End If
'pengecekan waktu tenggang telah habis dan dikenakan denda
ElseIf (range - settingTime) > 0 Then Dim settingDenda As Decimal =
General.GetSetting("denda_per_hari")
Dim denda As Integer = (range - settingTime) * settingDenda
General.LogActivity(smsLib.log_file,
String.Format("Receiver : {0}, NIM : {1}, No :
{2}, Code Pemesanan : {3}",
item.anggota.nama, item.anggota.nim, item.no_hp, item.code))
Dim message As String = String.Format("Masa
peminjaman Anda dengan kode {0}," &
"judul {1},
telah berakhir pada tanggal {2}, dengan denda {3}. " &
"Silahkan
lakukan pengembalian buku.",
item.code, item.buku.judul_buku, pDate.AddDays(settingTime - 1).ToShortDateString(), denda)
If SendMultiPageSMS(item.no_hp, message) Then item.sent_date = Date.Now
item.denda = True database.SaveChanges()
General.LogActivity(smsLib.log_file, "Success") Else
General.LogActivity(smsLib.log_file, "Failed") End If
End If End If
database.Refresh(Objects.RefreshMode.ClientWins, item) Next
General.LogActivity(smsLib.log_file,
"=================================")
End If
Catch ex As Exception
General.ErrorLog(ex.Message) End Try
'Thread.Sleep(2000)
'End While
End Sub
Private Sub ReadSMS() 'While True
Dim messages As List(Of ATLib.ShortMessage) = Nothing Try
General.LogActivity(smsLib.log_file, "Start Read SMS Process") Dim input As String = smsLib.ReadSMS(port, SIM_STORAGE)
messages = ParseMessages(input)
General.LogActivity(smsLib.log_file, String.Format("Diterima
{0} sms.", messages.Count))
If messages.Count > 0 Then For Each msg In messages Dim cmd As Integer = 0 If ValidateSMS(msg, cmd) Then If cmd = CMD_DENDA Then
General.LogActivity(smsLib.log_file, "REQUEST DENDA")
Console.WriteLine("DENDA")
Dim pesan As String() = msg.Message.Split(New Char() {" "c})
General.LogActivity(smsLib.log_file,
String.Format("Sender : {0}, message : {1}",
msg.Sender, msg.Message))
If pesan.Length = 2 Then
Dim code As String = pesan(1)
Dim peminjaman As peminjaman = (From p In database.peminjaman
Where p.code.ToLower().Equals(code.ToLower())
Select p).FirstOrDefault()
If Not IsNothing(peminjaman) Then
If peminjaman.pengembalian.Count <= 0 Then
Dim currentDate As DateTime =
DateTime.Now
Dim settingTime As Integer =
General.GetSetting("lama_peminjaman")
Dim pDate As DateTime =
DateTime.Parse(peminjaman.tanggal.ToString()).AddDays(1)
Dim range As Integer = (currentDate - pDate).TotalDays
General.LogActivity(smsLib.log_file,
String.Format("Code : {0}, Tanggal : {1}",
peminjaman.code, peminjaman.tanggal))
If (range - settingTime) > 0 Then Dim settingDenda As Decimal =
General.GetSetting("denda_per_hari")
Dim denda As Integer = (range - settingTime) * settingDenda
Dim message As String = String.Format("Denda Anda untuk peminjaman {0} sebesar Rp. {1}",
peminjaman.code, denda)
String.Format("Message : {0}", message))
If smsLib.SendMessage(Me.port, msg.Sender, message) Then
General.LogActivity(smsLib.log_file, "Success") Else
General.LogActivity(smsLib.log_file, "Failed")
End If Else
Dim message As String = String.Format("Peminjaman Anda belum melewati tenggang waktu. " &
"Batas akhir pengembalian {0}", pDate.AddDays(settingTime).ToShortDateString())
General.LogActivity(smsLib.log_file,
String.Format("Message : {0}", message))
If smsLib.SendMessage(Me.port, msg.Sender, message) Then
General.LogActivity(smsLib.log_file, "Success") Else
General.LogActivity(smsLib.log_file, "Failed")
End If End If Else
General.LogActivity(smsLib.log_file, String.Format("Kode {0} sudah di
kembalikan", code))
smsLib.SendMessage(port, msg.Sender, "Pengembalian sudah dilakukan")
End If Else
General.LogActivity(smsLib.log_file, String.Format("Kode {0} tidak ditemukan", code))
smsLib.SendMessage(port, msg.Sender,
"Code peminjaman tidak ditemukan")
End If Else
General.LogActivity(smsLib.log_file, String.Format("Format tidak benar. {0}", msg.Message))
smsLib.SendMessage(port, msg.Sender,
"Format SMS Anda salah. Format yang benar DENDA<spasi>KODE")
End If End If End If Next End If
General.LogActivity(smsLib.log_file,
"=================================")
End If
Catch ex As Exception
General.ErrorLog(ex.Message) End Try
'Thread.Sleep(2000)
End Sub
Private Function ValidateSMS(message As ATLib.ShortMessage, ByRef cmdType As Integer)
Dim check As Boolean = False
Dim pesan As String() = message.Message.Split(New Char() {" "c}) Dim cmd As String = pesan(0).ToUpper()
If (cmd = "DENDA") Then check = True
cmdType = CMD_DENDA End If
Return check End Function End Class
SMSLib.vb
Imports System.IO.Ports Imports System.Threading Imports System.Text
Public Class SMSLib
Public receiveNow As AutoResetEvent
Public log_file As String
Shared readNow As AutoResetEvent = New AutoResetEvent(False)
Public Sub New()
Me.log_file = "SMSLib_" End Sub
Public Function OpenPort(portName As String, baudRate As Integer, dataBits As Integer,
readTimeout As Integer, writeTimeout As Integer) receiveNow = New AutoResetEvent(True)
Dim port As System.IO.Ports.SerialPort = New SerialPort() Try
port.PortName = portName port.BaudRate = baudRate port.DataBits = dataBits port.ReadTimeout = readTimeout port.WriteTimeout = writeTimeout
port.StopBits = StopBits.One port.Parity = Parity.None
port.Encoding = Encoding.GetEncoding("iso-8859-1")
AddHandler port.DataReceived, AddressOf port_DataReceived port.Open()
port.DtrEnable = True port.RtsEnable = True Catch ex As Exception
General.ErrorMessage(ex.Message) Throw ex
End Try
Return port End Function
Public Sub port_DataReceived(sender As Object, e As
Try
If e.EventType = SerialData.Chars Then receiveNow.Set()
End If
Catch ex As Exception
Throw ex End Try End Sub
Public Function ReadResponse(port As SerialPort, timeout As Integer) Dim buffer As String = String.Empty
Try Do
If receiveNow.WaitOne(timeout, False) Then Dim t As String = port.ReadExisting() buffer &= t
Else
If buffer.Length > 0 Then
Throw New ApplicationException("Response received is incomplete.")
Else
Throw New ApplicationException("No data received from phone.")
End If End If
Loop While (Not buffer.EndsWith("\r\nOK\r\n") And Not buffer.EndsWith("\r\n> ") And Not buffer.EndsWith("\r\nERROR\r\n")) Catch ex As Exception
Throw ex End Try
Return buffer End Function
Public Function ExecCommand(port As SerialPort, command As String, responseTimeout As Integer, errorMessage As String)
Try
port.DiscardOutBuffer() port.DiscardInBuffer() receiveNow.Reset()
port.Write(command & "\r")
Dim input As String = ReadResponse(port, responseTimeout) If ((input.Length = 0) Or Not (input.EndsWith("\r\nOK\r\n") Or input.EndsWith("\r\n> "))) Then
Throw New ApplicationException("No success message was received.")
End If
Return input Catch ex As Exception
Throw New ApplicationException(errorMessage, ex) End Try
End Function
Public Function SendMessage(port As SerialPort, PhoneNo As String, Message As String)
Dim isSend As Boolean = False Try
recievedData = ExecCommand(port, "AT+CMGF=1", 1000, "Failed to set message format.")
Dim command As String = "AT+CMGS=\"" + PhoneNo + " \ ""
recievedData = ExecCommand(port, command, 1000, "Failed to accept phoneNo")
command = Message & Char.ConvertFromUtf32(26) & "\r"
recievedData = ExecCommand(port, command, 20000, "Failed to send message")
If recievedData.EndsWith("\r\nOK\r\n") Then isSend = True
ElseIf recievedData.Contains("ERROR") Then isSend = False
End If
General.LogActivity(Me.log_file, String.Format("{0} {1} {2}", PhoneNo, Message, isSend))
Return isSend
Catch ex As Exception
General.LogActivity(Me.log_file, String.Format("{0} {1} {2}
{3}", PhoneNo, Message, isSend, ex.Message))
Throw ex End Try End Function
Public Function ReadSMS(port As SerialPort, sim_storage As Boolean) Try
General.LogActivity(Me.log_file, "Read SMS") 'Check connection
ExecCommand(port, "AT", 1000, "No phone connected") 'Use message format "Text mode"
ExecCommand(port, "AT+CMGF=1", 1000, "Failed to set message format.")
If sim_storage Then
ExecCommand(port, "AT+CPMS=""SM""", 1000, "Failed to select message storage")
Else
ExecCommand(port, "AT+CPMS=""ME""", 1000, "Failed to select message storage")
End If
'Read the messages
Dim input As String = ExecCommand(port, "AT+CMGL=""REC UNREAD""", 5000, "Failed to read the messages.")
Return input Catch ex As Exception
General.LogActivity(Me.log_file, ex.Message) Return Nothing
End Try End Function
Public Sub ClosePort(ByRef port As SerialPort) Try
port.Close()
RemoveHandler port.DataReceived, AddressOf port_DataReceived port = Nothing
Catch ex As Exception