예제 #1
0
class SmsFrame(wx.Dialog):
	"""docstring for SmsFrame"""
	def __init__(self, *arg, **kwargs):
		super(SmsFrame, self).__init__(*arg, **kwargs, size=(700, 500))
		panel = wx.Panel(self)
		panel.SetBackgroundColour(wx.WHITE)
		wx.StaticText(self, -1, "Penerima", pos=(10, 10))
		self.nomor  = wx.TextCtrl(self, -1, pos=(10, 40), size=(300, 30))
		self.boxmsg = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE, pos=(330, 40), size=(330, 350))
		self.send = wx.Button(self,  -1, "Kirim", pos=(330, 400))
		wx.Button(self, -1, "Batal", pos=(420, 400))
		self.pilihb = wx.Button(self, -1 , "Pilih", pos=(510, 400))
		self.pilihb.Bind(wx.EVT_BUTTON, self.pilih)
		self.send.Bind(wx.EVT_BUTTON, self.kirim)

		self.dataOlv = ObjectListView(self, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER, pos=(10, 100), size=(300,350))
		self.dataOlv.SetColumns([
			ColumnDefn("No", "left", 150, "no_telp"),
			ColumnDefn("Nama", "left", 100, "nama")
			])
		query = ("SELECT nama_pel, no_telp FROM tb_member")
		stmt = ''
		hasil = connector.Execute(query, stmt, 4)
		sql = hasil["Data"]
		data = []
		for i in sql:
			dict = {"no_telp": i[0], "nama": i[1]} 
			data.append(dict)

		self.dataOlv.SetObjects(data)

		self.SetTitle("Sms Gateway")
		self.Show(True)
	def kirim(self, e):
		no_telp = self.nomor.GetValue()
		msg = self.boxmsg.GetValue()
		
		account_sid = "AC3cddc95d61ca0bb2e33dc5f8b48c93e8"
		auth_token = "f8d01a882f7e58b8b87d34fe1c6f1865"

		client = Client(account_sid, auth_token)

		message = client.messages.create(
			        to=no_telp,
			        from_="+15863718428",
			        body=msg
			    )
			    
		tglhari = datetime.datetime.now().date()
		query = ("INSERT INTO tb_sms_terkirim (status, no_telp, tanggal, keterangan) VALUES (%s,%s,%s,%s)")
		stmt = ("terkirim", no_telp, tglhari, msg)
		connector.Execute(query, stmt, 1)
	def pilih(self, e):
		ind = self.dataOlv.GetFirstSelected()
		if ind >= 0 :
			self.item = self.dataOlv.GetItem(ind, 1)
			self.nomor.SetValue(self.item.GetText())
