Langsung ke konten utama

SQLITE CRUD EDIT DELETE DATA BARANG | APLIKASI KASIR POS ANDROID IOS MUDAH

 

SESI 05 : EDIT DAN DELETE TABEL BARANG

assalamualaikum warahmatullohi wabarohatuh, salam sukses. Mari kita lanjutkan coding kita.
pada bagian ke 5 (lima)  ini kita akan melanjutkan proses CRUD terutama untuk edit dan delete data pada tabel master barang.



Disini kita butuh modul atau library kivy untuk menampilkan dialogbox, yaitu from kivymd.uix.dialog import MDDialog beserta modul buttonnya from kivymd.uix.button import MDFlatButton, bagian lain yang di sempurakan adalah class item barang, dimana pada class ini rencananya akan di panggil beberapa kali oleh class yang berbeda-beda jadi biar tidak buat class yang sama berulang-ulang, kit abuat seperti sebuah fungsi atau metod, rancangan yang akan dibuat seperti ini :

Jadi diclass Baran_Item akan kita tambahi variabel properties sebagai penampung class yang memanggil dan bentuk icon yang berbeda-beda sesuai kondisi class pemanggilnya, variabel properti yang dibutuhkan adalah bawaclass, iconkiri, iconkanan, dan kode barang. Sedangkan diclass Barang_New kita tambahi variabel propertis untuk membedakan ini isi data baru atau koreksi data yaitu datanew dan datakode, diclass ini juga kita buat 3 (tiga) function atau metod baru def on_enter, def kosongform, def isiform. 
Sedangkan diclass utama kita yakti MyResto kita juga buat fuction atau metod baru yaitu def klik_ataskanan, def klik_ataskiri dan def hapus_barang. Untuk keterangan lebih lanjut dan rinci silahkan lihat videonya link diatas. Jadi selengkapnya file yang diubah menjadi seperti dibawah ini.

File main.py menjadi:

 from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.properties import StringProperty

from kivymd.app import MDApp
from kivymd.uix.floatlayout import MDFloatLayout
from kivymd.uix.dialog import MDDialog
from kivymd.uix.button import MDFlatButton

# bila install manuual --> pip install pysqlite3
import sqlite3

Window.size = (400,600)

Builder.load_file('menu.kv')
Builder.load_file('barang.kv')
Builder.load_file('barang_item.kv')
Builder.load_file('barang_new.kv')

def buat_database():
    conn = sqlite3.connect("data_resto.db")
    mycursor = conn.cursor()

    try:
        mycursor.execute("select * from barang ")
    except:  
        queri = "CREATE TABLE IF NOT EXISTS barang("\
                "kode INTEGER PRIMARY KEY AUTOINCREMENT,"\
                "jenis TEXT DEFAULT '',"\
                "nama TEXT DEFAULT '',"\
                "harga INTEGER  DEFAULT 0,"\
                "gambar TEXT DEFAULT '',"\
                "status TEXT DEFAULT '') "  
        mycursor.execute(queri)    
        conn.commit()    

    conn.close()

class MenuUtama(Screen):
    def buka_menubarang(self):
        self.manager.transition.direction = 'left'
        self.manager.current = 'MenuBarang'

class BarangItem(MDFloatLayout):
    jenis = StringProperty ("Item Food")
    nama = StringProperty ("Food No: 01")
    harga = StringProperty ('10000')
    gambar = StringProperty ("image/food01.png")
    kode = StringProperty ("*")
    iconkiri= StringProperty ("*")
    iconkanan= StringProperty ("*")
    bawaclass= StringProperty ("*")

