File size: 6,593 Bytes
e3b9b11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6600632
e3b9b11
 
 
 
 
 
 
 
 
 
 
6600632
e3b9b11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e692e9d
 
 
 
 
 
 
e3b9b11
e692e9d
e3b9b11
 
 
e692e9d
 
 
e3b9b11
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
import streamlit as st
from pytezos import pytezos
import pandas as pd

pytezos = pytezos.using(shell = 'https://rpc.tzkt.io/ghostnet', key='edsk3MrRkoidY2SjEgufvi44orvyjxgZoy4LhaJNTNcddWykW6SssL')
contract = pytezos.contract('KT1KvCVKiZhkPG8s9CCoxW3r135phk2HhZUV')

def welcome():
    return "Welcome To Decentralised Medical Records"

def addUser():
  name = st.text_input("Enter Full Name of the Patient")
  email = st.text_input("Enter Email of the Patient")
  number = st.number_input("Enter the Contact Number", step=1, min_value=1)
  age = st.number_input("Enter Age", step=1, min_value=18)
  gender = st.radio("Enter Gender", ('Male', 'Female'))
  #Hid = st.text_input("Enter your Unique Hospital Id")
  #hospital=st.text_input("Enter the Hospital details")


  if st.button("Register Patient"):
    a = pytezos.using(shell = 'https://rpc.tzkt.io/ghostnet', key='edsk3MrRkoidY2SjEgufvi44orvyjxgZoy4LhaJNTNcddWykW6SssL')
    contract = a.contract('KT1KvCVKiZhkPG8s9CCoxW3r135phk2HhZUV')

    contract.addUser(email = email, name = name, age = age, gender = gender,  number = number).with_amount(0).as_transaction().fill().sign().inject()   


def ViewPatientRecord():
  Hid = st.text_input("Enter Unique Hospital Id of Patient")
  if st.button("View Records"):
    usds = pytezos.using(shell = 'https://rpc.tzkt.io/ghostnet').contract('KT1KvCVKiZhkPG8s9CCoxW3r135phk2HhZUV')
    #print (usds.storage())#debug
    #print(list(usds.storage().keys())[0])

    #if email is in storage... print record
    if Hid in list(usds.storage().keys()):
        st.text(usds.storage())
        #print(usds.storage())
        #st.text(list(usds.storage().keys())[0])
        #st.text(list(usds.storage().values()))
    else: 
        st.text('Not Found')
    #st.text(usds.storage[email]['Record']())
    
    
####################WIDGETS START ##################################

def filters_widgets(df, columns=None, allow_single_value_widgets=False):
    # Parse the df and get filter widgets based for provided columns
    if not columns: #if columns not provided, use all columns to create widgets
        columns=df.columns.tolist()
    if allow_single_value_widgets:
        threshold=0
    else:
        threshold=1
    widget_dict = {}
    filter_widgets = st.container()
    filter_widgets.warning(
        "After selecting filters press the 'Apply Filters' button at the bottom.")
    if not allow_single_value_widgets:
        filter_widgets.markdown("Only showing columns that contain more than 1 unique value.")
    with filter_widgets.form(key="data_filters"):
        not_showing = [] 
        for y in df[columns]:
            if str(y) in st.session_state: #update value from session state if exists
                selected_opts = st.session_state[str(y)]
            else: #if doesnt exist use all values as defaults
                selected_opts = df[y].unique().tolist()
            if len(df[y].unique().tolist()) > threshold: #checks if above threshold
                widget_dict[y] = st.multiselect(
                    label=str(y),
                    options=df[y].unique().tolist(),
                    default=selected_opts,
                    key=str(y),
                )
            else:#if doesnt pass threshold
                not_showing.append(y)
        if not_showing:#if the list is not empty, show this warning
            st.warning(
                f"Not showing filters for {' '.join(not_showing)} since they only contain one unique value."
            )
        submit_button = st.form_submit_button("Apply Filters")
    #reset button to return all unselected values back
    reset_button = filter_widgets.button(
        "Reset All Filters",
        key="reset_buttons",
        on_click=reset_filter_widgets_to_default,
        args=(df, columns),
    )
    filter_widgets.warning(
        "Dont forget to apply filters by pressing 'Apply Filters' at the bottom."
    )    

def reset_filter_widgets_to_default(df, columns):
    for y in df[columns]:
        if str(y) in st.session_state:
            del st.session_state[y]
            
####################WIDGETS END##################################
               
def main():
    
    st.set_page_config(page_title="Decentralised Health Vaccine Records")
   
    st.title("Blockchain Based Medical Records")
    st.markdown(
        """<div style="background-color:#e1f0fa;padding:10px">
                    <h1 style='text-align: center; color: #304189;font-family:Helvetica'><strong>
                    Vaccine Data </strong></h1></div><br>""",
        unsafe_allow_html=True,
    )


    st.markdown(
        """<p style='text-align: center;font-family:Helvetica;'>
                   This project greatly decreases any chances of misuse or the manipulation of the medical Records</p>""",
        unsafe_allow_html=True,
    )

    st.sidebar.title("Choose your entry point")
    st.sidebar.markdown("Select the entry point accordingly:")

    algo = st.sidebar.selectbox(
        "Select the Option", options=[
          "Register Patient",
          "View Patient Data"
          ]
    )

    if algo == "Register Patient":
        addUser()
    if algo == "View Patient Data":
        ViewPatientRecord()    
        
        
    st.write ('\n')
    st.write ('\n')
    st.write ('\n')

    
    #ledger start
    #get ledger data 
    
    st.subheader("Blockchain Ledger")
    st.write("Click to explore Blockchain ledger [link](https://ghostnet.tzkt.io/KT1KvCVKiZhkPG8s9CCoxW3r135phk2HhZUV/operations/)")
    
    
    ledger_data = pytezos.using(shell = 'https://rpc.tzkt.io/ghostnet').contract('KT1KvCVKiZhkPG8s9CCoxW3r135phk2HhZUV').storage() #.values()
    
    for x in ledger_data:
    	ledger = ledger_data.values()

    try:
    	df = pd.DataFrame(ledger, index=[0])
    	#filters_widgets(df)
    except:
        df = pd.DataFrame(ledger)#, index=[0])
        #filters_widgets(df)
    # Display the dataframe as a table
    st.write(df)	



if __name__ == "__main__":
    main() #streamlit-start
    import subprocess
    import uvicorn
    
    subprocess.run("uvicorn api.main:app --host 0.0.0.0 --port 7860", shell=True)    
    
    ############end table/ledger
   
#if __name__ == "__main__":
  #main()

  
  
#comments
      #ledger = {'age': 18, 'gender': 'Female', 'hospital': '', 'name': 'tesuser1', 'number': 41414, 'v1': False, 'v1Date': 0, 'v2': False, 'v2Date': 0}
    
#    data = [
#        {"Name": "Alice", "Age": 25, "City": "New York"},
#        {"Name": "Bob", "Age": 30, "City": "Paris"},
#        {"Name": "Charlie", "Age": 35, "City": "London"}
#    ]