예제 #2
0
class TabTwo(wx.Panel):
    """docstring for TabTwo"""
    capture = ''

    def __init__(self, parent, capture=capture):
        wx.Panel.__init__(self, parent)

        self.photoDefault = "images/no_webcam.jpg"
        self.pathp = ''

        #pic = wx.Image(self.photoDefault, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
        #wx.StaticBitmap(self, -1, pic, (50,20), (1000,300))
        bitmap = wx.Bitmap(self.photoDefault)
        bitmap = scale_bitmap(bitmap, 640, 380)
        control = wx.StaticBitmap(self, -1, bitmap)
        control.SetPosition((50, 280))  #50, 420

        self.text = wx.StaticText(self, -1, "B805WYN", (790, 280))
        font = wx.Font(20, wx.DECORATIVE, wx.NORMAL, wx.NORMAL)
        self.text.SetFont(font)

        #Button
        self.btnOpenFile = wx.Button(self,
                                     -1,
                                     "Open File",
                                     pos=(720, 320),
                                     size=(120, 30))
        self.btnStart = wx.Button(self,
                                  -1,
                                  "Start",
                                  pos=(720, 350),
                                  size=(120, 30))
        self.btnStop = wx.Button(self,
                                 -1,
                                 "Stop",
                                 pos=(720, 350),
                                 size=(120, 30))
        self.btnRecog = wx.Button(self,
                                  -1,
                                  "Recognize",
                                  pos=(720, 380),
                                  size=(120, 30))
        self.btntambahData = wx.Button(self,
                                       -1,
                                       "Tambah Data",
                                       pos=(850, 320),
                                       size=(120, 30))
        self.btnKepen = wx.Button(self,
                                  -1,
                                  "Tambah Kepentingan",
                                  pos=(850, 350),
                                  size=(120, 30))

        #

        #event
        self.btnStop.Hide()
        self.btnStart.Bind(wx.EVT_BUTTON, self.start)
        self.btnStop.Bind(wx.EVT_BUTTON, self.stop)
        self.btnOpenFile.Bind(wx.EVT_BUTTON, self.openFile)
        self.btnRecog.Bind(wx.EVT_BUTTON, self.recognition)
        self.btnKepen.Bind(wx.EVT_BUTTON, self.kepentingan)
        self.btntambahData.Bind(wx.EVT_BUTTON, self.tambahData)

        #bx = wx.StaticBox(self, 1, pos=(690,9), size=(300, 140))
        #customize
        self.btnStart.SetBitmap(wx.Bitmap("images/rec.png"))
        self.btnStop.SetBitmap(wx.Bitmap("images/stop.png"))
        self.btnOpenFile.SetBitmap(wx.Bitmap("images/folder(1).png"))
        self.btnRecog.SetBitmap(wx.Bitmap("images/eye-button.png"))
        #camera setup

        #videoWarper = wx.StaticBox(self, label="Video",size=(400,300))
        #videoBoxSizer = wx.StaticBoxSizer(videoWarper, wx.VERTICAL)

        parent.Centre()
        self.Show()

        #hasil Recog
        text = wx.StaticText(self, -1, "Nomor Plat     :", (1020, 30))
        text = wx.StaticText(self, -1, "Daerah             :", (1020, 50))

        self.plateNumberPlat = wx.StaticText(self, -1, "Unknown", (1140, 30))
        daerahPlat = wx.StaticText(self, -1, "Unknown", (1140, 50))

        #-----Database------
        text = wx.StaticText(self, -1, "Name               :", (1020, 70))
        text = wx.StaticText(self, -1, "Date Added     :", (1020, 90))
        text = wx.StaticText(self, -1, "Latest Visit       :", (1020, 110))
        text = wx.StaticText(self, -1, "Visit                  :", (1020, 130))
        text = wx.StaticText(self, -1, "Kepentingan   :", (1020, 150))
        text = wx.StaticText(self, -1, "Tanggal Rekom  :", (1020, 150))

        self.nameDatabaseRecog = wx.StaticText(self, -1, "Unknown", (1140, 70))
        self.dateAddedRecog = wx.StaticText(self, -1, "Unknown", (1140, 90))
        self.latestVisitDatabaseRecog = wx.StaticText(self, -1, "Unknown",
                                                      (1140, 110))
        self.visitDatabaseRecog = wx.StaticText(self, -1, "Unknown",
                                                (1140, 130))
        self.kepentinganText = wx.StaticText(self, -1, "Unknown", (1140, 150))
        self.rekomendasiText = wx.StaticText(self, -1, "Unknown", (1140, 170))

        #end Recog
        #list Recognition
        self.dataOlv = ObjectListView(self,
                                      -1,
                                      style=wx.LC_REPORT | wx.SUNKEN_BORDER,
                                      pos=(50, 20),
                                      size=(950, 250))
        #list candidates
        self.dataOlvCand = ObjectListView(self,
                                          -1,
                                          style=wx.LC_REPORT
                                          | wx.SUNKEN_BORDER,
                                          pos=(1020, 270),
                                          size=(310, 200))
        self.dataMobilTampil = []
        #List Credit Digunakan
        labelCredit = wx.StaticText(self,
                                    -1,
                                    "Credit 2000 / Month",
                                    pos=(1020, 503))
        self.dataOlvCre = ObjectListView(self,
                                         -1,
                                         style=wx.LC_REPORT | wx.SUNKEN_BORDER,
                                         pos=(1020, 520),
                                         size=(320, 150))
        self.dataCredit = []
        self.btnRecog.Disable()

    def tambahData(self, e):
        ind = self.dataOlv.GetFirstSelected()
        if ind >= 0:
            self.item = self.dataOlv.GetItem(ind)
        print(ind)
        app = data_kendaraan.data_Kendaraan(self)
        app.Show(True)

    def kepentingan(self, e):
        hasil = kp.KepentinganFrame(self)
        hasil.Show(True)

    def start(self, e):
        self.capture = cv2.VideoCapture(0)
        videoFrame = wx.Panel(self, -1, pos=(50, 280), size=(640, 380))
        ShowCapture(videoFrame, self.capture)
        self.btnStart.Hide()
        self.btnStop.Show()
        self.btnRecog.Enable()
        self.pathp = ''

    def stop(self, e):
        self.btnStart.Show()
        self.btnStop.Hide()
        bitmap = wx.Bitmap(self.photoDefault)
        bitmap = scale_bitmap(bitmap, 640, 380)
        control = wx.StaticBitmap(self, -1, bitmap)
        control.SetPosition((50, 280))
        self.btnRecog.Disable()

        self.capture.release()

    def openFile(self, e):
        openFileDialog = wx.FileDialog(self, "Open", "", "",
                                       "Image File (*.jpg, *.png)|*.jpg",
                                       wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)

        openFileDialog.ShowModal()
        #Pake If kjklnjaksjdhkdj
        self.pathp = openFileDialog.GetPath()
        bitmap = wx.Bitmap(openFileDialog.GetPath())
        bitmap = scale_bitmap(bitmap, 640, 380)
        control = wx.StaticBitmap(self, -1, bitmap)
        control.SetPosition((50, 280))
        openFileDialog.Destroy()
        self.btnRecog.Enable()

    def recognition(self, e):

        print(self.pathp)
        if self.pathp == '':
            self.ret, self.image = self.capture.read()
            print(self.ret)
            print(self.image)
            if os.path.exists("itemp\plate\plat1.jpg"):
                self.imageName = "itemp\plate\plat_{0}.jpg".format(
                    int(time.time()))
                cv2.imwrite(self.imageName, self.image)
                self.jsonName = "itemp\json\json_{0}.json".format(
                    int(time.time()))

            else:
                self.imageName = "itemp\plate\plat1.jpg"
                cv2.imwrite(self.imageName, self.image)
                self.jsonName = "itemp\json\json1.json"

            bitmap = wx.Bitmap(self.imageName)
            bitmap = scale_bitmap(bitmap, 280, 200)
            control = wx.StaticBitmap(self, -1, bitmap)
            control.SetPosition((720, 420))
            IMAGE_PATH = self.imageName
        else:
            IMAGE_PATH = self.pathp
        SECRET_KEY = 'sk_42b18388bc96def5ad015425'
        with open(IMAGE_PATH, 'rb') as image_file:
            img_base64 = base64.b64encode(image_file.read())
        url = 'https://api.openalpr.com/v2/recognize_bytes?recognize_vehicle=1&country=id&secret_key=%s' % (
            SECRET_KEY)
        try:
            r = requests.post(url, data=img_base64)
        except Exception as e:

            print("Error: Kendaraan Tidak Ditemukan")
            return
        data_file = json.dumps(r.json(), indent=2)

        data = json.loads(str(data_file))
        hasil = data['results'][0]
        tanggalini = datetime.datetime.now()
        query = (
            "SELECT keterangan2, rekomendasi FROM tb_kunjungan WHERE plate = %s and tgl_kunjungan = %s"
        )
        stmt = (hasil['plate'], "{0}".format(str(tanggalini)[:10]))
        datarek = connector.Execute(query, stmt, 4)
        hasilrek = datarek["Data"]
        print(hasilrek)
        if len(hasilrek) > 0:
            self.kepentinganText.SetLabel(str(hasilrek[0][0]))
            self.rekomendasiText.SetLabel(str(hasilrek[0][1]))
        else:
            self.kepentinganText.SetLabel("Belum Terdaftar")
            self.rekomendasiText.SetLabel("Belum Terdaftar")

        query = ("SELECT * FROM tb_member WHERE plate IN (%s)")
        stmt = (hasil['plate'])
        hasilSql = connector.Execute(query, stmt, 3)
        dataSql = hasilSql['Data']
        print(dataSql)
        if len(dataSql) > 0:
            self.dict = {
                "camera": "Camera 1",
                "time": str(datetime.datetime.now().time()),
                "merk": dataSql[0][5],
                "perusahaan": dataSql[0][6],
                "model": dataSql[0][7],
                "warna": dataSql[0][4],
                "tahun": dataSql[0][8],
                "plate": hasil['plate']
            }
        else:
            self.plateMobil = hasil['plate']
            self.warnaMobil = hasil["vehicle"]['color'][0]['name'].upper()
            self.merkMobil = hasil["vehicle"]['make_model'][0]['name'].upper(),
            self.perusahaanMobil = hasil["vehicle"]['make'][0]['name'].upper()
            self.tahunMobil = str(hasil["vehicle"]['year'][0]['name'])
            self.modelMobil = hasil["vehicle"]['body_type'][0]['name'].upper()
            self.dict = {
                "camera": "Camera 1",
                "time": str(datetime.datetime.now().time()),
                "merk": self.merkMobil,
                "perusahaan": self.perusahaanMobil,
                "model": self.modelMobil,
                "warna": self.warnaMobil,
                "tahun": self.tahunMobil,
                "plate": self.plateMobil
            }

        self.plateNumberPlat.SetLabel(hasil['plate'])
        self.text.SetLabel(hasil['plate'])
        if len(dataSql) > 0:
            tanggal = str(dataSql[0][2])
            self.nameDatabaseRecog.SetLabel(dataSql[0][1])
            self.dateAddedRecog.SetLabel("{0}".format(tanggal[:10]))
            self.latestVisitDatabaseRecog.SetLabel(str(dataSql[0][11]))

            query = ("SELECT * FROM tb_kunjungan WHERE plate IN (%s)")
            stmt = (hasil['plate'])
            jmlSql = connector.Execute(query, stmt, 3)
            datajmlh = jmlSql['Data']
            self.visitDatabaseRecog.SetLabel(str(len(datajmlh) + 1))

            query = (
                "INSERT INTO tb_kunjungan (plate, tgl_kunjungan) VALUES (%s, %s)"
            )
            stmt = (dataSql[0][0], datetime.datetime.now())
            hasilSql = connector.Execute(query, stmt, 1)

            query = ("UPDATE tb_member SET latest_visit = %s WHERE plate = %s")
            stmt = (datetime.datetime.now(), dataSql[0][0])
            hasilSql = connector.Execute(query, stmt, 1)

        else:
            self.nameDatabaseRecog.SetLabel("Tidak Terdaftar")
            self.dateAddedRecog.SetLabel("Tidak Terdaftar")
            self.latestVisitDatabaseRecog.SetLabel("Hari Ini")
            self.visitDatabaseRecog.SetLabel("1")

            query = (
                "INSERT INTO tb_kunjungan (plate, tgl_kunjungan) VALUES (%s, %s)"
            )
            stmt = (hasil['plate'], datetime.datetime.now())
            hasilSql = connector.Execute(query, stmt, 1)

        candidates = hasil['candidates']
        e = []
        for i in candidates:
            Candidates = {
                'confidences': str(int(i['confidence'])) + " " + "%",
                'plate': i['plate']
            }
            e.append(Candidates)

        self.dataOlv.SetColumns([
            ColumnDefn("Camera", "left", 100, "camera"),
            ColumnDefn("Time", "left", 100, "time"),
            ColumnDefn("Plate", "left", 100, "plate"),
            ColumnDefn("Merk", "left", 100, "merk"),
            ColumnDefn("Perusahaan", "left", 102, "perusahaan"),
            ColumnDefn("Model", "left", 100, "model"),
            ColumnDefn("Warna", "left", 100, "warna"),
            ColumnDefn("Tahun", "left", 100, "tahun")
        ])

        self.dataMobilTampil.append(self.dict)
        self.dataOlv.SetObjects(self.dataMobilTampil)

        self.dataOlvCand.SetColumns([
            ColumnDefn("Plate", 'left', 100, 'plate'),
            ColumnDefn("confidence", 'left', 100, 'confidences')
        ])
        self.dataOlvCand.SetObjects(e)
        credit = {
            "credit": 2000,
            "digunakan": data['credits_monthly_used'],
            "sisa": 2000 - int(data['credits_monthly_used'])
        }
        self.dataOlvCre.SetColumns([
            ColumnDefn("Credit", "left", 100, "credit"),
            ColumnDefn("Digunakan", "left", 100, "digunakan"),
            ColumnDefn("Sisa", "left", 100, "sisa")
        ])
        self.dataCredit.append(credit)
        self.dataOlvCre.SetObjects(self.dataCredit)
