Aplikasi Penjualan dengan VB.net dan MariaDB V1 : Membuat Form Transaksi Penjualan Part 3


Assalamu'alaikum Wr Wb

Selamat Datang di Web Sibukngoding.com. Pada kesempatan kali ini saya akan melanjutkan seri pembuatan Aplikasi Penjualan dengan VB.net dan database MariaDB. Pada pertemuan sebelumya telah saya jelaskan pembuatan transaksi penjualan yang saya bagi dalam 2 part yaitu form dan sourcecode. Untuk source code secara keseluruhan sebagai berikut:
Imports System.Data.Odbc
Public Class FormPenjualan
    Sub bersihkanbarang()
        TxtKodeBarang.Clear()
        TxtNamaBarang.Clear()
        TxtHarga.Text = "0"
        TxtJumlah.Text = "0"
        TxtSubTotal.Text = "0"
        TxtKodeBarang.Focus()
    End Sub
    '--------------------------------------------
    Sub Nootomatis()
        Koneksi()
        Dim Urutan As String
        Dim Hitung, Cari As Long
        CMD = New OdbcCommand("Select * from penjualan where no_penjualan in (select max(no_penjualan) from penjualan)", Conn)
        RD = CMD.ExecuteReader
        RD.Read()
        If Not RD.HasRows Then
            Urutan = "PJ" & Date.Now.Year & "0001"
        Else
            Cari = Microsoft.VisualBasic.Right(RD.GetString(0), 4)
            If Microsoft.VisualBasic.Left(RD.GetString(0), 6) <> "PJ" & Date.Now.Year Then
                Urutan = "PJ" & Date.Now.Year & "0001"
            Else
                Hitung = Microsoft.VisualBasic.Right(RD.GetString(0), 4) + 1
                Urutan = "PJ" & Date.Now.Year & Microsoft.VisualBasic.Right("0000" & Hitung, 4)
            End If
        End If
        RD.Close()
        TxtNoPenjualan.Text = Urutan
        Conn.Close()
    End Sub
    '----------------------------------------------------------
    Sub AutoNumberRowsForGrid()
        If DGV IsNot Nothing Then
            Dim count As Integer = 0
            While (count <= (DGV.Rows.Count - 1))
                DGV.Rows(count).HeaderCell.Value = String.Format((count + 1).ToString(), "0")
                count += 1
            End While
        End If
    End Sub
    '------------------------------------------------------------
    Sub BuatKolom()
        With DGV
            .Columns.Add("Kode_Barang", "Kode_Barang")
            .Columns.Add("Nama_Barang", "Nama_Barang")
            .Columns.Add("Harga", "Harga")
            .Columns.Add("Jumlah", "Jumlah")
            .Columns.Add("SubTotal", "SubTotal")
                           '---------------------------------------------
            .Columns("Kode_Barang").Width = 80
            .Columns("Nama_Barang").Width = 150
            .Columns("Harga").Width = 90
            .Columns("Jumlah").Width = 70
            .Columns("SubTotal").Width = 90
        End With
    End Sub
    '-------------------------------------------------------------
    Sub Autocompletebarang()
        Koneksi()
        CMD = New OdbcCommand("SELECT kode_barang FROM barang", Conn)
        RD = CMD.ExecuteReader
        While RD.Read
            With TxtKodeBarang
                .AutoCompleteCustomSource.Add(RD(0).ToString)
                .AutoCompleteMode = AutoCompleteMode.Suggest
                .AutoCompleteSource = AutoCompleteSource.CustomSource
            End With
        End While
        Conn.Close()
    End Sub
    '------------------------------------------------------------
    Sub Autocompletepelanggan()
        Koneksi()
        CMD = New OdbcCommand("SELECT kode_pelanggan FROM pelanggan", Conn)
        RD = CMD.ExecuteReader
        While RD.Read
            With TxtKodePelanggan
                .AutoCompleteCustomSource.Add(RD(0).ToString)
                .AutoCompleteMode = AutoCompleteMode.Suggest
                .AutoCompleteSource = AutoCompleteSource.CustomSource
            End With
        End While
        Conn.Close()
    End Sub
    '----------------------------------------------
    Sub awal()
        Nootomatis()
        TxtTanggal.Text = Format(Now, "dd MMMM yyyy")
        TxtNoPenjualan.Enabled = False
        TxtTanggal.Enabled = False
        rbnonpelanggan.Checked = True
        TxtKodePelanggan.Enabled = False
        TxtNamaPelanggan.Enabled = False
        TxtKodePelanggan.Text = "000"
        TxtNamaPelanggan.Text = "-"
        TxtNamaBarang.Enabled = False
        TxtHarga.Enabled = False
        TxtSubTotal.Enabled = False
        txttotalbarang.Text = "0"
        txttotalharga.Text = "0"
        txttotalbayar.Text = "0"
        txtdiskon.Text = "0"
        txttotalbayar.Text = "0"
        txtdibayar.Text = "0"
        txtkembali.Text = "0"
        txttotalbarang.Enabled = False
        txttotalharga.Enabled = False
        txttotalbayar.Enabled = False
        txtkembali.Enabled = False
        DGV.Rows.Clear()
        bersihkanbarang()
    End Sub
    '---------------------------------------------------------
    Private Sub FormPenjualan_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        BuatKolom()
        Autocompletebarang()
        Autocompletepelanggan()
        awal()
    End Sub
    '-------------------------------------------------------------------
    Private Sub TxtKodeBarang_KeyDown(sender As Object, e As KeyEventArgs) Handles TxtKodeBarang.KeyDown
        If e.KeyCode = Keys.Enter Then
            Koneksi()
            CMD = New OdbcCommand("SELECT * FROM barang WHERE kode_barang = '" + TxtKodeBarang.Text + "'", Conn)
            RD = CMD.ExecuteReader
            If RD.Read Then
                TxtKodeBarang.Text = RD(0).ToString
                TxtNamaBarang.Text = RD(1).ToString
                TxtHarga.Text = RD(4).ToString
                Conn.Close()
                TxtJumlah.Focus()
            Else
                MsgBox("Kode Barang Yang Anda Inputkan Salah")
                TxtKodeBarang.Focus()
            End If
        End If
    End Sub
    '------------------------------------------------------------------------
    Private Sub btplus_Click(sender As Object, e As EventArgs) Handles btplus.Click
        If Len(Trim(TxtKodeBarang.Text)) = 0 Then
            MsgBox("Kode Barang Belum Diisi", MsgBoxStyle.Information)
            TxtKodeBarang.Focus()
        ElseIf Len(Trim(TxtNamaBarang.Text)) = 0 Then
            MsgBox("Data Belum Lengkap", MsgBoxStyle.Information)
            TxtKodeBarang.Focus()
        ElseIf Len(Trim(TxtHarga.Text)) = 0 Then
            MsgBox("Data Belum Lengkap", MsgBoxStyle.Information)
            TxtKodeBarang.Focus()
        ElseIf (Len(Trim(TxtJumlah.Text)) = 0) Or (TxtJumlah.Text = "0") Then
            MsgBox("Jumlah Belum dimasukkan", MsgBoxStyle.Information)
            TxtJumlah.Focus()
        ElseIf Len(Trim(TxtSubTotal.Text)) = 0 Then
            MsgBox("Data Belum Lengkap", MsgBoxStyle.Information)
            TxtJumlah.Focus()
        Else
            Try
                Dim rownumber As Integer = DGV.Rows.Add()
                DGV.Rows.Item(rownumber).Cells(0).Value = TxtKodeBarang.Text
                DGV.Rows.Item(rownumber).Cells(1).Value = TxtNamaBarang.Text
                DGV.Rows.Item(rownumber).Cells(2).Value = TxtHarga.Text
                DGV.Rows.Item(rownumber).Cells(3).Value = TxtJumlah.Text
                DGV.Rows.Item(rownumber).Cells(4).Value = TxtSubTotal.Text
                'Hitung Total Harga di datagrid
                Dim totalharga, totalbarang As Integer
                totalharga = 0
                totalbarang = 0
                For t As Integer = 0 To DGV.Rows.Count - 1
                    totalharga = totalharga + Val(DGV.Rows(t).Cells(4).Value)
                    totalbarang = totalbarang + Val(DGV.Rows(t).Cells(3).Value)
                Next
                txttotalharga.Text = totalharga
                txttotalbarang.Text = totalbarang
                txttotalbayar.Text = totalharga
                AutoNumberRowsForGrid()
                bersihkanbarang()
            Catch ex As Exception
                MsgBox("Gagal !!!!", MsgBoxStyle.Information)
            End Try
        End If
    End Sub
    '----------------------------------------------------------------------
    Private Sub btmin_Click(sender As Object, e As EventArgs) Handles btmin.Click
        Try
            If DGV.CurrentRow.Index <> DGV.NewRowIndex Then
                DGV.Rows.RemoveAt(DGV.CurrentRow.Index)
                'Hitung Total Harga di datagrid
                Dim totalharga, totalbarang As Integer
                totalharga = 0
                totalbarang = 0
                For t As Integer = 0 To DGV.Rows.Count - 1
                    totalharga = totalharga + Val(DGV.Rows(t).Cells(4).Value)
                    totalbarang = totalbarang + Val(DGV.Rows(t).Cells(3).Value)
                Next
                txttotalharga.Text = totalharga
                txttotalbarang.Text = totalbarang
                txttotalbayar.Text = totalharga
            End If
        Catch ex As Exception
            MsgBox("Tidak Ada Data yang DiHapus", MsgBoxStyle.Information)
        End Try
    End Sub
    '--------------------------------------------------------------------------
    Private Sub TxtKodePelanggan_KeyDown(sender As Object, e As KeyEventArgs) Handles TxtKodePelanggan.KeyDown
        If e.KeyCode = Keys.Enter Then
            Koneksi()
            CMD = New OdbcCommand("SELECT * FROM pelanggan WHERE kode_pelanggan = '" + TxtKodePelanggan.Text + "'", Conn)
            RD = CMD.ExecuteReader
            If RD.Read Then
                TxtKodePelanggan.Text = RD(0).ToString
                TxtNamaPelanggan.Text = RD(1).ToString
            End If
            Conn.Close()
            TxtKodeBarang.Focus()
        End If
    End Sub
    '----------------------------------------------------------------------------
    Private Sub TxtJumlah_KeyDown(sender As Object, e As KeyEventArgs) Handles TxtJumlah.KeyDown
        If e.KeyCode = Keys.Enter Then
            'Rumus Mencari Sub Total
            TxtSubTotal.Text = Val(TxtHarga.Text) * Val(TxtJumlah.Text)
            btplus.Focus()
        End If
    End Sub
    '-----------------------------------------------------------------------------------
    Private Sub TxtJumlah_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TxtJumlah.KeyPress
        'Agar hanya angka yang bisa diinputkan
        If Not IsNumeric(e.KeyChar) And e.KeyChar <> Chr(13) And e.KeyChar <> vbBack Then e.Handled = True
    End Sub
    '------------------------------------------------------------
    Private Sub txtdiskon_KeyDown(sender As Object, e As KeyEventArgs) Handles txtdiskon.KeyDown
        If e.KeyCode = Keys.Enter Then
            'Rumus mencari total bayar setelah didiskon
            txttotalbayar.Text = Val(txttotalharga.Text) - ((Val(txtdiskon.Text) / 100) * Val(txttotalharga.Text))
            txtdibayar.Focus()
        End If
    End Sub
    '-------------------------------------------------------------------------
    Private Sub txtdiskon_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtdiskon.KeyPress
        'Agar hanya angka yang bisa diinputkan
        If Not IsNumeric(e.KeyChar) And e.KeyChar <> Chr(13) And e.KeyChar <> vbBack Then e.Handled = True
    End Sub
    '----------------------------------------------------------------------
    Private Sub txtdibayar_KeyDown(sender As Object, e As KeyEventArgs) Handles txtdibayar.KeyDown
        If e.KeyCode = Keys.Enter Then
            If (Len(Trim(txtdibayar.Text)) = 0) Or (txtdibayar.Text = "0") Then
                MsgBox("Data Belum Diisi...", MsgBoxStyle.Information)
                txtdibayar.Focus()
            ElseIf Val(txttotalbayar.Text) > Val(txtdibayar.Text) Then
                MsgBox("Uang yang dimasukkan kurang.....", MsgBoxStyle.Information)
                txtdibayar.Focus()
            Else
                'Rumus mencari uang kembali
                txtkembali.Text = Val(txtdibayar.Text) - Val(txttotalbayar.Text)
                btsimpan.Focus()
            End If
        End If
    End Sub
    '-------------------------------------------------------------------------
    Private Sub txtdibayar_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtdibayar.KeyPress
        'Agar hanya angka yang bisa diinputkan
        If Not IsNumeric(e.KeyChar) And e.KeyChar <> Chr(13) And e.KeyChar <> vbBack Then e.Handled = True
    End Sub
    '-------------------------------------------------------------------------------
    Private Sub rbpelanggan_CheckedChanged(sender As Object, e As EventArgs) Handles rbpelanggan.CheckedChanged
        TxtKodePelanggan.Enabled = True
        TxtKodePelanggan.Clear()
        TxtNamaPelanggan.Clear()
        TxtKodePelanggan.Focus()
    End Sub
    '--------------------------------------------------------------------------------
    Private Sub rbnonpelanggan_CheckedChanged(sender As Object, e As EventArgs) Handles rbnonpelanggan.CheckedChanged
        TxtKodePelanggan.Enabled = False
        TxtKodePelanggan.Text = "000"
        TxtNamaPelanggan.Text = "-"
        TxtKodeBarang.Focus()
    End Sub
    '-----------------------------------------------------------------------------------
    Private Sub btsimpan_Click(sender As Object, e As EventArgs) Handles btsimpan.Click
        Try
            'validasi jika data masih kosong
           If Len(Trim(TxtKodePelanggan.Text)) = 0 Then
                MsgBox("Data Pelanggan Belum diinputkan...", MsgBoxStyle.Information)
                TxtKodePelanggan.Focus()
            ElseIf (Len(Trim(txtdibayar.Text)) = 0) Or (txtdibayar.Text = "0") Then
                MsgBox("Transaksi belum dibayar...", MsgBoxStyle.Information)
                txtdibayar.Focus()
            Else
                'simpan data non pelanggan
                Koneksi()
                CMD = New OdbcCommand("SELECT kode_pelanggan FROM pelanggan WHERE kode_pelanggan = '" + TxtKodePelanggan.Text + "'", Conn)
                RD = CMD.ExecuteReader
                RD.Read()
                If Not RD.HasRows Then
                    Koneksi()
                    CMD = New OdbcCommand("INSERT INTO pelanggan VALUES (?,?,?,?)", Conn)
                    With CMD
                        .Parameters.AddWithValue("?", TxtKodePelanggan.Text)
                        .Parameters.AddWithValue("?", TxtNamaPelanggan.Text)
                        .Parameters.AddWithValue("?", "-")
                        .Parameters.AddWithValue("?", "-")
                        .ExecuteNonQuery()
                    End With
                    Conn.Close()
                End If
                'simpan Data ke tabel penjualan
                Koneksi()
                CMD = New OdbcCommand("INSERT INTO penjualan VALUES (?,?,?,?,?)", Conn)
                With CMD
                    .Parameters.AddWithValue("?", TxtNoPenjualan.Text)
                    .Parameters.AddWithValue("?", Format(Now.Date, "yyyy-MM-dd"))
                    .Parameters.AddWithValue("?", TxtKodePelanggan.Text)
                    .Parameters.AddWithValue("?", txttotalbarang.Text)
                    .Parameters.AddWithValue("?", txttotalharga.Text)
                    .ExecuteNonQuery()
                End With
                Conn.Close()
                'Simpan Data ke tabel detail penjualan
                Koneksi()
                For i As Integer = 0 To DGV.Rows.Count - 1
                    CMD = New OdbcCommand("INSERT INTO detail_penjualan VALUES (?,?,?,?,?)", Conn)
                    With CMD
                        .Parameters.AddWithValue("?", TxtNoPenjualan.Text)
                        .Parameters.AddWithValue("?", DGV.Rows(i).Cells(0).Value)
                        .Parameters.AddWithValue("?", DGV.Rows(i).Cells(3).Value)
                        .Parameters.AddWithValue("?", DGV.Rows(i).Cells(2).Value)
                        .Parameters.AddWithValue("?", DGV.Rows(i).Cells(4).Value)
                        .ExecuteNonQuery()
                    End With
                Next
                awal()
                MsgBox("Data Berhasil disimpan.....", MsgBoxStyle.Information, "Informasi")
                End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
    '-----------------------------------------------------------
    Private Sub btkeluar_Click(sender As Object, e As EventArgs) Handles btkeluar.Click
        Me.Close()
    End Sub
