mattoofahad
adding mutiple tab for each module
d769745
import pandas as pd
import streamlit as st
from functions import Functions, StreamlitFunctions
from logs import logger
def calculate_salary_parameters():
logger.info("Calculating based on Salary parameters")
st.session_state.type_to_calculate = "salary_parameters"
def calculate_initial_salary_parameter():
logger.info("Calculating based on Desired Salary")
st.session_state.type_to_calculate = "desired_salary"
def calculate_tax_on_current_salary():
logger.info("Calculating Tax on Current Salary")
st.session_state.type_to_calculate = "tax_on_current_salary"
def calculate_tax_on_yearly_salary():
logger.info("Calculating Tax on Yearly Salary")
st.session_state.type_to_calculate = "tax_on_yearly_salary"
StreamlitFunctions.initialize_session_values()
StreamlitFunctions.print_tax_brackets()
StreamlitFunctions.reset_tax_brackets()
tab1, tab2, tab3, tab4 = st.tabs(
[
"Tax on Monthly Salary",
"Tax on Yearly Salary",
"Final Desired Net Salary",
"Desired Salary Calculation",
]
)
with tab1:
StreamlitFunctions.print_tax_on_current_salary()
StreamlitFunctions.reset_tax_on_current_salary()
st.button(
"Calculate Tax on Current Salary",
use_container_width=True,
on_click=calculate_tax_on_current_salary,
)
with tab2:
StreamlitFunctions.print_tax_on_yearly_salary()
StreamlitFunctions.reset_tax_on_yearly_salary()
st.button(
"Calculate Tax on Yearly Salary",
use_container_width=True,
on_click=calculate_tax_on_yearly_salary,
)
with tab3:
StreamlitFunctions.initial_salary_parameter()
StreamlitFunctions.reset_initial_salary_parameter()
st.button(
"Calculate Based on Desired Net Salary",
use_container_width=True,
on_click=calculate_initial_salary_parameter,
)
with tab4:
StreamlitFunctions.print_salary_parameters()
StreamlitFunctions.reset_salary_parameters()
st.button(
"Calculate Based on Salary Parameters",
use_container_width=True,
on_click=calculate_salary_parameters,
)
if st.session_state.type_to_calculate is not None:
if st.session_state.type_to_calculate == "tax_on_current_salary":
initial_desired_net = Functions.calculated_current_salary_after_tax(
st.session_state.tax_on_current_salary, st.session_state.tax_brackets
)
elif st.session_state.type_to_calculate == "tax_on_yearly_salary":
initial_desired_net = Functions.calculated_yearly_salary_after_tax(
st.session_state.tax_on_yearly_salary, st.session_state.tax_brackets
)
elif st.session_state.type_to_calculate == "desired_salary":
initial_desired_net = st.session_state.user_initial_desired_net
elif st.session_state.type_to_calculate == "salary_parameters":
initial_desired_net = Functions.calculated_initial_desired_net(
st.session_state.current_salary,
st.session_state.desired_increment_percentage,
st.session_state.daily_cost_of_travel,
st.session_state.physical_days_per_week,
)
result = Functions.calculate_additional_amount(
initial_desired_net, st.session_state.tax_brackets
)
# Display how initial_desired_net was determined
st.markdown("---")
if st.session_state.type_to_calculate == "tax_on_current_salary":
st.success(
"βœ… Calculation was done based on the selected value of 'Tax on Current Salary'"
)
summary_df = pd.DataFrame(
{
"Parameter": [
"Current Salary",
"Tax",
"Gross Salary",
],
"Value": [
f"PKR {result['final_net_salary']:,.2f}",
f"PKR {result['tax']:,.2f}",
f"PKR {result['gross_salary_needed']:,.2f}",
],
}
)
elif st.session_state.type_to_calculate == "tax_on_yearly_salary":
st.success(
"βœ… Calculation was done based on the selected value of 'Tax on Yearly Salary'"
)
result = {key: value * 12 for key, value in result.items()}
summary_df = pd.DataFrame(
{
"Parameter": [
"Yearly Salary",
"Yearly Tax",
"Gross Yearly Salary",
],
"Value": [
f"PKR {result['final_net_salary']:,.2f}",
f"PKR {result['tax']:,.2f}",
f"PKR {result['gross_salary_needed']:,.2f}",
],
}
)
elif st.session_state.type_to_calculate == "desired_salary":
st.success(
"βœ… Calculation was done based on the selected value of 'Final Desired Net Salary'"
)
summary_df = pd.DataFrame(
{
"Parameter": [
"Final Net Salary",
"Tax",
"Gross Salary",
],
"Value": [
f"PKR {result['final_net_salary']:,.2f}",
f"PKR {result['tax']:,.2f}",
f"PKR {result['gross_salary_needed']:,.2f}",
],
}
)
elif st.session_state.type_to_calculate == "salary_parameters":
st.success(
"βœ… Calculation was done based on the selected values of 'Salary Parameters'"
)
summary_df = pd.DataFrame(
{
"Parameter": [
"Current Salary",
"Desired Increment",
"Daily Travel Cost",
"On-Site Days/Week",
"Gross Salary",
"Tax",
"Final Net Salary",
],
"Value": [
f"PKR {st.session_state.current_salary:,.2f}",
f"{st.session_state.desired_increment_percentage:.2%}",
f"PKR {st.session_state.daily_cost_of_travel:,.2f}",
f"{st.session_state.physical_days_per_week}",
f"PKR {result['gross_salary_needed']:,.2f}",
f"PKR {result['tax']:,.2f}",
f"PKR {result['final_net_salary']:,.2f}",
],
}
)
st.header("Salary Calculation Results")
col1, col2 = st.columns(2)
with col1:
# custom_metric("Initial Desired Net Salary", result['initial_desired_net'])
StreamlitFunctions.custom_metric("Final Net Salary", result["final_net_salary"])
StreamlitFunctions.custom_metric("Tax", result["tax"])
with col2:
# custom_metric("Additional Amount Needed", result['additional_amount'])
StreamlitFunctions.custom_metric(
"Gross Salary Needed", result["gross_salary_needed"]
)
# Display a summary of the calculation
st.subheader("Calculation Summary")
st.data_editor(summary_df, use_container_width=True, hide_index=True)
st.session_state.type_to_calculate = None