Spaces:
Running
Running
import streamlit as st | |
import pandas as pd | |
from hijri_converter import Gregorian, Hijri | |
from datetime import date | |
# Add a sidebar with radio buttons | |
st.sidebar.title("Navigation") | |
option = st.sidebar.radio( | |
"Choose an option", | |
( | |
"Three Month Deadline Converter", | |
"60 Days Deadline Converter", | |
"90 Days Deadline Converter", | |
"Convert Hijri Date to Gregorian Date", | |
"Add 20 Years to Filing Date", | |
"Add 15 Years to Filing Date", | |
"Add 10 Years to Filing Date", | |
), | |
) | |
# Function to add days to a Hijri date | |
def add_hijri_days(hijri_date, days): | |
jd = hijri_date.to_jd() | |
new_jd = jd + days | |
new_hijri_date = Hijri.from_jd(new_jd) | |
return new_hijri_date | |
# Function to add months to a Hijri date | |
def add_hijri_months(hijri_date, months): | |
year = hijri_date.year | |
month = hijri_date.month | |
day = hijri_date.day | |
# Calculate new month and year | |
total_months = (year * 12 + (month - 1)) + months | |
new_year = total_months // 12 | |
new_month = total_months % 12 + 1 | |
try: | |
new_hijri_date = Hijri(new_year, new_month, day) | |
except ValueError: | |
# Day is invalid in the new month, so advance to first day of next month | |
total_months += 1 # Advance one more month | |
new_year = total_months // 12 | |
new_month = total_months % 12 + 1 | |
new_hijri_date = Hijri(new_year, new_month, 1) | |
return new_hijri_date | |
# Function to add years to a Hijri date | |
def add_hijri_years(hijri_date, years): | |
year = hijri_date.year + years | |
month = hijri_date.month | |
day = hijri_date.day | |
try: | |
new_hijri_date = Hijri(year, month, day) | |
except ValueError: | |
# Day is invalid in the new month, advance to first day of next month | |
if month == 12: | |
month = 1 | |
year += 1 | |
else: | |
month += 1 | |
new_hijri_date = Hijri(year, month, 1) | |
return new_hijri_date | |
# Function to calculate three month deadlines | |
def three_month_deadlines(): | |
st.title("Three Month Deadline Converter") | |
start_date = st.date_input("Select a Gregorian start date") | |
date_data = [] | |
if start_date: | |
# Convert start_date to Hijri | |
gregorian_date = Gregorian(start_date.year, start_date.month, start_date.day) | |
hijri_start_date = gregorian_date.to_hijri() | |
date_data.append( | |
{ | |
"Description": "Chosen Start Date", | |
"Hijri Date": hijri_start_date.isoformat(), | |
"Gregorian Date": gregorian_date.isoformat(), | |
} | |
) | |
# Add 3 Hijri months to Hijri date | |
deadline_hijri = add_hijri_months(hijri_start_date, 3) | |
# Convert deadline back to Gregorian | |
deadline_gregorian = deadline_hijri.to_gregorian() | |
date_data.append( | |
{ | |
"Description": "Deadline - three Hijri months from start date", | |
"Hijri Date": deadline_hijri.isoformat(), | |
"Gregorian Date": deadline_gregorian.isoformat(), | |
} | |
) | |
# Function to add months and store results | |
def add_months_and_store_from_deadline(deadline_hijri, months): | |
for i in range(1, months + 1): | |
future_hijri = add_hijri_months(deadline_hijri, i) | |
future_gregorian = future_hijri.to_gregorian() | |
description = f"{i} Hijri month extension from deadline" | |
date_data.append( | |
{ | |
"Description": description, | |
"Hijri Date": future_hijri.isoformat(), | |
"Gregorian Date": future_gregorian.isoformat(), | |
} | |
) | |
add_months_and_store_from_deadline(deadline_hijri, 3) | |
df = pd.DataFrame(date_data) | |
st.write("### Date Conversion Table") | |
st.dataframe(df) | |
# Function to calculate 60 days deadlines | |
def sixty_days_deadlines(): | |
st.title("60 Days Deadline Converter") | |
start_date = st.date_input("Select a Gregorian start date") | |
date_data = [] | |
if start_date: | |
# Convert start date to Hijri date | |
gregorian_date = Gregorian(start_date.year, start_date.month, start_date.day) | |
hijri_date = gregorian_date.to_hijri() | |
date_data.append( | |
{ | |
"Description": "Chosen Start Date", | |
"Hijri Date": hijri_date.isoformat(), | |
"Gregorian Date": gregorian_date.isoformat(), | |
} | |
) | |
# Add 60 days to Hijri date | |
deadline_hijri_date = add_hijri_days(hijri_date, 60) | |
# Convert deadline Hijri date to Gregorian date | |
deadline_gregorian_date = deadline_hijri_date.to_gregorian() | |
date_data.append( | |
{ | |
"Description": "Deadline - 60 Hijri days from start date", | |
"Hijri Date": deadline_hijri_date.isoformat(), | |
"Gregorian Date": deadline_gregorian_date.isoformat(), | |
} | |
) | |
df = pd.DataFrame(date_data) | |
st.write("### Date Conversion Table") | |
st.dataframe(df) | |
# Function to calculate 90 days deadlines | |
def ninety_days_deadlines(): | |
st.title("90 Days Deadline Converter") | |
start_date = st.date_input("Select a Gregorian start date") | |
date_data = [] | |
if start_date: | |
# Convert start date to Hijri date | |
gregorian_date = Gregorian(start_date.year, start_date.month, start_date.day) | |
hijri_date = gregorian_date.to_hijri() | |
date_data.append( | |
{ | |
"Description": "Chosen Start Date", | |
"Hijri Date": hijri_date.isoformat(), | |
"Gregorian Date": gregorian_date.isoformat(), | |
} | |
) | |
# Add 90 days to Hijri date | |
deadline_hijri_date = add_hijri_days(hijri_date, 90) | |
# Convert deadline Hijri date to Gregorian date | |
deadline_gregorian_date = deadline_hijri_date.to_gregorian() | |
date_data.append( | |
{ | |
"Description": "Deadline - 90 Hijri days from start date", | |
"Hijri Date": deadline_hijri_date.isoformat(), | |
"Gregorian Date": deadline_gregorian_date.isoformat(), | |
} | |
) | |
df = pd.DataFrame(date_data) | |
st.write("### Date Conversion Table") | |
st.dataframe(df) | |
# Function to convert Hijri date to Gregorian date | |
def convert_hijri_to_gregorian(): | |
st.title("Convert Hijri Date to Gregorian Date") | |
# Inputs for Hijri year, month, and day | |
hijri_year = st.number_input("Enter Hijri Year:", min_value=1, step=1) | |
hijri_month = st.number_input("Enter Hijri Month:", min_value=1, max_value=12, step=1) | |
hijri_day = st.number_input("Enter Hijri Day:", min_value=1, max_value=30, step=1) | |
if st.button("Convert"): | |
try: | |
# Create Hijri date | |
hijri_date = Hijri(int(hijri_year), int(hijri_month), int(hijri_day)) | |
# Convert Hijri date to Gregorian date | |
gregorian_date = hijri_date.to_gregorian() | |
st.write(f"The Gregorian date is: {gregorian_date.isoformat()}") | |
except ValueError as e: | |
st.error(f"Invalid Hijri date: {e}") | |
# Function to add years to filing date according to Hijri calendar | |
def add_years_to_filing_date(years): | |
st.title(f"Add {years} Years to Filing Date") | |
filing_date = st.date_input("Select a Gregorian filing date") | |
date_data = [] | |
if filing_date: | |
# Convert filing date to Hijri date | |
gregorian_date = Gregorian(filing_date.year, filing_date.month, filing_date.day) | |
hijri_date = gregorian_date.to_hijri() | |
date_data.append( | |
{ | |
"Description": "Filing Date", | |
"Hijri Date": hijri_date.isoformat(), | |
"Gregorian Date": gregorian_date.isoformat(), | |
} | |
) | |
# Add years to Hijri date | |
future_hijri_date = add_hijri_years(hijri_date, years) | |
# Convert future Hijri date to Gregorian date | |
future_gregorian_date = future_hijri_date.to_gregorian() | |
date_data.append( | |
{ | |
"Description": f"Date after adding {years} Hijri years", | |
"Hijri Date": future_hijri_date.isoformat(), | |
"Gregorian Date": future_gregorian_date.isoformat(), | |
} | |
) | |
df = pd.DataFrame(date_data) | |
st.write(f"### Date Conversion Table ({years} Hijri Years Added)") | |
st.dataframe(df) | |
# Sidebar navigation using radio buttons | |
if option == "Three Month Deadline Converter": | |
three_month_deadlines() | |
elif option == "60 Days Deadline Converter": | |
sixty_days_deadlines() | |
elif option == "90 Days Deadline Converter": | |
ninety_days_deadlines() | |
elif option == "Convert Hijri Date to Gregorian Date": | |
convert_hijri_to_gregorian() | |
elif option == "Add 20 Years to Filing Date": | |
add_years_to_filing_date(20) | |
elif option == "Add 15 Years to Filing Date": | |
add_years_to_filing_date(15) | |
elif option == "Add 10 Years to Filing Date": | |
add_years_to_filing_date(10) | |