End Class

Untuk hasil setelah di run sebagai berikut
Untuk tampilan awal, tanggal akan terisi otomatis sesuai tanggal transaksinya dan nomor penjualan akan terisi otomatis. Kita bisa pilih apakah transaksi tersebut untuk pelanggan atau non pelanggan dengan memilih radio buttonnya.  Jika kita pilih pelanggan, maka kursor akan aktif di kode pelanggan dan kita bisa memilih pelanggan dari daftar pelanggan.
Jika sudah dipilih kode pelanggannya, selanjutnya dienter lalu nama pelanggan otomatis akan terisi sesuai kode pelanggan yang diambil dari tabel pelanggan. Dan kursor akan aktif di kode barang dan kita pilih barang yang akan kita masukkan.
Setelah kode dimasukkan, kita enter setelah itu nama barang dan harga akan muncul dan kursor akan aktif di bagian jumlah. Dan kita isikan jumlah barangnya lalu dienter sampai muncul sub total.
Setelah kode dimasukkan, kita enter setelah itu nama barang dan harga akan muncul dan kursor akan aktif di bagian jumlah. Dan kita isikan jumlah barangnya lalu dienter sampai muncul sub total.
Setelah kita masukkan jumlah barangnya, kita klik tombol +(Plus) dan data barang akan masuk ke dalam datagridview. Kita bisa menambahkan data barang dengan cara diatas. Jika ingin menghapus barang yang ada di Datagridview, kita klik tombol  -(Min).
Setelah selesai memasukkan barang, kursor akan otomatis ke txtdiskon. Kita bisa memasukkan diskonnya jika ada dan dienter lalu kursor akan pindah ke txtdibayar. Kita masukkan uang yang dibayarkan dan dienter
Setelah itu di klik simpan dan data akan masuk ke dalam database. Dan tampilan akan kembali ke awal sama saat program pertama kali dijalankan.
Demikian contoh pembuatan Transaksi penjualan yang bisa saya sampaikan. Silahkan dimodifikasi sesuai selera anda dan jika ada pertanyaan bisa ditanyakan di komentar. Untuk cetak nota penjualan InsyaAllah akan saya post di postingan berikutnya.

Terimakasih atas kunjungannya, Selamat belajar dan jangan mudah menyerah.

Wassalamu’alaikum Wr Wb

Comments