Langsung ke konten utama

BELAJAR PYTHON : MENDESAIN NOTA KASIR #1 | APLIKASI KASIR POS ANDROID IOS MUDAH

 

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

...