2018.201.00107 (Viany Ramadhany) PDF
2018.201.00107 (Viany Ramadhany) PDF
GROSIR SAMARINDA
OLEH:
VIANY RAMADHANY
2018.2010.0107
REGULER D
Dengan menyebut nama Allah SWT yang Maha Pengasih lagi Maha
Panyayang, Kami panjatkan puja dan puji syukur atas kehadirat-Nya, yang
telah melimpahkan rahmat, hidayah, dan inayah-Nya kepada saya, sehingga
saya dapat menyelesaikan laporan tentang program penitipan barang ini
Laporan ini telah saya susun dengan maksimal dan mendapatkan
bantuan dari berbagai pihak sehingga dapat memperlancar pembuatan
makalah ini. Untuk itu saya menyampaikan banyak terima kasih kepada
semua pihak yang telah berkontribusi dalam pembuatan laporan ini.
Terlepas dari semua itu, Saya menyadari sepenuhnya bahwa masih
ada kekurangan baik dari segi susunan kalimat maupun tata bahasanya. Oleh
karena itu dengan tangan terbuka saya menerima segala saran dan kritik dari
pembaca agar saya dapat memperbaiki laporan ini.
Akhir kata saya berharap semoga laporan tentang program penitipan
barang ini dapat memberikan manfaat maupun inpirasi terhadap pembaca.
i
DAFTAR ISI
ii
BAB I
PENDAHULUAN
A. Latar Belakang
Latar belakang saya membuat program ini adalah karena ketika
saya pergi ke sebuah grosir untuk membeli barang. Mereka masih
menggunakan kertas untuk mencatat persediaan barang pada tempat
tersebut.
B. Tujuan
Tujuan saya membuat program ini adalah untuk memudahkan
karyawan pada tempat tersebut untuk melakukan pendataan stock dan
yang lainnya.
C. Manfaat
Manfaat dari program ini adalah untuk memudahkan karyawan
untuk melakukan pendataan barang yang telah masuk dan keluar
D. Ruang Lingkup
Ruang lingkup dari program ini digunakan untuk Administrasi
pencatatan penjualan, pencatatan barang masuk dan keluar, pencatatan
barang yang rusak dan sebagainya.
E. Metode Penelitian
Metode penelitian yang saya gunakan adalah metode observasi,
saya melakukan penelitian secara langsung di grosir yang biasa saya
kunjungi
1
2
A. Gambaran Proses
1. Membuat Database
2. Mengisi Field dan data yang diperlukan
3. Melakukan pembuatan kode / script untuk membuat program
4. Mencoba program
5. Ketika terjadi kesalahan, perbaiki hingga benar
3
4
C. Dokumentasi Program
def aksi():
def baru():
root = Tk()
root.mainloop()
def tampil():
root = tkinter.Tk()
root.mainloop()
5
def omset():
root = tkinter.Tk()
root.mainloop()
def pembelian():
root = Tk()
root.mainloop()
def penjualan():
root = Tk()
root.mainloop()
def rusak():
root = Tk()
root.mainloop()
def logo():
root = Tk()
root.overrideredirect(True)
app = SplashScreen(root)
6
root.after(2000, root.destroy)
root.mainloop()
def menu_utama():
root = Tk()
root.title("GROSIR SAMARINDA")
root.geometry('900x500')
root.resizable(False,False)
gambar = PhotoImage(file='D:\DasPro\Project\inv_org\inv_mart\wall2.png')
w1 = Label(root,image=gambar).pack(side='top')
menubar = Menu(root)
file = Menu(menubar,tearoff=0)
menubar.add_cascade(label="File",menu=file)
file.add_separator()
tstock = Menu(file,tearoff=0)
file.add_separator()
7
file.add_command(label="Keluar",command=root.destroy)
laporan = Menu(menubar,tearoff=0)
menubar.add_cascade(label="Laporan",menu=laporan)
laporan.add_command(label="Laporan Stock",command=lap_stock)
laporan.add_separator()
laporan.add_separator()
root.config(menu=menubar)
root.mainloop()
logo()
menu_utama()
8
class SplashScreen:
self.parent = parent
self.aturSplash()
self.aturWindow()
def aturSplash(self):
self.gambar = Image.open('LOGO2.png')
self.imgSplash = ImageTk.PhotoImage(self.gambar)
def aturWindow(self):
setengahLebar = (self.parent.winfo_screenwidth()-lebar)//2
setengahTinggi = (self.parent.winfo_screenheight()-tinggi)//2
setengahLebar,setengahTinggi))
Label(self.parent, image=self.imgSplash).pack()
##root = Tk()
##root.overrideredirect(True)
##app = SplashScreen(root)
9
##root.after(2000, root.destroy)
##root.mainloop()
class EntryStock:
def __init__(self,parent,title):
self.parent = parent
self.parent.title(title)
self.parent.protocol("WM_DELETE_WINDOW",self.keluar)
lebar = 550
tinggi = 290
setTengahX = (self.parent.winfo_screenwidth()-lebar)//2
setTengahY = (self.parent.winfo_screenheight()-tinggi)//2
self.parent.geometry("%ix%i+%i+%i" %(lebar,tinggi,\
setTengahX,setTengahY))
self.parent.resizable(False,False)
self.aturKomponen()
10
def aturKomponen(self):
kodeFrame = Frame(self.parent)
kodeFrame.pack(side=TOP)
mainFrame = Frame(self.parent)
mainFrame.pack(side=TOP)
btnFrame = Frame(self.parent)
btnFrame.pack(side=BOTTOM)
Label(kodeFrame,text=' ').grid(row=0,column=0)
Label(btnFrame,text=' ').grid(row=2,column=0)
Label(kodeFrame,text='Kode Barang').grid(row=1,column=0,padx=2,pady=3,sticky=W)
self.entKode = Entry(kodeFrame,width=38)
self.entKode.grid(row=1,column=1,padx=1)
Label(kodeFrame,text='').grid(row=1,column=2)
command=self.onCek,width=10)
self.btnCek.grid(row=1,column=3)
Label(mainFrame,text='Nama Barang').grid(row=1,column=0,pady=3,sticky=W)
self.entNama = Entry(mainFrame,width=50)
self.entNama.grid(row=1,column=1)
11
Label(mainFrame,text='Satuan').grid(row=2,column=0,pady=3,sticky=W)
self.entSatuan = Entry(mainFrame,width=50)
self.entSatuan.grid(row=2,column=1)
Label(mainFrame,text='Jumlah').grid(row=3,column=0,pady=3,sticky=W)
self.entJumlah = Entry(mainFrame,width=50)
self.entJumlah.grid(row=3,column=1)
Label(mainFrame,text='Harga Satuan').grid(row=4,column=0,pady=3,sticky=W)
self.entHargaSatuan = Entry(mainFrame,width=50)
self.entHargaSatuan.grid(row=4,column=1)
Label(mainFrame,text='% Profit').grid(row=5,column=0,pady=3,sticky=W)
self.entProfit = Entry(mainFrame,width=50)
self.entProfit.grid(row=5,column=1)
Label(mainFrame,text=' ').grid(row=6,column=0,sticky=W)
self.btnCancel = Button(btnFrame,text='Batal',\
command=self.batal,width=10)
self.btnCancel.grid(row=1,column=1,padx=3)
self.btnSave = Button(btnFrame,text='Simpan',\
command=self.simpan,width=10)
12
self.btnSave.grid(row=1,column=2,padx=3)
self.btnClose = Button(btnFrame,text='Keluar',\
command=self.keluar,width=10)
self.btnClose.grid(row=1,column=3,padx=3)
def keluar(self,event=None):
self.parent.destroy()
def batal(self):
self.entKode.delete(0,END)
self.entNama.delete(0,END)
self.entSatuan.delete(0,END)
self.entJumlah.delete(0,END)
def onCek(self):
con = connect(db='sembako',user='admin',
passwd='admin',host='127.0.0.1',port=3306,autocommit=True)
cur = con.cursor()
cKode = self.entKode.get()
if len(cKode) == 0:
messagebox.showwarning(title="Peringatan",\
self.entKode.focus_set()
else:
13
cur.execute(sql,cKode)
data = cur.fetchall()
pjg = len(data)
if pjg > 0:
curkode = con.cursor()
curkode.execute(sqlkode)
maxkode = curkode.fetchone()
messagebox.showwarning(title="Peringatan",\
str(maxkode[0])+".")
self.entKode.focus_set()
else:
messagebox.showinfo(title="Pemberitahuan",\
self.entNama.focus_set()
cur.close()
con.close()
def simpan(self):
con = connect(db='sembako',user='admin',
passwd='admin',host='127.0.0.1',port=3306,autocommit=True)
14
cur = con.cursor()
cKode = self.entKode.get()
cNama = self.entNama.get()
cSatuan = self.entSatuan.get()
nJumlah = int(self.entJumlah.get())
nHarga = int(self.entHargaSatuan.get())
nProfit = int(self.entProfit.get())
"VALUES (%s,%s,%s,%s,%s,%s)"
cur.execute(sql,(cKode,cNama,cSatuan,nJumlah,nHarga,nProfit))
cur.close()
con.close()
##root = Tk()
##root.mainloop()
15
import datetime
import os
import subprocess
def lap_stock():
cur = con.cursor()
data_stock = cur.fetchall()
c = canvas.Canvas("Lap_Stock.pdf", pagesize=letter)
c.setFont("Helvetica-Bold", 12)
c.setFillColor(gray)
c.drawString(72,750,"GROSIR SAMARINDA")
c.setFillColor(blue)
c.drawString(440,750,str(datetime.date.today()))
16
c.setFont("Helvetica-Bold", 10)
c.setFillColor(black)
c.line(72,712,500,712)
c.drawString(72,700,"KODE")
c.drawString(110,700,"NAMA BARANG")
c.drawString(274,700,"SATUAN")
c.drawString(340,700,"JUMLAH")
c.drawString(405,700,"HARGA")
c.drawString(453,700,"%PROFIT")
c.line(72,695,500,695)
c.setFont("Helvetica", 10)
j= 0
t= 0
for i in data_stock:
kode = i[0]
nama = i[1]
satuan = i[2]
jumlah = i[3]
harga = i[4]
profit = i[5]
j+= 1
t+= jumlah
c.drawCentredString(86,695-j*22,kode)
c.drawString(110,695-j*22,nama)
c.drawString(275,695-j*22,satuan)
17
c.drawRightString(370,695-j*22,str(jumlah))
c.drawRightString(442,695-j*22,format(harga,"8,d"))
c.drawRightString(482,695-j*22,str(profit))
c.line(72,701-(j+1)*22,500,701-(j+1)*22)
c.drawRightString(370,701-(j+2)*22,str(t))
c.line(72,707-(j+3)*22,500,707-(j+3)*22)
c.save()
cur.close()
con.close()
subprocess.Popen("Lap_Stock.pdf",shell=True)
def lap_beli():
cur = con.cursor()
cur.execute(sql1+" "+sql2)
data_masuk = cur.fetchall()
c = canvas.Canvas("Lap_Pembelian.pdf", pagesize=letter)
18
c.setFont("Helvetica-Bold", 12)
c.setFillColor(gray)
c.drawString(72,750,"GROSIR SAMARINDA")
c.setFillColor(blue)
c.drawString(480,750,str(datetime.date.today()))
c.setFont("Helvetica-Bold", 9)
c.setFillColor(black)
c.line(72,712,550,712)
c.drawString(75,700,"NOTA")
c.drawString(122,700,"TANGGAL")
c.drawString(177,700,"KODE")
c.drawString(210,700,"NAMA BARANG")
c.drawString(350,700,"SATUAN")
c.drawString(405,700,"JUMLAH")
c.drawString(450,700,"HARGA")
c.drawString(513,700,"TOTAL")
c.line(72,695,550,695)
c.setFont("Helvetica", 9)
j=0
tot=0
jb=0
for i in data_masuk:
nota = i[0]
tgl = i[1]
19
kode = i[2]
nama = i[3]
sat = i[4]
jum = i[5]
harga = i[6]
j+= 1
jb+= jum
tot+= total
ctgl=tgl.strftime("%d-%m-%Y")
c.drawString(75,695-j*22,nota)
c.drawString(122,695-j*22,ctgl)
c.drawString(177,695-j*22,kode)
c.drawString(210,695-j*22,nama)
c.drawString(350,695-j*22,sat)
c.drawRightString(432,695-j*22,str(jum))
c.drawRightString(486,695-j*22,format(harga,"8,d"))
c.drawRightString(545,695-j*22,format(total,"8,d"))
c.line(72,701-(j+1)*22,550,701-(j+1)*22)
c.drawRightString(432,701-(j+2)*22,format(jb,"8,d"))
c.drawRightString(545,701-(j+2)*22,format(tot,"8,d"))
c.line(72,707-(j+3)*22,550,707-(j+3)*22)
c.save()
20
cur.close()
con.close()
subprocess.Popen("Lap_Pembelian.pdf",shell=True)
def lap_jual():
cur = con.cursor()
cur.execute(sql1+" "+sql2)
data_jual = cur.fetchall()
c = canvas.Canvas("Lap_Penjualan.pdf", pagesize=letter)
c.setFont("Helvetica-Bold", 12)
c.setFillColor(gray)
c.drawString(72,750,"GROSIR SAMARINDA")
c.setFillColor(blue)
c.drawString(480,750,str(datetime.date.today()))
c.setFont("Helvetica-Bold", 9)
c.setFillColor(black)
c.line(72,712,550,712)
c.drawString(75,700,"NOTA")
c.drawString(122,700,"TANGGAL")
21
c.drawString(177,700,"KODE")
c.drawString(210,700,"NAMA BARANG")
c.drawString(350,700,"SATUAN")
c.drawString(405,700,"JUMLAH")
c.drawString(450,700,"HARGA")
c.drawString(513,700,"TOTAL")
c.line(72,695,550,695)
c.setFont("Helvetica", 9)
j=0
tot=0
jb=0
p=0
for i in data_jual:
nota = i[0]
tgl = i[1]
kode = i[2]
nama = i[3]
sat = i[4]
jum = i[5]
harga = i[6]
j+= 1
jb+= jum
p+= 1
tot+= total
22
ctgl=tgl.strftime("%d-%m-%Y")
c.drawString(75,695-j*22,nota)
c.drawString(122,695-j*22,ctgl)
c.drawString(177,695-j*22,kode)
c.drawString(210,695-j*22,nama)
c.drawString(350,695-j*22,sat)
c.drawRightString(432,695-j*22,str(jum))
c.drawRightString(486,695-j*22,format(harga,"8,d"))
c.drawRightString(545,695-j*22,format(total,"8,d"))
if p==25:
c.showPage()
c.setFont("Helvetica", 9)
j=0
c.line(72,701-(j+1)*22,550,701-(j+1)*22)
c.drawRightString(432,701-(j+2)*22,format(jb,"8,d"))
c.drawRightString(545,701-(j+2)*22,format(tot,"8,d"))
c.line(72,707-(j+3)*22,550,707-(j+3)*22)
c.save()
cur.close()
con.close()
subprocess.Popen("Lap_Penjualan.pdf",shell=True)
def lap_rusak():
23
cur = con.cursor()
cur.execute(sql1+" "+sql2)
data_rusak = cur.fetchall()
c = canvas.Canvas("Lap_Rusak.pdf", pagesize=letter)
c.setFont("Helvetica-Bold", 12)
c.setFillColor(gray)
c.drawString(72,750,"GROSIR SAMARINDA")
c.setFillColor(blue)
c.drawString(480,750,str(datetime.date.today()))
c.setFont("Helvetica-Bold", 9)
c.setFillColor(black)
c.line(72,712,550,712)
c.drawString(75,700,"NO.BA")
c.drawString(123,700,"TANGGAL")
c.drawString(177,700,"KODE")
c.drawString(210,700,"NAMA BARANG")
c.drawString(350,700,"SATUAN")
c.drawString(405,700,"JUMLAH")
c.drawString(450,700,"NILAI")
24
c.drawString(513,700,"TOTAL")
c.line(72,695,550,695)
c.setFont("Helvetica", 9)
j=0
tot=0
jb=0
for i in data_rusak:
nota = i[0]
tgl = i[1]
kode = i[2]
nama = i[3]
sat = i[4]
jum = i[5]
harga = i[6]
j+= 1
jb+= jum
tot+= total
ctgl=tgl.strftime("%d-%m-%Y")
c.drawString(75,695-j*22,nota)
c.drawString(123,695-j*22,ctgl)
c.drawString(177,695-j*22,kode)
c.drawString(210,695-j*22,nama)
c.drawString(350,695-j*22,sat)
c.drawRightString(432,695-j*22,str(jum))
25
c.drawRightString(486,695-j*22,format(harga,"8,d"))
c.drawRightString(545,695-j*22,format(total,"8,d"))
c.line(72,701-(j+1)*22,550,701-(j+1)*22)
c.drawRightString(432,701-(j+2)*22,format(jb,"8,d"))
c.drawRightString(545,701-(j+2)*22,format(tot,"8,d"))
c.line(72,707-(j+3)*22,550,707-(j+3)*22)
c.save()
cur.close()
con.close()
subprocess.Popen("Lap_Rusak.pdf",shell=True)
def lap_profit():
cur = con.cursor()
data_stock = cur.fetchall()
cur_beli = con.cursor()
cur_jual = con.cursor()
cur_rusak = con.cursor()
c = canvas.Canvas("Lap_Profit.pdf", pagesize=letter)
c.setFont("Helvetica-Bold", 12)
26
c.setFillColor(gray)
c.drawString(72,750,"GROSIR SAMARINDA")
c.setFillColor(blue)
c.drawString(480,750,str(datetime.date.today()))
c.setFont("Helvetica-Bold", 9)
c.setFillColor(black)
c.line(72,712,545,712)
c.drawString(72,700,"KODE")
c.drawString(110,700,"NAMA BARANG")
c.drawString(253,700,"SATUAN")
c.drawString(312,700,"PENJUALAN")
c.drawString(373,700,"PEMBELIAN")
c.drawString(438,700,"RUSAK")
c.drawString(494,700,"KAS GROSIR")
c.line(72,695,545,695)
c.setFont("Helvetica", 9)
j= 0
tjual= 0
tbeli= 0
trusak= 0
tprofit= 0
for i in data_stock:
kode = i[0]
nama = i[1]
27
satuan = i[2]
cur_beli.execute(sql_beli,kode)
data_beli = cur_beli.fetchone()
j_beli = data_beli[0]
if j_beli is None:
j_beli = 0
cur_jual.execute(sql_jual,kode)
data_jual = cur_jual.fetchone()
j_jual = data_jual[0]
if j_jual is None:
j_jual = 0
cur_rusak.execute(sql_rusak,kode)
data_rusak = cur_rusak.fetchone()
j_rusak = data_rusak[0]
if j_rusak is None:
j_rusak = 0
tjual+= j_jual
tbeli+= j_beli
28
trusak+= j_rusak
tprofit+= j_profit
j+= 1
c.drawCentredString(86,695-j*22,kode)
c.drawString(110,695-j*22,nama)
c.drawString(253,695-j*22,satuan)
c.drawRightString(360,695-j*22,format(int(j_jual),"8,d"))
c.drawRightString(420,695-j*22,format(int(j_beli),"8,d"))
c.drawRightString(470,695-j*22,format(int(j_rusak),"8,d"))
c.drawRightString(540,695-j*22,format(int(j_profit),"8,d"))
c.line(72,701-(j+1)*22,545,701-(j+1)*22)
c.drawRightString(360,701-(j+2)*22,format(int(tjual),"8,d"))
c.drawRightString(420,701-(j+2)*22,format(int(tbeli),"8,d"))
c.drawRightString(470,701-(j+2)*22,format(int(trusak),"8,d"))
c.drawRightString(540,701-(j+2)*22,format(int(tprofit),"8,d"))
c.line(72,707-(j+3)*22,545,707-(j+3)*22)
c.save()
cur.close()
cur_beli.close()
cur_jual.close()
cur_rusak.close()
con.close()
subprocess.Popen("Lap_Profit.pdf",shell=True)
29
##lap_stock()
##lap_beli()
##lap_jual()
##lap_rusak()
##lap_profit()
30
class omsetjual:
def __init__(self,parent,title):
self.parent = parent
self.parent.title(title)
self.parent.protocol("WM_DELETE_WINDOW",self.onClose)
lebar = 400
tinggi = 180
setTengahX = (self.parent.winfo_screenwidth()-lebar)//2
setTengahY = (self.parent.winfo_screenheight()-tinggi)//2
self.parent.geometry("%ix%i+%i+%i" %(lebar,tinggi,\
setTengahX,setTengahY))
self.parent.resizable(False,False)
self.aturKomponen()
def aturKomponen(self):
kodeFrame = Frame(self.parent)
kodeFrame.pack(side=TOP)
mainFrame = Frame(self.parent)
mainFrame.pack(side=TOP)
btnFrame = Frame(self.parent)
btnFrame.pack(side=BOTTOM)
31
Label(kodeFrame,text=' ').grid(row=0,column=0)
Label(btnFrame,text=' ').grid(row=2,column=0)
Label(kodeFrame,text='Kode Barang').grid(row=1,column=0,pady=3,sticky=W)
self.entKode = Entry(kodeFrame,width=50)
self.entKode.grid(row=1,column=1)
Label(kodeFrame,text='').grid(row=1,column=2)
Label(mainFrame,text='Nama Barang').grid(row=1,column=0,pady=3,sticky=W)
self.entNama = Entry(mainFrame,width=50)
self.entNama.grid(row=1,column=1)
Label(mainFrame,text='% Profit').grid(row=5,column=0,pady=3,sticky=W)
self.entProfit = Entry(mainFrame,width=50)
self.entProfit.grid(row=5,column=1)
Label(mainFrame,text=' ').grid(row=6,column=0,sticky=W)
self.btnCancel = Button(btnFrame,text='Cancel',\
command=self.onCancel,width=10)
self.btnCancel.grid(row=1,column=1,padx=3)
self.btnSave = Button(btnFrame,text='Save',\
32
command=self.onSave,width=10)
self.btnSave.grid(row=1,column=2,padx=3)
self.btnClose = Button(btnFrame,text='Close',\
command=self.onClose,width=10)
self.btnClose.grid(row=1,column=3,padx=3)
def onClose(self,event=None):
self.parent.destroy()
def onCancel(self):
self.entKode.delete(0,END)
self.entNama.delete(0,END)
def onSave(self):
con = connect(db='sembako',user='admin',
passwd='admin',host='127.0.0.1',port=3306,autocommit=True)
cur = con.cursor()
cKode = self.entKode.get()
nProfit = int(self.entProfit.get())
cur.execute(sqlstock,(nProfit,cKode))
cur.close()
con.close()
33
##root = Tk()
##root.mainloop()
34
import time
class EntryPembelian:
def __init__(self,parent,title):
self.parent = parent
self.parent.title(title)
self.parent.protocol("WM_DELETE_WINDOW",self.onClose)
lebar = 450
tinggi = 200
setTengahX = (self.parent.winfo_screenwidth()-lebar)//2
setTengahY = (self.parent.winfo_screenheight()-tinggi)//2
self.parent.geometry("%ix%i+%i+%i" %(lebar,tinggi,setTengahX,setTengahY))
self.parent.resizable(False,False)
self.aturKomponen()
def aturKomponen(self):
mainFrame = Frame(self.parent)
mainFrame.pack(side=TOP)
btnFrame = Frame(self.parent)
btnFrame.pack(side=BOTTOM)
35
Label(mainFrame,text=' ').grid(row=0,column=0)
Label(btnFrame,text=' ').grid(row=1,column=0)
self.entTglMasuk = Entry(mainFrame,width=40)
self.entTglMasuk.grid(row=1,column=1)
tgl = time.strftime("%d-%m-%Y")
self.entTglMasuk.insert(0,tgl)
Label(mainFrame,text='Nomor Nota').grid(row=2,column=0,pady=3,sticky=W)
self.entNota = Entry(mainFrame,width=40)
self.entNota.grid(row=2,column=1)
Label(mainFrame,text='Kode Barang').grid(row=3,column=0,pady=3,sticky=W)
self.entKode = Entry(mainFrame,width=40)
self.entKode.grid(row=3,column=1)
Label(mainFrame,text='Jumlah').grid(row=4,column=0,pady=3,sticky=W)
self.entJumlah = Entry(mainFrame,width=40)
self.entJumlah.grid(row=4,column=1)
Label(mainFrame,text='Harga Beli').grid(row=5,column=0,pady=3,sticky=W)
self.entHarga = Entry(mainFrame,width=40)
self.entHarga.grid(row=5,column=1)
36
self.btnBaru.grid(row=0,column=1,padx=3)
self.btnSave = Button(btnFrame,text='Simpan',command=self.onSave,width=10)
self.btnSave.grid(row=0,column=3,padx=3)
self.btnClose = Button(btnFrame,text='Close',command=self.onClose,width=10)
self.btnClose.grid(row=0,column=4,padx=3)
self.entNota.focus_set()
def onClose(self,event=None):
self.parent.destroy()
def onNew(self):
tgl = time.strftime("%d-%m-%Y")
self.entNota.delete(0,END)
self.entKode.delete(0,END)
self.entJumlah.delete(0,END)
self.entHarga.delete(0,END)
self.entNota.focus_set()
def onSave(self):
mainFrame = Frame(self.parent)
mainFrame.pack(side=TOP)
37
con = connect(db='sembako',user='admin',
passwd='admin',host='127.0.0.1',port=3306,autocommit=True)
cur = con.cursor()
cNota = self.entNota.get()
cur.execute(sqlnota,cNota)
if cur.rowcount > 0:
self.parent.update()
self.parent.deiconify()
self.entNota.focus_set()
return
cTglMasuk = self.entTglMasuk.get()
slist = cTglMasuk.split("-")
dTglMasuk = date(int(slist[2]),int(slist[1]),int(slist[0]))
cKode = self.entKode.get()
cur.execute(sqlbarang,cKode)
if cur.rowcount == 0:
messagebox.showwarning(title="Peringatan",
self.parent.update()
self.parent.deiconify()
self.entKode.focus_set()
38
return
nJumlah = int(self.entJumlah.get())
nHarga = int(self.entHarga.get())
"(nota_masuk,tgl_masuk,kode_barang,jumlah,harga_beli,total_beli) "+\
"VALUES (%s,%s,%s,%s,%s,%s)"
cur.execute(sql,(cNota,dTglMasuk,cKode,nJumlah,nHarga,nTot))
cur.execute(sqlstock,(nJumlah,nHarga,cKode))
cur.close()
con.close()
##root = Tk()
##root.mainloop()
39
import time
class EntryPenjualan:
def __init__(self,parent,title):
self.parent = parent
self.parent.title(title)
self.parent.protocol("WM_DELETE_WINDOW",self.onClose)
lebar = 500
tinggi = 250
setTengahX = (self.parent.winfo_screenwidth()-lebar)//2
setTengahY = (self.parent.winfo_screenheight()-tinggi)//2
self.parent.geometry("%ix%i+%i+%i" %(lebar,tinggi,setTengahX,setTengahY))
self.parent.resizable(False,False)
self.aturKomponen()
def aturKomponen(self):
mainFrame = Frame(self.parent)
mainFrame.pack(side=TOP)
btnFrame = Frame(self.parent)
btnFrame.pack(side=BOTTOM)
40
Label(mainFrame,text=' ').grid(row=0,column=0)
Label(btnFrame,text=' ').grid(row=1,column=0)
self.entTglKeluar = Entry(mainFrame,width=40)
self.entTglKeluar.grid(row=1,column=1)
tgl = time.strftime("%d-%m-%Y")
self.entTglKeluar.insert(0,tgl)
Label(mainFrame,text='Nomor Nota').grid(row=2,column=0,pady=3,sticky=W)
self.entNota = Entry(mainFrame,width=40)
self.entNota.grid(row=2,column=1)
Label(mainFrame,text='Kode Barang').grid(row=3,column=0,pady=3,sticky=W)
self.entKode = Entry(mainFrame,width=40)
self.entKode.grid(row=3,column=1)
Label(mainFrame,text='Jumlah').grid(row=4,column=0,pady=3,sticky=W)
self.entJumlah = Entry(mainFrame,width=40)
self.entJumlah.grid(row=4,column=1)
Label(mainFrame,text='Harga Jual').grid(row=5,column=0,pady=3,sticky=W)
self.entHargaJual = Entry(mainFrame,width=40)
self.entHargaJual.grid(row=5,column=1)
41
Label(mainFrame,text='Total').grid(row=6,column=0,pady=3,sticky=W)
self.entTotal = Entry(mainFrame,width=40)
self.entTotal.grid(row=6,column=1)
self.btnBaru.grid(row=0,column=1,padx=3)
self.btnSave = Button(btnFrame,text='Proses',command=self.onProcess,width=10)
self.btnSave.grid(row=0,column=2,padx=3)
self.btnSave = Button(btnFrame,text='Simpan',command=self.onSave,width=10)
self.btnSave.grid(row=0,column=3,padx=3)
self.btnClose = Button(btnFrame,text='Close',command=self.onClose,width=10)
self.btnClose.grid(row=0,column=4,padx=3)
self.entNota.focus_set()
def onClose(self,event=None):
self.parent.destroy()
def onNew(self):
self.entNota.delete(0,END)
self.entKode.delete(0,END)
self.entJumlah.delete(0,END)
42
self.entHargaJual.delete(0,END)
self.entTotal.delete(0,END)
self.entNota.focus_set()
def onProcess(self):
con = connect(db='sembako',user='admin',
passwd='admin',host='127.0.0.1',port=3306,autocommit=True)
cur = con.cursor()
cKode = self.entKode.get()
cur.execute(sqlbarang,cKode)
data = cur.fetchone()
nHarga = data[0]
nProfit = data[1]
self.entHargaJual.insert(0,str(nHarga))
nJumlah = self.entJumlah.get()
self.entTotal.insert(0,nTotal)
cur.close()
con.close()
def onSave(self):
mainFrame = Frame(self.parent)
mainFrame.pack(side=TOP)
43
con = connect(db='sembako',user='admin',
passwd='admin',host='127.0.0.1',port=3306,autocommit=True)
cur = con.cursor()
cNota = self.entNota.get()
cur.execute(sqlnota,cNota)
if cur.rowcount > 0:
self.parent.update()
self.parent.deiconify()
self.entNota.focus_set()
return
cTglKeluar = self.entTglKeluar.get()
slist = cTglKeluar.split("-")
dTglKeluar = date(int(slist[2]),int(slist[1]),int(slist[0]))
cKode = self.entKode.get()
cur.execute(sqlbarang,cKode)
if cur.rowcount == 0:
self.parent.update()
self.parent.deiconify()
self.entKode.focus_set()
return
44
nJumlah = int(self.entJumlah.get())
nHarga = int(self.entHargaJual.get())
cur.execute(sql,(cNota,dTglKeluar,cKode,nJumlah,nHarga,nTot))
cur.execute(sqlstock,(nJumlah,cKode))
cur.close()
con.close()
##root = Tk()
##root.mainloop()
45
import time
class EntryRusak:
def __init__(self,parent,title):
self.parent = parent
self.parent.title(title)
self.parent.protocol("WM_DELETE_WINDOW",self.keluar)
lebar = 500
tinggi = 250
setTengahX = (self.parent.winfo_screenwidth()-lebar)//2
setTengahY = (self.parent.winfo_screenheight()-tinggi)//2
self.parent.geometry("%ix%i+%i+%i" %(lebar,tinggi,setTengahX,setTengahY))
self.parent.resizable(False,False)
self.aturKomponen()
def aturKomponen(self):
mainFrame = Frame(self.parent)
mainFrame.pack(side=TOP)
btnFrame = Frame(self.parent)
btnFrame.pack(side=BOTTOM)
46
Label(mainFrame,text=' ').grid(row=0,column=0)
Label(btnFrame,text=' ').grid(row=1,column=0)
Label(mainFrame,text='Tgl BA (dd-mm-yyyy)').grid(row=1,column=0,pady=3,sticky=W)
self.entTglRusak = Entry(mainFrame,width=40)
self.entTglRusak.grid(row=1,column=1)
tgl = time.strftime("%d-%m-%Y")
self.entTglRusak.insert(0,tgl)
Label(mainFrame,text='Nomor BA').grid(row=2,column=0,pady=3,sticky=W)
self.entBA = Entry(mainFrame,width=40)
self.entBA.grid(row=2,column=1)
Label(mainFrame,text='Kode Barang').grid(row=3,column=0,pady=3,sticky=W)
self.entKode = Entry(mainFrame,width=40)
self.entKode.grid(row=3,column=1)
Label(mainFrame,text='Jumlah').grid(row=4,column=0,pady=3,sticky=W)
self.entJumlah = Entry(mainFrame,width=40)
self.entJumlah.grid(row=4,column=1)
Label(mainFrame,text='Harga Barang').grid(row=5,column=0,pady=3,sticky=W)
self.entHargaBarang = Entry(mainFrame,width=40)
self.entHargaBarang.grid(row=5,column=1)
47
Label(mainFrame,text='Total').grid(row=6,column=0,pady=3,sticky=W)
self.entTotal = Entry(mainFrame,width=40)
self.entTotal.grid(row=6,column=1)
self.btnBaru.grid(row=0,column=1,padx=3)
self.btnSave = Button(btnFrame,text='Proses',command=self.proses,width=10)
self.btnSave.grid(row=0,column=2,padx=3)
self.btnSave = Button(btnFrame,text='Simpan',command=self.simpan,width=10)
self.btnSave.grid(row=0,column=3,padx=3)
self.btnClose = Button(btnFrame,text='Close',command=self.keluar,width=10)
self.btnClose.grid(row=0,column=4,padx=3)
self.entBA.focus_set()
def keluar(self,event=None):
self.parent.destroy()
def baru(self):
self.entBA.delete(0,END)
self.entKode.delete(0,END)
self.entJumlah.delete(0,END)
48
self.entHargaBarang.delete(0,END)
self.entTotal.delete(0,END)
self.entBA.focus_set()
def proses(self):
con = connect(db='sembako',user='admin',
passwd='admin',host='127.0.0.1',port=3306,autocommit=True)
cur = con.cursor()
cKode = self.entKode.get()
cur.execute(sqlbarang,cKode)
data = cur.fetchone()
nHarga = data[0]
self.entHargaBarang.insert(0,str(nHarga))
nJumlah = self.entJumlah.get()
self.entTotal.insert(0,nTotal)
cur.close()
con.close()
def simpan(self):
mainFrame = Frame(self.parent)
mainFrame.pack(side=TOP)
con = connect(db='sembako',user='admin',
passwd='admin',host='127.0.0.1',port=3306,autocommit=True)
49
cur = con.cursor()
cBA = self.entBA.get()
cur.execute(sqlBA,cBA)
if cur.rowcount > 0:
self.parent.update()
self.parent.deiconify()
self.entBA.focus_set()
return
cTglRusak = self.entTglRusak.get()
slist = cTglRusak.split("-")
dTglRusak = date(int(slist[2]),int(slist[1]),int(slist[0]))
cKode = self.entKode.get()
cur.execute(sqlbarang,cKode)
if cur.rowcount == 0:
self.parent.update()
self.parent.deiconify()
self.entKode.focus_set()
return
nJumlah = int(self.entJumlah.get())
50
nHarga = int(self.entHargaBarang.get())
cur.execute(sql,(cBA,dTglRusak,cKode,nJumlah,nHarga,nTot))
cur.execute(sqlstock,(nJumlah,cKode))
cur.close()
con.close()
##root = Tk()
##root.mainloop()
51
import tkinter.ttk
import pymysql
class TampilStock:
def __init__(self,parent,judul):
self.parent = parent
self.parent.title(judul)
lebar = 710
tinggi = 300
setTengahX = (self.parent.winfo_screenwidth()-lebar)//2
setTengahY = (self.parent.winfo_screenheight()-tinggi)//2
self.parent.protocol("WM_DELETE_WINDOW", self.Tutup)
self.parent.resizable(False, False)
self.aturKomponen()
self.isiTabel()
def aturKomponen(self):
mainFrame = Frame(self.parent)
mainFrame.pack(fill=BOTH, expand=YES)
fr_data.pack(fill=BOTH, expand=YES)
52
show='headings')
command=self.trvTabel.yview)
command=self.trvTabel.xview)
sbVer.pack(side=RIGHT, fill=Y)
sbHor.pack(side=BOTTOM, fill=X)
self.trvTabel.pack(side=LEFT, fill=BOTH)
def isiTabel(self):
cur = con.cursor()
data_stock = cur.fetchall()
self.trvTabel.heading(kolom, text=kolom)
self.trvTabel.column("KODE",width=60,anchor="center")
self.trvTabel.column("NAMA BARANG",width=220,anchor="w")
self.trvTabel.column("SATUAN",width=110,anchor="w")
self.trvTabel.column("JUMLAH",width=70,anchor="e")
self.trvTabel.column("HARGA SATUAN",width=130,anchor="e")
53
self.trvTabel.column("% PROFIT",width=70,anchor="center")
cur.close()
con.close()
self.parent.destroy()
##root = tkinter.Tk()
##root.mainloop()
BAB III
HASIL PROGRAM
A. Menu Utama
54
55
Master Data Stock = terdiri dari Isi Data Stock, Lihat Data Stock, Ubah
Persentase Profit.
B. Entry Data
C. Laporan