class data_Kendaraan(wx.Dialog):
    """docstring for data_Kendaraan"""
    def __init__(self, *arg, **kwargs):
        super(data_Kendaraan, self).__init__(*arg,
                                             **kwargs,
                                             pos=(300, 50),
                                             size=(900, 600))

        self.SetTitle("Data Kendaraan")
        panel = wx.Panel(self)
        panel.SetBackgroundColour(wx.WHITE)

        #tampil data
        self.tampilMysql()

        #label-label
        wx.StaticText(self, -1, "Nomor Plat             :", pos=(30, 20))
        wx.StaticText(self, -1, "Nama Pelanggan   :", pos=(30, 50))
        wx.StaticText(self, -1, "No Telp                    :", (30, 80))
        wx.StaticText(self, -1, "Merk                        :", (30, 110))
        wx.StaticText(self, -1, "Model                      :", (30, 140))
        wx.StaticText(self, -1, "Perusahaan     :", (500, 20))
        wx.StaticText(self, -1, "Warna              :", (500, 50))
        wx.StaticText(self, -1, "Jenis                 :", (500, 80))
        wx.StaticText(self, -1, "Tahun              :", (500, 110))

        #textbox-textbox
        self.txtNomor = wx.TextCtrl(self, -1, pos=(150, 20), size=(30, 25))
        wx.TextCtrl(self, -1, pos=(190, 20), size=(50, 25))
        wx.TextCtrl(self, -1, pos=(250, 20), size=(50, 25))
        self.txtNama = wx.TextCtrl(self, -1, pos=(150, 50), size=(250, 25))
        self.txtTelp = wx.TextCtrl(self, -1, pos=(150, 80), size=(250, 25))
        self.txtMerk = wx.TextCtrl(self, -1, pos=(150, 110), size=(250, 25))
        self.txtModel = wx.TextCtrl(self, -1, pos=(150, 140), size=(250, 25))
        self.txtPerusahaan = wx.TextCtrl(self,
                                         -1,
                                         pos=(600, 20),
                                         size=(250, 25))
        self.txtWarna = wx.TextCtrl(self, -1, pos=(600, 50), size=(250, 25))
        pilihanJenis = ["Mobil", "Motor"]
        self.txtJenis = wx.ComboBox(self,
                                    choices=pilihanJenis,
                                    pos=(600, 80),
                                    size=(250, 25))
        pilihanTahun = [
            "1996 - 2000", "2001 - 2004", "2005 - 2009", "2010 - 2014",
            "2015 - 2019"
        ]
        self.txtTahun = wx.ComboBox(self,
                                    choices=pilihanTahun,
                                    pos=(600, 110),
                                    size=(250, 25))
        pilihanSort = ["Nomor Plat", "Nama", "Tanggal", "Jenis", "Perusahaan"]
        self.txtSort = wx.ComboBox(self,
                                   choices=pilihanSort,
                                   pos=(300, 191.5),
                                   size=(190, 24))
        self.txtSort.SetValue("Nama")
        self.txtSearch = wx.TextCtrl(self,
                                     -1,
                                     pos=(600, 191.5),
                                     size=(250, 24))
        self.txtPilihan = wx.TextCtrl(self, -1)
        self.txtPilihan.SetValue("add")
        self.txtPilihan.Hide()

        #button-button
        self.btnsave = wx.Button(self, -1, "Save", pos=(500, 140))
        self.btnCancel = wx.Button(self, -1, "Cancel", pos=(600, 140))
        self.btnEdit = wx.Button(self, -1, "Edit", pos=(30, 190))
        self.btnDelete = wx.Button(self, -1, "Delete", pos=(120, 190))
        self.btnSort = wx.Button(self, -1, "Sort By", pos=(210, 190))
        self.btnSearch = wx.Button(self, -1, "Search", pos=(500, 190))
        self.btnkepentingan = wx.Button(self,
                                        -1,
                                        "Kepentingan",
                                        pos=(700, 140))

        #event-event
        self.btnsave.Bind(wx.EVT_BUTTON, self.saveData)
        self.btnEdit.Bind(wx.EVT_BUTTON, self.editData)
        self.btnDelete.Bind(wx.EVT_BUTTON, self.deleteData)
        self.btnCancel.Bind(wx.EVT_BUTTON, self.cancelBtn)
        self.txtSearch.Bind(wx.EVT_TEXT, self.searching)
        self.btnkepentingan.Bind(wx.EVT_BUTTON, self.tampil)

        self.dataOlv = ObjectListView(self,
                                      -1,
                                      style=wx.LC_REPORT | wx.SUNKEN_BORDER,
                                      pos=(10, 230),
                                      size=(850, 300))
        self.setDataMobil()

        self.Centre()

        self.Show(True)

    def tampil(self, e):
        hasil = kp.KepentinganFrame(self)
        hasil.Show(True)

    def searching(self, e):
        self.setSearch()
        self.setDataMobil()

    def setSearch(self):
        varSearch = self.txtSearch.GetValue()
        valSort = self.txtSort.GetValue()

        if valSort == "Nomor Plat":
            query = ("SELECT * FROM tb_member WHERE plate LIKE %s")
        elif valSort == "Tanggal":
            query = ("SELECT * FROM tb_member WHERE added_date LIKE %s")
        elif valSort == "Perusahaan":
            query = ("SELECT * FROM tb_member WHERE perusahaan LIKE %s")
        elif valSort == 'Jenis':
            query = ("SELECT * FROM tb_member WHERE jenis LIKE %s")
        else:
            query = ("SELECT * FROM tb_member WHERE nama_pel LIKE %s")
        stmt = ("%" + varSearch + "%")
        self.datasek = []
        hasil = connector.Execute(query, stmt, 3)
        if hasil != 'Koneksi Gagal':
            data = hasil['Data']
            for i in data:
                self.tanggalIni = str(i[2])
                dict = {
                    'plate': i[0],
                    'nama': i[1],
                    'tanggal': "{0}".format(self.tanggalIni[:10]),
                    'warna': i[4],
                    'merk': i[5],
                    'perusahaan': i[6],
                    'model': i[7],
                    'tahun': i[8],
                    'jenis': i[9],
                    "telp": i[10]
                }
                self.datasek.append(dict)

        else:
            wx.MessageBox(message="Cek Koneksi Anda",
                          caption="Error",
                          style=wx.OK | wx.ICON_INFORMATION)

    def setDataMobil(self, data=None):
        self.dataOlv.SetColumns([
            ColumnDefn("Plate", "left", 100, "plate"),
            ColumnDefn("Nama", "left", 100, "nama"),
            ColumnDefn("Telp", "left", 100, "telp"),
            ColumnDefn("Added", "left", 90, "tanggal"),
            ColumnDefn("Jenis", "left", 70, "jenis"),
            ColumnDefn("Merk", "left", 100, "merk"),
            ColumnDefn("Perusahaan", "left", 102, "perusahaan"),
            ColumnDefn("Model", "left", 100, "model"),
            ColumnDefn("Warna", "left", 100, "warna"),
            ColumnDefn("Tahun", "left", 100, "tahun")
        ])
        if self.txtSearch != '':
            self.setSearch()
            self.dataOlv.SetObjects(self.datasek)
        else:
            self.dataOlv.SetObjects(self.dataMobil)

    def tampilMysql(self):
        self.dataMobil = []
        #--Getting Data Mobil From Mysql
        query = "SELECT * FROM tb_member ORDER BY added_date DESC"
        stmt = ''
        hasil = connector.Execute(query, stmt, 2)
        if hasil != 'Koneksi Gagal':
            data = hasil['Data']
            for i in data:
                self.tanggalIni = str(i[2])
                dict = {
                    'plate': i[0],
                    'nama': i[1],
                    'tanggal': "{0}".format(self.tanggalIni[:10]),
                    'warna': i[4],
                    'merk': i[5],
                    'perusahaan': i[6],
                    'model': i[7],
                    'tahun': i[8],
                    'jenis': i[9],
                    "telp": i[10]
                }
                self.dataMobil.append(dict)

        else:
            wx.MessageBox(message="Cek Koneksi Anda",
                          caption="Error",
                          style=wx.OK | wx.ICON_INFORMATION)
        #--end
    def saveData(self, e):

        self.getValueTextBox()

        if self.txtPilihan.GetValue() == 'add':

            if self.nomor == '' or self.nama == '' or self.telp == '' or self.merk == '' or self.model == '' or self.perusahaan == '' or self.warna == '' or self.jenis == '' or self.tahun == '':
                dlg = wx.MessageDialog(self, "Pastikan Data Sudah Penuh",
                                       "Perhatian",
                                       wx.OK | wx.ICON_INFORMATION)
                dlg.ShowModal()
                return
            else:
                query = (
                    "INSERT INTO tb_member (plate, nama_pel, added_date, warna, merk, perusahaan, model, tahun, jenis, no_telp) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
                )

                stmt = (self.nomor.upper(), self.nama, datetime.datetime.now(),
                        self.warna.upper(), self.merk.upper(),
                        self.perusahaan.upper(), self.model.upper(),
                        self.tahun, self.jenis.upper(), self.telp)
                hasil = connector.Execute(query, stmt, 1)
                self.tampilMysql()
                self.setDataMobil()
                self.delValueTextBox()
        elif self.txtPilihan.GetValue() == "edit":
            query = (
                "UPDATE tb_member SET nama_pel = %s, warna = %s, merk = %s, perusahaan = %s, model = %s, tahun = %s, jenis = %s, no_telp = %s WHERE plate = %s"
            )
            stmt = (self.nama, self.warna.upper(), self.merk.upper(),
                    self.perusahaan.upper(), self.model.upper(), self.tahun,
                    self.jenis.upper(), self.telp, self.nomor.upper())
            connector.Execute(query, stmt, 1)
            self.tampilMysql()
            self.setDataMobil()
            self.delValueTextBox()

        self.txtPilihan.SetValue('add')
        self.txtNomor.Enable()

    def editData(self, e):
        ind = self.dataOlv.GetFirstSelected()
        if ind >= 0:
            self.item = self.dataOlv.GetItem(ind)
            self.item2 = self.dataOlv.GetItem(ind, 1)
        query = ("SELECT * FROM tb_member WHERE plate = %s and nama_pel = %s")
        stmt = (self.item.GetText(), self.item2.GetText())
        hasil = connector.Execute(query, stmt, 4)
        data = hasil['Data']
        self.txtNomor.SetValue(data[0][0])
        self.txtNama.SetValue(data[0][1])
        self.txtTelp.SetValue(data[0][10])
        self.txtMerk.SetValue(data[0][5])
        self.txtModel.SetValue(data[0][7])
        self.txtPerusahaan.SetValue(data[0][6])
        self.txtWarna.SetValue(data[0][4])
        self.txtJenis.SetValue(data[0][9])
        self.txtTahun.SetValue(data[0][8])
        self.txtPilihan.SetValue("edit")
        self.txtNomor.Disable()

    def deleteData(self, e):
        ind = self.dataOlv.GetFirstSelected()
        if ind >= 0:
            self.item = self.dataOlv.GetItem(ind)
            self.item2 = self.dataOlv.GetItem(ind, 1)
        query = ("DELETE FROM tb_member WHERE plate = %s and nama_pel = %s")
        stmt = (self.item.GetText(), self.item2.GetText())
        connector.Execute(query, stmt, 1)
        self.tampilMysql()
        self.setDataMobil()

    def cancelBtn(self, e):
        self.delValueTextBox()
        self.txtNomor.Enable()
        self.txtPilihan.SetValue('add')

    def getValueTextBox(self):
        self.nomor = self.txtNomor.GetValue()
        self.nama = self.txtNama.GetValue()
        self.telp = self.txtTelp.GetValue()
        self.merk = self.txtMerk.GetValue()
        self.model = self.txtModel.GetValue()
        self.perusahaan = self.txtPerusahaan.GetValue()
        self.warna = self.txtWarna.GetValue()
        self.jenis = self.txtJenis.GetValue()
        self.tahun = self.txtTahun.GetValue()

    def delValueTextBox(self):
        self.txtNomor.SetValue('')
        self.txtNama.SetValue('')
        self.txtTelp.SetValue('')
        self.txtMerk.SetValue('')
        self.txtModel.SetValue('')
        self.txtPerusahaan.SetValue('')
        self.txtWarna.SetValue('')
        self.txtJenis.SetValue('')
        self.txtTahun.SetValue('')