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)
Exemplo n.º 2
0
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
Exemplo n.º 4
0
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()
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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')