from
tkinter import *
from PIL import ImageTk, Image
from sqlite3 import *
from tkinter import ttk
from tkinter import messagebox
import time

# Save updated record
def update_record():
    # Grab record number
    selected = my_tree.focus()
    # Save new data
   
    my_tree.item(selected, text="", values=(upd_id, items_entry.get(), address_entry.get(), Email_entry.get(), Ph_No_entry.get(), Price_entry.get()))

    #update database
    conn=connect('database.db')
    c=conn.cursor()
    c.execute('''UPDATE CHECKOUT SET items=?, address=?, email=?, ph_No=?, price=? WHERE id=?''',
              (( items_entry.get(), address_entry.get(), Email_entry.get(), Ph_No_entry.get(), Price_entry.get(),id,)))
   
    conn.commit()
    conn.close()
    # Clear entry boxes
    id_l1.config(text='')
    items_entry.delete(0, END)
    address_entry.delete(0, END)
    Email_entry.delete(0, END)
    Ph_No_entry.delete(0, END)
    Price_entry.delete(0, END)
   




# Add Record
def add_record1():
    my_tree.tag_configure('oddrow', background="white")
    my_tree.tag_configure('evenrow', background="lightblue")

    conn=connect('database.db')
    c=conn.cursor()
    c.execute('''INSERT INTO CHECKOUT(items,address,email,ph_no,price) VALUES(?,?,?,?,?)''',
              (( items_entry.get(), address_entry.get(), Email_entry.get(), Ph_No_entry.get(), Price_entry.get())))
    c.execute('''SELECT id FROM CHECKOUT''')
    id=c.fetchall()
    print(id)
    for i in id:
        new_id=i[0]
    print(new_id)
    conn.commit()
    conn.close()

   



   
    if  new_id % 2 == 0:
        my_tree.insert(parent='', index='end', text="", values=(new_id, address_entry.get(), Email_entry.get(), address_entry.get(), Ph_No_entry.get(), Price_entry.get() ), tags=('evenrow',))
    else:
        my_tree.insert(parent='', index='end', text="", values=(new_id, address_entry.get(), Email_entry.get(), address_entry.get(), Ph_No_entry.get(), Price_entry.get()), tags=('oddrow',))

   

    # Clear the boxes
    id_l1.config(text='')
    items_entry.delete(0, END)
    address_entry.delete(0, END)
    Email_entry.delete(0, END)
    Ph_No_entry.delete(0, END)
    Price_entry.delete(0, END)
   



# Remove all records
def remove_all1():
    for record in my_tree.get_children():
        my_tree.delete(record)
    conn=connect('database.db')
    c=conn.cursor()
    #c.execute('''DELETE  FROM CHECKOUT''')  deletes all from checkout
    c.execute("DROP TABLE CHECKOUT") #this will delete table itself
    conn.commit()
    conn.close()
# Remove one selected
def remove_one1():
    x = my_tree.selection()[0]
    my_tree.delete(x)

    conn=connect('database.db')
    c=conn.cursor()
    c.execute('''DELETE FROM CHECKOUT WHERE id=?''',(upd_id,))

    conn.commit()
    conn.close()


# Remove many selected
def remove_many1():
    conn=connect('database.db')
    c=conn.cursor()
    x = my_tree.selection()
    for record in x:
        id_to_del=my_tree.item(record,'values')[0]
        print(id_to_del)
        c.execute('''DELETE FROM CHECKOUT WHERE id=?''',(id_to_del,))
        my_tree.delete(record)
    #or use c.executemany('''DELETE FROM CHECKOUT WHERE id=?''',[(a,)for a in ids_to_delete] )here ids_to_delete is list of ids selected    
       
    conn.commit()
    conn.close()


#move row
def up():
    rows = my_tree.selection()
    print(my_tree.selection())
    for row in rows:
        my_tree.move(row, my_tree.parent(row), my_tree.index(row)-1)
        print( my_tree.parent(row))
       
# Move Row Down
def down():
    rows = my_tree.selection()
    print(list(reversed(rows)))
    for row in reversed(rows):
        my_tree.move(row, my_tree.parent(row), my_tree.index(row)+1)

