def price_check(TotalLabel, ScannedItems, BarcodeEntry): PriceCheck = Toplevel(bg='#EDFBFF') w = 600 #Open top level window in the centre of the computer's screen h = 500 ws = PriceCheck.winfo_screenwidth() hs = PriceCheck.winfo_screenheight() x = (ws/2)-(w/2) y = (hs/2)-(h/2) PriceCheck.geometry('%dx%d+%d+%d' % (w, h, x, y)) PriceCheck.title('Price Check') PriceCheckFrame = Frame(PriceCheck, bg='#EDFBFF') PriceCheckFrame.pack(pady=100) Label(PriceCheckFrame, text='Barcode :', justify='center', font=(None, 20), bg='#EDFBFF').grid(row=0, column=0, padx=2, pady=2) BarcodeVar = StringVar() #Search database by barcode reference BarcodeVar.trace('w', lambda *args: limitSize(BarcodeVar, 12)) BarcodeSearch = Entry(PriceCheckFrame, justify='center', font=(None, 20), width='15', textvariable=BarcodeVar) BarcodeSearch.grid(row=0, column=1, padx=2, pady=2) BarcodeSearch.focus() Label(PriceCheckFrame, text='Item Description :', justify='center', font=(None, 20), bg='#EDFBFF').grid(row=1, column=0, padx=2, pady=2) DescriptionVar = StringVar() #Search database by item name reference DescriptionVar.trace('w', lambda *args: limitSize(DescriptionVar, 14)) DescriptionSearch = Entry(PriceCheckFrame, justify='center', font=(None, 20), width='15', textvariable=DescriptionVar) DescriptionSearch.grid(row=1, column=1, padx=2, pady=2) Button(PriceCheckFrame, text='Search', justify='center', font=(None,18),width='10', height='4', #Search button command=lambda: search_item(TotalLabel, ScannedItems, BarcodeEntry, PriceCheck, PriceCheckFrame, BarcodeSearch, DescriptionSearch)).grid(row=2, column=0, columnspan=2, pady=2)
def add_stock_button(ViewStock, ViewStockOptionFrame): ViewStock.title('View Stock - Add Stock') ViewStockOptionFrame.pack_forget() AddNewStockFrame = Frame(ViewStock, bg='#EDFBFF') AddNewStockFrame.pack(pady=50) Label(AddNewStockFrame, text='ADD STOCK', font='bold', bg='#EDFBFF').grid(column=0, row=0, columnspan=2) Label(AddNewStockFrame, text='Stock ID:', justify='center', font=(None, 20), bg='#EDFBFF').grid(row=1, column=0, padx=2, pady=2) NewStockIDEntry = Entry(AddNewStockFrame, justify='center', font=(None, 20), width='15') NewStockIDEntry.grid(row=1, column=1, padx=2, pady=2) next_stock_id(NewStockIDEntry) NewStockIDEntry['state']='disabled' Label(AddNewStockFrame, text='Item Name:', justify='center', font=(None, 20), bg='#EDFBFF').grid(row=2, column=0, padx=2, pady=2) ItemNameVar = StringVar() ItemNameVar.trace('w', lambda *args: limitSize(ItemNameVar, 14)) NewItemNameEntry = Entry(AddNewStockFrame, justify='center', font=(None, 20), width='15', textvariable=ItemNameVar) NewItemNameEntry.grid(row=2, column=1, padx=2, pady=2) NewItemNameEntry.focus() Label(AddNewStockFrame, text='Unit_Price: £', justify='center', font=(None, 20), bg='#EDFBFF').grid(row=3, column=0, padx=2, pady=2) UnitPriceVar = StringVar() UnitPriceVar.trace('w', lambda *args: limitSize(UnitPriceVar, 5)) NewUnitPriceEntry = Entry(AddNewStockFrame, justify='center', font=(None, 20), width='15', textvariable=UnitPriceVar) NewUnitPriceEntry.grid(row=3, column=1, padx=2, pady=2) Label(AddNewStockFrame, text='No_in_Stock:', justify='center', font=(None, 20), bg='#EDFBFF').grid(row=4, column=0, padx=2, pady=2) NoinStockVar = StringVar() NoinStockVar.trace('w', lambda *args: limitSize(NoinStockVar, 6)) NewNoinStockEntry = Entry(AddNewStockFrame, justify='center', font=(None, 20), width='15', textvariable=NoinStockVar) NewNoinStockEntry.grid(row=4, column=1, padx=2, pady=2) CancelButton = Button(AddNewStockFrame, text='Cancel', justify='center', font=(None,18), width='10', height='4', command=ViewStock.destroy) CancelButton.grid(row=5, column=0, padx=2, pady=2) AddNewStockButton = Button(AddNewStockFrame, text='Add New\nStock', justify='center', font=(None, 18), width='10', height='4', command=lambda: add_stock_to_database(ViewStock, NewStockIDEntry, NewItemNameEntry, NewUnitPriceEntry, NewNoinStockEntry)) AddNewStockButton.grid(row=5, column=1, padx=2, pady=2)
def gift_card_enquiry(): GCEnquiry = Toplevel(bg='#EDFBFF') w = 600 #Set up window dimensions h = 500 #in centre of screen ws = GCEnquiry.winfo_screenwidth() hs = GCEnquiry.winfo_screenheight() x = (ws / 2) - (w / 2) y = (hs / 2) - (h / 2) GCEnquiry.geometry('%dx%d+%d+%d' % (w, h, x, y)) GCEnquiry.title('Gift Card Enquiry') GCEnquiryOptionFrame = Frame(GCEnquiry, bg='#EDFBFF') GCEnquiryOptionFrame.pack(pady=100) Label(GCEnquiryOptionFrame, text='Gift Card Number:', bg='#EDFBFF', justify='center', font=(None, 20)).grid(row=0, column=0, padx='2', pady='5') GCNumVar = StringVar() #Limit entry box input size to 10 characters GCNumVar.trace('w', lambda *args: limitSize(GCNumVar, 10)) GCEntry = Entry(GCEnquiryOptionFrame, justify='center', font=(None, 20), width='15', textvariable=GCNumVar) #Gift card number entry box GCEntry.grid(row=0, column=1, padx='2', pady='5') GCEntry.focus() CancelButton = Button(GCEnquiryOptionFrame, text='Cancel', justify='center', font=(None, 18), width='10', height='4', command=GCEnquiry.destroy) CancelButton.grid(row=1, column=0, padx='2', pady='5') #Cancel button SearchGCButton = Button(GCEnquiryOptionFrame, text='Search', justify='center', font=(None, 18), width='10', height='4', command=lambda: enquiry(GCEntry, GCEnquiry)) SearchGCButton.grid(row=1, column=1, padx='2', pady='5') #Search button
def staff_id_confirmed(ViewStaff, EditStaffIDFrame, UpdateStaffID): connection = sqlite3.connect('shop.db') cursor = connection.cursor() StaffID = UpdateStaffID.get() cursor.execute('SELECT * FROM employee WHERE staff_id=?', [StaffID]) row = cursor.fetchone() if row != None: Password = row[1] FirstName = row[2] Surname = row[3] Position = row[4] EditStaffIDFrame.pack_forget() EditStaffFrame = Frame(ViewStaff, bg='#EDFBFF') EditStaffFrame.pack() Label(EditStaffFrame, text='EDIT STAFF', font='bold', bg='#EDFBFF').grid(column=0, row=0, columnspan=2) Label(EditStaffFrame, text='Staff ID:', justify='center', font=(None, 20), bg='#EDFBFF').grid(column=0, row=1, pady=15) UpdateStaffIDConfirm = Entry(EditStaffFrame, justify='center', font=(None, 20), width=15) UpdateStaffIDConfirm.insert(0, StaffID) UpdateStaffIDConfirm['state'] = 'disabled' UpdateStaffIDConfirm.grid(column=1, row=1, pady=15) Label(EditStaffFrame, text='New Password:'******'center', font=(None, 20), bg='#EDFBFF').grid(column=0, row=2) PasswordVar = StringVar() PasswordVar.trace('w', lambda *args: limitSize(PasswordVar, 4)) UpdatePassword = Entry(EditStaffFrame, justify='center', font=(None, 20), width=15, show='*', textvariable=PasswordVar) UpdatePassword.insert(0, Password) UpdatePassword.grid(column=1, row=2) Label(EditStaffFrame, text='New First Name:', justify='center', font=(None, 20), bg='#EDFBFF').grid(column=0, row=3) FirstNameVar = StringVar() FirstNameVar.trace('w', lambda *args: limitSize(FirstNameVar, 14)) UpdateFirstName = Entry(EditStaffFrame, justify='center', font=(None, 20), width=15, textvariable=FirstNameVar) UpdateFirstName.insert(0, FirstName) UpdateFirstName.grid(column=1, row=3) Label(EditStaffFrame, text='New Surname:', justify='center', font=(None, 20), bg='#EDFBFF').grid(column=0, row=4) SurnameVar = StringVar() SurnameVar.trace('w', lambda *args: limitSize(SurnameVar, 14)) UpdateSurname = Entry(EditStaffFrame, justify='center', font=(None, 20), width=15, textvariable=SurnameVar) UpdateSurname.insert(0, Surname) UpdateSurname.grid(column=1, row=4) Label(EditStaffFrame, text='New Position:', justify='center', font=(None, 20), bg='#EDFBFF').grid(column=0, row=5) value = StringVar() UpdatePosition = ttk.Combobox(EditStaffFrame, textvariable=value, text=Position, state='readonly', width='14', font=(None, 20), justify='center') Positions = [ 'Store Manager', 'Manager', 'Supervisor', 'Sales Assistant' ] UpdatePosition['values'] = Positions UpdatePosition.current(Positions.index(Position)) UpdatePosition.grid(column=1, row=5, padx=2, pady=2) connection.commit() connection.close() CancelButton = Button(EditStaffFrame, text='Cancel', justify='center', font=(None, 18), width='10', height='4', command=ViewStaff.destroy) CancelButton.grid(row=6, column=0, padx=2, pady=2) UpdateStaffButton = Button( EditStaffFrame, text='Update\nStaff', justify='center', font=(None, 18), width='10', height='4', command=lambda: update_staff(ViewStaff, UpdateStaffID, UpdatePassword, UpdateFirstName, UpdateSurname, UpdatePosition)) UpdateStaffButton.grid(row=6, column=1, padx=2, pady=2) elif row == None: ConfirmStaffIDError = Toplevel(bg='#EDFBFF') w = 200 h = 180 ws = ConfirmStaffIDError.winfo_screenwidth() hs = ConfirmStaffIDError.winfo_screenheight() x = (ws / 2) - (w / 2) y = (hs / 2) - (h / 2) ConfirmStaffIDError.geometry('%dx%d+%d+%d' % (w, h, x, y)) ConfirmStaffIDError.title('Staff ID does NOT exist') Message(ConfirmStaffIDError, text='ERROR:\nStaff ID does NOT exist', justify='center', font='bold', bg='#EDFBFF').pack() Button(ConfirmStaffIDError, text='Try Again', font=(None, 20), width='8', height='2', command=ConfirmStaffIDError.destroy).pack(padx='10', pady='5') UpdateStaffID.delete(0, END) UpdateStaffID.focus() connection.commit() connection.close() edit_staff()
def add_staff_button(ViewStaff, ViewStaffOptionFrame): ViewStaff.title('View Staff - Add Staff') ViewStaffOptionFrame.pack_forget() AddNewStaffFrame = Frame(ViewStaff, bg='#EDFBFF') AddNewStaffFrame.pack(pady=50) Label(AddNewStaffFrame, text='ADD STAFF', font='bold', bg='#EDFBFF').grid(column=0, row=0, columnspan=2) Label(AddNewStaffFrame, text='Staff ID:', justify='center', font=(None, 20), bg='#EDFBFF').grid(row=1, column=0, padx=2, pady=2) NewStaffIDEntry = Entry(AddNewStaffFrame, justify='center', font=(None, 20), width='15') NewStaffIDEntry.grid(row=1, column=1, padx=2, pady=2) next_staff_id(NewStaffIDEntry) NewStaffIDEntry['state'] = 'disabled' Label(AddNewStaffFrame, text='Password:'******'center', font=(None, 20), bg='#EDFBFF').grid(row=2, column=0, padx=2, pady=2) PasswordVar = StringVar() PasswordVar.trace('w', lambda *args: limitSize(PasswordVar, 4)) NewPasswordEntry = Entry(AddNewStaffFrame, show='*', justify='center', font=(None, 20), width='15', textvariable=PasswordVar) NewPasswordEntry.grid(row=2, column=1, padx=2, pady=2) NewPasswordEntry.focus() Label(AddNewStaffFrame, text='First Name:', justify='center', font=(None, 20), bg='#EDFBFF').grid(row=3, column=0, padx=2, pady=2) FirstNameVar = StringVar() FirstNameVar.trace('w', lambda *args: limitSize(FirstNameVar, 14)) NewFirstNameEntry = Entry(AddNewStaffFrame, justify='center', font=(None, 20), width='15', textvariable=FirstNameVar) NewFirstNameEntry.grid(row=3, column=1, padx=2, pady=2) Label(AddNewStaffFrame, text='Surname:', justify='center', font=(None, 20), bg='#EDFBFF').grid(row=4, column=0, padx=2, pady=2) SurnameVar = StringVar() SurnameVar.trace('w', lambda *args: limitSize(SurnameVar, 14)) NewSurnameEntry = Entry(AddNewStaffFrame, justify='center', font=(None, 20), width='15', textvariable=SurnameVar) NewSurnameEntry.grid(row=4, column=1, padx=2, pady=2) Label(AddNewStaffFrame, text='Position:', justify='center', font=(None, 20), bg='#EDFBFF').grid(row=5, column=0, padx=2, pady=2) value = StringVar() NewPositionEntry = ttk.Combobox(AddNewStaffFrame, textvariable=value, state='readonly', width='14', font=(None, 20), justify='center') NewPositionEntry['values'] = ('Store Manager', 'Manager', 'Supervisor', 'Sales Assistant') NewPositionEntry.current(0) NewPositionEntry.grid(row=5, column=1, padx=2, pady=2) CancelButton = Button(AddNewStaffFrame, text='Cancel', justify='center', font=(None, 18), width='10', height='4', command=ViewStaff.destroy) CancelButton.grid(row=6, column=0, padx=2, pady=2) AddNewStaffButton = Button( AddNewStaffFrame, text='Add New\nStaff', justify='center', font=(None, 18), width='10', height='4', command=lambda: add_staff_to_database( ViewStaff, NewStaffIDEntry, NewPasswordEntry, NewFirstNameEntry, NewSurnameEntry, NewPositionEntry)) AddNewStaffButton.grid(row=6, column=1, padx=2, pady=2)
def stock_id_confirmed(ViewStock, EditStockIDFrame, UpdateStockID): connection = sqlite3.connect('shop.db') cursor = connection.cursor() StockID = UpdateStockID.get() cursor.execute('SELECT * FROM stock WHERE stock_id=?', [StockID]) row = cursor.fetchone() if row != None: ItemName = row[1] UnitPrice = '{:.2f}'.format(row[2]) NoinStock = row[3] EditStockIDFrame.pack_forget() EditStockFrame = Frame(ViewStock, bg='#EDFBFF') EditStockFrame.pack() Label(EditStockFrame, text='EDIT STOCK', font='bold', bg='#EDFBFF').grid(column=0, row=0, columnspan=2) Label(EditStockFrame, text='Stock ID:', justify='center', font=(None, 20), bg='#EDFBFF').grid(column=0, row=1, pady=15) UpdateStockIDConfirm = Entry(EditStockFrame, justify='center', font=(None, 20), width=15) UpdateStockIDConfirm.insert(0, StockID) UpdateStockIDConfirm['state']='disabled' UpdateStockIDConfirm.grid(column=1, row=1, pady=15) Label(EditStockFrame, text='New Item Name:', justify='center', font=(None, 20), bg='#EDFBFF').grid(column=0, row=2) ItemNameVar = StringVar() ItemNameVar.trace('w', lambda *args: limitSize(ItemNameVar, 14)) UpdateItemName = Entry(EditStockFrame, justify='center', font=(None, 20), width=15, textvariable=ItemNameVar) UpdateItemName.insert(0, ItemName) UpdateItemName.grid(column=1, row=2) Label(EditStockFrame, text='New Unit Price: £', justify='center', font=(None, 20), bg='#EDFBFF').grid(column=0, row=3) UnitPriceVar = StringVar() UnitPriceVar.trace('w', lambda *args: limitSize(UnitPriceVar, 5)) UpdateUnitPrice = Entry(EditStockFrame, justify='center', font=(None, 20), width=15, textvariable=UnitPriceVar) UpdateUnitPrice.insert(0, UnitPrice) UpdateUnitPrice.grid(column=1, row=3) Label(EditStockFrame, text='New No. in Stock:', justify='center', font=(None, 20), bg='#EDFBFF').grid(column=0, row=4) NoinStockVar = StringVar() NoinStockVar.trace('w', lambda *args: limitSize(NoinStockVar, 6)) UpdateNoinStock = Entry(EditStockFrame, justify='center', font=(None, 20), width=15, textvariable=NoinStockVar) UpdateNoinStock.insert(0, NoinStock) UpdateNoinStock.grid(column=1, row=4) connection.commit() connection.close() CancelButton = Button(EditStockFrame, text='Cancel', justify='center', font=(None,18), width='10', height='4', command=ViewStock.destroy) CancelButton.grid(row=5, column=0, padx=2, pady=2) UpdateStockButton = Button(EditStockFrame, text='Update\nStock', justify='center', font=(None, 18), width='10', height='4', command=lambda: update_stock(ViewStock, UpdateStockID, UpdateItemName, UpdateUnitPrice, UpdateNoinStock)) UpdateStockButton.grid(row=5, column=1, padx=2, pady=2) elif row == None: #If row not found in database ConfirmStockIDError = Toplevel(bg='#EDFBFF') w = 200 #Create top level window h = 180 #in centre of screen. ws = ConfirmStockIDError.winfo_screenwidth() hs = ConfirmStockIDError.winfo_screenheight() x = (ws/2)-(w/2) y = (hs/2)-(h/2) ConfirmStockIDError.geometry('%dx%d+%d+%d' % (w, h, x, y)) ConfirmStockIDError.title('Staff ID does NOT exist') #Window title Message(ConfirmStockIDError, text='ERROR:\nStock ID does NOT exist', justify='center', font='bold', bg='#EDFBFF').pack() #Error message Button(ConfirmStockIDError, text='Try Again', font=(None, 20), width='8', height='2', command=ConfirmStockIDError.destroy).pack(padx='10', pady='5') #Try again UpdateStockID.delete(0,END) #Clear stock ID entry box UpdateStockID.focus() #Focus stock ID entry box connection.commit() connection.close() #Re-run edit_stock function
def gift_card_sale(TotalLabel, BarcodeEntry, ScannedItems, SignOffButton, TransVoidButton, SubtotalButton): GCSale = Toplevel(bg='#EDFBFF') w = 600 #Open top level window h = 500 ws = GCSale.winfo_screenwidth() hs = GCSale.winfo_screenheight() x = (ws / 2) - (w / 2) #Position window in centre of screen y = (hs / 2) - (h / 2) GCSale.geometry('%dx%d+%d+%d' % (w, h, x, y)) GCSale.title('Gift Card Sale') GCSaleFrame = Frame(GCSale, bg='#EDFBFF') GCSaleFrame.pack(pady=100) Label(GCSaleFrame, text='Gift Card Number:', bg='#EDFBFF', justify='center', font=(None, 20)).grid(row=0, column=0, padx='2', pady='5') GCNumberEntry = Entry(GCSaleFrame, justify='center', font=(None, 20), width='15') GCNumberEntry.grid(row=0, column=1, padx='2', pady='5') next_gift_card_number(GCNumberEntry) GCNumberEntry[ 'state'] = 'disabled' #Do not allow user to change the gift card number Label(GCSaleFrame, text='Value:', bg='#EDFBFF', justify='center', font=(None, 20)).grid(row=1, column=0, padx='2', pady='5') GCValueVar = StringVar() #Limit length of input to 5 characters GCValueVar.trace('w', lambda *args: limitSize(GCValueVar, 5)) GCValueEntry = Entry(GCSaleFrame, justify='center', font=(None, 20), width='15', textvariable=GCValueVar) #Enter value(£) of gift card GCValueEntry.focus() GCValueEntry.grid(row=1, column=1, padx='2', pady='5') CancelButton = Button(GCSaleFrame, text='Cancel', justify='center', font=(None, 18), width='10', height='4', command=GCSale.destroy) CancelButton.grid(row=2, column=0, padx='2', pady='5') AddGCButton = Button( GCSaleFrame, text='Add to\nTransaction', justify='center', font=(None, 18), width='10', height='4', command=lambda: add_gift_card( GCNumberEntry, GCValueEntry, TotalLabel, BarcodeEntry, GCSale, ScannedItems, SignOffButton, TransVoidButton, SubtotalButton)) AddGCButton.grid(row=2, column=1, padx='2', pady='5')