class BarangNew(Screen):
    datanew = StringProperty ("*")
    datakode = StringProperty ("*")

    def on_enter(self):
        if BarangNew.datanew=='edit':
            self.isiform()
        else:
            self.kosongform()
   
    def kosongform(self):
        self.ids.jenis.text =''
        self.ids.nama.text=''
        self.ids.harga.text=''
        self.ids.gambar.text=''
        self.ids.cetakgambar.source=''
        BarangNew.datanew='*'
        BarangNew.datakode='*'

    def isiform(self):
        carikode=BarangNew.datakode
        conn = sqlite3.connect('data_resto.db')
        conn.row_factory = sqlite3.Row
        cur = conn.cursor()
        cur.execute("SELECT * FROM barang where kode='"+carikode+"'")
        daftarbarang = cur.fetchall()
        conn.close()
        for record in daftarbarang:                  
            self.ids.jenis.text =record['jenis']
            self.ids.nama.text=record['nama']
            self.ids.harga.text=str(record['harga'])
            self.ids.gambar.text=record['gambar']
            self.ids.cetakgambar.source=record['gambar']

    def tampilkan_gambar(self,lokasi):
        self.ids.cetakgambar.source=lokasi

    def simpan(self):
        isijenis= self.ids.jenis.text.strip()
        isinama = self.ids.nama.text.strip()
        isiharga= '0' if self.ids.harga.text.strip()=='' else self.ids.harga.text
        isigambar= self.ids.gambar.text.strip()
        isistatus='kosong'

        conn = sqlite3.connect("data_resto.db")
        mycursor = conn.cursor()
        if self.datanew=='edit':
            carikode=self.datakode
            queri = "UPDATE barang set jenis=?,nama=?,harga=?,gambar=?,status=? WHERE kode=?"
            isinya=(isijenis,isinama,isiharga,isigambar,isistatus,carikode)
        else:
            queri = "INSERT INTO barang (jenis,nama,harga,gambar,status) VALUES (?,?,?,?,?)"
            isinya=(isijenis,isinama,isiharga,isigambar,isistatus)

        mycursor.execute(queri,isinya)
        conn.commit()
        conn.close()      
        self.kosongform()
        self.manager.transition.direction = 'right'
        self.manager.current = 'MenuBarang'

class MenuBarang(Screen):
    def on_pre_enter(self):
        self.ids.gridbarang.clear_widgets()
        self.tampil_barang()
       
    def tampil_barang(self):
        conn = sqlite3.connect('data_resto.db')
        conn.row_factory = sqlite3.Row
        cur = conn.cursor()
        cur.execute("SELECT * FROM barang ")
        daftarbarang = cur.fetchall()
        conn.commit()
        conn.close()
       
        for record in daftarbarang:
            item=BarangItem()
            item.bawaclass = 'MenuBarang'
            item.iconkiri="delete-circle"
            item.iconkanan="circle-edit-outline"  
            item.kode=str(record['kode'])
            if record['jenis']=='1': item.jenis='Food'
            if record['jenis']=='2': item.jenis='Drink'
            if record['jenis']=='3': item.jenis='Snack'
            item.nama=record['nama']
            item.harga=str(record['harga'])
            item.gambar=record['gambar']
            self.ids.gridbarang.add_widget(item)
        return self

class MyResto(MDApp):
    def build(self):
        buat_database()
        sm = ScreenManager()
        sm.add_widget(MenuUtama(name='MenuUtama'))        
        sm.add_widget(MenuBarang(name='MenuBarang'))
        sm.add_widget(BarangNew(name='BarangNew'))
        return sm
   
    def klik_ataskanan(self,bwkelas,bwkode):
        BarangNew.datanew = 'edit'
        BarangNew.datakode = bwkode
        self.root.current = 'BarangNew'

    def klik_ataskiri(self,bwkelas,bwkode):
        tombol_ok = MDFlatButton(text="OK", on_release=lambda x:self.hapus_barang(bwkode))
        tombol_no = MDFlatButton(text="canc", on_release=lambda x:self.dialog.dismiss())
        self.dialog = MDDialog(title="Konfirmasi",
                        text='Apakah anda yakin hapus..?',
                        radius=[20, 7, 20, 7],
                        buttons=[tombol_ok, tombol_no])
        self.dialog.open()

    def hapus_barang(self,kode):
        self.dialog.dismiss()
        conn = sqlite3.connect('data_resto.db')
        cur = conn.cursor()
        cur.execute("DELETE FROM barang where kode='"+kode+"'")
        conn.commit()
        conn.close()
        self.root.current = 'MenuUtama'
        self.root.current = 'MenuBarang'
       
   
MyResto().run()

File barang_item.kv menjadi :