def select_record(e):
    global upd_id
    #clear entries first
    id_l1.config(text='')
    items_entry.delete(0,END)
    address_entry.delete(0,END)
    Email_entry.delete(0,END)
    Ph_No_entry.delete(0,END)
    Price_entry.delete(0,END)

    #grab record no
    selected=my_tree.focus()
    #grab values of that record
    values=my_tree.item(selected,'values')
    print(values)
    upd_id=values[0]
    #insert into tree
    id_l1.config(text=values[0])
    items_entry.insert(0,values[1])
    address_entry.insert(0,values[2])
    Email_entry.insert(0,values[3])
    Ph_No_entry.insert(0,values[4])
    Price_entry.insert(0,values[5])

   


def tree():
    global id_l1,items_entry,address_entry,Email_entry,Ph_No_entry,Price_entry,my_tree
    m1.destroy()
    m2=Tk()
    m2.title('TreeBase')
    m2.geometry("820x500")
    # Add Some Style
    style = ttk.Style()

    # Pick A Theme
    style.theme_use('default')

    # Configure the Treeview Colors
    style.configure("Treeview",
        background="#D3D3D3",
        foreground="black",
        rowheight=25,
        fieldbackground="#D3D3D3")

    # Change Selected Color
    style.map('Treeview',
        background=[('selected', "#347083")])
    # Create Treeview Frame
    tree_frame = Frame(m2)
    tree_frame.pack(pady=10)

   

    # Treeview Scrollbar
    tree_scroll = Scrollbar(tree_frame)
    tree_scroll.pack(side=RIGHT, fill=Y)

    # Create Treeview
    my_tree = ttk.Treeview(tree_frame, yscrollcommand=tree_scroll.set, selectmode="extended")
    # Pack to the screen
    my_tree.pack()

    #create label frame
    data_frame = LabelFrame(m2, text="Record")
    data_frame.pack(fill="x", expand="yes", padx=20)

    button_frame = LabelFrame(m2, text="Commands")
    button_frame.pack(fill="x", expand="yes", padx=20)


    #Configure the scrollbar
    tree_scroll.config(command=my_tree.yview)
   

    # Define Our Columns
    my_tree['columns'] = ("ID","items", "address","email", "ph_no","price")

    # Format Our Columns
    my_tree.column("#0", width=0, stretch=NO)
    my_tree.column("ID", anchor=CENTER, width=50)
    my_tree.column("items", anchor=W, width=140)
    my_tree.column("address", anchor=W, width=140)
    my_tree.column("email", anchor=CENTER, width=140)
    my_tree.column("ph_no", anchor=CENTER, width=140)
    my_tree.column("price", anchor=CENTER, width=140)


    # Create Headings
    my_tree.heading("#0", text="", anchor=W)
    my_tree.heading("ID", text="ID", anchor=CENTER)
    my_tree.heading("items", text="items", anchor=W)
    my_tree.heading("address", text="address", anchor=W)
    my_tree.heading("email", text="email", anchor=CENTER)
    my_tree.heading("ph_no", text="ph_no", anchor=CENTER)
    my_tree.heading("price", text="price", anchor=CENTER)

   

    # Create striped row tags
    my_tree.tag_configure('oddrow', background="white")
    my_tree.tag_configure('evenrow', background="lightblue")

   

    for i in a:
        new_id=i[0]
        if new_id % 2 == 0:
            my_tree.insert(parent='', index='end', text="", values=(i[0], i[1], i[2], i[3], i[4], i[5]), tags=('evenrow',))
        else:
            my_tree.insert(parent='', index='end', text="", values=(i[0], i[1], i[2], i[3], i[4], i[5]), tags=('oddrow',))

    id_label = Label(data_frame, text="id")
    id_label.grid(row=0, column=0, padx=10, pady=10)
    id_l1 = Label(data_frame,bg="white",width=15)
    id_l1.grid(row=0, column=1, padx=10, pady=10)

    items_label = Label(data_frame, text="items")
    items_label.grid(row=0, column=2, padx=10, pady=10)
    items_entry = Entry(data_frame)
    items_entry.grid(row=0, column=3, padx=10, pady=10)

    address_label = Label(data_frame, text="Address")
    address_label.grid(row=0, column=4, padx=10, pady=10)
    address_entry = Entry(data_frame)
    address_entry.grid(row=0, column=5, padx=10, pady=10)

    Email_label = Label(data_frame, text="Email")
    Email_label.grid(row=1, column=0, padx=10, pady=10)
    Email_entry = Entry(data_frame)
    Email_entry.grid(row=1, column=1, padx=10, pady=10)


    Ph_No_label = Label(data_frame, text="Ph_No:")
    Ph_No_label.grid(row=1, column=2, padx=10, pady=10)
    Ph_No_entry = Entry(data_frame)
    Ph_No_entry.grid(row=1, column=3, padx=10, pady=10)

    Price_label = Label(data_frame, text="Price")
    Price_label.grid(row=1, column=4, padx=10, pady=10)
    Price_entry = Entry(data_frame)
    Price_entry.grid(row=1, column=5, padx=10, pady=10)

 #####BUTTONS#########
    update_button = Button(button_frame, text="Update Record", command=update_record)
    update_button.grid(row=0, column=0, padx=10, pady=10)

    add_record = Button(button_frame, text="Add Record", command=add_record1)
    add_record.grid(row=0, column=1, pady=10, padx=10)



    # Remove all
    remove_all = Button(button_frame, text="Remove All Records", command=remove_all1)
    remove_all.grid(row=0, column=2, pady=10, padx=5)

    # Remove One
    remove_one = Button(button_frame, text="Remove One Selected", command=remove_one1)
    remove_one.grid(row=0, column=3, pady=10, padx=5)

    # Remove Many Selected
    remove_many = Button(button_frame, text="Remove Many Selected", command=remove_many1)
    remove_many.grid(row=0, column=4, pady=10, padx=5)

    move_up = Button(button_frame, text="Move Up", command=up)
    move_up.grid(pady=10, padx=5, row=0, column=5)

    move_down = Button(button_frame, text="Move Down", command=down)
    move_down.grid(pady=10, padx=5, row=0, column=6)

    my_tree.bind("<ButtonRelease-1>",select_record)








