Hijri_Converter / app.py
Pmuscat41's picture
Update app.py
518528d verified
raw
history blame contribute delete
No virus
9.1 kB
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)