CoolFace
Apppublic

SakshithBillava/My_app

sourceHugging Faceupdated 3y agoView on Hugging Face
0likes
app.py476 linesDownload Raw Back to root
1import streamlit as st2import pandas as pd3import numpy as np4from bokeh.plotting import figure5import streamlit_authenticator as stauth6import pymongo7import database as dbase8import updation as upd9from PIL import Image10from streamlit_option_menu import option_menu11from streamlit_custom_notification_box import custom_notification_box as scnb12import matplotlib.pyplot as plt13import plotly.express as px14import seaborn as sns 15 16 17original_title = '<p style="font-family:Bodoni MT Black; color:white; font-size: 60px;">EXPENSE MANAGER</p>'18st.markdown(original_title,unsafe_allow_html=True)19 20login = Image.open("login.jpg")21#names = ['sakshith','shaun','abcd']22#usernames = ['sakshith2002','rds','abd17']23#password = ['2002','2001','2003']24 25bckg_img = """26<style> 27[data-testid = "stAppViewContainer"] {28background-image: url("https://wallpaperaccess.com/full/2200497.jpg");29background-size = cover;30}31 32</style>33"""34#st.markdown(bckg_img, unsafe_allow_html=True)35 36def update():37    st.session_state.confirm_add_user = True38    if(st.session_state.confirm_add_user==True and len(st.session_state.l)==3):39        upd.update_user(st.session_state.l[0],st.session_state.l[1],st.session_state.l[2])40        st.sidebar.success("New user aded successfully")41        st.sidebar.warning("LOGIN TO CONTINUE")42        43        st.session_state.category_dict = {44                "Username": st.session_state.username,45                "Food": 0,46                "Rent": 0,47                "Lifestyle": 0,48                "Travel": 049            }50        collection4.insert_one(st.session_state.category_dict)51        st.session_state.confirm_add_user = False52        53 54 55@st.cache_resource56def init_connection():57    return pymongo.MongoClient(**st.secrets["mongo"])58client = pymongo.MongoClient("mongodb+srv://sakshith2002:admin@cluster0.frpdmtc.mongodb.net/?retryWrites=true&w=majority")59 60db = client.Expenses61collection2 = db.user_credentials62st.session_state.get_cred_item = list(db.user_credentials.find())63collection3 = db.user_expenses64st.session_state.get_user_data = list(db.user_expenses.find())65collection4 = db.user_expense_data66st.session_state.get_user_portfolio = list(db.user_expense_data.find())67 68if "username" not in st.session_state:69    st.session_state.username = ""70st.session_state.current_user_portfolio = []71for i in st.session_state.get_user_portfolio:72    if(st.session_state.username==i['Username']):73        st.session_state.current_user_portfolio.append(i)74 75if "was_logged_in" not in st.session_state:76    st.session_state.was_logged_in = False77 78 79 80d = {}81d2 = {}82for i in st.session_state.get_cred_item:83    d1 = {}84    d1["name"] = i['names']85    d1["password"] = i['password']86    d2[i['username']] = d187 88d["usernames"] = d289 90st.session_state.list_of_usernames = []91for i in st.session_state.get_cred_item:92    st.session_state.list_of_usernames.append(i['username'])93 94#print(st.session_state.list_of_usernames)95 96if "login" not in st.session_state:97    st.session_state.login = True98 99 100credentials = {101        "usernames":{102            "sakshith2002":{103                "name":"sakshith",104                "password":"$2b$12$EsUyWrvHb.JUaz5L8G8x6uG5zi73ZhxS7Dhn61IwlQJqwGzJns.Ea"105                },106            "rds":{107                "name":"shaun",108                "password":"$2b$12$TErpIHkdK0k7B7JQS6dlMevhry4hduFo3rtTN6UW800B7wgRA8Xy6"109                },110            "hg":{111                "name":"abcd",112                "password":"$2b$12$CSi12pOLeLmDTeZZDitQYuY8tEGGpS85l5awPuDluYq5WPDUFkVRu"113            }            114            }115        }116 117st.session_state.authenticator = stauth.Authenticate(d,"expense_cookie","abcdef",cookie_expiry_days=10)118if "input_display" not in st.session_state:119    st.session_state.input_display = True120def add_new_user(): 121    if(st.session_state.display and st.session_state.input_display and st.session_state.isLogged==False):122        st.session_state.l = []123        st.session_state.name = st.text_input("Enter your Name",key = 1)124        st.session_state.username = st.text_input("Enter your Username",key = 2)125        st.session_state.password = st.text_input("Enter the Password",key = 3, type = "password")126        if(st.session_state.username!="" and st.session_state.name!="" and st.session_state.password!=""):127            st.session_state.l.append(st.session_state.username)128            st.session_state.l.append(st.session_state.name)129            st.session_state.l.append(st.session_state.password)130        if(st.button("SIGN UP") and len(st.session_state.l)==3):131            st.session_state.input_display = False132            update()133            #st.warning("LOGIN TO CONTINUE")134        135         136    137    #if(st.session_state.confirm_add):138    #    st.warning("LOGIN TO CONTINUE")139if "isLogged" not in st.session_state:140    st.session_state.isLogged = False141with st.sidebar:142    st.session_state.selected = option_menu("User Menu", ["Home","Login", 'Sign Up(New user)',"About"], 143        icons=["house",'unlock', 'person',"info"], menu_icon="cast",default_index = 1)144    145    if "confirm_add_user" not in st.session_state:146        st.session_state.confirm_add_user = False147    if "display" not in st.session_state:148        st.session_state.display = False149    if(len(st.session_state.selected)!=0):150        st.session_state.display = True151    152    if(st.session_state.selected=="Sign Up(New user)" and st.session_state.display):153        #st.session_state.input_display = True154        if(st.session_state.isLogged == True):155            st.warning("PLEASE LOGOUT TO ADD NEW USER")156        if(st.session_state.input_display == False):157            st.success("LOGIN TO CONTINUE")158            st.warning("User already added")159        st.session_state.added = add_new_user()160 161    elif(st.session_state.selected == "About"):162        text = '<p style=" color:white; font-size: 15px;"><b>This is an Expenser Manager <br> where you can manage all your<br>expense in one place.</b></p>'163        st.markdown(text,unsafe_allow_html=True)164        165    166    elif(st.session_state.selected=="Login"):167        #authenticator = stauth.Authenticate(credentials,"expense_cookie","abcdef",cookie_expiry_days=1)168 169        st.session_state.name,st.session_state.authentication_status,st.session_state.username = st.session_state.authenticator.login("login","main")170        if(st.session_state.authenticator.logout("LOGOUT","sidebar")):171            st.session_state.login = False172            st.session_state.isLogged = False173            st.session_state.was_logged_in = False174 175        if(st.session_state.authentication_status):176            st.session_state.isLogged = True177            st.session_state.was_logged_in = True178            st.success("SUCCESSFULLY LOGGED IN")179            st._main.success("Welcome " + st.session_state.name)180            st.balloons()181        else:182            st.session_state.isLogged = False183            st.write("Logged Out")184        #@st.experimental_singleton  185        collection1 = db.myexpense186 187if(st.session_state.authentication_status and st.session_state.selected=="Login"):188    #login_success = Image.open("login_success.png")189    #st.image(login_success)190    bckg_img_for_login = """191    <style>192    [data-testid = "stAppViewContainer"] {193    background-image: url("https://images.pexels.com/photos/9486675/pexels-photo-9486675.jpeg?cs=srgb&dl=pexels-rocketmann-team-9486675.jpg&fm=jpg");194    background-size: cover;195    }196    [data-testid = "stHeader"]{197    background-color: rgba(0,0,0,0);198    }199    [data-testid = "stToolbar"]{200    right: 2rem;201    }202    </style>203    """204    st.markdown(bckg_img_for_login,unsafe_allow_html=True)205    206elif(st.session_state.isLogged==False and st.session_state.selected=="Login"):207    bckg_img_for_login = """208    <style>209    [data-testid = "stAppViewContainer"] {210    background-image: url("https://i.ibb.co/zS7XKNR/login-to-continue-1.png");211    background-size = cover;212    }213    [data-testid = "stHeader"]{214    background-color: rgba(0,0,0,0);215    }216    [data-testid = "stToolbar"]{217    right: 2rem;218    }219    </style>220    """221    st.markdown(bckg_img_for_login, unsafe_allow_html=True)222elif(st.session_state.selected=="Sign Up(New user)"):223    #sign_up = Image.open("sign_up.png")224    #sign_up_text = Image.open("sign_up_text.jpg")225    #st.image(sign_up)226    #st.image(sign_up_text) 227    bckg_img_for_sign_up = """228    <style>229    [data-testid = "stAppViewContainer"] {230    background-image: url("https://i.ibb.co/b3KC8xG/PLEASE-SIGN-UP-1-1.png");231    background-size : cover;232    }233    [data-testid = "stHeader"]{234    background-color: rgba(0,0,0,0);235    }236    [data-testid = "stToolbar"]{237    right: 2rem;238    }239    </style>240    """ 241    st.markdown(bckg_img_for_sign_up,unsafe_allow_html=True)242if(st.session_state.selected=="Home" and st.session_state.isLogged==False):243    bckg_img_for_home = """244    <style>245    [data-testid = "stAppViewContainer"] {246    background-image: url("https://img.freepik.com/premium-vector/success-money-motivational-quotes-white-black-background-vector-script-lettering-as-t-shirt-print-poster-banner-greeting-card-time-is-money-keep-calm-business-finance-concept_504907-329.jpg?w=2000");247    background-size : cover;248    }249    [data-testid = "stHeader"]{250    background-color: rgba(0,0,0,0);251    }252    [data-testid = "stToolbar"]{253    right: 2rem;254    }255    </style>256    """ 257    st.markdown(bckg_img_for_home,unsafe_allow_html=True)258 259if "click" not in st.session_state:260    st.session_state.click = False261 262if "goOn" not in st.session_state:263    st.session_state.goOn = False264 265def callback():266    st.session_state.click = True267 268 269def Commit():270    st.session_state.click = False271    st.session_state.confirm = True272    if(st.session_state.confirm):273        collection3.insert_one(st.session_state.item)274        st.session_state.goOn = True275        st.session_state.confirm = False276        277def Commit_user_expense_data(case,updated_value):278    if(case==1):279        st.session_state.new_data = {"$set": {"Food": updated_value}}280        collection4.update_one(st.session_state.previous_query,st.session_state.new_data)281    elif(case==2):282        st.session_state.new_data = {"$set": {"Rent": updated_value}}283        collection4.update_one(st.session_state.previous_query,st.session_state.new_data)284    elif(case==3):285        st.session_state.new_data = {"$set": {"Lifestyle": updated_value}}286        collection4.update_one(st.session_state.previous_query,st.session_state.new_data)287    elif(case==4):288        st.session_state.new_data = {"$set": {"Travel": updated_value}}289        collection4.update_one(st.session_state.previous_query,st.session_state.new_data)290 291def cancel_clicked():292    st.session_state.click = False293 294if "proceed_with_user_expense_data" not in st.session_state:295    st.session_state.proceed_with_user_expense_data = False296 297if(st.session_state.authentication_status==True and st.session_state.selected =="Home" ):298    if(st.button("CLICK HERE TO ADD YOUR EXPENSE OR INCOME",on_click=callback) or st.session_state.click):299        st.button("CANCEL",on_click=cancel_clicked)300        options = ["Income","Expenditure"]301        def Income():302            st.session_state.option = 1303        def Expenditure():304            st.session_state.option = 0305        type = st.radio("Select the appropriate",options=options)306        if(type=="Income"):307            Income()308        else:309            Expenditure()310        if(st.session_state.option==0):311            category = ["Food","Rent","Lifestyle","Travel"]312            st.session_state.category_input = st.radio("Select the category",options=category)313        if(st.session_state.option==1):314            st.session_state.income = st.number_input("Enter the income amount")315        else:316            st.session_state.expense = st.number_input("Enter the expense amount")317        st.session_state.date = st.date_input("Date of transaction")318        st.session_state.date = st.session_state.date.strftime('%m/%d/%Y')319 320        if(st.session_state.option==1):321            st.session_state.item = {322                "Username": st.session_state.username,323                "Option": st.session_state.option,324                "Category": "NA",325                "Amount": st.session_state.income,326                "Date": st.session_state.date327            }328        elif(st.session_state.option==0): 329            st.session_state.item = {330                "Username": st.session_state.username,331                "Option": st.session_state.option,332                "Category": st.session_state.category_input,333                "Amount": st.session_state.expense,334                "Date": st.session_state.date335            }336 337        st.button("CONFIRM",on_click=Commit)338 339def done():340    if(st.session_state.option==0):341        if(st.session_state.category_input=="Food"):342            st.session_state.previous_query = {"Username": st.session_state.username,"Food": st.session_state.current_user_portfolio[0]["Food"]}343            st.session_state.updated_food_cost = st.session_state.current_user_portfolio[0]["Food"] + st.session_state.expense344            case=1345            Commit_user_expense_data(case,st.session_state.updated_food_cost)346            st.session_state.goOn=False347        elif(st.session_state.category_input=="Rent"):348            st.session_state.previous_query = {"Username": st.session_state.username,"Rent": st.session_state.current_user_portfolio[0]["Rent"]}349            st.session_state.updated_rent_cost = st.session_state.current_user_portfolio[0]["Rent"] + st.session_state.expense350            case=2351            Commit_user_expense_data(case,st.session_state.updated_rent_cost)352            st.session_state.goOn=False353        elif(st.session_state.category_input=="Lifestyle"):354            st.session_state.previous_query = {"Username": st.session_state.username,"Lifestyle": st.session_state.current_user_portfolio[0]["Lifestyle"]}355            st.session_state.updated_lifestyle_cost = st.session_state.current_user_portfolio[0]["Lifestyle"] + st.session_state.expense356            case=3357            Commit_user_expense_data(case,st.session_state.updated_lifestyle_cost)358            st.session_state.goOn=False359        elif(st.session_state.category_input=="Travel"):360            st.session_state.previous_query = {"Username": st.session_state.username,"Travel": st.session_state.current_user_portfolio[0]["Travel"]}361            st.session_state.updated_travel_cost = st.session_state.current_user_portfolio[0]["Travel"] + st.session_state.expense362            case=4363            Commit_user_expense_data(case,st.session_state.updated_travel_cost)364            st.session_state.goOn=False365 366if(st.session_state.goOn==True):367    done()368    369 370 371#print(st.session_state.username)372#print(st.session_state.get_user_data)373st.session_state.current_user_data = []374for i in st.session_state.get_user_data:375    if(i["Username"]==st.session_state.username):376        st.session_state.current_user_data.append(i)377 378#print(st.session_state.current_user_data)379st.session_state.user_budget = 0380for i in st.session_state.current_user_data:381    if(i['Option']==1):382        st.session_state.user_budget += i['Amount']383#print(st.session_state.user_budget)384 385st.session_state.category_dict = {}386st.session_state.user_dataframe = pd.DataFrame.from_dict(st.session_state.current_user_data)387 388for i in st.session_state.current_user_portfolio:389    st.session_state.category_dict["Food"] = i["Food"]390    st.session_state.category_dict["Rent"] = i["Rent"]391    st.session_state.category_dict["Lifestyle"] = i["Lifestyle"]392    st.session_state.category_dict["Trvel"] = i["Travel"]393 394        395st.session_state.users_expense_category = []396st.session_state.users_expense_amounts = []397sizes = st.session_state.users_expense_amounts398labels = st.session_state.users_expense_category 399for i,j in st.session_state.category_dict.items():400    st.session_state.users_expense_category.append(i)401    st.session_state.users_expense_amounts.append(j)402 403#print(st.session_state.users_expense_category)404#print(st.session_state.users_expense_amounts)405if(st.session_state.selected=="About"):406    bckg_img_for_about = """407    <style>408    [data-testid = "stAppViewContainer"] {409    background-image: url("https://w0.peakpx.com/wallpaper/730/772/HD-wallpaper-dollars-dark-money-us-dollars-us.jpg");410    background-size : auto;411    }412    [data-testid = "stHeader"]{413    background-color: rgba(0,0,0,0);414    }415    [data-testid = "stToolbar"]{416    right: 2rem;417    }418    </style>419    """ 420    st.markdown(bckg_img_for_about,unsafe_allow_html=True)421 422 423try:424    if(len(st.session_state.users_expense_amounts)!=0 and st.session_state.selected=="Home"):425        col1,col2,col3 = st.columns(3)426        coll1,coll2,coll3 = st.columns(3)427        st.session_state.total_expense = sum(sizes)428        st.session_state.budget_left = st.session_state.user_budget-st.session_state.total_expense429        st.session_state.budget_percentage_left = f'{(st.session_state.budget_left*100)/st.session_state.user_budget}%'430        st.session_state.budget_percentage_spent = f'{(st.session_state.total_expense*100)/st.session_state.user_budget}%'431        col1.metric("TOTAL BUDGET",st.session_state.user_budget,'100%')432        col2.metric("TOTAL SPENT",st.session_state.total_expense,st.session_state.budget_percentage_spent)433        col3.metric("BUDGET LEFT",st.session_state.budget_left,st.session_state.budget_percentage_left)434        coll1.metric("BUDGET SPENT PERCENTAGE",st.session_state.budget_percentage_spent)435        coll2.metric("BUDGET LEFT PERCENTAGE",st.session_state.budget_percentage_left)436        if(st.session_state.total_expense>st.session_state.user_budget):437            """ALERT!! 438               Your budget has gone over limit"""439        440        cols = st.columns([1, 1])441        with cols[0]:442            fig1 = px.pie(values=sizes,names=labels,hover_name=labels)443            fig1.update_layout(margin = dict(l=1,r=1,b=1,t=1),width=400,height=400 ,font=dict(color='#383635',size=15))444            st.write(fig1)445 446        with cols[1]:447            ll = []448            ll.append(sizes)449            chart_data = pd.DataFrame(450            np.array(ll),451            columns=labels)452 453            st.bar_chart(chart_data)454 455        dict_of_items = {}456        dict_of_items['Category'] = labels457        dict_of_items['Amount Spent'] = sizes458        new_df = pd.DataFrame.from_dict(dict_of_items)459        new_df = new_df.set_index('Category')460        fig4 = st.bar_chart(new_df,height=400,width=100,)461            462 463        updated_df = st.session_state.user_dataframe.drop('_id',axis=1)464        st.table(updated_df)465 466except KeyError as e:467    pass    468except ZeroDivisionError as er:469    pass470    471        472 473        474 475 476