def db():
    global total,order,a
    price={'Chicken tikka':2000,"Chicken fajita":1900,"Malai Tikka":2100,"soup":500,"salad":200}
   
    conn=connect('database.db')
    c=conn.cursor()
    c.execute('''CREATE TABLE  IF NOT EXISTS CHECKOUT (id  integer PRIMARY KEY AUTOINCREMENT,
              items text,
              address text,
              email text,
              ph_no integer,
              price integer)''')
    x,y,z=ad.get(),email.get(),ContactVar.get()
    print(x,y,z)
    order=""
    total=0
   
   

    print(listbox.curselection())
    for i in listbox.curselection():
       
        order+=(listbox.get(i)+",")
        total+=price[listbox.get(i)]
   
    print(listbox.curselection())
    print(total)
    print(order)
       
    c.execute('''INSERT INTO CHECKOUT(items,address,email,ph_no,price) VALUES(?,?,?,?,?)''',(order,x,y,z,total))
    c.execute('''SELECT id FROM CHECKOUT''')
    id=c.fetchall()
    id=id[0][0]
    print(id)
    c.execute('''SELECT * FROM CHECKOUT''')
    a=c.fetchall()
   
    print(a)

    conn.commit()
    conn.close()


def done():
   
      messagebox.showinfo(title="Confirmed",message="Your order has been placed")
   
def checkout():
    global m1
   
    email_get=Email_e3.get()
    email_check1="@gmail.com"
    email_check2="@yahoo.com"
   
   
    if listbox.curselection()==():
        mb1=messagebox.showerror(title='ERROR!',message='Please pick an item.')
        return

     
    if len(address.get()) ==0:
          mb1=messagebox.showerror(title='ERROR!',message='Please enter present adress!')
          return
    if email_get.endswith(email_check1) or email_get.endswith(email_check2):
       pass
    else:
          mb2=messagebox.showerror(title='ERROR!',message='Please enter valid email address')
          Email_e3.delete(0,END)
          return
    if ContactVar.get().startswith("03") and len(ContactVar.get())==11 and ContactVar.get().isdigit:
        pass
    else:
        mb3=messagebox.showerror(title='ERROR!',message='Please enter valid contact number')
        MN_e3.delete(0,END)
        return
    db()
    m.destroy()
    m1=Tk()
    m1.geometry("300x300")
    bill_label=Label(m1,text="Your have chosen:")
    bill_label.pack(side=TOP)
    bill_label2=Label(m1,text=order)
    bill_label2.pack(side=TOP)
    bill_label3=Label(m1,text="Your total is:")
    bill_label3.pack(side=TOP,pady=(20,0))
    bill_Total=Label(m1,text=total)
    bill_Total.pack(side=TOP)
    confirm_b1=Button(m1,text="Place order",command=done)
    confirm_b1.pack(side=TOP,pady=20)
    confirm_b2=Button(m1,text="Update orders",command=tree)
    confirm_b2.pack(side=TOP,pady=5)
    m1.mainloop()

   


