SESI 07 : MENDESAIN NOTA KASIR #1
Assalamualaikum warahmatullohi wabarohatuh, salam sukses. Pada bagian ini kita akan membuat atau merancang form untuk input penjualan kasir atau form pos, yang akan kita bagi dalam beberapa part untuk menyesuaikan durasi videonya. Untuk part #1 ini kira akan merancang display ambil item barang atau daftar menu barang yang dijual kasir.
Dalam pengaturan display ambil item barang jual ini kita akan membuat class baru yaitu class PosItem sebagai pengontrol tampilan layarnya yang diatur dalam file kivy, berarti kit ajuga membuat file kivy baru yaitu pos_item.kv, kita juga harus melakukan penyesuaian terhadap file kivy barang_item.kv karena akan dipanggil juga oleh class PosItem ini,selain itu kita juga harus melakukan penyesuaian di class utama yaitu class MyResto. Baik untuk source scrip mengenai perubahan-perubahan secara lengkap kita jabarkan di bawah ini.
File Kivy baru : pos_item.kv
<PosItem>:
padding:1
spacing:1
canvas.before:
Color:
rgb:rgba(60, 150, 50, 255)
Rectangle:
pos:self.pos
size:self.size
MDLabel:
text: '~ Cashier ~'
font_size: '30dp'
bold: True
size_hint: 1,.1
halign: "center"
color: rgba(255, 255, 255, 255)
pos_hint: {'x':0,'y':.9}
MDRectangleFlatButton:
text: "Done"
font_size: '18dp'
valign: "center"
text_color: 1, 1, 1, 1
size_hint: 1,.05
md_bg_color: rgba(0, 0, 255, 255)
pos_hint: {'center_x': .5, 'y': .0}
MDBoxLayout:
size_hint: 1, .85
pos_hint: {'x': 0, 'y': .05}
line_color: rgba(180, 190, 180, 255)
padding: 2
TabbedPanel:
size_hint: 1,1
pos_hint: {'x': 0, 'y': 0}
do_default_tab: False
tab_width: self.parent.width / 3
TabbedPanelItem:
id:tab01
text: 'Food'
font_size: '18dp'
bold: True
color: rgba(255, 255, 255, 255)
background_color: rgba(60, 150, 50, 10)
on_press: root.tekantab(1)
MDBoxLayout:
size_hint: 1,1
md_bg_color: rgba(255, 255, 255, 255)
ScrollView:
size_hint_x: self.size_hint_x
size_hint_y: self.size_hint_y
do_scroll_x: False
MDGridLayout:
id: gridtab01
cols: 2
row_default_height: 200
row_force_default: True
adaptive_height: True
padding: dp(30), dp(30)
spacing: dp(30)
TabbedPanelItem:
id:tab02
text: 'Drink'
font_size: '14dp'
bold: True
color: rgba(180, 190, 180, 255)
background_color: rgba(60, 150, 50, 10)
on_press: root.tekantab(2)
MDBoxLayout:
size_hint: 1,1
md_bg_color: rgba(255, 255, 255, 245)
ScrollView:
size_hint_x: self.size_hint_x
size_hint_y: self.size_hint_y
do_scroll_x: False
MDGridLayout:
id: gridtab02
cols: 2
row_default_height: 200
row_force_default: True
adaptive_height: True
padding: dp(30), dp(30)
spacing: dp(30)
TabbedPanelItem:
id:tab03
text: 'Snack'
font_size: '14dp'
bold: True
color: rgba(180, 190, 180, 255)
background_color: rgba(60, 150, 50, 10)
on_press: root.tekantab(3)
MDBoxLayout:
size_hint: 1,1
md_bg_color: rgba(255, 255, 255, 230)
ScrollView:
size_hint_x: self.size_hint_x
size_hint_y: self.size_hint_y
do_scroll_x: False
MDGridLayout:
id: gridtab03
cols: 2
row_default_height: 200
row_force_default: True
adaptive_height: True
padding: dp(30), dp(30)
spacing: dp(30)
Buat class yaitu : class PosItem(Screen)
class PosItem(Screen):
def on_pre_enter(self):
self.ids.gridtab01.clear_widgets()
self.ids.gridtab02.clear_widgets()
self.ids.gridtab03.clear_widgets()
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=BarangItem()
item.bawaclass = 'MenuPos'
item.iconkiri="minus-circle"
item.iconkanan="plus-circle"
item.kode=str(record['kode'])
item.jenis='0'
item.nama=record['nama']
item.harga=str(record['harga'])
item.gambar=record['gambar']
item.status=record['status']
if record['jenis']=='1': self.ids.gridtab01.add_widget(item)
if record['jenis']=='2': self.ids.gridtab02.add_widget(item)
if record['jenis']=='3': self.ids.gridtab03.add_widget(item)
return self
def tekantab(self,tekan):
self.ids.tab01.color=180/255, 190/255, 180/255, 255/255
self.ids.tab02.color=180/255, 190/255, 180/255, 255/255
self.ids.tab03.color=180/255, 190/255, 180/255, 255/255
self.ids.tab01.font_size='14dp'
self.ids.tab02.font_size='14dp'
self.ids.tab03.font_size='14dp'
if tekan==1:
self.ids.tab01.color=1, 1, 1, 1
self.ids.tab01.font_size='18dp'
if tekan==2:
self.ids.tab02.color=1, 1, 1, 1
self.ids.tab02.font_size='18dp'
if tekan==3:
self.ids.tab03.color=1, 1, 1, 1
self.ids.tab03.font_size='18dp'
Lakukan perubahan difile kivy barang_item.kv khusus bagian ini :
MDIconButton:
id:ataskiri
icon: root.iconkiri
icon_size: "20sp"
pos_hint_y: .5
on_release:
atastengah.text = app.klik_ataskiri(root.bawaclass,root.kode,atastengah.text,root.nojual,root.harga)
MDIconButton:
id:ataskanan
icon: root.iconkanan
icon_size: "20sp"
pos_hint_y: .5
on_release:
atastengah.text = app.klik_ataskanan(root.bawaclass,root.kode,atastengah.text,root.nojual,root.harga)
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 if root.status=='' else root.harga + " ( "+root.status +" )"
font_size:"10sp"
Lakukan penyesuaian class MyResto(MDApp) khusus untuk fungsi/metod ini :
def klik_ataskanan(self,bwkelas,bwkode,bwisi,bwnojual,bwharga):
if bwkelas=='MenuBarang':
BarangNew.datanew = 'edit'
BarangNew.datakode = bwkode
self.root.current = 'BarangNew'
return bwisi
elif bwkelas=='MenuPos':
nilai=0 if bwisi.strip()=='' else int(bwisi)
bwqty=nilai + 1
return str(bwqty)
def klik_ataskiri(self,bwkelas,bwkode,bwisi,bwnojual,bwharga):
if bwkelas=='MenuBarang':
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()
return bwisi
elif bwkelas=='MenuPos':
nilai=0 if bwisi.strip()=='' else int(bwisi)
bwqty=nilai-1 if nilai>0 else 0
return str(bwqty)
Demikian untuk pengaturan tampilan menu item kasir ini, untuk kelanjutannya silahkan buka dipostingan berikutnya atau lihat video berikutnya, semoga bermanfaat terima kasih wassalamualaikum warohmatullohi wabarohatuh.
Komentar
Posting Komentar