SESI 06 : MANAJAMEN STATUS STOK BARANG
Assalamualaikum warahmatullohi wabarohatuh salam sukses. Mari kita lanjutkan coding kita pada bagian ke 6 (enam) ini kita akan membuat halaman untuk merubah status stok barang, detail tutorialnya ada di video ini :
Dimateri ini kita akan membuat beberapa kelas untuk merancang bentuk atau tampilan menu memanajemen status stok ini. bentuk halaman dan detail isinya yang dirancang seperti ini :
Untuk menangani tampilan tersebut kita membuat beberapa kelas baru meliputi :
Class StokList(MDBoxLayout)
Digunakan untuk merancang tampilan tan tata urutan item field yang akan di tampilkan, beserta tombol button sebagai pengontrol perintahnya.
Class StokBarang(Screen)
Digunakan untuk merancang form halaman menu display stats stok barangnya, yang terdiri dari header, bagian detail isi data stoknya dan tombol ntuk pindah ke menu utama.
Class MyResto(MDApp)
Disini kita menambahi atau membuat fungsi/metod pengontrol perubahan statusnya.
Selain it kita juga membat file kivy baru yaitu :
Stok_list.kv
Ini adalah file penataan bentuk objek-objek yang dibutuhkan sebagai penerjemah dari class StokList.
Stok_barang.kv
Ini adalah file penataan bentuk objek-objek menu atau display yang dibutuhkan sebagai penerjemah dari class StokBarang.
Secara lengkapnya source programnya menjadi sebagai berikut :
FILE MAIN.PY dilengkapi menjadi seperti ini :
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.properties import StringProperty,BooleanProperty
from kivymd.app import MDApp
from kivymd.uix.floatlayout import MDFloatLayout
from kivymd.uix.boxlayout import MDBoxLayout
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')
Builder.load_file('stok_list.kv')
Builder.load_file('stok_barang.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 StokList(MDBoxLayout):
jenis = StringProperty ("Food")
nama = StringProperty ("Food No: 01")
harga = StringProperty ('10000')
status = StringProperty ('kosong')
tebal = BooleanProperty(False)
tombolmati = BooleanProperty(False)
class StokBarang(Screen):
def on_pre_enter(self):
self.ids.idheader.clear_widgets()
self.ids.idgridstok.clear_widgets()
item=StokList()
item.jenis = "JENIS"
item.nama = "NAMA BARANG"
item.harga = "HARGA"
item.status = "STATUS"
item.tebal = True
item.tombolmati = True
self.ids.idheader.add_widget(item)
self.tampil_barang()
return self
def tampil_barang(self):
conn = sqlite3.connect('data_resto.db')
conn.row_factory = sqlite3.Row
cur = conn.cursor()
cur.execute("SELECT * FROM barang order by jenis ")
daftarbarang = cur.fetchall()
conn.commit()
conn.close()
for record in daftarbarang:
item=StokList()
if record['jenis']=='1': item.jenis='Food'
if record['jenis']=='2': item.jenis='Drink'
if record['jenis']=='3': item.jenis='Snack'
item.kode=str(record['kode'])
item.nama=record['nama']
item.harga=str(record['harga'])
item.status=record['status']
item.tebal = False
item.tombolmati = False
self.ids.idgridstok.add_widget(item)
return self
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'))
sm.add_widget(StokBarang(name='StokBarang'))
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'
def ubahstok(self,bwkode,bwstatus):
if bwstatus=='kosong':
statusbaru='Ada'
else:
statusbaru='kosong'
conn = sqlite3.connect('data_resto.db')
cur = conn.cursor()
cur.execute("UPDATE barang set status=? where kode=?",(statusbaru,bwkode))
conn.commit()
conn.close()
return statusbaru
MyResto().run()
FILE KIVY BARU : STOK_LIST.KV
<StokList>:
line_color: rgba(0, 0, 0, 255)
MDLabel:
id:idjenis
text: root.jenis
bold: root.tebal
font_size:"12sp"
size_hint: .15,.1
pos_hint:{'x':.0, 'center_y':.5}
MDLabel:
id:idnama
text: root.nama
bold: root.tebal
font_size:"12sp"
size_hint: .5,.1
pos_hint:{'x':.15, 'center_y':.5}
MDLabel:
id:idharga
text: root.harga
bold: root.tebal
font_size:"12sp"
size_hint: .2,.1
pos_hint:{'x':.6, 'center_y':.5}
MDLabel:
id:idstatus
text: root.status
bold: root.tebal
font_size:"12sp"
size_hint: .15,.1
pos_hint:{'x':.8, 'center_y':.5}
MDIconButton:
icon: "dots-vertical" if root.tombolmati==False else ''
disabled: root.tombolmati
icon_size: "20sp"
pos_hint:{'x':.9, 'center_y':.5}
on_release:
idstatus.text=app.ubahstok(root.kode,idstatus.text)
FILE KIVY BARU : STOK_BARANG.KV
<StokBarang>:
#box header
MDBoxLayout:
id:idheader
size_hint: 1,.1
pos_hint: {'x':0,'y':.9}
md_bg_color: rgba(255,255,0, 255)
# box tampil data
MDBoxLayout:
size_hint: 1,.9
pos_hint: {'x':0,'y':0}
ScrollView:
size_hint_x: self.size_hint_x
size_hint_y: self.size_hint_y
do_scroll_x: False
MDGridLayout:
id:idgridstok
cols: 1
row_default_height: "35dp"
row_force_default: True
adaptive_height: True
MDIconButton:
icon: "select-group"
icon_color: rgba(255, 255, 255, 255)
md_bg_color: rgba(0, 0, 250, 255)
pos_hint: {'x':.03,'y':.1}
on_release:
root.manager.transition.direction='right'
root.manager.current='MenuUtama'
Sedangkan file kivy MENU.KV hanya dibah di bagian ini saja, khusus untuk memberikan perintah agar menuju atau menjalankan halaman menu stok barang, perubahan di kleasnya menjadi :
FitImage:
source: 'image/menu-stok.png'
MDRectangleFlatIconButton:
icon: "list-status"
text:'Status Barang'
text_color: rgba(0, 0, 0, 255)
user_font_size: '20dp'
md_bg_color:rgba(255, 255, 0, 255)
size_hint_x: 1
pos_hint: {"center_x": .5}
on_release:
root.manager.transition.direction= 'left'
root.manager.current= 'StokBarang'
Demikian tutorial sesi ke 6 (enam) ini insya Allah kita akan lanjutkan disesi ke 7 (tujuh), Semoga bermanfaat dan mampirlah ke chanel kami untuk melihat video secara detailnya. terimakasih.
Komentar
Posting Komentar