def window():
    global m,cb,address,Email_e3, ContactVar,CN_e2,MN_e3,listbox,ad,email
    mw.destroy()
    m = Tk()
    m.title('Welcome to Broadway')

    m.config(bg="orange")
   
    m.geometry("1020x600")
    KE_image = PhotoImage(file="broadwaymain.png")
    KE_image.subsample(1,1)
    KE_label = Label(m,image=KE_image,height=240)
    KE_label.place(x=0,y=0)

    Select_items=Label(m,text="Select items:",fg="#00008B",bg="orange",font="Bold")
    Select_items.place(x=40,y=250)

   

    Email_label = Label(m,text="Email",fg="#00008B",bg='orange',font="BOLD")
    Email_label.place(x=40,y=425)
    under_Email_label = Label(m,text="(Please provide a valid email address to receive your by Email)",fg="#00008B",bg='orange',font=("",10))
    under_Email_label.place(x=40,y=485)

    Address_label = Label(m,text="Address*",bg='orange',fg="#00008B",font="BOLD")
    Address_label.place(x=600,y=250)
    under_Address_label = Label(m,text="Complete address",fg="#00008B",bg='orange',font=("",10))
    under_Address_label.place(x=600,y=310)

    Mobile_label = Label(m,text="Mobile Number  *",fg="#00008B",bg='orange',font="BOLD")
    Mobile_label.place(x=600,y=425)
    under_Mobile_label = Label(m,text="eg: 03xx-xxxxxxx. Please provide your active mobile number",fg="#00008B",bg='orange',font=("",10))
    under_Mobile_label.place(x=600,y=485)
   
    listbox = Listbox(m,
                  bg="#f7ffde",
                  selectmode=MULTIPLE)
   
   
    listbox.insert(1,"Chicken tikka")
    listbox.insert(2,"Chicken fajita")
    listbox.insert(3,"Malai Tikka")
    listbox.insert(4,"soup")
    listbox.insert(5,"salad")

    listbox.config(height=listbox.size())
    listbox.place(x=40,y=290)
   

    ad=StringVar()
    address=Entry(m,width=65,textvariable=ad)
    address.place(x=600,y=290)
   
    email=StringVar()
    Email_e3=Entry(m,width=65,textvariable=email)
    Email_e3.place(x=40,y=465)

    ContactVar=StringVar()
    MN_e3=Entry(m,width=65,textvariable=ContactVar)
    MN_e3.place(x=600,y=465)

    Checkout_Btn=Button(m,text="Proceed to checkout",fg="white",bg="green",padx=25,relief=RAISED,highlightbackground = "black", highlightthickness = 2,command=checkout)
    Checkout_Btn.place(x=830,y=550)

    m.mainloop()

mw=Tk()
mw.title('Welcome to Broadway')
photo = PhotoImage(file = 'broadway logo.png')
mw.wm_iconphoto(True, photo)

mw.geometry("520x520")
Titleimage=PhotoImage(file='broadway.png')
Titleimage2=Titleimage.subsample(1,1)
title_label=Label(mw,image=Titleimage)
title_label.place(x=0,y=0)
Duplicate_bill_Btn=Button(mw,text="Take my order",fg="#3792cb",bg="orange",command=window,relief=RIDGE,bd=5,font=("",12,'bold'))
Duplicate_bill_Btn.place(x=240,y=330)


mw.mainloop()





  

Comments

Popular posts from this blog