| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- from tkinter import *
- from linked_data import Chain, format_dict
- import pprint
- chain = Chain()
- chain.populate()
- root = Tk()
- root.title('dsp blockchain')
- view = Entry(root, width=35, borderwidth=5)
- view.grid(row=0, column=1, columnspan=3, padx=10, pady=10)
- accept_id = Entry(root, width=35, borderwidth=5)
- accept_id.grid(row=4, column=1, columnspan=3, padx=10, pady=10)
- accept_id.insert(0, 'contract')
- accept_status = StringVar(root)
- accept_status.set('False') # default value
- OptionMenu(root, accept_status, 'False', 'True').grid(row=4, column=4)
- def myClick():
- chain.current_contract_state(int(view.get()))
- pprint.pprint(chain.state)
- def add_contract():
- # add contract to the blockchain
- def add():
- chain.new_contract(client.get(), contractor.get(), deadline.get(), description.get(), name.get(), int(price.get()), people.get().split(','), initiator.get())
- # destroy add contract window, and print conformation
- newWindow.destroy()
- print('contract added')
- # make new window for adding the information for the contract
- newWindow = Toplevel(root)
- newWindow.title('Add contract')
- # create all text boxes
- Label(newWindow, text='The client: ').grid(row=0, column=0)
- client = Entry(newWindow, width=35, borderwidth=5)
- client.grid(row=0, column=1, columnspan=3, padx=10, pady=10)
- Label(newWindow, text='The contractor: ').grid(row=1, column=0)
- contractor = Entry(newWindow, width=35, borderwidth=5)
- contractor.grid(row=1, column=1, columnspan=3, padx=10, pady=10)
- Label(newWindow, text='Deadline: ').grid(row=2, column=0)
- deadline = Entry(newWindow, width=35, borderwidth=5)
- deadline.grid(row=2, column=1, columnspan=3, padx=10, pady=10)
- Label(newWindow, text='Description: ').grid(row=3, column=0)
- description = Entry(newWindow, width=35, borderwidth=5)
- description.grid(row=3, column=1, columnspan=3, padx=10, pady=10)
- Label(newWindow, text='Project name: ').grid(row=4, column=0)
- name = Entry(newWindow, width=35, borderwidth=5)
- name.grid(row=4, column=1, columnspan=3, padx=10, pady=10)
- Label(newWindow, text='Price: ').grid(row=5, column=0)
- price = Entry(newWindow, width=35, borderwidth=5)
- price.grid(row=5, column=1, columnspan=3, padx=10, pady=10)
- Label(newWindow, text='People involved: ').grid(row=6, column=0)
- people = Entry(newWindow, width=35, borderwidth=5)
- people.grid(row=6, column=1, columnspan=3, padx=10, pady=10)
- Label(newWindow, text='Initiator').grid(row=7, column=0)
- initiator = Entry(newWindow, width=35, borderwidth=5)
- initiator.grid(row=7, column=1, columnspan=3, padx=10, pady=10)
- # create the add contract button
- add_c = Button(newWindow, text = "Add contract", command=add)
- add_c.grid(row=8, column=0)
- def update():
- def up():
- chain.update_contract(int(iden.get()), term.get(), update_value.get(), name.get())
- newWindow.destroy()
- print('update pending approval')
- newWindow = Toplevel(root)
- newWindow.title('Update terms')
- Label(newWindow, text='Contract id: ').grid(row=0, column=0)
- iden = Entry(newWindow, width=35, borderwidth=5)
- iden.grid(row=0, column=1, columnspan=3, padx=10, pady=10)
- Label(newWindow, text='Term: ').grid(row=1, column=0)
- term = Entry(newWindow, width=35, borderwidth=5)
- term.grid(row=1, column=1, columnspan=3, padx=10, pady=10)
- Label(newWindow, text='New value: ').grid(row=2, column=0)
- update_value = Entry(newWindow, width=35, borderwidth=5)
- update_value.grid(row=2, column=1, columnspan=3, padx=10, pady=10)
- Label(newWindow, text='Name: ').grid(row=3, column=0)
- name = Entry(newWindow, width=35, borderwidth=5)
- name.grid(row=3, column=1, columnspan=3, padx=10, pady=10)
-
- Button(newWindow, text='Update', command=up).grid(row=4, column=0)
- def accept_update():
- def accept_up():
- c = comment.get()
- ans = awnser.get()
- if ans == 'False':
- ans = False
- else: ans = True
- if c == '':
- chain.accept_update(int(iden.get()), int(update_id.get()), ans, name.get())
- else:
- chain.accept_update(int(iden.get()), int(update_id.get()), ans, name.get(), c)
- newWindow.destroy()
- newWindow = Toplevel(root)
- newWindow.title('Update terms')
- Label(newWindow, text='Contract id: ').grid(row=0, column=0)
- iden = Entry(newWindow, width=35, borderwidth=5)
- iden.grid(row=0, column=1, columnspan=3, padx=10, pady=10)
- Label(newWindow, text='Update id: ').grid(row=1, column=0)
- update_id = Entry(newWindow, width=35, borderwidth=5)
- update_id.grid(row=1, column=1, columnspan=3, padx=10, pady=10)
- Label(newWindow, text='Awnser ').grid(row=2, column=0)
- awnser = Entry(newWindow, width=35, borderwidth=5)
- awnser.grid(row=2, column=1, columnspan=3, padx=10, pady=10)
- Label(newWindow, text='Name: ').grid(row=3, column=0)
- name = Entry(newWindow, width=35, borderwidth=5)
- name.grid(row=3, column=1, columnspan=3, padx=10, pady=10)
- Label(newWindow, text='Comment optional: ').grid(row=3, column=0)
- comment = Entry(newWindow, width=35, borderwidth=5)
- comment.grid(row=3, column=1, columnspan=3, padx=10, pady=10)
-
- Button(newWindow, text='Update', command=accept_up).grid(row=4, column=0)
-
- def view_updates():
- status =accept_status.get()
- if status == 'False':
- status = False
- else: status = True
- iden = int(accept_id.get())
- if status == None:
- pprint.pprint(chain.retrieve_updates(iden))
- else:
- pprint.pprint(chain.retrieve_updates(iden, status))
-
-
- Button(root, text="View contract", command=myClick).grid(row=0, column=0)
- Button(root, text="New contract", command=add_contract).grid(row=1, column=0)
- Button(root, text="Update contract", command=update).grid(row=2, column=0)
- Button(root, text="Accept updates", command=accept_update).grid(row=3, column=0)
- Button(root, text="View pending updates", command=view_updates).grid(row=4, column=0)
- root.mainloop()
|