Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import pandas as pd | |
| import requests | |
| # Function to fetch exchange rates and convert | |
| def currency_exchange(amount_usd, amount_try): | |
| try: | |
| # Fetch exchange rates (USD -> PKR, TRY -> PKR) | |
| url = "https://api.exchangerate.host/latest?base=USD&symbols=PKR,TRY" | |
| response = requests.get(url) | |
| data = response.json() | |
| usd_to_pkr = data["rates"]["PKR"] | |
| usd_to_try = data["rates"]["TRY"] | |
| # Now get TRY -> PKR rate via USD as intermediary | |
| try_to_pkr = usd_to_pkr / usd_to_try | |
| converted_usd = round(amount_usd * usd_to_pkr, 2) | |
| converted_try = round(amount_try * try_to_pkr, 2) | |
| return usd_to_pkr, try_to_pkr, converted_usd, converted_try | |
| except Exception as e: | |
| return f"Error: {e}", None, None, None | |
| # Salary Distributor Function with Tree Structure Output | |
| def salary_distributor_tree(gross, categories_input): | |
| try: | |
| lines = categories_input.strip().split("\n") | |
| categories = [] | |
| for line in lines: | |
| parts = line.split(",") | |
| if len(parts) != 3: | |
| continue | |
| name, mode, value = parts | |
| value = float(value) | |
| amount = (gross * value / 100) if mode.strip() == "%" else value | |
| categories.append({ | |
| "name": name.strip(), | |
| "mode": mode.strip(), | |
| "value": value, | |
| "amount": round(amount, 2) | |
| }) | |
| total_allocated = sum(c["amount"] for c in categories) | |
| remaining = round(gross - total_allocated, 2) | |
| # Create a tree-like representation | |
| tree_lines = [f"Gross Salary: {gross}"] | |
| for cat in categories: | |
| tree_lines.append(f" ββ {cat['name']} ({cat['mode']} {cat['value']}): {cat['amount']}") | |
| tree_lines.append(f" ββ Remaining: {remaining}") | |
| tree_str = "\n".join(tree_lines) | |
| df = pd.DataFrame(categories) | |
| return tree_str, df, round(total_allocated, 2), remaining | |
| except Exception as e: | |
| return f"Error: {e}", pd.DataFrame(), 0, 0 | |
| with gr.Blocks() as demo: | |
| gr.Markdown("## Salary Distributor Calculator (Tree View) + Currency Exchange") | |
| with gr.Tab("Salary Distributor"): | |
| with gr.Row(): | |
| gross_salary = gr.Number(label="Gross Salary", value=1000) | |
| categories_input = gr.Textbox( | |
| label="Categories (name, mode, value)", | |
| value="Taxes,%,20\nSavings,%,10\nRent,fixed,300\nBills,%,5", | |
| lines=6 | |
| ) | |
| output_tree = gr.Textbox(label="Salary Distribution Tree", lines=10) | |
| output_table = gr.Dataframe(headers=["Category", "Mode", "Value", "Amount"], datatype=["str", "str", "number", "number"]) | |
| total_output = gr.Number(label="Total Allocated") | |
| remaining_output = gr.Number(label="Remaining") | |
| run_btn = gr.Button("Calculate") | |
| run_btn.click(fn=salary_distributor_tree, inputs=[gross_salary, categories_input], outputs=[output_tree, output_table, total_output, remaining_output]) | |
| with gr.Tab("Currency Exchange"): | |
| with gr.Row(): | |
| amount_usd = gr.Number(label="Amount in USD", value=1) | |
| amount_try = gr.Number(label="Amount in TRY", value=1) | |
| usd_to_pkr_rate = gr.Number(label="USD to PKR Rate") | |
| try_to_pkr_rate = gr.Number(label="TRY to PKR Rate") | |
| converted_usd = gr.Number(label="Converted USD to PKR") | |
| converted_try = gr.Number(label="Converted TRY to PKR") | |
| convert_btn = gr.Button("Convert") | |
| convert_btn.click(fn=currency_exchange, inputs=[amount_usd, amount_try], outputs=[usd_to_pkr_rate, try_to_pkr_rate, converted_usd, converted_try]) | |
| demo.launch() | |