<BarangItem>:
    size_hint: .4,.3
    line_color: rgba(0, 0, 0, 255)
    MDBoxLayout:
        size_hint: 1,.2
        pos_hint: {'x':0,'y':.8}
        md_bg_color: rgba(134, 250, 10, 255)
       
        MDIconButton:
            id:ataskiri
            icon: root.iconkiri
            icon_size: "20sp"
            pos_hint_y: .5
            on_release: app.klik_ataskiri(root.bawaclass,root.kode)

        MDLabel:
            id:atastengah
            text: root.jenis
            bold: True
            halign: "center"
            font_size:"14sp"
            size_hint: .5,1
            pos_hint_y: .5

        MDIconButton:
            id:ataskanan
            icon: root.iconkanan
            icon_size: "20sp"
            pos_hint_y: .5
            on_release: app.klik_ataskanan(root.bawaclass,root.kode)

    MDBoxLayout:
        size_hint: 1,.2
        pos_hint: {'x':0,'y':0}
        orientation: 'vertical'
        padding:"5sp"
        MDLabel:
            text: root.nama
            font_size:"12sp"
            bold: True
        MDLabel:
            text: root.harga
            font_size:"10sp"

    MDBoxLayout:
        size_hint:1,.6
        pos_hint:{'x':0,'y':.2}
        Image:
            source:root.gambar

Dan file barang_new.kv menjadi :

<BarangNew>:
    MDBoxLayout:
        size_hint: 1,.1
        pos_hint: {'x':0,'y':.9}
        md_bg_color: rgba(0, 0, 255, 255)
        MDLabel:
            text: 'ENTRY ITEM BARANG'
            color: rgba(255, 255, 255, 255)
            halign: "center"
            font_size: '30dp'
            bold: True
   
    MDFloatLayout:
        size_hint: 1,.8
        pos_hint: {'x':0,'y':.1}
        md_bg_color: rgba(255, 255, 255, 255)

        MDLabel:
            text: 'Jenis Item'
            text_color: 0, 0, 0, 1
            size_hint: .3, .1
            pos_hint: {"x":.1, "y": .8}
        MDTextField:
            id:jenis
            input_filter: "int"
            size_hint_x: .1
            pos_hint: {"x":.4, "y": .8}

        MDLabel:
            text: 'Nama Item'
            text_color: 0, 0, 0, 1
            size_hint: .3, .1
            pos_hint: {"x":.1, "y": .7}
        MDTextField:
            id:nama
            size_hint_x: .5
            pos_hint: {"x":.4, "y": .7}

        MDLabel:
            text: 'Harga Item'
            text_color: 0, 0, 0, 1
            size_hint: .3, .1
            pos_hint: {"x":.1, "y": .6}
        MDTextField:
            id:harga
            input_filter: "int"
            size_hint_x: .5
            pos_hint: {"x":.4, "y": .6}

        MDLabel:
            text: 'Alamat Gambar'
            text_color: 0, 0, 0, 1
            size_hint: .3, .1
            pos_hint: {"x":.1, "y": .5}
        MDTextField:
            id:gambar
            size_hint_x: .5
            pos_hint: {"x":.4, "y": .5}
            on_text: root.tampilkan_gambar(self.text)

        MDBoxLayout:
            size_hint: .4,.3
            line_color: rgba(0, 0, 0, 255)
            pos_hint: {'center_x':.5,'y':.1}
            FitImage:
                id:cetakgambar
                source: ''


    MDBoxLayout:
        size_hint: 1,.1
        pos_hint: {'x':0,'y':0}
        md_bg_color: rgba(0, 255, 0, 255)
        orientation: 'horizontal'

        MDRectangleFlatButton:
            text: "Batal"
            text_color: rgba(0, 0, 255, 255)
            line_color: rgba(0, 0, 255, 255)
            md_bg_color: rgba(255, 255, 0, 255)
            size_hint_x: .5
            pos_hint: {"center_x": .5, "center_y": .5}
            on_release:
                root.manager.transition.direction = 'right'
                root.manager.current = 'MenuBarang'

        MDRectangleFlatButton:
            text: "Simpan"
            text_color: rgba(0, 0, 255, 255)
            line_color: rgba(0, 0, 255, 255)
            md_bg_color: rgba(255, 255, 0, 255)
            size_hint_x: .5
            pos_hint: {"center_x": .5, "center_y": .5}
            on_release: root.simpan()

Demikian penjelasan sesi ke 5 (lima) ini, semoga bermanfaat, wassalamualaikum warohmatullohi wabarohatuh.


Komentar

...